Matlab ode45. Как изменить параметр внутри него при вызове? - PullRequest
6 голосов
/ 07 октября 2011

Я новичок в Matlab. Я надеюсь, что вы можете мне помочь. Я должен решить систему ODE, используя функцию ODE45. Вот функция, которая описывает мои уравнения.

function dNdt = rateEquations(t, y)
  %populations of corresponding state
  Ng = y(1);
  Ns = y(2);
  Nt =  y(3);

  %All constants used are dropped for the sake of easy reading.

Обратите внимание на параметр F.

  %rate equations
  dNs = s0 * Ng * F - Ns/ t_S1;
  dNt = Ns / t_ISC - Nt / t_T1;
  dNg = -dNt - dNs;

  dNdt = [dNg; dNs; dNt];

end

Затем в моем скрипте .m-файл я вызываю функцию ode45 в 'for loop'. Во время каждой итерации я должен изменить параметр F и передать его в мою функцию 'rateEquations'. Но я не знаю, как это реализовать.

for T = Tmin: dt : Tmax
  %initial conditions
  initialConditions = [N0 0 0];
  timeSpan = [T T+dt];

перед вызовом ODE45 F необходимо изменить.

  [t,N] = ode45('rateEquations', timeSpan, initialConditions)

и так далее ...

end

Заранее спасибо.

1 Ответ

7 голосов
/ 07 октября 2011

Вы хотите сделать F аргументом вашей производной функции и передать правильную анонимную функцию в ode45:

[t,N] = ode45(@(t,y) rateEquations(t,y,F), timeSpan, initialConditions)
...