Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 辛:解一个微分方程_Python_Sympy - Fatal编程技术网

Python 辛:解一个微分方程

Python 辛:解一个微分方程,python,sympy,Python,Sympy,我想找到一种解决以下微分方程的优雅方法: from sympy import * init_printing() M, phi, t, r = symbols('M phi t r') eq = Eq(-M * phi(t).diff(t), Rational(3, 2) * m * r**2 * phi(t).diff(t) * phi(t).diff(t,t)) 我假设φ(t).diff(t)不是零。因此,左侧和右侧被缩短 以下是我获得解决方案的方法: # I assume d/dt

我想找到一种解决以下微分方程的优雅方法:

from sympy import *
init_printing()

M, phi, t, r = symbols('M phi t r')

eq = Eq(-M * phi(t).diff(t), Rational(3, 2) * m * r**2 * phi(t).diff(t) * phi(t).diff(t,t))

我假设φ(t).diff(t)不是零。因此,左侧和右侧被缩短

以下是我获得解决方案的方法:

# I assume d/dt(phi(t)) != 0

theta = symbols('theta')
eq = eq.subs({phi(t).diff(t, 2): theta})  # remove the second derivative
eq = eq.subs({phi(t).diff(t): 1})  # the first derivative is shortened
eq = eq.subs({theta: phi(t).diff(t, 2)})  # get the second derivative back

如何更优雅地解决这个问题?

理想情况下,
dsolve()
将能够直接解决这个方程,但它不知道如何解决(它需要了解它可以将一个方程分解为因子,并独立解出因子)。我为它打开了一个窗口

我唯一的另一个建议是直接将phi’分开:

eq = Eq(eq.lhs/phi(t).diff(t), eq.rhs/phi(t).diff(t))
你也可以使用

eq.xreplace({phi(t).diff(t): 1})
用1替换一阶导数而不修改二阶导数(与
subs
不同,
xreplace
没有数学知识,它只是精确地替换表达式)

不要忘记,
phi(t)=C1
也是一个解决方案(当phi'等于0时)

eq.xreplace({phi(t).diff(t): 1})