Scipy Python odeint,返回初始条件数组的解决方案
请参阅下面的代码 当我执行这段代码时,我得到一个初始条件数组 [[310.0] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [310.0.] 如果您对此有任何想法,我们将不胜感激Scipy Python odeint,返回初始条件数组的解决方案,scipy,odeint,Scipy,Odeint,请参阅下面的代码 当我执行这段代码时,我得到一个初始条件数组 [[310.0] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [ 310. 0.] [310.0.] 如果您对此有任何想法,我们将不胜感激 那么问题是什么?(1)从您使用的print语句中,我推断您使用的是Python 2。您可以通过将来自uuu future uuu impor
那么问题是什么?(1)从您使用的
print
语句中,我推断您使用的是Python 2。您可以通过将来自uuu future uuu import division的放在脚本的顶部来避免一些麻烦,这样所有的division都会给出浮点结果。否则,诸如3/2
之类的表达式将给出1
,而不是1.5
。(2) 测试ode_向量
(例如,查看ode_向量(初始向量,V[0])
。如果它总是返回[0,0],由odeint
生成的解决方案将是一个常数,等于初始条件。感谢您的回复。很抱歉,我没有提供完整的描述。我对Python和stackoverflow不熟悉,一定会努力解决我的问题,以便正确地解决这些问题。我能够将错误追溯到错误rA(T,X)方程中的aced括号导致ode_向量方程出现[0,0]数组。我的函数现在工作正常。
import numpy as np
from scipy.integrate import odeint
# Define constants
U = 1000
a = 5
Ta0 = (37+273)
V_tot = 6
FA0 = 14.7
CA0 = 9.3
deltaCp = 0
Hrx_T = -6900
sumTheta_Cp = 159
#Integration conditions
V = np.linspace(0,V_tot,10)
X0 = 0
T0 = 310
#Define reaction rate constant as function of temperature
def k(T):
return 31.1*np.exp(7906*((T-360)/(T*360)))
def Kc(T):
return 3.03*np.exp(-830.3*((T-333)/(T*333)))
#Define rate law as function of temperature, conversion
def rA(T,X):
return -k(T)*CA0*(1-(1+(1/Kc(T))*X))
#Energy balance equation for tubular reactor
def ode_vector(diff_var,V):
T = diff_var[0]
X = diff_var[1]
dT_dV=(U*a*(Ta0-T)+rA(T,X)*Hrx_T/(FA0*sumTheta_Cp+deltaCp*X))
dX_dV= -rA(T,X)/FA0
d_dV = [dT_dV,dX_dV]
return d_dV
initial_vector = [T0, X0]
solution = odeint(ode_vector,initial_vector,V)
print solution