我可以在NDSolve函数中为常量提供两个值,这些值取决于NDSolve函数的输出吗?

时间:2011-05-03 15:03:47

标签: wolfram-mathematica

我有一个ODE系统。其中一个ODE有一个常量参数,我想根据其中一个ODE解决方案在两个不同的值之间进行更改。

例如,假设我有以下等式:

{
  A'[x] == -q A[x]B[x],
  B'[x] ==  q A[x]B[x] - g B[x],
  C'[x] ==  g B[x]
}

现在,当qg为常量值时,我可以使用NDSolve函数轻松解决这些问题。我想要做的是改变q的值,以便当B[x]低于某个阈值时它有一个值,但是当B[x]超过此阈值时它会改变值。

我尝试在If之外使用Piecewise语句和NDSolve函数,但我还没有设法让它正常运行。

1 个答案:

答案 0 :(得分:1)

这可能会像您想要的那样。我遗漏了第三个等式,这似乎是多余的。

Clear[f, g, s, t, x];
s[a_, b_] = Piecewise[{{a*b - b, b < 1}, {2 a*b - b, b >= 1}}];
t[a_, b_] = Piecewise[{{-a*b, b < 1}, {-2 a*b, b >= 1}}]; 
{f[x_], g[x_]} = {f[x], g[x]} /. 
  First[NDSolve[{
    f'[x] == t[f[x], g[x]],
    g'[x] == s[f[x], g[x]],
    f[0] == 10, g[0] == 1},
  {f[x], g[x]}, {x, 0, 2}]]