2024-10-03 04:30:36 发布
网友
在sympy中,我有几个变量的laurent多项式(例如x,y,…),我需要表达式的最小指数。 e、 g
expr = x**-3+y/x+2
x的最小幂为-3,y的最小幂为1。我真正想做的是将洛朗多项式标准化,乘以x^a y^b得到一个非洛朗多项式。你知道吗
也许这就是你想要的:
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),并且相信它一般适用于任何劳伦特多项式:
-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。
expr
(base, exponent)
expr.atoms(sympy.Pow)
编辑: 应该注意的是,atoms(*types)将返回与types匹配的每个原子对象。如果expr是这样的:
atoms(*types)
types
x**2 + y + exp(x**(-2)) - 5/y
结果集将包含x**(-2),因为它与sympy.Pow匹配,在某些情况下这可能不理想。因为这个问题是关于洛朗多项式的,所以这里不应该有问题。你知道吗
x**(-2)
sympy.Pow
也许这就是你想要的:
这适用于您的示例(返回
-3
),并且相信它一般适用于任何劳伦特多项式:解释:
从
expr
中提取原子,这些原子被提升到除1以外的幂。将每个原子转换成(base, exponent)
对,丢弃基,并返回最小的指数值。如果expr.atoms(sympy.Pow)
为空,则默认为1。编辑:
应该注意的是,
atoms(*types)
将返回与types
匹配的每个原子对象。如果expr
是这样的:结果集将包含
x**(-2)
,因为它与sympy.Pow
匹配,在某些情况下这可能不理想。因为这个问题是关于洛朗多项式的,所以这里不应该有问题。你知道吗相关问题 更多 >
编程相关推荐