제가 다루고있는 문제 (표시된 예제는 매우 단순합니다)는 일반적인 문제인 것 같지만 아직 해결책을 찾지 못했습니다. 나는 다음과 같이 정의되는 세 가지 다른 반응, 즉 v1, v2 및 v3을 가진다 :Python : odeint를 사용하여 임계 값 모델 구현
v1 : R < -> A + C; v1 = k1 * (R-A * C/5000)
v2 : R< → B + C; v2 = k2 * (R-B * C/5000)
v3 : A + B → P; v3 = k3 * A * B
자원 R을 사용하면 첫 번째 두 반응은 각각 A와 C와 B와 C를 생성하는 반면 세 번째 반응은 A와 B를 생성물 P (k1, k2, k3는 상수, 여기서는 1로 설정 됨).
세 번째 반응은 C가 특정 임계 값 Cthr (여기서는 Cthr = 25)을 초과하는 경우에만 발생합니다. 그렇지 않으면 v3이 0입니다. 따라서 아이디어는 C가 누적되어 특정 농도에 도달하면, 제품의 생산에 결과 P.
나는 다음과 같은 것을 구현 : 그래서 분명히 한계가 위해에 도달 할 때까지 작동 http://i50.tinypic.com/apdvkj.png
:
def thresholdmodel (yn,tvec,allpara,R):
(A, B, C, P) = yn
k1, k2, k3 = allpara['kv']
Cthr = allpara['Cthresh']
if C <= Cthr:
v3 = 0
else:
v3 = k3*A*B
C = 0 #does not(!) affect the ouput, why?
v1 = k1*(R - A*C/5000.)
v2 = k2*(R - B*C/5000.)
dA = v1 - v3
dB = v2 - v3
dC = v1 + v2
dP = v3
return (dA, dB, dC, dP)
시뮬레이션의 출력은 다음과 같습니다 처음 (v3은 0, P는 생성되지 않음), 이후에 C는 0으로 설정되지 않고 이유를 모르겠습니다.
내가 원하는 것은 다음과 같습니다. C가 임계 값까지 생성되고, 0으로 떨어지고, 다시 생성되고, 0으로 떨어지는 등의 톱니파처럼 보입니다.
P의 시간 코스는 계단처럼 보일 것입니다 (Cthr를 초과 할 때만 생성됨).
누구나 내가 C를 다시 0으로 설정하고 예상되는 출력을 얻으려면 어떻게해야하는지 알고 있습니까? 고마워요!
좋아, 고마워요! 글쎄, 그게 내가 가지고있는 문제를 설명하기위한 장난감 예일 뿐이다. 정확히 당신이 이해하지 못하는 것은 무엇입니까? 적용되는 단순한 매스 작업 동역학이 있으며 특별한 것은 없습니다. 문제를 명확히 설명해 주셔서 감사합니다. 가능한 해결 방법을 알고 있습니까? – Cleb
나는 무엇을 <-> 및 -> 의미 모르겠다. 그리고 C가 0에서 C = 0으로 코드에서 떨어질 수 있다면, v3는 거의 0이 될 것이고 C == 0 일 때 k3 * A * B 일 것입니다. – HYRY
답장을 보내 주셔서 다시 한번 감사드립니다! '<->'은 반응이 되돌릴 수 있음을 의미합니다 (양방향). '->'는 되돌릴 수 없습니다 (한 방향 만). 음, 거의 : v3는 임계 값 (Cthr)보다 작은 모든 C에 대해 0입니다. 임계 값에 도달하면 v3는 k3 * A * B가되어 P를 생성 할 수 있습니다. 그 후에 C는 다시 0으로 설정되고, 따라서 v3은 0이되고, 다음에 임계 값에 도달 할 때까지 C가 다시 빌드됩니다. 그러나 C는 지역 변수 일 뿐이므로 전체 출력에서 C를 0으로 설정하는 것은 어렵습니다. 이 문제를 해결하려면 어떤 제안이 필요합니까? – Cleb