4

如何在 sympy 中简化方程中的指数

from sympy import symbols 
a,b,c,d,e,f=symbols('abcdef')
j=(a**b**5)**(b**10)
print j 
(a**(b**5))**(b**10) #ans even after using expand simplify 
# desired output 
a**(b**15)

如果无法使用 sympy 我应该在 python 中导入哪个模块?

即使我将“b”定义为真实的,也可以编辑所有其他符号

b=symbols('b',real=True) 没有得到简化的指数,只有当指数是常数时才简化

a=symbols('a',real=True)
b=symbols('b',real=True)
(a**5)**10
 a**50  #simplifies only if exp are numbers
(a**b**5)**b**10


(a**(b**5))**b**10  #no simplification
4

3 回答 3

7

(x m ) n = x mn只有当 m, n 为实数时才为真。

>>> import math
>>> x = math.e
>>> m = 2j*math.pi
>>> (x**m)**m      # (e^(2πi))^(2πi) = 1^(2πi) = 1
(1.0000000000000016+0j)
>>> x**(m*m)       # e^(2πi×2πi) = e^(-4π²) ≠ 1
(7.157165835186074e-18-0j)

AFAIK,sympy 支持复数b,所以我相信除非你能证明它是真实的,否则不应该进行这种简化。


编辑:如果 x 不是正数,它也是错误的。

>>> x = -2
>>> m = 2
>>> n = 0.5
>>> (x**m)**n
2.0
>>> x**(m*n)
-2.0

编辑(by gnibbler):这是应用了 Kenny 限制的原始示例

>>> from sympy import symbols 
>>> a,b=symbols('ab', real=True, positive=True)
>>> j=(a**b**5)**(b**10)
>>> print j
a**(b**15)
于 2010-07-18T06:24:06.950 回答
2
a,b,c=symbols('abc',real=True,positive=True)
(a**b**5)**b**10
a**(b**15)#ans
于 2010-07-18T07:36:48.880 回答
0

这可能与这个错误有关。

于 2010-07-18T06:10:35.890 回答