如何展开SymPy中乘法表达式的括号以拆分单项式?
SymPy展开表达式并拆分单项式的解决方案
直接展开表达式
SymPy内置的expand()函数可以直接完成括号展开,完全满足需求:
from sympy import * c1, c2, x = symbols("c1, c2, x") expr = c2*x*(c1*x + c2*x) # 执行展开 expanded_expr = expand(expr) print(expanded_expr) # 输出:c1*c2*x**2 + c2**2*x**2
拆分单个单项式
展开后的表达式属于Add类型,可直接通过迭代或as_ordered_terms()方法提取每个单项式:
# 方法1:直接迭代Add对象 terms = [term for term in expanded_expr] # 方法2:使用as_ordered_terms()(按字典序排序项) terms = expanded_expr.as_ordered_terms() # 遍历输出每个项 for term in terms: print(term)
执行后会分别输出:
c1*c2*x**2 c2**2*x**2
关于Poly转换的问题
转Poly再还原出现非确定性错误,通常是因为Poly默认会按特定变量顺序(字典序)重新排列项,且内部会对系数做归一化处理,导致还原后的表达式顺序或形式和预期不一致。相比之下,用expand()配合直接拆分的方法更直观、可靠,完全避免这类问题。
内容的提问来源于stack exchange,提问作者Shaharg
相关产品推荐
相关产品推荐

