java常微分方程数值解,SymPy / SciPy:求解具有不同变量的常微分方程组
我是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:求解具有不同变量的常微分方程组相关推荐
- python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组...
我是SymPy和Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是: a)从文本文件中读取微分方程组 b)解决系统问题 我已经阅读了this question和t ...
- python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组
我是SymPy和 Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是: a)从文本文件中读取微分方程组 b)解决系统问题 我已经阅读了this question和 ...
- Matlab求解常微分方程组
求解这个常微分方程组. 初始条件为 其中ε取0.01,a是有上限的参数,求解方程的目的其实是找出a的临界值. syms y(t) for i = [0:0.5:1.5,1.7 ...
- python如何求解微分方程_常微分方程数值解:Python求解
这里对使用python求解常微分方程提供两种思路,一种是自己编程实现欧拉法,改进欧拉法或者四阶龙格库塔,这样有助于理解上述三种数值计算方法的原理:一种是调用python已有的库,不再重复造轮子. 本文 ...
- matlab:使用4阶龙格库塔方法求解常微分方程组
%书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数值解法,例10.14使用 %四阶龙格库塔方法 function [t,z] = rk4symeq(fun, t0, tf, ...
- matlab 二元微分方程组,求助,matlab求解二元二阶的常微分方程组
边值问题Matlab可用BVP4C命令,但感觉比较麻烦,下面用1stOpt求解,很简单快捷:CODE: Constant Pey=9.73, Nox=8.05, uxuy=3, bd=1, cx1e= ...
- 4 详解matlab实现龙格库塔算法求解复杂常微分方程组
目录 4.1 题目 4.2 问题背景 4.3 算法 4.4 matlab编程实现 4.5 结果展示 4.6 讨论 4.1 题目
- python解常微分方程龙格库_求解常微分方程组初值问题的龙格库塔法分析及其C代码...
求解常微分方程组初值问题的 龙格库塔法分析及其 C 代码 1 .概 述 由高等数学的知识可知,一些特殊类型的常微分方程(组)能够求出给定初 始值的解析解, 而在科学与工程问题中遇到的常微分方程 (组) ...
- 龙格库塔法matlab求解微分方程组,微分方程组的龙格库塔公式求解matlab版.pdf
微分方程组的龙格库塔公式求解matlab版 微分方程组的龙格-库塔公式求解matlab版 南京大学 王寻 1. 一阶常微分方程组 考虑方程组 y'f x,y,z , y x y ...
最新文章
- 独家 | 基于新闻标题的股价走势分析(附链接)
- iOS多线程开发(三)---Run Loop(一)
- 《Redis深度历险:核心原理和应用实践》千帆竞发——分布式锁
- iOS之LLVM编译流程和Clang插件开发集成
- Native snappy library not available: this version of libhadoop was built without snappy support
- 【VSTO】Office开发中遇到的兼容性检查问题
- SQL 一个表中可不可以没有主键
- vue2+vuex+vue-router 快速入门(三) vue 实例介绍
- Windows 7安装Virtual Server 2005 R2 SP1
- [lammps教程]lammps原子沉积实例教程
- 【word】公式排版问题
- NES模拟器开发笔记(001)缘起、资料及开发准备
- P2597 [ZJOI2012]灾难(支配树)
- Python爬取页游火线精英全区挑战排行榜
- C++三角定位法求两圆交点坐标
- ​复盘共享经济2020:陷入艰难求生困境,转型能否拯救亏损怪圈
- 【项目分享】使用 PointNet 进行点云分割
- 读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件
- 谷歌地图下载器中地图艺术照
- 2D/3D文档查看器ABViewer v12大大提高了PDF转DWG的速度
热门文章
- 字符1到数字1的路线指南
- linux获取夏令时时间,关于时区:获取C中时区的夏令时转换日期
- MAC 有些网址可以 ping 通,但是浏览器打不开
- payment微信:-1
- 联想服务器重置ipmi密码,超微主板重置IPMI密码
- “Failures“ in Functional Safety
- SQL注入_数据库基础
- linux字符界面播放vcd,linux下刻录vcd的方法
- c语言整型变量程序基本,C语言的数据类型→整型数据
- 搞笑的各大银行的简称