Postup konstrukce s využitím Maplu

Jsou dána čísla x1 ... xk  a f1 ... fk .

> k:=5:
    body:=array(1..k,[[x[1],f[1]],[x[2],f[2]],[x[3],f[3]],[x[4],f[4]],[x[5],f[5]]]);

 

body := vector([[x[1], f[1]], [x[2], f[2]], [x[3], ...

Hledáme polynom N(x) takový, pro který platí

 N(xi) = fi

Newtonů polynom N(x) bude ve tvaru

N(x) =  
  =   a1 + a2(x - x1) + a3(x - x1)(x - x2) + ... + ak(x - x1)(x - x2) ... (x - xk-1)

 

Víme, že musí platit N(xi) = fi . Koeficienty ai spočítáme ze soustavy rovnic, kterou získáme postupným dosazováním xi do předcházející rovnosti.

 

f[1] =  

f[2] =  

f[3] =  

...

f[k] =  

N(x[1]) = a[1]

N(x[2]) = a[1]+a[2]*(x[2]-x[1])

N(x[3]) = a[1]+a[2]*(x[3]-x[1])+a[3]*(x[3]-x[1])*(x...

...

N(x[k]) = a[1]+a[2]*(x[k]-x[1])+a[3]*(x[k]-x[1])*(x...+ ... + a[k]*(x[k]-x[1])*(x[k]-x[2])

(x[k]-x[k-2])*(x[k]-x[k-1])

Matice této soustavy bude vypadat takto

> A:=array(1..k,1..k):
    for i from 1 by 1 to k do
        A[i,1]:=1:
    end do:
    for i from 1 by 1 to k do
        for j from 2 by 1 to k do
            A[i,j]:=0:
        end do:
    end do:
    f(y):=1:
    for j from 2 by 1 to k do
        f(y):=f(y)*(y-body[j-1][1]):
        for i from j by 1 to k do
            A[i,j]:=eval(f(y),y=body[i][1]):
        end do:
    end do:
eval(A);

matrix([[1, 0, 0, 0, 0], [1, x[2]-x[1], 0, 0, 0], [...

... se sloupcem pravých stran ...

> B:=array(1..k):
    for i from 1 by 1 to k do
        B[i]:=body[i][2]:
    end do:
    eval(B);

vector([f[1], f[2], f[3], f[4], f[5]])

 

procedura Newton()