在SymPy中获得最小的变量功效?

时间:2019-12-15 16:56:27

标签: python sympy

在sympy中,我有多个变量的劳伦特多项式(例如x,y,...),并且我需要表达式的最小指数。 例如

  

expr = x **-3 + y / x + 2

x的最小幂是-3,y的最小幂是1。我真正想做的是通过乘以x ^ ay ^ b来归一化劳伦特多项式,以获得非劳伦特多项式。

2 个答案:

答案 0 :(得分:1)

这适用于您的示例(返回-3),并且相信它通常适用于任何Laurent多项式:

min((z.as_base_exp()[1] for z in expr.atoms(sympy.Pow)), default=1)

说明
expr中提取提高到1以外的幂的原子。将每个原子转换为(base, exponent)对,丢弃基数,然后返回最小的指数值。如果expr.atoms(sympy.Pow)为空,则默认为1。



编辑
应当注意,atoms(*types)将返回与types匹配的每个原子对象。因此,如果expr看起来像这样:

x**2 + y + exp(x**(-2)) - 5/y

结果集将包含x**(-2),因为它与sympy.Pow相匹配,在某些情况下可能并不理想。由于这个问题专门针对Laurent多项式,因此在这里应该不是问题。

答案 1 :(得分:1)

也许这就是您想要的:

In [14]: expr = x**-3+y/x+2                                                                                                       

In [15]: expr                                                                                                                     
Out[15]: 
    y   1 
2 + ─ + ──
    x    3
        x 

In [16]: cancel(expr)                                                                                                             
Out[16]: 
   3    2      
2⋅x  + x ⋅y + 1
───────────────
        3      
       x       

In [17]: cancel(expr).as_numer_denom()                                                                                            
Out[17]: 
⎛   3    2         3⎞
⎝2⋅x  + x ⋅y + 1, x ⎠