SymPy дифференциальные уравнения 2-го порядка, погрешность решения - PullRequest
0 голосов
/ 23 декабря 2019

Хочу получить символическое решение для системы дифференциальных уравнений. dsolve выдает «NotImplementedError». diff (t, 1) работает хорошо. Каков наилучший способ получить решение? Или как преобразовать это в первый заказ, чтобы решить это численно, если символическое решение не возможно. Любая помощь будет оценена.

import sympy as sp
import mpmath
from sympy import Function, symbols, dsolve, Derivative, erf, sqrt, power, diff

a, t, rx, ry = symbols('a t rx ry')
rx = Function("rx")(t)
ry = Function("ry")(t)
r = sqrt(rx**2+ry**2)

eq1 = sp.Eq(rx.diff(t,2), -rx/r**3)
eq2 = sp.Eq(ry.diff(t,2), -ry/r**3)
sol = dsolve([eq1, eq2])
print(sol)

r '= v v' = -r / | r | ^ 3 Для численного решения необходимо преобразовать это в первый порядок. Понятно, что правая сторона - это градиент:

grad(1/r) = -r/|r|^3

Но для декартовой системы это выглядит странно из-за | r |и я застреваю, как использовать odeint здесь:

rx' = vx
ry' = vy
vx' = -rx/|r|^3
vy' = -ry/|r|^3

, чтобы использовать odeint мне нужна функция 5 (?) параметров, и это должно быть так?

def F(U, t):
  vx, vy, rx, ry = U
  r = np.sqrt(rx**2 + ry**2)
  rxdt = vx
  rydt = vy
  vxdt = -rx/r**3
  vydt = -ry/r**3
  return [vxdt, vydt]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...