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 :

Problème de codage d'un algorithme d'automate cellulaire


Sujet :

MATLAB

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

    Informations professionnelles :
    Activité : M2

    Informations forums :
    Inscription : Janvier 2018
    Messages : 22
    Par défaut Problème de codage d'un algorithme d'automate cellulaire
    Bonjour,

    Voici ce que j'aimerai coder :
    - Un cell array de dimension n*n contient dans chacune de ses cellules un vecteurs X[x;y;z] avec x,y,z des réels positifs (des densité de population)
    - Une fonction de transition doit s'appliquer sur le cell array afin de calculer les densités à l'instant t+1 à partir des densités de l'instant t. Dans cette fonction de transition la partie s'appliquant au calcul de X(3){t+1} nécessite de faire la somme d'une proportion de X(3) des huit cellules voisines (ce qui correspond dans le contexte à un phénomène de dispersion entre les cellules).

    Voici la fonction de projection dans le cas simple de seulement deux cellules. En rouge les termes qui décrivent l'immigration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    % Projection function
    % X=(F1,B1,P1,F2,B2,P2)
    % X_n+1=G2(X_n)
    G2 = @(X) [v*phib(R(X(1),X(3))).*X(1) + r(rho(X(1),X(2))).*X(2);...
              mub(rho(X(1),X(2))).*X(2).*(1+gamma(rho(X(1),X(2)))).*(1-X(2)./B_max);...
              f.*X(3).*S(R(X(1),X(3)))*sigma*deltab(X(3),X(1))+delta(X(6),X(4))*sigma*S(R(X(4),X(6)))*X(6)*f;...
              v*phib(R(X(4),X(6))).*X(4) + r(rho(X(4),X(5))).*X(5);...
              mub(rho(X(4),X(5))).*X(5).*(1+gamma(rho(X(4),X(5)))).*(1-X(5)./B_max);...
              f.*X(6).*S(R(X(4),X(6)))*sigma*deltab(X(6),X(4))+delta(X(3),X(1))*sigma*S(R(X(1),X(3)))*X(3)*f];
    Par rapport à ce code l'idée serait donc maintenant que l'immigration proviennent des huit cellules voisines.

    Donc au final mes problèmes sont :
    Comment modifier la fonction de transition
    Comment appliquer la fonction sur l'ensemble du cell array en même temps

    Merci

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    salut

    pour la deuxième question, regarde la fonction cellfun

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

    Informations professionnelles :
    Activité : M2

    Informations forums :
    Inscription : Janvier 2018
    Messages : 22
    Par défaut
    Bjr ,

    Merci pour la réponse, fonction très utile ! Mais dans mon cas elle me pose un petit problème par rapport au dispersion qui risque d'être comptées plusieurs fois, enfin bref je me suis débrouillé différemment avec une boucle.
    Mais cela m'amène à une nouvelle question plutôt graphique, comment visualiser mon automate graphiquement.

    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
    for t=1:tmax
        A = [] ;
        for i=1:n
            for j=1:n
                A = [A;M{i,j}(3)*1/8*delta(M{i,j}(1),M{i,j}(3))*sigma*f] ; 
            end
        end
        B = reshape(A,[n,n]) ; 
        C = conv2(B, F, 'same') ; 
     
        for i=1:n
            for j=1:n
            X = [M{i,j}(1) ; M{i,j}(2) ; M{i,j}(3)] ;
            M{i,j} = Gca(X) ;
            end
        end
    end
    L'idée étant la suivante :
    Visualiser l'évolution des valeurs des cellules de M au fur et à mesure de la boucle avec un code couleur, par exemple :
    - Vert si M{i,j}(1) < 0
    - Rouge si M{i,j}(3) < 0
    - Marron si M{i,j}(1) < 0 et M{i,j}(2) > 0
    - Noir si M{i,j}(2) < 0

    J'avais une piste avec pcolor() mais j'ai l'impression que ça ne prête pas trop à l'utilisation d'un cell array...

Discussions similaires

  1. [Débutant] Automate cellulaire - problème de limite d'environnement et d'algorithme
    Par mxrider45 dans le forum MATLAB
    Réponses: 17
    Dernier message: 20/11/2016, 21h48
  2. Problème de codage
    Par bilowlex dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 12/12/2006, 16h40
  3. Problème de codage de caractères depuis l'import
    Par compu dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 22/03/2006, 08h37
  4. Réponses: 9
    Dernier message: 04/03/2005, 13h58
  5. [Accents - XML] Problème de codage non supporté !!
    Par Smortex dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/11/2002, 11h00

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