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 + -
显示快捷键?