xavolog

同居しているカニ様の記録だったりあれこれ

自然の模様・形の数学的ヒント1「反応拡散系」

 1と書いたけど2があるとは限らない

f:id:xavo:20200121223423p:plain

チューリングパターンをモチーフにしたイラスト

自然の形を数学で考えたい

生物や天然の物体にある形や模様が「なぜできたのか」と疑問に思った時、少なくとも2種類のアプローチがあると思います。

一つは進化論的な「進化の過程で獲得していく道筋」を考えるアプローチ。しかし、これは一番最初の発端を説明しません。どちらかというとその形が「なぜ今まで生き残ったのか」を考えるものだと思われます。そっちの分野は全く詳しくないので(それ以外も詳しいとは言えませんが)置いておきます。

もう一つは模様や形ができるような物理的・数学的な原理を考えるアプローチです。具体的にどんな物質が関わるかは置いておいて、どういう法則を持って来ればその形が実現できるのかを考えます。「数理生物学」とか「理論生物学」とか呼ばれる分野で研究されることかと思います。

自分が数学好きだなと思うようになったきっかけは「フラクタル」という図形でした。フラクタルが面白かった理由は自然の形と非常に似ていたからというのが一つあります。自然にある形と数学の繋がりは自分にとってとても関心の高いトピックで、本を読んだりして調べたことをメモ的に書いて整理しようとしているのがこの記事です。

専門的に学んだ人間ではないので誤りを含む可能性があります。そういう箇所は教えてもらえると嬉しいです。

反応拡散系

読んで字のごとく、互いに反応し合いながら拡散していく要素を組みにした系のことです。系はシステムを訳した用語で「生態系」の”系”と同じもの。「反応」は一方が一方の数を増加させたり減少させたり、異なる要素同士が空間の近くにある時に濃度変化が起こる現象、「拡散」は空間中に広がっていく様を表します。

f:id:xavo:20200120003208p:plain

シェーダーを使ったシミュレーションの例

2種類の模様

反応拡散系によってできるパターンは大きくチューリング・パターンのような定常波と、BZ反応のような進行波があります。これらの違いは反応し合う因子の拡散速度の関係によります。

チューリング・パターン

www.youtube.com

イギリスの数学者アラン・チューリングが初めに存在を示唆したため名前がつきました。1952年にチューリングが書いた「The Chemical Basis of Morphogenesis」という論文で、モルフォゲンと呼ばれる化学的な因子がこのような濃度のパターンを生むことを示唆しました。論文には図が載っていますが、この頃は図が描けるコンピューターなどないので手計算だそうです。チューリングはこの論文の2年後自殺してしまいました。

チューリング・パターンは動物の模様に非常に良く似ていて、特に魚類・両生類など*1ではそっくりな模様を持つ種がいます。サンゴの仲間の形*2や、サンゴ礁を広域で捉えた時*3も似た形状が見て取れます。シマウマなどの哺乳類は胚の段階で模様が固定される説もあるようで微妙に違うようです。

行波BZ反応

www.youtube.com

ベロウソフ・ジャボチンスキー反応(Belousov-Zhabotinsky reaction)の略。化学反応の一種で、系内の物質の濃度が行ったり来たりして変化する振動現象が起こります。この反応をシャーレの中など薄く広がった状態で起こすと、特徴的なパターンを観察できます。BZ反応が起こる化学物質の組み合わせは複数あります。

f:id:xavo:20200122235135p:plain

BZ反応のシミュレーション

反応拡散方程式

f:id:xavo:20200121235444j:plain

反応拡散方程式の形式

反応拡散系を表現する方程式を反応拡散方程式といい、大体上のような形になります。計算地点での因子の濃度の時間変化を表します。

f:id:xavo:20200122233634j:plain

Gray-Scottモデルの方程式

Gray-Scottモデルはチューリング・パターンを生成するのによく使われます。ネットで見かける反応拡散系シミュレーションは大体これです。

プログラムでどう実装するのか

数式をプログラミングでどう表現するのか、自分はあまりプログラミングもシミュレーションも馴染んでいないので最初わかりませんでした。上の動画リンク以外の画像は自分で書いたシミュレーションですが、参考と備忘録的に少し解説します。

nextU = Du * ( u(p - Δx) + u(p + Δx) + u(p - Δy) + u(p + Δy)  - 4*u(p) ) - u(p)*v(p)*v(p) + F*(1 - u(p));
nextV = Dv * ( v(p - Δx) + v(p + Δx) + v(p - Δy) + v(p + Δy)  - 4*v(p) ) + u(p)*v(p)*v(p) - (F + K)*v(p);

プログラム的にはこんな感じの計算を書くことになります。慣れている人は上の方程式とほとんど変わらんと思うかもしれませんが素人目線的にはかなり隔たりがあります…。

u(p)は位置Pを入力するとその点の物質Uの濃度を返す関数で、v(p)は物質Vについての同様の関数です。シェーダーでやる場合これは「前フレームの結果を書き込んだテクスチャの位置Pの色を見る」という意味です。

2階の∇(ナブラ)はx軸方向とy軸方向について差分をとることに相当するようです。つまり隣のピクセルをみて濃度の差をとります。

ただこの計算だと十字の方向とそれ以外で異方性を持ってしまって、斜め隣のセルも評価しないとダメな気がしてます。(鋭い人は上のBZ反応の画像を見て気付いてると思いますが)

遊ぼう

パラメーターを弄って気軽に遊べるwebサイトがあるのでぜひ動きを楽しんでみてください。

Reaction diffusion simulation

現実との対応

反応拡散系はそもそも現実の複雑なパターンがどう生まれるのかを考える際に出てきた話ですが、じゃあ具体的にシミュレーションは成功してるのか?

大阪大学の近藤滋先生がこの分野の実験ではよく話に出てきます。

ゼブラフィッシュの縞模様を一部レーザーで除去すると、コンピューターで反応拡散系をシミュレーションした場合と同様の経過をたどるなど非常に興味深い研究をされています。

参考