拉格朗日插值函数计算机实现流程图,拉格朗日插值实验报告.doc
實驗名稱: 實驗一 拉格朗日插值
引言
我們在生產生活中常常會遇到這樣的問題:某個實際問題中,函數f(x)在區間[a,b]上存在且連續,但找到其表達式,只能通過實驗和觀測得到有限點上的函數表。有些情況雖然可以寫出表達式,但結構復雜,使用不方便。所以簡單函數P(x)作為f(x)的近似值。插值法是解決此類問題的一種方法。
實驗目的和要求
運用Matlab編寫m文件,要求一次性輸入整張函數表,并利用計算機選擇在插值計算中所需的節點。分別通過分段線性插值、分段二次插值和全區間上拉格朗日插值計算f(0.15),f(0.31),f(0.47)的近似值。f(x)0.398940.396950.391420.381380.368120.35206算法原理與流程圖
(1)原理
設函數y=在插值區間[a,b]上連續,且在n+1個不同的插值節點a≤x0,x1,…,xn≤b上分別取值y0,y1,…,yn。目的是要在一個性質優良、便于計算的函數類Φ中,求一簡單函數P(x),P(xi)=yi(i=0,1,…,n),而在其他點x≠xi上,作為f(x)近似值P(x)的方法稱為插值法。在本實驗中,采用拉格朗日插值法。
①分段低次插值
當給定了n+1個點x0
這種分段低次插值叫分段線性插值
類似地,我們可以選取距離x最近的三個節點xi-1,xi與xi+1,然后進行二次插值,即得
這種分段低次插值叫分段二次插值②全區間上拉格朗日插
對節點xi(i=0,1,…,n)中任一點xk(0≤k≤n),作一n次多項式lk(x),使它在該點上的取值為1,在其余點xi(i=0,1,…,k-1,k+1,…,n)上取值為零。對應于每一節點xk(k=0,1,…,n),都能寫出一個滿足此條件的多項式,這樣寫出n+1個多項式l0(x),l1(x),…,ln(x);
由條件可得
于是我們可以得出如下的拉格朗日n次插值多項式(對于全區間上的插值,n取函數表的長度)
流程圖
分段線性插值分段二次插值 全區間拉格朗日插值
程序代碼及注釋
1、分段線性插值
%分段線性插值
function y=piece_linear(x0,y0,x)
% x0,y0為已知點,x為待求點
n=length(x0);p=length(y0);m=length(x);
% n,p,m分別為x0,y0,x長度
if n~=p
fprintf('Error! Please input again!\n');
% x0和y0長度不等時,報錯
else
for i=1:m
z=x(i);
sum=0.0;
l=0;
%給l賦初值,根據x的值確定l
if zx0(n)
fprintf('Error!x(%d) is out of range!\n',i);
break;
end
%當插值點超出范圍時,報錯
for j=2:n
if z
l=j;
end
if l~=0
break;
end
end
%一旦l有非零值,則終止循環,選出合適的l
for k=l-1:l
a=1.0;
for s=l-1:l
if s~=k
a=a*(z-x0(s))/(x0(k)-x0(s));
end
end
sum=sum+y0(k)*a;
end
y(i)=sum;
fprintf('y(%d)=%f\nx1=%.3f y1=%.5f,x2=%.3f y2=%.5f\n\n',i,y(i),x0(l-1),y0(l-1),x0(l),y0(l));
%輸出插值結果和所需節點
end
end
end
2、分段二次插值
%分段二次插值
function y=piece_square(x0,y0,x)
% x0,y0為已知點,x為待求點
n=length(x0);p=length(y0);m=length(x);
% n,p,m分別為x0,y0,x長度
if n~=p
fprintf('Error! Please input again!\n');
% x0和
總結
以上是生活随笔為你收集整理的拉格朗日插值函数计算机实现流程图,拉格朗日插值实验报告.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pycharm无缘无故打开Nosetes
- 下一篇: 伸缩杆怎么缩回去图解_没有阳台怎么晾衣服