代码
function [xk,k]=newton_method_pro(x0,f,g,eps,lambda)
% 非线性方程组求解
% 牛顿法 Newton Method , if lambda == 1
% 牛顿下山法 Newton Downhill Method , if lambda != 1
% 迭代格式 xknew=xk-lambda*f(xk)/f'(xk)
% ========================= input
% [x0] 初始向量
% [f] f(x)
% [g] f'(x)
% [eps] 迭代停止条件 |f(x)|<eps
% [lambda]
% ========================= output
% [xk] 不动点解
% [k] 迭代次数
k = 0;
xk = x0;
if lambda == 1
while abs(f(xk))>eps
dk = -g(xk)\f(xk);
xk = xk + lambda * dk;
k = k + 1;
disp(vpa(f(xk)));
end
else % 牛顿下山法
lambda = 1;
while abs(f(xk))>eps
dk = -f(xk)/g(xk);
if abs(f(xk+lambda*dk))<abs(f(xk))
xk = xk + lambda * dk;
k = k + 1;
else
lambda = 0.5*lambda;
end
end
end
end
理论
牛顿法,有时也称为牛顿-拉弗森(Newton-Rap-hson)方法,是迭代函数为
φ
(
x
)
=
x
−
f
(
x
)
/
f
′
(
x
)
φ(x)=x-f(x)/f'(x)
φ(x)=x−f(x)/f′(x)的不动点迭代方法,目的是求解非线性方程
f
(
x
)
=
0
f(x)=0
f(x)=0。
几何意义
求解
f
(
x
)
=
0
f(x)=0
f(x)=0等同于求曲线
f
(
x
)
f(x)
f(x)和
x
x
x坐标轴的交点,如果有近似解
x
k
x_k
xk,在曲线上
(
x
k
,
f
(
x
k
)
)
(x_k,f(x_k))
(xk,f(xk))处的切线方程为
y
=
f
(
x
k
)
+
f
′
(
x
k
)
(
x
−
x
k
)
y=f(x_k)+f'(x_k)(x-x_k)
y=f(xk)+f′(xk)(x−xk),则该切线与
x
x
x轴交于点
(
x
k
+
1
,
0
)
(x_{k+1},0)
(xk+1,0)。
特点
① 收敛时,牛顿法的收敛速度二阶
② 牛顿法的全局收敛性不管对函数还是对初始点,要求都是比较高的(牛顿下山法有效降低了这种要求,迭代函数为
φ
(
x
)
=
x
−
λ
∗
f
(
x
)
/
f
′
(
x
)
φ(x)=x-λ*f(x)/f'(x)
φ(x)=x−λ∗f(x)/f′(x),多了一个每步迭代都变化的
λ
λ
λ,具体思路参考教科书或代码)