Считая первый компонент более правильным и предполагая, что система является реальной и мнимой частью сложного ODE, я прочитал для этого z'=-c*z*|z|^2
.
Обратите внимание, что действительные и мнимые части
A2*(-coeffr*A[0]+coeffi*A[1]), A2*(-coeffr*A[1]-coeffi*A[0])
отмечают переключенные индексы в мнимой части.
Используя новый интерфейс solve_ivp
вся задача может быть написано гораздо короче
z0 = 1e-4+0j
coeff = 0.145-0.088j
t0, tf, dt = 0, 100, 0.01
sol = solve_ivp(lambda t,z: -coeff*z*abs(z)**2, [t0,tf], [z0], t_eval=np.arange(t0,tf,dt))
plt.plot(sol.t, abs(sol.y[0]))
, что действительно дает почти постоянное решение с вариациями в диапазоне 1e-11
, который находится внутри допустимых отклонений.
Является ли это разумным? Уравнение для абсолютного значения равно
d/dt abs(z)^2 = 2*Re(z.conj*dz/dt) = -2*coeffr*abs(z)^4
, которое имеет решение
abs(z)^2 = abs(z(0))^2/(1+2*coeffr*abs(z(0))^2*t)
, так что в действительности при t=100
знаменатель равен 1+2*0.145*1e-8*100=1+2.9e-7
, что очень близко к 1. численное решение точно соответствует ожидаемому от точного решения.