2

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

4

3 回答 3

2

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

特别是,这个函数while在第 147 行有一个语句。只需替换

while( err > ConvCrit && n < maxIter)

while( err > ConvCrit) %removing the maximum iteration criterion
于 2013-09-03T15:57:47.027 回答
1

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

您可以考虑通过将商乘以一个正因子来进行连续的过度放松。我建议您查找自适应连续过度松弛的方法(我不会在这里详细说明),它(自适应地)根据观察到的收敛过程的行为迭代地设置松弛参数。f(xn)/f'(xn)

于 2013-09-03T15:55:36.057 回答
0

我认为您正在尝试解决一个没有任何真正根源的函数......所以牛顿拉夫森不会为您提供任何初步猜测的任何结果......

于 2013-12-09T17:21:01.923 回答