これは何をしているの?
2つの濃度 U・V が、それぞれ拡散しながら「U + 2V → 3V」という反応をする。V は U を食べて増え、一定の割合で分解して消える。この単純な釣り合いの崩れ方が、模様になる。
∂U/∂t = Du·∇²U − U·V² + F·(1−U)
∂V/∂t = Dv·∇²V + U·V² − (F+k)·V
Du=0.16, Dv=0.08(拡散の速さ・固定)
∇² はラプラシアン=「周囲との差」。ここでは
上下左右×0.20 + 斜め×0.05 − 中心×1.0
の9点ステンシルで近似(重みの合計=0 =一様な場では∇²=0)。
時間は陽的オイラー法(dt=1)で1ステップずつ前進。
画面の端は周期境界(右の隣は左、上の隣は下)。
色は V(の濃度)を 0→1 で表示(配色は見た目だけ、計算は不変)。
GPUで毎フレーム数十回これを解いている。
F は U を外から補う速さ(式の F·(1−U))。U が補われるほど V が増える材料も増える。ただし式を見ると、F は V を外へ流す項 −(F+k)·V にも入っている。k は V が消える速さ。この F と k のわずかな違いで、点が増殖したり、線が伸びて迷路になったり、安定した斑点で止まったりする。反応拡散は「局所の反応+拡散だけで模様が育つ」ことを示すモデルで、自然界の模様すべてを説明できるわけではないけれど、斑点や縞を考える入口としてよく使われる。