Procédure sous Maple

Tout ce qui concerne notamment les outils de calcul numérique, de calcul formel ou de géométrie.
[participation réservée aux membres inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

Kazik a écrit :C'est pas grave !
Oui, j'ai bien trouver des fonctions telle que swapcol qui permet d'échanger des colonnes, etc.
Mais j'ai vraiment du mal sur la mise en forme!
Donne le début de ce que tu as, on va l'amender.
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.
Kazik

Message non lu par Kazik »

Code : Tout sélectionner

> procedure:=proc(A)
>   local k;
>   for k from 1 do
>     pivot:=cherchelepivot(A);
>   end do;
> end proc;
Pour l'instant, c'est bien maigre !
Kazik

Message non lu par Kazik »

Code : Tout sélectionner

for j from 1 to coldim(A) do
    for i from 1 to rowdim(A) do
>       if A[i,j]<>0 then
>         return([i,j]);
>       end if;
>     end do;
>   end do;
J'ai vraiment du mal !
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

Pour $(i,j)$ fixé, tu cherches $i_0$ tel que $a[i_0,j]\neq0$ puis tu permutes les lignes $i_0$ et $i$ (si $i_0\neq i$) ensuite tu combines les lignes $i+1$ à $n$ avec la ligne $i$. Tu passes alors à $(i+1,j+1)$ (si pas de $i_0$ alors tu passes à $(i,j+1)$).
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.
Kazik

Message non lu par Kazik »

Code : Tout sélectionner

for j from 1 to coldim(A) do 
for i from 1 to rowdim(A) do
if A[i,j]<>0 then swaprow(A, i, i)
end if;
end do;
end do;
en faite je ne vois pas comment faire sous maple le i0.
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

Code : Tout sélectionner

i := 1 ; j := 1 ; 
TANT QUE ( i<=n ET j<=p )
   FAIRE
   i0 := i ;
   TANTQUE ( a[i0,j]=0 ET  i0<n ) FAIRE i0 := i0+1 ; FINFAIRE ;
   SI i0 <> i ALORS permuter(ligne_i,ligne_i0) ;
   SI a[i,j]<>0 ALORS FAIRE toutes_les_combinaisons ; i := i+1 ; FINFAIRE ;
   j := j+1 ;
   FINFAIRE ;
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.
Kazik

Message non lu par Kazik »

J'ai compris jusqu'à :

Code : Tout sélectionner

SI a[i,j]<>0 ALORS FAIRE toutes_les_combinaisons ;
que je ne saisi pas
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

si a[i,j]<>0 alors on a un pivot (car non nul) et on peut combiner les lignes i+1 à n avec la ligne i pour obtenir des 0 en dessous de 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.
Kazik

Message non lu par Kazik »

Alors dans ce cas il faut faire :
$$L_{i+1}-\dfrac{[i+1,j]}{[i,j]} \times L_i$$
(vu précédemment)

?
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

Oui.
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.
Kazik

Message non lu par Kazik »

Donc :

Code : Tout sélectionner

i := 1 ; 
j := 1 ;
while i<=n and j<=p 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) ;
else if a[i,j]<>0 then do toutes_les_combinaisons ; 
i := i+1 ; 
end do ;
j := j+1 ;
end do ;
pour faire toutes_les_combinaisons il faut faire une boucle ?
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

Je ne suis pas d'accord avec le ELSE.
Oui, il faut une autre boucle pour les combinaisons.
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.
Kazik

Message non lu par Kazik »

Euhh il n'y a pas besoin de else!
Mais par contre je n'est pas compris pourquoi i0 doit être strictement inférieur à n. Si i0=n, cela change quoi ?
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

Kazik a écrit :Mais par contre je n'est pas compris pourquoi i0 doit être strictement inférieur à n. Si i0=n, cela change quoi ?
Sinon on peut pas faire i0+1 (on déborde).
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.
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

Euh, tu as peut être raison après tout. A vérifier. (je corrige des copies donc difficile de bien réfléchir à ton problème en même temps).
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.
Kazik

Message non lu par Kazik »

Ok, j'vais essayer.
Par contre pour la boucle :
est-ce bien :

Code : Tout sélectionner

for i from 1 to rowdim(A) do addrow(A,i+1,i,-A[i+1,j]/[i,j]);
?
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

je ne connais pas le langage maple.
il doit manquer un A pour désigner le coefficient en fin de ligne et je dirai :

Code : Tout sélectionner

FOR i0 FROM i+1 TO rowdim(A) ...
Kazik

Message non lu par Kazik »

La boucle semble ne pas fonctionner :
voici la syntaxe

Code : Tout sélectionner

 addrow(A, r1, r2, m)
Par exemple , si $A:=\begin{pmatrix}1&2&3\\2&3&4\\3&4&5\end{pmatrix}$

Code : Tout sélectionner

addrow(A,1,2,10);
va retourner $A:=\begin{pmatrix}1&2&3\\12&23&34\\3&4&5\end{pmatrix}$
(on fait $10\times L_1+\L_2$)
guiguiche
Modérateur général
Modérateur général
Messages : 8149
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans

Message non lu par guiguiche »

Je ne comprends pas où se situe le problème. Que voulais-tu obtenir ?
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.
Kazik

Message non lu par Kazik »

Je voulais donc obtenir la boucle !

Code : Tout sélectionner

for i from i+1 to rowdim(A) do addrow(A,i0,i+1,2);

pourquoi mettre i0 ? on a pas que i0:=i ?