四次方程求解器的实现不正确

1 投票
3 回答
2077 浏览
提问于 2025-04-16 10:12

我的四次方程求解器实现出了什么问题呢?
这是我的代码 在GitHub上。我参考了这个网站: http://www.1728.com/quartic2.htm
实际上,真正的实现从第271行开始,那时我创建了一个单项式多项式。

如果我用一个有4个实数根的多项式来测试,它运行得很好(比如3x^4 + 6x^3 - 123x^2 - 126x + 1,080),但如果不是这种情况,就会给出错误的根。

谢谢,
rubik

附言:我把这个函数叫做 __quartic,因为它还在开发中。

3 个回答

1

也许我可以帮忙。我写了一个解决四次方程的程序和步骤

我猜你不是在用JavaScript写这个程序。如果可以的话,我很乐意提供帮助。

1

你的立方根求解器能正常工作吗?你应该把它简化成只返回一个真实的根,这样才能在四次方程求解器中使用。首先,先对立方根求解器进行多次测试,包括一些有1个和3个真实根的方程。只有在确认这些都没问题后,才可以开始调试四次方程求解器。

4

如果你的三次方求解器没有问题(就像phkahler提到的那样),那么我猜这里可能是因为整数除法的问题:

f = float(c - (3*b**2 / 8))
g = float(d + (b**3/ 8) - (b*c / 2))
h = e - (3*b**4 / 256) + (b**2 * c / 16) - (b*d / 4)

如果你使用的是Python 3.0之前的版本,并且没有从__future__导入除法功能,那么你可能会遇到很大的麻烦。比如说,如果b等于3,那么(3*b**2/8)的结果会因为整数除法而等于3,而不是正确的浮点数结果3.375。解决这个问题的最好方法是,在开始计算之前,把a、b、c、d和e都转换成浮点数。你在计算f和g之后再转换成浮点数其实是多余的,这样做并没有太大帮助。

想了解更多关于这个除法问题及其历史,可以查看以下链接:

http://www.python.org/dev/peps/pep-0238/

http://python-history.blogspot.com/2009/03/problem-with-integer-division.html

撰写回答