 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
michel
Inscrit le: 23 Juin 2006 Messages: 72
|
Posté le: 26 Nov 2013 11:38 Sujet du message: triplets pythagoriciens |
|
|
Bonjour,
Je cherche à retrouver la succession les opérations qui permettraient de vérifier le théorème suivant :
Théorème :
tout triplet pythagoricien primitif est le résultat de la multiplication du vecteur ligne (3, 4, 5) qui est le triplet primitif le plus simple
par une certaine succession de multiplications de matrices génératrices R1, R2, R3.
> restart;
> with(LinearAlgebra);
> R1 := Matrix([[1, -2, 2], [2, -1, 2], [2, -2, 3]]);
> R2 := Matrix([[1, 2, 2], [2, 1, 2], [2, 2, 3]]);
> R3 := Matrix([[-1, 2, 2], [-2, 1, 2], [-2, 2, 3]]);
Voici la procédure recursive qui pose problème :
> NouTriPy:=proc(x,y,z) local M1,M2,M3,T1,T2,T3,v,u:
v:=<x,y,z>: T1:=Matrix([[1,2,-2],[-2,-1,2],[-2,-2,3]]);#`matrice inverse de R1`
T2:=Matrix([[1,2,-2],[2,1,-2],[-2,-2,3]]);#`matrice inverse de R2 ` T3:=Matrix([[-1,-2,2],[2,1,-2],[-2,-2,3]]); #`matrice inverse de R3` M1:=Multiply(T1,v): M2:=Multiply(T2,v): M3:=Multiply(T3,v):
while M1[1]<>3 or M2[1]<>3 or M3[1]<>3 do #arrêt quand on obtient (3,4,5)
if M1[1]>0 and M1[2]>0 and M1[3]>0 #distinction entre les 3 opérations T1, T2 ou T3
then print('T1',M1[1],M1[2],M1[3] ) : NouTriPy(M1[1],M211],M1[3])
elif M2[1]>0 and M2[2] >0 and M2[3] >0
then print('T2',M2[1],M2[2],M2[3]) :
RETURN(NouTriPy(M2[1],2[2],M2[3])
else print('T3',M3[1],M3[2],M3[3]): RETURN(NouTriPy(M3[1],M3[2],M3[3])) fi od : if M1`[1]=3 or M2[1]=3 or M3[1]=3 then break fi end:
Error, unable to match delimiters
Je voudrais obtenir à partir de NouTriPy( 2225,3648,4273);
T1,975,448,1073
T3,275,252,373
T2,33,56,65
T1,15,8,17
T3,3,4,5 arrêt
Merci de m'aider.
Après une nuit de sommeil j'ai trouvé une réponse qui convient avec un point d'arrêt.
Peut être avez-vous une meilleure procédure ?
> NouTriPy := proc (x, y, z) local M1, M2, M3, T1, T2, T3, v, u; v := `<,>`(x, y, z); if v[1] < 0 or v[2] < 0 or v[3] < 0 then break end if; T1 := Matrix([[1, 2, -2], [-2, -1, 2], [-2, -2, 3]]); T2 := Matrix([[1, 2, -2], [2, 1, -2], [-2, -2, 3]]); T3 := Matrix([[-1, -2, 2], [2, 1, -2], [-2, -2, 3]]); M1 := Multiply(T1, v); M2 := Multiply(T2, v); M3 := Multiply(T3, v); if 0 < M1[1] and 0 < M1[2] and 0 < M1[3] then print('T1', M1[1], M1[2], M1[3]); return NouTriPy(M1[1], M1[2], M1[3]) elif 0 < M2[1] and 0 < M2[2] and 0 < M2[3] then print('T2', M2[1], M2[2], M2[3]); return NouTriPy(M2[1], M2[2], M2[3]) else print('T3', M3[1], M3[2], M3[3]); return NouTriPy(M3[1], M3[2], M3[3]) end if end proc;
> ;
> NouTriPy(2225, 3648, 4273);
T1, 975, 448, 1073
T3, 275, 252, 373
T2, 33, 56, 65
T1, 15, 8, 17
T3, 3, 4, 5
T3, -1, 0, 1
Error, (in NouTriPy) break or next outside do loop |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 27 Nov 2013 9:13 Sujet du message: |
|
|
Bonjour,
Je vous propose le remaniement mineur suivant (utilisation d'une boucle while et rajout du troisième cas pour ne plus avoir l'affichage final de <-1,0,1>).
Sinon l'algorithme récursif utilisant les matrices génératrices des triplets pythagoriciens primitifs est bien programmé ici.
Code: |
> NouTriPy := proc(x, y, z)
local M1, M2, M3, T1, T2, T3, v;
T1 := Matrix([[1, 2, -2], [-2, -1, 2], [-2, -2, 3]]);
T2 := Matrix([[1, 2, -2], [2, 1, -2], [-2, -2, 3]]);
T3 := Matrix([[-1, -2, 2], [2, 1, -2], [-2, -2, 3]]);
v := <x, y, z>;
while 0 < v[1] and 0 < v[2] and 0 < v[3] do
M1 := LinearAlgebra:-Multiply(T1, v);
M2 := LinearAlgebra:-Multiply(T2, v);
M3 := LinearAlgebra:-Multiply(T3, v);
if 0 < M1[1] and 0 < M1[2] and 0 < M1[3] then
print('T1', M1[1], M1[2], M1[3]);
return NouTriPy(M1[1], M1[2], M1[3])
elif 0 < M2[1] and 0 < M2[2] and 0 < M2[3] then
print('T2', M2[1], M2[2], M2[3]);
return NouTriPy(M2[1], M2[2], M2[3])
elif 0 < M3[1] and 0 < M3[2] and 0 < M3[3] then
print('T3', M3[1], M3[2], M3[3]);
return NouTriPy(M3[1], M3[2], M3[3])
else return
end if
end do
end proc;
> NouTriPy(2225, 3648, 4273);
T1, 975, 448, 1073
T3, 275, 252, 373
T2, 33, 56, 65
T1, 15, 8, 17
T3, 3, 4, 5
|
A plus tard sur ce forum. |
|
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.
|