セルオートマトンの周期性
新関数のFindTransientRepeatは,リストの過渡部分と反復部分を識別する.これを使ってセルオートマトン(CA)を調べることができる.
CAのルール30を見てみる.バージョン11の関数であるRulePlotは,関連する変換ルールを求めるのに役立つツールである.
In[1]:=
![Click for copyable input](assets.ja/periodicity-in-cellular-automata/In_47.png)
RulePlot[CellularAutomaton[30]]
Out[1]=
![](assets.ja/periodicity-in-cellular-automata/O_53.png)
新関数のCenterArrayを使ってCAの初期状態を定義する.
In[2]:=
![Click for copyable input](assets.ja/periodicity-in-cellular-automata/In_48.png)
initc = CenterArray[7]
Out[2]=
![](assets.ja/periodicity-in-cellular-automata/O_54.png)
上記の初期条件でCAのルール30を計算し,正方形の離散配列としてプロットする.
In[3]:=
![Click for copyable input](assets.ja/periodicity-in-cellular-automata/In_49.png)
ca30 = CellularAutomaton[30, initc, 20];
ArrayPlot[ca30, Mesh -> True]
Out[3]=
![](assets.ja/periodicity-in-cellular-automata/O_55.png)
FindTransientRepeatは,このCAの反復部分を与える.
In[4]:=
![Click for copyable input](assets.ja/periodicity-in-cellular-automata/In_50.png)
tr30 = FindTransientRepeat[ca30, 2];
ArrayPlot[Last[tr30], Mesh -> True]
Out[4]=
![](assets.ja/periodicity-in-cellular-automata/O_56.png)
CAのルール90について同じステップを繰り返す.
In[5]:=
![Click for copyable input](assets.ja/periodicity-in-cellular-automata/In_51.png)
RulePlot[CellularAutomaton[90]]
Out[5]=
![](assets.ja/periodicity-in-cellular-automata/O_57.png)
In[6]:=
![Click for copyable input](assets.ja/periodicity-in-cellular-automata/In_52.png)
ca90 = CellularAutomaton[90, initc, 20];
ArrayPlot[ca90, Mesh -> True]
Out[6]=
![](assets.ja/periodicity-in-cellular-automata/O_58.png)
In[7]:=
![Click for copyable input](assets.ja/periodicity-in-cellular-automata/In_53.png)
tr90 = FindTransientRepeat[ca90, 2];
ArrayPlot[Last[tr90], Mesh -> True]
Out[7]=
![](assets.ja/periodicity-in-cellular-automata/O_59.png)