python 常微分方程_关于常微分方程(ODE)和优化,在Python中
这个微分方程可以很容易地解析求解:
dy/dt=0.01*y*(1-y)
重新排列以收集对侧的y和t项
100 dt=1/(y*(1-y))dy
lhs集成到100*t,rhs稍微复杂一些。我们总是可以把两个商的乘积写成两个商的和*一些常数:
1/(y*(1-y))=A/y+B/(1-y)
A和B的值可以通过将rhs放在同一分母上并比较两边的常数项和一阶y项来计算。这个例子很简单,A=B=1。因此我们必须整合
年1月1日
第一项积分到ln(y),第二项可以积分变量u=1-y到-ln(1-y)。我们的积分方程如下:
100*t+C=ln(y)-ln(1-y)
不要忘了积分常数(这里写在lhs上很方便)。我们可以合并两个对数项:
100*t+C=ln(y/(1-y))
为了求出y的精确值t,我们首先需要求出C的值,我们使用初始条件。很明显,如果y从1开始,dy/dt=0,y的值永远不变。因此,在开头插入y和t的值
100*0+C=ln(y(0)/(1-y(0))
这将给出C的值(假设y不是0或1),然后使用y=0.8得到t的值。注意,由于对数和系数100乘以t y,在t值的相对较短范围内将达到0.8,除非y的初始值非常小。当然,重新排列上面的方程,用t表示y,也很简单,然后你也可以画出这个函数。在
编辑:数值积分
对于无法解析求解的更复杂的ODE,您将不得不尝试数值计算。最初我们只知道函数在零时间y(0)的值(为了唯一地定义函数的轨迹,我们至少要知道这一点),以及如何计算梯度。数值积分的思想是,我们可以利用梯度的知识(它告诉我们函数是如何变化的)来计算函数在我们的起点附近的值。最简单的方法是欧拉积分:
y(dt)=y(0)+dy/dt*dt
欧拉积分假定梯度在t=0和t=dt之间是常数。一旦y(dt)已知,梯度也可以在那里计算,然后用于计算y(2*dt)等,逐渐建立函数的完整轨迹。如果你正在寻找一个特定的目标值,只需等到轨迹超过该值,然后在最后两个位置之间插值以获得精确的t
欧拉积分(以及所有其他数值积分方法)的问题是,只有当其假设有效时,其结果才是准确的。由于时间点对之间的梯度不是恒定的,每个积分步骤都会产生一定量的误差,随着时间的推移,误差会逐渐增大,直到答案完全不准确为止。为了提高积分的质量,有必要使用更复杂的梯度近似。例如,看看Runge-Kutta方法,它是一个积分器家族,它以增加计算时间为代价,去除误差项的累进阶数。如果你的函数是可微的,知道二阶甚至三阶导数也可以用来减少积分误差。在
当然幸运的是,有人在这里做了艰苦的工作,你不必太担心解决诸如数值稳定性之类的问题,也不必对所有细节有深入的了解(尽管大致了解情况会有很大帮助)。检查一下http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.ode.html#scipy.integrate.ode的前任一个积分器类足够了,你应该可以直接使用它。例如from scipy.integrate import ode
def deriv(t, y):
return 0.01 * y * (1 - y)
my_integrator = ode(deriv)
my_integrator.set_initial_value(0.5)
t = 0.1 # start with a small value of time
while t < 3000:
y = my_integrator.integrate(t)
if y > 0.8:
print "y(%f) = %f" % (t, y)
break
t += 0.1
当y超过0.8时,此代码将打印出第一个t值(如果从未达到0.8,则不打印任何值)。如果您想要一个更精确的t值,那么也要保留前一个t的y,并在它们之间进行插值。在
python 常微分方程_关于常微分方程(ODE)和优化,在Python中相关推荐
- python 脑洞_从说韩语到写Python,这个数据媛的脑洞有毒吧
你好,Hello,안녕하세요, こんにちは,我是会说四门语言,但是日语可以忽略,韩语也差不多已经忘记,转而写R和Python的语言学迷妹聂大哥. 我要说的脑洞有毒的数据媛就是我计己,哈哈.正式入坑数据 ...
- python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...
前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...
- 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)
各位小伙伴们,大家有多久没有发现柳猫这么勤奋的更新啦~ 今天给小伙伴们带来微软的官方福利,你没看错,就是来自微软的官方Python学习教程(开发指南)~ 之前微软上线过一套 Python 教程< ...
- 在线python视频教程_【好程序员】2019 Python全套视频教程2
2019千锋好程序员全新Python教程,深入浅出的讲解Python语言的基础语法,注重基本编程能力训练,深入解析面向对象思想,数据类型和变量.运算符.流程控制.函数.面向对象.模块和包.生成器和迭代 ...
- python人工智能_人工智能人才缺口千万!学Python抓住风口机会
前不久教育界的一个消息,引发了广泛的关注. 今年9月,浙江三到九年级信息技术课将替换新教材,八年级将新增Python课程内容.新高一信息技术编程语言由VB替换为Python,大数据.人工智能.程序设计 ...
- linux查看python环境_运维笔记linux环境提示python: command not found hello
场景描述: 新部署的容器环境,终端执行python命令,提示没有该命令. 从报错异常可以看出,可能是python环境未安装. 分析思路: 检查python路径: 方式一:type -a python ...
- 结巴分词python安装_“结巴”分词:做最好的Python分词组件
python 结巴分词学习 https://www.toutiao.com/a6643201326710784520/ 2019-01-06 10:14:00 结巴分词(自然语言处理之中文分词器) j ...
- 初学者不建议月python吗_为什么我不建议你将python作为入门编程语言
现在流行的编程语言里,python的热度可谓是热的通红,python以其短小精悍的语法.以其高效的开发,简单入门作为亮点,迅速的在各个领域占有一席之地. 然而,无论你说python有多好,我都不建议你 ...
- python人才_【北软互联】上海python人才外派|上海python程序员人力外包|上海python工程师开发驻场|上海python软件劳务派遣公司...
python人才简述 python是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此python语言具有功能强大和简单易用两个特征.python ...
- 如何将c语言程序封装供python调用_转:用C语言扩展Python的功能
一.简介 Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且还表现在其良好的可扩展性上,正因如此,Python已经开始受到越来越多人的青睐,并且被屡屡成功地应用于各类大型 ...
最新文章
- pythonrequest爬取小说,pythonrequest爬取小说_python爬取斗破苍穹小说
- 机器人学习--Carnegie Mellon University 认知机器人学课程
- 网站运营手册_新媒体代运营模式价格
- js设计模式-组合模式
- not null primary key什么意思_explain都不会用,你还好意思说精通Mysql查询优化?
- git push 报错:you are not allowed to upload merges
- 代腾飞(为自己名字作诗)
- 往AWS上传文件[超快]
- java基础9(IO流)-File类
- MODIS植被覆盖度
- 速看,PMP备考通关宝典来袭
- 技嘉Z370 HD3P + i7-8700K + GTX1080 装黑苹果 High Sierra 10.13.6
- WINCE Activesync 同步问题
- 浪涌测试仪的工作原理
- TV新媒体电商发展遇瓶颈
- 人工智能为代表的新一轮科技革命和产业变革正在重构全球创新版图
- 移动双臂机器人仿真[0]--概述
- 电容笔和触控笔有什么区别?好用不贵主动电容笔推荐
- Markdown Pad出现HTML渲染错误(HTML Rendering Error)的解决方法,Markdown Pad弹窗报错
- 谷歌SEO排名受哪些因素的影响?(二)