过去几周我一直在努力解决这个问题。我正在为我正在进行的研究项目解决Python中的一系列ODE。 (python代码必须模仿之前的MATLAB代码。)
相关部分在此处:
def dy (t,y,params):
dy = np.zeros(3)
wL = params[0]
T = params[1]
CH4 = params[2]
k = params[3]
ka = params[4]
H = params[5]
kmt = params[6]
E = params[7]
d = params[8]
y0 = params[9]
# dy[1] = 1500000 - 0 - 9.987338917338950e-11*y[1]*1000000
# - 1.437829040671314e-17*y[1]*9.84e11
dy[1] = E[1]-y[1]*d[1]
- k[1]*y[1]*y0[14]
- k[55]*y[1]*y0[37]
dy[2] = 0 - 0 + 9.987338917338950e-11*y[1]*1000000
- 7.742358922306635e-12*y[2]*0 + 0.7*7.432069505555159e-12*0*1000000
-3.5e-15*(0 + 0)*y[2] - 2* 7e-16*y[2]**2
return dy
适用于:
y = np.zeros(3)
ode15s = ode(dy)
y[1] = 2.46e10
ode15s.set_initial_value(y)
ode15s.set_f_params(params)
ode15s.set_integrator('vode', method = 'bdf')
注释掉的行正常工作,但带有变量而不是变量的未注释等效行无法正常工作。有什么建议?
答案 0 :(得分:1)
如果您的源代码包含完全相同的代码:
dy[1] = E[1]-y[1]*d[1]
- k[1]*y[1]*y0[14]
- k[55]*y[1]*y0[37]
然后问题是dy[1]
被计算为dy[1] = E[1] - y[1]*d[1]
,接下来的两行被(有效地)忽略。它们是有效的python表达式,但它们不是前一行的一部分,并且它们没有分配给任何东西,因此忽略这些值。
以下任何一项都可以解决这个问题:
将其设为一行:
dy[1] = E[1]-y[1]*d[1] - k[1]*y[1]*y0[14] - k[55]*y[1]*y0[37]
将整个表达式括在括号中:
dy[1] = (E[1]-y[1]*d[1]
- k[1]*y[1]*y0[14]
- k[55]*y[1]*y0[37])
在行的末尾使用行继续符(\
):
dy[1] = E[1]-y[1]*d[1] \
- k[1]*y[1]*y0[14] \
- k[55]*y[1]*y0[37]