📄 newton.m
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -