2

当我运行这个程序时,我最终没有得到解决方案,但应该有一个解决方案(我相信)。知道我做错了什么吗?如果你从 e2 方程中去掉 Q,它似乎可以正常工作。

#!/usr/bin/python
from sympy import *

a,b,w,r = symbols('a b w r',real=True,positive=True)
L,K,Q = symbols('L K Q',real=True,positive=True)

e1=K
e2=(K*Q/2)**(a)

print solve(e1-e2,K)

如果我们执行以下操作,它会起作用:

  • 设置 Q=1 或,
  • 将 e2 更改为 e2=(K* a) (Q/2)**(a)

不过,我仍然希望它以原始方式工作,因为我的方程式比这更复杂。

4

1 回答 1

1

这只是一个不足之处solvesolve主要基于启发式算法,因此有时它无法弄清楚当以特定形式给出方程时如何求解。这里的解决方法是只调用expand_power_base表达式,因为 SymPy 能够解决K - K**a*(Q/2)**a

In [8]: print(solve(expand_power_base(e1-e2),K))
[(2/Q)**(a/(a - 1))]

还值得指出的是,[]from的结果绝不意味着没有解决方案,只是solve 找不到solve任何解决方案。请参阅http://docs.sympy.org/latest/tutorial/solvers.html上的第一个注释。

于 2013-10-04T21:47:18.017 回答