Здравствуйте все!
Вобщем сразу к делу. Есть такая задачка:
Функция задана таблично (n +1 значение). Разработайте программу, строящую интерполяционный полином Ньютона n-й степени.
Вроде что-то нарыл в нете, но не то. Помогите плиз кто может.
function Prod(t: double; k: integer): double; // t(t-1)...(t-k)
begin
if k=0 then Prod:=t else Prod:=t*Prod(t-1,k-1)
end;
function FinDif(k,i: integer): double; // finite difference
begin
if k=0 then FinDif:=y[i] else FinDif:=FinDif(k-1,i+1)-FinDif(k-1,i)
end;
function NewtonPol(x: double): double;
var
k: integer;
p,t,f: double;
begin
p:=y[0];
t:=(x-x0)/h;
f:=1;
for k:=1 to n do begin
f:=f*k;
p:=p+Prod(t,k-1)*FinDif(k,0)/f
end;
NewtonPol:=p
end;
function Prod(t: double; k: integer): double; // t(t-1)...(t-k)Тут просто произведение - то есть то, что написано в оригинальном комменте. Чтоб в этом убедиться, заметь, что она просто умножает сама себя k раз, а при вызове мы каждый раз уменьшаем ее на 1.
begin
if k=0 then Prod:=t else Prod:=t*Prod(t-1,k-1)
end;
function FinDif(k,i: integer): double; // finite differenceТут просто по определению конечных разностей, см. вики
begin
if k=0 then FinDif:=y[i] else FinDif:=FinDif(k-1,i+1)-FinDif(k-1,i)
end;
function NewtonPol(x: double): double;
var
k: integer;
p,t,f: double;
begin
p:=y[0];
t:=(x-x0)/h;
f:=1;
for k:=1 to n do begin
f:=f*k;
p:=p+Prod(t,k-1)*FinDif(k,0)/f
end;
NewtonPol:=p
end;