如何合并指数?(x**a)**b => x**(a*b)?
如何在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
3 个回答
0
这可能和这个错误有关。
2
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能会在使用某个特定的功能时,发现它并没有按照预期工作。这个时候,我们就需要去查找相关的信息,看看有没有人遇到过类似的问题,或者有没有解决方案。
在StackOverflow上,很多程序员会分享他们遇到的问题和解决办法。通过这些讨论,我们可以学习到很多实用的技巧和经验,帮助我们更好地理解编程的各种概念。
总之,遇到问题时,不要害怕去寻求帮助,很多时候,其他人也经历过类似的挑战,他们的经验可能会给我们带来启发。
a,b,c=symbols('abc',real=True,positive=True)
(a**b**5)**b**10
a**(b**15)#ans
7
(xm)n = xmn 这个公式只有在 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)
据我所知,sympy 支持复数,所以我觉得在没有证明 b
是实数的情况下,不应该进行这种简化。
补充:如果 x 不是正数,这个公式也是不成立的。
>>> x = -2
>>> m = 2
>>> n = 0.5
>>> (x**m)**n
2.0
>>> x**(m*n)
-2.0
补充(由 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)