解算器分解为变量

2024-09-29 17:14:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在过去的几周里,我一直在努力解决这个问题。我正在为一个研究项目用Python解决一系列的ODEs。(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')

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


Tags: 项目代码defnpzerosparamssetmatlab
1条回答
网友
1楼 · 发布于 2024-09-29 17:14:38

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

     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]
    

相关问题 更多 >

    热门问题