Могу ли я иметь два значения для константы в функции NDSolve, которые зависят от выхода функции NDSolve? - PullRequest
2 голосов
/ 03 мая 2011

У меня есть система 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]
}

Теперь я могу легко решить их, используя функцию NDSolve, когда q и g являются постоянными значениями.Однако я хочу изменить значение q так, чтобы оно имело одно значение, когда B[x] ниже определенного порогового значения, но затем изменяется в значении, когда B[x] поднимается выше этого порогового значения.

Я пытался использовать If операторы и Piecewise функции вне NDSolve, но мне не удалось заставить его работать.

1 Ответ

1 голос
/ 03 мая 2011

Это может сделать что-то вроде того, что вы хотите. Я пропустил третье уравнение, которое кажется излишним.

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}]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...