descartes-src (ソースパッケージ descartes-src-0.26.0.tar.gz) | 2012-09-09 20:57 |
descartes-win (Windows用バイナリパッケージ descartes-win-0.26.0.zip) | 2012-09-09 20:52 |
会話キャラクター: ツンデレ アプリケーション (会話キャラ:ツンデレ v1.0 for Windows) | 2010-04-29 13:41 |
会話キャラクター: 2人の女の子 ダブルキャラクター (会話キャラクター 2人の女の子 ダブルキャラクター 1.0 for Windows) | 2011-10-02 22:23 |
会話キャラクター: Eliza風英語版 (会話キャラ:Eliza風英語版 v1.0 for Windows) | 2010-05-11 01:06 |
会話キャラクター: 猫耳メイド アプリケーション (会話キャラ:猫耳メイド v1.0 for Windows) | 2010-04-27 21:15 |
会話キャラクター: イライザ風日本語版 (会話キャラ:イライザ風日本語版 v1.0 for Windows) | 2010-04-30 21:53 |
経済指標表示プログラム for Windows (経済指標表示プログラム V1.0) | 2011-08-18 22:04 |
ニュースヘッドライン表示プログラム (ニュースヘッドライン表示プログラム V1.0 for Windows) | 2011-08-16 12:31 |
デカルト言語 example (デカルト言語の例題 example-0.7.0.zip) | 2009-03-01 19:47 |
電力状況表示プログラム for Windows (2011年夏版 全国電力供給状況表示プログラム V1.0) | 2011-08-15 13:25 |
バルカン半島とイタリア半島に挟まれたアドリア海は水産資源に恵まれた漁業の盛んな海でした。 しかし、第一次世界大戦が始まると,漁民が兵士として出征してしまい、その海域での漁業は行われなくなります。
そして、数年後に第一次世界大戦が終わると漁民達も戻り、漁業が再開されました。
漁民達は何年も魚は獲っていなかったのだから、さぞや魚が増えているだろうと期待して海にでましたが、 不思議なことに漁獲量は以前より減っていたのです。
なぜ、漁業が中止になっていたのにもかかわらず、漁獲量が却って減ってしまったのだろうか?
しかも、なぜか漁の対象の魚は減っているのに、魚の捕食者のサメの割合は増えていたのです。
イタリア人の生態学者ダンコナ (D'Ancona) は, アドリア海の漁獲量の統計を取った結果, 当時有名であったイタリア人の数学者ボルテラ (Senator Vito Volterra) にこの謎について 相談しました。
ボルテラは、この現象を捕食者と被食者の関係について数理的に解析します。
被食者が増えるとそれを餌とする捕食者が増え、 捕食者が増えすぎると、被食者が大量に食べられて減ります。
被食者が減ると、捕食者も餌が減るため自然に減少します。
すると、捕食者が少ないうちに被食者が増え...
このように、被食者の魚の個体数と、それを食べるサメなどの捕食者の個体数は相互に依存し、 自然状態で周期的に変動することがわかりました。
ボルテラは、それらを解析することにより、被食者と捕食者の個体数が、自然状態で周期的に変動するという Lotka-Volterra方程式を導き、1926年に発表しました。 アメリカの統計学者 ロトカ (Alfred J. Lotka)は、独立して独自に同様の方程式を考案した功績により、 ボルテラと共に方程式の名前に冠されています。
ここでは以下のLotka-Volterraの連立常微分方程式を使います。
dx -- = x * (α - β * y) dt dy -- = - y * (γ - δ * x) dt
xは、被食者の個体数です。
yは、捕食者の個体数です。
tは、時間です。
α、β、γ、δはパラメタです。
αは、被食者の増加に、βは捕食者による被食者の減少に関連します。
γは、捕食者の減少に、δは被食者の増加による捕食者の増加に関連します。
非線形な微分方程式ですが、デカルト言語で数値計算すれば解を求めることができます。
以下にLotka-Volterra方程式を数値計算するソースを示します。
/* Lotka-voterra O.D.E */ ? ::sys <PrintResultOff> <letf #α = 2> <letf #β = 0.002> <letf #γ = 1> <letf #δ = 0.001> <letf #xi 1000> <letf #yi 3000> <setVar var_x #xi> <setVar var_y #yi> <letf #w 0.001> <letf #interval 100> <print "t,shark,fish" > ::sys <ODE (#t 0 25 #w) <var_x #x> <var_y #y> <letf #dx = #x * (#α - #β * #y)> <letf #dy = -#y * (#γ - #δ * #x)> ::sys <integral #x2 #dx #xi> ::sys <integral #y2 #dy #yi> ::sys <ODEprint #interval #t "," #y2 "," #x2 > <setVar var_x #x2> <setVar var_y #y2> > ;
パラメタは、 α = 2, β = 0.002, γ = 1, δ = 0.001 に設定しています。
x が、サメ(shark)の個体数であり、初期値は1000匹にします。
y が、魚(fish)の個体数であり、初期値は3000匹にします。
今回の計算では、定期的に振動するような結果になるため、計算誤差を防ぐ目的で、0 から 25 までの範囲を0.001 刻みで細かく計算しています。 しかし、計算結果をグラフにする場合には、そのような細かな計算の大量の結果は不要なため、ODEprint述語を使い 100(#intervalに設定)ごとに 結果を出力することによって、計算結果を1/100に減らしています。
ソースを"Lotka-Volterra.dec"という名前で保存して実行します。
$ descartes Lotka-Volterra.dec >Lotka-Volterra.csvLotka-Volterra.csv を、Excelで読み込んでグラフにしました。
サメ(shark)が減少すると、魚(fish)が急激に増えていきます。 すると、サメが豊富な魚を食べて、急激に増えていき 魚は逆に急激に減少します。
このような増減をサメと魚で周期的に繰り返すことがグラフから読み取れます。
上のグラフで5年のところでは豊漁であったのに、次の年には極端な不漁になって 漁民は1年で何故こうも漁獲量が変化するかに悩むことになるのでしょう。
[PageInfo]
LastUpdate: 2012-08-30 22:21:13, ModifiedBy: hniwa
[License]
Creative Commons 2.1 Attribution
[Permissions]
view:all, edit:login users, delete/config:login users