我在Matlab中遇到牛顿(切线)方法的问题。
我写了一个程序,那个:
f
的图形,我需要确定哪些解决方案(因此我让用户通过选择[Ox轴]上的点来确定使用图形的第一个近似值离解决方案最近的地方 - >到f
和[Ox}的交叉点确定等式的解,对应于第一个近似值。
但是,它仍然不够。
是否有可能对用户引入的第一个近似进行这样的测试,它会阻止牛顿方法阻塞(这意味着在选择的第一近似的vecinity中没有局部最小点) ?因此,当这样的事情发生时,用户会知道选择的点是错误的,因为函数f
的图形有两个切线,所以程序不会给出任何东西,但会阻塞。 / p>
请你给我一些建议吗?
答案 0 :(得分:1)
如果我理解正确,你使用牛顿的方法,其公式为:
据我记忆,对于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或维基百科。
祝你好运