我有一个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]
}
现在,当q
和g
为常量值时,我可以使用NDSolve函数轻松解决这些问题。我想要做的是改变q
的值,以便当B[x]
低于某个阈值时它有一个值,但是当B[x]
超过此阈值时它会改变值。
我尝试在If
之外使用Piecewise
语句和NDSolve
函数,但我还没有设法让它正常运行。
答案 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}]]