1. 數據分析(Python) 插值——牛頓插值法

    2020-12-28 15:20發布

    插值思想

    求已知的n個點對(x1,y1),(x2,y2),…,(xn,yn)的所有階差商公式

    聯立以上差商公式建立如下插值多項式f(x)

    其中P(x)是牛頓插值逼近函數,R(x)是誤差函數

    差商表
    xkf(xk)一階差商二階差商三階差商
    x0f(x0)


    x1f(x1)f[x0,x]

    x2f(x2)f[x1,x2]f[x0,x1,x2]
    x3f(x3)f[x2,x3]f[x1,x2,x3]f[x0,x1,x2,x3]

    代碼實現

    import numpy as np
    import matplotlib.pyplot as plt
    import random
    
    y_point = []
    text_list = []
    x_point = random.sample(range(0,12),10)#生成不重復的隨機數
    for num in range(10):
        y_point.append(random.randint(1, 12))#生成1-20隨機整數
        text='('+str(x_point[num])+','+str(y_point[num])+')'#合并字符串
        text_list.append(text)
        plt.annotate(text_list[num],xy=(x_point[num],y_point[num]),xytext=(x_point[num]+0.5,y_point[num]+0.5))
        #annotate第一個參數是文本內容 第二個參數是要標記的位置 第三個參數是文本標記位置
    
    x = np.arange(min(x_point)-0.01,max(x_point)+0.003,0.003)
    
    def whole(n):#計算數值(x-x0)(x-x1)...(x-xn) n為項數次序
        if(n==1):
            return y_point[0]
        else:
            sum = 1
            for i in range(n-1):
                sum = sum * (x-x_point[i])
            return sum
    
    def difference(n):#計算差分公式 f(x0,x1) n為項數次序
        if n==1:
            return 1
        else:
            _2Dlist = [([0] * (n - 1)) for i in range(n - 1)]#從f(x0,x1)開始的三角矩陣 #f(x0,x1),f(x1,x2),f(x2,x3)
            for i in range(n - 1):
                _2Dlist[i][0] = (y_point[i + 1] - y_point[i]) / (x_point[i + 1] - x_point[i]) #先計算三角矩陣第一列
            for a in range(1,n-1): #a代表列 n=4   a=2,b=23;a=3,b=3
                for b in range(a,n-1):  #b代表行
                    _2Dlist[b][a]=(_2Dlist[b][a-1]-_2Dlist[b-1][a-1])/(x_point[b+1]-x_point[b-a]) #計算三角矩陣除第一列以外所有數據元素
        print(_2Dlist) #打印差商表
        return _2Dlist[n-2][n-2]
    
    
    def newton(n):#n為數據元素個數
        sum = 0
        for i in range(n):
            sum = sum + whole(i+1)*difference(i+1)
        return sum
    
    plt.scatter(x_point,y_point)
    plt.plot(x,newton(10))
    plt.show()

    編寫思想

    牛頓插值代碼編寫難度主要在于差商公式,可以設計一個二維數組,觀察每行列數據與其余元素對應關系,即可寫出差商公式。

    結果展示


    作者:Atom_QQ2022313691

    鏈接:https://atom2022313691.blog.csdn.net/article/details/107002299

    來源:CSDN
    著作權歸作者所有,轉載請聯系作者獲得授權,切勿私自轉載。



    日日摸夜夜添夜夜添无码,free性欧美极度另类,超清中文乱码字幕在线观看,真人美女两腿张开露PP图片