1.阻尼牛顿法2.牛顿法(作业)
function [x,val,k]=nwfun(fun,gfun,Hess,x0)
%功能:用阻尼牛顿法求解无约束问题: minf(x)
%输入:x0是初始点,fun,gfun,Hess 分别是求目标函数值,梯度,Hesse矩阵的函数
%输出: x,val分别是近似最优点和最优值,k是选代次数。
maxk=10000; %给出最大迭代次数
rho=0.55;sigma=0.4;
k=0; epsilon=1e-5;
while(k<maxk)
gk=feval(gfun,x0);%计算梯度
Gk=feval(Hess,x0);%计算Hesse矩阵
dk=-Gk\gk;%解方程组Gk*dk=-gk,计算搜索方向
if (norm(gk)<epsilon),break; end %检验终止准则
m=0; mk=0;
while (m<20) %用Armij0搜索求步长
if(feval (fun, x0+rho^m*dk)<feval (fun,x0)+sigma*rho^m*gk'*dk)
mk=m; break;
end
m=m+1;
end
x0=x0+rho^mk*dk;
end
k=k+1;
x=x0;
val=feval(fun,x);
function f=fun(x)
f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
function g=gfun(x)
g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';
function He=Hess(x)
n=length(x);
He=zeros(n,n);
He=[1200*x(1)^2-400*x(2)+2, -400*x(1);
-400*x(1), 200 ];
%
% function [x,val,k]=nwfun(fun,gfun,Hess,x0)
% % 功能: 用经典牛顿法求解无约束问题: min f(x)
% % 输入: x0是初始点,fun,gfun,Hess 分别是求目标函数值,梯度,Hesse矩阵的函数
% % 输出: x,val分别是近似最优点和最优值,k是迭代次数。
% maxk=100; % 最大迭代次数
% epsilon=1e-5;
% k=0;
% while k < maxk
% gk = feval(gfun, x0); % 计算梯度
% Gk = feval(Hess, x0); % 计算Hesse矩阵
% if (norm(gk) < epsilon) % 检查梯度是否足够小达到停止条件
% break;
% end
% dk = -Gk \ gk; % 解Hessian矩阵乘以搜索方向等于负梯度的方程
% x0 = x0 + dk; % 沿搜索方向更新解
% k = k + 1;
% end
% x = x0;
% val = feval(fun, x);
% function f=fun(x)
% f=100*(x(2)-x(1)^2)^2+(x(1)-1)^2;
% function g=gfun(x)
% g=[2*x(1)-400*x(1)*(x(2)-x(1)^2)-2,200*(x(2)-x(1)^2)]';
% function He=Hess(x)
% n=length(x);
% He=zeros(n,n);
% He=[2-400*x(2)+1200*x(1)^2 , -400*x(1) ;
% -400*x(1), 200];
调用函数x0=[-1,1]';[x,val,k]=nwfun('fun','gfun','Hess',x0)
阻尼牛顿法结果
x =
1.0000
1.0000
val =
4.6123e-15
k =
1