1. 程式人生 > >拉格朗日插值多項式的龍格現象

拉格朗日插值多項式的龍格現象

利用插值基函式可以很容易得到拉格朗日插值多項式,公式結構緊湊,在理論分析中甚為重要。但存在以下問題:

  1. 當插值節點增減時,計算要全部重新進行,甚為不便(當然現在我們有MATLAB,只需改變下引數便可);
  2. 存在高次插值的病態問題,也即龍格現象。 關於龍格現象,李慶揚版《數值分析》課本中,列舉了採用拉格朗日插值多項式對f(x)=11+x2\frac{1}{1+x^2}函式在[-5,5]上取n+1個點的插值問題。現探討n=2~10(從二次函式到十次函式)時的插值病態現象。在n=2至10時,MATLAB計算程式碼如下
clc
clear
syms x0 x1 y x n x_para
x0=-5:0.1:5;
y=1./(1+x0.^2);

for n=2:10
    k=0:n;  %k的範圍從0到n,共n+1項
    x(k+1)=-5+10*k/n;  %從x(1)到x(n+1),共n+1項,即從第0點到第n點
for i=1:(n+1)  %共k+1項
    part_x(i)=(x_para-x(i));  %每個因式的組成,共k+1種
end
   w_x(n+1)=prod(part_x);  %求w(x)
   w_x_diff(n+1)=diff(w_x(n+1));
   
for j=1:(n+1)
   w_x_diff(j)=subs(w_x_diff(n+1),x_para,x(j));
   ln_x(j)=(1/(1+x(j)^2)) * w_x(n+1) / ( (x_para-x(j))*(w_x_diff(j)) );
end

   Ln_x=sum(ln_x);
   x_vector=-4.99:0.037:4.99;
   Ln_x=subs(Ln_x,x_para,x_vector);
   figure
   plot(x0,y)
   hold on  
   plot(x_vector,Ln_x)
   legend ('original function','n=x')
   ylabel('f(x) and Ln(x) '); 
end

可得出n=2至10時,原函式的曲線與拉格朗日多項式插值曲線對比如下: n=2時 n=3時 n=4時 n=5時 n=6時

n=7時 n=8時 n=9時 n=10時

由此可見,採用拉格朗日多項式插值時,Ln(x)不一定收斂於fxf(x)