Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB
MATLAB Forum d'entraide sur MATLAB. Avant de poster -> FAQ MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 20h52   #1
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
Par défaut Permutations bizarres

salut tous,

en ce moment je bosse sur une matrice carré de taille T(n,n) et un vecteur U(n).

je veux faire un algorithme qui parcourt la diagonale de la matrice et qui cherche la valeur maximal de la colonne en dessous de la diagonale et son indice.
Pour ça pas de problèmes, je fais:
Code :
1
2
3
4
for i=1:1:n
    [max, indice]=max(T(i:n,i))
end
par contre une fois que ce max est trouvé j'aimerai inverser la ligne du max et la ligne "i" (pour T et U) en procédant de deux manières:

1°) en faisant une permutation classique
2°) en faisant une permutation à l'aide d'une multiplication matricielle

exemple:
voici ma matrice T= [3 2 1;3 1 0;4 5 9] et mon vecteur U=[9;5;0]
je suis sur à i=1 je remarque donc que sous mon terme diagonal j'ai la dernière ligne qui à le maximum je voudrais donc avoir à la fin de cette itération:
T= [4 5 9;3 1 0;3 2 1] et mon vecteur U=[0;5;9]

1°) avec une permutation classique
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for i=1:1:n
    if (T(i,i)<max(i:n,i))
        [max, indice]=max(T(i:n,i))
        ligneMaxT=T(i+indice,:);
        lignePermT=T(i,:);
        ligneMaxU=T(i+indice,:);
        lignePermU=T(i,:);
        T(i+indice,:)=lignePermT;
        T(i,:)=ligneMaxT;   
        U(i+indice,:)=lignePermU;
        U(i,:)=ligneMaxU;
    end
end
pensez vous que ceci fonctionne ? (j'ai pas MATLAB à disposition en ce moment ?) je pense que l'on peut faire plus rapide mais je ne sais pas trop comment, avez vous une idée ?

2°) avec une matrice de multiplication

la première solution est la plus classique, à présent j'aimerai faire une autre solution : j'aimerai construire une matrice A qui me permettent de faire la même permutation que tout à l'heure en faisant les opérations:

T=A*T et U=A*U;

par contre là je sèche complétement

pourriez vous m'aidez svp ?
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 21h28   #2
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 829
Points : 6 829
Bonjour,

Pour la permutation, tu peux utiliser le mettre principe que la discussion sur le Tri par ordre croissant.
Par contre, il faudrait commencer par bien te relire... Sans rentrer en profondeur, je remarque:
  • if (T(i,i) < max(T(i:n,i)))
  • [max, indice] = max(T(i:n,i)) qui te mènera directement à une erreur. Erreur déjà repérée dans la même discussion sur le Tri. Je te conseille de bien lire cette contribution.
En ce qui concerne les matrices, tu peux commencer par regarder cet article de Wikipédia.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 22h06   #3
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
salut Jerome !

Citation:
Envoyé par Winjerome Voir le message
Pour la permutation, tu peux utiliser le mettre principe que la discussion sur le Tri par ordre croissant.
Par contre, il faudrait commencer par bien te relire... Sans rentrer en profondeur, je remarque:[LIST][*]if (T(i,i) < max(T(i:n,i)))[*][max, indice] = max(T(i:n,i)) qui te mènera directement à une erreur.
je vais regarder (mais moi il ne s'agit pas d'un classement par ordre croissant)

Citation:
Envoyé par Winjerome Voir le message
OK, je vais regarder

Citation:
Envoyé par Winjerome Voir le message
En ce qui concerne les matrices, tu peux commencer par regarder cet article de Wikipédia.
ah oui en effet ça à l'air pas mal ! je ne savais pas que ça existais
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 22h12   #4
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 829
Points : 6 829
Citation:
Envoyé par 21did21 Voir le message
je vais regarder (mais moi il ne s'agit pas d'un classement par ordre croissant)
Je sais, c'est juste pour la simplification dont je t'avais parlé au post #14.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 22h25   #5
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
OK, maintenant tous est OK. J'ai bien compris ce que c'est une matrice de permutation et c'est donc OK

merci pour le lien
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h33.


 
 
 
 
Partenaires

Hébergement Web