我是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*y

dy/dt = 0.0036*x*y - 0.1898*y

我所做的是:

# imports

import sympy

import scipy

import re as regex

# define all symbols I am going to use

x = sympy.Symbol('x')

y = sympy.Symbol('y')

t = sympy.Symbol('t')

# read the file

systemOfEquations = []

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'做了一个例外 . 再次感谢! :-)

java常微分方程数值解,SymPy / SciPy:求解具有不同变量的常微分方程组相关推荐

  1. python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组...

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

  2. python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组

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

  3. Matlab求解常微分方程组

    求解这个常微分方程组. 初始条件为              其中ε取0.01,a是有上限的参数,求解方程的目的其实是找出a的临界值. syms y(t) for i = [0:0.5:1.5,1.7 ...

  4. python如何求解微分方程_常微分方程数值解:Python求解

    这里对使用python求解常微分方程提供两种思路,一种是自己编程实现欧拉法,改进欧拉法或者四阶龙格库塔,这样有助于理解上述三种数值计算方法的原理:一种是调用python已有的库,不再重复造轮子. 本文 ...

  5. matlab:使用4阶龙格库塔方法求解常微分方程组

    %书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数值解法,例10.14使用 %四阶龙格库塔方法 function [t,z] = rk4symeq(fun, t0, tf, ...

  6. matlab 二元微分方程组,求助,matlab求解二元二阶的常微分方程组

    边值问题Matlab可用BVP4C命令,但感觉比较麻烦,下面用1stOpt求解,很简单快捷:CODE: Constant Pey=9.73, Nox=8.05, uxuy=3, bd=1, cx1e= ...

  7. 4 详解matlab实现龙格库塔算法求解复杂常微分方程组

    目录 4.1 题目 4.2 问题背景 4.3 算法 4.4 matlab编程实现 4.5 结果展示 4.6 讨论 4.1 题目

  8. python解常微分方程龙格库_求解常微分方程组初值问题的龙格库塔法分析及其C代码...

    求解常微分方程组初值问题的 龙格库塔法分析及其 C 代码 1 .概 述 由高等数学的知识可知,一些特殊类型的常微分方程(组)能够求出给定初 始值的解析解, 而在科学与工程问题中遇到的常微分方程 (组) ...

  9. 龙格库塔法matlab求解微分方程组,微分方程组的龙格库塔公式求解matlab版.pdf

    微分方程组的龙格库塔公式求解matlab版 微分方程组的龙格-库塔公式求解matlab版 南京大学 王寻 1. 一阶常微分方程组 考虑方程组     y'f x,y,z , y x y ...

最新文章

  1. 独家 | 基于新闻标题的股价走势分析(附链接)
  2. iOS多线程开发(三)---Run Loop(一)
  3. 《Redis深度历险:核心原理和应用实践》千帆竞发——分布式锁
  4. iOS之LLVM编译流程和Clang插件开发集成
  5. Native snappy library not available: this version of libhadoop was built without snappy support
  6. 【VSTO】Office开发中遇到的兼容性检查问题
  7. SQL 一个表中可不可以没有主键
  8. vue2+vuex+vue-router 快速入门(三) vue 实例介绍
  9. Windows 7安装Virtual Server 2005 R2 SP1
  10. [lammps教程]lammps原子沉积实例教程
  11. 【word】公式排版问题
  12. NES模拟器开发笔记(001)缘起、资料及开发准备
  13. P2597 [ZJOI2012]灾难(支配树)
  14. Python爬取页游火线精英全区挑战排行榜
  15. C++三角定位法求两圆交点坐标
  16. ​复盘共享经济2020:陷入艰难求生困境,转型能否拯救亏损怪圈
  17. 【项目分享】使用 PointNet 进行点云分割
  18. 读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件
  19. 谷歌地图下载器中地图艺术照
  20. 2D/3D文档查看器ABViewer v12大大提高了PDF转DWG的速度

热门文章

  1. 字符1到数字1的路线指南
  2. linux获取夏令时时间,关于时区:获取C中时区的夏令时转换日期
  3. MAC 有些网址可以 ping 通,但是浏览器打不开
  4. payment微信:-1
  5. 联想服务器重置ipmi密码,超微主板重置IPMI密码
  6. “Failures“ in Functional Safety
  7. SQL注入_数据库基础
  8. linux字符界面播放vcd,linux下刻录vcd的方法
  9. c语言整型变量程序基本,C语言的数据类型→整型数据
  10. 搞笑的各大银行的简称