Num. Math.—9

fokszámkorlát az unicitáshoz!

p1[x_]:=x^2+1

p2[x_]:=x^2+1+(x+1)(x)(x-1)

{p1[-1],p1[0],p1[1]}

{p2[-1],p2[0],p2[1]}

Lagrange Interpoláció

Adjuk meg az Lagrange alapinterpolációs polinomokat, majd ezek segítségével állítsuk elõ a Lagrange interpolációs polinomot! Próbáljuk ki a következõ adathalmazokon:

x={1,2,3} , y={2,5,10}

Javaslat

LagrBase[j_,x_List,var_]:=((∏_(k=1)^j)((var-x[[k]])/(x[[j+1]]-x[[k]])))((∏_(k=j+2)^(Length[x]))((var-x[[k]])/(x[[j+1]]-x[[k]])))

LagrInterp[x_List,y_List,var_]:=(∑_(j=0)^(Length[x]-1))y[[j+1]]LagrBase[j,x,var]

Példa

Clear[x0,y0]

x0={1,2,3};y0={2,5,10};

A bázispolinomok (j=0,1,2):

{LagrBase[0,x0,x],LagrBase[1,x0,x],LagrBase[2,x0,x]}

LagrBase[0,x0,x]/.{{x->x0[[1]]},{x->x0[[2]]},{x->x0[[3]]}}

A Lagrange interpolációs polinom mint lineáris kombináció:

LagrInterp[x0,y0,x]

Expand[%]

?InterpolatingPolynomial

Transpose[{{1,2,3},{4,5,6}}]

Expand[InterpolatingPolynomial[Transpose[{x0,y0}],x]]

Expand[InterpolatingPolynomial[{{1,2},{2,5},{3,10}},x]]

Transpose[{x0,y0}]//TableForm

?InterpolatingPolynomial

Ábrázoljuk a pontokat és az interpolációs polinomot!

Plot[LagrInterp[x0,y0,x],{x,0,4}]

Transpose[{x0,y0}]

Map[Point[#]&,Transpose[{x0,y0}]]

Plot[LagrInterp[x0,y0,x],{x,0,4},ImageSize->{300,300},Epilog->{RGBColor[1,0,0],PointSize[.03],Map[Point[#]&,Transpose[{x0,y0}]]},PlotRange->{0,20}]

Feladat

x1={1,2,3,4,5}; y1={0,6,24,60,120}

Adjuk meg a bázispolinomokat, az interpolációs polinomokat és ábrázoljuk a pontokat és az interpolációs polinomot!

Oldjuk meg a feladatot a határoztlan együtthatók módszerével is!

x1={1,2,3,4,5};y1={0,6,24,60,120};

{LagrBase[0,x1,x],LagrBase[1,x1,x],LagrBase[2,x1,x],LagrBase[3,x1,x],LagrBase[4,x1,x]}//TableForm

LagrInterp[x1,y1,x]//Expand

y1

Plot[LagrInterp[x1,y1,x],{x,0,6},ImageSize->{300,300},Epilog->{RGBColor[1,0,0],PointSize[.03],Map[Point[#]&,Transpose[{x1,y1}]]},PlotRange->{-5,130}]

Lagrange Interpoláció, hibabecslés

x/(x^2+1) [-1,1]-en L4-gyel, 

x0={-1,-1/2,0,1/2,1}
y0={-1/2,-2/5,0,2/5,1/2}
Milyen hibabecslést adhatunk?

Javaslat

Hibaképlet:  ω(x)/n!(f^((n)))(ξ) ,n=5

x0={-1,-1/2,0,1/2,1}

f[x_]:=x/(x^2+1)

f[1/2]

Table[f[x0[[i]]],{i,5}]

p=Expand[InterpolatingPolynomial[{{-1,-1/2},{-1/2,-2/5},{0,0},{1/2,2/5},{1,1/2}},x]]

Plot[{%,f[x]},{x,-1,1},PlotStyle->{{RGBColor[1,0,0]},{RGBColor[0,0,1]}}]

Plot[Evaluate[D[f[x],{x,5}]],{x,-1,1}]

D[f[x],{x,5}]/.x->0

Plot[Abs[(x+1)(x+1/2)x(x-1/2)(x-1)],{x,-1,1}]

Solve[D[(x+1)(x+1/2)x(x-1/2)(x-1),x]==0]

N[%]

{{x->-0.8222164340791343`},{x->0.8222164340791343`},{x->-0.271956127951169`},{x->0.271956127951169`}}

(x+1)(x+1/2)x(x-1/2)(x-1)/.x->0.8222164340791343`

A hiba mértéke tesztpontokban

Table[Abs[f[t]-p/.x->t],{t,-1,1,.1}]

Sin[x] [0,π/2]-en L2-vel, 

x0={0, π/6, .π/2}
y0={0,1/2,1}
Milyen hibabecslést adhatunk?

Javaslat

Hibaképlet:  ω(x)/n!(f^((n)))(ξ) ,n=3

x0={0,π/6,π/2}

f[x_]:=Sin[x]

f[π/6]

Table[f[x0[[i]]],{i,3}]

p=Expand[InterpolatingPolynomial[{{0,0},{π/6,1/2},{π/2,1}},x]]

Plot[{%,f[x]},{x,0,π/2},PlotStyle->{{RGBColor[1,0,0]},{RGBColor[0,0,1]}}]

Plot[Evaluate[D[f[x],{x,3}]],{x,0,π/2}]

D[f[x],{x,3}]/.x->0

Plot[Abs[(x)(x-π/6)(x-π/2)],{x,0,π/2}]

Solve[D[(x)(x-π/6)(x-π/2),x]==0]

N[%]

x(x-π/6)(x-π/2)/.x->1.1599024164680696`

Abs[%/6]

1/6 31/100.

A hiba |f-L|≤1/6 31/100 ~ 0.052

A hiba mértéke tesztpontokban

Table[Abs[f[t]-p/.x->t],{t,0,π/2,.1}]

Black-box one stroke:

NMaximize[{Abs[x(x-π/6)(x-π/2)]/6,0≤x≤π/2},x]

NMaximize[{Abs[f[x]-p],0≤x≤π/2},x]