【发布时间】:2016-08-09 05:29:51
【问题描述】:
我有一个要求解的 ODE 方程组,但有一个棘手的部分是,当系统达到稳态时,我想更改一个(或多个)参数的值。例如,考虑以下情况:
function dydt = diff(t,x,params)
F = params(1);
G = params(2);
dydt = zeros(2,1);
dydt(1) = F*x(1) - G*x(1)*x(2);
dydt(2) = (F-G)*x(2);
end
例如,我希望我的代码能够在系统达到稳态时,将 F 的值更改为 10,将 G 的值更改为 2。我正在考虑使用例如
来检测 dydt(1) 和 dydt(2) 的值if norm(dydt)<1
F = 10;
G = 2;
end
如何在 Matlab 中对 ODE 表达式执行此操作?如果我将这个 if 条件放在 ODE 表达式之前,则 dydt 的值将始终为零。但是如果我把这个 If 条件放在 ODE 表达式之后,If 条件将无法更正 ODE 表达式。
谢谢!
【问题讨论】:
-
执行此操作的正确方法是使用event location 根据您的稳态条件 (example here) 停止集成。然后更改您的参数并开始新的集成。避免在 ODE 函数中添加
if语句来更改参数。 -
我考虑了事件位置,但这是否意味着我必须停止集成,然后重新开始一个新的集成过程?如果是这样,我是否必须在找到稳态之前将初始值更新为第一个积分步骤的最后一点?
标签: matlab if-statement conditional-statements ode