到目前为止,对于两个初始条件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。
关于如何解决此问题的任何想法?
答案 0 :(得分:1)
您的微分方程在N = 3处具有不稳定的平衡点。任何大于3的初始条件都会导致解决方案在有限时间内爆炸。那是数学上的陈述;从数值上讲,值将变得非常大,ODE求解器最终将开始生成废话。如果任何“废话”值恰好小于3,则“解”将收敛到N = -1处的稳定平衡。