Procédure sous Maple
Procédure sous Maple
Bonjour,
je commence a étudier le logiciel maple. En ce qui concerne les 'formules' je m'en sors pas trop mal. Mais je ne comprend rien au procédure.
J'ai un exercice dans lequel on prend une matrice $A\in M_{(n,m)}(\mathbb{R})$ (n lignes, m colonnes).
Il faut trouver une procédure qui renvoie le rang de $A$.
:?
Pouvez vous m'aider ?
je commence a étudier le logiciel maple. En ce qui concerne les 'formules' je m'en sors pas trop mal. Mais je ne comprend rien au procédure.
J'ai un exercice dans lequel on prend une matrice $A\in M_{(n,m)}(\mathbb{R})$ (n lignes, m colonnes).
Il faut trouver une procédure qui renvoie le rang de $A$.
:?
Pouvez vous m'aider ?
-
- Modérateur général
- Messages : 8200
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Je ne connais pas Maple mais j'imagine qu'il y a une fonction préprogrammée pour cela : rank(A) ?
Une petite googlelisation me donne :
http://www.grappa.univ-lille3.fr/polys/ ... lin03.html
Une petite googlelisation me donne :
http://www.grappa.univ-lille3.fr/polys/ ... lin03.html
Il te suffit de créer un programme qui reduit ta matrice grace à l'algorithme de Gauss (par exemple) et ensuite tu compte le nombre de ligne de ta matrice qui possède au moins un élément non nul. C'est enfantin. Il faut juste connaitre le langage de programmation de Maple et il n'est pas très compliqué!!!
Sinon je pense également que Maple possède déjà une fonction qui calcul le rang d'une matrice.
Alphonse \$BC\$
Sinon je pense également que Maple possède déjà une fonction qui calcul le rang d'une matrice.
Alphonse \$BC\$
Oui c'est bien cela Alphonse :Alphonse BC a écrit :Il te suffit de créer un programme qui reduit ta matrice grace à l'algorithme de Gauss (par exemple) et ensuite tu compte le nombre de ligne de ta matrice qui possède au moins un élément non nul. C'est enfantin. Il faut juste connaitre le langage de programmation de Maple et il n'est pas très compliqué!!!
Sinon je pense également que Maple possède déjà une fonction qui calcul le rang d'une matrice.
Alphonse \$BC\$
la procéduire doit renvoyer $PAQ=B$
où $Q\in Gl_n(\mathbb{R})$, $P\in Gl_m(\mathbb{R})$ et $B\in M_{(n,m)}(\mathbb{R})$
C'est enfantin, mais pas pour moi :(
-
- Modérateur général
- Messages : 8200
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Dans ce cas:
http://www.grappa.univ-lille3.fr/polys/ ... ire01.html
ou bien
http://www.velvia.org/documents/fayard- ... _gauss.pdf
ou encore
http://www.apsq.org/sautquantique/Activ ... Etapes.pdf
Ce ne sont pas les réponses qui manquent sous google (requête=maple+matrice+pivot+Gauss)
http://www.grappa.univ-lille3.fr/polys/ ... ire01.html
ou bien
http://www.velvia.org/documents/fayard- ... _gauss.pdf
ou encore
http://www.apsq.org/sautquantique/Activ ... Etapes.pdf
Ce ne sont pas les réponses qui manquent sous google (requête=maple+matrice+pivot+Gauss)
-
- Modérateur général
- Messages : 8200
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Je note $L_i$ la ligne $i$ d'une matrice.
Etape 1 : avoir un coefficient non nul en haut à gauche (on permute des lignes si nécessaire) appelé pivot puis on combine les lignes 2 à $n$ avec la ligne 1 pour obtenir des 0 dessous ce pivot. Ici :
$L_2\;\leftarrow\;L_2 - 4L_1$ et $L_3\;\leftarrow\;L_3 - 7L_1$
Etape 2 : avoir un coefficient non nul en place (2,2) (permuter si nécessaire) puis obtenir des 0 en dessous de ce nouveau pivot en combinant les lignes 3 à $n$ avec la ligne 2. Ici :
$L_3\;\leftarrow\;L_3 - \alpha L_2$ (je n'ai pas fait les calculs).
Etape 3 : on itère ce processus jusqu'à épuisement des lignes ou bien jusqu'à abtenir un "pivot" nul (même après permutations).
Le rang de la matrice est alors le nombre de pivots (non nuls bien sûr).
Etape 1 : avoir un coefficient non nul en haut à gauche (on permute des lignes si nécessaire) appelé pivot puis on combine les lignes 2 à $n$ avec la ligne 1 pour obtenir des 0 dessous ce pivot. Ici :
$L_2\;\leftarrow\;L_2 - 4L_1$ et $L_3\;\leftarrow\;L_3 - 7L_1$
Etape 2 : avoir un coefficient non nul en place (2,2) (permuter si nécessaire) puis obtenir des 0 en dessous de ce nouveau pivot en combinant les lignes 3 à $n$ avec la ligne 2. Ici :
$L_3\;\leftarrow\;L_3 - \alpha L_2$ (je n'ai pas fait les calculs).
Etape 3 : on itère ce processus jusqu'à épuisement des lignes ou bien jusqu'à abtenir un "pivot" nul (même après permutations).
Le rang de la matrice est alors le nombre de pivots (non nuls bien sûr).
Dernière modification par guiguiche le vendredi 13 octobre 2006, 21:25, modifié 1 fois.
-
- Modérateur général
- Messages : 8200
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Ok,guiguiche a écrit :Je crois que Maple manipule les lignes des matrices (va voir les liens que je t'ai donné).
moi j'ai réfléchis je vois quelque chose comme ça :
on entre la matrice avec n et m
on prend deux varibles l et c
tant que l<n et c<m on cherche le pivot
j'ai donc deux fonctions, une pivot_de_gauss et l'autre cherche_le_pivot.
mais je ne vois pas que faire dans cherche_le_pivot.
Mais je vois pas le rapport avec PAQ=B aussi, décidement je crois que j'ai rien compris
-
- Modérateur général
- Messages : 8200
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Une procédure du genre:Kazik a écrit :mais je ne vois pas que faire dans cherche_le_pivot.
Code : Tout sélectionner
j := i ;
TANT QUE coef(i,i) = 0 FAIRE
j := j+1 ;
SI coef(j,i) = 0 ALORS permuter les lignes i et j ;
FIN FAIRE
SI coef(i,i) est nul
ALORS rang := i-1
SINON on combine ;
J'essaie de comprendre votre raisonement, je raisonne sur un exemple :guiguiche a écrit : Une procédure du genre:Code : Tout sélectionner
j := i ; TANT QUE coef(i,i) = 0 FAIRE j := j+1 ; SI coef(j,i) = 0 ALORS permuter les lignes i et j ; FIN FAIRE SI coef(i,i) est nul ALORS rang := i-1 SINON on combine ;
On prend la matrice :
1 2 3
4 5 6
On a donc n=2, m=3.
Tant que l<2 et c<3 on cherche le pivot.
on fait l=c=1 (tout le temps 1 ?)
le coef de (1,1)=1
le coef de (2,2)=5
Je vois pas la suite, on ne pourra pas rentrer dans la boucle while car (i,i) différent de 0 non ?
-
- Modérateur général
- Messages : 8200
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Le principe est d'obtenir une matrice "triangulaire" (avec des 0 dessous la "diagonale") donc le pivot est en (1,1) à la première étape, en (2,2) à la deuxième étape, ...
Dans ton exemple initial :
1 2 3
4 5 6
7 8 9
Etape 1 donne : (pivot=1)
1 2 3
0 -3 -6
0 -6 -12
Etape 2 donne : (pivot=-3)
1 2 3
0 -3 -6
0 0 0
Etape 3 donne : pas de pivot non nul donc la triangularisation est achevée et le rang de la matrice vaut 2.
Dans ton exemple initial :
1 2 3
4 5 6
7 8 9
Etape 1 donne : (pivot=1)
1 2 3
0 -3 -6
0 -6 -12
Etape 2 donne : (pivot=-3)
1 2 3
0 -3 -6
0 0 0
Etape 3 donne : pas de pivot non nul donc la triangularisation est achevée et le rang de la matrice vaut 2.
J'ai bien compris ceci,
mais ce que je n'est pas compris c'est pourquoi une telle procédure permet de cherche le pivot ?
Je n'arrive pas à 'faire tourner sur papier' cette procédure sur une matrice comme exemple :
1 2 3
4 5 6
mais ce que je n'est pas compris c'est pourquoi une telle procédure permet de cherche le pivot ?
Code : Tout sélectionner
j := i ;
TANT QUE coef(i,i) = 0 FAIRE
j := j+1 ;
SI coef(j,i) = 0 ALORS permuter les lignes i et j ;
FIN FAIRE
SI coef(i,i) est nul
ALORS rang := i-1
SINON on combine ;
1 2 3
4 5 6
-
- Modérateur général
- Messages : 8200
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Essais avec :
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
Ce que je propose n'a d'intérêt que si on tombe sur un "pivot" nul : sauf erreur de ma part, l'algorithme proposé doit permuter les lignes 1 et 4 (le coefficient (1,1) est nul donc on regarde le coef (2,1) qui est nul donc en regarde le coef (3,1) qui est encore nul donc on regarde le coef (4,1) qui n'est pas nul donc on permute).
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
Ce que je propose n'a d'intérêt que si on tombe sur un "pivot" nul : sauf erreur de ma part, l'algorithme proposé doit permuter les lignes 1 et 4 (le coefficient (1,1) est nul donc on regarde le coef (2,1) qui est nul donc en regarde le coef (3,1) qui est encore nul donc on regarde le coef (4,1) qui n'est pas nul donc on permute).
Ok,
mais ça ne marche pas sur
1 2 3
4 5 6
alors ? comment faire dans le cas de cette matrice pour chercher le pivot ?
J'en reviens a ce que j'ai dit :
mais ça ne marche pas sur
1 2 3
4 5 6
alors ? comment faire dans le cas de cette matrice pour chercher le pivot ?
J'en reviens a ce que j'ai dit :
Il faut faire intervenir d'autres fonctions ?J'essaie de comprendre votre raisonement, je raisonne sur un exemple :
On prend la matrice :
1 2 3
4 5 6
On a donc n=2, m=3.
Tant que l<2 et c<3 on cherche le pivot.
-
- Modérateur général
- Messages : 8200
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Normallement si, mais comme le premier pivot vaut 1, on n'a pas besoin d'utiliser la procédure de recherche puis, comme le second pivot vaut -3, on n'a toujours pas besoin d'utiliser la procédure (on ne rentre pas dans la boucle puisque coef(i,i) n'est pas nul aussi bien pour i=1 à l'étape 1 que pour i=2 à l'étape 2).Kazik a écrit :mais ça ne marche pas sur
1 2 3
4 5 6
-
- Modérateur général
- Messages : 8200
- Inscription : vendredi 06 janvier 2006, 15:32
- Statut actuel : Enseignant
- Localisation : Le Mans
Code : Tout sélectionner
rang_de_matrice:= proc (matrice)
local M, n, m, l, c, k;
M := Copy (matrice);
n := RowDimension (M);
m := ColumnDimension (M);
c := 1;
l := 1;
while l <= n and c <= m do
k := cherche_le_pivot (M, l, c);
1 2 3
4 5 6
?