首页 > 解决方案 > 求解和绘制非线性一阶 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。

在此处输入图像描述

有想法该怎么解决这个吗?

标签: python-3.xscipy

解决方案


您的微分方程在 N = 3 处有一个不稳定的平衡点。任何大于 3 的初始条件都会导致解在有限时间内爆炸。这就是数学陈述;从数值上看,值会变得非常大,ODE 求解器最终会开始产生废话。如果任何“无意义”值碰巧最终小于 3,则“解决方案”将收敛到 N = -1 处的稳定平衡。


推荐阅读