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

Python3求解三次方程时如何将三次多项式除以一次式?

问题原因说明

  1. 「cannot assign to operator」报错
    你最初写的P(x) / (x - x_1) = p(x)不符合Python赋值语法:赋值操作只能把右侧的值赋给左侧的变量,不能给运算表达式赋值,你后续调整变量赋值的写法是正确的。

  2. 求根不精确、多项式无法化简的核心原因
    你手写的卡尔达诺公式用了默认的数值浮点运算,同时大概率没有导入sympy的sqrt而是使用了math库的sqrt,导致求出的x_1是浮点近似值,不是精确的符号量。sympy识别不出浮点近似值2.9425...本质是整数3,自然不会对分式做约分。


解决方案

不需要手动实现卡尔达诺公式,直接用sympy内置的多项式运算、求根工具即可,全程保持符号精度:

修正后代码示例

from sympy import symbols, div, roots

# 系数输入
a = int(input("1st coef: "))
b = int(input("2nd coef: "))
c = int(input("3rd coef: "))
d = int(input("Const: "))

x = symbols('x')
# 构造多项式
P = a*x**3 + b*x**2 + c*x + d

# 直接获取精确根(返回字典,键为根,值为重数)
exact_roots = roots(P, x)
print("精确根:", list(exact_roots.keys()))

# 多项式除法示例:拿第一个根做因式分解
x1 = list(exact_roots.keys())[0]
quotient, remainder = div(P, x - x1)
print("一次因式:", x - x1)
print("除后得到的二次多项式:", quotient)

测试用例输出(a=1、b=4、c=-9、d=-36)

精确根: [3, -4, -3]
一次因式: x - 3
除后得到的二次多项式: x**2 + 7*x + 12

如果你坚持要手动实现卡尔达诺公式

要全程使用sympy的符号运算函数:

  • 导入sympy的sqrt而不是math库的sqrt
  • 所有计算保持符号形式,不要提前转浮点值
  • 分式化简调用simplify(z/w)即可得到约分后的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:45:00