用Python實(shí)現(xiàn)Newton插值法
def diff(xi,yi,n): ''' param xi:插值節(jié)點(diǎn)xi param yi:插值節(jié)點(diǎn)yi param n: 求幾階差商 return: n階差商 ''' if len(xi) != len(yi): #xi和yi必須保證長(zhǎng)度一致return else:diff_quot = [[] for i in range(n)]for j in range(1,n+1): if j == 1:for i in range(n+1-j): diff_quot[j-1].append((yi[i]-yi[i+1]) / (xi[i] - xi[i + 1])) else:for i in range(n+1-j): diff_quot[j-1].append((diff_quot[j-2][i]-diff_quot[j-2][i+1]) / (xi[i] - xi[i + j])) return diff_quot
測(cè)試一下:
xi = [1.615,1.634,1.702,1.828]yi = [2.41450,2.46259,2.65271,3.03035]n = 3print(diff(xi,yi,n))
返回的差商結(jié)果為:
[[2.53105263157897, 2.7958823529411716, 2.997142857142854], [3.0440197857724347, 1.0374252793901158], [-9.420631485362996]]
2. 牛頓插值實(shí)現(xiàn)def Newton(x): f = yi[0] v = [] r = 1 for i in range(n):r *= (x - xi[i])v.append(r)f += diff_quot[i][0] * v[i] return f
測(cè)試一下:
x = 1.682print(Newton(x))
結(jié)果為:
2.5944760289639732
3.完整Python代碼def Newton(xi,yi,n,x): ''' param xi:插值節(jié)點(diǎn)xi param yi:插值節(jié)點(diǎn)yi param n: 求幾階差商 param x: 代求近似值 return: n階差商 ''' if len(xi) != len(yi): #xi和yi必須保證長(zhǎng)度一致return else:diff_quot = [[] for i in range(n)]for j in range(1,n+1): if j == 1:for i in range(n+1-j): diff_quot[j-1].append((yi[i]-yi[i+1]) / (xi[i] - xi[i + 1])) else:for i in range(n+1-j): diff_quot[j-1].append((diff_quot[j-2][i]-diff_quot[j-2][i+1]) / (xi[i] - xi[i + j])) print(diff_quot)f = yi[0] v = [] r = 1 for i in range(n):r *= (x - xi[i])v.append(r)f += diff_quot[i][0] * v[i] return f
到此這篇關(guān)于用Python實(shí)現(xiàn)牛頓插值法的文章就介紹到這了,更多相關(guān)python牛頓插值法內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. XML入門的常見(jiàn)問(wèn)題(一)2. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案3. 概述IE和SQL2k開(kāi)發(fā)一個(gè)XML聊天程序4. 阿里前端開(kāi)發(fā)中的規(guī)范要求5. XML入門精解之結(jié)構(gòu)與語(yǔ)法6. html小技巧之td,div標(biāo)簽里內(nèi)容不換行7. Laravel操作session和cookie的教程詳解8. PHP字符串前后字符或空格刪除方法介紹9. css進(jìn)階學(xué)習(xí) 選擇符10. 詳解PHP實(shí)現(xiàn)HTTP服務(wù)器過(guò)程
