我对Python有点陌生,我需要绘制这个方程系统的相图:
x˙ = x(3 − 2x − y)
y˙ = y(2 − x − y)
我用odeint
函数解决了这个系统,并试图用4个固定点绘制相图,但最终得到了不同的图。以下是我目前为止写的代码:
# function for the ODE
def f(u, t):
x, y = u
dxdt = x * (3 - 2*x - y)
dydt = y * (2 - x - y)
return np.array([dxdt, dydt])
#those are my fixed points + 0.01
values = np.array([[0.01,0.01], [0.01,2.01], [1.51, 0.01], [1.01,1.01])
t = np.linspace(0, 15, 1000)
for v in values:
X0 = [v[0], v[1]]
X = odeint(f, X0, t)
plt.plot(X[:,0], X[:,1], color="black")
plt.ylabel("Sheeps")
plt.xlabel("Rabbits")
plt.legend(loc="upper right")
plt.show()
我应该得到这样的东西:
但我不是有人能帮忙吗?
1条答案
按热度按时间fafcakar1#
正如@Lutz Lehmann在他们的评论中所说,你展示的相位画像有超过4个起点(它实际上有10个;在x和y轴上有线)。当你创建你的情节,你只探索4个可能的轨迹。你看不到这4条轨迹,因为有些是稳定的不动点,所以解会停留在那里。您要做的是使用streamplot来探索更多的起点。在this solution之后,您可以相应地创建流图。
顺便说一句,当使用scipy解决初始值问题时,您应该更喜欢使用
solve_ivp
而不是过时的odeint
。