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 :

Générer une matrice avec des agrégation


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    M2
    Inscrit en
    Janvier 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : M2

    Informations forums :
    Inscription : Janvier 2018
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Générer une matrice avec des agrégation
    Bonjour,

    Je dispose d'une matrice qui constitue l'espace dans lequel tourne un automate cellulaire qui simule une relation d'herbivorie plante-insecte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    n = 200 ; 
    p = 0.8;
    M = (rand(n)>p);
    Cette matrice me permet de définir ensuite qu'une cellule avec la valeur 1 contient des ressources en plante, tandis qu'une cellule avec 0 est vide.

    J'aimerai voir le rôle de la manière dont sont distribuées les cellules avec des 1 sur la dynamique du système.
    Pour cela j'aimerai faire en sorte d'avoir des agrégations de 1 et de 0.
    En fait, dans la réalité la distribution de cette plante n'est pas uniforme, mais forme des patchs assez denses séparés par des espaces où elles est absentes. C'est ce type de distribution que j'aimerai représenté.

    Une piste ?
    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Générer une matrice avec des agrégation
    Bonjour,

    Une idée :
    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
    R=fix(sprand(200,200,0.1)+0.9);
    imagesc(R)
    colormap(cool)
    Z=length(R(R==0));
    U=length(R(R==1));
    % Pourcentage
    U/Z*100
     
     
    n=200;
    p=0.8;
    M=rand(n)>p;
    figure
    imagesc(M)
    colormap(cool)

  3. #3
    Membre à l'essai
    Homme Profil pro
    M2
    Inscrit en
    Janvier 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : M2

    Informations forums :
    Inscription : Janvier 2018
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Merci pour votre réponse,
    Malheureusement je ne vois pas bien la différence dans le résultat entre les deux codes.
    Je ne parviens pas à former plus d'agrégations avec votre code qu'il n'y en a avec la matrice M originelle.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut Générer une matrice avec des agrégation
    Bonjour,

    Essai en diminuant le pourcentage et compare les deux résultats (il s'agit d'une matrice creuse):
    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
    R=fix(sprand(200,200,0.05)+0.9);
    imagesc(R)
    colormap(cool)
    Z=length(R(R==0));
    U=length(R(R==1));
    % Pourcentage
    U/Z*100
     
     
    n=200;
    p=0.8;
    M=rand(n)>p;
    figure
    imagesc(M)
    colormap(cool)
     
    Z=length(M(M==0));
    U=length(M(M==1));
    % Pourcentage
    U/Z*100

  5. #5
    Membre à l'essai
    Homme Profil pro
    M2
    Inscrit en
    Janvier 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : M2

    Informations forums :
    Inscription : Janvier 2018
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Je pense vraiment que les deux codes donnent le même résultat.
    Il suffit de modifier la valeur de p dans la création de la matrice M pour trouver le même pourcentage que dans la matrice R, et dans les deux cas les cellules contenant la valeur 1 sont réparties de manière complètement aléatoire sans former d'agrégation particulière.
    Peut-être qu'il y a une subtilité dans votre code que je n'ai pas saisi, mais autant par le processus codé que par les résultats donnés en jouant avec les paramètres je pense que ça ne répond pas à ma problématique.

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    OK.
    Il faut chercher une autre solution.

  7. #7
    Membre à l'essai
    Homme Profil pro
    M2
    Inscrit en
    Janvier 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : M2

    Informations forums :
    Inscription : Janvier 2018
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    J'ai essayé quelque chose avec la génération de la matrice M originelle puis une boucle qui étend les zones avec la valeur 1 sur leur voisinage comme un automate cellulaire finalement.
    Ainsi avec une matrice M contenant peu de valeur 1, après quelques itérations d'extension sur le voisinage cela forme quelques gros patchs séparés par des espaces vides. Mais le voisinage se calculant de la même manière pour chaque point cela forme des patchs un peu similaire et dense, sans trou (valeur 0) à l'intérieur, tandis que je recherche quelque chose de plus fragmenté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    n = 100;
    p = 0.65;
    M = (rand(n)>p);
     
     % Agregation-Fragmentation %
     
    Pattern = [1 1 1;1 0 1;1 1 1];
    Pat = 5;
    for t = 1:Pat
    M = conv2(M,Pattern,'same');
    M = (M>3) ;
    end
    imagesc(M)

Discussions similaires

  1. [image] Générer une image avec des pixels non rectangulaires
    Par Jerome Briot dans le forum Téléchargez
    Réponses: 12
    Dernier message: 31/10/2014, 12h43
  2. Générer une matrice avec nombre aléatoires
    Par Ryu0174 dans le forum Général Python
    Réponses: 5
    Dernier message: 23/05/2012, 21h40
  3. Réponses: 6
    Dernier message: 16/10/2010, 14h23
  4. Générer une JComboBox avec des int
    Par Pirokkk dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 02/01/2008, 17h28

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