Фазовые портреты для систем ОДУ

Я хочу создать фазовый портрет системы:

х'=х(у-1) и у'=4-у^2-х^2

Мой код ниже - это то, что я пытался до сих пор. Моя проблема заключается в линиях ics и продолжительности. Всякий раз, когда я добавляю больше точек, я получаю красные ошибки, которые не отображают вывод фазового портрета.

 import numpy as np
 from matplotlib import pyplot as plt
 from scipy.integrate import odeint


# Define vector field
def vField(x,t):
u = x[0]*(x[1]-1)
v = 4-(x[0])**2-(x[1])**2
return [u,v]

# Plot vector field

X, Y = np.mgrid[-np.pi:np.pi:-30j,-6:6:30j]
U, V = vField([X,Y],0)

fig, ax = plt.subplots(figsize=(10, 10))
ax.quiver(X, Y, U, V)

ics  =      [[2,4],[2,0],[1,4], [2,4],[-2,4],[-2,0],[-1,4],[-2,4],   [-2,1],[2,-1]]
durations = [[0,4],[0,8],[0,12],[0,4],[0,4],[0,8],[0,12],[0,4],   [0,12],[0,12]]
vcolors = plt.cm.autumn_r(np.linspace(0.5, 1., len(ics)))  # colors      for each trajectory

# plot trajectories
for i, ic in enumerate(ics):
t = np.linspace(durations[i][0], durations[i][1],100)
x = odeint(vField, ic, t)
ax.plot(x[:,0], x[:,1], color=vcolors[i], label='X0=(%.f, %.f)' %  (ic[0], ic[1]) )

ic_x = [ic[0] for ic in ics]
ic_y = [ic[1] for ic in ics]
ax.scatter(ic_x, ic_y, color='blue', s=20)

plt.xlabel('x')
plt.ylabel('y')
plt.xlim(-3.1,3.1)
plt.ylim(-6,6)
plt.legend()

Это то, что я получаю из приведенного выше кода Python. Как мне завершить это и найти, какие еще точки использовать, чтобы получить окончательный фазовый портрет? заранее спасибо

введите здесь описание изображения


person Community    schedule 31.10.2020    source источник
comment
Вы пробовали команду streamplot? Примеры в stackoverflow.com/questions/49807524, math.stackexchange.com/questions/2970212   -  person Lutz Lehmann    schedule 31.10.2020
comment
Возможно, вы захотите разделить векторное поле на (1e-4+U**2+V**2)**0.5 для графика колчана, чтобы стрелки в основном были не слишком маленькими, но и не слишком большими.   -  person Lutz Lehmann    schedule 31.10.2020