数值分析之Neville's Algorithm

 

Neville插值方法详解

牛顿的插值方法涉及两个步骤:计算系数,随后评估多项式。 如果插值运作良好使用相同的多项式在x的不同值处重复执行。 要是一点是内插,一种单步计算插值的方法,如Neville的算法,是一个更方便的选择。

4个数据点的表格

 k=0k=1k=2k=3
x0 P0[x0]=y0 P1[x0,x1] P2[x0,x1,x2] P3[x0,x1,x2,x3]
x1 P0[x1]=y1 P1[x1,x2] P2[x1,x2,x3]  
x2 P0[x2]=y2 P1[x2,x3]    
x3 P0[x3]=y3      

通项公式

Pk[xi,xi+1,⋯,xi+k]=(x−xi+k)Pk−1[xi,xi+1,⋯,xi+k−1]+(xi−x)Pk−1[xi+1,⋯,xi+k]xi−xi+k

4个数据点的计算公式

 k=0k=1k=2k=3
x0 P0[x0]=y0 P1[x0,x1]=(x−x1)P0[x0]+(x0−x)P0[x1]x0−x1 P2[x0,x1,x2]=(x−x2)P1[x0,x1]+(x0−x)P1[x1,x2]x0−x2 P3[x0,x1,x2,x3]=(x−x3)P2[x0,x1,x2]+(x0−x)P2[x1,x2,x3]x0−x3
x1 P0[x1]=y1 P1[x1,x2]=(x−x2)P0[x1]+(x1−x)P0[x2]x1−x2 P2[x1,x2,x3]=(x−x3)P1[x1,x2]+(x1−x)P1[x2,x3]x1−x3  
x2 P0[x2]=y2 P1[x2,x3]=(x−x3)P0[x2]+(x2−x)P0[x3]x2−x3    
x3 P0[x3]=y3      

Neville算法Python代码

import numpy as np
def neville(xData,yData,x):
    m = len(xData)
    A = np.zeros((m,m))  # A代表计算表格
    A[:,0]=np.array(np.array(yData))
    for k in range(1,m):
        for i in range(m-k):
            A[i,k]=((x-xData[i+1])*A[i,k-1]+(xData[i]-x)*A[i+1,k-1])/(xData[i]-xData[i+1])
    return A

案例分析

yData = [4.0, 3.9, 3.8, 3.7] 
xData = [-0.06604, -0.02724, 0.01282, 0.05383]
neville(xData,yData,0)

计算结果

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

posted @ 2018-05-20 22:50  既生喻何生亮  阅读(1510)  评论(1编辑  收藏  举报