newton.m

来自「数值分析, 同济大学教材<<现代数值数学和计算>>数值分」· M 代码 · 共 54 行

M
54
字号

function [x, it, hist, flag] = newton(x0, f, g, maxit, tol, dnhl)
if nargin < 6 
  dnhl = 1;
  if nargin < 5 
    tol = 1e-6;
    if nargin < 4 
      maxit = 100;
      if nargin < 3 
        error('Too few input!');
      end
    end
  end
end

flag = 1;
x = x0;
hist = x;
fx = feval(f, x);
for it = 1 : maxit
  if abs(fx) < tol 
    disp('Newton Iteration succeeds.');
    return;
  end
  d = fx / feval(g, x);
  if dnhl == 1
    lambda = 1.0;
    xn = x - d;
    fn = feval(f, xn);
    while abs(fn) >= abs(fx)
      disp('Enter downhill.');
      lambda = lambda * 0.5;
      if lambda < tol
        flag = 0;
        error('Too short step!');
      end
      xn = x - lambda * d;
      fn = feval(f, xn);
    end
    x = xn;
    fx = fn;
  else
    x = x - d;
    fo = fx;
    fx = feval(f, x);
    if abs(fx) > abs(fo)
      warning('An uphill direction!');
    end
  end
  hist = [hist x];
end
flag = 0;
disp('Newton Iteration fails!');

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?