Python3求解三次方程时如何将三次多项式除以一次式?
问题原因说明
「cannot assign to operator」报错
你最初写的P(x) / (x - x_1) = p(x)不符合Python赋值语法:赋值操作只能把右侧的值赋给左侧的变量,不能给运算表达式赋值,你后续调整变量赋值的写法是正确的。求根不精确、多项式无法化简的核心原因
你手写的卡尔达诺公式用了默认的数值浮点运算,同时大概率没有导入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
相关产品推荐
相关产品推荐

