zoukankan      html  css  js  c++  java
  • FR共轭梯度法 matlab

    % FR共轭梯度法
    function sixge
    x0=[1,0]';
    [x,val,k]=frcg('fun','gfun',x0)
    end
    
    function f=fun(x) 
    f=100*(x(1)^2-x(2))^2+(x(1)-1)^2; 
    end
    
    function g=gfun(x) 
    g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1), -200*(x(1)^2-x(2))]'; 
    end
    
    
    function [x,val,k]=frcg(fun,gfun,x0) 
    maxk=5000; %最大迭代次数 
    rho=0.6;sigma=0.4; 
    k=0; epsilon=1e-4; 
    n=length(x0); 
    while(k<maxk) 
        g=feval(gfun,x0); %计算梯度
        itern=k-(n+1)*floor(k/(n+1)); 
        itern=itern+1; %计算搜索方向 
        if(itern==1) 
            d=-g; 
        else
            beta=(g'*g)/(g0'*g0); 
            d=-g+beta*d0; 
            gd=g'*d; 
            if(gd>=0.0) 
                d=-g; 
            end
        end
        if(norm(g)<epsilon), break; end
        %检验终止条件 
        m=0; mk=0; 
        while(m<15) %Armijo搜索 
            if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d) 
                mk=m; break; 
            end
            m=m+1;
        end
        x0=x0+rho^mk*d; 
        val=feval(fun,x0); 
        g0=g; d0=d; 
        k=k+1;
    end
    x=x0; 
    val=feval(fun,x);
    end
    

      

    朝闻道
  • 相关阅读:
    逆元(费马小定理求法)
    CodeForces
    lower_bound and upper_bound
    HDU 4825 Xor Sum
    1030: [JSOI2007]文本生成器
    1070: [SCOI2007]修车
    agc 027 B
    P2664 树上游戏
    CF 314 E. Sereja and Squares
    4237: 稻草人
  • 原文地址:https://www.cnblogs.com/wander-clouds/p/9238998.html
Copyright © 2011-2022 走看看