Kapitel 22
Interpolation mit Polynomen
> restart:
> datax:=[seq(i,i=1..10)];
> datay:=[seq(rand(10)(), i=1..10)];
> dataxy:=zip( (x,y)->[x,y], datax, datay):
> f:=interp( datax, datay, x);
> p1:=plot(f, x=0.9..10.1):
> p2:=plot(dataxy,style=POINT,symbol=BOX,color=blue):
> with(plots):
> display( [p1,p2] );
Stückweise Interpolation mit Splines
> #datax:=[seq(i,i=1..10)];
> #datay:=[seq( rand(10)(), i=1..10)];
> #dataxy:=zip( (x,y)->[x,y], datax, datay):
>
> f:=unapply(spline( datax, datay, x, 3),x):f(x);
> f(2.5);
> p1:=plot(f(x), x=1..10):
> p2:=plot(dataxy, style=point,symbol=box,color=blue):
> display( [p1,p2] );
> fd:=unapply(diff(f(x), x),x);
> fd2:=unapply(diff(f(x),x,x),x):
> plot( {fd(x), fd2(x)}, x=1..10);
Anpassung mit leastsquare
> restart:
> with(stats): with(fit): with(statplots): with(plots):
Warning, the name changecoords has been redefined
> datax:=[seq( rand(100)(), i=1..50)]:
> datay:=map( x->evalf(sin(x/100*Pi)+rand(30)()/100,4), datax):
> p1:=scatterplot(datax, datay):
> leastsquare[ [x,y], y=a0 + a1*x +a2*x^2, {a0,a1,a2}]( [datax,datay] );
> f:=rhs(%);
> p2:=plot( f, x=0..100):
> display([p1,p2]);
> fy:=a0 + a1*sin(x/10.)+ a2*sin(x/20.) + a3*sin(x/40.);
>
> f:=rhs(leastsquare[ [x,y], y=fy, {a0,a1,a2,a3}]( [datax,datay] ));
> p2:=plot( f, x=0..100):
> display( [p1,p2] );
> fy:=a0 + a1*exp(x):
> f:=rhs(leastsquare[ [x,y], y=fy, {a0,a1}]( [datax,datay] )):
> p2:=plot( f, x=0..100):
> display( [p1,p2] );
> datax1:=[1,2,3]: datax2:=[2,3,4]: datay:=[3,7,8]:
> f:=rhs(leastsquare[ [x1,x2,y], y=a1*x1+a2*x2, {a1,a2} ]([datax1, datax2, datay]));
> seq( subs(x1=datax1[i], x2=datax2[i],f-datay[i]), i=1..3);