0
点赞
收藏
分享

微信扫一扫

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现


​​matlab实现数值分析 的 二次插值+拉格朗日插值​​ (拉格朗日插值性能分析)

  • 优点:
    运算量小,不涉及矩阵运算; 格式整齐、规范。
  • 缺点:
    没有承袭性质:当插值点增/减时, 要重新计算所有的基 函数。

1、均差

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_代码实现


二阶均差用到了一阶均差的结果,三阶均差用到了二阶均差的结 果,均差具有承袭性质。

通式:

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_插值_02

均差的性质1:节点对称性

若{i0, i1, · · · , ik}为{0, 1, · · · , k}的任一排列,则: f[x0, x1, · · · , xk] = f[xi0

, xi1 , · · · , xik ] 均差的值只与节点有关,与节点的顺序无关,即:每个节点在均

差中的作用和地位是平等的。

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_代码实现_03

均差的性质2:线性组合

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_代码实现_04

均差的性质3:多项式的阶次

若f(x)为m次 多 项 式 , 则f[x0, x1, · · · , xk-1, x]为(m-k)次 多 项 式,m ≥ k

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_插值_05

2、拉格朗日形式 vs. 牛顿形式

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_插值_06

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_截断误差_07


均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_截断误差_08

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_插值_09

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_截断误差_10


均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_代码实现_11


均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_截断误差_12

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_截断误差_13

3、代码实现n次牛顿插值

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_截断误差_14


均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_代码实现_15

算法中间的g[j]=(g[j]-g[j-1])/(xj-xj-1)应为
g[j] = (g[j] - g[j - 1]) / (X[j] - X[j-k])

参考视频:牛顿插值(Newton插值)速懂
​​​ https://haokan.baidu.com/v?pd=wisenatural&vid=5502744134413524450​​

4、python代码实现

函数及均差表

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_插值_16

def myNewTonInterpolation(u, time):
X = [0.4, 0.55, 0.65, 0.80, 0.90, 1.05]
Y = [0.41075, 0.57815, 0.69675, 0.88811, 1.02652, 1.25382]
g = [0] * len(Y)
g = meanDeviation(g, X, Y, time)
totalNum = time+1
fu = Y[0]
for i in range(1, totalNum):
t = 1
for K in range(0, i):
t = t * (u - X[K])
fu = fu + t * g[i]
print("n次插值多项式近视值为 ", fu)
# 截断误差
g = meanDeviation(g, X, Y, time+1)
Rn = g[-1]
t = 1
for i in range(len(g)):
t = t * (u - X[i])
Rn = Rn * t
print("截断误差%.9f" % (abs(Rn)))


def meanDeviation(g, X, Y, time):
totalNum = len(g)
# initial
for i in range(totalNum):
g[i] = Y[i]

# 计算k阶均差
for k in range(1, time+1):
for j in range(totalNum - 1, k - 1, -1):
g[j] = (g[j] - g[j - 1]) / (X[j] - X[j-k])
print(k, "阶均差表", g)
return g


def main():
myNewTonInterpolation(0.596,4)


main()

均差与牛顿插值多项式 --牛顿插值多项式的代码python实现_代码实现_17


举报

相关推荐

0 条评论