2012-02-04 16 views
3

MatLabを使ってLotka-Volterra方程式を解くのに役立つ人がいるかどうかは疑問でした。私のコードは動作していないようです。私は、次の操作を行います。MatlabのLotka-Volterra微分方程式の解法

ステップ1 -

私は、次のコードを含むファイルと題しpred_prey_odes.mを作成

:私は、ファイルを保存し、それを前に、現在のディレクトリにあったことを確認した

% the purpose of this program is to model a predator prey relationship 
% I will be using the Lotka-Volterra equations 

% Program consists of the following differential equations: 
% dY1/dt = a * Y1 - c * Y1 * Y2 
% dY2/dt = b * Y2 - d * Y1 * Y2 

function dy = pred_prey_odes(t, y) 
% function that is to be integrated 

%select constants 
a = 1; 
b = 2; 
c = 3; 
d = 4; 

%set up differential equations 
dy = zeros(2,1); 
dy(1) = a * y(1) - c * y(1) * y(2); 
dy(2) = b * y(2) - d * y(1) * y(2); 

コマンドウィンドウに次のコードを入力します。

clc 
tspan = [0, 20]; 
y0 = [10; 10]; 
ode = @(t, y) pred_prey_odes(t, y); 
[t, y] = ode45(ode, tspan, y0); 
plot (t,y) 

ただし、プロットは表示されません。実際には、何もmatlabで起こると私はコマンドウィンドウをクリアすることはできません。私がclcと打つと何も起こりません...

助けていただければ幸いです!

ありがとうございます!

-Sneha Inguva

+0

コマンドプロンプトが表示されません。アルゴリズムがまだ実行中である可能性があります。操作を終了するにはCtrl + Cを押してください。その場合、実装に何か問題があるか、またはode45が解決するのに非常に時間がかかる – Fuzz

答えて

4

コードは問題ありません。このパラメータの選択では、捕食者は単に死ぬだけで、獲物は指数関数的に増加する。 predator変数の値は小さいので、ode45はそれを正しく解決するためには非常に小さな手順をとる必要があると考えています。たとえば、tspan = [0,10]でコードを実行し、タイムステップ数を227485に設定しました。

パラメータを変更する方が良いかもしれませんが、本当に気になるパラメータであれば、それは安定性の性質のために大きな時間ステップを取ることができるべきであるode23を使用してください。しかしそれも遅いかもしれません。基本的には、問題は、MATLABが、小さなもので基本的に無意味な述語変数に基づいて相対誤差を制御しようとしていることです。適応型の時間ステップを持たない独自のRK4メソッドをロールした場合、おそらくうまくいくでしょう。

EDIT 2番目の式に符号エラーがあります。固定すると、捕食者の代わりに振動が消滅するはずです。

+0

Ooh!ありがとうございました。パラメータを変更して何が起こるかを見てみましょう。 – snehoozle

+0

こんにちは...もう少し提案をお願いしますか?私はode23を使って試してみましたが、パラメータはついていましたが、シガーはありませんでした。パラメータや開始集団についていくつか提案していただけますか? – snehoozle

+1

申し訳ありませんが、ファイルに2番目の式の記号が間違っています。ファイルには次のものが必要です。 dy = 0(2,1); dy(1)= a * y(1)-c * y(1)* y(2); dy(2)= -b * y(2)+ d * y(1)* y(2); –