#牛頓插值
defnewton_interpolation
(x,y,init):
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*(init-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
#拉格朗日插值
deflagrange_interpolation
(x,y,init):
sum=0.0
for i in range(len(x)):
temp=y[i]
for j in range(len(x)):
if(j!=i):
temp=temp*((init-x[j])/(x[i]-x[j]))
sum=sum+temp
return sum
defmain
(): x=[float(i) for i in (input("請輸入x的對應值:").split())]
y=[float(i) for i in (input("請輸入y的對應值:").split())]
init=float(input("請輸入要計算的x:"))
print("插值方法:\n\t1.拉格朗日插值\n\t2.牛頓插值")
choice=int(input("請選擇一種方法:"))
#在最小值至最大值區間取1000點
x_temp=np.linspace(np.min(x),np.max(x),1000,endpoint=true)
y_temp=
if(choice==1):
result=lagrange_interpolation(x,y,init)
for x in x_temp:
plt.title("lagrange_interpolation")
else:
result=newton_interpolation(x,y,init)
for x in x_temp:
plt.title("newton_interpolation")
print("f(%f)的近似值為%f"%(init,result))
#繪圖plt.plot(x,y,'s',label="original values")#藍點表示原來的值
plt.plot(x_temp,y_temp,'r',label='interpolation values')#插值曲線
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc=4)#指定legend的位置右下角
plt.show()
if __name__=='__main__':
main()
拉格朗日插值
牛頓插值法
拉格朗日插值和牛頓插值 matlab
1.已知函式在下列各點的值為 0.20.4 0.60.8 1.00.98 0.92 0.81 0.64 0.38 用插值法對資料進行擬合,要求給出lagrange插值多項式和newton插值多項式的表示式,並計算插值多項式在點的值。程式 x 0.2 0.4 0.6 0.8 1.0 y 0.98 0....
拉格朗日插值法與牛頓插值法
double f double xx 利用拉格朗日插值函式 f x sigma x xj xk xj yk k 1,2,3,4,總結 拉格朗日插值法和牛頓插值法可以使得插值函式完美的匹配給定的節點,在一般情況下,拉格朗日插值法就能滿足我們對於給定樣本進行插值的要求,但是當我們給定的節點個數在不斷增多...
拉格朗日插值 貓和老虎 牛頓插值法
牛頓插值的有記憶性是很討喜的,在此之前就要先介紹差商,可以理解為導數差分表示形式。差商有兩個比較好用性質 1.對稱性 可以任意交換節點的次序,例如 2.差商與導數的關係 差商和導數就好像是貓和老虎同屬貓科動物一樣,既然相差無幾總歸是有關係的吧。我們從拉格朗日中值定理中可以知道,會有乙個 中的某個 有...