Nyolcadik labor: Interpoláció

Contents

Lagrange-interpoláció

Ábrázoljuk a [0,1] intervallumon 11 ekvidisztans alaponthoz tartozó alappolinomok közül l_0(x)-et és l_5(x)-et!

t=linspace(0,1,1e3);
alappont=0:0.1:1;
l0=1;
for i=2:11
    l0=l0.*(t-alappont(i))./(alappont(1)-alappont(i));
end
l5=1;
for i=[1:5 7:11]
    l5=l5.*(t-alappont(i))./(alappont(6)-alappont(i));
end
plot(t, l0,'b',t,l5,'r'); legend('l_0(x)', 'l_5(x)'),
ax=gca; ax.XAxisLocation = 'origin';

Órai feladat ábrázoljuk az f(x)=1/(1+x^2) függvényt és az f(x)-et a [-5,5] intervallumon 11 ill. 21 ekvidisztans alapponton interpoláló polinomot. Segítség: nézzük meg a polyfit paracsot! Oldjuk meg ugyanezen feladatot Csebisev-alappontokkal.

Megoldás

function rungellcsebi(n)

% Ekivdisztans alapontrsz
x1=-5:10/(n-1):5;
f1=1./(1+x1.^2);
eho1=polyfit(x1,f1,n-1);

% Csebisev alappontrsz
x2=5*cos((2*(0:n)+1)/(2*n+1)*pi);
f=1./(1+x2.^2);
eho2=polyfit(x2,f,n-1);

%% Ábra
t=linspace(-5,5);
subplot(2,1,1)
plot(t,1./(1+t.^2),t,polyval(eho1,t),'r');
legend('f(x)', 'ekvidisztans interpoláló polinom'), 
subplot(2,1,2)
plot(t,1./(1+t.^2),t,polyval(eho2,t),'r');
legend('f(x)', 'csebisev interpoláló polinom'), 


rungellcsebi(11)
rungellcsebi(21)
Warning: Polynomial is badly conditioned. Add points with distinct X values,
reduce the degree of the polynomial, or try centering and scaling as described
in HELP POLYFIT. 
Warning: Polynomial is badly conditioned. Add points with distinct X values,
reduce the degree of the polynomial, or try centering and scaling as described
in HELP POLYFIT. 

Spline

Szigorúan véve a spline interpoláció annak a feladatnak a megoldása, hogy előírom a függvény értékeit az alappontokban, és ezekre harmadfokú polinomot illesztek szakaszonként úgy, hogy egy polinom két egyás követő pontra illeszkedik, és az alappontokban az így kialakuló interpoláló függvénytől (amely szakaszonként polinom) elvárjuk, hogy legyen érintő és görbület folytonos. Ez még kevés az egyértelműséghez, ezt azzal a két feltétellel egészítjük ki, hogy x_0-ban és x_n -ben előírjuk az első vagy második derivált értékét.

figure(2)
ertekek=spline(0:0.25:1, rand(1,5),t);
plot(t,ertekek)