1

SIR モデルを使用してインフルエンザの流行をモデル化しようとしています: http://en.wikipedia.org/wiki/Epidemic_model#The_SIR_Model

基本的に、3 つの微分方程式を同時に解く必要があります。

私の仕事は、グラフを一連のデータに適合させることであり、これをどのように行うべきか疑問に思っていました。

次のように ODE を解決するためのシステムをセットアップすることができました。

function dydt = sir_ode(t,y,p)
B = p(1);
r = p(2);
S = y(1);
I = y(2);
R = y(3);
dydt = [-B*I*S; B*I*S - r*I; r*I];

そしてそれを呼び出すmファイル:

time = 1:24;
y0 = [400 1 0];
tspan = time;
p0 = [.01 .5];
[t,y] = ode45(@sir_ode,tspan,y0,[],p0);

tspan があり、S、I、R の y0 行列があります。この関数では、出力に 3 つの微分方程式が含まれているため、ode45 関数と一緒に解くことができます。

あとは、適切な p0 行列を見つけて、曲線をデータに適合させるだけです。

第一に、誰かが私の解法に欠陥を見つけることができますか?第二に、最適な p0 行列を見つける方法について誰が提案してくれますか?

ありがとう!!

4

1 に答える 1

2

解決方法は私には正しいようです。

質問の 2 番目の部分では、すべての最適化問題には、最大化または最小化する関数があります (さまざまなアルゴリズムを使用して、後で詳しく説明します)。ここで、エラー関数を最小化できます。エラー関数の可能な設計の 1 つは、関数間の L2 距離です (または、この場合は、元のデータ曲線と各タイムステップでモデルによって与えられた曲線の間の点の二乗距離の合計です)。既に持っているコードを考えると、これはかなり単純なはずです。

これで、引数が p0 で、出力がエラーである関数ができました。最小値は明らかに 0 であり、関数は決定論的です。私の推測では、それはかなりスムーズなはずですが、その証拠はありません。それを最小化するために、多くの方法があります (最も単純なものは勾配降下法とニュートン法です)。しかし、Matlabのfminsearch関数はうまくいくはずです。いくつかの極小値が見つかる可能性があるため、必ずいくつかの開始点をテストしてください。

于 2013-05-23T08:19:34.463 に答える