数值分析之Neville's Algorithm

Neville插值方法详解

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

4个数据点的表格

k=0 k=1 k=2 k=3
x 0 P 0 [ x 0 ] = y 0 P 1 [ x 0 , x 1 ] P 2 [ x 0 , x 1 , x 2 ] P 3 [ x 0 , x 1 , x 2 , x 3 ]
x 1 P 0 [ x 1 ] = y 1 P 1 [ x 1 , x 2 ] P 2 [ x 1 , x 2 , x 3 ]
x 2 P 0 [ x 2 ] = y 2 P 1 [ x 2 , x 3 ]
x 3 P 0 [ x 3 ] = y 3

通项公式

P k [ x i , x i + 1 , , x i + k ] = ( x x i + k ) P k 1 [ x i , x i + 1 , , x i + k 1 ] + ( x i x ) P k 1 [ x i + 1 , , x i + k ] x i x i + k

4个数据点的计算公式

k=0 k=1 k=2 k=3
x 0 P 0 [ x 0 ] = y 0 P 1 [ x 0 , x 1 ] = ( x x 1 ) P 0 [ x 0 ] + ( x 0 x ) P 0 [ x 1 ] x 0 x 1 P 2 [ x 0 , x 1 , x 2 ] = ( x x 2 ) P 1 [ x 0 , x 1 ] + ( x 0 x ) P 1 [ x 1 , x 2 ] x 0 x 2 P 3 [ x 0 , x 1 , x 2 , x 3 ] = ( x x 3 ) P 2 [ x 0 , x 1 , x 2 ] + ( x 0 x ) P 2 [ x 1 , x 2 , x 3 ] x 0 x 3
x 1 P 0 [ x 1 ] = y 1 P 1 [ x 1 , x 2 ] = ( x x 2 ) P 0 [ x 1 ] + ( x 1 x ) P 0 [ x 2 ] x 1 x 2 P 2 [ x 1 , x 2 , x 3 ] = ( x x 3 ) P 1 [ x 1 , x 2 ] + ( x 1 x ) P 1 [ x 2 , x 3 ] x 1 x 3
x 2 P 0 [ x 2 ] = y 2 P 1 [ x 2 , x 3 ] = ( x x 3 ) P 0 [ x 2 ] + ( x 2 x ) P 0 [ x 3 ] x 2 x 3
x 3 P 0 [ x 3 ] = y 3

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)

计算结果

猜你喜欢

转载自www.cnblogs.com/brightyuxl/p/9065052.html