zoukankan      html  css  js  c++  java
  • 数值分析之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;">

  • 相关阅读:
    在SQL2000怎樣用動態實現SQL2005的nvarchar(max)功能
    行列互换
    c#+GUI在aspx页面画图
    做网站用UTF8还是GB2312?
    Mvc如何做权限
    表白网
    vs2008保存很慢,提速
    MVC 向View传值
    aspx画图表
    什么是MVC
  • 原文地址:https://www.cnblogs.com/brightyuxl/p/9065052.html
Copyright © 2011-2022 走看看