POLITECHNIKA RADOMSKA |
|
|
|
Katedra Informatyki |
|
09.01.2007 |
Metody numeryczne |
|
|
|
Interpolacja funkcji wielomianem |
|
|
Funkcja:
f(x)= x2 + 2x + 1
Jest interpolowana w punktach:
x0=0, x1=1, x2=2, x3=3, x4=4
Wielomianem:
l0 (x)= ((x - x1)(x - x2)(x - x3)(x - x4)) / ((x0 - x1)(x0 - x2)(x0 - x3)(x0 - x4))
l1 (x) = ((x - x1)(x - x2)(x - x3)(x - x4)) / ((x1 - x0)(x1 - x2)(x1 - x3)(x1 - x4))
l2 (x) = ((x - x1)(x - x2)(x - x3)(x - x4)) / ((x2 - x0)(x2 - x1)(x2 - x3)(x2 - x4))
l3 (x) = ((x - x1)(x - x2)(x - x3)(x - x4)) / ((x3 - x0)(x3 - x1)(x3 - x2)(x3 - x4))
l4 (x) = ((x - x1)(x - x2)(x - x3)(x - x4)) / ((x4 - x0)(x4 - x1)(x4 - x2)(x4 - x3))
W(x)= f(x0)l0(x) + f(x1)l1(x) + f(x2)l2(x) + f(x3)l3(x) + f(x4)l4(x)
W programie MATEMATICA uzyskaliśmy następujący przebieg wykresu interpolacji wielomianu W(x):
Rysunek 1
Interpolacja wielomianu dokonana w języku Pascal:
program interpol;
uses crt;
Type Tab=array[0..10]of real;
var x,y:Tab;
n,k:integer;
s,a,h,xr:real;
procedure Newton(n:integer;x:Tab;var y:tab);
var k,t:integer;
begin
for t:=1 to n do
for k:=n downto t do
y[k]:=(y[k]-y[k-1])/(x[k]-x[k-t]);
end;
procedure czytaj(z:char;n:integer;var x:tab);
var k:integer;
begin
for k:=0 to n do
begin
write(z,'[',k,']=');
readln(x[k]);
end;
end;
begin
clrscr;
repeat
write('n=');
readln(n);
until (n>0) and (n<=10);
h:=0.25;
czytaj('x',n,x);
czytaj('y',n,y);
newton(n,x,y);
s:=y[0];
a:=x[0];
xr:=(a-x[0]);
repeat
for k:=1 to n do
begin
s:=s+y[k]*xr;
xr:=xr*(a-x[k]);
end;
writeln(a:5:2,' ',s:5:2);
a:=a+h;
xr:=a-x[0];
s:=y[0];
until a>x[n];
readkey;
end.
Wnioski:
Ćwiczenie pozwoliło nam zapoznać się z metodami interpolacji funkcji za pomocą wielomianu.
Dokonaliśmy tego za pomocą dwóch programów:
Pakietu Matematica
Języka programowania Turbo Pascal
Obie drogi pokazały słuszność i prawidłowość założeń teoretycznych oraz ich wzajemną zgodność.