牛顿法问题

时间:2015-05-09 15:16:22

标签: matlab newtons-method

我在Matlab中遇到牛顿(切线)方法的问题。

我写了一个程序,那个:

  1. 显示与非线性方程相关的给定函数f的图形,我需要确定哪些解决方案(因此我让用户通过选择[Ox轴]上的点来确定使用图形的第一个近似值离解决方案最近的地方 - >到f和[Ox}的交叉点
  2. 确定等式的解,对应于第一个近似值。

    但是,它仍然不够。

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

    请你给我一些建议吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你使用牛顿的方法,其公式为:

enter image description here

据我记忆,对于Newton方法的收敛(除了连续性的要求),两个条件应该是正确的:

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或维基百科。

祝你好运