環境シミュレーション ものと考えられる.下記の微分方程式第 1 式は餌の 量 x の変化を記述しているが,餌の量 x の変化速度 は餌の量 x に比例し,その比例係数 c1 は,魚の量 y 8.食うか食われるか(捕食-被食者モデル) 「C言語によるモデリング」横手光洋(ラッセルブックス) より抜粋 が増加すると小さくなると仮定している.すなわち, c1 → c1 (1 − c 2 y ) . 自然界では,各種の生物の固体数は,ある一定の 範囲内でパランスを保っている.ところが,ときと して特定の種だけが大発生することがある.有名な のは北欧に生息するタビネズミ(レミング)の例であ ろう.大発生したネズミが,ある日突然,海に向か って突進し,ついには一匹もいなくなってしまう話 は,誰もが一度は耳にしたことがあるのではないだ ろうか. 魚の量 y の変化を表す第 2 式も同じ考え方である. 魚の量 y の変化速度は,魚の量 y に比例する.しか し,その比例係数 c 3 は,第 1 式とは逆に餌の量 x が 増加するとともに大きくなると仮定している.すな わち, c3 → c3 (c 4 x − 1) . 以上を考慮すると次のような連立微分方程式を 立てることができる. 「群れの科学」(小沢正昭,研成社)には,そうした タビネズミの習性が紹介されていて,興味深い.以 下,同書から引用してみると, 「生育密度が極限まで高くなると殺しあう固体まで現れる. こうした状態になると,タビネズミの集団では移動を開始 する.タビネズミは進路を必ず谷の方へとる.北欧では谷 となっている所は氷河期に岩石が深く削り取られてでき たフィヨルドとなっており,フィヨルドは海に接している ので,谷に向かったタビネズミは海に入って死滅してしま うことになる」 上記のタビネズミの例はいささか極端なもので あるが,自然界には,そのように増えすぎた種の固 体数を正常に戻す働きとして天敵の存在がある.自 然界における種の固体数は,多くの場合,そのよう な天敵との「捕食-被食」関係において定まっている のである. dx = c1 x (1 − c 2 y ) dt dy = c 3 y (c4 x − 1) dt ここで x は餌の量, y は魚の量, c1 , c2 , c3 , c4 は定 数である. サンプルプログラム このような状況を説明する微分方程式として,イ タリアの数学者ボルテラ 1が生存競争の方程式とし て定式化したものが知られている.このような方程 式を作るきっかけは,ボルテラが地中海において, 第 1 次世界大戦後,大戦中にあまり獲らなかったの にもかかわらず,魚が獲れなくなったことを不思議 に思ったことにあるという. ではボルテラの捕食-被食者モデルをシミュレー ションするために作成したサンプルプログラムを 見てみよう.下図がプログラムの外観である. モデリング 基本的考え方は,次の「生態系のカオス」で解説す るロジスティック写像を 2 変数(固体種)に拡張した ボルテラ(Vito Volterra; 1860‐1940) 1 CD-ROM 版世界大百科事典より イタリアの数学者.積分方程式,積分微分方程式,汎関数論な どを研究.純粋数学の研究のみならず,物理学や生物学と関連し た応用数学的研究も数多く行う.とくに晩年の 15 年間に行った 数理生態学の研究は著名である.これは娘婿の水産学者ダンコナ U.D'Ancona(1896‐1964)から聞いたアドリア海における魚種交 代現象の話に端を発するもので,彼はこの現象を説明すべく, 1926 年に被食者と捕食者の個体数変動に関する微分方程式モデ ルを,アメリカの A.J.ロトカと独立に,提出した.そして以後, 種間競争のモデルをも含めて,さらに詳しく深い研究を続け,ロ トカなどと並んで数理生態学の開拓者となった.これらの研究は 彼がファシストへの忠誠を拒否し,イタリアのアカデミズムから も追われた困難な状況の中で行われた.太田 邦昌 - 45 - このプログラムは,グラフ右上の「スタート」と書 かれたコマンドボタンをクリックすると,シミュレ ーションが開始するようになっている.「スタート」 ボタンを押すと先ず下のようなダイアログボック スが現れる. ここでは, t = 0 での餌の量 x(0) と魚の量 y(0) , 比例係数 c1 と c 3 を設定するようになっている.なお その他のデフォールト値としてのシミュレーショ ン条件は次のとおりである: c 2 = 1, c 4 = 1 ,タイム ステップ Δt = 0.01 ,シートへの打ち出し時間間隔= 0.25,シミュレーションの終了時間 25. 環境シミュレーション UserForm1.Show '「UserForm1 に定義されたユーザフォームを画面に表示せよ. x = UserForm1.TextBox1 y = UserForm1.TextBox2 c1 = UserForm1.TextBox3 c3 = UserForm1.TextBox4 'ユーザフォームに打ち込まれた数値をプログラム内のパラ 'メータとして取り込む. Cells(2, 1) = t Cells(2, 2) = x Cells(2, 3) = y ダイアログボックスで条件を設定すると,このプ ログラムは,与えられた連立微分方程式をルンゲ・ クッタ法で解くようになっている.その差分解がシ ートの B2:C102 に打ち出され,その結果をうけて グラフが書き直される. サンプルの VBA プログラムを以下に示す. プログラムの詳細 For i = 1 To t_end / t_itvl t = t + t_itvl Cells(2 + i, 1) = t Next i '初期値 t,x,y のワークシートへの打ち出し. '時間項のワークシートへの打ち出し. If MsgBox(Prompt:="Ready?", Buttons:=vbOKCancel)_ <> vbOK Then Exit Sub 'MsgBox(メッセージボックス)関数を続く()の条件で画面表示し, 'もし(If)それに対する回答が O.K.ボタン(vbOK)以外(<>)なら '(Then),Sub プロシージャを終了せよ(Exit Sub)との命令文で 'ある. For i = 1 To t_end / t_itvl '問題をルンゲ・クッタ法で解いて,その結果を t_itvl の時間間 '隔でシートに打ち出すことを t_end/t_itvl 回繰り返せ. Option Explicit Dim c1, c3 As Double 'モジュールレベル変数として比例係数 c1 と c3 を宣言. For j = 1 To step 'シートへ 1 回打ち出す間に step 回の差分を繰り返せ. 'ルンゲ-クッタ法(Runge-Kutta Method) Sub Sub_RKM() Dim t As Double Dim i, j As Integer 't はシミュレーション時間,i と j は For...Next ステートメン 'ト用 t = t + del_t '差分が繰り返される度に,シミュレーション・クロックを del_t 'だけ進めよ. k1 = dxdt(t, x, y) l1 = dydt(t, x, y) k2 = dxdt(t + del_t/2,x + del_t * k1/2, _ y + del_t * l1 / 2) l2 = dydt(t + del_t/2,x + del_t * k1/2, _ y + del_t * l1 / 2) k3 = dxdt(t + del_t/2,x + del_t * k2/2, _ y + del_t * l2 / 2) l3 = dydt(t + del_t/2,x + del_t * k2/2, _ y + del_t * l2 / 2) k4 = dxdt(t + del_t,x + del_t * k3,y + _ del_t * l3) l4 = dydt(t + del_t,x + del_t * k3, y + _ del_t * l3) Dim k1, k2, k3, k4 As Double Dim l1, l2, l3, l4 As Double '2 つの連立微分方程式をルンゲ・クッタ法で解くために,4 つ '一組の変数を二組準備している. Dim x As Double Dim y As Double '餌の量(x),魚の量(y) Const del_t As Double = 0.001 Const t_end As Double = 25 Const t_itvl As Double = 0.25 'タイムステップは 0.01,シミュレーションの終了時間は 25,シ 'ートへの打ち出し時間間隔は 0.25 で固定. x = x + del_t*(k1 + 2 * k2 + 2 * k3 + k4)/6 y = y + del_t*(l1 + 2 * l2 + 2 * l3 + l4)/6 'ルンゲ・クッタ法の演算部分.k1,k2,k3,k4 が餌の量(x)に関す 'る変数で,l(エル)1,l2,l3,l4 が魚の量(y)に関する変数を表す. '上記のように変数ごとの k1 や l1,k2 や l2 を順次計算していく 'ことが連立微分方程式のルンゲ・クッタ法による解き方である. Const step As Integer = t_itvl / del_t '一回シートに打ち出す間に,step 回の差分解を求める. Sheets("Sheet1").Select '"Sheet1"という名のシートをアクティブにする. Next j UserForm1.TextBox1 = 1 UserForm1.TextBox2 = 3 UserForm1.TextBox3 = 2 UserForm1.TextBox4 = 1 'パラメータを設定するユーザフォームにデフォールト値を '入れている. Cells(i + 2, 2).Value = x Cells(i + 2, 3).Value = y ActiveSheet.Calculate 'ワークシートへの x と y の打ち出しとアクティブなシート 'の再計算. t=0 'シミュレーション・クロックを 0 に初期化する. Next i MsgBox ("シミュレーション終了") End Sub Range("A2:C102").ClearContents 'A2:C102 の範囲のセルデータをクリアする. - 46 - 環境シミュレーション Function dxdt(t, x, y As Double) As Double 'ボルテラ第 1 方程式の微分係数を返す Function プロシージャ If x < 0 Then x = 0 dxdt = c1 * (x - x * y) End Function ・一つはガウゼの実験で,ガウゼは捕食者としてカ Function dydt(t, x, y As Double) As Double 'ボルテラ第 2 方程式の微分係数を返す Function プロシージャ If y < 0 Then y = 0 dydt = c3 * (x * y - y) End Function ・もう一つの例は,カナダのタイガ地帯におけるオ 「生物圏の科学」(斎藤員郎,共立出版)では上記微 分方程式の現実の例として次の二つをあげている. メガタヌマミズケムシ,被食者としてゾウリムシ を使って実験し,正確ではないが,ほぼこの計算 に似た固体数の増減の結果を得ている. オヤマネコ(捕食者)とユキウサギ(被食者)の個体 数の関係性であり,同じく,同微分方程式の解に 近い増減を示している(増減の周期は約 10 年). シミュレーションの考察 サンプルプログラムの例では,約 7 年ごとの周期 で大量発生を繰り返していることがわかる. 補足 ボルテラとほぼ同時期に,米国のロトカ2もボルテ ラとほぼ同じモデル式に到達している.ただし,厳 密にいうと,ロトカやボルテラが提示した方程式は 先に示したものではなく,次のようなものであった. dx = c1 x (1 − c 2 y − c5 x ) dt dy = c 3 y (c 4 x − 1) dt ここで x は餌の量, y は魚の量, c1 , c 2 , c 3 , c 4 , c5 は 定数.つまり,餌の量の変化を表す第 1 式の右辺() 内に「 − c5 x 」が加わったものであった.実は,この 2 ロトカ,A.J 項こそがロジスティック成長モデルといわれる所 以であるが,詳細は次の「生態系のカオス」で紹介す る. アメリカの統計学者,物理化学者,数理生物学者.オーストリ アに生まれ,ヨーロッパで教育を受け,アメリカに渡る.化学工 業会社などに勤めながら,1907年より人口成長と化学反応の数 理を同時に研究し始める.11年に近代数理人口学の基礎を与えた 論文を発表したのを皮切りに,疫学や生態学の分野における数理 モデルの研究を次々と行う.ジョンズ・ホプキンズ大学に招かれ た20年には,減衰しないでいつまでも振動が続く化学反応系,あ るいは植物と草食動物とから成る生態学的系の数理モデルを提 出,後者はボルテラ V. Volterra(1860‐1940)の研究と並んでた いへん有名なものとなった.24年には生命保険会社に統計コンサ ルタントとして入り,人口統計などのしごとを行うかたわら,い ろいろな分野の数理モデル研究を続けた.一見かけ離れた分野の ように見えるこうしたいろいろな研究は,主著《物理生物学原 理》(1925)の中で統一的に把握されており,この本は物理生物学・ 数理生物学の古典として有名である.太田 邦昌 (c)1998 Hitac hi Digital Heibonsha, All rights reserved. 参考書 「生態系の微分方程式」 R.ハーバーマン著(現代数学 社) - 47 - 環境シミュレーション 補食-被食者モデル(エクセルシート上でのプログラム例) 先の捕食-被食者モデルのシミュレーションを,VBA プログラムを使わず Excel 関数だけで,かつルンゲ・ クッター法ではなくオイラー法で実施してみた例を下図に示す. B11 =B10+0.01*C10 C11 =$B$4*B11*(1-$B$5*D11) D11 =D10+0.01*E10 E11 =$B$6*D11*($B$7*B11-1) - 48 - 環境シミュレーション 9.生態系のカオス3 を取ったあとハーバード大学では応用数学の研究をして いる.彼は 1971 年に 1 年間をプリンストンの高等学術研 究所で過ごしたが,その間研究はそっちのけで,何となく プリンストン大学の方にふらふらと行っては,生物学者た ちと話などしていた.」 「C言語によるモデリング」横手光洋(ラッセルブックス) より抜粋 ジェイムズ・グリック著,大貫昌子訳の新潮文庫 「カオス――新しい科学をつくる」の中で,ロジステ ィック写像と称される非常に簡単な式を用いて生 物の時間経過による固体数の変化を研究し,1974 年にこの式がある常数の範囲でカオス的振る舞い をすることを発見した R.M.メイに関する,次のよ うな記述がある. 「間もなく一つの固体群が時間の経過につれてどんな振る 舞いを見せるかという,最も単純な生態学的な問題に注目 しはじめた.(中略)プリンストン大学の教授(そして後には この大学の研究部長になったが)として一生を過ごすこと に決めたころには,彼はすでに長い時間をかけ,数学的な 解析と旧式な手動式計算機を使って,『ロジスティック差 分方程式』の一種を研究していた.」 「メイは言わば裏口から生物学者になったような人物であ る.オーストラリアのシドニーで優秀な弁護士の息子とし て生まれたメイは,はじめ理論物理学を専攻したが,学位 3 そしてメイは,はじめは規則性を示していた挙動 が,ある値以上でカオス状態になることを発見した のである. 同書は,さらに,このような固体数のカオス的変 化に関して,次のような実例をあげている. カオス(chaos) CD-ROM 版世界大百科事典より 数学的現象の名称.人口や生物の個体数の時間的変化を記述する 数学のモデルの歴史を考えてみよう.T.R.マルサスの法則(1780) は u(t ) を時刻 t での個体数として,微分方程式 du / dt = Au で記 し,この解として u は t の指数関数 exp(At)となる.A は正のと き増殖率と呼ばれ,時間がたてば人口または個体数は無限に増え つづける.つぎに出たモデルはベルハルスト P.F.Verhulst が 1838 年に,アメリカの人口増加のモデルとして提案したもので, ε , h を正の定数とすれば du / dt = (ε − hu) u と書かれる.この モデルについては,正の初期値 u(0)から出発した解は,時間 t が 無限にふえたときに一定値 ε / h に近づく S 字形の曲線となる. これは人口の飽和を記述している.メイ(R.M.May)は 1973 年, ある種の昆虫の個体数の変化を記述するつぎのモデルの解はき わめて複雑な挙動をすることを数値実験で観察した.そのモデル は x n を n 世代目の個体数としたとき,x n +1 = ax n (1 − x n ) と書き あらわされる.a の値は 0 から 4 まで変えうる定数とする.各 a について, x n を 0 と 1 の間の初期値 x 0 から出発し,この式によ って次々と x n を計算してゆくと,x n は常に 0 と 1 の間にあるが, n を無限に大にしてゆくときの x n の様子は a の値によってきわ この他,カオスの実例としては,米の気象学者ロ ーレンツが発見した気象方程式が示すカオス現象, パイコネ変換による数学的カオス等があるが,ここ では上記のメイが発見したロジスティック写像と 呼ばれる非常に簡単な式が示すカオス現象につい て,シミュレーションしてみる. モデリング ロジスティック写像の考え方を簡単に説明する. 先ず第 n 期の固体数を Yn ,固体数の増加率を a とす めて変化する. 0 < a ≤ 1 のとき, x n は 0 に近づく. 1 < a ≤ 2 で は xn は 1 − 1 / a に 単 調 増 加 で 近 づ く . 2 < a ≤ 3 で は xn は ると下式が成立する. 1 − 1 / a に減衰振動をしながら近づく.さらに 3 < a ≤ 1 + 6 で は 2 周期の振動になる.1 + 6 < a ≤ p1 では 4 周期,p1 < a ≤ p 2 [ 「生態学者や伝染病学者たちは,昔の学者があんまりめち ゃくちゃで箸にも棒にもかからないとうち捨てていたよ うな古いデータを掘り出しはじめた.すると決定論的カオ スの例は,方々に見つかったのである.それはニューヨー ク市の麻疹流行の記録にも,ハドソン湾会社のわな猟師の 書きとめた二百年間にわたるカナダの大山猫の固体群の 変動記録にも現れていた」 ] では 8 周期と周期倍加をくりかえすが, p n −1 , p n という区間は Yn +1 = aYn どんどん小となり p n → 3567 . ⋅⋅⋅ に漸近する.さらに 4 に等しい かまたは 4 の近くでは様子は完全にかわり,初期値 x 0 のきわめ 上式では増加率 a を一定値としているが,実際は 固体数が増えてくると増加率 a は小さくなると考え ると,a は次のように書き換えられる. て小さなずれが n → ∞ としたときの x n の行動に大きな影響を 与える.a = 4 では,x n が 1/2 より小ならば A とおき,x n > 1 / 2 ならば B とおくと,二つのシンボル A,B をつかった無限列が得 られるが,初期値を適当に動かすことにより,確率でいうベルヌ ーイの試行,つまり銅貨投げで表ならば A,裏ならば B として 得られる無限回の試行とまったく同じものが得られる.数学者リ ー(T.Y.Li)とヨーク(J.A.Yorke)は 1975 年,一般的な一次元区間 力学系について,上の繰返し代入 x n +1 = f ( x n ) (ここで f は連続) a → a (1 − bYn ) を考えるなら,もし数列 x n が 3 周期をもてば,初期値をかえる これを最初の式に代入すると, ことによりどのような周期解ももちうること,および非可算の初 期値に対し漸近的にも周期的でない解をもつことを証明し,この ような数列のつくり方をカオスとよんだ.カオスはランダムを含 むより広い概念である.このように,一つの差分方程式(例えば メイの式)に含まれる一つのパラメーターを変化させることで, きわめて決定論的な運動の法則から,ランダムに見える運動の法 則まで記述できることは数学の内容として重要である.山口 昌 哉 Yn +1 = aYn (1 − bYn ) ここで X n = bYn とおくと, - 49 - 環境シミュレーション 世代の推移に対する固体数を計算するようになっ ている.計算された固体数がシートの B2:B102 に 打ち出され,その結果をうけてグラフが書き直され る. X n +1 = aX n (1 − X n ) が得られる.この式は,別名 X n から X n+1 へのロジ サンプルの VBA プログラムを以下に示す. スティック写像と呼ばれる.ロジスティック写像の 特徴は, X n +1 = aX n − aX n2 のように X n+1 が X n に比 プログラムの詳細 例する項から X n の 2 乗に比例する項を引いた形で 定義されている点にある.すなわち X n が小さなう ちは, X n+1 は増加するが, X n がある程度以上大き Option Explicit くなると逆に,X n+1 は減少しはじめると考えられて Const Row_bgn As Integer = 2 '計算結果の打ち出し開始行数を設定している. いる. Sub Logistic() 'Sub プロシージャの名称が”Logistic”である. サンプルプログラム Dim i As Integer Dim t, x, a As Double Dim x_pos As Integer Const del_t As Double = 1 Const t_end As Double = 100 '経過世代を t,For...Next ステートメント用のカウンターi,種 'の固体数 x,比例係数 a,計算結果の出力セルの行番号 x_pos(文 '字列),計算ステップ:1 世代ごと,計算の終了:100 世代. ではロジスティック写像をシミュレーションす るために作成したサンプルプログラムを見てみよ う.下図がプログラムの外観である. Sheets("Sheet1").Select '"Sheet1"という名のシートをアクティブにする. UserForm1.TextBox1 = 1 UserForm1.TextBox2 = 0.2 'パラメータを設定するユーザフォームにデフォールト値を '入れている. UserForm1.Show '「UserForm1」に定義されたユーザフォームを画面に表示せよ. a = UserForm1.TextBox1 x = UserForm1.TextBox2 'ダイアログボックスに打ち込まれた数値をプログラム内のパラ 'メータとして取り込む. このプログラムは,グラフ右上の「スタート」と書か れたコマンドボタンをクリックすると,シミュレー ションが開始するようになっている.「スタート」ボ タンを押すと先ず下のようなダイアログボックス が現れる. Cells(2, 2) = x 'B2 に x の初期値を打ち出す. Range("B3:B102").ClearContents 'B3:B102 の範囲のセルデータをクリアする If MsgBox(Prompt:="Ready?", Buttons:=vbOKCancel) _ <> vbOK Then Exit Sub 'MsgBox(メッセージボックス)関数を続く()の条件で画面表示し, 'もし(If)それに対する回答が O.K.ボタン(vbOK)以外(<>)なら '(Then),Sub プロシージャを終了せよ(Exit Sub)との命令文で 'ある. t=0 'シミュレーション・クロックを 0 に初期化する. For i = 1 To t_end / del_t Step del_t '計算結果を del_t の時間(世代)間隔でシートに打ち出すことを 't_end/del_t 回繰り返せ. x = a * x * (1 - x) 'ロジスティック写像式 ここでは,ロジスティック写像の比例係数 a と第 0 期における種の固体数 X (0) を設定する.なおその 他のシミュレーション条件は次のとおりである:タ イムステップ Δt = 1 (厳密に言えば,これはタイムス テップではなく世代数である), シミュレーション の終了時間 100(100 世代までシミュレーションす るとの意味). Cells(i + Row_bgn, 2) = x 'x の値を打ち出している. ActiveSheet.Calculate 'アクティブなシートを再計算せよ. ダイアログボックスで条件を設定すると,このプ ログラムは,与えられたロジスティック写像式から - 50 - 環境シミュレーション Next i 上記の理論解から求めた曲線である.このような S 字型の曲線をロジスティック成長曲線と呼んでお り,培養器の酵母の成長やゾウリムシの成長につい ての室内実験結果と定量的によく一致することが 知られている. MsgBox ("シミュレーション終了") End Sub シミュレーションの考察 出来上がったシミュレーションプログラムを使 用して,第 0 期における種の固体数 X (0) を 0.2 と固 定し,比例係数 a を 1.0,2.0,3.9 と変えてみた結 果が下図である. 脚注「カオス(CD-ROM 版世界大百科事典)」に記 されているように,このロジスティック写像は, a の値が 3.567 を超えるとカオス的振る舞いを示しは じめる.また, a の値がそれ以下では,規則的振動 あるいは一定値に集束しようとする挙動を見せる. 以上,ロジスティック写像の式を用いて簡単なシ ミュレーションを実施して見せたわけであるが,カ オス現象は従来のニュートン・ラプラス的世界観に 変革を迫るものであり,今後どのような方向に発展 していくのか非常に興味深いものがある. 10 年前に同じような感じで一世を風靡したカタ ストロフィー理論というものがあった.このときの 解説書を今でも持っているが,この本でもカタスト ロフィー理論の将来の応用は前途洋々となってい る.しかし,寡聞にしてこの本の内容がすでに実現 したとは聞いていない. 補足 ロジスティック写像は一般には,下式のように表 記され,ロジスティック方程式と呼ばれている. dX = X (a − bX ) dt 上式は変数分離法で解くことができ,その解は X= a /b ⎛ a − bX (0) ⎞ − at 1+ ⎜ ⎟e ⎝ bX (0) ⎠ である.次の図は,a = 1, b = 1, X (0) = 01 . とおいて, - 51 - ロジスティック方程式は,連続した時間を想定し た成長モデルであったが,これを離散的(世代ごと) に考え,その成長速度に固体数が遅延して影響する と考えたものがロジスティック写像である. 参考書 「生態系の微分方程式」 R.ハーバーマン著(現代数学 社)
© Copyright 2024 Paperzz