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 

urgent : programme récursif

 
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: 27 Avr 2005 21:11    Sujet du message: urgent : programme récursif Répondre en citant

bonjour
je dois étudier la courbe Lissajous et je dois faire une rectification c'est à dire tracer la courbe avec des lignes polygonales

la procédure que j'ai écrite compare la distance entre deux points (les deux points sont déterminer par les bornes de l'intervalle de def) et la longueur de courbe entre ces deux points si la différence est très petite alors je peux tracer la ligne polygonale (je l'ai pas encore fais) sinon on divise par deux la longueur de l'intervalle de definition et on rapelle la procédure pour savoir si c ok ou pas

le problème c que je n'arrive pas à avoir un programme récursif
qui me renvoit l intervalle pour lequel je peux tracer la ligne

voici ma procédure
Procédure
> Repproc:=proc(a,b)
> local A,B,X,Y,Dist,g1,g2,d1,d2,R,L,Lg,Err,Rep,Pt,c,List;
> A:=[sin(2*a),sin(3*a)];B:=[sin(2*b),sin(3*b)];List:=[];c:=0;
> X:=(op(1,B)-op(1,A));Y:=(op(2,B)-op(2,A));
> Dist:=sqrt(X^2+Y^2);
> g1:=op(1,w);g2:=op(2,w);d1:=diff(g1,t);d2:=diff(g2,t);
> R:=sqrt((d1^2)+(d2^2));
> L:=Int(R,t=a..b);
> Lg:=evalf(L);
> Err:=0,001;
> Rep:=evalb(evalf(Lg-Dist)>evalf(0,001));Rep;if Rep then c:=(b-a)/2;fi; if c<>0 then Repproc(0,Pi);fi;
> end:
> Repproc(0,Pi/2);
Error, (in csgn) too many levels of recursion

merci d'avance
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: 27 Avr 2005 22:07    Sujet du message: Répondre en citant

w:=h(sin(2*t),sin(3*t));

c'est la courbe de lissajous paramétrée
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: 27 Avr 2005 22:22    Sujet du message: Répondre en citant

j'ai pas l'impression que ça marche il renvoit bien true pour le premier passage mais pas pour le deuxième j'ai essayer

if Rep then Repproc (0,Pi/9);fi

mais il ne me renvoit pas false (j'ai fais les test c'est la réponse )
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: 28 Avr 2005 9:00    Sujet du message: re code Répondre en citant

voici le code que m'a donné mon prof mais je ne comprends pas tout

Rectification en un Point : Calcul de ds
> RectPt:=proc(gama)
> local d1gama,ds;
> d1gama:=DiffCurvExpr(gama);
> ds:=Norme2(d1gama);
> end:
Rectification d'une courbe parametree
> RectifCourbe:=proc(ParaCurv)
> local CurvExpr,IntDef,Comment,a,b,f,g,ds,L,l;
> CurvExpr:=ParaCurv[1]; IntDef:=ParaCurv[2]; a:=IntDef[1]; b:=IntDef[2];Comment:=ParaCurv[3];
>
> f:=CurvExpr[1];g:=CurvExpr[2];
> print(`Rectification de Courbes Planes (f,g)`);print(`f=`,f,`g=`,g);
> print(` Intervalle de definition:`,IntDef);
> print(`Comment:`,Comment);
> ds:=RectPt(CurvExpr);
> print(` ds=`,ds);
> L:=int(ds,t=a..b);print(` L=`,L);
> l:=evalf(L);print(` l=`,l);
> end:
Discretisation Recursive Dichotomique d'une Courbe par Rectification
> PrntDiscretRecCourbeRectif:=proc(ParaCurv,Epsilon)
> local CurvExpr,IntDef,Comment,a,b,ds,DichoRec,ListPara,Subd;
Dichotomie Recursive
> DichoRec:=proc(a,b)
> local A,B,c,l,L,ErorRel,Dicho;
> print(`Pas Recursif a=`,a,` b=`,b,` b-a=`,b-a);
> #print(`ListPara=`,ListPara);
> l:=evalf(int(ds,t=a..b));
> A:=EvalfGamma(CurvExpr,a);B:=EvalfGamma(CurvExpr,b);L:=DistPt(A,B);
> ErorRel:=evalf((l-L)/L);
> Dicho:=evalb(ErorRel>Epsilon);
> print(` l=`,l,` L=`,L);print(`l-L=`,l-L,` ErorRel=`,ErorRel,` Dicho=`,Dicho);
> if Dicho then c:=(a+b)/2; ListPara:=[op(ListPara),c]; ;DichoRec(a,c);DichoRec(c,b); fi;
> end;

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: 01 Mai 2005 14:04    Sujet du message: Répondre en citant

bonjour

merci beaucoup
c'est très sympa de m'aider (et je suis pas très douée pour la programmation )

encore merci

je n'ai pas encore fini donc je vais encore poster

merci
ça fonctionne très bien

à plus

Razz
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.