• 締切済み

常微分方程式

今、微分方程式の勉強をしていますが以下の問題が全く分かりません。図書館などで調べても分かりませんでした。 tを時間、xを草食動物、yを肉食動物の個体数としたとき、xおよびyは次の常微分方程式(Lotka-Volterraの方程式)に従う。 dx/dt=a1x-a2xy dy/dt=a2xy-a3y a1=2.0, a2=0.5, a3=1.0として次の問に答えよ。 1)次の2つの初期条件の組に対する解をt=20まで求めよ。      ・t=0の時、x=1, y=10 ・t=0の時、x=10, y=1 2)xおよびyともに振動を起こさない初期条件を探索せよ。 2)は振動を起こさないという意味すら分かりません。 2つのどっちかでもいいので回答お願いします。

みんなの回答

noname#237495
noname#237495
回答No.4

A No.2です.ちょっとまちがってました. y = y + dt * dy が正しいです. それと,A No.3さんのご指摘通りに順番を直してください.私のやり方ではdxとdyの計算に使われるxとyの値が異なってしまいますから.

すると、全ての回答が全文表示されます。
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.3

細かい話ですが、ANo.2さんの >dx = a1 * x - a2 * x * y; >x = x + dt * dx; >dy = a2 * x * y - a3 * y; >y = y + dt * dx; のところは dx = a1 * x - a2 * x * y; dy = a2 * x * y - a3 * y; x = x + dt * dx; y = y + dt * dx; の方が良いかと思います。

すると、全ての回答が全文表示されます。
noname#237495
noname#237495
回答No.2

ラプラス変換を知っていれば,代数方程式に直して求めることもできるかと思いますが,数値計算せよということでしょうか? これを解くなら簡単なオイラー法のCプログラムをお教えします. #include<stdio.h> main() { double x, y, t, dx, dy dt, a1 = 2.0, a2 = 0.5, a3 = 1.0; FILE *fp; /* ファイルポインタ */ /* データ保存用ファイルのオープン */ if((fp=fopen("datafile.dat","wt"))==NULL){ printf("Can't open datafile.dat!!\n"); exit(1); /* ファイルがオープンできなければエラー終了 */ } x = 1; /* xの初期値 */ y = 10; /* yの初期値 */ dt = 0.1; /* 時間の間隔 */ for(t = 0; t <= 20; t+=dt) { fprintf(fp, "%f %f %f\n", t, x, y); dx = a1 * x - a2 * x * y; x = x + dt * dx; dy = a2 * x * y - a3 * y; y = y + dt * dx; } fclose(fp); return 0; } これで動くはずです. これを実行するとdatafile.datというファイルにt,x,yがダーッと表示されます.これをエクセルにでも貼り付けてグラフ化すれば解の挙動がわかります. 時間間隔はあまり大きくしないでください.誤差が増えます. それと,初期値を変えながら計算して解が振動的にならないような初期値を決めなさいってことでしょうから,初期値を変えて何度もやってみてください.データを残したいならファイルオープンのところでdatafile.datを適宜変えてください.

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どこがわからないかわからないときちんとした答はだせない (Lotka-Volterra 方程式がわからないのか, それともそれをプログラムにするところがわからないかによって答え方が違う) のですが, 1) については「プログラムを作って動かそう」ということでおわり. 2) については, Lotka-Volterra 方程式の解の振舞いを理解していれば意味くらいはわかるはずですが, この方程式を解いてやると x, y ともに増減を繰り返す解が得られることがあって, そのことを「振動する」と表現しているんだと思います. 逆に x, y がある一定値に収束するというのが「振動しない」ということであって, じゃあその条件はどうなのかを問うているのでしょう. これはプログラムには無関係ですが.

すると、全ての回答が全文表示されます。

関連するQ&A