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);
![XX := [-1.237876779, -.3714069472], [-1.237876779, ...](images/td47.gif) 
![XX := [-1.237876779, -.3714069472], [-1.237876779, ...](images/td48.gif) 
![XX := [-1.237876779, -.3714069472], [-1.237876779, ...](images/td49.gif) 
![XX := [-1.237876779, -.3714069472], [-1.237876779, ...](images/td410.gif) 
![[Maple Plot]](images/td411.gif) 
Soit la famille de polynômes suivante 
![P[n]](images/td412.gif) telle que
 telle que 
 = sum(x^i/i!,i = 0 .. n)](images/td413.gif) .
 . 
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 
![P[1]](images/td414.gif) à
 à  
![P[40]](images/td415.gif) .
.
Tracer sur un même graphe les racines de 
![P[10]](images/td416.gif) ,
, 
![P[20]](images/td417.gif) et
 et 
![P[30]](images/td418.gif) . Que peut-on dire des racines du polynôme
. Que peut-on dire des racines du polynôme 
![P[n]](images/td419.gif) quand n tend vers l'infini.
 quand n tend vers l'infini.
Soit maintenant la famille de polynômes suivante 
![Q[n]](images/td420.gif) telle que
 telle que 
 = sum(i*x^i,i = 0 .. n)](images/td421.gif) .
 . 
Reprendre les questions précédentes, et particulier que peut-on dire des racines du polynôme 
![Q[n]](images/td422.gif) quand n tend vers l'infini.
 quand n tend vers l'infini.
Soit maintenant la famille de polynômes suivante 
![R[n]](images/td423.gif) telle que
 telle que 
 = sum(i!*x^i,i = 0 .. n)](images/td424.gif) .
 . 
Reprendre les questions précédentes, et particulier que peut-on dire des racines du polynôme 
![R[n]](images/td425.gif) quand n tend vers l'infini.
 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.
 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);
![[Maple Plot]](images/td427.gif) 
> 
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);
![[Maple Plot]](images/td428.gif) 
> plot([XX10,XX20,XX30,XX40],style=point,symbol=circle);
![[Maple Plot]](images/td429.gif) 
> 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);
![[Maple Plot]](images/td430.gif) 
> plot([XX10,XX20,XX30,XX40],style=point,symbol=circle);
![[Maple Plot]](images/td431.gif) 
> 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);
![[Maple Plot]](images/td432.gif) 
> plot([XX10,XX20,XX30,XX40],style=point,symbol=circle);
![[Maple Plot]](images/td433.gif) 
> plot3d(evalc(abs(subs(x=x+I*y,P10))),x=-3.56..3.37,y=-5.63..5.63);
![[Maple Plot]](images/td434.gif) 
> XX10;
![[[-.2146663302, -.6664229720e-1], [-.2146663302, .6...](images/td435.gif) 
![[[-.2146663302, -.6664229720e-1], [-.2146663302, .6...](images/td436.gif) 
![[[-.2146663302, -.6664229720e-1], [-.2146663302, .6...](images/td437.gif) 
![[[-.2146663302, -.6664229720e-1], [-.2146663302, .6...](images/td438.gif) 
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
![[Maple Plot]](images/td439.gif) 
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;
![[Maple Plot]](images/td440.gif) 
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);
![[Maple Plot]](images/td441.gif) 
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);
 
 
 
 
 
 
![[Maple Plot]](images/td448.gif) 
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
 et que z donne 
 est équivalent à (x,y)
 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);
![[Maple Plot]](images/td459.gif) 
>