Matlab 牛顿-拉斐逊法中的振荡和扭转控制

Matlab 牛顿-拉斐逊法中的振荡和扭转控制,matlab,newtons-method,Matlab,Newtons Method,我一直在尝试编写一个MATLAB函数,它通过使用Newton Raphson简单地计算函数的根。该算法的问题是,它在扭转点和根附近发散,并伴随振荡(例如,对于初始猜测为-1的10次迭代后的x^2+2,方法发散)。当我们得到振荡和扭转时,是否有任何令人满意的条件可以识别,而这些振荡和扭转并不以一种非常低效的方式计算迭代次数?我认为您对-1的初始估计很差,因此估计误差很大,这可能是导致算法超调和振荡(最终发散)的原因 你可以考虑通过乘以商 f(xn)/f′(xn)< /代码>来做正的因素。我建议您查

我一直在尝试编写一个MATLAB函数,它通过使用Newton Raphson简单地计算函数的根。该算法的问题是,它在扭转点和根附近发散,并伴随振荡(例如,对于初始猜测为-1的10次迭代后的x^2+2,方法发散)。当我们得到振荡和扭转时,是否有任何令人满意的条件可以识别,而这些振荡和扭转并不以一种非常低效的方式计算迭代次数?

我认为您对
-1
的初始估计很差,因此估计误差很大,这可能是导致算法超调和振荡(最终发散)的原因


<>你可以考虑通过乘以商<代码> f(xn)/f′(xn)< /代码>来做正的因素。我建议您查找自适应连续过松弛的方法(我在这里不详细说明),即(自适应地)根据观察到的收敛过程行为迭代设置松弛参数。

您可能对名为的Matlab文件交换条目感兴趣。它实现了Newton-Raphson方法来提取多项式的根

特别是,此函数在第147行上有一个
语句。简单地替换

while( err > ConvCrit && n < maxIter)

我想你是在试图解一个没有任何真正根的函数。。。所以牛顿-拉斐逊不会为你提供任何初始猜测的结果

while( err > ConvCrit) %removing the maximum iteration criterion