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 

aidez moi pour que le procedure Gauss donne des bonne result

 
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
mbm



Inscrit le: 31 Mar 2007
Messages: 7

MessagePosté le: 22 Avr 2007 16:50    Sujet du message: aidez moi pour que le procedure Gauss donne des bonne result Répondre en citant

je remarque que mon procedure Gauss retourne des resultats errones et je essier des les resoudre vous pouver m'aidez s'il vous plais?
voiala le procedure:
*************************************************************

> Euclide:=proc(a,b)
local r , u,v, q, i, u0, u1, v0, v1, r0, r1;
r0:=a; r1:=b; u0:=1; u1:=0; v0:=0; v1:=1;
while r1<>0 do q:=iquo(r0,r1);
r:=r0-r1*q; u:=u0-u1*q; v:=v0-v1*q;
r0:=r1; r1:=r; u0:=u1; u1:=u; v0:=v1; v1:=v; end do; [r0,u0,v0]
end proc:
> gauss:=proc(A,p)
local n,i,j,piv,s,d,l,B,x,ipiv,k, eu,c,sgn;
n:=linalg[coldim](A); d:=1; B:=map(x->x mod p, evalm(A));sgn:=1;
for i to n do j:=i; piv:=B[j,i] mod p;
while piv=0 and j<n do j:=j+1; piv:=B[j,i] mod p end do ;
if piv=0 then return(0) else d:=d*piv;
for k from i to n do c:=B[i,k]; B[i,k]:=B[j,k]; B[j,k]:=c;
sgn:=-1*sgn; end do;
eu:=Euclide(piv,p);
if piv < 0 then do
ipiv:=-eu[2] mod p; end do;
else
ipiv:=eu[2] mod p; end if;
for k from j+1 to n do l:=B[k,i]*ipiv mod p;
for s from i to n do B[k,s]:=B[k,s]-l*B[i,s] end do ; end do;
end if ; end do; sgn*d mod p ; end proc:
>
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
prof_simplet



Inscrit le: 12 Sep 2006
Messages: 86

MessagePosté le: 23 Avr 2007 8:28    Sujet du message: Répondre en citant

Bonjour,
Déjà vous devriez expliquer ce que vous cherchiez à faire par ces procédures.
Si j'ai bien compris, la première , Euclide, retourne [r0,u0,v0] où r0=pgcd(a,b) et (u0,v0) est une solution de l'équation ax+by=pgcd(a,b).
Si a et b ne sont pas premiers enre eux, on obtient u0=0 v0=1 ou u0=1 v0=0. Donc tout semble correct dans Euclide.
Pour la deuxième, pourriez-vous expliquer votre démarche?
La fonction préexistante de Maple
Gausselim(A) mod p
doit faire le même travail, non?
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
mbm



Inscrit le: 31 Mar 2007
Messages: 7

MessagePosté le: 23 Avr 2007 12:56    Sujet du message: se que je veut que le prosedure gauss donne Répondre en citant

je veut que gauss me calcule le determinant d'une matice modulo des entiers premieres.
j'espere que vous pouvez m'aidez .
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: 24 Avr 2007 10:09    Sujet du message: Répondre en citant

Bonjour, j'ai modifié quelque peu la seconde procédure en normalisant la ligne concernée lorsque piv<>0: on multiplie toute la ligne par 1/piv mod p de façon à faire apparaitre un 1 en diagonale.
Ainsi la matrice B obtenue est triangulaire supérieure, son déterminant modulo p est le produit des termes diagonaux.
La procédure donne pour résultat la liste [B,det(B]] c'est à dire [evalm(B),product(B[h,h],h=1..n)]
On peut vérifier la matrice B obtenue avec le résultat donné par la procédure préexistante Gausselim(A) mod p; de Maple.
Ca semble maintenant correctement fonctionner: le vérifier plus en détail sur des matrices générées aléatoirement:
> A:=linalg[randmatrix](4,4); u:=rand(1..20): p:=nextprime(u()); gauss(A,p); Gausselim(A) mod p;


Code:

> Euclide:=proc(a,b)
> local r , u,v, q, i, u0, u1, v0, v1, r0, r1;
> r0:=a; r1:=b; u0:=1; u1:=0; v0:=0; v1:=1;
> while r1<>0 do q:=iquo(r0,r1);
> r:=r0-r1*q; u:=u0-u1*q; v:=v0-v1*q;
> r0:=r1; r1:=r; u0:=u1; u1:=u; v0:=v1; v1:=v; end do; [r0,u0,v0]
> end proc:
> Euclide(17,12);

                              [1, 5, -7]

> gauss:=proc(A,p)
> local n,i,j,piv,s,l,B,x,ipiv,k,eu,c;
> n:=linalg[coldim](A);
> B:=map(x->x mod p, evalm(A));
> for i to n do
>     j:=i;
>     piv:=B[j,i] mod p;
>     while piv=0 and j<n do
>          j:=j+1; piv:=B[j,i] mod p
>     end do ;
>     if piv=0 then return [evalm(B),0] else
>       for k to n do B[j,k]:=B[j,k]* (1/piv mod p): B[j,k]:=B[j,k] mod p end do: 
>       piv:=B[j,i]:       
>       for k from i to n do
>          c:=B[i,k]; B[i,k]:=B[j,k]; B[j,k]:=c;
>       end do; 
>       eu:=Euclide(piv,p); 
>       if piv < 0 then ipiv:=-eu[2] mod p else ipiv:=eu[2] mod p end if;
>       for k from j+1 to n do
>          l:=B[k,i]*ipiv mod p;
>          for s from i to n do
>             B[k,s]:=B[k,s]-l*B[i,s]:
>             B[k,s]:=B[k,s] mod p
>          end do;
>        end do;
>      end if ;
> end do;
> [evalm(B),product(B[h,h],h=1..n)]
> end proc:
>
> A:=matrix([[7,4,3,1,5],[0,7,2,-5,11],[-1,6,2,6,2],[5,-9,12,5,3],[-9,12,1,2,0]]);

                       [ 7     4     3     1     5]
                       [                          ]
                       [ 0     7     2    -5    11]
                       [                          ]
                  A := [-1     6     2     6     2]
                       [                          ]
                       [ 5    -9    12     5     3]
                       [                          ]
                       [-9    12     1     2     0]

> p:=7: gauss(A,p);

                      [1    1    5    1    5]
                      [                     ]
                      [0    1    6    2    3]
                      [                     ]
                     [[0    0    1    1    2], 1]
                      [                     ]
                      [0    0    0    1    3]
                      [                     ]
                      [0    0    0    0    1]

> Gausselim(A) mod p;

                       [1    1    5    1    5]
                       [                     ]
                       [0    1    6    2    3]
                       [                     ]
                       [0    0    1    1    2]
                       [                     ]
                       [0    0    0    1    3]
                       [                     ]
                       [0    0    0    0    1]

> A:=linalg[randmatrix](4,4); u:=rand(1..20): p:=nextprime(u()); gauss(A,p);  Gausselim(A) mod p;

                        [-75     58    -15     60]
                        [                        ]
                        [ 17     26     94    -23]
                   A := [                        ]
                        [ 53    -23    -38    -70]
                        [                        ]
                        [ 69     37     92    -96]


                               p := 17


                        [1    16    7    6]
                        [                 ]
                        [0     1    1    5]
                       [[                 ], 1]
                        [0     0    1    2]
                        [                 ]
                        [0     0    0    1]


                         [1    16    7    6]
                         [                 ]
                         [0     1    1    5]
                         [                 ]
                         [0     0    1    2]
                         [                 ]
                         [0     0    0    1]



A plus tard.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
mbm



Inscrit le: 31 Mar 2007
Messages: 7

MessagePosté le: 27 Avr 2007 18:42    Sujet du message: Répondre en citant

merci de la reponse se bien marche
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.