我认为这些只是不同的形式,但代表了同一组解决方案(尽管可能针对不同的积分常数值)。您可以使用 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