TD 4 Zéros de polynômes, drapeaux, ensemble de Julia.
Maple permet de faire des graphiques assez facilement. Ce TD permet d'illustrer quelques-unes des possibilités offertes par ce logiciel.
I-Zéros de polynômes
On peut trouver les racines approchées d'un polynôme à partir de l'instruction fsolve. Sachant que les racines d'un polynôme sont dans le cas général complexes, on souhaite représenter sur un graphique à deux dimensions les valeurs de ces racines. Pour réaliser une telle opération pour un polynôme de degré quelconque, on tapera et on s'inspirera des instructions suivantes.
racs:=[fsolve(sum(x^i/(i+1),i=0..10),x,complex)];
XX:=seq([Re(racs[j]),Im(racs[j])],j=1..nops(racs));
plot([XX],style=point,symbol=circle);
> i:='i';racs:=[fsolve(sum(x^i/(i+1),i=0..10),x,complex)];
> sum(x^i/(i+1),i=0..10);
>
XX:=seq([Re(racs[j]),Im(racs[j])],j=1..nops(racs));
plot([XX],style=point,symbol=circle);
Soit la famille de polynômes suivante
telle que
.
A partir d'une boucle
for
, calculer les 40 premiers polynômes.
Tracer sur un graphe les racines du polynôme de degré 10.
En utilisant à nouveau une boucle for, tracer sur un même graphe les racines des polynômes de
à
.
Tracer sur un même graphe les racines de , et . Que peut-on dire des racines du polynôme quand n tend vers l'infini.
Soit maintenant la famille de polynômes suivante telle que .
Reprendre les questions précédentes, et particulier que peut-on dire des racines du polynôme quand n tend vers l'infini.
Soit maintenant la famille de polynômes suivante telle que .
Reprendre les questions précédentes, et particulier que peut-on dire des racines du polynôme quand n tend vers l'infini.
Une autre méthode graphique pour voir les polynômes consiste à visualiser à trois dimensions le module du polynôme en fonction de x et de y, en utilisant plot3d. Choisir des valeurs raisonnables des intervalles pour x et y.
> for i from 1 to 40 do P||i:=sum(x^n/n!,n=0..i)od:
>
for i from 1 to 40 do racs:=[fsolve(P||i,x,complex)];
XX||i:=[seq([Re(racs[j]),Im(racs[j])],j=1..nops(racs))];
od:
> plot([seq(XX||i,i=1..40)],style=point,symbol=circle);
>
for i from 1 to 40 do racs:=[fsolve(P||i-10,x,complex)];
XX||i:=[seq([Re(racs[j]),Im(racs[j])],j=1..nops(racs))];
od:
> plot([seq(XX||i,i=1..40)],style=point,symbol=circle);
> plot([XX10,XX20,XX30,XX40],style=point,symbol=circle);
> for i from 1 to 40 do Q||i:=sum(n*x^n,n=0..i)od:
>
for i from 1 to 40 do racs:=[fsolve(Q||i,x,complex)];
XX||i:=[seq([Re(racs[j]),Im(racs[j])],j=1..nops(racs))];
od:
> plot([seq(XX||i,i=1..40)],x=-2..2,style=point,symbol=circle);
> plot([XX10,XX20,XX30,XX40],style=point,symbol=circle);
> for i from 1 to 40 do R||i:=sum(n!*x^n,n=0..i)od:
>
for i from 1 to 40 do racs:=[fsolve(R||i,x,complex)];
XX||i:=[seq([Re(racs[j]),Im(racs[j])],j=1..nops(racs))];
od:
> plot([seq(XX||i,i=1..40)],x=-2..2,style=point,symbol=circle);
> plot([XX10,XX20,XX30,XX40],style=point,symbol=circle);
> plot3d(evalc(abs(subs(x=x+I*y,P10))),x=-3.56..3.37,y=-5.63..5.63);
> XX10;
II. Les drapeaux
A partir des instructions suivantes, on va réaliser quelques drapeaux.
Le drapeau français.
with(plottools):with(plots):
rectangles:=rectangle([-3,4],[-1,-1],color=blue),rectangle([1,4],[3,-1],color=red):
border:=plot({-1,4},-3..3,color=black):
flag2d:=display([rectangles,border],view=[-5..5,-1.0..4],scaling=constrained,axes=none):
flag2d;
>
with(plottools):with(plots):
rectangles:=rectangle([-3,4],[-1,-1],color=blue),rectangle([1,4],[3,-1],color=red):
border:=plot({-1,4},-3..3,color=black):
flag2d:=display([rectangles,border],view=[-5..5,-1.0..4],scaling=constrained,axes=none):
flag2d;
Warning, the names arrow and changecoords have been redefined
L'instruction display permet de grouper des graphiques dans une seule figure.
S:=t->100/(100+(t-Pi/2)^8):
R:=t->S(t)*(2-sin(7*t)-cos(30*t)/2):
mapleleaf:=plot([R,t->t,-Pi/2..3/2*Pi],coords=polar,axes=none,color=red,numpoints=1000):
mapleleaf:=subs(CURVES=POLYGONS,mapleleaf):
rectangles:=rectangle([-5,4],[-3,-1],color=red),rectangle([3,4],[5,-1],color=red):
border:=plot({-1,4},-3..3,color=black):
flag2d:=display([rectangles,mapleleaf,border],view=[-6..6,-1.0..4],scaling=constrained,axes=none):
flag2d;
>
S:=t->100/(100+(t-Pi/2)^8):
R:=t->S(t)*(2-sin(7*t)-cos(30*t)/2):
mapleleaf:=plot([R,t->t,-Pi/2..3/2*Pi],coords=polar,axes=none,color=red,numpoints=1000):
mapleleaf:=subs(CURVES=POLYGONS,mapleleaf):
rectangles:=rectangle([-5,4],[-3,-1],color=red),rectangle([3,4],[5,-1],color=red):
border:=plot({-1,4},-3..3,color=black):
flag2d:=display([rectangles,mapleleaf,border],view=[-6..6,-1.0..4],scaling=constrained,axes=none):
flag2d;
Un peu d'animation !
for t from 1 to 16 do wavingflag3d||t:=transform((x,y,z)->[x,y+1/2*sin(x+t),0])(flag2d): od:
display([seq(wavingflag3d||u,u=1..16)],scaling=unconstrained,
orientation=[-110,50],axes=none,style=patchnogrid,shading=none,insequence=true);
>
for t from 1 to 16 do wavingflag3d||t:=transform((x,y,z)->[x,y+1/2*sin(x+t),0])(flag2d): od:
display([seq(wavingflag3d||u,u=1..16)],scaling=unconstrained,
orientation=[-110,50],axes=none,style=patchnogrid,shading=none,insequence=true);
III. L'ensemble de Julia
L'ensemble de Julia est défini comme l'ensemble des points z=(x,y) du plan complexe tel que une itération infinie de z, f(f(f(f(…f(z)…) ne tend pas vers l'infini, où la fonction f est telle que z->z2-1.
En pratique, on se limite à 25 itérations. De plus, si le module de z devient supérieur à 3, on considère que les itérations successives conduiront z à l'infini.
F:=proc(x,y)local z,i;
z:=evalf(x+y*I);
for i from 1 to 25 while abs(z) <=3 do z:=z^2-1 od;
if(abs(z)>3) then 1 else 0 fi;
end;
plot3d(F,-2..2,-1..1,grid=[200,200],orientation=[90,0],style=patchnogrid, axes=box,shading=zhue);
>
F:=proc(x,y)local z,i;
z:=evalf(x+y*I);
for i from 1 to 25 while abs(z) <=3 do z:=z^2-1 od;
if(abs(z)>3) then 1 else 0 fi;
end;
plot3d(F,-2..2,-1..1,grid=[200,200],orientation=[90,0],style=patchnogrid, axes=box,shading=zhue);
On peut améliorer la procédure en calculant directement les parties réelles et imaginaires.
Modifier la procédure en se servant du fait que abs(z)<3 est équivalent à
et que z donne
est équivalent à (x,y)
donnent (
).
Que constatez-vous ?
>
F1:=proc(x,y)
local x1,y1,tmp,i;
x1:=x;y1:=y;
for i from 1 to 25 while (x1^2+y1^2) <=9 do
tmp:=x1^2-1-y1^2;
y1:=2*x1*y1;
x1:=tmp;
od;
if((x1^2+y1^2)>9) then 1 else 0 fi;
end;
> plot3d(F1,-2..2,-1..1,grid=[200,200],orientation=[90,0],style=patchnogrid, axes=box,shading=zhue);
>