You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SymPy.py获取多元多项式所有变量组合的系数?

如何用SymPy或Julia符号计算包获取多元多项式所有变量组合的系数?

需求是获取多元多项式所有变量组合的单项式(包括系数为0的项),类似MATLAB中coeffs(..., 'All')的效果,而非仅返回存在非零系数的单项式。

MATLAB示例参考

syms a b y
[cxy, txy] = coeffs(ax^2 + by, [y x], 'All')
% 输出:
% cxy =
% [ 0, 0, b]
% [ a, 0, 0]
% txy =
% [ x^2y, xy, y]
% [ x^2, x, 1]

目标是得到完整的单项式集合:

[ x^2y, xy, y]
[ x^2, x, 1]

SymPy实现方案

通过遍历变量的所有可能指数组合(覆盖最高次数范围内的所有情况),生成完整的单项式列表并提取对应系数:

from sympy import symbols, coeff

# 定义符号与多项式
x, y, a, b = symbols('x y a b')
expr = a*x**2 + b*y

# 确定各变量的最高次数(可从多项式自动提取,这里手动指定示例值)
max_degree_x = 2
max_degree_y = 1

# 生成所有指数组合(按y降序、x降序排列,对应MATLAB的变量顺序[y, x])
monom_indices = [(y_deg, x_deg) for y_deg in range(max_degree_y, -1, -1) 
                 for x_deg in range(max_degree_x, -1, -1)]

# 生成对应单项式
txy = [x**x_deg * y**y_deg for (y_deg, x_deg) in monom_indices]

# 提取每个单项式的系数
cxy = [coeff(coeff(expr, x, x_deg), y, y_deg) for (y_deg, x_deg) in monom_indices]

# 按MATLAB格式分组输出
txy_grouped = [txy[i:i+max_degree_x+1] for i in range(0, len(txy), max_degree_x+1)]
cxy_grouped = [cxy[i:i+max_degree_x+1] for i in range(0, len(cxy), max_degree_x+1)]

print("txy:")
for row in txy_grouped:
    print(row)
print("\ncxy:")
for row in cxy_grouped:
    print(row)

运行后输出与MATLAB示例一致,包含所有变量组合的单项式和对应系数(包括0系数项)。


Julia实现方案

Julia中sympy.Poly的monoms()仅返回非零系数项的指数,需手动遍历所有可能的指数组合来生成完整列表:

using SymPy

# 定义符号与多项式
@syms x y a b
expr = a*x^2 + b*y

# 确定各变量的最高次数
max_x = 2
max_y = 1

# 生成所有指数组合(按y降序、x降序排列)
monom_indices = [(y_deg, x_deg) for y_deg in max_y:-1:0 
                 for x_deg in max_x:-1:0]

# 生成对应单项式
txy = [x^x_deg * y^y_deg for (y_deg, x_deg) in monom_indices]

# 提取每个单项式的系数
cxy = [coeff(coeff(expr, x, x_deg), y, y_deg) for (y_deg, x_deg) in monom_indices]

# 按MATLAB格式分组输出
txy_grouped = [txy[i:i+max_x+1] for i in 1:max_x+1:length(txy)]
cxy_grouped = [cxy[i:i+max_x+1] for i in 1:max_x+1:length(cxy)]

println("txy:")
for row in txy_grouped
    println(row)
end
println("\ncxy:")
for row in cxy_grouped
    println(row)
end

该代码会输出完整的单项式集合,满足需求。


内容的提问来源于stack exchange,提问作者xyli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:50:23