2016-03-21 26 views
1

私は関数(SIRモデル用)を持っています。そして、この関数を解くスクリプトに、このモデルを適合させようとしているデータと比較します。したがって、フィットを最適化するために関数のパラメータを変更するforループを実行しようとしています。私は手でそれらを変更することなく、ループのために私の(R)及び(a)のパラメータを変更する方法を思ったんだけど:MATLABでode45を使用するときに関数のパラメータを変更する方法

function ydot=epidemic(t,y) 
r=0.000001; 
a=1/3; 
ydot=zeros(3,1); 
ydot(1)=-r*y(1)*y(2); 
ydot(2)=r*y(1)*y(2)-a*y(2); 
ydot(3)=a*y(2); 
end 

[t,y]=ode45('epidemic',[0:222], [70500,1,0]) 

感謝を

+1

[MATLAB:関数にパラメータを渡すにはどうすればいいですか?](http://stackoverflow.com/questions/2256229/matlab-how-do-i-pass-a-parameter-to-a関数)または[this one](http://stackoverflow.com/questions/7680224/matlab-ode45-how-to-change-a-parameter-inside-it-while-calling-it)を参照してください。 [関連ドキュメント](http://www.mathworks.com/help/matlab/ref/ode45.html#bu3uhuk)および[this](http://www.mathworks.com/help/matlab/math)も参照してください。 /parameterizing-functions.html)。 – horchler

答えて

2

あなたに次のものを使用することができます:関数にrとパラメータを追加する

function ydot=epidemic(t,y,r,a) 
    ydot=zeros(3,1); 
    ydot(1)=-r*y(1)*y(2); 
    ydot(2)=r*y(1)*y(2)-a*y(2); 
    ydot(3)=a*y(2); 
end 

この関数を次のようにode45のように渡しますその

r = 0.000001 ; 
a = 1/3 ; 
[t,y]=ode45(@(t,y)epidemic(t,y,r,a),[0:222], [70500,1,0]) 

基本的には、@(T、Y)流行(T、Y、R、A)R、aはちょうど上記で定義された値を使用している引数(T、Y)として新しい機能を定義しました。

次に、すべてをforループに入れることができます。

関連する問題