一.為什麼要引進插值函數
在實際問題中,兩個變量的關系y=f(x)經常要 靠實驗和觀測來獲得,而在通常的情況下隻能得到f(x)在有限個點上的值
=
(
), i=0,1,2,...,n
人們希望找到f(x)的一個近似函數y=
(x),使得
,i=0,1,2,...,n (0.1)
此時,
稱為被插函數,點
稱為插值結點,
稱為插值函數,(0.1)稱為插值條件。
在處理插值問題的時候,首先根據需要選擇
是哪一類函數,如果選擇
為代數多項式就産生了代數插值問題。類似地,有三角多項式插值,有理函數插值和樣條函數插值等問題,本文主要考慮代數多項式插值問題。
二.Lagrange插值的定義
由于大家都學過推到過程,我就不一一推導了,直接上公式:
n次Lagrange插值多項式:
其中
是
次基函數
這裡着重講一下一次Lagrange插值和二次Lagrange插值,又分别稱為線性Lagrange插值和抛物線性Lagrange插值。
例如我們通過實驗或觀測已知如下表所示的資料,要求構造一個抛物線插值函數。
X | |||
Y |
直接帶入公式可得:
(1)
其中
Lagrange插值多項式不必死記硬背,其基函數
隻有在x=
時,基函數才為1,在x等于其他點時,
=0.記住這個特性,基函數公式就特别簡單推到了。
三.Lagrange插值多項式的應用
光說不練都是假把戲,接題:
已知
,求
設
=100,
=10,
=121,
=11,
=144,
=12
代入(1)得
将(2)整理下,然後将x=115代入得y=10.7228,可以驗證同精度比較,該結果具有4位有效數字。
四.Lagrange插值多項式的Matlab程式
function s=LagrangeInter(x,y,x0)
%% LagrangeInter:求拉格朗日插值多項式函數
% x為節點X坐标向量
% y為節點Y坐标向量
% x0為待計算點的x坐标
syms p;
n=length(x); %讀取x向量維數
s=0;
for i=1:n
Li=y(i);
%構造基函數
for j=1:i-1
Li=Li*(p-x(j))/(x(i)-x(j));
end
for j=i+1:n
Li=Li*(p-x(j))/(x(i)-x(j));
end
s=s+Li;
simplify(s);
end
%對輸入參數個數做判斷,如果隻有兩個參數直接給出插值多項式
%如果三個參數 則給出插值點的插值結果,第三個參數可以為向量
if(nargin==2)
s=subs(s,'p','x');
s=collect(s); %展開多項式
% s=vpa(s,4); %把系數取到6位精度表達
else
s = subs(s,'p',x0);
% m=length(x0); %讀取t長度
%分别對t的每一個分量插值
% for i=1:m
% temp(i)=subs(s,'p',x0(i));
% end
% s=temp;
end