python–SymPySciPy:求解具有不同变量的常微分方程组

python–SymPySciPy:求解具有不同变量的常微分方程组,第1张

概述我是SymPy和Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是:a)从文本文件中读取微分方程组b)解决系统问题我已经阅读了this question和this other question,它们几乎就是我要找的,但我还有一个额外的问题:我事先并不知道方程组的形式,所以我无法在脚本中使用def创建相应的函数与this

我是SymPy和Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是:
a)从文本文件中读取微分方程组
b)解决系统问题

我已经阅读了this question和this other question,它们几乎就是我要找的,但我还有一个额外的问题:我事先并不知道方程组的形式,所以我无法在脚本中使用def创建相应的函数与this example一样.整个事情必须在运行时进行管理.

所以,这里是我的代码的一些片段.假设我有一个包含以下内容的文本文件system.txt:

dx/dt = 0.0387*x - 0.0005*x*ydy/dt = 0.0036*x*y - 0.1898*y

我所做的是:

# importsimport sympyimport scipyimport re as regex# define all symbols I am going to usex = sympy.Symbol('x')y = sympy.Symbol('y')t = sympy.Symbol('t')# read the filesystemOfEquations = []with open("system.txt","r") as fp :   for line in fp :            pattern = regex.compile(r'.+?\s+=\s+(.+?)$')            ExpressionString = regex.search(pattern,line) # first match ends in group(1)               systemOfEquations.append( sympy.sympify( ExpressionString.group(1) ) )

此时,我仍然坚持使用systemOfEquation列表中的两个符号表达式.如果我可以从另一个文件中读取ODE系统的初始条件,为了使用scipy.integrate.odeint,我必须将系统转换为Python可读的函数,如:

def dX_dt(X,t=0):return array([ 0.0387*X[0] - 0.0005*X[0]*X[1],-0.1898*X[1] + 0.0036*X[0]*X[1] ])

有没有一种很好的方法在运行时创建它?例如,将函数写入另一个文件,然后将新创建的文件作为函数导入? (也许我在这里很傻,但请记住我对Python比较新:-D)

我已经通过sympy.utilitIEs.lambdify.lambdify看到它可以将符号表达式转换为lambda函数,但我想知道这是否可以帮助我… lambdify当时似乎与一个表达式一起使用,而不是系统.

提前感谢您的任何建议:-)

编辑:

经过极少的修改,沃伦的答案完美无瑕.我有listofSymbols中所有符号的列表;此外,它们的显示顺序与odeint将使用的数据X列的顺序相同.所以,我使用的功能是

def dX_dt(X,t):    vals = dict()    for index,s in enumerate(listofSymbols) :            if s != time :                    vals[s] = X[index]    vals[time] = t    return [eq.evalf(subs=vals) for eq in systemOfEquations]

我只是在我的具体问题中对变量’time’做了一个例外.再次感谢! 总结

以上是内存溢出为你收集整理的python – SymPy / SciPy:求解具有不同变量的常微分方程组全部内容,希望文章能够帮你解决python – SymPy / SciPy:求解具有不同变量的常微分方程组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1207876.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存