Можно ли использовать решатель 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 внутри функции, а затем жестко закодировал несколько наборов параметров, которые будут использоваться (например, использовать набор 1, когда P == 1, установить 2, когда P == 2, и т.д.), но это также не сработало как Я не знаю, где назвать набор для использования с ODE. Мы будем очень благодарны за любые советы или предложения о том, как использовать одну функцию и один скрипт с решателем ODE, при этом имея возможность изменять значения параметров.
Спасибо, Майк