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 

besoin d'aide

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



Inscrit le: 13 Mar 2005
Messages: 47

MessagePosté le: 15 Mai 2005 11:29    Sujet du message: besoin d'aide Répondre en citant

bonjour

je veux tracé des courbe avec discrétisation par rapport à la courbure
le problème c'est que certaine courbe on des points singuliers
donc il faut exclure ces points

j'ai donc fait une procédure pour faire une liste de ces points et une autre qui dit si oui ou non un point est singulier

j'ai fait aussi deux procédures de discrétisation et courbure qui mle donne la liste des points à tracé : une quand il n'y a pas de points singulier rectcourb1 et une qui les évite rectcourb2

si je les test séparément ça fonctionne
rectcourb2 fonctionne aussi quand il n'y a pas de points singuliers mais ça prend du temps à maple d'o๠rectcourb1

rectcourb est la procédure qui doit choisir de lancer rectcourb1 ou 2
mais j'ai un message d'erreur: Plotting error, empty plot

donc je n'ai pas de courbe

voici mon code
Code:
Liste des points singuliers
> Singulier1:=proc(Expr,Int,nbpoints,epsilon)
>   local a,b,g1,g2,d1,d2,x,y,List,i;
>   g1:=op(1,Expr);g2:=op(2,Expr);
>   d1:=diff(g1,t);d2:=diff(g2,t);
>   a:=evalf(op(1,Int));b:=evalf(op(2,Int));
>   List:=[];
>   for i from a to b by (b-a)/nbpoints do
>   x:=evalf(subs(t=i,d1));
>   y:=evalf(subs(t=i,d2));
>   if abs(x^2+y^2)<epsilon then List:=[op(List),i];
>  fi;
>   od;
>   List;
>   end:
Recherche des points singuliers pour la discrétisation
> Singulier2:=proc(Expr,Int,nbpoints,epsilon)
>   local a,b,g1,g2,d1,d2,x,y,List,i;
>   g1:=op(1,Expr);g2:=op(2,Expr);
>   d1:=diff(g1,t);d2:=diff(g2,t);
>   a:=evalf(op(1,Int));b:=evalf(op(2,Int));
>   List:=[];
>   for i from a to b by (b-a)/nbpoints do
>   x:=evalf(subs(t=i,d1));
>   y:=evalf(subs(t=i,d2));
>   if abs(x^2+y^2)<epsilon
>   then List:=true;
>   else List:=false;
>   fi;
>   od;
>   List;
>   end:
Discrétisation et courbure
> Rectcourb1:=proc(Expr,Int,n)
>      local a,b,g1,g2,h0,x,Listx,i,Go,Cc,h,d;
>      a:=evalf(op(1,Int));b:=evalf(op(2,Int));
>      g1:=op(1,Expr);g2:=op(2,Expr);
>      h0:=evalf((b-a)/n);
>     x:=a;
>      Listx:=[[subs(t=a,op(1,Expr)),subs(t=a,op(2,Expr))]];
>      i:=0;
>      Go:=true;
>      while Go do
>      i:=i+1;d:=Courbure(w,x);
>      Cc:=abs(d);
>      if Cc<1 then h:=h0;
>      else h:=h0/Cc;
>      fi;
>      x:=evalf(x+h);
>      Listx:=[op(Listx),[subs(t=x,op(1,Expr)),subs(t=x,op(2,Expr))]];
>      Go:=evalb(x<b+h0);
>      od;
>      Listx;
>      end:
> Rectcourb2:=proc(Expr,Int,n)
>    local a,b,g1,g2,h0,x,Listx,i,Go,Cc,h,d;
>    a:=evalf(op(1,Int));b:=evalf(op(2,Int));
>    g1:=op(1,Expr);g2:=op(2,Expr);
>    Listx:=[[subs(t=a,op(1,Expr)),subs(t=a,op(2,Expr))]];
>    h0:=evalf((b-a)/n);
>    x:=a;
>    i:=0;
>    Go:=true;
>    while Go do
>    i:=i+1;
>    if Singulier2(Expr,Int,100,10^(-5)) then x:=x+h0;
>    fi;
>    d:=Courbure(w,x);
>    Cc:=abs(d); 
>    if Cc<1 then h:=h0;
>    else h:=h0/Cc;
>    fi;
>    x:=evalf(x+h);
>    Listx:=[op(Listx),[subs(t=x,op(1,Expr)),subs(t=x,op(2,Expr))]];
>    Go:=evalb(x<b+h0);
>    od;
>    Listx;
>    end:
> Rectcourb:=proc(Expr,Int,n)
>   
>    Singulier1(w,Intdef,100,10^(-5));   
>    if List=[] then rectcourb1(Expr,Int,n);
>                else rectcourb2(Expr,Int,n); 
>    fi;
> end:

print(`Discrétisation et courbure :`);
> print(`  `);
> Ligne:=plot(Rectcourb(w,Intdef,70),color=green,style=line):
> Point:=plot(Rectcourb(w,Intdef,70),color=red,style=point):
> display({Ligne,Point});
> print(`  `);


la procédure courbe calcule la courbure

merci
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
romanticide



Inscrit le: 13 Mar 2005
Messages: 47

MessagePosté le: 15 Mai 2005 15:31    Sujet du message: re besoin d'aide Répondre en citant

finalement je garde une seule procédure pour tester avec la cardioide bizzarement quand je lance
les procédures singulier1 singulier2,rectcourb et que je demande à maple de tracé la discrétisation mais quand j'intègre ça à mon programme en entier il ne trace pas la discrétisation et il ne s'arrête pas de calculer
je suis obligée d'arrêter en faisant stop

voici mon programme entier

Code:
> with(plots):
 Tracé d'une courbe paramétrée :
Affichage de la courbe
>  AffCurv:=proc(Expr)
>      local g1,g2;
>      g1:=op(1,Expr);g2:=op(2,Expr);
>      print(`g1 `=g1);print(`g2 `=g2);
>      end:
>
Tracé de la courbe
> TracCurv:=proc(Expr,Min,Max)
>    local g1,g2,Curv;
>      g1:=op(1,Expr);g2:=op(2,Expr);
>      Curv:=[g1,g2,t=Min..Max];   
>      plot(Curv,scaling=constrained,numpoints=100,color=blue);
>      end:
Rectification et Longueur :
Calcul de la longueur
>  CalCurv:=proc(Expr,Min,Max)
>      local g1,g2,d1,d2,ds,L,s,e;
>      g1:=op(1,Expr);g2:=op(2,Expr);
>      d1:=diff(g1,t);d2:=diff(g2,t);
>      print(`d1 `=d1); print(`d2 `=d2);
>      ds:=sqrt((d1^2)+(d2^2));
>     print(`ds `=ds);
>      L:=Int(ds,t=Min..Max);
>      print(`L `=L);
>      s:=simplify(L);
>      e:=evalf(s);
>      print(`Long `=e);
>     end:
Rectification
> Repproc:=proc(Expr,a,b,Err)
>     local A,B,X,Y,Dist,g1,g2,d1,d2,R,L,Lg,Pt,c,List;
>      A:=[subs(t=a,op(1,Expr)),subs(t=a,op(2,Expr))];
>      B:=[subs(t=b,op(1,Expr)),subs(t=b,op(2,Expr))];
>      List:=[];c:=0;
>      X:=(op(1,B)-op(1,A));Y:=(op(2,B)-op(2,A));
>      Dist:=sqrt(X^2+Y^2);
>      d1:=diff(op(1,Expr),t);d2:=diff(op(2,Expr),t);
>      R:=sqrt((d1^2)+(d2^2));
>      L:=Int(R,t=a..b);
>      Lg:=evalf(L);
>      if evalf(Lg-Dist)>evalf(Err) then
>      List:=[op(List),op(Repproc(Expr,a,(a+b)/2,Err))]:
>      List:=[op(List),op(Repproc(Expr,(a+b)/2,b,Err))]
>      else
>      List:=[op(List),map(evalf,A),map(evalf,B)]:
>    fi;
>      List
>      end:
Discrétisation et courbure :

Calcul de la courbure en un point
>  Courbure1:=proc(Expr,T)
>      local g1,g2,d1,d2,dd1,dd2,D1,D2,ds,Mat,Delta,Courb,x;
>      g1:=op(1,Expr);g2:=op(2,Expr);
>      d1:=diff(g1,t);d2:=diff(g2,t);
>      D1:=[d1,d2];
>      print(`Dérivées premières `=D1);
>      ds:=sqrt(d1^2+d2^2);
>     print(`ds `=ds);
>      dd1:=diff(d1,t);dd2:=diff(d2,t);
>      D2:=[dd1,dd2];
>      print(`Dérivées secondes `=D2);
>      Mat:=matrix([[d1,dd1],[d2,dd2]]);
>      print(`Matrice `=evalm(Mat));
>      Delta:=(d1*dd2-d2*dd1);
>      print(`Delta `=Delta);
>      x:=Delta/ds^3;   
>     print(`Formule de la courbure :`);
>      print(x);
>      print(`  `);
>      print(`Courbure :  `);
>      Courb:=evalf(subs(t=T,Delta/ds^3));
>      end:
Calcul de la courbure pour la discrétisation
> Courbure:=proc(Expr,T)
>      local g1,g2,d1,d2,dd1,dd2,D1,D2,ds,Mat,Delta,Courb;
>      g1:=op(1,Expr);g2:=op(2,Expr);
>      d1:=diff(g1,t);d2:=diff(g2,t);
>      D1:=[d1,d2];
>      ds:=sqrt(d1^2+d2^2);
>      dd1:=diff(d1,t);dd2:=diff(d2,t);
>     D2:=[dd1,dd2];
>      Mat:=matrix([[d1,dd1],[d2,dd2]]);
>      Delta:=(d1*dd2-d2*dd1);
>      Courb:=evalf(subs(t=T,Delta/ds^3));
>      end:
Liste des points singuliers
> Singulier1:=proc(Expr,Int,nbpoints,epsilon)
>   local a,b,g1,g2,d1,d2,x,y,List,i;
>   g1:=op(1,Expr);g2:=op(2,Expr);
>   d1:=diff(g1,t);d2:=diff(g2,t);
>   a:=evalf(op(1,Int));b:=evalf(op(2,Int));
>   List:=[];
>   for i from a to b by (b-a)/nbpoints do
>   x:=evalf(subs(t=i,d1));
>   y:=evalf(subs(t=i,d2));
>   if abs(x^2+y^2)<epsilon then List:=[op(List),i];
>  fi;
>   od;
>   List;
>   end:
Recherche des points singuliers pour la discrétisation
> Singulier2:=proc(Expr,Int,nbpoints,epsilon)
>   local a,b,g1,g2,d1,d2,x,y,List,i;
>   g1:=op(1,Expr);g2:=op(2,Expr);
>   d1:=diff(g1,t);d2:=diff(g2,t);
>   a:=evalf(op(1,Int));b:=evalf(op(2,Int));
>   List:=[];
>   for i from a to b by (b-a)/nbpoints do
>   x:=evalf(subs(t=i,d1));
>   y:=evalf(subs(t=i,d2));
>   if abs(x^2+y^2)<epsilon
>   then List:=true;
>   else List:=false;
>   fi;
>   od;
>   List;
>   end:
Discrétisation et courbure
>
>   
>  Rectcourb:=proc(Expr,Int,n)
>    local a,b,g1,g2,h0,x,Listx,i,Go,Cc,h,d;
>    a:=evalf(op(1,Int));b:=evalf(op(2,Int));
>    g1:=op(1,Expr);g2:=op(2,Expr);
>    Listx:=[[subs(t=a,op(1,Expr)),subs(t=a,op(2,Expr))]];
>    h0:=evalf((b-a)/n);
>    x:=a;
>    i:=0;
>    Go:=true;
>    while Go do
>    i:=i+1;
>    if Singulier2(Expr,Int,100,10^(-5)) then x:=x+h0;
>    fi;
>    d:=Courbure(w,x);
>    Cc:=abs(d); 
>    if Cc<1 then h:=h0;
>    else h:=h0/Cc;
>    fi;
>    x:=evalf(x+h);
>    Listx:=[op(Listx),[subs(t=x,op(1,Expr)),subs(t=x,op(2,Expr))]];
>    Go:=evalb(x<b+h0);
>    od;
>    Listx;
>    end:
>
>
>

Zone Inter-Active
>   print(`Courbes paramétrées de paramètre t :`);
>   courbes:=[[(1+cos(t))*cos(t),(1+cos(t))*sin(t)]];
>   print(`  `);

>   print(`Intervalles de définition respectifs:`);
>   Intdefs:=[[0,2*Pi],[0,Pi]];
>   print(`  `);

>   for k to nops(courbes) do
>   w:=courbes[k]: Intdef:=Intdefs[k]:
>
>   print(`Composantes de la courbe paramétrée :`);
>   AffCurv(w);
>   print(`  `);
>   print(`Graphe de la courbe :`);
>   print(`  `);
>   TracCurv(w,Intdef[1],Intdef[2]);
>   print(`  `);

>   print(`Longueur de la courbe :`);
>   CalCurv(w,Intdef[1],Intdef[2]);
>   print(`  `);

>   print(`Rectification à  0.01 :`);
>   print(`  `);
>   display({plot(Repproc(w,Intdef[1],Intdef[2],10^(-2)),color=blue,style=line),plot(Repproc(w,Intdef[1],Intdef[2],10^(-2)),color=red,style=point)});
>   print(`  `);

>   print(`Rectification à  0.001 :`);
>   print(`  `);
>   display({plot(Repproc(w,Intdef[1],Intdef[2],10^(-3)),color=blue,style=line),plot(Repproc(w,Intdef[1],Intdef[2],10^(-3)),color=red,style=point)});
>  print(`  `);

>   x:=Pi/4:
>   print(`Calcul de la courbure au point :`,x);
>   Courbure1(w,x);
>   print(`  `);
>

> print(`Liste des points singuliers :`);
> Singulier1(w,Intdef,100,10^(-5));
>
>
>     print(`Discrétisation et courbure :`);
> print(`  `);
> display({plot(Rectcourb(w,Intdef,100),color=green,style=line),plot(Rectcourb(w,Intdef,100),color=red,style=point)});
> print(`  `);
>
>   print(`Graphe, discrétisation et courbure :`);
>   print(`  `);
>   display({plot(Rectcourb(w,Intdef,100),color=green,style=line),plot(Rectcourb(w,Intdef,100),color=red,style=point),TracCurv(w,Intdef[1],Intdef[2])});
>  print(`------------------------------------------------------------------------------------------------------------------------------------------`);

>  od;

                 Courbes paramétrées de paramètre t :


       courbes := [[(1 + cos(t)) cos(t), (1 + cos(t)) sin(t)]]





                Intervalles de définition respectifs:


                   Intdefs := [[0, 2 Pi], [0, Pi]]





           w := [(1 + cos(t)) cos(t), (1 + cos(t)) sin(t)]


                         Intdef := [0, 2 Pi]


                Composantes de la courbe paramétrée :


                      g1  = (1 + cos(t)) cos(t)


                      g2  = (1 + cos(t)) sin(t)





                        Graphe de la courbe :









                       Longueur de la courbe :


              d1  = -sin(t) cos(t) - (1 + cos(t)) sin(t)


                              2
                 d2  = -sin(t)  + (1 + cos(t)) cos(t)


                                                   2
  ds  = sqrt((-sin(t) cos(t) - (1 + cos(t)) sin(t))

                   2                       2
         + (-sin(t)  + (1 + cos(t)) cos(t)) )


          2 Pi
         /
        |                                                 2
  L  =  |      sqrt((-sin(t) cos(t) - (1 + cos(t)) sin(t))
        |
       /
         0

                   2                       2
         + (-sin(t)  + (1 + cos(t)) cos(t)) ) dt


                         Long  = 8.000000000





                        Rectification à  0.01 :









                       Rectification à  0.001 :









                             x := 1/4 Pi


               Calcul de la courbure au point :, 1/4 Pi


  Dérivées premières  = [-sin(t) cos(t) - (1 + cos(t)) sin(t),

               2
        -sin(t)  + (1 + cos(t)) cos(t)]


                                                   2
  ds  = sqrt((-sin(t) cos(t) - (1 + cos(t)) sin(t))

                   2                       2
         + (-sin(t)  + (1 + cos(t)) cos(t)) )


                               2           2
  Dérivées secondes  = [-cos(t)  + 2 sin(t)  - (1 + cos(t)) cos(t),

        -3 sin(t) cos(t) - (1 + cos(t)) sin(t)]


  Matrice  =

        [
        [-sin(t) cos(t) - (1 + cos(t)) sin(t) ,

               2           2                      ]
        -cos(t)  + 2 sin(t)  - (1 + cos(t)) cos(t)]

        [       2
        [-sin(t)  + (1 + cos(t)) cos(t) ,

                                              ]
        -3 sin(t) cos(t) - (1 + cos(t)) sin(t)]


  Delta  = (-sin(t) cos(t) - (1 + cos(t)) sin(t))

        (-3 sin(t) cos(t) - (1 + cos(t)) sin(t)) -

                2
        (-sin(t)  + (1 + cos(t)) cos(t))

                2           2
        (-cos(t)  + 2 sin(t)  - (1 + cos(t)) cos(t))


                       Formule de la courbure :


  ((-sin(t) cos(t) - (1 + cos(t)) sin(t))

        (-3 sin(t) cos(t) - (1 + cos(t)) sin(t)) -

                2
        (-sin(t)  + (1 + cos(t)) cos(t))

                2           2                           /
        (-cos(t)  + 2 sin(t)  - (1 + cos(t)) cos(t)))  /  (
                                                      /

                                              2
        (-sin(t) cos(t) - (1 + cos(t)) sin(t))

                   2                       2 3/2
         + (-sin(t)  + (1 + cos(t)) cos(t)) )





                             Courbure :


                             .8117941501





                    Liste des points singuliers :


                            [3.141592652]


                     Discrétisation et courbure :




Warning, computation interrupted

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


je ne comprends pas du tout

merci
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
romanticide



Inscrit le: 13 Mar 2005
Messages: 47

MessagePosté le: 15 Mai 2005 15:38    Sujet du message: petite précision Répondre en citant

si on enlève else list:=false dans singulier 2 alors ça marche
mais quand on prend une courbe qui n'a pas de point singulier alors ça plante si on ne le mets pas
donc retour : faut deux procédure différente
question comment les appeler
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
romanticide



Inscrit le: 13 Mar 2005
Messages: 47

MessagePosté le: 16 Mai 2005 18:43    Sujet du message: Répondre en citant

bonsoir
merci beaucoup pour ta réponse
j'avais finalement trouvé la solution
il fallait initialiser mon boolean à false
mais ta réponse me plait
surtout que j'ai moins de procédure !

merci beaucoup

une petite question le i dans rectcourb ne sert pas ou bien?
et quand tu mets S:=subsop(1=NULL,S): ça permet la fois suivante de passer au deuxième point singulier

merci
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
romanticide



Inscrit le: 13 Mar 2005
Messages: 47

MessagePosté le: 16 Mai 2005 23:11    Sujet du message: Répondre en citant

merci encore
bonne nuit
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 -> Autres questions 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.