|
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
michel
Inscrit le: 23 Juin 2006 Messages: 72
|
Posté le: 18 Nov 2012 10:16 Sujet du message: Visualiser les racines nièmes de l'unité. |
|
|
Bonjour,
Voici un programme permettant de visualiser les racines nièmes de l'unité
Code: |
restart:
Racines_Complexes:=proc(C::complex,O::posint,Avec_Points::symbol)
# Création des variables locales
local c,i,k,aretes,Details,Equation,Fleches,Fleches_P,
Liste,ordre_convexe,Points,points,Sol:
# Initialisation des variables
Details:=Avec_Points;
_EnvAllSolutions := true:
# Critère de tri
ordre_convexe:=(x,y)->evalb(evalf(op(2,y)>0) and evalb(evalf(op(1,x)<op(1,y)))):
# Calcul des racines
Equation:=z^O=C;
Sol:=evalc(solve(z^n=C,z)):
for i from 1 by 1 while convert((op(i,indets(Sol)),string))<>"_Z1~" do
od:
Sol:=subs(op(i,indets(Sol))='k', Sol):
Sol:=subs(n=O,Sol);
# Affichage conditionnel des résultats
if Details=oui then
print(Equation);
print(seq(Re(eval(Sol))+I*Im(eval(Sol)),k= 0..O-1));
print(`La racine principale est `,simplify(subs('k'=0,Sol),exp));
print(` soit symboliquement `,evalc(eval(Sol,'k'=0)));
print(` ou soit numériquement `,evalf(eval(Sol,'k'=0)));
#print([seq([Re(eval(Sol)),Im(eval(Sol))],k= 0..O-1)])
fi;
# Affichage graphique des racines énièmes
Points:=sort([seq([Re(eval(Sol)),Im(eval(Sol))],k = 0..O-1)],ordre_convexe):
aretes:=plots[polygonplot](Points,linestyle=2,color=yellow):
points:=plots[polygonplot](Points,style=point,symbol=circle,color=navy):
Fleches_P:=plottools[arrow]([0,0],Points[O], .02, .06, .15, color=red):
Fleches:=seq(plottools[arrow]([0,0],Points[k+1], .02, .06, .15, color=navy),k=0..O-2):
c:= plottools[circle]([0,0], sqrt(Points[1,1]^2+Points[1,2]^2), linestyle=3,color=grey):
plots[display](Fleches_P,Fleches,c,aretes,points,scaling=constrained)
end:
|
Il fonctionne bien pour un premier calcul (cas n°1) et se plante pour tous les calculs suivants.
Comment remplacer le "_Z1~" en "_Z2~" pour le second puis "_Z3~" pour le suivant, etc...
Racines_Complexes(-1,3,oui);#cas n°1
Racines_Complexes(-1,2,oui);#cas n°2
Racines_Complexes(32/I,1,non);#cas n°3
Remerciements |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 18 Nov 2012 11:35 Sujet du message: Re |
|
|
Bonjour Michel,
il suffisait de tester les 2 premiers caractères du ième opérande de indets(Sols) :
for i from 1 by 1 while convert((op(i,indets(Sol)),string))[1..2]<>"_Z" do
Code: |
> restart:
> Racines_Complexes:=proc(C::complex,O::posint,Avec_Points::symbol)
> # Création des variables locales
> local c,i,k,aretes,Details,Equation,Fleches,Fleches_P,
> Liste,ordre_convexe,Points,points,Sol:
> # Initialisation des variables
> Details:=Avec_Points;
> _EnvAllSolutions := true:
> # Critère de tri
> ordre_convexe:=(x,y)->evalb(evalf(op(2,y)>0) and evalb(evalf(op(1,x)<op(1,y)))):
> # Calcul des racines
> Equation:=z^O=C;
> Sol:=evalc(solve(z^n=C,z)):
> for i from 1 by 1 while convert((op(i,indets(Sol)),string))[1..2]<>"_Z" do
> od:
> Sol:=subs(op(i,indets(Sol))='k', Sol):
> Sol:=subs(n=O,Sol);
> # Affichage conditionnel des résultats
> if Details=oui then
> print(Equation);
> print(seq(Re(eval(Sol))+I*Im(eval(Sol)),k= 0..O-1));
> print(`La racine principale est `,simplify(subs('k'=0,Sol),exp));
> print(` soit symboliquement `,evalc(eval(Sol,'k'=0)));
> print(` ou soit numériquement `,evalf(eval(Sol,'k'=0)));
> #print([seq([Re(eval(Sol)),Im(eval(Sol))],k= 0..O-1)])
> fi;
> # Affichage graphique des racines énièmes
> Points:=sort([seq([Re(eval(Sol)),Im(eval(Sol))],k = 0..O-1)],ordre_convexe):
> aretes:=plots[polygonplot](Points,linestyle=2,color=yellow):
> points:=plots[polygonplot](Points,style=point,symbol=circle,color=navy):
> Fleches_P:=plottools[arrow]([0,0],Points[O], .02, .06, .15, color=red):
> Fleches:=seq(plottools[arrow]([0,0],Points[k+1], .02, .06, .15, color=navy),k=0..O-2):
> c:= plottools[circle]([0,0], sqrt(Points[1,1]^2+Points[1,2]^2), linestyle=3,color=grey):
> plots[display](Fleches_P,Fleches,c,aretes,points,scaling=constrained)
> end:
>
> Racines_Complexes(-1,3,oui);#cas n°1
> Racines_Complexes(-1,2,oui);#cas n°2
> Racines_Complexes(32/I,7,oui);#cas n°3
>
>
3
z = -1
1/2 1/2
1/2 + 1/2 I 3 , -1, 1/2 - 1/2 I 3
Pi Pi
La racine principale est , cos(----) + sin(----) I
3 3
1/2
soit symboliquement , 1/2 + 1/2 I 3
ou soit numériquement , 0.5000000000 + 0.8660254040 I
2
z = -1
I, -I
Pi Pi
La racine principale est , cos(----) + sin(----) I
2 2
soit symboliquement , I
ou soit numériquement , 1. I
7
z = -32 I
(5/7) Pi (5/7) Pi
2 cos(----) - 2 sin(----) I,
14 14
(5/7) 3 Pi (5/7) 3 Pi (5/7)
2 cos(----) + 2 sin(----) I, 2 I,
14 14
(5/7) 3 Pi (5/7) 3 Pi
-2 cos(----) + 2 sin(----) I,
14 14
(5/7) Pi (5/7) Pi
-2 cos(----) - 2 sin(----) I,
14 14
(5/7) 5 Pi (5/7) 5 Pi
-2 cos(----) - 2 sin(----) I,
14 14
(5/7) 5 Pi (5/7) 5 Pi
2 cos(----) - 2 sin(----) I
14 14
La racine principale est ,
(5/7) Pi (5/7) Pi
2 cos(- ----) + 2 sin(- ----) I
14 14
(5/7) Pi (5/7) Pi
soit symboliquement , 2 cos(----) - 2 sin(----) I
14 14
ou soit numériquement , 1.599535672 - 0.3650835792 I
|
Et le tour est joué...
Je joins un programme personnel permettant de visualiser le polygone ayant pour sommets les affixes des racines nièmes de a (complexe):
Code: |
>racines:=proc(n::nonnegint,a::complex)
> local m,argt,k,r,i,z,polygone,cercle;
> m:=abs(a)^(1/n): # module des solutions
> argt:=argument(a);
> for k from 0 to n do
> r[k]:=m*cos((argt+k*2*Pi)/n): # partie réelle des solutions
> i[k]:=m*sin((argt+k*2*Pi)/n): # partie imaginaire des solutions
> z[k]:=simplify(r[k])+I*simplify(i[k]): # affixe des solutions
> end do;
> print({seq(z[k],k=0..n-1)}); # affichage des affixes des solutions
> polygone:=[seq([r[k],i[k]],k=0..n)]; # ligne polygonale définie par les points M[k]
> polygone:=plot(polygone,x=-m..m,y=-m..m);
> cercle:=plot([m*cos(t),m*sin(t),t=0..2*Pi]);
> plots[display]({cercle,polygone},scaling=constrained);
> end proc;
> racines(7,-I);
|
A plus tard. |
|
Revenir en haut de page |
|
|
michel
Inscrit le: 23 Juin 2006 Messages: 72
|
Posté le: 19 Nov 2012 9:38 Sujet du message: Racines complexes |
|
|
Bonjour,
Bravo Alain, ta procédure fonctionne très bien. Voici une application spectaculaire :
sequences:=seq(Racines_Complexes(-1,a,non),a=1..50):
plots[display](sequences,insequence=true,scaling=constrained);
Encore merci. |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 19 Nov 2012 12:10 Sujet du message: |
|
|
Bonjour Michel,
Effectivement, cette animation est très jolie!
A plus tard sur ce forum. |
|
Revenir en haut de page |
|
|
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com
Apprendre Maple - ©
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|