共轭梯度法

        最速下降法和牛顿法都有其自身的局限性,而共轭梯度法是介于最速下降法与牛顿法之间的一种无约束优化算法,它具有超线性收敛速度,而且算法简单。此外,与最速下降法类似,共轭梯度法只用到了目标函数及其梯度值,避免了二阶导数(Hess矩阵)的计算,从而降低了计算量和存储量。详细的算法介绍见于我的百度文库。()

%基于Armijo非精确线搜索的再开始FR共轭梯度法的Matlab程序
function [x,val,k]=frcg(fun,gfun,x0)
%功能:用FR共轭梯度法求解无约束问题
%输入:fun、gfun分别是目标函数和其梯度,x0是初始点
%输出:x、val分别是最优点和最优值,k是迭代次数
maxk=5000;%最大迭代次数
rho=0.6;
sigma=0.4;
epsilon=1e-4;
k=0;
n=length(x0);
while k0.0  
            d=-g;
        end
    end
    %检验终止条件
    if norm(g)


 

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))]';


 

你可能感兴趣的:(Matlab,X,共轭方向,共轭梯度法)