求解和绘制非线性一阶ODE

时间:2018-10-08 20:00:36

标签: python-3.x scipy

到目前为止,对于两个初始条件n(0)=-5和n(0)= 1,我在求解非线性图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。

enter image description here

关于如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:1)

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