精华内容
下载资源
问答
  • matlab求函数极值

    2021-06-28 10:08:00
    如果极大,可以把原函数加个负号。

    如果求极大值,可以把原函数加个负号。

    展开全文
  • matlab 求函数极值

    万次阅读 2016-10-29 02:39:54
    (1) fun = @(x)3*x^2 + 2*x + 4 fplot(fun) 最小 [x,fval] = fminunc(fun,2) (2)目标函数y=sinx在[1,3]上的最大值 [x,f,e]=fminbnd('-sin(x)',1,3) 最大值即-的最小值 (3) [x,favl,exitflag]=fmincon(fun1...

    (1) fun = @(x)3*x^2 + 2*x + 4

     

    fplot(fun)

     

    求最小

    [x,fval] = fminunc(fun,2)

     

    (2)求目标函数y=sinx在[1,3]上的最大值

    [x,f,e]=fminbnd('-sin(x)',1,3)

    最大值即-的最小值

     

    (3)

    [x,favl,exitflag]=fmincon(fun1,x0,A,B,Aeq,Beq,l,u,fun2)

       fun1:目标函数

       x0:初始点

       A*x<=B(不等式约束)

       Aeq*x=Beq(等式约束)

       l<=x<=u(上下界约束)

     

    画3维

     

    fun =

        @(x,y)3*x^2+2*x+4+y

    fun(2,3)

    ans =

        23

     

    xt = @(t) sin(t);
    yt = @(t) cos(t);
    zt = @(t) t;
    fplot3(xt,yt,zt)
     
    展开全文
  • 现在有一个函数,已经知道它的最大值,如何它对应的自变量? 例如,现有一个函数y=-x^2 它的最大值为y=0,如何在MATLAB出当y=0时对应的x值?? 请各位大神帮帮忙,谢谢!
  • 实验五 用matlab求二元函数极值 1计算二元函数极值 对于二元函数极值问题,根据二元函数极值的必要和充分条件,可分为以下几个步骤: z?f(x,y. 定义二元函数步骤1.f(x,y?0,f(x,y?0yx,得到驻点. 步骤2.求解方程组...
  • 模拟退火算法matlab求函数最大值实例 模拟退火算法的思路基本上是: 1.粒子按照不同的概率在不同的方向漂移(随机运动) 2.向目标点漂移的概率更大(趋向于能量低的点) 3.随着时间的推移粒子每次漂移的步长变短...

    模拟退火算法matlab求函数最大值实例

    模拟退火算法的思路基本上是:

    1.粒子按照不同的概率在不同的方向漂移(随机运动)

    2.向目标点漂移的概率更大(趋向于能量低的点)

    3.随着时间的推移粒子每次漂移的步长变短(温度降低)


    这里粒子的速度采用正态分布,正态分布的速度的平均值与温度成正比

    粒子运动方向随机,+-方向运动概率为0.5


    %模拟退火算法实现搜索函数最大值
    %Anneal.m
    N=20;%粒子数量
    temp=20;%初始温度
    T=200;%迭代次数
    k=0.1;%温度位移系数
    kt=0.05;%温度概率系数
    de=0.99;%温度降低速率
    minx=0;
    maxx=10;%区间
    location=10*rand(1,N);%粒子初始位置
    present_value=equation(location);%粒子当前解
    %---------------------------
    for t=1:T
        %
        dx_av=k*temp;%当前温度下粒子平均移动距离
        probability=exp(-1/(kt*temp));
        disp(probability);
        temp=temp*de;%温度变化
        for p=1:N
            dx=0.5*dx_av*randn+dx_av;%以平均移动距离为中心正态分布,
            if rand>0.5    %0.5的概率为-
                dx=-dx;
            end
            local=location(p)+dx;
            if (local<maxx)&&(local>minx)%判断是否越界
                local_value=equation(local);
                if local_value>present_value(p)
                    location(p)=local;
                    present_value(p)=local_value;
                else if rand<probability
                        location(p)=local;
                        present_value(p)=local_value;   
                    end
                    
                end
            end
        end
    end


    x=minx:0.01:maxx;
    y=equation(x);
    plot(x,y);
    hold on;
    plot(location, present_value,'*');
    disp(location);

    被搜寻的函数如下·

    function y=equation(x)
    y=10*cos(0.4*pi*x).*sin(0.1*pi*x);
    end


    展开全文
  • 遗传算法求解函数 F(x1 x2)=100(x1^2... 的最大值 (MATLAB) %Generic Algorithm for function f(x1,x2) optimum 最大值 clear all; close all; %Parameters Size=80; G=100; CodeL=10; umax=2.048; umin=-2.048; E=roun
  • 引言:遗传算法求函数极值算是遗传算法的一种最简单的应用,这里就介绍一种简单的,全文基本翻译自codeproject的一篇文章,作者为Luay Al-wesi,软件工程师。例子中的函数为y = -x2+ 5 ,大家可以将其改为其他复杂...

    介绍转载自https://blog.csdn.net/xujinpeng99/article/details/6211597,后面用自己设置的函数进行实验。

    引言:遗传算法求函数极值算是遗传算法的一种最简单的应用,这里就介绍一种简单的,全文基本翻译自codeproject的一篇文章,作者为Luay Al-wesi,软件工程师。例子中的函数为y = -x2+ 5 ,大家可以将其改为其他复杂一些的函数,比如说f=x+10sin(5x)+7cos(4x)等。

    一、编码以及初始种群的产生

        编码采用二进制编码,初始种群采用矩阵的形式,每一行表示一个染色体,每一个染色体由若干个基因位组成。关于染色体的长度(即基因位的个数)可根据具体情况而定。比如说根据要求极值的函数的情况,本文的染色体长度为6,前5个二进制构成该染色体的值(十进制),第6个表示该染色体的适应度值。长度越长,表示解空间搜索范围越大。关于如何将二进制转换为十进制,这个应该很简单,文后的C代码中函数x即为转换函数。

        初始种群结构如下图所示:

                          图1

        该初始种群共有4个染色体,第一列表示各个染色体的编号,第2列表示该染色体值的正负号,0表示正,1表示负。第3列到第7列为二进制编码,第8列表示各个染色体的适应度值。第2列到第7列的0-1值都是随机产生的。

     

    二、适应度函数

        一般情况下,染色体(也叫个体,或一个解)的适应度函数为目标函数的线性组合。本文直接以目标函数作为适应度函数。即每个染色体的适应度值就是它的目标函数值,f(x)=-x2+ 5。

     

    三、选择算子

        初始种群产生后,要从种群中选出若干个体进行交叉、变异,那么如何选择这些个体呢?选择方法就叫做选择算子。一般有轮盘赌选择法、锦标赛选择法、排序法等。本文采用排序法来选择,即每次选择都选出适应度最高的两个个体。那么执行一次选择操作后,得到的新种群的一部分为下图所示:

                           图2

    四、交叉算子

        那么接下来就要对新种群中选出的两个个体进行交叉操作,一般的交叉方法有单点交叉、两点交叉、多点交叉、均匀交叉、融合交叉。方法不同,效果不同。本文采用最简单的单点交叉。交叉点随机产生。但是交叉操作要在一定的概率下进行,这个概率称为交叉率,一般设置为0.5到0.95之间。交叉后产生的新个体组成的新种群如下:

       

                                  图3

        黑体字表示子代染色体继承母代个体的基因情况。

     

    五、变异

        变异就是对染色体的结构进行变异,使其改变原来的结构(值也就改变),达到突变进化的目的。变异操作也要遵从一定的概率来进行,一般设置为0到0.5之间。本文的变异方法直接采取基因位反转变异法,即0变为1,1变为0。要进行变异的基因位的选取也是随机的。

     

    六、终止规则

        遗传算法是要一代一代更替的,那么什么时候停止迭代呢?这个规则就叫终止规则。一般常用的终止规则有:若干代后终止,得到的解达到一定目标后终止,计算时间达到一定限度后终止等方法。本文采用迭代数来限制。
     

    
    %VELASCO, Gimel David F.
    %2012-58922
    %Cmsc 191
    %Genetic Algorithm
    %Final Exam
    %for runs=1:3
    clear;
    tic;
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%INPUT ARGUMENTS%%%%%%%Sir Joel, dito po%%%%%%%%%
    CostF =2; % | 1 - DE JONGS | 2 - AXIS PARALLEL HYPER-ELLIPSOID | 3 - ROTATED HYPER-ELLIPSOID | 4 - RASTRIGINS | ow - ACKLEYS |
    nVar = 3; %number of dimensions
    VarSize = zeros(nVar); %stores the fittest chromosome per iteration
    VarMin = -5.12; %upper bound of variable value
    VarMax = 5.12; %lower bound of variable value
    MaxGen = 100000; %maximum number of generations
    nPop = 5000; %chromosome population
    nSel = 1; % | 1 - Tournament Selection | ow - Roulette Wheel Selection |
    mu = 0.1; %mutation rate
    sigma = 0.25; %crossover rate
    cxver= 2; % | 1 - Single point Crossover | ow - Three point Crossover |
    tol = 0.0000025; %fitness tolerance (minimization problem)
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %STEP 1: Initialization
    test_func = CostF;
    ub = VarMax;
    lb = VarMin;
    ulb = ub; %temporary bengat
    tpl = nVar;
    popsize = nPop;   %Population Size
    maxgens = MaxGen;   %Maximum Generations
    pc = sigma;      %crossover rate
    pm = mu;       %mutation rate
    %tol = tol;  %tolerance
    iteration_array = zeros(1);
    fittest_array = zeros(1);
    solution_array = VarSize;
    Chromosome = zeros(popsize,tpl);
    for i=1:popsize
        Chromosome(i,:) = 2*ulb*(rand(1,tpl)-0.5);  %initializing first generation
    end
    
    %%%%%%%%%%%%%%%%%%%%%%%%%GENETIC ALGORITHM%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%
    for generation=1:maxgens   %LOOPS STEPS 2 to 5(最大的迭代次数)
    %STEP 2: Selection
    if nSel == 1
        %(锦标赛选择法)
        for i=1:popsize/4   %Tournament process
            red = abs(floor(popsize*rand(1))) + 1;  %两个随机染色体
            blu = abs(floor(popsize*rand(1))) + 1;
            if OBJFUNC(Chromosome(red,:),tpl,test_func) > OBJFUNC(Chromosome(blu,:),tpl,test_func)    %competition
                Chromosome(red,:) = Chromosome(blu,:);      %Blue Wins the tournament and overwrites Red
            else
                Chromosome(blu,:) = Chromosome(red,:);      %Red Wins the tournament and overwrites Blue
            end
        end
    else
        %轮盘赌选择法
        F_obj = zeros(1);
        for i=1:popsize
           F_obj(i) = OBJFUNC(Chromosome(i,:),tpl,test_func);
        end
        Total = 0;
        Fitness = zeros(1);
        P = zeros(1);
        C = zeros(1);
        R = zeros(1);
        NewChromosome = zeros(tpl);
        for i=1:popsize
           Fitness(i) = 1/(1+F_obj(i));
           Total = Total + Fitness(i);
        end
        for i=1:popsize
            P(i) = Fitness(i)/Total;
        end
        ctr = 0;
        for i=1:popsize
            ctr = ctr + P(i);
            C(i) = ctr;
        end
        for i=1:popsize
            R(i) = rand(1);
        end
        for i=1:popsize
            NewChromosome(i,:) = zeros(1,tpl);
        for j=1:popsize-1
            if R(i) > C(j) && R(i) <= C(j+1)
                NewChromosome(i,:) = Chromosome(j,:);
            end
        end
        if NewChromosome(i,:) == zeros(1,tpl)
            NewChromosome(i,:) = Chromosome(1,:);
        end
        end
        for i=1:popsize
            Chromosome(i,:) = NewChromosome(i,:);
        end
    end
    %%
    R = rand(1,popsize);
    k = zeros(1);
    PChromosome = zeros(tpl);
    cp = zeros(1);
    cp3 = zeros(3);
    ctr = 0;    %holds number of parents
    for i=1:popsize
        if R(i) < pc
            %选择父代
            ctr = ctr + 1;
            k(ctr) = i; %will save the positions of the parent chromosomes
            PChromosome(ctr,:) = Chromosome(i,:);
        end
    end
    if ctr == 0 %if no parents were selected for the next generation
        continue;
    end
    %%
    %STEP 3: 交叉
    if cxver == 1 %单点交叉
        for i=1:ctr
            cp(i) = floor(abs((tpl-1)*rand(1)))+1;   %crossover points
        end
        for i=1:ctr-1
           Chromosome(k(i),:) = CROSSOVER(PChromosome(i,:),PChromosome(i+1,:),cp(i),tpl);   %crossover ci and ci+1
        end
        Chromosome(k(ctr),:) = CROSSOVER(PChromosome(ctr,:),PChromosome(1,:),cp(ctr),tpl);    %crossover ck and c1
    else %三点交叉
        for i=1:ctr
            cp3(i,:) = floor(abs((tpl-1)*rand(1,3)))+1;   %crossover points
        end
        for i=1:ctr-1
           Chromosome(k(i),:) = CROSSOVER3(PChromosome(i,:),PChromosome(i+1,:),cp3(i,:),tpl);   %crossover ci and ci+1
        end
        Chromosome(k(ctr),:) = CROSSOVER3(PChromosome(ctr,:),PChromosome(1,:),cp3(ctr,:),tpl);    %crossover ck and c1
    end
    %%
    %STEP 4: 变异
    %Per Chromosome mutation
    mu = round(pm*popsize); %#ofchromosomestomutate = mutationrate*populationsize
    for i=1:mu
        cngn = abs(floor(popsize*rand(1))) + 1; %random popsize number
        q = OBJFUNC(Chromosome(cngn,:),tpl,test_func);
        if q < 1
            Chromosome(cngn,:) = 2*ulb*q*(rand(1,tpl)-0.5);   %mutation
        else
            Chromosome(cngn,:) = 2*ulb*(rand(1,tpl)-0.5);
        end
    end
    %%
    %STEP 5: 终止评价
    F_obj = zeros(1);
    for i=1:popsize
       F_obj(i) = OBJFUNC(Chromosome(i,:),tpl,test_func);
    end
    %%
    fittest = F_obj(1);
    for i=1:popsize
        fi = 1;
        if fittest > F_obj(i)
           fittest = F_obj(i);
           fi = i;
        end
    end
    %fprintf('Fittest: %.16f\t\tRuntime: %.2f seconds\n',fittest,toc);
    %disp(Chromosome(fi,:))
    fittest_array(generation) = fittest;
    iteration_array(generation) = generation;
    solution_array(generation,:) = Chromosome(fi,:);
    if fittest < tol %&& abs(DECODE(Chromosome(fi,:),tpl) - round(DECODE(Chromosome(fi,:),tpl))) < 0.00005
        break;
    end
    %Step 6: 重复进行代数迭代
    end
    %%
    %STEP 7: 得出最优染色体
    if test_func == 1
    fprintf('====================DE JONGS FUNCTION=============================\n');
    elseif test_func == 2
    fprintf('==============AXIS PARALLEL HYPER-ELLIPSOID FUNCTION==============\n');
    elseif test_func == 3
    fprintf('===============ROTATED HYPER-ELLIPSOID FUNCTION====================\n');
    elseif test_func == 4
    fprintf('====================RASTRIGINS FUNCTION===========================\n');
    else
    fprintf('=====================ACKLEYS FUNCTION=============================\n');
    end
    fprintf('====================GENETIC ALGORITHM=============================\n');
    if nSel == 1
    fprintf('Tournament Selection. ');
    else
    fprintf('Roulette-Wheel Selection. ');
    end
    if cxver == 1
    fprintf('Single Point Crossover.\n');
    else
    fprintf('Triple Point Crossover.\n');
    end
    fprintf('===================Generations: %d\tPopulation: %d===========\n',maxgens,popsize);
    %fprintf('Final Generation\n');
    %Chromosome = SORT(Chromosome,popsize,tpl,test_func);
    %disp(Chromosome)
    fprintf('Generation Number: %d\nPopulation Size: %d\nCrossover Rate: %.2f\nMutation Rate: %.2f\nDimensions: %d\n',maxgens,popsize,pc,pm,tpl);
    %fprintf('\nThe Fittest Chromosome is\n');
    %disp(Chromosome(fi,:)')
    %fprintf('Using Tournament Selection\n');
    fprintf('Fitness Function Value of %.16f\nTotal Runtime of %f seconds\n',fittest,toc);
    fprintf('The Root for Test Function %d is:\n',test_func);
    disp(Chromosome(fi,:))
    fprintf('==================================================================\n');
    %%
    figure
    subplot(2,1,1);
    plot(iteration_array,fittest_array);
    legend('Cost Function Value');
    xlabel('Generation');
    ylabel('Fitness of fittest Chromosome');
    
    solution_array = transpose(solution_array);
    subplot(2,1,2);
    plot(iteration_array,solution_array);
    xlabel('Generation');
    ylabel('Solution of fittest Chromosome');
    %%
    %end

    结果:

    展开全文
  • matlab求函数在区间内最大值与最小值 我用了fminbnd这个函数使用方法如下 详细信息[官方文档] 方法一 fun = @sin; x1 = 0; x2 = 2*pi; x = fminbnd(fun,x1,x2) 结果 x = 4.7124 %返回的是当极小值点 方法二 ...
  • 运用MATLAB操作平台的命令函数和绘图语句解决微积分中抽象的、难以...以具体函数为例,给出两种求极值的思路,同时借助MATLAB的作图功能,将函数极值问题可视化,并给出任意二阶可导的一元函数极值的一种程序设计思路。
  • 粒子群算法 求函数最小值,matlab代码。链接是讲解粒子群算法 https://blog.csdn.net/zyqblog/article/details/80829043 。 我用ubuntu下matlab编写的代码,你在windows下可能有中文乱码,不过都是注释,你可以去...
  • MATLAB二分法求函数极值

    千次阅读 2020-04-11 09:44:10
    MATLAB二分法求函数极值 一、算法原理 1.计算f (x)在有解区间[a, b]端点处的,f (a),f (b)。 2.计算f (x)在区间中点处的f (x0)。 3.判断若f (x0) = 0,则x0即是根,否则检验: (1)若f (x1)与f (a)异号,...
  • MATLAB梯度下降法多元函数极值以及极值点; 程序+文档
  • 蚁群算法求函数最大值的程序 function [F]=F(x1,x2) %目标函数 F=-(x1.^2+2*x2.^2-0.3*cos(3*pi*x1)-0.4*cos(4*pi*x2)+0.7); End?
  • 遗传算法求函数最值.的matlab实现
  • Matlab求一元函数极值

    万次阅读 2017-04-22 19:35:22
    MATLAB求一元函数极值命令介绍此次用的是机房的R2010版本命令: 1、x=fminbnd(fun,x1,x2) 出目标函数fun在区间[x1,x2]上的极小点x; 2、[x,fmin]=fminbnd(fun,x1,x2)出极小点x和极小fmin 3、fminbnd...
  • 已知函数及区间,区间内极值 matlab程序。适用于已经知道函数及区间的极大与极小的malab
  • 本资源为自己编写的遗传算法多元函数极值Matlab代码,共大家共同学习和研究。
  • Matlab多元函数极值问题

    千次阅读 2020-03-18 12:43:34
  • MATLAB求函数零点与极值

    万次阅读 2016-12-04 17:46:13
    针对多项式零点(详见MATLAB多项式及多项式拟合) 2. fzero函数 返回一元函数在某个区间内的的零点. x0 = fzero(@(x)x.^2-3*x-4,[1,5]); 只能区间里面的一个零点,并且要求在给定区间端点函数值异号,所以使用...
  • Matlab遗传算法求函数最大值

    万次阅读 多人点赞 2016-10-13 20:06:45
    主函数函数main.mglobal Bitlength%定义3个全局变量 global boundsbegin global boundsend boundsbegin=-2; boundsend=2; precision=0.0001;%运算精确度 Bitlength=ceil(log2((boundsend-boundsbegin)'./precision))...
  • matlab求极值函数

    千次阅读 2016-01-07 11:05:41
    sign函数:当xsign(x)=-1; 当x=0时,sign(x)=0; 当x>0时,sign(x)=1。 diff函数:diff(x) 表示x相邻的元素之差。 设Z是要分析的数据的集合...(1) f ' (x) 左正右负,则 f (x) 在x0取得极大; (2) f ’ (x) 左负右正,
  • 利用matlab编写基于遗传算法求解函数极值
  • 一个遗传算法的实例,用matlab写的,包含画图,求解一元函数最大值
  • 如何用matlab求函数的最值

    万次阅读 2019-02-25 14:55:36
    如何用matlab求函数的最值
  • matlab一元函数极值求解函数fminbnd

    千次阅读 2020-08-20 09:09:28
    [xmin, ymin] = fminbnd(fun, x1, x2) 用于求解一元函数 fun 的极小 其中,fun是目标函数,[x1,x2]是搜索区间,xmin、ymin分别是目标函数的极小点、极小
  • 下列二元函数最大值,f(x1,x2)=x1^2+x2^2,x1与x2的取值区间为{0,1,2,...,7}
  • 求极值函数-MATLAB

    2020-06-09 09:25:23
    最近发现了一个求极值的神仙代码,在此和大家分享。只要一行代码,即可实现。 a = randn(1,30); idxmin = find(diff(diff(a)<0)<0); idxmax = find(diff(diff(a)>0)<0); plot(a) hold on plot(idxmin+1,...
  • matlab求最值(极值

    万次阅读 多人点赞 2016-09-25 18:26:55
    根据我看过的材料来说 ,最值(极值)无非有下面几... 1、简单函数的单一最值(极值) clear clc t=-100:0.001:100;%初值:增量:终值 symsx; y=x/(x*x+1); f=inline(y);%内联函数 max=max(f(t)) min=min(f(t))

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,642
精华内容 13,856
关键字:

matlab求函数最大值

matlab 订阅