首页 文章

更改函数内的参数以与ODE求解器一起使用

提问于
浏览
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时使用集合1,当P == 2时使用集合2,等等)但这也不起作用我不在哪里调用该套件与ODE一起使用 . 关于如何在能够更改参数值的同时使用一个函数和一个脚本与ODE求解器的任何提示或建议将非常感激 .

谢谢你,迈克

1 回答

  • 1

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

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

    函数 ode45 假定传递给它的所有函数只接受 ty . 以上调用是standard trick以使Matlab传递 P1 ,而 ode45 将在每次调用时传递 ty .

相关问题