0

以下の関数方程式に r1 を入力する場合を除いて、私のコードは正しく機能しています

def u(Substrate):         
    return((u_max*ys[:,0])/(Ks+ys[:,0]))


biomass = ys[:,1]    
u = u(ys[:,0])

def r1(u,biomass):
    r1 = u*biomass*YieldCO2_1
    return r1

r1 = r1(u,biomass)

def F(y,t):    
    Ptot = 710
    Vgas = 2
    D = 0.00826*(273.15+Temp)    
    Cstar_CO2 = KH_CO2 * y[2]
    Cstar_CH4 = KH_CH4 * y[3]
    TG_CO2 = KLa_CO2*(Cstar_CO2-y[0])
    TG_CH4 = KLa_CH4*(Cstar_CH4-y[1])
    Q_CO2 = -D*V*TG_CO2
    Q_CH4 = -D*V*TG_CH4
    Qgas = (Q_CO2+Q_CH4)+Q
    F=np.zeros(4)
    F[0] = Q/V * (CO2_To-y[0]) + TG_CO2 + r1
    F[1] = Q/V * (CH4_Do-y[1]) + TG_CH4 
    F[2] = -Ptot*D*TG_CO2*(V/Vgas)-y[2]*(Qgas/Vgas)
    F[3] = -Ptot*D*TG_CH4*(V/Vgas)-y[3]*(Qgas/Vgas)
    return F 

yinit = np.array([4,3,250,200])             
ts = np.arange(0,4,0.4)  
y = odeint(F,yinit,ts)

r1 が式 F[0] に表示されると、次のエラーが発生します。

F[0] = Q/V * (CO2_To-y[0]) + TG_CO2 + r1
ValueError: setting an array element with a sequence.
odepack.error: Error occurred while calling the Python function named F

ただし、r1配列なしで関数を実行すると、エラーは発生しません。そのため、r1配列を関数に入れることに何か問題があると想定しています。誰かが私の問題に入力を提供できる場合、私はそうします

4

1 に答える 1

1

F[0] = expressionここexpressionでは、配列ではなく数値である必要があります。ただし、次元Q/V * (CO2_To-y[0]) + TG_CO2 + r1の配列です。r1これを確認するには、次の行を評価してみてください。

>>> 1 + numpy.array([1,2])
array([2, 3])

例外を取り除くには、達成しようとしていることに応じて、この式を数値に変換する必要があります。

于 2013-03-22T13:39:35.540 に答える