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

Mathématiques Discussion :

Problème de percolation d'un fluide


Sujet :

Mathématiques

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 22
    Points : 14
    Points
    14
    Par défaut Problème de percolation d'un fluide
    Bonsoir,

    Tout d'abord, je tiens à dire que je suis débutant en Matlab. J'apprends Matlab en faisant ce programme.
    Je fais un programme qui permet de simuler la percolation d'un fluide dans un milieux poreux.

    Je simule le milieu poreux à l'aide d'une matrice ( en gros le milieu est une matrice avec des points auxquels j'attribue une valeur : 0 le fluide ne peut pas traverser; 1 : le fluide peut traverser). Et j'attribue une densité de présence de points.
    *Voici ma 1ere fonction (qui fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function T= solporeux(N,M,probabilite)
     
    if probabilite<0 || probabilite>1
        error('Erreur!La probabilité doit être comprise entre 0 et 1');
    end
     
    T= zeros (N,M); 
     
    T = rand(M,N) < probabilite;
    for i=1 : N
        T(1,i)=1;
    end    
    end
    Ensuite je met le fluide sur la première ligne de la matrice (j'attribue la valeur 2 pour un fluide)

    *Voici la fonction (qui fonctionne):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function t = mise_en_eau( t )
    [nbl,nbc]= size( t );
    for j = 1 :nbc
    t(1,j) = 2 ;
     
    end
    Ensuite je fais une fonction qui représente l'état des cases suivante de la matrice en fonction de son état et de ses voisins.
    Le fluide ayant la valeur 2, ne peut se déplacer que dans une case ayant la valeur 1, ce fluide ne peut se déplacer qu'à droite, à gauche, ou vers le bas
    (mais pas en diagonal, ni vers le haut: gravité oblige).

    *voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function [ne,change]= nouvel_etat_case (t,lig,col)
     
    ne= t (lig,col) ;
    change= false ;
    if t (lig ,col)==0
    if t (lig-1,col)==2 || t (lig,col-1)==2 || t (lig ,col+1)==2
    ne =2 ;
    change= true ;
    end
    end
    Ensuite une fonction qui applique la fonction précédente à l'ensemble du tableau 2D

    *Voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function [t1,change]=etat_suivant(t)
    t1=t;
    [nbl,nbc]=size(t);
    change=false;
    for i=1:nbl
    for j=1:nbc
    [t1(i,j), modif]=nouvel_etat_case(t,i,j);
    if modif==true then
    change=true;
    end
    end
    end
    Enfin la fonction fonction principale nommée percolation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function [RES,T]= percolation (N,M,P)
    T=solporeux (N,M,P) ;
    T=mise_en_eau(T) ;
    change=true ;
    while change== true
    [T,change]= etat_suivant (T ) ;
    end
    RES= false ;
    if T(N,2)==2
    RES= true ;
    end

    Mais j'ai des erreurs, j'ai ça: et j'aimerai connaitre le problème? Avez vous 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
    >> percolation(100,100,0.5)
    Attempted to access t(3,0); index must be a positive
    integer or logical.
     
    Error in nouvel_etat_case (line 6)
    if t (lig-1,col)==2 || t (lig,col-1)==2 || t (lig
    ,col+1)==2
     
    Error in etat_suivant (line 7)
    [t1(i,j), modif]=nouvel_etat_case(t,i,j);
     
    Error in percolation (line 6)
    [T,change]= etat_suivant (T ) ;
     
    >>

    Cordialement

  2. #2
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Salut,
    je te conseil de plutot poser ce genre de question sur le forum matlab
    Toutefois le problème est que tu n'as pas traité le cas où tu es sur le bord de ta matrice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if t (lig-1,col)==2 || t (lig,col-1)==2 || t (lig ,col+1)==2
    Tu testes parfois une valeur en dehors de ta matrice t, ce que Matlab n'apprécie pas. Vérifie donc lig-1>0, col-1>0 et col+1<size(t,2)

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

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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