Příklady

1. příklad:

 

Funkce f je dána tabulkou ...

 

xi 0 1 2 3
fi 0 3 1 3

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

body := vector([[0, 0], [1, 3], [2, 1], [3, 3]])

... a naším úkolem je najít takový polynom, který by procházel všemi uzlovými body.

Podle předcházejícího postupu zkonstruujeme Lagrangerův interpolační polynom.třetího stupně

 

Ze zadaných bodů sestrojíme bázové funkce a1, ..., a4.

> a:=array(1..k):
    for i from 1 by 1 to k do
        a[i]:= product( (x-body[j][1])/(body[i][1]-body[j][1]), j=1..i-1 )*
                  product( (x-body[j][1])/(body[i][1]-body[j][1]), j=i+1..k )
    od;

a[1] := (-x+1)*(-1/2*x+1)*(-1/3*x+1)

a[2] := x*(-x+2)*(-1/2*x+3/2)

a[3] := 1/2*x*(x-1)*(-x+3)

a[4] := 1/3*x*(1/2*x-1/2)*(x-2)

... a nyní už můžeme sestrojit Lagrangerův polynom ...

> L(x):=sum(body[n][2]*a[n], n=1..k);

L(x) := 3*x*(-x+2)*(-1/2*x+3/2)+1/2*x*(x-1)*(-x+3)+...

... a případně upravit.

> L(x):=expand(L(x));

L(x) := 3/2*x^3-7*x^2+17/2*x

Graf opravdu prochází všemi čtyřmi zadanými uzlovými body.

> plots[display]({plot(body,x=body[1][1]..body[k][1],style=point,color=blue),
                            plot(L(x),x=body[1][1]..body[k][1],style=line,color=red)
                          });

[Maple Plot]

 

 

 

 

2. příklad:

 

Vytvořme si tabulku funkce f(x)  = sin(x) na intervalu <-Pi ; Pi> tak, že ji tabelujeme s krokem Pi/2.

> k:=5:
    body:=[seq([a+i*(b-a)/(k-1),f(a+i*(b-a)/(k-1))],i=0..k-1)];

body := [[-Pi, 0], [-1/2*Pi, -1], [0, 0], [1/2*Pi, ...

 

A nyní budeme funkci danou touto tabulkou interpolovat Lagrangerovým interpolačním polynomem čtvrtého stupně. Vytvoříme bázové funkce  a1 ... a5 ...

> a:=array(1..k):
    for i from 1 by 1 to k do
        a[i]:= product( (x-body[j][1])/(body[i][1]-body[j][1]), j=1..i-1 )*
                  product( (x-body[j][1])/(body[i][1]-body[j][1]), j=i+1..k )
    od;

a[1] := 2/3*(x+1/2*Pi)/Pi^4*x*(x-1/2*Pi)*(x-Pi)

a[2] := -8/3*(x+Pi)/Pi^4*x*(x-1/2*Pi)*(x-Pi)

a[3] := 4*(x+Pi)/Pi^4*(x+1/2*Pi)*(x-1/2*Pi)*(x-Pi)

a[4] := -8/3*(x+Pi)/Pi^4*(x+1/2*Pi)*x*(x-Pi)

a[5] := 2/3*(x+Pi)/Pi^4*(x+1/2*Pi)*x*(x-1/2*Pi)

 

... a dosazením do vzorce získáme ...

> L(x):=sum(body[n][2]*a[n], n=1..k);

L(x) := 8/3*(x+Pi)/Pi^4*x*(x-1/2*Pi)*(x-Pi)-8/3*(x+...

... po zjednodušení ...

> L(x):=expand(L(x));

L(x) := -8/3/Pi^3*x^3+8/3*x/Pi

 

Na grafech je vidět, že přestože náš polynom přesně neodpovídá funkci sin(x), jeho graf opět prochází zvolenými uzlovými body.

> plots[display]({plot(body,x=body[1][1]..body[k][1],style=point,color=blue),
                            plot(L(x),x=body[1][1]..body[k][1],style=line,color=red),
                            plot(f(x),x=body[1][1]..body[k][1],style=line,color=green)
                          });

[Maple Plot]

 

 

změna počtu uzlových bodů:

Uzlových bodů : 4

 

Uzlových bodů : 5

 

Uzlových bodů : 6

 

Uzlových bodů : 7

 

Soubor v Maplu: lagrange_priklady.mws