匯入標頭檔案
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,...