【发布时间】:2019-12-23 16:49:48
【问题描述】:
我想得到微分方程组的符号解。 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]
【问题讨论】: