【问题标题】:how to combine exponents? (x**a)**b => x**(a*b)?如何组合指数? (x**a)**b => x**(a*b)?
【发布时间】:2010-07-18 05:50:07
【问题描述】:

如何在 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

【问题讨论】:

    标签: python simplify sympy exponent


    【解决方案1】:

    (xm)n = xmn 为真only if m, n are real

    >>> 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 supports complex numbers,所以我认为除非您能证明 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)
    

    【讨论】:

    • 好答案,但a,b,c,d,e,f = symbols("abcdef", real=True)的输出是一样的
    • @gnib:哎呀,我好像错过了另一个限制(x > 0)。
    • thanx!kenny 和 gnib ,如果我们定义符号,它就可以工作; a=symbols('a',real=True,positive=True)
    【解决方案2】:
    a,b,c=symbols('abc',real=True,positive=True)
    (a**b**5)**b**10
    a**(b**15)#ans
    

    【讨论】:

      【解决方案3】:

      这可能与this bug有关。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-09
        • 1970-01-01
        相关资源
        最近更新 更多