function cell1(rule,init) %e.g. rule=22; init='010'; %init='r' gives random start size=300; mymat=zeros(size,size,3); initrow=zeros(1,size); if init=='r' for i=1:size initrow(i)=floor(2*rand); end else l=length(init); pos=ceil(size/2-l/2); for i=1:l if init(i)=='1' initrow(pos+i-1)=1; end end end for i=1:3 mymat(1,:,i)=initrow; end mystr=''; while rule>1 if mod(rule,2)==1 mystr=strcat(mystr,'1'); else mystr=strcat(mystr,'0'); end rule=floor(rule/2); end mystr=strcat(mystr,'1'); for i=1:8-length(mystr) mystr=strcat(mystr,'0'); end mystr for i=2:size for j=1:size left=j-1; right=j+1; if j==1 left=size; end if j==size right=1; end mynum=4*mymat(i-1,left,1)+2*mymat(i-1,j,1)+mymat(i-1,right,1); mymat(i,j,:)=str2num(mystr(1+mynum)); end end image(mymat);