2011-05-03 1 views
2

나는 ODE 시스템이있다. ODE 중 하나에는 ODE 솔루션 중 하나에 따라 두 개의 서로 다른 값 사이에서 변경하려는 상수 매개 변수가 있습니다.NDSolve 함수의 출력에 종속적 인 NDSolve 함수 내의 상수에 대해 두 개의 값을 가질 수 있습니까?

그래서 예를 들어이 전 다음 식을 가정 해 봅시다 :

{ 
    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 기능을 사용하여 시도했지만 작동하지 못했습니다.

+0

코드가 약간 이상해 보입니다. '= -'와'= +'는 무엇입니까? 어쨌든, StackOverflow에 오신 것을 환영합니다. –

+0

어떤 초기 조건을 사용하고 있습니까? 그들은 솔루션을 테스트하는 데 도움이 될 것입니다. – rcollyer

+0

죄송합니다. 코드 작성을 의미하지 않았습니다. 처음에는 3 개의 방정식이 별도의 줄에 있었지만 게시했을 때 같은 줄에 모두 배치되어 돌아가서 편집했습니다. + 표지판은있을 필요가 없습니다. 마이너스 기호는 A [x]가 그만큼 감소 함을 나타냅니다. – Sperick

답변

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}]]