在MATLAB中使用ode45时如何更改函数中的参数

时间:2016-03-21 07:20:02

标签: matlab function for-loop ode45

我有一个函数(对于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])

由于

1 个答案:

答案 0 :(得分: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)定义了一个带参数(t,y)的新函数,其中r和a使用的是上面定义的值。

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