【问题标题】:Matlab ode45. How to change a parameter inside it while calling it?Matlab ode45。如何在调用时更改其中的参数?
【发布时间】:2011-12-02 13:45:50
【问题描述】:

我是 Matlab 的新手。我希望你能帮助我。 我必须使用 ODE45 函数解决 ODE 系统。这是描述我的方程式的函数。

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 文件中,我在“for 循环”中调用 ode45 函数。在每次迭代期间,我必须更改参数 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

提前致谢。

【问题讨论】:

    标签: function matlab handle solver ode


    【解决方案1】:

    您希望将F 作为派生函数的参数并将正确的匿名函数传递给ode45

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

    【讨论】:

    • 是的,它有效。非常感谢。这就是我一直在寻找的。 :)
    • 您也可以使用全局变量来执行此操作。但是我试图使用并行计算(parfor)并且不喜欢全局变量。但这确实适用于 parfor。
    • @Nzbuu,如果我这样做,我需要使用插值吗?
    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2020-02-14
    • 1970-01-01
    相关资源
    最近更新 更多