我正在寻找一个非常快速的多项式根查找器,希望使用 matlab 代码。我不需要非常准确的结果,小数点后 2-3 位就可以了。此外,该方法应该能够选择性地将根的初始猜测作为输入。如果最初的猜测很接近,这应该会加快这个过程。
我需要这个做什么?我正在处理图像,我正在实施的方法需要在图像中的每个像素处找到多项式的根。鉴于典型图像来自 512x512 及以上,如果需要,该方法必须以牺牲准确性为代价快速。
我正在寻找一个非常快速的多项式根查找器,希望使用 matlab 代码。我不需要非常准确的结果,小数点后 2-3 位就可以了。此外,该方法应该能够选择性地将根的初始猜测作为输入。如果最初的猜测很接近,这应该会加快这个过程。
我需要这个做什么?我正在处理图像,我正在实施的方法需要在图像中的每个像素处找到多项式的根。鉴于典型图像来自 512x512 及以上,如果需要,该方法必须以牺牲准确性为代价快速。
如果你有一个合理的起始猜测,并且你试图找到一个根的函数不是过于复杂,那么你就无法击败牛顿的方法。它也很容易实现——大多数语言的 10 行练习。
如果您没有准备好初步猜测,我会尝试Bairstow 的方法。如果需要,还可以进行牛顿细化(但如果您对 2-3 位数字感到满意,则可能不会)。
为了完成数值方法的枚举,如果已知的根确实是下一个多项式的根的良好近似,那么可以使用 Weierstraß 方法,俗称 Durand-Kerner 方法。它一次更新所有根,并且与牛顿法一样快,实际上是牛顿法用于多维问题。
Aberth-Ehrlich 方法是相关的,但不确定更高的计算量是否会带来整体更快的收敛。
此外,由于您正在进行某种光线追踪,由多项式曲面与光线相交产生的单变量多项式,您可以将图像划分为 6x6 或 8x8 块,计算中心像素的根,然后计算梯度交点处的曲面。您可以通过使用衍生代码生成器 Tapenade 来获得有关如何做到这一点的灵感。
使用点和梯度对于切平面方程,通过与光线相交,您可以获得更好的初始近似值其他像素首先与切平面。
检查,这发生在接近视觉轮廓的地方。这些是任何方法中的关键案例,因为它们有多个或非常接近的根源。