一、實驗目的
在已知f(x),x∈[a,b]的表達式,但函數值不便計算,或不知f(x),x∈[a,b]而又需要給出其在[a,b]上的值時,按插值原則f(xi)= yi(i= 0,1…….,n)求出簡單函數P(x)(常是多項式),使其在插值基點xi,處成立P(xi)= yi(i=0,1,……,n),而在[a,b]上的其它點處成立f(x)≈P(x).
二、實驗原理
三、實驗內容
求之f(x)=x4在[0,2]上按5個等距節點確定的Lagrange插值多項式.
四、實驗程序
1 import matplotlib.pyplot as plt 2 from pylab import mpl 3 4 #計算插值多項式的系數。 5 x = [0, 0.5, 1, 1.5, 2] 6 y = [0, 0.0625, 1, 5.0625, 16] 7 8 def ParametersOfLagrangeInterpolation(data_x,data_y,size): 9 parameters=[] 10 11 i=0;#i用來控制參數的個數 12 while i < size: 13 j = 0;#j用來控制循環的變量做累乘 14 temp = 1; 15 while j < size: 16 if(i != j): 17 temp*=data_x[i]-data_x[j] 18 j+=1; 19 parameters.append(data_y[i]/temp) 20 i += 1; 21 return parameters 22 23 #計算拉格朗日插值公式的值。 24 25 def CalculateTheValueOfLarangeInterpolation(data_x,parameters,x): 26 returnValue=0 27 i = 0; 28 while i < len(parameters): 29 temp = 1 30 j = 0; 31 while j< len(parameters): 32 if(i!=j): 33 temp *=x-data_x[j] 34 j+=1 35 returnValue += temp * parameters[i] 36 i += 1 37 return returnValue 38 39 #將函數繪制成圖像 40 def Draw(data_x,data_y,new_data_x,new_data_y): 41 plt.plot(new_data_x, new_data_y, label="擬合曲線", color="red") 42 plt.scatter(data_x,data_y, label="離散數據",color="yellow") 43 plt.scatter(1.75, 9.37890625, label="真實數據", color="orange") 44 plt.scatter(1.25, 2.44140625, color="green") 45 mpl.rcParams['font.sans-serif'] = ['SimHei'] 46 mpl.rcParams['axes.unicode_minus'] = False 47 plt.title("Lagrange插值擬合數據") 48 plt.legend(loc="upper left") 49 plt.show() 50 51 parameters=ParametersOfLagrangeInterpolation(x,y,5) 52 datax=[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] 53 datay=[] 54 for temp in datax: 55 datay.append(CalculateTheValueOfLarangeInterpolation(x,parameters,temp)) 56 x.append(1.75) 57 y.append(CalculateTheValueOfLarangeInterpolation(x,parameters,1.75)) 58 Draw(x,y,datax,datay) 59 print("得到的四次Lagrange插值多項式為:L(x) = %f(x-0)(x-1)(x-1.5)(x-2) + %f(x-0)(x-0.5)(x-1.5)(x-2) + %f(x-0)(x-0.5)(x-1)(x-2) + %f(x-0)(x-0.5)(x-1)(x-1.5)"%(parameters[1],parameters[2],parameters[3],parameters[4]))
五、運算結果
(1)圖像
(2)運算結果
得到的四次Lagrange插值多項式為:L(x) = -0.166667(x-0)(x-1)(x-1.5)(x-2) + 4.000000(x-0)(x-0.5)(x-1.5)(x-2) + -13.500000(x-0)(x-0.5)(x-1)(x-2) + 10.666667(x-0)(x-0.5)(x-1)(x-1.5)