我試圖解決我的論文在化學微分方程,有我絆了關於SciPy的的微分方程求解「odeint」的問題。SciPy的:實施微分方程的兩種方法:兩種不同的解決方案:回答
首先我由函數CIDNP_1實現差分(CIDNP是一個化學現象,這解釋了不尋常的變量)根據SciPy的網站上的例子。但是,即使正確的方向,解決方案也是如此。
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate
R0 = 5e+5
kt = 5e5/R0
beta = 3/R0
def CIDNP_1(y, t):
dP_dt, dQ_dt = y
def R(t):
return R0/(1 + kt*R0*t)
dP_dt = -kt*dP_dt*R(t) - kt*beta*(R(t))**2
dQ_dt = +kt*dP_dt*R(t) + kt*beta*(R(t))**2
return [dP_dt, dQ_dt]
def CIDNP_2(y, t):
dP_dt, dQ_dt = y
def R(t):
return R0/(1 + kt*R0*t)
return [-kt*dP_dt*R(t) - kt*beta*(R(t))**2, \
+kt*dP_dt*R(t) + kt*beta*(R(t))**2]
y0 = [-1, +1]
t = np.linspace(1e-9, 100e-6, 1e3)
sol_1 = scipy.integrate.odeint(CIDNP_1, y0, t)
sol_2 = scipy.integrate.odeint(CIDNP_2, y0, t)
然後,我改變了我的解決方案CIDNP_2什麼都給了正確的結果,但在我眼裏沒有在執行無差異的變量dP_dt和dQ_dt不實施CIDNP_1改變。
那麼爲什麼作爲實施CIDNP_1給出錯誤的結果任何人都可以給我一個提示,我會爲那麼至少最後兩個小時內未完全喪失很幸運。
問候,
雅各布
您確認輸入'y'是語義上的時間導數,而不僅僅是國家回答'y = [P,Q]'RESP。 'P,Q = y'?這種重新貼標籤也會避免發生混淆。 – LutzL
Semantivally你是對的。微分方程描述了系統的狀態並且沒有導數。但是,因爲我最初只是想在五分鐘內編碼,所以我沒有太多考慮。在下一個版本中,我會改變它。 – JakobJakobson