首页 > 解决方案 > SymPy 是否正确解决了这个 ODE?

问题描述

我正在使用 Anaconda 包中的 SymPy 1.4 来评估该工具。我有以下ODE要解决:

使用 SymPy 时,我有以下代码和结果:

import sympy as sp
x=sp.Symbol('x')
y=sp.Function('y')(x)
diffeq=sp.Eq(sp.diff(y,x), (5*x**2-x*y+y**2)/x**2)
sp.dsolve(diffeq,y)

如果我在线使用 WolframAlpha,我会得到:

这是软件中的错误吗?如果是这样,我在哪里可以报告?

标签: pythonwolfram-mathematicasympysymbolic-mathdifferential-equations

解决方案


我认为这些只是不同的形式,但代表了同一组解决方案(尽管可能针对积分常数的不同值)。checkodesol您可以使用以下函数验证 SymPy 中 ODE 的解决方案:

In [9]: import sympy as sp 
   ...: x=sp.Symbol('x') 
   ...: y=sp.Function('y')(x) 
   ...: diffeq=sp.Eq(sp.diff(y,x), (5*x**2-x*y+y**2)/x**2) 
   ...: sol = sp.dsolve(diffeq,y)

In [10]: sol
Out[10]: 
                 5⋅x          
y(x) = ───────────────────────
            ⎛        ⎛ 2⎞⎞    
       2⋅tan⎝C₁ - log⎝x ⎠⎠ + 1

In [11]: checkodesol(diffeq, sol)
Out[11]: (True, 0)

您也可以使用不同的方法来求解 ODE,例如,此方法给出与 Wolfram 相同的形式:

In [12]: dsolve(diffeq, hint='separable_reduced')
Out[12]: y(x) = x⋅(2⋅tan(C₁ + 2⋅log(x)) + 1)

您可以使用以下命令查看可能的方法列表classify_ode

In [5]: classify_ode(diffeq)
Out[5]: 
('1st_homogeneous_coeff_best',
 '1st_homogeneous_coeff_subs_indep_div_dep',
 '1st_homogeneous_coeff_subs_dep_div_indep',
 'separable_reduced',
 'lie_group',
 '1st_homogeneous_coeff_subs_indep_div_dep_Integral',
 '1st_homogeneous_coeff_subs_dep_div_indep_Integral',
 'separable_reduced_Integral')

如果您确实想报告 SymPy 中的错误,您会在 GitHub 上打开一个问题,尽管我不认为这是一个错误: https ://github.com/sympy/sympy/issues


推荐阅读