導航:首頁 > 編程語言 > python插值法

python插值法

發布時間:2022-09-11 22:13:23

A. 如何通過python實現三次樣條插值

spline函數可以實現三次樣條插值 x = 0:10; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx); plot(x,y,'o',xx,yy) 另外fnplt csapi這兩個函數也是三次樣條插值函數,具體你可以help一下!

B. 自己寫的拉格朗日插值法python,但是有錯誤,幫忙修改!

您好,一般地,若已知y=f(x)在互不相同 n+1 個點x0,x1,x2...,xn處的函數值y0,y1,y2...,yn( 即該函數過(x0,y0)(x1,y1)(x2,y2)...(xn,yn)這n個點),則可以考慮構造一個過這n+1 個點的、次數不超過n的多項式y=Pn(x),使其滿足:
Pn(xk)=yk, k=0,1,2,...,n (*)
要估計任一點ξ,ξ≠xi,i=0,1,2,...,n,則可以用Pn(ξ)的值作為准確值f(ξ)的近似值,此方法叫做「插值法」。
稱式(*)為插值條件(准則),含xi(i=0,1,...,n)的最小區間[a,b](a=min{x0,x1,...,xn},b=max{x0,x1,...,xn})
定理
滿足插值條件的、次數不超過n的多項式是存在而且是唯一的。

C. python 拉格朗日插值 不能超過多少個值

拉格朗日插值Python代碼實現

1. 數學原理

對某個多項式函數有已知的k+1個點,假設任意兩個不同的都互不相同,那麼應用拉格朗日插值公式所得到的拉格朗日插值多項式為:

直接編寫程序,可以直接插值,並且得到對應的函數值。但是不能得到系數,也不能對其進行各項運算。

123456789101112defh(x,y,a):ans=0.0foriinrange(len(y)):t=y[i]forjinrange(len(y)):ifi !=j:t*=(a-x[j])/(x[i]-x[j])ans+=treturnansx=[1,0]y=[0,2]print(h(x,y,2))

上述代碼中,h(x,y,a)就是插值函數,直接調用就行。參數說明如下:

D. python 線性插值

不知道有沒有,可能python數學相關的庫里會有吧

不過你寫的也不對啊,取3個值,應該是4均分。

>>>defjunfen(start,end,num):
k=(end-start)/(num+1)
returnset([start+item*kforiteminrange(1,num+1)])

E. python怎樣對矩陣進行插值

首先需要創建數組才能對其進行其它操作。
我們可以通過給array函數傳遞Python的序列對象創建數組,如果傳遞的是多層嵌套的序列,將創建多維數組(下例中的變數c):
>>> a = np.array([1, 2, 3, 4])
>>> b = np.array((5, 6, 7, 8))
>>> c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
>>> b
array([5, 6, 7, 8])
>>> c
array([[1, 2, 3, 4],
[4, 5, 6, 7],
[7, 8, 9, 10]])
>>> c.dtype
dtype('int32')

數組的大小可以通過其shape屬性獲得:
>>> a.shape
(4,)
>>> c.shape

F. 在Python程序中的插值誤差問題,怎麼解決

代碼如下所示:import numpy as npfrom matplotlib import pyplot as pltfrom scipy.interpolate import interp1dx=np.linspace(0,10*np.pi,num=20)y=np.sin(x)f1=interp1d(x,y,kind='linear')#線性插值f2=interp1d(x,y,kind='cubic')#三次樣條插值x_pred=np.linspace(0,10*np.pi,num=1000)y1=f1(x_pred)y2=f2(x_pred)plt.figure()plt.plot(x_pred,y1,'r',label='linear')plt.plot(x,f1(x),'b--','origin')plt.legend()plt.show()plt.figure()plt.plot(x_pred,y2,'b--',label='cubic')plt.legend()plt.show()

G. 雙線性插值法原理 python實現

碼字不易,如果此文對你有所幫助,請幫忙點贊,感謝!

一. 雙線性插值法原理:

        ① 何為線性插值?

        插值就是在兩個數之間插入一個數,線性插值原理圖如下:

        ② 各種插值法:

        插值法的第一步都是相同的,計算目標圖(dstImage)的坐標點對應原圖(srcImage)中哪個坐標點來填充,計算公式為:

        srcX = dstX * (srcWidth/dstWidth)

        srcY = dstY * (srcHeight/dstHeight)

        (dstX,dstY)表示目標圖像的某個坐標點,(srcX,srcY)表示與之對應的原圖像的坐標點。srcWidth/dstWidth 和 srcHeight/dstHeight 分別表示寬和高的放縮比。

        那麼問題來了,通過這個公式算出來的 srcX, scrY 有可能是小數,但是原圖像坐標點是不存在小數的,都是整數,得想辦法把它轉換成整數才行。

        不同插值法的區別就體現在 srcX, scrY 是小數時,怎麼將其變成整數去取原圖像中的像素值。

        最近鄰插值(Nearest-neighborInterpolation):看名字就很直白,四捨五入選取最接近的整數。這樣的做法會導致像素變化不連續,在目標圖像中產生鋸齒邊緣。

        雙線性插值(Bilinear Interpolation):雙線性就是利用與坐標軸平行的兩條直線去把小數坐標分解到相鄰的四個整數坐標點。權重與距離成反比。

        雙三次插值(Bicubic Interpolation):與雙線性插值類似,只不過用了相鄰的16個點。但是需要注意的是,前面兩種方法能保證兩個方向的坐標權重和為1,但是雙三次插值不能保證這點,所以可能出現像素值越界的情況,需要截斷。

        ③ 雙線性插值演算法原理

        假如我們想得到未知函數 f 在點 P = (x, y) 的值,假設我們已知函數 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四個點的值。最常見的情況,f就是一個像素點的像素值。首先在 x 方向進行線性插值,然後再在 y 方向上進行線性插值,最終得到雙線性插值的結果。

    ④ 舉例說明

二. python實現灰度圖像雙線性插值演算法:

灰度圖像雙線性插值放大縮小

import numpy as np

import math

import cv2

def double_linear(input_signal, zoom_multiples):

    '''

    雙線性插值

    :param input_signal: 輸入圖像

    :param zoom_multiples: 放大倍數

    :return: 雙線性插值後的圖像

    '''

    input_signal_cp = np.(input_signal)  # 輸入圖像的副本

    input_row, input_col = input_signal_cp.shape # 輸入圖像的尺寸(行、列)

    # 輸出圖像的尺寸

    output_row = int(input_row * zoom_multiples)

    output_col = int(input_col * zoom_multiples)

    output_signal = np.zeros((output_row, output_col)) # 輸出圖片

    for i in range(output_row):

        for j in range(output_col):

            # 輸出圖片中坐標 (i,j)對應至輸入圖片中的最近的四個點點(x1,y1)(x2, y2),(x3, y3),(x4,y4)的均值

            temp_x = i / output_row * input_row

            temp_y = j / output_col * input_col

            x1 = int(temp_x)

            y1 = int(temp_y)

            x2 = x1

            y2 = y1 + 1

            x3 = x1 + 1

            y3 = y1

            x4 = x1 + 1

            y4 = y1 + 1

            u = temp_x - x1

            v = temp_y - y1

            # 防止越界

            if x4 >= input_row:

                x4 = input_row - 1

                x2 = x4

                x1 = x4 - 1

                x3 = x4 - 1

            if y4 >= input_col:

                y4 = input_col - 1

                y3 = y4

                y1 = y4 - 1

                y2 = y4 - 1

            # 插值

            output_signal[i, j] = (1-u)*(1-v)*int(input_signal_cp[x1, y1]) + (1-u)*v*int(input_signal_cp[x2, y2]) + u*(1-v)*int(input_signal_cp[x3, y3]) + u*v*int(input_signal_cp[x4, y4])

    return output_signal

# Read image

img = cv2.imread("../paojie_g.jpg",0).astype(np.float)

out = double_linear(img,2).astype(np.uint8)

# Save result

cv2.imshow("result", out)

cv2.imwrite("out.jpg", out)

cv2.waitKey(0)

cv2.destroyAllWindows()

三. 灰度圖像雙線性插值實驗結果:

四. 彩色圖像雙線性插值python實現

def BiLinear_interpolation(img,dstH,dstW):

    scrH,scrW,_=img.shape

    img=np.pad(img,((0,1),(0,1),(0,0)),'constant')

    retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)

    for i in range(dstH-1):

        for j in range(dstW-1):

            scrx=(i+1)*(scrH/dstH)

            scry=(j+1)*(scrW/dstW)

            x=math.floor(scrx)

            y=math.floor(scry)

            u=scrx-x

            v=scry-y

            retimg[i,j]=(1-u)*(1-v)*img[x,y]+u*(1-v)*img[x+1,y]+(1-u)*v*img[x,y+1]+u*v*img[x+1,y+1]

    return retimg

im_path='../paojie.jpg'

image=np.array(Image.open(im_path))

image2=BiLinear_interpolation(image,image.shape[0]*2,image.shape[1]*2)

image2=Image.fromarray(image2.astype('uint8')).convert('RGB')

image2.save('3.png')

五. 彩色圖像雙線性插值實驗結果:

六. 最近鄰插值演算法和雙三次插值演算法可參考:

        ① 最近鄰插值演算法: https://www.cnblogs.com/wojianxin/p/12515061.html

         https://blog.csdn.net/Ibelievesunshine/article/details/104936006

        ② 雙三次插值演算法: https://www.cnblogs.com/wojianxin/p/12516762.html

        https://blog.csdn.net/Ibelievesunshine/article/details/104942406

七. 參考內容:

         https://www.cnblogs.com/wojianxin/p/12515061.html

         https://blog.csdn.net/Ibelievesunshine/article/details/104939936

H. 想用python來求解牛頓插值問題,編了一段程序,其中有些錯誤看不出來,懇請大佬指出錯誤,代碼如下

importmatplotlib.pyplotasplt
frompylabimportmpl
importmath
"""
牛頓插值法
插值的函數表為
xi-28.9,-12.2,4.4,21.1,37.8
f(xi)2.2,3.9,6.6,10.3,15.4
"""
x=[-28.9,-12.2,4.4,21.1,37.8]
y=[2.2,3.9,6.6,10.3,15.4]

"""計算4次差商的值"""
defFour_time_difference_quotient(x,y):
i=0#i記錄計算差商的次數
quotient=[0,0,0,0,0,]
whilei<4:
j=4
whilej>i:
ifi==0:
quotient[j]=((y[j]-y[j-1])/(x[j]-x[j-1]))
else:
quotient[j]=(quotient[j]-quotient[j-1])/(x[j]-x[j-1-i])
j-=1
i+=1
returnquotient;

deffunction(data):
returnx[0]+parameters[1]*(data-0.4)+parameters[2]*(data-0.4)*(data-0.55)+
parameters[3]*(data-0.4)*(data-0.55)*(data-0.65)
+parameters[4]*(data-0.4)*(data-0.55)*(data-0.80)

"""計算插值多項式的值和相應的誤差"""
defcalculate_data(x,parameters):
returnData=[];
fordatainx:
returnData.append(function(data))
returnreturnData

"""畫函數的圖像
newData為曲線擬合後的曲線
"""

defdraw(newData):
plt.scatter(x,y,label="離散數據",color="red")
plt.plot(x,newData,label="牛頓插值擬合曲線",color="black")
plt.scatter(0.596,function(0.596),label="預測函數點",color="blue")
plt.title("牛頓插值法")
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
plt.legend(loc="upperleft")
plt.show()

parameters=Four_time_difference_quotient(x,y)
yuanzu=calculate_data(x,parameters)
draw(yuanzu)

閱讀全文

與python插值法相關的資料

熱點內容
編譯器原理與實現書 瀏覽:708
dos選擇命令 瀏覽:16
apm固件編譯到單片機 瀏覽:120
聯通深藍卡都包含什麼app 瀏覽:263
如何判斷網路伺服器正常 瀏覽:649
路由器搭橋遠端伺服器地址是什麼 瀏覽:515
編譯動態庫時會連接依賴庫嗎 瀏覽:707
淘寶手機加密是隨機的嗎 瀏覽:672
解壓包子怎麼裝飾 瀏覽:585
四個數湊24演算法 瀏覽:676
哪一種不是vi編譯器的模式 瀏覽:169
xp在此處打開命令窗口 瀏覽:128
代碼編譯運行用什麼軟體 瀏覽:999
動態庫在程序編譯時會被連接到 瀏覽:761
python超簡單編程 瀏覽:260
獲取命令方 瀏覽:977
怎樣製作文件夾和圖片 瀏覽:60
調研編譯寫信息 瀏覽:861
python馮諾依曼 瀏覽:419
同時安裝多個app有什麼影響 瀏覽:254