1

我有一个函数(对于 SIR 模型),然后是一个脚本来解决这个函数并将它与我试图拟合这个模型的数据进行比较。因此,我试图运行一个 for 循环来更改函数中的参数以优化拟合。我想知道如何在 for 循环中更改我的 (r) 和 (a) 参数,而无需手动更改它们:

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])

谢谢

4

1 回答 1

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)epidemic(t,y,r,a) 定义了一个带有参数 (t,y) 的新函数,其中 r 和 a 使用上面定义的值。

然后你可以把所有这些放在一个 for 循环中。

于 2016-03-21T08:21:21.723 回答