在sympy中,我有多个变量的劳伦特多项式(例如x,y,...),并且我需要表达式的最小指数。 例如
expr = x **-3 + y / x + 2
x的最小幂是-3,y的最小幂是1。我真正想做的是通过乘以x ^ ay ^ b来归一化劳伦特多项式,以获得非劳伦特多项式。
答案 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 ⎠