Procédure sous Maple
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
La variable i est fixée, c'est une autre variable (i0 par exemple) qui doit prendre les valeurs de i+1 à n : n'oublie pas que l'on combine avec la ligne i (i est donc fixé à cette étape).
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
La ligne i contient le pivot non nul. Donc, il faut combiner toutes les lignes de i+1 à n avec la ligne i, ce qui donne :
(je ne connais pas la syntaxe exacte de addrow).
Code : Tout sélectionner
FOR k FROM i+1 TO n DO addrow(A,k,i,-A[k,j]/A[i,j]) ;
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Donc :
(j'ai permuté k et i).
Je ne vois pas ce qui pose problème avec -A[k,j]/A[i,j] (à moins que ce ne soit pas la syntaxe pour désigner le coefficient d'une matrice).
Code : Tout sélectionner
FOR k FROM i+1 TO n DO addrow(A,i,k,-A[k,j]/A[i,j]) ;
Je ne vois pas ce qui pose problème avec -A[k,j]/A[i,j] (à moins que ce ne soit pas la syntaxe pour désigner le coefficient d'une matrice).
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Je ne sais pas s'il en existe vraiment une, en tout cas ca ne fonctionne pas à cause de ceci!guiguiche a écrit :Je ne vois pas ce qui pose problème avec -A[k,j]/A[i,j] (à moins que ce ne soit pas la syntaxe pour désigner le coefficient d'une matrice).
(quand je fais tourner la procédure, le curseur revient exactement ici)
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Tu n'as pas moyen de rechercher dans l'aide la réponse à l'extraction des coefficients ?
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
L'aide est en anglais!
Sinon j'ai mis :
Désormais dans le curseur se positionne derriere le i, j'y comprend plus rien!
Sinon j'ai mis :
Code : Tout sélectionner
m1:=-A[k,j]; m2:=A[i,j];
Code : Tout sélectionner
addrow(A,k,i,m1/m2) ;
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
et si tu poses m=-A[k,j]/A[i,j] ?
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Désormais, le curseur est derrière la A dans
!!
Code : Tout sélectionner
addrow(A,k,i,m) ;
Voila ce que j'ai pour l'instant :
Code : Tout sélectionner
pivot:=proc(A)
local i,j,k;
i:=1; j:=1;
while i<=rowdim(A) and j<=coldim(A) do
i0:=i;
while A[i0,j]=0 and i0<n do
i0:=i0+1;
end do;
if i0<>i then swaprow(A,i,i0);
end if;
if A[i,j]<>0 then
for k from i+1 to rowdim(A) do
m:=-A[k,j]/A[i,j];
addrow(A,k,i,m);
end if;
end do;
end do;
end proc;
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
i0 est aussi une variable locale (mais tu peux la renommer k).
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Code : Tout sélectionner
pivot:=proc(A)
local i,j,i0,m,n,p;
n:=RowDimension(A);
p:=ColumnDimension(A);
i:=1;j:=1;
while i<=n and j<=p do
i0:=i;
while A[i0,j]=0 do i0:=i0+1; end do;
if i0<>i then swaprow(A,i,i0); end if;
if A[i,j]<>0 then
for i0 from i+1 to n do
m:=-A[i0,j]/A[i,j];
addrow(A,i0,i,m);
end do;
end if;
end do;
end proc;
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Si tu ne fait rien afficher, la machine ne prend pas d'initiative !
Fait afficher la matrice A pour voir si la réduction est correcte.
Il faudra peut-être une variable locale supplémentaire pour calculer le rang de la matrice (c'est bien ce que tu voulais au départ ?).
Fait afficher la matrice A pour voir si la réduction est correcte.
Il faudra peut-être une variable locale supplémentaire pour calculer le rang de la matrice (c'est bien ce que tu voulais au départ ?).
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
j'ai rajouter unguiguiche a écrit :Si tu ne fait rien afficher, la machine ne prend pas d'initiative !
Fait afficher la matrice A pour voir si la réduction est correcte.
Code : Tout sélectionner
return A;
C'est sur!guiguiche a écrit :Il faudra peut-être une variable locale supplémentaire pour calculer le rang de la matrice (c'est bien ce que tu voulais au départ ?).
Mais dejà, si cela ne tourne pas comme ceci !!
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Tu ne peux pas faire afficher A à la main après avoir fait tourner la procédure ?
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Le problème c'est que la procédure tourne certes mais ne s'arrête pas. Donc oui, on peut le faire afficher à la main :
Mais comme la procédure tourne mais ne s'arrête pas, cela ne fait rien!
Code : Tout sélectionner
pivot(A);
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Si elle ne s'arrête pas, c'est que la condition d'arrêt d'une boucle while est mise en échec.
Tu lui as donné quelle matrice A pour fonctionner ?
Tu lui as donné quelle matrice A pour fonctionner ?
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
J'ai donner cette matrice 2x2
Je pense moi que c'est sur la boucle for qu'il y a un bug!
Code : Tout sélectionner
A := Matrix(2, 2, [[1, 1], [1, 1]])
-
- Modérateur général
- Messages : 8158
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Il doit manquer un BEGIN/END autour des deux instructions à réaliser par cette boucle FOR.
Pas d'aide par MP : les questions sont publiques, les réponses aussi.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.
Tu as apprécié l'aide qui t'a été fournie ? Alors n'hésite pas à rendre la pareille à quelqu'un d'autre.
Un peu d'autopromotion.