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 :

Translation de matrice


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Translation de matrice
    bonjour,
    je suis étudiant en ingénierie biologique et dans le cadre d'un cours je dois réaliser une modélisation par automate cellulaire.
    Malheureusement je bloque car je n'arrive pas à coder un phénomène.
    Je travaille sur un tableau de 300x300 dans lequel les valeurs fixées à 1 représentent certains individus et celles à 4 représentent un autre type d'individus.
    ce que je voudrais, c'est que lorsque la distance entre ces deux types de cellules est inférieure 11 (que j'ai déjà implémentée)les valeurs de 1 soient translatées d'une case vers le haut et à droite.
    un grand merci d'avance pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    pour le moment, tu connais donc les coordonnées des points dans le tableau qui doivent être translatés? Si oui, sous quelle forme as-tu ces coordonnées? Est-ce que c'est un indexage ligne/colonne ou un indexage linéaire? (petit rappel sur les méthodes indexages)
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    la méthode d'indexage est de type classique (lignes/colonnes)

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Je n'ai peut-être pas bien compris, mais l'exemple suivant :

    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
    25
    >> A = [0 0 0 0 0 0;0 1 0 0 0 0;0 0 0 1 1 0];
    A
     
    A =
     
         0     0     0     0     0     0
         0     1     0     0     0     0
         0     0     0     1     1     0
     
    >> ij = [2 2;3 4;3 5];
    >> ijtranslate = [ij(:,1)-1 ij(:,2)+1];
     
    >> idx1 = sub2ind(size(A),ij(:,1),ij(:,2));
    >> idx2 = sub2ind(size(A),ijtranslate(:,1),ijtranslate(:,2));
     
    >> A(idx1) = 0;
    >> A(idx2) = 1;
     
    >> A
     
    A =
     
         0     0     1     0     0     0
         0     0     0     0     1     1
         0     0     0     0     0     0
    ressemble à ce que tu veux faire? (pour l'élément du tableau d'indice (i,j), l'élément en haut à droite a pour indice (i-1,j+1), et ensuite j'ai utilisé l'indexage linéaire pour modifier les valeurs du tableau).
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    le problème c'est que je ne travaille qu'en vecteurs dans mon programme ce qui donnerait par exemple:

    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
     
    function [] = essai_boucle(N)
    if nargin==0
        N=200;
    end
     
     
    foret = ones(N,N);
    foret(30:40,30:40) = 2*ones(11,11);
    foret_old = foret;
    ij = foret(foret_old==2);
    idx(0) = sub2ind(size(foret),ij(:,1:N));
     
    for i=1:50
    ijtranslate = [ij(:,1:N)-1,ij(:,1:N)+1];
    idx(i) = sub2ind(size(foret),ijtranslate(:,1:N));
    idx(i-1)=0;
    idx(i)=1;
    idx = idx+1;
    end
    et alors j'ai un problème de dimension au niveau de idx(0)...

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ij = foret(foret_old==2);
    tu sélectionnes toutes les valeurs égale à 2 (ij sera un vecteur contenant que des 2), je ne pense pas que c'est ce que tu souhaites faire...
    et la suite de ton code, je ne l'ai pas compris...

    En reprenant ton début de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    N = 200;
     
    foret = ones(N,N);
    foret(30:40,30:40) = 2*ones(11,11);
    foret_old = foret;
     
    [i j] = find(foret_old==2); % indexage classique : i contient les numéros de ligne et j contient les numéros de colonne
    idx = sub2ind(size(foret),i,j); % indexage linéaire

    Petite remarque : les indices dans matlab commence à 1 (idx(0) n'existe pas) et on ne peut pas affecté un tableau à un scalaire.
    Si tu veux mettre des vecteurs de taille différentes dans une même variable, regarde du côté des tableaux de cellules.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    bonjour,
    mille excuses pour l'absence!
    le problème a été résolu avec un peu de bricolage!
    un grand merci pour ton attention

Discussions similaires

  1. Problème de translation avec une matrice
    Par ChPr dans le forum Android
    Réponses: 2
    Dernier message: 23/01/2013, 22h15
  2. matrice de translation et de rotation
    Par autoin dans le forum Mathématiques
    Réponses: 8
    Dernier message: 15/05/2012, 13h18
  3. Translation de matrices
    Par stodak dans le forum MATLAB
    Réponses: 6
    Dernier message: 02/05/2012, 11h40
  4. Réponses: 2
    Dernier message: 09/01/2006, 16h53
  5. Comment définir le type matrice ?
    Par charly dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2002, 21h01

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