python-3.x - 求解和绘制非线性一阶 ODE
问题描述
到目前为止,对于两个初始条件 n(0)=-5 和 n(0)=1,我在求解和绘制非线性 ode dn/dt = n^2-2n-3 方面已经取得了半成功,但是当我将最后一行添加到初始条件 n(0)=10 的图形中,一切都变得古怪,并且图形看起来不像它应该的那样,或者表现得不像其他两条线。
代码是:
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate
#import warnings
#warnings.simplefilter('ignore')
def func(N, t):
return(N**2 - 2*N - 3)
tvec = np.arange(0,11)
s_1 = scipy.integrate.odeint(func, y0=-5,t = tvec)
s_2 = scipy.integrate.odeint(func,y0=1, t=tvec)
s_3 = scipy.integrate.odeint(func, y0 = 10, t=tvec)
%matplotlib inline
plt.plot(tvec,s_1, label="N0=-5")
plt.plot(tvec,s_2, label="N0=1")
plt.plot(tvec, s_3, label="N0=10")
plt.ylim(-5,10)
plt.legend();
这里的罪魁祸首是 s_3。
有想法该怎么解决这个吗?
解决方案
您的微分方程在 N = 3 处有一个不稳定的平衡点。任何大于 3 的初始条件都会导致解在有限时间内爆炸。这就是数学陈述;从数值上看,值会变得非常大,ODE 求解器最终会开始产生废话。如果任何“无意义”值碰巧最终小于 3,则“解决方案”将收敛到 N = -1 处的稳定平衡。
推荐阅读
- c# - Unity - 检测到目标时如何弹出GUI按钮
- python-3.x - Python Setup.py 找不到入口点
- excel - 通过这种方式获得的句柄是否可以用于从 Excel VBA 访问正在运行的 WORD 实例?
- java - 从数组中获取不包含重复字符的字符串
- go - 如何在 Helm 中对 4 个变量使用 OR 条件
- firebase - 以 xamarin 形式将缺少的所需 dSYM 上传到 firebase?
- mysql - Mysql 查询以按月创建和解决缺陷组
- excel - 防止编辑某些单元格用户表单
- javascript - 组件更改角度后如何执行javascript?
- html - 在移动设备上留下空白空间?