0

是否可以使用 ODE 求解器,例如 ode45,并且仍然能够“更改”被调用函数中参数的值?

例如,如果我要使用以下功能:

function y = thisode(t, Ic)
% example derivative function

% parameters
a = .05;
b = .005;
c = .0005;
d = .00005;

% state variables
R = Ic(1);
T = Ic(2);

y = [(R*a)-(T/b)+d; (d*R)-(c*T)];

使用此脚本:

clear all
% Initial conditions
It = [0.06 0.010];
% time steps
time = 0:.5:10;
% ODE solver
[t,Ic1] = ode45(@thisode, time, It);

一切都如我所料。但是,我想要一种方法来轻松更改参数值,但仍然只使用一个函数和一个脚本运行 ODE 求解器的多次迭代。但是,我似乎无法向 ODE 求解器添加更多项,例如:

function y = thisode(t, Ic, P)

% parameters
a = P(1);
b = P(2);
c = P(3);
d = P(4);

% state variables
R = Ic(1);
T = Ic(2);

y = [(R*a)-(T/b)+d; (d*R)-(c*T)];

使用此脚本:

clear all
% Initial conditions
It = [0.06 0.010];
P1 = [.05 .005 .0005 .00005]
% time steps
time = 0:.5:10;
% ODE solver
[t,Ic1] = ode45(@thisode, time, It, [], P1);

不起作用。我想我知道这不应该起作用,但我一直无法想出解决方案。我也在考虑在函数中使用 if 语句,然后硬编码几组要使用的参数(例如,当 P == 1 时使用 set 1,当 P == 2 时使用 set 2 等),但这也不起作用我不知道在哪里调用要与 ODE 一起使用的集合。任何关于如何在 ODE 求解器中使用一个函数和一个脚本同时能够更改参数值的提示或建议将不胜感激。

谢谢你,迈克

4

1 回答 1

1

您必须以不同的方式调用该函数:

[t,Ic1] = ode45(@(t,y) thisode(t,y,P1), time, It);

该函数ode45假定所有传递给它的函数只接受 at和 a y。上面的调用是让 Matlab 通过的标准技巧P1而在每次调用时ode45都会通过它。ty

于 2012-10-16T04:19:57.367 回答