我最近被分配了一个项目来计算三次多项式的根。然而,问题是根可能非常大,但也非常小。我一直在尝试使用二分法来找到第一个根,因此我从 +/- 开始realmax。我遇到的问题是使用 Matlab 的realmax. 我注意到这realmax并没有给我们很好的小数精度。有没有什么方法可以让 realmax 覆盖的范围很广,同时仍然给我们很好的小数精度?
Matlab 大数和小数
计算科学
浮点
2021-12-10 17:42:58
3个回答
除非您有多个变量的多项式,否则找到三次多项式的根非常简单:根据多项式的系数有一个明确的公式。
正确实现的二分法不能只是找不到根,所以它可能是一个实现问题。
首先,您可能过早停止二分(您是如何实现的?)。如果你从一个区间开始,那么在收敛之前你需要次迭代。因此,您可能不小心在某处限制了“人为”停止收敛的二等分数量。
其次,有一种更好的方法来选择界限。根据维基百科的(复)根的大小的上限是 所以三次方的实根可以在中找到。那里还有许多其他界限。通常需要一个稍大的界限,例如,以避免极端情况。由于在您的情况下您知道系数,因此这个界限比 更容易使用,这是一个非常保守的上限。
realmax
MATLAB 默认使用双精度,大约 16 位。你的意思是你想要一些绝对的精度(例如,精确到 0.01 以内)?如果你有接近realmax(~1e308) 的数字并且你想要 0.01 的精度,你将需要提供大约 310 位精度的数字,这将需要大约 1 kb 的内存 (2 1024 ~ 1e309) 来存储你的数字的尾数。这显然比 64 位双精度数字要慢得多。我不确定这有多可行,但除非你能想出另一种解决方案,否则你可以研究任意精度的算术。现有的 MATLAB 工具箱可能对您有用:http: //www.advanpix.com
其它你可能感兴趣的问题