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) :
Ensuite je met le fluide sur la première ligne de la matrice (j'attribue la valeur 2 pour un fluide)
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
*Voici la fonction (qui fonctionne):
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.
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
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 :
Ensuite une fonction qui applique la fonction précédente à l'ensemble du tableau 2D
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
*Voici la fonction :
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
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
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
Partager