Autómatos celulares em GNU/Octave
Códigos em GNU/Octave para desenhar autómatos celulares.
Definição da regra do autómato celular:
function retval=carulen (x,r) xin= [1 1 1;1 1 0;1 0 1;1 0 0;0 1 1;0 1 0;0 0 1;0 0 0]; maxl=round(log(r)/log(2))+1; power = ones (length (r), 1) * (2 .^ (maxl-1 : -1 : 0)); r = r * ones (1, maxl); digits = floor (rem (r, 2*power) ./ power); if (length(digits)>8 && digits(1)==0) xout=digits(2:length(digits)); else xout=cat(2, zeros(1,8-length(digits)),digits); endif; for i=1:8 if (x==xin(i,:)) x(2)=xout(i); retval=x(2); return; else endif; endfor; endfunction
Desenha l
iterações do autómato celular com regra r
com comprimento 2n+1
com
condições iniciais [... 0 0 1 0 0 ...]
function caplot(r,n,l) n=n+1; y=zeros(1,n); y(floor(n/2+1))=1; z=[]; yn=[]; z=cat(1,z,y); for j=1:l yn(1)=carulen([y(n) y(1) y(2)],r); for i=2:n-1 yn(i)=carulen(y(i-1:i+1),r); endfor; yn(n)=carulen([y(n-1) y(n) y(1)],r); z=cat(1,z,yn); y=yn; endfor; zplot=cat(2,ones(l+3,1),cat(1, ones(1,n), ones(l+1,n)-z,ones(1,n)),ones(l+3,1)); imshow(zplot) endfunction
Desenha l
iterações do autómato celular com regra r
com comprimento 2n+1
com
condições iniciais aleatórias
function caplot_rand(r,n,l) n=n+1; y=floor(2*rand(1,n)); z=[]; yn=[]; z=cat(1,z,y); for j=1:l yn(1)=carulen([y(n) y(1) y(2)],r); for i=2:n-1 yn(i)=carulen(y(i-1:i+1),r); endfor; yn(n)=carulen([y(n-1) y(n) y(1)],r); z=cat(1,z,yn); y=yn; endfor; zplot=cat(2,ones(l+3,1),cat(1, ones(1,n), ones(l+1,n)-z,ones(1,n)),ones(l+3,1)); imshow(zplot) endfunctionPalavras chave/keywords: autómato celular, GNU/Octave
Criado/Created: NaN
Última actualização/Last updated: 10-10-2022 [14:25]
(c) Tiago Charters de Azevedo