Sympy中能否仅应用外层分配律实现有限表达式展开?
实现SymPy的有限度展开
要实现仅应用外层分配律的部分展开,SymPy没有直接的内置函数,但可以通过自定义函数来实现。针对你的示例,具体代码如下:
from sympy import symbols, Mul x = symbols("x") poly = x*(x**2 + x*(x+2)) def partial_expand(expr): # 仅处理外层乘法包含加法项的情况 if expr.is_Mul and any(arg.is_Add for arg in expr.args): add_term = None other_factors = [] # 分离加法项和其他乘法因子 for arg in expr.args: if arg.is_Add: add_term = arg else: other_factors.append(arg) # 将其他因子分配到加法的每一项,不展开内部结构 return sum(term * Mul(*other_factors) for term in add_term.args) return expr # 调用自定义函数 result = partial_expand(poly) print(result)
运行后会输出:x**3 + x**2*(x + 2),正好符合你想要的仅展开外层分配律的效果。
这个函数的核心逻辑是:识别出外层乘法中的加法项,将其余乘法因子逐一分配到加法的每一项中,保留每一项内部的原有结构不展开。如果需要处理更复杂的嵌套表达式,可以根据需求扩展这个函数的判断逻辑。
内容的提问来源于stack exchange,提问作者user1580256
相关产品推荐
相关产品推荐

