我正在使用 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,我会得到:
这是软件中的错误吗?如果是这样,我可以在哪里举报?
最佳答案
我认为这些只是不同的形式,但代表同一组解决方案(尽管积分常数的值可能不同)。您可以使用 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
关于python - SymPy 是否正确求解此 ODE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57678835/