精华内容
下载资源
问答
  • 最小值 matlab

    2010-11-18 22:23:17
    一个求数组里最小值matlab源代码……
  • 布谷鸟求解函数的最小值,这是布谷鸟算法与莱维飞行的详细讲解(https://blog.csdn.net/zyqblog/article/details/80905019) 。
  • 布谷鸟求解函数的最小值,这是布谷鸟算法与莱维飞行的详细讲解;带注释的布谷鸟算法,清晰易懂,简洁好用,可以更改适应度函数应用不同的场景。
  • 最小值. 函数图像如图(及程序)所示: clear all; close all; clc; x=0:0.01:10; y=x+10*cos(5*x)+7*sin(4*x); figure plot(x,y) grid on xlabel('x') ylabel('f(x)') title('f(x)=x+10*cos(5*x)+7*sin(4*x)')...

    用标准遗传算法求函数:

    x+10*cos(5*x)+7*sin(4*x)

     的最小值.

    函数图像如图(及程序)所示:


    clear all;
    close all;
    clc;
    x=0:0.01:10;
    y=x+10*cos(5*x)+7*sin(4*x);
    figure
    plot(x,y)
    grid on
    xlabel('x')
    ylabel('f(x)')
    title('f(x)=x+10*cos(5*x)+7*sin(4*x)')



    仿真过程如下:

    (1)初始化种群数目NP=50

       染色体二进制编码长度L=20

       最大进化代数G=100

       交叉概率Pc=0.8

       变异概率pm=0.05

    (2)a.产生初始化种群,将二进制编码转化为十进制;

       b.计算个体适应度,并且进行归一化操作;

       c.在选择操作中,选择基于轮盘赌的方式进行;

       d.在交叉和变异过程,选择基于概率的方式进行;

       e.产生新的种群,并把历代的最优个体留在新的种群之中;

       f.重复b——e过程,进行下一步遗传操作。

    (3)遗产算法的终止条件判断:

       I.判断是否满足终止条件,若满足,则终止搜索过程,输出最优值;若不满足则继续进行迭代;

       II.为了防止遗传过程过长,可以设置遗传代数控制搜索过程。


    程序如下:

    function result=func(x)
    fit=x+10*cos(5*x)+7*sin(4*x);
    result=fit;


    %%%%%%%%%%%%%%求最小值%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%参数初始化%%%%%%%%%%%%%%%%%%%%%%
    clear all;%清变量
    close all;%清图
    clc;%清屏

    NP=50;%种群规模为50个
    L=20 ;%二进制字串长度
    Pc=0.8;%交叉概率
    Pm=0.05;%变异概率
    G=100;%max generation
    Xs=10;%上限
    Xx=0;%下限
    f=randint(NP,L);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%算法循环部分%%%%%%%%%%%%%
    for k =1:G
        for i=1:NP
        U=f(i,:);
        m=0;
        for j=1:L
            m=U(j)*2^(j-1)+m;
        end
        x(i)=Xx+m*(Xs-Xx)/(2^L-1);
        Fit(i)=-func(x(i));
        end
        maxFit=max(Fit);%最大值
        minFit=min(Fit);%最小值
        rr=find(Fit==maxFit);
        fBest=f(rr(1,1),:);%历代最小值
        xBest=x(rr(1,1));
        Fit=(Fit-minFit)/(maxFit-minFit);
        %%%%基于轮盘赌的选择操作%%%%%%%
        sum_Fit=sum(Fit);
        fitvalue=Fit./sum_Fit;
        fitvalue=cumsum(fitvalue);
        ms=sort(rand(NP,1));
        fiti=1;
        newi=1;
        while newi<=NP
            if(ms(newi)<fitvalue(fiti))
                nf(newi,:)=f(fiti,:);
                newi=newi+1  ;   
            else
                fiti=fiti+1;
             end
        end
        %%%%基于概率的交叉操作%%%%%
        for i=1:2:NP
            p=rand;
               if p<Pc
                q=randint(1,L);         
                    for j=1:L
                            if q(j)==1;
                            temp=nf(i+1,j);
                            nf(i+1,j)=nf(i,j);
                            nf(i,j)=temp;
                            end
                
                    end
                end
        end
        %%%%基于概率的变异操作%%%
        
        for m=1:NP
            for n=1:L
                r=rand(1,1);
                if r<Pm
                    nf(m,n)=rand(1,1)*(Xs-Xx)+Xx;
                end
            end
        end
        f=nf;
        f(1,:)=fBest;
        trace(k)=-maxFit;
          
    end
    xBest;
    figure
    plot(trace)
    xlabel('迭代次数')
    ylabel('目标函数值')
    title('适应度进化曲线')
    x=xBest
    y=-maxFit


    运行结果:

             

    展开全文
  • 4 附:CS算法求解函数最小值代码 5 源码下载 6 参考文献 1 从布谷鸟的育雏到布谷鸟算法 布谷鸟不会做窝,也不会育雏,在春末夏初,向北飞,趁别的鸟(宿主鸟)外出觅食时,将卵蛋产在宿主鸟窝里,让宿主鸟...


    1 从布谷鸟的育雏到布谷鸟算法

    这里写图片描述
    布谷鸟不会做窝,也不会育雏,在春末夏初,向北飞,趁别的鸟(宿主鸟)外出觅食时,将卵蛋产在宿主鸟窝里,让宿主鸟抚养自己孩子 。当然,布谷鸟在产卵前,为了不被宿主鸟发现鸟窝的异常,会把宿主的卵移走。而一旦靠养母孵化的雏鸟,也有将宿主鸟本身的雏鸟推出巢穴的本性,并且会模仿其他鸟的行为来增大不被宿主鸟发现的概率1

    2009年,Xin-She Yang2 与Suash Deb在《Cuckoo Search via Levy Flights》一文中提出了布谷鸟算法(简称CS)。假设每只布谷鸟一次只产一枚卵 ,并且宿主鸟发现外来鸟蛋后,就舍弃该鸟窝,另寻他地建造新的鸟窝 ,那么可以认为 :鸟窝=卵蛋=解,卵蛋是否能够成功被宿主鸟孵化并茁长成长是衡量解好坏的唯一标准 。布谷鸟寻找鸟窝下蛋的过程就是在D维空间中寻找解的过程 ,而鸟窝的好坏象征着解的好坏。

    2 布谷鸟算法

    布谷鸟算法是布谷鸟育雏行为和萊维飞行结合的一种算法 。
    这里写图片描述
    在CS算法中,有两个路径(或者说成是两个位置的更新)备受关注:

    • 一个是布谷鸟寻找鸟窝下蛋的寻找路径是采用早已就有的萊维飞行3,如上图所示,无敌的走位是一种长步长与短步长相间的走位,这其实就是萊维飞行的主要特点,学者们也证实了自然界中很多鸟类的飞行也遵从萊维飞行,这也是最有效寻找目标的方法之一 。所以采用萊维飞行更新鸟窝位置的公式被定义如下:

      Xt+1=Xt+αLevy(β) , 公式(1)

      其中 , α是步长缩放因子,Levy(β)是萊维随机路径, 就是.运算

    • 另一个是宿主鸟以一定概率Pa发现外来鸟后重新建窝的位置路径,这个路径可以用萊维飞行或者随机方式4,(本文采用随机) , 除此之外,这个位置普遍采用偏好随机游动的方式,即利用了其他鸟窝的相似性5。所以新建的鸟窝的位置的公式被定义如下:

      Xt+1=Xt+rHeaviside(Paϵ)(XiXj), 公式(2)

      其中,r,ϵ 是服从均匀分布的随机数,Heaviside(x) 是跳跃函数(x>0,=1;x<0,=0) , Xi,Xj 是其他任意的连个鸟窝。

    CS算法的执行过程如下:
    这里写图片描述

    3 萊维飞行与公式(1)的深层含义

    从数学的发展史上说,早在1937年, P. Levy6确定了对称Levy稳定分布的积分形式为Levy(s)=1π0+exp(β|k|λ)cos(ks)dk ,但是该积分并没有明确的解析,要生成一个服从该分布的随机数是难上加难的问题,不过当ss0>0s时, Levy(s)λβΓ(λ)sin(πλ2)π.1s1+λ,通常β=1 。这个近似的分布呈现幂律行为(重尾或长尾巴),这个行为类似于二八原则[^6],或者说少部分人集中了世界大部分的财富,正如下图所示的,这个分布总是有一个长尾巴或者称之为重尾巴,有时也叫做一个翼。
    这里写图片描述

    萊维飞行的方差随时间呈现指数的关系,即σ2(t)t3β,1β3,所以萊维飞行比布朗运动更加的出色。

    此后,不少学者根据这个近似部分提出很多用于生成服从萊维分布的随机数的实现方法,其中就包含了Mantegna7在1994年提出的一种用正太分布求解随机数的方法,有时也叫Mantegna方法,生成服从萊维分布的随机步长的方法如下:

    s=u|v|1β

    其中,uN(0,σ2),vN(0,1), σ={Γ(1+β)sin(πβ2)βΓ(1+β2)2β12}1β

    在matlab中用Mantegna方法模拟二维平面萊维飞行:

    % Mantegna方法模拟萊维飞行
    %author zhaoyuqiang 
    x = [0,0];
    y = [0,0];
    beta = 1.5;
    sigma_u = (gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);
    sigma_v = 1;
    for i=1:1000
        u = normrnd(0,sigma_u);
        v = normrnd(0,sigma_v);
        s = u/(abs(v))^(1/beta);
        x(:,1) = x(:,2);
        x(:,2) = x(:,1)+1*s;
        u = normrnd(0,sigma_u);
        v = normrnd(0,sigma_v);
        s = u/(abs(v))^(1/beta);
        y(:,1) = y(:,2);
        y(:,2) = y(:,1)+1*s;
        plot(x,y);
        hold on;
    end
    axis square;

    这里写图片描述

    从模拟上来看,图形的路径确实符合萊维飞行的长短相间的特征,Mantegna用正太分布实现了生成服从萊维分布随机步长的方法是可靠的 。

    时间到了2009年,Xin-She Yang 与Suash Deb提出了布谷鸟算法,同时,Yang把Levy分布函数经过简化和傅立叶变换后得到其幂次形式的概率密度函数8 :Levyu=tβ,1β3 。并把萊维飞行用在了鸟窝位置的更新上,于是产生了公式(1)Xt+1=Xt+αLevy(β) 。这个计算式其实就是Xt+1=Xt+αSS就是服从Levy分布Levyu=tβ,1β3的随机步长,考虑到具体怎么计算时,Yang采用的正是1994年的Mantegna方法 。

    所以在布谷鸟算法中,我们可以用下面的具体计算公式来计算鸟窝的更新位置:

    Xt+1=Xt+αS=Xt+α.N(0,σ2)|N(0,1)|1β

    其中,σ={Γ(1+β)sin(πβ2)βΓ(1+β2)2β12}1β,通常,β=1.5

    这在matlab等一些编程工具中都是可以计算的。

    值得一提的是,α是步长缩放因子,通常α=1,在之后的布谷鸟算法发展中,针对α 有各种各样的变种,如Yang[^8]为了让算法适应不同的解,让α=α0(XiXj),Xi,Xj为任意不同的解 。

    4 附:CS算法求解函数最小值代码

    求函数f(x)=i=1nxi2,(20x20n=10)最小值

    % Script 布谷鸟算法,求解函数最小值
    % @author zhaoyuqiang 
    %#ok<*SAGROW> Remove hints of syntax
    %#ok<*CLALL>
    %#ok<*FNDSB>
    clear all ; 
    close all ;
    clc ;
    N = 25; % Number of nests(The scale of solution)
    D = 10 ; %  Dimensionality of solution
    T = 200 ; % Number of iterations
    Xmax = 20 ;
    Xmin = -20 ;
    Pa = 0.25 ; % Probability of building a new nest(After host bird find exotic bird eggs)
    nestPop = rand(N,D)*(Xmax-Xmin)+Xmin ;  % Random initial solutions
    for t=1:T
        levy_nestPop =  func_levy(nestPop,Xmax,Xmin) ; % Generate new solutions by Levy flights
        nestPop = func_bestNestPop(nestPop,levy_nestPop);  % Choose a best nest among  new and old nests     
        rand_nestPop = func_newBuildNest(nestPop,Pa,Xmax,Xmin); % Abandon(Pa) worse nests and build new nests by (Preference random walk )
        nestPop = func_bestNestPop(nestPop,rand_nestPop) ; % Choose a best nest among  new and old nests
        [~,index] = max(func_fitness(nestPop)) ; % Best nests
        trace(t) = func_objValue(nestPop(index,:)) ; 
    end
    figure 
    plot(trace);
    xlabel('迭代次数') ;
    ylabel('适应度值') ;
    title('适应度进化曲线') ;
    function [ result ] = func_levy( nestPop,Xmax,Xmin)
    %FUNC_LEVY : Update position of nest by using Levy flights
    %@author : zhaoyuqiang 
    [N,D] = size(nestPop) ;
    % Levy flights by Mantegna's algorithm
    beta = 1.5 ;
    alpha = 1 ;
    sigma_u = (gamma(1+beta)*sin(pi*beta/2)/(beta*gamma((1+beta)/2)*2^((beta-1)/2)))^(1/beta) ;
    sigma_v = 1 ;
    u = normrnd(0,sigma_u,N,D) ;
    v = normrnd(0,sigma_v,N,D) ;
    step = u./(abs(v).^(1/beta)) ;
    % alpha = 0.1.*(nestPop(randperm(N),:)-nestPop(randperm(N),:)); % Bad effect
    nestPop = nestPop+alpha.*step ;
    % Deal with bounds
    nestPop(find(nestPop>Xmax)) = Xmax ; %#ok<*FNDSB>
    nestPop(find(nestPop<Xmin)) = Xmin ;
    result = nestPop ; 
    end
    function [ nestPop ] = func_bestNestPop( nestPop,new_nestPop )
    %FUNC_ 此处显示有关此函数的摘要
    %@author zhaoyuqiang
    index = find(func_fitness(nestPop)<func_fitness(new_nestPop)) ;
    nestPop(index,:) = new_nestPop(index,:) ;
    end
    function [ nestPop ] = func_newBuildNest( nestPop ,Pa ,Xmax,Xmin)
    %FUNC_NEWBUILDNEST new solutions are generated by using the similarity 
    % between the existing eggs/solutions and the host eggs/solutions with a discovery rate pa .
    %@author zhaoyuqiang
    [N,D] = size(nestPop) ;
    nestPop = nestPop+rand.*heaviside(rand(N,D)-Pa).*(nestPop(randperm(N),:)-nestPop(randperm(N),:));
    % Deal with bounds
    nestPop(find(nestPop>Xmax)) = Xmax ; %#ok<*FNDSB>
    nestPop(find(nestPop<Xmin)) = Xmin ;
    end

    这里写图片描述

    5 源码下载

    https://download.csdn.net/download/g425680992/10517545

    6 参考文献


    1. 布谷鸟搜索算法研究综述 , 兰少峰
    2. Cuckoo search via Lévy flights. Yang XS
    3. Cuckoo search via Lévy flights. Yang XS
    4. 逐维改进的布谷鸟搜索算法 , 王李进
    5. Cuckoo search for inverse problems and simulated-driven shape optimization ,Yang XS
    6. P. Levy, Theoric de l’Addition des Variables Aleatoires
    7. Nature-Inspired Metaheuristic Algorithms Second Edition,Yang XS
    8. Nature-Inspired Metaheuristic Algorithms Second Edition,Yang XS
    展开全文
  • 题目:分别用最速下降法、DFP法求解问题:1、2、1取初始点,通过Matlab编程实现求解过程。1公用函数如下:1、functionf= fun( X )%所求问题目标函数f=X(1)^2-10*cos(2*pi*X(1))+10+X(2)^2-10*cos(2*pi*X(2))+10+X(3)...

    题目:分别用最速下降法、DFP法求解问题:

    1、

    2、

    1取初始点,通过Matlab编程实现求解过程。

    1公用函数如下:

    1、functionf= fun( X )

    %所求问题目标函数

    f=X(1)^2-10*cos(2*pi*X(1))+10+X(2)^2-10*cos(2*pi*X(2))+10+X(3)^2-10*cos(2*pi*X(3))+10;

    end

    2、functiong= gfun( X )

    %所求问题目标函数梯度

    g=[2*X(1)+20*pi*sin(2*pi*X(1)),2*X(2)+20*pi*sin(2*pi*X(2)),2*X(3)+20*pi*sin(2*pi*X(3))];

    end

    3、functionHe = Hess( X )

    %所求问题目标函数Hesse矩阵

    n=length(X);

    He=zeros(n,n);

    He=[2+40*pi*pi*cos(X(1)),0,0;

    0,2+40*pi*pi*cos(X(2)),0;

    0,0,2+40*pi*pi*cos(X(3))];

    end

    解法一:最速下降法

    function[ x,val,k ] = grad( fun,gfun,x0 )

    %功能:用最速下降法求无约束问题最小值

    %输入:x0是初始点,fun和gfun分别是目标函数和梯度

    %输出:x、val分别是最优点和最优值,k是迭代次数

    maxk=5000;%最大迭代次数

    rho=0.5;sigma=0.4;

    k=0;eps=10e-6;

    while(k

    g=feval(gfun,x0);%计算梯度

    d=-g;%计算搜索方向

    if(norm(d)

    break;

    end

    m=0;mk=0;

    while(m<20)

    if(feval(fun,x0+rho^m*d)

    mk=m;break;

    end

    m=m+1;

    end

    x0=x0+rho^mk*d;

    k=k+1;

    end

    x=x0;

    val=feval(fun,x0);

    end

    解法二:DFP法

    function[ x,val,k ] = dfp( fun,gfun,x0 )

    %功能:用DFP法求无约束问题最小值

    %输入:x0是初始点,fun和gfun分别是目标函数和梯度

    %输出:x、val分别是最优点和最优值,k是迭代次数

    maxk=5000;%最大迭代次数

    rho=0.5;sigma=0.4;

    k=0;eps=10e-6;

    n=length(x0);

    Hk=inv(feval('Hess',x0));

    while(k

    gk=feval(gfun,x0);

    if(norm(gk)

    break;

    end

    dk=-Hk*gk';

    dk=dk';

    m=0;mk=0;

    while(m<20)

    if(feval(fun,x0+rho^m*dk)

    mk=m;break;

    end

    m=m+1;

    end

    %DFP校正

    x=x0+rho^mk*dk;

    sk=x-x0;

    yk=feval(gfun,x)-gk;

    if(sk'*yk>0)

    Hk=Hk-(((Hk*yk')*yk)*Hk)/(yk*Hk*yk')+(sk'*sk)/(sk*yk');

    end

    k=k+1;

    x0=x;

    end

    val=feval(fun,x0);

    end

    2取初始点,通过Matlab编程实现求解过程。

    1公用函数如下:

    1、functionf= fun( X )

    %所求问题目标函数

    f=X(1)^2/4000-cos(X(1)/sqrt(1))+1+X(2)^2/4000-cos(X(2)/sqrt(2))+1+X(3)^2/4000-cos(X(3)/sqrt(3))+1;

    end

    2、functiong= gfun( X )

    %所求问题目标函数梯度

    g=[X(1)/2000+sin(X(1)/sqrt(1))/sqrt(1),X(2)/2000+sin(X(2)/sqrt(2))/sqrt(2),X(3)/2000+sin(X(3)/sqrt(3))/sqrt(3)]

    end

    3、functionHe = Hess( X )

    %所求问题目标函数Hesse矩阵

    n=length(X);

    He=zeros(n,n);

    He=[1/2000+cos(X(1)),0,0;

    0,1/2000+cos(X(2))/2,0;

    0,0,cos(X(3)/3)];

    end

    解法一:最速下降法

    function[ x,val,k ] = grad( fun,gfun,x0 )

    %功能:用最速下降法求无约束问题最小值

    %输入:x0是初始点,fun和gfun分别是目标函数和梯度

    %输出:x、val分别是最优点和最优值,k是迭代次数

    maxk=5000;%最大迭代次数

    rho=0.5;sigma=0.4;

    k=0;eps=10e-6;

    while(k

    g=feval(gfun,x0);%计算梯度

    d=-g;%计算搜索方向

    if(norm(d)

    break;

    end

    m=0;mk=0;

    while(m<20)

    if(feval(fun,x0+rho^m*d)

    mk=m;break;

    end

    m=m+1;

    end

    x0=x0+rho^mk*d;

    k=k+1;

    end

    x=x0;

    val=feval(fun,x0);

    end

    2.1.

    2.2解法二:DFP法

    function[ x,val,k ] = dfp( fun,gfun,x0 )

    %功能:用DFP法求无约束问题最小值

    %输入:x0是初始点,fun和gfun分别是目标函数和梯度

    %输出:x、val分别是最优点和最优值,k是迭代次数

    maxk=5000;%最大迭代次数

    rho=0.5;sigma=0.4;

    k=0;eps=10e-6;

    n=length(x0);

    Hk=inv(feval('Hess',x0));

    while(k

    gk=feval(gfun,x0);

    if(norm(gk)

    break;

    end

    dk=-Hk*gk';

    dk=dk';

    m=0;mk=0;

    while(m<20)

    if(feval(fun,x0+rho^m*dk)

    mk=m;break;

    end

    m=m+1;

    end

    %DFP校正

    x=x0+rho^mk*dk;

    sk=x-x0;

    yk=feval(gfun,x)-gk;

    if(sk'*yk>0)

    Hk=Hk-(((Hk*yk')*yk)*Hk)/(yk*Hk*yk')+(sk'*sk)/(sk*yk');

    end

    k=k+1;

    x0=x;

    end

    val=feval(fun,x0);

    end

    展开全文
  • 求解函数最小值的自适应遗传算法 (Matlab程序)
  • 題目:分別用最速下降法、DFP法求解問題:1、2、1取初始點,通過Matlab編程實現求解過程。1公用函數如下:1、functionf= fun( X )%所求問題目標函數f=X(1)^2-10*cos(2*pi*X(1))+10+X(2)^2-10*cos(2*pi*X(2))+10+X(3)...

    題目:分別用最速下降法、DFP法求解問題:

    1、

    2、

    1取初始點,通過Matlab編程實現求解過程。

    1公用函數如下:

    1、functionf= fun( X )

    %所求問題目標函數

    f=X(1)^2-10*cos(2*pi*X(1))+10+X(2)^2-10*cos(2*pi*X(2))+10+X(3)^2-10*cos(2*pi*X(3))+10;

    end

    2、functiong= gfun( X )

    %所求問題目標函數梯度

    g=[2*X(1)+20*pi*sin(2*pi*X(1)),2*X(2)+20*pi*sin(2*pi*X(2)),2*X(3)+20*pi*sin(2*pi*X(3))];

    end

    3、functionHe = Hess( X )

    %所求問題目標函數Hesse矩陣

    n=length(X);

    He=zeros(n,n);

    He=[2+40*pi*pi*cos(X(1)),0,0;

    0,2+40*pi*pi*cos(X(2)),0;

    0,0,2+40*pi*pi*cos(X(3))];

    end

    解法一:最速下降法

    function[ x,val,k ] = grad( fun,gfun,x0 )

    %功能:用最速下降法求無約束問題最小值

    %輸入:x0是初始點,fun和gfun分別是目標函數和梯度

    %輸出:x、val分別是最優點和最優值,k是迭代次數

    maxk=5000;%最大迭代次數

    rho=0.5;sigma=0.4;

    k=0;eps=10e-6;

    while(k

    g=feval(gfun,x0);%計算梯度

    d=-g;%計算搜索方向

    if(norm(d)

    break;

    end

    m=0;mk=0;

    while(m<20)

    if(feval(fun,x0+rho^m*d)

    mk=m;break;

    end

    m=m+1;

    end

    x0=x0+rho^mk*d;

    k=k+1;

    end

    x=x0;

    val=feval(fun,x0);

    end

    解法二:DFP法

    function[ x,val,k ] = dfp( fun,gfun,x0 )

    %功能:用DFP法求無約束問題最小值

    %輸入:x0是初始點,fun和gfun分別是目標函數和梯度

    %輸出:x、val分別是最優點和最優值,k是迭代次數

    maxk=5000;%最大迭代次數

    rho=0.5;sigma=0.4;

    k=0;eps=10e-6;

    n=length(x0);

    Hk=inv(feval('Hess',x0));

    while(k

    gk=feval(gfun,x0);

    if(norm(gk)

    break;

    end

    dk=-Hk*gk';

    dk=dk';

    m=0;mk=0;

    while(m<20)

    if(feval(fun,x0+rho^m*dk)

    mk=m;break;

    end

    m=m+1;

    end

    %DFP校正

    x=x0+rho^mk*dk;

    sk=x-x0;

    yk=feval(gfun,x)-gk;

    if(sk'*yk>0)

    Hk=Hk-(((Hk*yk')*yk)*Hk)/(yk*Hk*yk')+(sk'*sk)/(sk*yk');

    end

    k=k+1;

    x0=x;

    end

    val=feval(fun,x0);

    end

    2取初始點,通過Matlab編程實現求解過程。

    1公用函數如下:

    1、functionf= fun( X )

    %所求問題目標函數

    f=X(1)^2/4000-cos(X(1)/sqrt(1))+1+X(2)^2/4000-cos(X(2)/sqrt(2))+1+X(3)^2/4000-cos(X(3)/sqrt(3))+1;

    end

    2、functiong= gfun( X )

    %所求問題目標函數梯度

    g=[X(1)/2000+sin(X(1)/sqrt(1))/sqrt(1),X(2)/2000+sin(X(2)/sqrt(2))/sqrt(2),X(3)/2000+sin(X(3)/sqrt(3))/sqrt(3)]

    end

    3、functionHe = Hess( X )

    %所求問題目標函數Hesse矩陣

    n=length(X);

    He=zeros(n,n);

    He=[1/2000+cos(X(1)),0,0;

    0,1/2000+cos(X(2))/2,0;

    0,0,cos(X(3)/3)];

    end

    解法一:最速下降法

    function[ x,val,k ] = grad( fun,gfun,x0 )

    %功能:用最速下降法求無約束問題最小值

    %輸入:x0是初始點,fun和gfun分別是目標函數和梯度

    %輸出:x、val分別是最優點和最優值,k是迭代次數

    maxk=5000;%最大迭代次數

    rho=0.5;sigma=0.4;

    k=0;eps=10e-6;

    while(k

    g=feval(gfun,x0);%計算梯度

    d=-g;%計算搜索方向

    if(norm(d)

    break;

    end

    m=0;mk=0;

    while(m<20)

    if(feval(fun,x0+rho^m*d)

    mk=m;break;

    end

    m=m+1;

    end

    x0=x0+rho^mk*d;

    k=k+1;

    end

    x=x0;

    val=feval(fun,x0);

    end

    2.1.

    2.2解法二:DFP法

    function[ x,val,k ] = dfp( fun,gfun,x0 )

    %功能:用DFP法求無約束問題最小值

    %輸入:x0是初始點,fun和gfun分別是目標函數和梯度

    %輸出:x、val分別是最優點和最優值,k是迭代次數

    maxk=5000;%最大迭代次數

    rho=0.5;sigma=0.4;

    k=0;eps=10e-6;

    n=length(x0);

    Hk=inv(feval('Hess',x0));

    while(k

    gk=feval(gfun,x0);

    if(norm(gk)

    break;

    end

    dk=-Hk*gk';

    dk=dk';

    m=0;mk=0;

    while(m<20)

    if(feval(fun,x0+rho^m*dk)

    mk=m;break;

    end

    m=m+1;

    end

    %DFP校正

    x=x0+rho^mk*dk;

    sk=x-x0;

    yk=feval(gfun,x)-gk;

    if(sk'*yk>0)

    Hk=Hk-(((Hk*yk')*yk)*Hk)/(yk*Hk*yk')+(sk'*sk)/(sk*yk');

    end

    k=k+1;

    x0=x;

    end

    val=feval(fun,x0);

    end

    展开全文
  • matlab中的最大值和最小值

    千次阅读 2015-01-25 13:31:40
    原文地址:matlab中的最大值和最小值作者:叶冷_清秋 matlab中的的最大值和最小值 MATLAB提供的求数据序列的最大值和最小值的函数分别为max和min,两个函数的调用格式和操作过程类似。 1.求向量的最大值和...
  • %最速下降法clearall;closeall;clc;tic;formatlongedisp('请输入参数');K=input('维数K=');ticA=hilb(K);%A元素是0-100%fori=1:K%A(i,i)=sum(abs(A(i,:)))+20*rand(1);%对角占优的量为0~20%endb=zeros(K,1);...
  • matlab开发-最小值

    2019-08-27 17:03:22
    matlab开发-最小值。数组的最小最大扩展名。
  • 代码自写,亲测 可用。是基于Levy_flights的布谷鸟算法求解函数的最小最优值
  • 遗传算法求最大值,遗传算法求最小值,实验报告,实验结果分析
  • Matlab实现 % 没有加入冲量项的随机梯度下降法实现 syms x y real y(x) = x^2+2*x+10 ; delta(x) = -diff(y(x)) ; step = 0.1 ; first_x = 10 ; x_current = first_x ; x_next = first_x ; show_tmp = 0 ; show = ...
  • %共轭梯度法求二次凸函数的最小值(FR法)%此代码不适用于求一般函数的最小值function [minf]=myCGMsyms x1 x2;f=fun([x1;x2]);%函数表达式A=[4 2;2 2];%矩阵A即为上面函数的二次型中的参数Ax0=[0 0]';%初始点mu=10^(-...
  • matlab查找最小值函数

    2021-03-18 17:18:38
    一、查找最小值 function y=find_min(A) a=min(A); y=a; end 或者自己写循环函数 function f=find_min2(A); Len=length(A); min=A(1); index=1; for i=1:Len if min>A(i) min=A(i); index=i; end end f=...
  • 基于matlab实现牛顿法求最小值
  • 线性规划matlab实现.ppt
  • matlab开发-最大值和最小值。max和min函数忽略NaN值。这些函数像算术函数一样保留它们。
  • matlab开发-计算函数遗传算法的最小值。函数最小值微积分

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,082
精华内容 432
关键字:

最小值matlab

matlab 订阅