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 

équations

 
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
Bouzar
Invité





MessagePosté le: 22 Déc 2004 21:21    Sujet du message: équations Répondre en citant

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 Embarassed
Revenir en haut de page
ALS
Invité





MessagePosté le: 23 Déc 2004 10:52    Sujet du message: Re: équations diophantiennes Répondre en citant

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é





MessagePosté le: 23 Déc 2004 22:20    Sujet du message: Répondre en citant

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é





MessagePosté le: 24 Déc 2004 9:53    Sujet du message: Re: équations diophantiennes Répondre en citant

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é





MessagePosté le: 28 Déc 2004 1:21    Sujet du message: Répondre en citant

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é





MessagePosté le: 28 Déc 2004 10:52    Sujet du message: Re: équations diophantiennes Répondre en citant

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é





MessagePosté le: 28 Déc 2004 20:27    Sujet du message: Répondre en citant

Bonsoir


Merci
Revenir en haut de page
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.