牛顿法问题

Newton method issue

我对 Matlab 中的 Newton(tangent) 方法有疑问。

我写了一个程序:

  1. 显示给定函数 f 的图形,与非线性方程相关,我需要确定哪些解(因此我让用户使用图形确定第一个近似值,方法是在 [最接近解决方案的牛轴 -> f 与 [Ox)
  2. 的交集
  3. 确定方程的解,对应于一阶近似。

    但是,还是不够。

    是否可以对用户引入的一阶近似进行这种测试,以防止牛顿法阻塞(这意味着在选择的第一个附近没有局部最小值点近似值)?因此,当发生这种情况时,用户会知道选择的点是错误的,因为函数f的图形有两条切线,所以程序不会给出任何东西,但会阻塞。

    你能给我一些建议吗?

如果我没理解错的话,你用的是牛顿法,其公式为:

据我所知,牛顿法的收敛性(除了连续性要求外)应该满足两个条件:

1) 函数的导数在任何阶段都不应该为零。所以你可以在你的代码中插入这样的东西:

if dfdx < 1e-4
disp('Bad starting point')
break;
end

2) 导数的符号不应该随着迭代改变它的符号。因此,插入如下内容:

derivative = temp; %save the value of old derivative in variable

%code that counts derivative for new iteration

if sign(derivative)~=sign(temp)
disp('Bad starting point')
break;
end

如果您想添加更复杂的内容,可以添加二次收敛条件检查。该方法在 here 或维基百科中有详细描述。

祝你好运