Sympy中是否有支持多元多项式的all_coeffs()方法?
提取Sympy多元多项式的所有系数(含零值)
针对Sympy的all_coeffs()仅支持单变量多项式的问题,我们可以借助Poly类实现多元多项式全系数(包括零值)的提取,核心思路是生成所有可能的单项式指数组合,再逐个查询对应系数。
解决步骤
- 将目标多项式转换为
Poly对象,方便获取变量、最高次数等结构化信息。 - 确定每个变量的最高次数,生成覆盖从0到最高次数的所有指数组合。
- 按需求的顺序遍历这些指数组合,提取每个单项式的系数(零值直接保留)。
代码示例
以多项式x³ + y³ + xy + 1为例:
from sympy import symbols, Poly from itertools import product # 定义变量和多项式 x, y = symbols('x y') poly = x**3 + y**3 + x*y + 1 # 转换为Poly对象,指定变量顺序 poly_obj = Poly(poly, x, y) # 获取变量列表及各变量的最高次数 vars_list = poly_obj.gens max_degrees = [poly_obj.degree(var) for var in vars_list] # 生成所有指数组合,按总次数降序、x次数降序排列 all_exp_combinations = product(*[range(d, -1, -1) for d in max_degrees]) sorted_exps = sorted(all_exp_combinations, key=lambda t: (-sum(t), -t[0])) # 提取每个指数组合对应的系数 full_coeffs = [poly_obj.get_coeff(exp) for exp in sorted_exps] print(full_coeffs)
输出说明
运行上述代码后,输出结果为:
[1, 0, 0, 1, 0, 1, 0, 0, 0, 1]
对应依次为x³、x²y、xy²、y³、x²、xy、y²、x、y、常数项的系数,完全覆盖了所有可能的单项式,零值系数也被保留。如果需要其他排序顺序,只需修改sorted函数的key参数即可。
关键方法解释
Poly(poly, vars):将普通表达式转为多项式对象,提供系数、次数的便捷操作接口。poly_obj.degree(var):获取指定变量在多项式中的最高次数。poly_obj.get_coeff(exp_tuple):根据指数元组(如(3,0)对应x³y⁰)返回对应单项式的系数,不存在的项直接返回0。
内容的提问来源于stack exchange,提问作者Nikos Pap
相关产品推荐
相关产品推荐

