Application Center - Maplesoft

App Preview:

LAGRANGE Interpolation

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application




 

 

 

 

                                              LAGRANGE  Interpolation

 

                                         Univ.-Prof. Dr.-Ing. habil. Josef  BETTEN

                                                   RWTH Aachen University

                      Mathematical Models in Materials Science and Continuum Mechanics           

                                                            Augustinerbach 4-20

                                                  D-52056  A a c h e n ,  Germany

 

                                                   <betten@mmw.rwth-aachen.de>    

 

 

Durch  n + 1 Stützwerte  f (x[k]), k = 0,1,...,n, soll ein Polynom n-ten Grades gelegt werden. Mit

Hilfe der LAGRANGEschen Interpolationsmethode erhält man ein Polynom  n-ten Grades gemäß:

 

restart:

P(x):=Sum(f(x[k])*L[n,k](x),k=0..n);

P(x) := Sum(f(x[k])*L[n, k](x), k = 0 .. n)

(1)

 

Für jedes  k = 0,1, ..., n  ist eine  LAGRANGEsche Grundfunktion folgendermaßen definiert:

 

restart:

L[n,k](x):=Product((x-x[i])/(x[k]-x[i]),i=0..n),  k<>i;

 

L[n, k](x) := Product((x-x[i])/(x[k]-x[i]), i = 0 .. n), k <> i

(2)

 

L[n,k](x[i]):=delta[ik]=piecewise(i=k,1,  i<>k,0);

L[n, k](x[i]) := delta[ik] = piecewise(i = k, 1, i <> k, 0)

(3)

 

Beispiel:  Gegeben seien sechs Messpunkte

restart:

[x[k],y[k]]=[[-1,0],[-1/2,3/4],[0,1],[1/4,10/9],[3/4,1/2],[1,0]];

[x[k], y[k]] = [[-1, 0], [-1/2, 3/4], [0, 1], [1/4, 10/9], [3/4, 1/2], [1, 0]]

(4)

 

durch die ein Interpolationspolynom fünften Grades gelegt werden soll.

Zunächst werden LAGRANGEsche Grundfunktionen fünften Grades  (n = 5) formuliert.

restart:

L[5,k](x):=Product((x-x[i])/(x[k]-x[i]),i=0..5); k<>i;

L[5, k](x) := Product((x-x[i])/(x[k]-x[i]), i = 0 .. 5)

k <> i

(5)

L[5,k](x):=value(%%);

L[5, k](x) := (x-x[0])*(x-x[1])*(x-x[2])*(x-x[3])*(x-x[4])*(x-x[5])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[4])*(x[k]-x[5]))

(6)

 

Für die einzelnen Stützstellen  (k = 0,1,...,5) erhält man:

L[5,0](x):=%*(x[k]-x[0])/(x-x[0]);

L[5, 0](x) := (x-x[1])*(x-x[2])*(x-x[3])*(x-x[4])*(x-x[5])/((x[k]-x[1])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[4])*(x[k]-x[5]))

(7)

L[5,0](x):=             subs({x[k]=-1,x[1]=-1/2,x[2]=0,x[3]=1/4,x[4]=3/4,x[5]=1},%);

L[5, 0](x) := -16*(x+1/2)*x*(x-1/4)*(x-3/4)*(x-1)/35

(8)

L[5,0](-1):=subs(x=-1,%);

L[5, 0](-1) := 1

(9)

L[5,0](x):=expand(%%);

L[5, 0](x) := -(16/35)*(x^5)+(24/35)*(x^4)-(3/35)*(x^3)-(13/70)*(x^2)+(3/70)*x

(10)

L[5,1](x):=L[5,k](x)*(x[k]-x[1])/(x-x[1]);

L[5, 1](x) := (x-x[0])*(x-x[2])*(x-x[3])*(x-x[4])*(x-x[5])/((x[k]-x[0])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[4])*(x[k]-x[5]))

(11)

L[5,1](x):=             subs({x[k]=-1/2,x[0]=-1,x[2]=0,x[3]=1/4,x[4]=3/4,x[5]=1},%);

L[5, 1](x) := 128*(x+1)*x*(x-1/4)*(x-3/4)*(x-1)/45

(12)

L[5,1](-1/2):=subs(x=-1/2,%);

L[5, 1](-1/2) := 1

(13)

L[5,1](x):=expand(%%);

L[5, 1](x) := (128/45)*(x^5)-(128/45)*(x^4)-(104/45)*(x^3)+(128/45)*(x^2)-(8/15)*x

(14)

L[5,2](x):=L[5,k](x)*(x[k]-x[2])/(x-x[2]);

L[5, 2](x) := (x-x[0])*(x-x[1])*(x-x[3])*(x-x[4])*(x-x[5])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[3])*(x[k]-x[4])*(x[k]-x[5]))

(15)

L[5,2](x):=             subs({x[k]=0,x[0]=-1,x[1]=-1/2,x[3]=1/4,x[4]=3/4,x[5]=1},%);

L[5, 2](x) := -32*(x+1)*(x+1/2)*(x-1/4)*(x-3/4)*(x-1)/3

(16)

L[5,2](0):=subs(x=0,%);

L[5, 2](0) := 1

(17)

L[5,2](x):=expand(%%);

L[5, 2](x) := -(32/3)*(x^5)+(16/3)*(x^4)+14*x^3-(19/3)*(x^2)-(10/3)*x+1

(18)

L[5,3](x):=L[5,k](x)*(x[k]-x[3])/(x-x[3]);

L[5, 3](x) := (x-x[0])*(x-x[1])*(x-x[2])*(x-x[4])*(x-x[5])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[2])*(x[k]-x[4])*(x[k]-x[5]))

(19)

L[5,3](x):=             subs({x[k]=1/4,x[0]=-1,x[1]=-1/2,x[2]=0,x[4]=3/4,x[5]=1},%);

L[5, 3](x) := 512*(x+1)*(x+1/2)*x*(x-3/4)*(x-1)/45

(20)

L[5,3](1/4):=subs(x=1/4,%);

L[5, 3](1/4) := 1

(21)

L[5,3](x):=expand(%%);

L[5, 3](x) := (512/45)*(x^5)-(128/45)*(x^4)-(704/45)*(x^3)+(128/45)*(x^2)+(64/15)*x

(22)

L[5,4](x):=L[5,k](x)*(x[k]-x[4])/(x-x[4]);

L[5, 4](x) := (x-x[0])*(x-x[1])*(x-x[2])*(x-x[3])*(x-x[5])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[5]))

(23)

L[5,4](x):=             subs({x[k]=3/4,x[0]=-1,x[1]=-1/2,x[2]=0,x[3]=1/4,x[5]=1},%);

L[5, 4](x) := -512*(x+1)*(x+1/2)*x*(x-1/4)*(x-1)/105

(24)

L[5,4](3/4):=subs(x=3/4,%);

L[5, 4](3/4) := 1

(25)

L[5,4](x):=expand(%%);

L[5, 4](x) := -(512/105)*(x^5)-(128/105)*(x^4)+(192/35)*(x^3)+(128/105)*(x^2)-(64/105)*x

(26)

L[5,5](x):=L[5,k](x)*(x[k]-x[5])/(x-x[5]);

L[5, 5](x) := (x-x[0])*(x-x[1])*(x-x[2])*(x-x[3])*(x-x[4])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[4]))

(27)

L[5,5](x):=             subs({x[k]=1,x[0]=-1,x[1]=-1/2,x[2]=0,x[3]=1/4,x[4]=3/4},%);

L[5, 5](x) := 16*(x+1)*(x+1/2)*x*(x-1/4)*(x-3/4)/9

(28)

L[5,5](1):=subs(x=1,%);

L[5, 5](1) := 1

(29)

L[5,5](x):=expand(%%);

L[5, 5](x) := (16/9)*(x^5)+(8/9)*(x^4)-(13/9)*(x^3)-(7/18)*(x^2)+(1/6)*x

(30)

 

Obige LAGRANGEsche Grundfunktionen können eleganter vermöge einer "DO-Schleife" direkt

erzeugt werden:

restart:

L[5,k](x):=Product((x-x[i])/(x[k]-x[i]),i=0..5); k<>i;

L[5, k](x) := Product((x-x[i])/(x[k]-x[i]), i = 0 .. 5)

k <> i

(31)

L[5,k](x):=value(%%);

L[5, k](x) := (x-x[0])*(x-x[1])*(x-x[2])*(x-x[3])*(x-x[4])*(x-x[5])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[4])*(x[k]-x[5]))

(32)

for i from 0 to 5 do                    L[5,i](x):=L[5,k](x)*(x[k]-x[i])/(x-x[i]) od;

L[5, 0](x) := (x-x[1])*(x-x[2])*(x-x[3])*(x-x[4])*(x-x[5])/((x[k]-x[1])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[4])*(x[k]-x[5]))

L[5, 1](x) := (x-x[0])*(x-x[2])*(x-x[3])*(x-x[4])*(x-x[5])/((x[k]-x[0])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[4])*(x[k]-x[5]))

L[5, 2](x) := (x-x[0])*(x-x[1])*(x-x[3])*(x-x[4])*(x-x[5])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[3])*(x[k]-x[4])*(x[k]-x[5]))

L[5, 3](x) := (x-x[0])*(x-x[1])*(x-x[2])*(x-x[4])*(x-x[5])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[2])*(x[k]-x[4])*(x[k]-x[5]))

L[5, 4](x) := (x-x[0])*(x-x[1])*(x-x[2])*(x-x[3])*(x-x[5])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[5]))

L[5, 5](x) := (x-x[0])*(x-x[1])*(x-x[2])*(x-x[3])*(x-x[4])/((x[k]-x[0])*(x[k]-x[1])*(x[k]-x[2])*(x[k]-x[3])*(x[k]-x[4]))

(33)

 

Mit den gegebenen Stützwerten  x[0],...,x[5]  erhält man durch eine weitere  "DO-Schleife"   

die  LAGRANGE  Polynome:

for i from 0 to 5 do L[5,i](x):= subs({x[k]=x[i]},          {x[0]=-1,x[1]=-1/2,x[2]=0,x[3]=1/4,x[4]=3/4,x[5]=1},L[5,i](x)) od;

L[5, 0](x) := -16*(x+1/2)*x*(x-1/4)*(x-3/4)*(x-1)/35

L[5, 1](x) := 128*(x+1)*x*(x-1/4)*(x-3/4)*(x-1)/45

L[5, 2](x) := -32*(x+1)*(x+1/2)*(x-1/4)*(x-3/4)*(x-1)/3

L[5, 3](x) := 512*(x+1)*(x+1/2)*x*(x-3/4)*(x-1)/45

L[5, 4](x) := -512*(x+1)*(x+1/2)*x*(x-1/4)*(x-1)/105

L[5, 5](x) := 16*(x+1)*(x+1/2)*x*(x-1/4)*(x-3/4)/9

(34)

 

 

Weiterhin findet man:

for i from 0 to 5 do L[5,i](x):=expand(L[5,i](x)) od;

L[5, 0](x) := -(16/35)*(x^5)+(24/35)*(x^4)-(3/35)*(x^3)-(13/70)*(x^2)+(3/70)*x

L[5, 1](x) := (128/45)*(x^5)-(128/45)*(x^4)-(104/45)*(x^3)+(128/45)*(x^2)-(8/15)*x

L[5, 2](x) := -(32/3)*(x^5)+(16/3)*(x^4)+14*x^3-(19/3)*(x^2)-(10/3)*x+1

L[5, 3](x) := (512/45)*(x^5)-(128/45)*(x^4)-(704/45)*(x^3)+(128/45)*(x^2)+(64/15)*x

L[5, 4](x) := -(512/105)*(x^5)-(128/105)*(x^4)+(192/35)*(x^3)+(128/105)*(x^2)-(64/105)*x

L[5, 5](x) := (16/9)*(x^5)+(8/9)*(x^4)-(13/9)*(x^3)-(7/18)*(x^2)+(1/6)*x

(35)

 

 

 

Im folgenden Bild sind die LAGRANGE  Polynome L[5,k](x), k =0,1,...,5  dargestellt.

alias(th=thickness,co=color):

plot({seq(L[5,k](x),k=0..5)},x=-1..1,xtickmarks=4,th=3,co=black,  title="LAGRANGE  Funktionen  L[5,k](x),  k = 0. . . 5");

 

 

 

Mit obigen LAGRANGE  Polynomen und den gegebenen Stützwerten  f(x[k]) =  y[k] ermittelt man

das Intepolationspolynom fünften Grades gemäß:

 

 

P[5](x):=Sum(y[kappa]*L[5,kappa](x),kappa=0..5);

P[5](x) := Sum(y[kappa]*L[5, kappa](x), kappa = 0 .. 5)

(36)

with(linalg):

y[k]:=matrix(1,6,[0,3/4,1,10/9,1/2,0]);

y[k] := Vector[row](6, {(1) = 0, (2) = 3/4, (3) = 1, (4) = 10/9, (5) = 1/2, (6) = 0})

(37)

L[5,k](x):=matrix(6,1,[seq(L[5,k](x),k=0..5)]);

L[5,k](x):=[[[-16/35 x^5+24/35 x^4-3/35 x^3-13/70 x^2+3/70 x],[128/45 x^5-128/45 x^4-104/45 x^3+128/45 x^2-8/15 x],[-32/3 x^5+16/3 x^4+14 x^3-19/3 x^2-10/3 x+1],[512/45 x^5-128/45 x^4-704/45 x^3+128/45 x^2+64/15 x],[-512/105 x^5-128/105 x^4+192/35 x^3+128/105 x^2-64/105 x],[16/9 x^5+8/9 x^4-13/9 x^3-7/18 x^2+1/6 x]]]

(38)

P[5](x):=multiply(y[k],L[5,k](x));

P[5](x):=[[[1+4736/2835 x^5-1616/2835 x^4-6728/2835 x^3-1219/2835 x^2+664/945 x]]]

(39)

P[5](x):=1+(4736/2835)*x^5-(1616/2835)*x^4-(6728/2835)*x^3- (1219/2835)*x^2+(664/945)*x;

P[5](x) := 1+(4736/2835)*(x^5)-(1616/2835)*(x^4)-(6728/2835)*(x^3)-(1219/2835)*(x^2)+(664/945)*x

(40)

 

Dieses Polynom mit den Messwerten

[x[k],y[k]]=                [[-1,0],[-1/2,3/4],[0,1],[1/4,10/9],[3/4,1/2],[1,0]];

[x[k], y[k]] = [[-1, 0], [-1/2, 3/4], [0, 1], [1/4, 10/9], [3/4, 1/2], [1, 0]]

(41)

wird im nächsten Bild dargestellt.

alias(sc=scaling,th=thickness,co=color):

p[1]:=plot(P[5](x),x=-1..1,sc=constrained,th=3,co=black,                         title="Polynom  fünften  Grades"):

p[2]:=plot(rhs(%%%),x=-1..1,xtickmarks=4,ytickmarks=3, style=point,symbol=circle,symbolsize=30,th=4,co=black):

plots[display](seq(p[i],i=1..2));

 

Interpolationspolynome können auch mit Hilfe folgender Determinante erzeugt werden.

restart:  with(linalg):

M:=Matrix([[P(x),seq(x^k,k=0..3),___,x^n],   [y[0],seq(x[0]^k,k=0..3),___,x[0]^n],          [y[1],seq(x[1]^k,k=0..3),___,x[1]^n],           [y[2],seq(x[2]^k,k=0..3),___,x[2]^n],                              [°,°,°,°,°,°,°],                              [y[n],seq(x[n]^k,k=0..3),___,x[n]^n]]);

M := Matrix(6, 7, {(1, 1) = P(x), (1, 2) = 1, (1, 3) = x, (1, 4) = x^2, (1, 5) = x^3, (1, 6) = ___, (1, 7) = x^n, (2, 1) = y[0], (2, 2) = 1, (2, 3) = x[0], (2, 4) = x[0]^2, (2, 5) = x[0]^3, (2, 6) = ___, (2, 7) = x[0]^n, (3, 1) = y[1], (3, 2) = 1, (3, 3) = x[1], (3, 4) = x[1]^2, (3, 5) = x[1]^3, (3, 6) = ___, (3, 7) = x[1]^n, (4, 1) = y[2], (4, 2) = 1, (4, 3) = x[2], (4, 4) = x[2]^2, (4, 5) = x[2]^3, (4, 6) = ___, (4, 7) = x[2]^n, (5, 1) = `°`, (5, 2) = `°`, (5, 3) = `°`, (5, 4) = `°`, (5, 5) = `°`, (5, 6) = `°`, (5, 7) = `°`, (6, 1) = y[n], (6, 2) = 1, (6, 3) = x[n], (6, 4) = x[n]^2, (6, 5) = x[n]^3, (6, 6) = ___, (6, 7) = x[n]^n})

(42)

 

Das Polynom  P(x)  n-ten Grades erhält man aus der Determinante von M gemäß:

restart:

Polynom_P(x):=Solve(Det(M)=0,P(x));

Polynom_P(x) := Solve(Det(M) = 0, P(x))

(43)

 

Als Beispiel werde ein Interpolationspolynom fünften Grades gesucht durch die oben

angenommenen sechs Knotenpunkte.

restart:  with(linalg):

M:=matrix(7,7,[[P[5](x),seq(x^k,k=0..5)],              [y[0],seq(x[0]^k,k=0..5)], [y[1],seq(x[1]^k,k=0..5)],  [y[2],seq(x[2]^k,k=0..5)], [y[3],seq(x[3]^k,k=0..5)],  [y[4],seq(x[4]^k,k=0..5)], [y[5],seq(x[5]^k,k=0..5)]]);

M := Matrix(7, 7, {(1, 1) = P[5](x), (1, 2) = 1, (1, 3) = x, (1, 4) = x^2, (1, 5) = x^3, (1, 6) = x^4, (1, 7) = x^5, (2, 1) = y[0], (2, 2) = 1, (2, 3) = x[0], (2, 4) = x[0]^2, (2, 5) = x[0]^3, (2, 6) = x[0]^4, (2, 7) = x[0]^5, (3, 1) = y[1], (3, 2) = 1, (3, 3) = x[1], (3, 4) = x[1]^2, (3, 5) = x[1]^3, (3, 6) = x[1]^4, (3, 7) = x[1]^5, (4, 1) = y[2], (4, 2) = 1, (4, 3) = x[2], (4, 4) = x[2]^2, (4, 5) = x[2]^3, (4, 6) = x[2]^4, (4, 7) = x[2]^5, (5, 1) = y[3], (5, 2) = 1, (5, 3) = x[3], (5, 4) = x[3]^2, (5, 5) = x[3]^3, (5, 6) = x[3]^4, (5, 7) = x[3]^5, (6, 1) = y[4], (6, 2) = 1, (6, 3) = x[4], (6, 4) = x[4]^2, (6, 5) = x[4]^3, (6, 6) = x[4]^4, (6, 7) = x[4]^5, (7, 1) = y[5], (7, 2) = 1, (7, 3) = x[5], (7, 4) = x[5]^2, (7, 5) = x[5]^3, (7, 6) = x[5]^4, (7, 7) = x[5]^5})

(44)

data:=[-1,0],[-1/2,3/4],[0,1],[1/4,10/9],[3/4,1/2],[1,0];

data := [-1, 0], [-1/2, 3/4], [0, 1], [1/4, 10/9], [3/4, 1/2], [1, 0]

(45)

m:=subs({x[0]=-1,x[1]=-1/2,x[2]=0,x[3]=1/4,x[4]=3/4,x[5]=1}, {y[0]=0,y[1]=3/4,y[2]=1,y[3]=10/9,y[4]=1/2,y[5]=0},%%);

m := Matrix(7, 7, {(1, 1) = P[5](x), (1, 2) = 1, (1, 3) = x, (1, 4) = x^2, (1, 5) = x^3, (1, 6) = x^4, (1, 7) = x^5, (2, 1) = 0, (2, 2) = 1, (2, 3) = -1, (2, 4) = 1, (2, 5) = -1, (2, 6) = 1, (2, 7) = -1, (3, 1) = 3/4, (3, 2) = 1, (3, 3) = -1/2, (3, 4) = 1/4, (3, 5) = -1/8, (3, 6) = 1/16, (3, 7) = -1/32, (4, 1) = 1, (4, 2) = 1, (4, 3) = 0, (4, 4) = 0, (4, 5) = 0, (4, 6) = 0, (4, 7) = 0, (5, 1) = 10/9, (5, 2) = 1, (5, 3) = 1/4, (5, 4) = 1/16, (5, 5) = 1/64, (5, 6) = 1/256, (5, 7) = 1/1024, (6, 1) = 1/2, (6, 2) = 1, (6, 3) = 3/4, (6, 4) = 9/16, (6, 5) = 27/64, (6, 6) = 81/256, (6, 7) = 243/1024, (7, 1) = 0, (7, 2) = 1, (7, 3) = 1, (7, 4) = 1, (7, 5) = 1, (7, 6) = 1, (7, 7) = 1})

(46)

P[5](x):=solve(det(m)=0,P[5](x));

P[5](x) := 1-(1616/2835)*(x^4)+(664/945)*x-(1219/2835)*(x^2)-(6728/2835)*(x^3)+(4736/2835)*(x^5)

(47)

 

Dieses Ergebnis stimmt mit der LAGRANGE  Interpolation überein.

Mit Maple erhält man durch den Befehl  evalf  eine Gleitpunktdarstellung (floating point                                      arithmetic) gemäß.

Q[5](x):=evalf(P[5](x));

Q[5](x) := 1.-.5700176367*x^4+.7026455026*x-.4299823633*x^2-2.373192240*x^3+1.670546737*x^5

(48)

Delta(x):=P[5](x)-Q[5](x);

Delta(x) := 0.

(49)

 

Maple rechnet mit einer Mantissenlänge von 10. Man erhält im obigen Beispiel das exakte Ergebnis.

Je nach Problem kann die Genauigkeit erhöht werden durch eine zusätzliche Angabe:  Digits > 10.

Ebenso erhält man auch Näherungen durch  Digits < 10, wie folgendermaßen gezeigt wird:

q[5](x):=evalf(P[5](x),3);

q[5](x) := 1.-.570*x^4+.703*x-.430*x^2-2.37*x^3+1.67*x^5

(50)

 

Als Abweichung gilt:

delta(x):=P[5](x)-q[5](x);

delta(x) := -0.176367e-4*x^4-0.3544974e-3*x+0.176367e-4*x^2-0.3192240e-2*x^3+0.546737e-3*x^5

(51)

alias(th=thickness,co=color):

plot(delta(x),x=-1..1,th=3,co=black,xtickmarks=4,ytickmarks=3);

 

Fehlernorm

 L[2]:=sqrt((1/2)*Int((delta(xi))^2,xi=-1..1))= evalf(sqrt((1/2)*int((delta(x))^2,x=-1..1)),4);

L[2] := (1/2)*(2^(1/2)*(Int(delta(xi)^2, xi = -1 .. 1))^(1/2)) = 0.1239e-2

(52)

 

 

Bei einer Vielzahl von Knotenpunkten (Meßpunkten) führt die LAGRANGE  Interpolation auf  ein

Polynom hohen Grades, das je nach Lage der Stützstellen zu mehr oder weniger starken                                  "Schwingungen" neigt. Die LAGRANGE  Interpolation ist in solchen Fällen nicht sehr nützlich.                             Vorteilhafter sind dann interpolierende Splines zur Erzeugung glatter Kurven, wie im Folgenden                                   gezeigt wird.

restart:  with(CurveFitting):

data:=[-1,0],[-1/2,3/4],[0,1],[1/4,10/9],[3/4,1/2],[1,0];

data := [-1, 0], [-1/2, 3/4], [0, 1], [1/4, 10/9], [3/4, 1/2], [1, 0]

(53)

S[3](x):=Spline([data],x,degree=3);

S[3](x):={[[211/340-1759/1020 x-299/85 x^2-299/255 x^3,x<-1/2],[1+563/1020 x+88/85 x^2+95/51 x^3,x<0],[1+563/1020 x+88/85 x^2-4484/765 x^3,x<1/4],[597/680+121/60 x-82/17 x^2+1492/765 x^3,x<3/4],[99/68-301/1020 x-148/85 x^2+148/255 x^3,otherwise]]

(54)

 

P[5](x):=1+(664/945)*x-(1219/2835)*x^2-(6728/2835)*x^3- (1616/2835)*x^4+(4736/2835)*x^5;

P[5](x) := 1+(664/945)*x-(1219/2835)*(x^2)-(6728/2835)*(x^3)-(1616/2835)*(x^4)+(4736/2835)*(x^5)

(55)

alias(th=thickness,co=color):

p[1]:=plot(S[3](x),x=-1..1,th=3,co=black,                             title="Polynom  fünften  Grades  und  kubischer  Spline"):

p[2]:=plot(P[5](x),x=-1..1,ytickmarks=3,th=2,co=black):

p[3]:=plot([data],style=point,symbol=circle,symbolsize=30):

plots[display](seq(p[k],k=1..3));

 

 

Man erkennt die "schwingende" Form des LAGRANGE  Polynoms fünften Grades, während                                                 die Spline Interpolation stückweise kubische Polynome erzeugt.

Die Bezeichnung "Spline" bedeutet "dünnes Brett". Ein leicht biegsames Lineal wird an die

Knotenpunkte gelegt. Somit kann eine geglättete Kurve gezeichnet werden.

   Im obigen Bild sind ein Interpolationspolynom  P[5](x)  fünften Grades und eine kubische

Splinefunktion dargestellt.  Ergänzend sind im folgenden Bild ein linearer Spline und eine                                 Splinefunktion fünften Grades ausgedruckt.

for i in [1,5] do S[i](x):=Spline([data],x,degree=i) od;

S[1](x):={[[3/2+(3 x)/(2),x<-1/2],[1+(x)/(2),x<0],[1+(4 x)/(9),x<1/4],[17/12-(11 x)/(9),x<3/4],[2-2 x,otherwise]]

S[5](x):={[[55410973/49336812+10301805/5481868 x+61910150/12334203 x^2+4173320/587343 x^3+2086660/587343 x^4+417332/587343 x^5,x<-1/2],[1+4567805/7048116 x+1168540/12334203 x^2-33843500/12334203 x^3-77663360/12334203 x^4-39829316/12334203 x^5,x<0],[1+4567805/7048116 x+1168540/12334203 x^2-33843500/12334203 x^3-77663360/12334203 x^4+19192064/1762029 x^5,x<1/4],[267029209/263129664+69405365/197347248 x+60830255/24668406 x^2-150829850/12334203 x^3+156309340/12334203 x^4-52833712/12334203 x^5,x<3/4],[-21225079/32891208+1126777285/98673624 x-333609740/12334203 x^2+334536640/12334203 x^3-167268320/12334203 x^4+33453664/12334203 x^5,otherwise]]

(56)

alias(th=thickness,co=color):

p[1]:=plot(S[1](x),x=-1..1,th=1,co=black,                         title="P[5](x),  S[1](x),  S[3](x),  S[5](x)"):

p[2]:=plot(S[3](x),x=-1..1,ytickmarks=3,th=2,co=black):

p[3]:=plot(S[5](x),x=-1..1,th=1,co=black):

p[4]:=plot(P[5](x),x=-1..1,th=3,co=black):

p[5]:=plot([data],style=point,symbol=circle,         symbolsize=30,th=3,co=black):

plots[display](seq(p[k],k=1..5));

 

 

Darin verbindet der lineare Spline die Knotenpunkte linear. Die Splinefunktionen dritten und                                         fünften Grades unterscheiden sich geringfügig. Sie bilden eine gute Intepolation der Messpunkte.                                   Wegen des geringeren Aufwandes ist die kubische Splineinterpolation vorzuziehen. Darüber

hinaus schmiegen sich die Spline-Kurven mit wachsendem  " degree"  immer stärker an das

"schwingende"  Interpolations Polynom P[5](x). Im Grenzfall  degree ---> infinity  sind das

LAGRANGEsche Interpolations Polynom und die Spline-Kurve deckungsgleich:

restart:

with(CurveFitting):

data:=[-1,0],[-1/2,3/4],[0,1],[1/4,10/9],[3/4,1/2],[1,0];

data := [-1, 0], [-1/2, 3/4], [0, 1], [1/4, 10/9], [3/4, 1/2], [1, 0]

(57)

P[5](x):=1+(664/945)*x-(1219/2835)*x^2-(6728/2835)*x^3- (1616/2835)*x^4+(4736/2835)*x^5;

P[5](x) := 1+(664/945)*x-(1219/2835)*(x^2)-(6728/2835)*(x^3)-(1616/2835)*(x^4)+(4736/2835)*(x^5)

(58)

for i in [1,3,5,10,11] do                       S[i](x):=Spline([data],x,degree=i) od:

 

alias(sc=scaling,th=thickness,co=color):

p[1]:=plot({S[1](x),S[5](x),S[10](x),S[11](x)},x=-1..1, sc=constrained,xtickmarks=4,ytickmarks=3,th=1,co=black):

p[2]:=plot(S[3](x),x=-1..1,th=2,co=black):

p[3]:=plot(P[5](x),x=-1..1,th=3,co=black,                            title="P[5],  S[1],  S[3],  S[5],  S[10],  S[11]"):

p[4]:=plot([data],style=point,symbol=circle,symbolsize=30,          th=4,co=black):

plots[display](seq(p[k],k=1..4));

 

 

Abstand zwischen  P[5](x)  und  S[n](x)  ausgedrückt durch die Fehlernorm  L-zwei

 

L[2]:=sqrt((1/2)*Int((P[5](xi)-S[n](xi))^2,xi=-1..1));

L[2] := (1/2)*(2^(1/2)*(Int((P[5](xi)-S[n](xi))^2, xi = -1 .. 1))^(1/2))

(59)

for i in [1,3,5,10,11] do       L[2][i]:=evalf(sqrt((1/2)*int((P[5](x)-S[i](x))^2,x=-1..1))) od;

L[2][1] := .1214617419

L[2][3] := 0.9148476591e-1

L[2][5] := 0.6555433402e-1

L[2][10] := 0.1230545934e-1

L[2][11] := 0.

(60)

 

Grenzwert für dgree  =  infinity

 

L[2][infinity]:=  Limit(sqrt((1/2)*Int((P[5](xi)-S[n](xi))^2,x=-1..1)),n=infinity)=0;

L[2][infinity] := Limit((1/2)*(2^(1/2)*(Int((P[5](xi)-S[n](xi))^2, x = -1 .. 1))^(1/2)), n = infinity) = 0

(61)

 

Bereits für  degree  >=  11  fällt die Splinefunktion  S[n](x)  im hier betrachteten Beispiel mit dem

LAGRANGEschen Interpolationspolynom  P[5](x)  nahezu zusammen.

 

Formfunktionen (shape functions) für finite Elemente

Die LAGRANGEsche Interpolationsmethode ist neben anderen Verfahren sehr hilfreich zur

Erzeugung von Formfunktionen sowohl für ebene als auch für räumliche finite Elemente.

Formfunktionen  N(x,y,z)  sind Interpolationsfunktionen, die einen Zusammenhang zwischen den  

Knotenvariablen  u[k], ... , w[k]  und den Verschiebungen  u(x,y,z), ..., w(x,y,z)  im Innern eines

finiten Elementes herstellen gemäß:

restart:

[u(x,y,z),__,w(x,y,z)]= [Sum(u[k]*N[k](x,y,z),k=1..n),__,Sum(w[k]*N[k](x,y,z),k=1..n)];

[u(x, y, z), __, w(x, y, z)] = [Sum(u[k]*N[k](x, y, z), k = 1 .. n), __, Sum(w[k]*N[k](x, y, z), k = 1 .. n)]

(62)

 

Beispielsweise werden in [BETTEN, J.: Finite Elemente für Ingenieure 1, zweite Aufl., 2003,

Springer, Berlin / Heidelberg] eine Vielzahl von Formfunktionen der LAGRANGE - Klasse

und anderer Typen für Dreiecks-, Rechteck-, Tetraeder-, Hexaederelemente etc. aufgestellt.