Wolfram mathematica NDSolve函数中的常数是否可以有两个值取决于NDSolve函数的输出?

Wolfram mathematica NDSolve函数中的常数是否可以有两个值取决于NDSolve函数的输出?,wolfram-mathematica,Wolfram Mathematica,我有一套颂歌系统。其中一个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]高于该阈值时,它的值会改变 我曾尝试在NDSolve之外使

我有一套颂歌系统。其中一个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]
高于该阈值时,它的值会改变


我曾尝试在
NDSolve
之外使用
If
语句和
分段
函数,但没有成功地使其工作。

这可能会达到您想要的效果。我遗漏了第三个等式,这似乎是多余的

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}]]
Clear[f,g,s,t,x];
s[a_,b_]=分段[{{a*b-b,b<1},{2a*b-b,b>=1}}];
t[a_,b_]=分段[{-a*b,b<1},{-2a*b,b>=1}];
{f[x],g[x]}={f[x],g[x]}/。
首先解决[{
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}]]

那个代码看起来有点奇怪。什么是
=-
=+
?无论如何,欢迎使用StackOverflow。您使用的初始条件是什么?它们将有助于测试解决方案。是的,对不起,这不是代码。起初,我把3个方程式分别放在不同的行上,但当我发布它们时,它们都放在同一行上,所以我回去编辑了它。+符号不需要在那里。减号表示A[x]将减少该数量。我省略了初始条件,但假设:A[0]=100,B[0]=1,C[0]=0I不会对变量名使用大写字母。其中许多是保留字(C、D、E、I、N、O)。