SymPy无法解决Matlab可以解决的方程

9

我有一个与轨道力学中的太阳同步共振条件相关的方程。我目前正在学习Python,所以我尝试使用以下代码在SymPy中解决它:

from sympy import symbols,solve

[n_,Re_,p_,i_,J2_,Pe_] = symbols(['n_','Re_','p_','i_','J2_','Pe_'])

del_ss = -((3*n_*(Re_**2)*J2_/(4*(p_**2)))*(4-5*(sin(i_)**2)))-((3*n_*(Re_**2)*J2_/(2*(p_**2)))*cos(i_))-((2*pi)/Pe_)

pprint(solve(del_ss,i_))

表达式可以成功地重新排列五个变量,但是当变量i_solve命令中使用时(如上所示),会产生错误:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 479, in runfile
    execfile(filename, namespace)
  File "C:\Users\Nathan\Python\sympy_test_1.py", line 22, in <module>
    pprint(solve(del_ss,i_))
  File "C:\Python27\lib\site-packages\sympy\solvers\solvers.py", line 484, in solve
    solution = _solve(f, *symbols, **flags)
  File "C:\Python27\lib\site-packages\sympy\solvers\solvers.py", line 700, in _solve
    soln = tsolve(f_num, symbol)
  File "C:\Python27\lib\site-packages\sympy\solvers\solvers.py", line 1143, in tsolve
    "(tsolve: at least one Function expected at this point")
NotImplementedError: Unable to solve the equation(tsolve: at least one Function expected at this point

然而,当同样的表达式输入到Matlab中并调用solve命令时,它会被正确地重新排列。我意识到错误提到了一个未实现的功能,并且这两个函数无疑会有所不同,但如果有更适合的SymPy函数可用的话,那就太好了。任何帮助都将不胜感激。

你使用的 SymPy 版本是什么?我在 0.7.2 中得到了一个解决方案(它有点复杂,但确实是一个解决方案)。 - asmeurer
1个回答

9
  1. 使用sympy版本的Pi。
  2. 用新变量ci_替换cos(i_),用1-ci_**2替换sin(i_)**2,并解出ci_

这样做就可以了:

from sympy import symbols,solve,sin,cos,pi

[n_,Re_,p_,ci_,J2_,Pe_] = symbols(['n_','Re_','p_','ci_','J2_','Pe_'])

del_ss = -((3*n_*(Re_**2)*J2_/(4*(p_**2)))*(4-5*(1-ci_**2)))-((3*n_*(Re_**2)*J2_/(2*(p_**2)))*ci_)-((2*pi)/Pe_)

pprint(solve(del_ss,ci_))

由于第一次尝试只写了解决方案的一半,因此进行了编辑...


我尝试了这个,不幸的是它没有起作用 - 仍然生成了相同的错误。甚至我还采用了 from sympy import * 来确认一下。再次感谢。 - nathanDonaldson
非常出色,先生!非常感谢。不过我很好奇:SymPy是否总是对三角函数这么敏感,还是方程本身导致了原始错误? - nathanDonaldson
@user1820611,不太确定,但是像solve(sin(x)-0.5)这样的简单三角方程可以毫无问题地解决。 - silvado
7
目前很遗憾,SymPy对于解决三角函数表达式的支持有限。 - asmeurer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接