python 常微分方程_关于常微分方程(ODE)和优化,在Python中

本文介绍了如何在Python中解决常微分方程(ODE),首先通过解析方法解决简单的线性ODE,然后讨论数值积分方法,如欧拉法和Runge-Kutta方法,以处理更复杂的ODE。示例代码展示了如何使用Scipy库进行数值积分,找到当y超过0.8时对应的t值。
摘要由CSDN通过智能技术生成

这个微分方程可以很容易地解析求解:

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,您将不得不尝试数值计算。最初我们只知道

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值