【问题标题】:SymPy cannot solve an equation that Matlab canSymPy 无法求解 Matlab 可以求解的方程
【发布时间】:2012-11-13 12:09:08
【问题描述】:

我有一个与轨道力学中的太阳同步共振条件相关的方程。我现在正在学习 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_))

表达式可以成功重新排列五个变量,但是当solve命令中使用变量i_时(如上),会产生错误:

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 中得到了一个解决方案(它有点复杂,但它是一个解决方案)。

标签: python sympy


【解决方案1】:
  1. 使用 Pi 的 sympy 版本。
  2. cos(i_) 替换为新变量ci_,将sin(i_)**2 替换为1-ci_**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 *。再次感谢。
  • 最高级,先生!非常感谢。不过我很好奇:SymPy 是否总是对三角函数如此敏感,还是方程式本身导致了原始错误?
  • @user1820611,对此不确定,但像solve(sin(x)-0.5) 这样的简单三角方程可以正常工作。
  • 不幸的是,目前 SymPy 对求解三角表达式的支持受到限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 2011-09-01
相关资源
最近更新 更多