我的四次方程求解器的实现出了什么问题?
这是我在 GitHub 上的代码。我遵循了这个:http
://www.1728.com/quartic2.htm
事实上,真正的实现从第 271 行开始,在那里我创建了monic poly。
如果我尝试使用具有 4 个实根的多项式,它可以正常工作(例如使用 3x^4 + 6x^3 - 123x^2 - 126x + 1,080),否则会给出错误的根。
谢谢,
魔方
PS我调用了这个函数__quartic
,因为它还在开发中
如果您的三次求解器没有问题(如 phkahler 建议的那样),那么我敢打赌,这是这些行中的 int 除法:
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
你的立方根求解器有效吗?您应该将其简化为仅返回一个实根以在四次求解器中使用。首先在三次求解器上运行多个测试用例,包括具有 1 个和 3 个实根的方程。只有在验证了这一点之后,您才应该尝试调试四次求解器。
也许我可以帮忙。我写了一个程序和求解四次方程的程序。
我猜你不是用 JavaScript 编写程序。我愿意帮忙(如果可以的话)。