我一直在尝试编写一个MATLAB函数,它只使用Newton-Raphson计算函数的根。该算法的问题在于它在扭转点和根部附近发生振荡(例如,在10次迭代后x ^ 2 + 2,初始猜测-1,方法发散)。是否有任何令人满意的条件来确定何时我们得到的振荡和扭转不会以非常低效的方式计算迭代次数?
答案 0 :(得分:2)
您可能对名为"Newton Raphson Solver with adaptive Step Size"的Matlab文件交换条目感兴趣。它实现了Newton-Raphson方法来提取多项式的根。
特别是,此功能在第147行上有一个while
标记。只需替换
while( err > ConvCrit && n < maxIter)
与
while( err > ConvCrit) %removing the maximum iteration criterion
答案 1 :(得分:1)
我认为你对-1
的初始估计很差,因此估计误差很大,这可能导致算法过冲和振荡(并最终发散)。
您可以考虑通过将商f(xn)/f'(xn)
乘以正因子来进行successive over-relaxation。我建议你查找自适应连续过度放松的方法(这里我不会详细说明),(自适应地)根据观察到的收敛过程的行为迭代地设置松弛参数。 / p>
答案 2 :(得分:0)
我认为你正在尝试解决一个没有任何真正根源的函数......所以newton raphson不会为任何初始猜测提供任何结果..