簡體   English   中英

在python中求解非線性耦合微分方程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM