Yu_K
Нет. Сравнения с точным решением у меня нету. Маячком является закон сохранения энергии.
У меня есть 12 ДУ вида
То есть три частицы находятся в поле

. Массы частиц таковы:
Когда программа ищет решение по методу Рунге-Кутта 4 порядка, наблюдается очень сильная зависимость от величины

--- от шага интегрирования по времени; полная энергия очень быстро расходится (неустойчивое решение).
Сейчас считаю с достаточно малым шагом

, но все равно имеет место отклонение от начального значения полной энергии... До этого я списывал не слишком большое отклонение от полной энергии на накопление локальной ошибки и как следствие большой величины глобальной на интервале
![$[t_1,t_2]$ $[t_1,t_2]$](https://dxdy-02.korotkov.co.uk/f/9/d/c/9dcc4c03e1c70fde076af7f0546a87e682.png)
. Но даже с гораздо б
ольшим шагом --- все плохо.
Стоит сказать о правой части. Выражение

имеет разрыв при некоторой конфигурации частиц. То есть, функция

не является гладкой функцией.
Вот код для РК4 из фортрана, может я какую ошибку проглядел.
Код:
do j = 1,4
do i = 1,3
if (j/=4) then
mass = mass1
else
mass = mass4
end if
XXX(i,j,1) = veloc(i,j)*dt ! K_1^1
x = ccoord
grad = derivate_of_direction(x,veloc) ; du(i,j) = grad(i,j,numPEs)
VVV(i,j,1) = - du(i,j)/mass*dt ! K_1^2
XXX(i,j,2) = (veloc(i,j) + VVV(i,j,1)/2.0d0)*dt ! K_2^1
x = ccoord
x(i,j) = ccoord(i,j)+XXX(i,j,1)/2.0d0 ! x(t) + K_1^1/2
grad = derivate_of_direction(x,veloc) ; du(i,j) = grad(i,j,numPEs)
VVV(i,j,2) = - du(i,j)/mass*dt ! K_2^2
XXX(i,j,3) = (veloc(i,j) + VVV(i,j,2)/2.0d0)*dt ! K_3^1
x = ccoord
x(i,j) = ccoord(i,j)+XXX(i,j,2)/2.0d0 ! x(t) + K_2^1/2
grad = derivate_of_direction(x,veloc) ; du(i,j) = grad(i,j,numPEs)
VVV(i,j,3) = - du(i,j)/mass*dt ! K_3^2
XXX(i,j,4) = (veloc(i,j) +VVV(i,j,3))*dt
x = ccoord
x(i,j) = ccoord(i,j)+XXX(i,j,3)*dt ! x(t) + K_3^2
grad = derivate_of_direction(x,veloc) ; du(i,j) = grad(i,j,numPEs)
VVV(i,j,4) = - du(i,j)/mass*dt
! \delta^j = K_1^j + 2*K_2^j + 2*K_3^j + K_4^j
! x(t+dt) = x(t) + \delta^1 / 6.0d0
! V(t+dt) = V(t) + \delta^2 / 6.0d0
RK4(i,j,1) = (XXX(i,j,1) + 2.0d0*XXX(i,j,2) + 2.0d0*XXX(i,j,3) + XXX(i,j,4))/6.0d0 ! coord
RK4(i,j,2) = (VVV(i,j,1) + 2.0d0*VVV(i,j,2) + 2.0d0*VVV(i,j,3) + VVV(i,j,4))/6.0d0 ! veloc
end do !for i
end do !for j
ccoord = ccoord + RK4(:,:,1)
veloc = veloc + RK4(:,:,2)