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

How to change parameters in a function when using ode45 in MATLAB

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

谢谢

您可以使用以下方法:将 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 循环中。