4

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

4

1 に答える 1

5

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

パラメーターを変更した方が運が良いかもしれません。または、これらが本当にあなたが気にかけているパラメーターである場合は、ode23 を使用できます。これは、安定性の特性により、より大きな時間ステップを取ることができるはずです。ただし、それも遅い場合があります。基本的にあなたの問題は、MATLABが小さくて基本的に無意味なプレデター変数に基づいて相対誤差を制御しようとしていることです。適応時間ステッピングを持たない独自の RK4 メソッドを展開した場合、おそらく問題なく動作します。

編集2 番目の式に符号エラーがあります。捕食者が絶滅する代わりに振動を与えるはずの修正。

于 2012-02-04T02:08:54.223 に答える