Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Visualiser les racines nièmes de l'unité.

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
michel



Inscrit le: 23 Juin 2006
Messages: 72

MessagePosté le: 18 Nov 2012 10:16    Sujet du message: Visualiser les racines nièmes de l'unité. Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 18 Nov 2012 11:35    Sujet du message: Re Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
michel



Inscrit le: 23 Juin 2006
Messages: 72

MessagePosté le: 19 Nov 2012 9:38    Sujet du message: Racines complexes Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 19 Nov 2012 12:10    Sujet du message: Répondre en citant

Bonjour Michel,
Effectivement, cette animation est très jolie!
A plus tard sur ce forum.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
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


phpBB

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.