在matlab中实现牛顿方法

时间:2016-12-23 17:18:57

标签: matlab

我想实现牛顿方法。我的代码到目前为止:

f是函数句柄,df区分f(也是函数句柄),x是起始值。

它适用于某些功能,但例如当我要求

newton(@(x) x^2,@(x) 2*x,1)

它是一个无限循环。如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

牛顿方法终止的通常检查是查看另一次迭代的结果是否非常接近"到上一个答案,但您正在使用支票:

if abs(xn) == abs(x)

这基本上要求两个值相同(除了你使用abs,这是一个错误,因为它会接受一个错误的迭代翻转符号的答案) 。对于某些问题,这可能会起作用,但这很可能导致无限循环,迭代循环通过一组非常接近的值。

将终止测试更改为:

if abs(xn-x) < 0.0000001    (or something else very small)

测试xnx的差异是否超过给定的非常小的值,这应该有用。