我正在尝试实现寻根算法。我正在使用在数值配方中找到的混合 Newton-Raphson 算法,效果非常好。但是我在括号中遇到了问题。
在实现求根算法时,我意识到在某些情况下,我的函数有 1 个实根和所有其他虚根(其中几个,通常为 6 或 9 个)。我感兴趣的唯一根源是真正的根源,所以问题不存在。问题是该函数像三次函数一样接近根,与 y=0 轴的点接触......
Newton-Rapson 方法需要一些不同符号的括号,而我发现的所有括号方法都不适用于这种特定情况。
我能做些什么?在我的程序中找到那个根非常重要......
编辑:更多问题:有时由于真的很小的数值错误,比如说1e-6
“三次”函数的某个值的变化没有那个真正的根,它只是一个可忽略的虚数部分的虚数......(用matlab检查)
编辑2:有关该问题的更多信息。
好的,我需要寻根算法。
我有的信息:
- 我需要找到的根在 [0-1] 之间,如果在该部分之外还有更多根,我对它们不感兴趣。
- 根是真实的,可能有虚构的根,但我不想要它们。
- 可能所有其余的根都将是虚构的
- 在那一点上,根可能是双倍的,但我认为这实际上与数值分析问题无关
- 在整个计算过程中,我需要多次使用求根算法,但函数始终是多项式
- 在求根的一种特殊情况下,我的多项式将类似于使 Y=0 与该点接触的二次函数。一个真实案例的例子:
- 该系数可能不是 100% 精确的,并且真正轻微的不精确可能会使函数不接触 Y=0 轴。
- 我无法解决这种特定情况,因为在其他情况下,多项式可能非常正常并且不会产生任何“奇怪”的事情。
- 我实际使用的方法是 NewtonRaphson 混合,如果导数非常小,它会进行二等分而不是 NewRaph(在数值配方中找到)。
Matlab对图像上的函数的回答:roots:
0.853553390593276 + 0.353553390593278i
0.853553390593276 - 0.353553390593278i
0.146446609406726 + 0.353553390593273i
0.146446609406726 - 0.353553390593273i
0.499999999999996 + 0.000000040142134i
0.499999999999996 - 0.000000040142134i
该函数是我准备的一个真实示例,我知道我想要的答案是0.5
注意:我还没有完全检查你们给我的一些答案(谢谢!),我只是想提供我已经完成问题的所有信息。