function [k,x,val]=Newton(fun,ggfun,x0,epsilon)
%功能:Newton法求解无约束优化问题: min f(x)
%输入:fun,gfun分别为目标函数和梯度 x0为初始点
% epsilon 为允许误差
%输出:k是迭代次数,x,val分别是近似最优点和最优值
itermax=5000;% 最大迭代步数
beta=0.5;
sigma=0.4;
k=0;
while(k<itermax)
[gk,Gk]=feval(ggfun,x0);%计算梯度
dk=-Gk*gk;%计算搜索方向
if(norm(gk,2)<epsilon)
break;
end %检验终止准则
m=0;mk=0;
while(m<20) %用Armijo搜索求步长
if(feval(fun,x0+beta^m*dk)<=feval(fun,x0)+sigma*beta^m*gk'*dk)
mk=m;break;
end
m=m+1;
end
x0=x0+beta^mk*dk;
k=k+1;
end
x=x0;
val=feval(fun,x0);