gozforum [ Disinformazione e Controcultura ]

AUTOMA CELLULARE MONODIMENSIONALE MATLAB e OCTAVE

« Older   Newer »
  Share  
view post Posted on 10/8/2009, 19:31     +1   -1
Avatar

IN DISPERSIONE

Group:
FOUNDER
Posts:
14,802
Reputation:
+36
Location:
trinakaos---CT/SR

Status:


In un altro post ho detto quanto mi hanno sempre affascinato questi automi cellulari...l'altra sera dovevo guidare per una settantina di km, di notte... avevo un pò di sonno e per svegliarmi mi sono bevuto un pugno di redbull, morale della favola alle 3 di mattina, quando sono arrivato a casa ero hiperattivo e non sapendo che fare mi sono messo a implementare un semplice automa cellulare monodimensionale in MATLAB, e devo dire che non è stato semplice infatti tutto il giorno successivo l'ho passato a correggerlo ma alla fine tutto sommato sono arrivato a quello che volevo..la parte grafica mi ha dato qualche problema però sono riuscito ad accomodare in questo modo :)

puoi inserire la posizione di 4 cellule vive (che sarebbero gli 1) e lui seguendo la sua logica cresce e si sviluppa. A prossima notte insonne cerco di fare quello bidimensionale...so che il codice non è pulito ma va bene così :ok:

CODICE
%------- AUTOMA CELLULARE MONODIMENSIONALE--------------
%                                            by g'OZ '09
%­La logica che segue è monomensionale, però l'evoluzione
%crea un terzo asse dei tempi. La logica che gestisce la
%crescita è la seguente, lo stato delle 3 celle contigue
%comanda la cella centrale con una logica:
%(0,0,0)-->0
%(0,1,1)-->1
%(0,1,0)-->1
%(0,1,1)-->0
%(1,0,0)-->1
%(1,0,1)-->1
%(1,1,0)-->0
%(1,1,1)-->0
clc
clear

A=zeros(1,20)
C=zeros(10,20)



pos_1a=input('Posizione del primo   1    ')
pos_1b=input('Posizione del secondo 1    ')
pos_1c=input('Posizione del terzo   1    ')
pos_1d=input('Posizione del quarto  1    ')
pos_1e=input('Posizione del quinto  1    ')
A(pos_1a)=[1]
A(pos_1b)=[1]
A(pos_1c)=[1]
A(pos_1d)=[1]
A(pos_1e)=[1]
C(pos_1a)=[1]
C(pos_1b)=[1]
C(pos_1c)=[1]
C(pos_1d)=[1]
C(pos_1e)=[1]
it=input('Numero di iterazioni ')

A
pause(2)

for h=1:it
   
for n=1:18
   B=A(n)+A(n+1)+A(n+2);

   switch B
   case 0
       C(h,n+1)=0;
       C
   case 1
     
           C(h,n+1)=1;
           C
       case 2
       if A(n)==A(n+2);
           C(h,n+1)=1;
           C
       else
           C(h,n+1)=0;
         
       end
   case 3
       C(h,n+1)=0;
       C
   end

end
A=C(h,:);
pause(0.2)
D=h * A;
x=(1:1:20);
%­parte grafica
hold on
grid off

plot(x,D,'*m')
% plot(x,D,'y')

end




Edited by g'oz - 11/8/2009, 10:05
 
Top
view post Posted on 11/8/2009, 10:01     +1   -1
Avatar

IN DISPERSIONE

Group:
FOUNDER
Posts:
14,802
Reputation:
+36
Location:
trinakaos---CT/SR

Status:


Ho corretto 2 cosucce.. perchè notavo che per gli ultimi elementi (17,18,19,20) aveva la tendenza a stabilizzarsi subito in una riga... comunque.
Mi sono dimenticato di spiegarlo :D

In pratica inserisci la posizione delle cellule vive (1) se ne volete inserire meno di quelle che chiede in imput basta premete invio e non viene memorizzato... dopo di che fissate il numero di iterazioni (io l'ho fatto anche con mille ma essendo che all'aumentare delle iterazioni l'asse Y viene di volta in volta compresso si finisce con il non capire più una mazza. L'immagine è riferita a prima delle modifiche :lol:

 
Top
view post Posted on 28/8/2009, 13:59     +1   -1
Avatar

IN DISPERSIONE

Group:
FOUNDER
Posts:
14,802
Reputation:
+36
Location:
trinakaos---CT/SR

Status:


 
Top
2 replies since 10/8/2009, 19:31   230 views
  Share