1. 程式人生 > >MATLAB——數值插值之拉格朗日(Lagrange)插值法

MATLAB——數值插值之拉格朗日(Lagrange)插值法

 由於MATLAB中沒有現成的拉格朗日插值命令,因此我們可以根據Lagrange插值法的定義編寫一個Lagrange插值命令

   定義:

給定n個插值節點x1,x2,...,xn和對應的函式值y1,y2,...yn,利用拉格朗日插值多項式公式L_{n}(x)=\sum y_{k}l_{k}(x),(注:k從0到n累加),其中,l_{k}(x)=\frac{(x-x_{0})...(x-x_{k-1})(x-x_{k+1})...(x-x_{n})}{(x_{k}-x_{0})...(x-x_{k-1})(x-x_{k+1})...(x_{k}-x_{n})}  ,可以得到插值區間內任意x的函式值y為y(x)=L_{n}(x)。從公式中可以看出,生成的多項式與用來插值的資料密切相關,資料變化則函式就要重新計算。

以下為M語言編寫的函式檔案lagrange.m

%拉格朗日插值命令
function yy=lagrange(x,y,xx)
%Lagrange 插值,求資料(x,y)所表示式的函式在插值點xx處的插值
m=length(x);
n=length(y);
if m~=n
    error('向量x,y長度必須一致');
end
s=0;
for i=1:n
    t=ones(1,length(xx));
    for j=1:n
        if j~=i
            t=t.*(xx-x(j))/(x(i)-x(j));
        end
    end
    s=s+t*y(i);
end
yy=s;

 注:拉格朗日插值的一個特點為:擬合出的多項式通過原x,y的每一個對應的點。