求同态变量的最小幂?

2024-10-03 04:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

x的最小幂为-3,y的最小幂为1。我真正想做的是将洛朗多项式标准化,乘以x^a y^b得到一个非洛朗多项式。你知道吗


Tags: 表达式指数sympyexprlaurent
2条回答

也许这就是你想要的:

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 ⎠

这适用于您的示例(返回-3),并且相信它一般适用于任何劳伦特多项式:

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匹配,在某些情况下这可能不理想。因为这个问题是关于洛朗多项式的,所以这里不应该有问题。你知道吗

相关问题 更多 >