在SymPy中获得变量的最小幂?

问题描述 投票:1回答:2

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

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

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

python sympy
2个回答
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 ⎠

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匹配的every原子对象。因此,如果expr看起来像这样:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.