|
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Bouzar Invité
|
Posté le: 22 Déc 2004 21:21 Sujet du message: équations |
|
|
Bonsoir
je soumet le nouveau problème suivant :
1° En faisant :
thue(x*y=3,[x,y]);
[x = -1, y = -3], [x = 1, y = 3], [x = -3, y = -1], [x = 3, y = 1]
(thue est disponible dans la biblio numtheory)
on désirerait créer une fonction posthue qui ne donnera que les solutions dans IN x IN. Par exemple :
posthue(x*y=3,[x,y]);
[x = 1, y = 3], [x = 3, y = 1]
2° Créer une procédure diophante permettant de donner l'ensemble des solutions dans IN x IN de l'équation diophantienne a*u + b*v = c.
(indication : on pourra encore utiliser la fonction intégrée thue)
Par exemple
diophante(u+3*v=4);
[u, v]=[1, 1]
Merci par avance de vos réponses |
|
Revenir en haut de page |
|
|
ALS Invité
|
Posté le: 23 Déc 2004 10:52 Sujet du message: Re: équations diophantiennes |
|
|
Code: |
> posthue:=proc(eq,vars)
> local p,t,k,valx,valy;
> t:=numtheory[thue](eq,vars);
> p:=NULL;
> for k to nops([t]) do
> valx:=rhs(t[k][1]): valy:=rhs(t[k][2]):
> if is(valx,nonnegint) and is(valy,nonnegint) then p:=p,t[k] end if
> end do;
> p
> end proc:
>
> posthue(x*y=3,[x,y]);
[x = 3, y = 1], [x = 1, y = 3]
> diophante:=proc(eq)
> local t,s,m,n;
> t:=numtheory[thue](eq,[u,v]);
> s:=solve( rhs(t[1])>=0 and rhs(t[2])>=0 ,_Z1);
> if s=NULL then return(`pas de solution dans NxN`)
> else
> s:=[op(s)]:
> if s[1]<>floor(s[1]) then m:=1+floor(s[1]) else m:=s[1] end if:
> if s[2]<>floor(s[2]) then n:=floor(s[2]) else n:=s[2] end if:
> if m>n then return(`pas de solution dans NxN`) end if;
> if m=n then return(t,_Z1=m)
> elif n=infinity then return(t,` avec `||_Z1||` entier `,_Z1>=m)
> else return(t,` avec `||_Z1||` entier `,`_Z1>=`||m || ` et _Z1<=`||n)
> end if
> end if
> end proc:
>
> diophante(3*u+v=16);
[u = _Z1, v = 16 - 3 _Z1], avec _Z1 entier , _Z1>=0 et _Z1<=5
> diophante(3*u+v=-16);
pas de solution dans NxN
> diophante(-3*u+v=16);
[u = _Z1, v = 16 + 3 _Z1], avec _Z1 entier , 0 <= _Z1
> diophante(3*u-v=16);
[u = _Z1, v = -16 + 3 _Z1], avec _Z1 entier , 6 <= _Z1
|
|
|
Revenir en haut de page |
|
|
Bouzar Invité
|
Posté le: 23 Déc 2004 22:20 Sujet du message: |
|
|
Bonsoir
merci de votre réponse, mais pourriez vous m'adaptez la réponse pour Maple version 4 s'il vous plait....
Par avance merci infiniment..... |
|
Revenir en haut de page |
|
|
ALS Invité
|
Posté le: 24 Déc 2004 9:53 Sujet du message: Re: équations diophantiennes |
|
|
Bonjour, je vous laisse l'adapter : remplacer x||y par cat(x,y) pour concaténer les chaines de caractères, le reste devrait fonctionner. |
|
Revenir en haut de page |
|
|
Bouzar Invité
|
Posté le: 28 Déc 2004 1:21 Sujet du message: |
|
|
Bonsoir tous le monde
J'espère que vous avez passez de bonne fêtes.
Volà je poursui mon problème et je remercie pour une nouvelle fois ALS de ses contributions.
Voilà en faisant :
> posthue(x*y=3,[x,y]);
[x = 3, y = 1], [x = 1, y = 3]
il faudrait créer une fonction ascendant(x*y =3, c) pour résoudre a*u + b*v = c où a=x et b=y trouver dans posthue . Il faut que ascendant étudie toutes les solutions données de IN x IN par posthue pour résoudre a*u + b*v = c :
Exemple :
>ascendant(x*y= 3, 43);
résolution de 3*u+v= 43 et les solutions dans INxIN sont :
En fait on poura utiliser la fonction diophante ou la fonction thue...
Merci d'avance pour vos réponses
cordialement et @+ |
|
Revenir en haut de page |
|
|
ALS Invité
|
Posté le: 28 Déc 2004 10:52 Sujet du message: Re: équations diophantiennes |
|
|
Salut, voici la procédure ascendant, avec une réécriture de posthue (cf la fin du message) :
Code: |
> posthue:=proc(eq,vars)
> local p,t,k,valx,valy;
> t:=numtheory[thue](eq,vars);
> p:=NULL;
> for k to nops([t]) do
> valx:=rhs(t[k][1]): valy:=rhs(t[k][2]):
> if is(valx,nonnegint) and is(valy,nonnegint) and valx<=valy then p:=p,t[k] end if
> end do;
> p
> end proc:
>
> posthue(x*y=3,[x,y]);
[x = 1, y = 3]
> diophante:=proc(eq)
> local t,s,m,n;
> t:=numtheory[thue](eq,[u,v]);
> s:=solve( rhs(t[1])>=0 and rhs(t[2])>=0 ,_Z1);
> if s=NULL then return(`pas de solution dans NxN`)
> else
> s:=[op(s)]:
> if s[1]<>floor(s[1]) then m:=1+floor(s[1]) else m:=s[1] end if:
> if s[2]<>floor(s[2]) then n:=floor(s[2]) else n:=s[2] end if:
> if m>n then return(`pas de solution dans NxN`) end if;
> if m=n then return(t,_Z1=m)
> elif n=infinity then return(t,` avec `||_Z1||` entier `,_Z1>=m)
> else return(t,` avec `||_Z1||` entier `,`_Z1>=`||m || ` et _Z1<=`||n)
> end if
> end if
> end proc:
>
> diophante(3*u+v=16);
[u = _Z1, v = 16 - 3 _Z1], avec _Z1 entier , _Z1>=0 et _Z1<=5
> ascendant:=proc(eq,c)
> local L,p,k,x0,y0;
> L:=NULL;
> p:=[posthue(eq,[x,y])];
> for k to nops(p) do
> x0:=rhs(p[k][1]): y0:=rhs(p[k][2]):
> L:=L,diophante(x0*u+y0*v=c)
> end do;
> L
> end proc:
>
> ascendant(x*y=3,43);
[u = 43 - 3 _Z1, v = _Z1], avec _Z1 entier , _Z1>=0 et _Z1<=14
> ascendant(x*y=6,7);
[u = 7 - 6 _Z1, v = _Z1], avec _Z1 entier , _Z1>=0 et _Z1<=1,
[u = 2 - 3 _Z1, v = 1 + 2 _Z1], _Z1 = 0
|
Le problème est que l'on pouvait retrouver des solutions 2 à 2 symétriques, puisque par exemple x*y=3 équivaut à y*x=3.
Pour corriger cela, dans la procédure posthue j'ai remplacé la ligne :
if is(valx,nonnegint) and is(valy,nonnegint) then p:=p,t[k] end if
par la ligne :
if is(valx,nonnegint) and is(valy,nonnegint) and valx<=valy then p:=p,t[k] end if
A bientôt. |
|
Revenir en haut de page |
|
|
Bouzar Invité
|
Posté le: 28 Déc 2004 20:27 Sujet du message: |
|
|
Bonsoir
Merci |
|
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.
|