数值分析之牛顿插值方法详解
数据点通用格式
算法描述
数据点有
个
设置常系数项
个,即:
设置系数函数 ,如下:
利用合并同类项找出规律:
假设 ,则 的表达式如下:
于是:假设
将其推广到一般情况:
充分利用公式:
,使得多项式穿过每一个点,利用数据,最终求得每一个常系数
。
知识点补充Introducing the divided differences
,
,
,
,
求常系数
,
,
,
,
,
列表分析:当
时
牛顿插值算法Python代码
import numpy as np
def coeffts(xData,yData):
m = len(xData)
Table = np.zeros((m,m))
Table[:,0] = np.array(yData)
for k in range(1,m):
for i in range(k,m):
Table[i,k] = (Table[i,k-1]-Table[k-1,k-1])/(xData[i]-xData[k-1])
return np.diag(Table)
def evalPoly(a,xData,x):
n = len(xData) - 1 # Degree of polynomial
p = a[n]
for k in range(1,n+1):
p = a[n-k] + (x -xData[n-k])*p
return p
案例分析
import numpy as np
xData = np.array([0.15,2.3,3.15,4.85,6.25,7.95])
yData = np.array([4.79867,4.49013,4.2243,3.47313,2.66674,1.51909])
a = coeffts(xData,yData)
print(" x yInterp")
print('-'*20)
for x in np.arange(0.0,8.1,0.5):
y = evalPoly(a,xData,x)
print('{:3.1f} {:9.5f}'.format(x,y))
插值结果: