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)];

i := 'i'

racs := [-1.237876779-.3714069472*I, -1.237876779+....
racs := [-1.237876779-.3714069472*I, -1.237876779+....
racs := [-1.237876779-.3714069472*I, -1.237876779+....
racs := [-1.237876779-.3714069472*I, -1.237876779+....

> sum(x^i/(i+1),i=0..10);

1+1/2*x+1/3*x^2+1/4*x^3+1/5*x^4+1/6*x^5+1/7*x^6+1/8...

> XX:=seq([Re(racs[j]),Im(racs[j])],j=1..nops(racs));
plot([XX],style=point,symbol=circle);

XX := [-1.237876779, -.3714069472], [-1.237876779, ...
XX := [-1.237876779, -.3714069472], [-1.237876779, ...
XX := [-1.237876779, -.3714069472], [-1.237876779, ...
XX := [-1.237876779, -.3714069472], [-1.237876779, ...

[Maple Plot]

Soit la famille de polynômes suivante P[n] telle que P[n](x) = sum(x^i/i!,i = 0 .. n) .
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] à P[40] .

Tracer sur un même graphe les racines de P[10] , P[20] et P[30] . Que peut-on dire des racines du polynôme P[n] quand n tend vers l'infini.

Soit maintenant la famille de polynômes suivante Q[n] telle que Q[n](x) = sum(i*x^i,i = 0 .. n) .

Reprendre les questions précédentes, et particulier que peut-on dire des racines du polynôme Q[n] quand n tend vers l'infini.

Soit maintenant la famille de polynômes suivante R[n] telle que R[n](x) = sum(i!*x^i,i = 0 .. n) .

Reprendre les questions précédentes, et particulier que peut-on dire des racines du polynôme R[n] 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 abs(P(x+I*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]

> 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]

> plot([XX10,XX20,XX30,XX40],style=point,symbol=circle);

[Maple Plot]

> 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]

> plot([XX10,XX20,XX30,XX40],style=point,symbol=circle);

[Maple Plot]

> 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]

> plot([XX10,XX20,XX30,XX40],style=point,symbol=circle);

[Maple Plot]

> plot3d(evalc(abs(subs(x=x+I*y,P10))),x=-3.56..3.37,y=-5.63..5.63);

[Maple Plot]

> XX10;

[[-.2146663302, -.6664229720e-1], [-.2146663302, .6...
[[-.2146663302, -.6664229720e-1], [-.2146663302, .6...
[[-.2146663302, -.6664229720e-1], [-.2146663302, .6...
[[-.2146663302, -.6664229720e-1], [-.2146663302, .6...

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]

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]

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]

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);

F := proc (x, y) local z, i; z := evalf(x+I*y); for...
F := proc (x, y) local z, i; z := evalf(x+I*y); for...
F := proc (x, y) local z, i; z := evalf(x+I*y); for...
F := proc (x, y) local z, i; z := evalf(x+I*y); for...
F := proc (x, y) local z, i; z := evalf(x+I*y); for...
F := proc (x, y) local z, i; z := evalf(x+I*y); for...

[Maple Plot]

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 à
x^2+y^2 < 9 et que z donne z^2-1 est équivalent à (x,y)

donnent ( x^2-y^2-1, 2*xy ).
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;

F1 := proc (x, y) local x1, y1, tmp, i; x1 := x; y1...
F1 := proc (x, y) local x1, y1, tmp, i; x1 := x; y1...
F1 := proc (x, y) local x1, y1, tmp, i; x1 := x; y1...
F1 := proc (x, y) local x1, y1, tmp, i; x1 := x; y1...
F1 := proc (x, y) local x1, y1, tmp, i; x1 := x; y1...
F1 := proc (x, y) local x1, y1, tmp, i; x1 := x; y1...
F1 := proc (x, y) local x1, y1, tmp, i; x1 := x; y1...

> plot3d(F1,-2..2,-1..1,grid=[200,200],orientation=[90,0],style=patchnogrid, axes=box,shading=zhue);

[Maple Plot]

>