% interpolacja lagrange'a
clear all
x=input('Podaj wezly x=');
y=input('Podaj wartosci funkcji w wezlach y=');
n=length(x);
m=length(y);
if n~=m
disp('Blad danych')
return
end
plot(x,y,'ro')
z=input('podaj argument z=');
suma=0;
for i=1:n
iloczyn=1;
for j=1:n
if j~=i
iloczyn=iloczyn*(z-x(j))/(x(i)-x(j));
end
end
suma=suma+y(i)*iloczyn;
end
L=suma;
disp('wartosc wielomianu:')
L
Przykład dla funkcji f(x)=x/(1+sin(x)) dla x=1.5
Jako węzły przyjęto x=0, x=pi/6, x=5pi/6, x=pi
>> f=inline('x/(1+sin(x))')
f =
Inline function:
f(x) = x/(1+sin(x))
>> f(0)
ans =
0
>> f(pi/6)
ans =
0.3491
>> f(5*pi/6)
ans =
1.7453
>> f(pi)
ans =
3.1416
Podaj wezly x=[0, pi/6,5*pi/6, pi]
Podaj wartosci funkcji w wezlach y=[0, 0.3491, 1.7453, 3.1416]
podaj argument z=1.5
wartosc wielomianu:
L =
0.6018
zadanie:
korzystając z interpolacji wielomianowej lagrange'a stopnia 4 wyznaczyc przyblizona wartość funkcji f(x)=2/(3+x^2) dla argumentu z=0.05, przyjmując węzły równoodległe z przedziału [-3, 3].
Należy odpowiednio dobrac węzły, tak aby były one rownoodlegle. Wiemy, ze wielomian jest n-tego stopnia (w tym wypadku 4) zatem potrzebujemy n+1 wezlow(czyli w tym wypadku 5). Majac przedzial, dzielimy go na 4 czesci i mamy x (3, 1.5, 0, -1.5, -3). Sprawdzamy wartości dla owych argumentow.
I postepujemy według ww schematu
>> f=inline('2/(4+x^2)')
f =
Inline function:
f(x) = 2/(4+x^2)
>> f(-3)
ans =
0.1538
>> f(-1.5)
ans =
0.3200
>> f(0)
ans =
0.5000
>> f(1.5)
ans =
0.3200
>> f(3)
ans =
0.1538
Podaj wezly x=[-3, -1.5, 0, 1.5, 3]
Podaj wartosci funkcji w wezlach y=[0.1538, 0.3200, 0.5000, 0.3200, 0.1538]
podaj argument z=0.05
wartosc wielomianu:
L =
0.4998