> NDD := proc(N,X,F)

# NDD := proc(N::integer,X::array,F::array) is better

local i, j, x, value;

for j from 2 to N do

for i from N to j by -1 do

    F[i]:=(F[i]-F[i-1])/(X[i]-X[i-j+1]);

  od;

od;

printf("NDD: "); for i from 1 to N do printf("%f ",F[i]); od; printf("\n");

 

# Horner¡¦s scheme:

printf("Enter x to evaluate interpolating polynomial:\n");

x := scanf("%f")[1];

value := F[N];

for i from N-1 to 1 do

  value := F[i] + (x-X[i]) * value;

od;

printf("p(%f)=%f\n", x,value);

end:

 

 

> N:=4:

X:=array(1..4,[2,4,1,3]):

F:=array(1..4,[60,210,24,120]):

NDD(N,X,F);

 

 

NDD: 60.000000 75.000000 13.000000 1.000000

Enter x to evaluate interpolating polynomial:

> 4

p(4.000000)=210.000000