| inizia a prendere forma... il funzionamento è sempre lo stesso piazziamo le coordinate delle cellule vive, fissiamo il numero di iterazioni e lui parte... ed è anche simpatico. Solo che... a)i 3 cicli for annidati rendono l'esecuzione lentissima e pesante, anche con solo 2 iterazioni, ma per ottenere delle belle figure ci vogliono molte iterazioni (un centinaio) e non si finisce più (si parla di ORE!!!) b)NON L'HO TESTATO CON OCTAVE QUINDI NON SO SE FUNZIONA c)in pratica lui fa una serie di calcoli che effettivamente sono inutili, perchè la logica è rigida, in quanto prende tutta la griglia e la processa elemento per elemento. prende una cella (questo per ogni cella) fa la somma degli elementi contigui ad essa e il risultato fornirà il nuovo stato della cella in questione. Capite bene che per farlo in una 200x200 con 100 iterazioni non si finisce più e il processore fonde. Per questo motivo..questa versione è solo una beta di prova.. a prossima notte insonne userò un approccio diverso. dove tramite un find cerco solo le cellule vive e dopo di che analizzo i contorni e ridefinisco lo stato della cella centrale. Capite bene che (il numero massimo di celle vive che possiamo inserire è 9) fare questo discorso per 9 elementi comporta meno tempo che non farlo per una 100x100... ed ecco il codice CODICE %------------ AUTOMA CELLULARE BIDIMENSIONALE (beta 0.1)--------- % g'OZ 08/09 %La Logica dovrebbe essere che quando la somma delle celle è un %numero paro (0,2,4) la cella centrale fa 1 altrimenti 0 %Il problema di questo codice è che i 3 cicli for annidati %rendono l'esecuzione pesante e molto lenta. %per velocizzarlo basta diminuire la dimensione di A e quindi e %quindi i for ivece di fermarsi a 48, scelta A 20x20,si fermano %a 18. stesso discorso vale per il numero di iterazioni anche se %un numero di iterazioni elevato dà migliori risultati
A=zeros(50,50)
disp('iserisci cordinare della prima cellula') x1=input('x=') y1=input('y=') disp('iserisci cordinare della seconda cellula') x2=input('x=') y2=input('y=') disp('iserisci cordinare della terza cellula') x3=input('x=') y3=input('y=') disp('iserisci cordinare della quarta cellula') x4=input('x=') y4=input('y=') disp('iserisci cordinare della quinta cellula') x5=input('x=') y5=input('y=') disp('iserisci cordinare della sesta cellula') x6=input('x=') y6=input('y=') disp('iserisci cordinare della settima cellula') x7=input('x=') y7=input('y=') disp('iserisci cordinare della ottava cellula') x8=input('x=') y8=input('y=') disp('iserisci cordinare della nona cellula') x9=input('x=') y9=input('y=')
it=input('numero iterazioni????')
%X colonna Y riga
A(x1,y1)=[1];A(x2,y2)=[1];A(x3,y3)=[1];A(x4,y4)=[1];A(x5,y5)=[1]; A(x6,y6)=[1];A(x7,y7)=[1];A(x8,y8)=[1];A(x9,y9)=[1]; A hold on plot(y1,x1,'sb') plot(y2,x2,'sb') plot(y3,x3,'sb') plot(y4,x4,'sb') plot(y5,x5,'sb') plot(y6,x6,'sb') plot(y7,x7,'sb') plot(y8,x8,'sb') plot(y9,x9,'sb') axis([0 50 0 50])
pause
for k=1:it for n=2:48 for m=2:48 B=A(n-1,m)+A(n+1,m)+A(n,m-1)+A(n,m+1) if rem(B,2)==[0] A(n,m)=[0] else A(n,m)=[1] end hold off [i,j]=find(A) plot(i,j,'.m') axis([0 100 0 100]) drawnow end hold off [i,j]=find(A) plot(i,j,'.m') axis([0 100 0 100]) drawnow end
end
|