Python 實現牛頓插值演算法

2021-09-01 17:54:17 字數 1726 閱讀 4819

匯入標頭檔案

import matplotlib.pyplot as plt

from pylab import mpl

import numpy as np

import pandas as pd

import math

%matplotlib inline

得到差商表函式

def get_diff_table(x,y):

"""得到插商表

"""n=len(x)

a=np.zeros([n,n])

for i in range(0,n):

a[i][0] = y[i]

for j in range(1,n):

for i in range(j,n):

a[i][j] = (a[i][j-1] - a[i-1][j-1])/(x[i]-x[i-j])

return a

計算插值函式

以下函式只是計算乙個點的插值,還可以優化,因為計算乙個區間上的點時,每次都要計算一次差商表

def newton_interpolation(x,y,x):

"""計算x點的插值

"""sum=y[0]

temp=np.zeros((len(x),len(x)))

#將第一行賦值

for i in range(0,len(x)):

temp[i,0]=y[i]

temp_sum=1.0

for i in range(1,len(x)):

#x的多項式

temp_sum=temp_sum*(x-x[i-1])

#計算均差

for j in range(i,len(x)):

temp[j,i]=(temp[j,i-1]-temp[j-1,i-1])/(x[j]-x[j-i])

sum+=temp_sum*temp[i,i]

return sum

得到插值表

計算插值點的值並畫圖

xs=np.linspace(np.min(x),np.max(x),1000,endpoint=true)

ys=for x in xs:

plt.title("newton_interpolation")

plt.plot(x,y,'s',label="original values")#藍點表示原來的值

plt.plot(xs,ys,'r',label='interpolation values')#插值曲線

plt.xlabel('x')

plt.ylabel('y')

plt.legend(loc=4)#指定legend的位置右下角

Python 牛頓 Newton 插值法

本函式用於通過牛頓插值法計算某點的函式值 先計算函式每一級的差商,然後計算函式值 存放自變數x的值 data 用於存放函式值以及差商 x 0,2,3,5,6 data 0,8,27,125,216 用於存放待求值點 以及 計算結果 x f 5.5fun 0 計算每一級的差商 for i in ran...

牛頓插值法

有了拉格朗日插值法,牛頓插值怎麼會缺席呢,這裡介紹牛頓插值,牛頓插值自然是為了解決拉格朗日的在程式設計上的缺陷而出現的 至少邏輯是這樣的 拉格朗日插值法在程式設計上的缺陷是什麼呢?從拉格朗日插值的形式就可以得知,每增加乙個插值節點就要重新計算插值基函式,這是乙個致命的缺點。牛頓插值克服了這個問題,我...

數值分析 插值 牛頓插值法

clc clear all close all n 1 1 10000 sig sin n 100 k 0 for i 1 4 10000 k k 1 x arr n i i 3 y arr sig i i 3 arr new y k newtoninterpolation x arr,y arr,...