[英]Solving non-linear coupled differential equations in python
我正在研究包含耦合微分方程的系統。 我的主要目的是解決穩態下的質量平衡並將穩態解作為動態模擬的初始猜測提供。 基本上有三個狀態變量Ss,Xs和Xbh。 速率方程如下所示:
r1 = µH(Ss /(Ks + Ss))(So /(Koh + So))Xbh + Kh((Xs⁄Xbh)/(Xs⁄Xbh + Kx))(So /(Koh + So))Xbh
r2 =(1-fp)bH * Xbh-Kh((Xs⁄Xbh)/(Xs⁄Xbh + Kx))(So /(Koh + So))Xbh
r3 = µH(Ss /(Ks + Ss))(So /(Koh + So))Xbh-bH * Xbh
由CSTR的摩爾平衡得出的主要微分方程為:
dSs / dt = Q(Ss_in-Ss)+ r1 * V
dXs / dt = Q(Xs_in-Xs)+ r2 * V
dXbh / dt = Q(Xbh_in-Xbh)+ r2 * V
到目前為止,這是我的代碼:
import numpy as np
from scipy.optimize import fsolve
parameter=dict()
parameter['u_h']=6.0
parameter['k_oh']=0.20
parameter['k_s']=20.0
parameter['k_h']=3.0
parameter['k_x']=0.03
parameter['Y_h']=0.67
parameter['f_p']=0.08
parameter['b_h']=0.62
Bulk_DO=2.0 #mg/L
#influent components:
infcomp=[56.53,182.9,16.625] #mgCOD/l
Q=684000 #L/hr
V=1040000 #l
def steady(z,*args):
Ss=z[0]
Xs=z[1]
Xbh=z[2]
def monod(My_S,My_K):
return My_S/(My_S+My_K)
#Conversion rates
#Conversion of Ss
r1=((-1/parameter['Y_h'])*parameter['u_h']*monod(Ss,parameter['k_s'])\
+parameter['k_h']*monod(Xs/Xbh,parameter['k_x'])*monod(Bulk_DO,parameter['k_oh']))\
*Xbh*monod(Bulk_DO,parameter['k_oh'])
#Conversion of Xs
r2=((1-parameter['f_p'])*parameter['b_h']-parameter['k_h']*monod(Xs/Xbh,parameter['k_x']))*Xbh
#Conversion of Xbh
r3=(parameter['u_h']*monod(Ss,parameter['k_s'])*monod(Bulk_DO,parameter['k_oh'])-parameter['b_h'])*Xbh
f=np.zeros(3)
f[0]=Q*(infcomp[0]-Ss)+r1*V
f[1]=Q*(infcomp[1]-Xs)+r2*V
f[2]=Q*(infcomp[2]-Xbh)+r3*V
return f
initial_guess=(0.1,0.1,0.1)
soln=fsolve(steady,initial_guess,args=parameter)
print (soln)
我如何繪制這樣的穩定狀態? 穩態圖該解決方案也不是我想要的,因為這些方程式暗示了Ss和Xs的減少以及Xbh值隨時間的增加。 還有一種解決方案具有負值,這實際上是不可能的。 任何建議將不勝感激。 提前致謝 !!
這是為您的解決方案獲取負值的一種解決方案:代替使用fsolve,而使用minimum_squares,它可以將邊界設置為可能的值。
在頂部,導入:
from scipy.optimize import least_squares
並將fsolve語句替換為:
soln = least_squares(steady, initial_guess, bounds=[(0,0,0),(np.inf,np.inf,np.inf)], args=parameter)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.