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

SymPy/Python中符号多项式因式分解问题咨询

SymPy符号系数多项式因式分解问题解答

问题背景

需要将带符号系数的单变量多项式(字符串形式)转换为因式分解形式,例如输入x**2-c**2期望得到(x+c)*(x-c)。但使用SymPy的factor函数时遇到以下情况:

  • factor(x**2-a**2)可成功得到(x−a)(x+a)
  • factor(x**2-a)返回x²−a,未分解
  • factor(-x**2-a*x-3,x)返回−x²−a x−3,未分解

原因与解决方法

你并没有误用factor函数,核心原因是SymPy的factor默认在有理数域上执行因式分解,而你提到的这些多项式在有理数域内本身不可分解,以下是针对性解决方式:

  • 针对x²−a的分解:
    该多项式在有理数域无法拆分为一次因式乘积(除非a是明确的平方数,但这里a是任意符号)。若要在包含根号的扩展域中分解,需手动指定扩展域参数:

    from sympy import symbols, factor, sqrt
    x, a = symbols('x a')
    factor(x**2 - a, extension=sqrt(a))
    

    执行后会得到(x - sqrt(a))(x + sqrt(a)),符合因式分解需求。

  • 针对−x²−a x−3的分解:
    这个二次多项式的判别式为a²−12,当判别式不是完全平方时,有理数域内无法分解。同样可以通过指定扩展域来完成分解:

    from sympy import symbols, factor, sqrt
    x, a = symbols('x a')
    factor(-x**2 - a*x - 3, extension=sqrt(a**2 - 12))
    

    也可以先求根再构造因式,结果一致。

总结

SymPy的factor函数对符号系数多项式的分解依赖于指定的数域,默认的有理数域覆盖范围有限,当需要分解含根式的因式时,需通过extension参数指定扩展域,才能得到预期的因式分解结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:57:20