首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sympy:解微分方程

Sympy:解微分方程
EN

Stack Overflow用户
提问于 2015-10-26 07:08:38
回答 1查看 1.6K关注 0票数 2

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

代码语言:javascript
复制
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))

假设phi(t).diff(t)不是零。因此,左边和右侧都缩短了。

我就是这样找到解决办法的:

代码语言:javascript
复制
# 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

代码语言:javascript
复制
dsolve(eq, phi(t))

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-26 17:26:59

理想情况下,dsolve()将能够直接求解方程,但它不知道如何求解(它需要了解它可以对一个方程进行因子分解并独立地求解这些因素)。我为它打开了一个问题

我唯一的另一个建议是直接把菲‘分出来:

代码语言:javascript
复制
eq = Eq(eq.lhs/phi(t).diff(t), eq.rhs/phi(t).diff(t))

您也可以使用

代码语言:javascript
复制
eq.xreplace({phi(t).diff(t): 1})

若要在不修改二阶导数的情况下用1替换一阶导数(与subs不同,xreplace不知道要替换什么;它只是精确地替换表达式)。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33340217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档