我想实现牛顿方法。我的代码到目前为止:
f是函数句柄,df区分f(也是函数句柄),x是起始值。
它适用于某些功能,但例如当我要求
时newton(@(x) x^2,@(x) 2*x,1)
它是一个无限循环。如何解决这个问题?
答案 0 :(得分:1)
牛顿方法终止的通常检查是查看另一次迭代的结果是否非常接近"到上一个答案,但您正在使用支票:
if abs(xn) == abs(x)
这基本上要求两个值相同(除了你使用abs
,这是一个错误,因为它会接受一个错误的迭代翻转符号的答案) 。对于某些问题,这可能会起作用,但这很可能导致无限循环,迭代循环通过一组非常接近的值。
将终止测试更改为:
if abs(xn-x) < 0.0000001 (or something else very small)
测试xn
和x
的差异是否超过给定的非常小的值,这应该有用。