IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Remplissage de matrice [Débutant]


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut Remplissage de matrice
    Bonjour;
    J'ai une boucle dans mon programme qui me donne une matrice par exemple :
    et je veux remplir une matrice P :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P=zeros(4*size(B,1),4);
    par la matrice B et 4 tel que P soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P=[4 3 2 1;3 4 2 1;3 2 4 1;3 2 1 4;4 2 1 3;2 4 1 3;2 1 4 3;2 1 3 4];
    je remplis P pour trouver une matrice C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C= [sum( A( sub2ind(size(A),rows,cols) ) ,2) P]
    tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rows = P(:,1:n-1);
    cols = P(:,2:n);
    A une matrice d'ordre 4.
    et puis je ne garde que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P=[C((C(:,1)==max(C(:,1))),2:end)];
    comment jeux programmer le remplissage de P ?
    Merci beaucoup
    À bientôt

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    B = [3     2     1
         2     1     3];
    P = 4*[eye(4)  eye(4)];
    P(~P) = kron(B, ones(4,1)).';
    P = P.';

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Une alternative, moins performante si B possède un grand nombre de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Pl = zeros(4,4);
    Pu = zeros(4,4);
    P = zeros(4*size(B,1),4);
     
    for n = 1:size(B,1)
     
        BB = repmat(B(n,:),3,1);    
     
        Pl(2:4,1:3) = tril(BB);
        Pu(1:3,2:4) = triu(BB);
     
        P((n-1)*4+1:n*4,:) = Pl+Pu+diag([4 4 4 4]);
     
    end
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    Merci bien;
    juste une remarque pour le diag ds le cas generale si
    j'ai une autre question pour la matrice C,si j'ai par exemple:
    ce que je voudrai, c'est comment arriver a retrouver le max de c(:,1) avec la valeur qui est juste inférieur à le max(donc 15 et 9 ds l'exemple)
    merci

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    Bonjour a tous;
    j'ai une autre question:si on a maintenent un vecteur:
    et P une matrice:,ma question c'est comment remplir P tel que P soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P=[4 3 2 1;3 4 2 1;3 2 4 1;3 2 1 4;4 2 1 3;2 4 1 3;2 1 4 3;2 1 3 4;4 1 3 2;1 4 3 2;1 3 4 2;1 3 2 4];
    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Dans le même esprit que précédemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    V = [3 2 1];
    vCirc = cell2mat(arrayfun(@(k) circshift(V,[1 k]), ...
        (0:-1:-numel(V)+1).',...
        'UniformOutput', false));
    P = repmat(4*eye(4), 1, 3);
    P(~P) = kron(vCirc, ones(4,1)).';
    P = P.'

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 54
    Points : 30
    Points
    30
    Par défaut
    Bonjour a tous ;
    je rencontre des difficultés :
    par exemple pour la matrice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    B=[
         3     2     4     1
         2     4     1     3
         3     1     4     2];
    Je cherche une matrice P tel que P soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    P = [
         5     1     3     2     4
         1     5     3     2     4
         1     3     5     2     4
         1     3     2     5     4
         1     3     2     4     5
         5     4     2     3     1
         4     5     2     3     1
         4     2     5     3     1
         4     2     3     5     1
         4     2     3     1     5 ];
    Donc mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    B=[3 2 4 1;2 4 1 3;3 1 4 2];
    BCirc=zeros(size(B,2)*size(B,1),size(B,2))
    for i=1:size(B,1)
        BCirc((i-1)*size(B,2)+1:i*size(B,2),:)=cell2mat(arrayfun(@(k) circshift(B(i,:),[1 k]), ...
        (0:-1:-numel(B(i,:))+1).',...
        'UniformOutput', false));
    end
    BCirc
    BCirc =unique(BCirc ,'rows')
    n=5;
    m = size(BCirc,1);
    P = zeros(n*m,n);
    Pl = zeros(n,n);
    Pu = zeros(n,n);
     
    for i = 1:size(BCirc,1)
        BB = repmat(BCirc(i,:),n-1,1)  ;  
     
        Pl(2:n,1:n-1) = tril(BB);
        Pu(1:n-1,2:n) = triu(BB);
     
        P((i-1)*n+1:i*n,:) = Pl+Pu+diag(n*ones(1,n));
     
    end
    mes questions:
    1. dans la matrice B on remarque que la ligne 3 est en sens inverse de la ligne 2, comment je le détecter pour le suprimer et B soit :
    2. il ’ya des répétitions ds la matrice BCirc ?et pour ca j’ai ajouté :
    BCirc =unique(BCirc ,'rows') ;
    J'aimerai trouver la matrice P d'une façon propre et optimisée
    SVP j'ai besoin d'un coup de main pour optimizer le code
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonctions de creation et remplissage de matrice
    Par grodwar dans le forum Débuter
    Réponses: 7
    Dernier message: 29/11/2011, 13h44
  2. [Débutant] Remplissage de matrice
    Par angel_tn dans le forum MATLAB
    Réponses: 4
    Dernier message: 14/04/2010, 16h48
  3. [XL-2002] Remplissage de Matrices
    Par Titwou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/04/2009, 10h19
  4. [scipy] remplissage de matrice creuse
    Par KINENVEU dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 27/04/2009, 05h59
  5. [Débutant] Remplissage d'une matrice
    Par Keldou dans le forum Octave
    Réponses: 2
    Dernier message: 24/04/2007, 19h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo