我有一個由一個函數描述的方程組。用於ODE系統的Python編碼
- 產品從反應物
- 部分產品打破
- 的細分產品的某一百分比被回收到初始反應物
- 系統繼續提供更多的產品週期正在進行,直到所有的構建極限反應物在非循環產品內或不可用的「損失產品」內
鑑於產品組成上沒有變化。我需要進入系統的反應物1的量與進入系統的反應物2的量成正比。因此,當全部反應物1被消耗時,不再消耗反應物2。
目前反應物消耗的比例在沒有反應物再循環時是恆定的,但是當反應物在react1=-R1 - R5
和react2=-R2 - R6
的循環中循環時,所用反應物的比例改變。
第二個問題是,在循環產品2期間,丟失的產品不會持續增加。相反,他們似乎與產品1和回收產品分別保持固定比例。
我認爲這兩個問題都是由於我試圖回收系統內的反應物而引起的。任何幫助,將不勝感激。
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import math
import pylab as p
def sample_func (y,t):
k1 = 10**-4
k2 = k1/4
k3 = 0.1
Recycle0=0.8
Recycle2=0.7
R1= -k1*y[0]*y[2] # Rate of substance 1 consumption
R2= -k2*y[0]*y[2] # Rate of substance 2 consumption
#These must be constantly proportional to one another
R3= 0.2*R1+0.7*R2 #Product 1
R4= 0.8*R1+0.3*R2 #Product 2
R5=R3*Recycle0 #Recycled substance 1 of product 1
R6=R3*Recycle2 #Recycled substance 2 of product 1
R7=R3*(1-Recycle0)
R8=R3*(1-Recycle2)
used1 = R1
react1= -R1 - R5
used2 = R2
react2= -R2 - R6
prod1= -R3
prod2= -R4
recycledr1 =-R5
recycledr2 =-R6
lost1 =-R7
lost2 =-R8
return [used1, react1, used2,react2,prod1,prod2, recycledr1,recycledr2,lost1,lost2]
y0=(3,11,3,12,0.01,0.01,0.01,0.01,0.01,0.01)
tspan=np.arange(0,15000,1)
Conc= odeint(sample_func,y0,tspan)
react1 = Conc[:,0]
used1 = Conc[:,1]
react2 = Conc[:,2]
used2 = Conc[:,3]
prod1 = Conc[:,4]
prod2 = Conc[:,5]
recycledr1 = Conc[:,6]
recycledr2 = Conc[:,7]
print("Consumed R1 & R2 RATIOS AT DIFFERENT TIME POINTS")
print((Conc[1:2,1]-Conc[0:1,1])/(Conc[1:2,3]-Conc[0:1,3]), " 1 HOURS")
print((Conc[50:51,1]-Conc[0:1,1])/(Conc[50:51,3]-Conc[0:1,3]), "50 HOURS")
print((Conc[1000:1001,1]-Conc[0:1,1])/(Conc[1000:1001,3]-Conc[0:1,3]), "1000 HOURS")
plt.plot(tspan,react1,label='react1')
plt.plot(tspan,used1,label='used1')
plt.plot(tspan,react2,label='react2')
plt.plot(tspan,used2,label='used2')
plt.plot(tspan,prod1,label='product1')
plt.plot(tspan,prod2,label='product2')
plt.plot(tspan,recycledr1,label='recycled react 1')
plt.plot(tspan,recycledr2,label='recycled react 2')
plt.xlabel("time (hours)")
plt.ylabel("quantity")
plt.title("production v time")
plt.legend()
p.show()
問候。
歡迎設置您的大規模行動頌歌堆棧溢出。這裏你真正的問題是什麼? – MrLeeh
感謝您的歡迎。我想知道爲什麼當我試圖回收反應物時,會影響它們被利用的比例。 – Uaru427
另外我想知道爲什麼產品2,迷失1和迷失2不會隨着時間積累。我希望系統耗盡反應物,使整個數量陷入這三組中。 – Uaru427