Lagrange.html

>    restart;

Lagrange := proc()
local n,X,Y,i,j,F,prod,x;
printf("Enter # data points:\n");
n:= scanf("%d")[1];
printf("Enter data points:\n");
X:=array(1..n); Y:=array(1..n);
for i from 1 to n do
  X[i]:= scanf("%f")[1];
  Y[i]:= scanf("%f")[1];
od;
F:=0;
for i from 1 to n do
  prod:=1;
  for j from 1 to n do
    if j<>i then
    prod := prod*(x-X[j])/(X[i]-X[j]);
    fi;
  od;
  F:=F+Y[i]*prod;
od;
printf("F(x)= %a\n",F);
printf("Test:\n");
do
  x:= scanf("%f")[1]:
  if x > 1000 then printf("Bye!\n"); break; fi;
  printf("     F(%f)= %f\n",x,F(x));
od;
end:

>    Lagrange();

Enter # data points:

>    3

Enter data points:

>    0 1

>    1 2

>    2 5

F(x)= -.5000000000*(-1.000000000*x+1.000000000)*(x-2.)-2.000000000*x*(x-2.)+2.500000000*x*(x-1.)

Test:

>    0

     F(0.000000)= 1.000000

>    1

     F(1.000000)= 2.000000

>    2

     F(2.000000)= 5.000000

>    3

     F(3.000000)= 10.000000

>    1.5

     F(1.500000)= 3.250000

>    100000

Bye!