Mój program:
program newton111;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
max = 1000;
var
n, i, j :integer;
x,y:array[0..max] of double;
ilorazy:array[0..max,0..max] of double;
arg,omega,w:double;
begin
writeln ('podaj liczbe wezlow');
read(n);
n:=n-1;
for i:=0 to n do
begin
writeln('podaj wezel o indeksie ', i+1);
readln(x[i]);
writeln ('podaj wartosc w wezle');
readln(ilorazy[i,0]);
end;
writeln('podaj argument dla ktorego chcesz obliczyc wartosc wielomianu');
readln(arg);
for j:=1 to n do
for i:=0 to n-j do
ilorazy[i,j]:=(ilorazy[i+1,j-1] - ilorazy[i,j-1])/(x[i+j] - x[i]);
w:=ilorazy[0,0];
omega:=1;
for i:=1 to n do
begin
omega:=(arg-x[i-1]);
w:=w+ilorazy[0,i]*omega;
end;
writeln ('wartosc wielomainu w punkcie ', arg,' wynosi ', w);
readln;
end.
Byłem pewien, że liczy wszystko dobrze, gdyż jak sprawdziłem na przykładzie prostej funkcji liniowej dobrze przybliżył mi jej wartość.
Okazało się jednak, że nie liczy do końca poprawnie, gdyż jak się dowiedziałem zaprogramowany jest wzór:
Wn(x)=f(x0) + f(x0,x1) (x-x0) + f(x0,x1,x2) (x-x1) + ... + f(x0,x1,...,xn) (x-x{n-1})
zamiast poprawnego:
Wn(x)=f(x0) + f(x0,x1)(x-x0) + f(x0,x1,x2)(x-x0)(x-x1) + ... + f(x0,x1,...,xn) (x-x0)(x-x1)...(x-x{n-1})
No i utknąłem w tym momencie.
dodanie znacznika <code class="delphi"> i poprawienie tagu "pacsal"- fp