如何用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
相关产品推荐
相关产品推荐

