首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数学ODE代码更改为Python

如何将数学ODE代码更改为Python
EN

Stack Overflow用户
提问于 2019-07-04 18:48:53
回答 1查看 172关注 0票数 0

我在Mathematica中得到了以下代码

代码语言:javascript
复制
solution = NDSolve[{\[CapitalOmega]\[CapitalLambda]'[x] == 
(1 - \[CapitalOmega]\[CapitalLambda][x]) \[CapitalOmega]\[CapitalLambda][x] ((1 - \[CapitalOmega]\[CapitalLambda][x])^((1 - \[Delta])/(4 -\2 \[Delta]))  \[CapitalOmega]\[CapitalLambda][x]^(1/(4 - 2 \[Delta]))), \[CapitalOmega]\[CapitalLambda][0] == \[CapitalOmega]\[CapitalLambda]f}, \[CapitalOmega]\\[CapitalLambda], {x, xi, xf}];

我想用Python语言编写它,使用ODEINT,但我真的不理解它的编写方式,因为它会发送复数的“error1”。

代码语言:javascript
复制
def OD_H(z, od, delt):
    dMdt = od * (1 - od) * ((1 - od)**((1 - delt)/(4-2*delt)) * od**(1/(2 *(2-delt))))
    return dMdt                                                                                                                      

def ant(z, od0, delt):
    z1 = 0
    od = odeint(OD_H, od0, [z1, z], args=(delt,))[-1]       
    return od     

for z in np.arange(0,3.1,0.1):
    print(ant(z, 0.7, 1.1))

错误是

od = odeint(OD_H, od0, [z1, z], args=(delt,))[-1] File "C:\Python36-32\lib\site-packages\scipy\integrate\odepack.py", line 244, in odeint int(bool(tfirst))) TypeError: can't convert complex to float

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-05 05:45:19

odeint调用中,我们了解到您使用z作为时间变量,使用od作为空间/状态变量。由于您的派生函数具有时间优先,而odeint中的默认设置是状态优先,因此您需要设置选项tfirst=True。有了这样的更改,就不会有错误了。通过使用odeint的全部功能为其提供所有所需采样点的列表,您可以通过较少的计算获得相同的值

代码语言:javascript
复制
z = np.arange(0,3.1,0.1)
od = odeint(OD_H, od0, z, args=(delt,), tfirst=True)

其中,对z[k], od[k]对应于您在循环中计算的参数-值对。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56886320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档