gpt4 book ai didi

python - 求解器因变量而崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:32 25 4
gpt4 key购买 nike

过去几周我一直在努力解决这个问题。我正在为我正在进行的一个研究项目解决一系列 Python 常微分方程。 (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')

注释掉的行可以正常工作,但是带有变量而不是变量的未注释的等效行不能正常工作。有什么建议么?

最佳答案

如果您的源代码包含与此完全相同的代码:

     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]

关于python - 求解器因变量而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24619508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com