Matlab优化工具箱主要有以下4种求解器:

1.最小值优化

2.多目标最小值优化

3.方程求解器

4.最小二乘(曲线拟合)求解器

一.最小值优化:

1.标量最小值优化:使用函数fminbnd

例:对边长为3m的正方形铁板,在4个角处剪去相等的正方形,以制成方形无盖水槽,问如何剪才能使水槽的容积最大?

方程:V=(3-2x)^2x

function f = myfun1(x)
f = -(3-2*x).^2 * x; % 由于fminbnd只能用来计算最小值,所以这里加负号x = fminbnd(@myfun1,0,1.5)
% x = fminbnd(fun,x1,x2):返回标量函数fun在条件x1 < x < x2下取最小值时自变量x的值
y= -myfun1(x)    % 调用myfun1函数来计算水槽的最大容积

2.无约束最小值优化:使用函数fminunc和fminsearch

例:求函数f(x)=3x1^2+2x1x2+x2^2最小值

function f = myfun2(x)
f = 3*x(1)^2 + 2*x(1)*x(2) + x(2)^2;    %  目标函数x0 = [1,1];   % 初始值,可以是标量,向量,矩阵,即从这个值开始找,不熟悉的话可以多试几次,取最优的
[x,fval] = fminunc(@myfun2,x0) % x为自变量,fval为函数值

例:求banana方程的最小值(banana方程:f(x)=100(x2-x1^2)^2+(a-x1)^2,在指定a的情况下求这个方程的最小值)

a=3;
banana = @(x)100*(x(2)-x(1)^2)^2+(a-x(1))^2; % 快速获得函数句柄
options = optimset('Display','iter','PlotFcns',@optimplotfval); % 设置一些参数,将Display参数设置为'iter',利用optimplotfval来进行画图,'PlotFcns'是画图参数
[x,fval,exitflag,output] = fminsearch(banana, [-1.2, 1], options) % exitflag退出标志,程序运行结束的信息,output是一些输出信息
% 也可以这样(不加TolX的话)
% [x,fval,exitflag,output] = fminsearch(banana, [-1.2, 1], ...optimset('TolX',1e-8,'Display','iter','PlotFcns',@optimplotfval))
%  optimset('TolX',1e-8)用来设置算法终止误差,即设置精度,到这个精度就可以停了

3.线性规划:使用linprog函数

例:求如下函数的最小值

f = [-5; -4; -6];         %  用矩阵表示目标函数
A = [1  -1  13   2  43   2  0];           %  用矩阵形式表示约束条件系数,注意换行也表示;
b = [20; 42; 30];      %  约束条件
lb = zeros(3,1);       %  下界约束
[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)
% "[] []"表示的是等式约束,这里没有等式,所以用空矩阵,lb后面还可以加上界约束,但没有,所以可以省略
% Lambda保存的一些约束信息,Lambda域中向量里的非零元素可以反映出求解过程中的主动约束。在本例的结果中可以看出,第2个和第3个不等式约束(lambda.ineqlin)和第1个下界约束(lambda.lower)是主动约束

二次规划:使用quadprog函数

例:求下面函数的最小值

首先将方程写成矩阵形式

(x的指数为2)

H = [1 -1; -1 2];
f = [-2; -6];
A = [1 1; -1 2; 2 1];      %  线性不等式约束
b = [2; 2; 3];               %  线性不等式约束
lb = zeros(2,1);
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb)

4.有约束最小值优化:使用函数fmincon

例:求函数f(x)=-x1x2x3的最小值,搜索的起始值为x=[10;10;10],同时目标函数中的变量要服从以下约束条件:

function f = myfun3(x)
f = -x(1) * x(2) * x(3);

约束条件改为

x0 = [10; 10; 10];    % 求解的起始点
A=[-1 -2 -2;1 2 2];
b=[0;72];
[x,fval] = fmincon(@myfun3,x0,A,b)

5.另外两种极小值优化问题:
半无限问题:fseminf
0-1规划:bintprog
请查阅帮助文档或者其他参考书

二.多目标优化:使用fgoalattain和fminimax函数

例:某工厂因生产需要欲采购一种原材料,市场上这种原材料有两个等级,甲级单价2元/千克,乙级单价1元/千克。要求所花总费用不超过200元,购得原材料总量不少于100千克,其中甲级原材料不少于50千克,问如何确定最好的采购方案。
设x1、x2分别为采购甲级和乙级原材料的数量(千克),要求总采购费用尽量少,总采购重量尽量多,采购甲级原材料尽量多

function f=myfun4(x)
f(1)=2*x(1)+ x(2); % 总花费
f(2)=-x(1)- x(2); % 总重量
f(3)=-x(1); % 甲级材料重量
%注意和下面的一一对应关系goal=[200 -100 -50];        %  要达到的目标
weight=[2040 -100 -50];       %  各个目标的权重,自己根据经验定
x0=[55 55];                    %  搜索的初始值
%  约束条件
A=[2 1;-1 -1;-1 0];
b=[200 -100 -50]; % 它们的正负需要把方程转化为标准形式才能确定,必须是小于
lb=zeros(2,1);
%  调用fgoalattain函数进行多目标优化
[x,fval,attainfactor,exitflag] =...
fgoalattain(@myfun4,x0,goal,weight,A,b,[],[],lb,[])

fminimax函数用法查阅文档

三.方程组求解:

优化工具箱提供了3个方程求解的函数,其中,“\”算子可用于求解线性方程组Cx=d。当矩阵为n阶方阵时,采用高斯消元法进行求解;如果A不为方阵,则采用数值方法计算方程最小二乘意义上的解。fzero采用数值解法求解非线性方程,fsolve函数则采用非线性最小二乘算法求解非线性方程组

例:求解下面方程组的根,其中包含两个未知数、两个方程

方程组变换

function F = myfun5(x)
F = [2*x(1) - x(2) - exp(-x(1));-x(1) + 2*x(2) - exp(-x(2))];x0 = [-5; -5];                              % 猜测的搜索初始值
options=optimset('Display','iter');       % 输出显示选项设置
[x,fval] = fsolve(@myfun5,x0,options)      % 调用fsolve命令

fzero和“\”自行查阅文档

四.最小二乘及数据拟合:常用函数有\、lsqnonneg、lsqlin、lsqnonlin、lsqcurvefit等

例(伪):

求超定系统(未知数小于方程数)C·x = d的最小二乘解,约束条件为A·x≤b,lb≤x≤ub(具体的系数矩阵、边界条件如下所示)
首先输入系数矩阵和上下边界

C = [0.9501    0.7620    0.6153    0.40570.2311    0.4564    0.7919    0.93540.6068    0.0185    0.9218    0.91690.4859    0.8214    0.7382    0.41020.8912    0.4447    0.1762    0.8936];
d = [0.05780.35280.81310.00980.1388];
A =[0.2027    0.2721    0.7467    0.46590.1987    0.1988    0.4450    0.41860.6037    0.0152    0.9318    0.8462];
b =[0.52510.20260.6721];
lb = -0.1*ones(4,1);
ub = 2*ones(4,1);[x,resnorm,residual,exitflag,output,lambda] = ...lsqlin(C,d,A,b,[],[],lb,ub);
% resnorm=norm(C*x-d)^2,即2-范数
% residual=C*x-d,即残差
x,lambda.ineqlin,lambda.lower,lambda.upper   %  查看计算的结果

其它函数请自行查阅文档

模拟退火:

dejong5fcn    % 优化测试函数
fun = @dejong5fcn;    % 目标函数
[x,fval] = simulannealbnd(fun,[0 0])    % 目标函数、初始点% 如果有绘图
options = saoptimset('PlotFcns',{@saplotbestx,@saplotbestf,@saplotx,@saplotf});
%第一个绘图函数是最优的函数值对应的x点,第二个是最优的函数值,第三个是当前的x,第四个是当前的函数值
% 如果有上下限约束
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
x = simulannealbnd(fun,x0,lb,ub,options)

例:

求min f(x) = (4 - 2.1*x1^2 + x1^4/3)*x1^2 + x1*x2 + (-4 + 4*x2^2)*x2^2
写成函数形式

function y = simple_objective(x)y = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 + 4*x(2)^2)*x(2)^2;ObjectiveFunction = @simple_objective;
X0 = [0.5 0.5];   % 初始点
[x,fval,exitFlag,output] = simulannealbnd(ObjectiveFunction,X0)% 如果有上下限约束
lb = [-64 -64];
ub = [64 64];
[x,fval,exitFlag,output] = simulannealbnd(ObjectiveFunction,X0,lb,ub);

例:

求min f(x) = (a - b*x1^2 + x1^4/3)*x1^2 + x1*x2 + (-c + c*x2^2)*x2^2

写成函数形式

function y = parameterized_objective(x,a,b,c)y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-c + c*x(2)^2)*x(2)^2;a = 4; b = 2.1; c = 4;    % define constant values
ObjectiveFunction = @(x) parameterized_objective(x,a,b,c);
X0 = [0.5 0.5];
[x,fval] = simulannealbnd(ObjectiveFunction,X0)

Matlab优化工具箱和模拟退火算法相关推荐

  1. MATLAB优化工具箱 粒子群算法 particleswarm优化包

    记录几篇对我应用MATLAB粒子群particleswarm优化包很有帮助的文档. [1] <Tune Particle Swarm Optimization Process>matlab ...

  2. Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划

    Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划 目录 PrA之nLP非线性规划算法 操作图文教程 PrA之nLP非线性规划算法 (1).编写M ...

  3. 利用Matlab优化工具箱解数独问题

    前一阵使用Matlab的优化工具箱,发现可以求解数独问题,有意思!实际上,Matlab优化工具箱有两个:Optimization Toolbox和Global Optimization Toolbox ...

  4. 最优化问题的Matlab优化工具箱求解总结

    第一次发文,个人总结,可以一起讨论,如有问题,感谢指出. 1.常规算法 MATLAB 目标函数 约束条件 决策变量 非线性 多目标 上下界 线性 非线性 整数 无初始值 linprog √ √ √ i ...

  5. help efun matlab,Matlab优化工具箱在函数最值求解中的应用.pdf

    Matlab优化工具箱在函数最值求解中的应用.pdf 系 统 解 决 方 案 Matlab优化工具箱在函数最值求解中的应用 彭东海 (中山职业技术学院数学教研室,广 东 中山 528404) 摘 要 ...

  6. 非线性优化汇总——Matlab优化工具箱(持续更新中)

    非线性优化汇总--Matlab优化工具箱(持续更新中) 室内定位/导航/优化技术探讨:WX: ZB823618313 原创不易,路过的各位大佬请点个赞 目录 非线性优化汇总--Matlab优化工具箱( ...

  7. MATLAB优化工具箱—Optimization Toolbox™

    Optimization Toolbox™ 提供了寻找最小化或最大化目标并同时满足约束条件的函数.工具箱中包括了线性规划 (LP).混合整数线性规划 (MILP).二次规划 (QP).非线性规划 (N ...

  8. Matlab优化工具箱——Optimization Toolbox

    最优化模型的一般形式: 一.三大要素 决策变量  decision bariable 式(1)称为目标函数  objective function 式(2)称为约束条件  constraints (2 ...

  9. matlab优化工具箱笔记(1)

    1.线性规划 [x,fval]=linprog(c,A,b,Aeq,Beq,VLB,VUB) 用于解决 min(z)=cX%%求满足条件的X与已定系数c乘积之和的最小值 s.t.  AX<=b  ...

最新文章

  1. VC2010 编译问题
  2. 006_Topic消息模式发送对象消息
  3. linux系统下pid的取值范围了解一下
  4. GWT与Eclipse集成开发初步研究
  5. 利用JavaScript在ASP.NET中动态生成系统菜单
  6. 2018计算机领域大事件,吕伟:2018年计算机行业回顾
  7. mysql报错排查总结
  8. 【javascript】异步编年史,从“纯回调”到Promise
  9. php中什么是函数函数的意义是什么,php中arsort函数的功能起什么作用呢?
  10. 男孩684分被清华预录取, 他的故事感动中国
  11. log4j记录exception异常有价值信息及log4j级别
  12. 牛客OI周赛6-提高组 B 践踏
  13. 淘宝客优惠券领取微信小程序前台和后台源码
  14. java运行 .class文件_运行java的class文件方法详解
  15. python问题解答网站_python问题解答网站
  16. Conflicted Confucians
  17. opencv-车辆牌照识别(一)
  18. 视频教程-WebGL 可视化3D绘图框架:Three.js 零基础上手实战-其他
  19. ATF官方文档翻译(二):Authentication Framework Chain of Trust(身份验证框架和信任链)(3)
  20. java 前置_java – 何时添加前置条件以及何时(仅)抛出异常?

热门文章

  1. 如何有效提升英文口语水平?这 15 个方法值得学习!
  2. 用HTML实现网上购物页面
  3. 虾米音乐关停,QQ音乐、网易云上线虾米歌单迁移功能
  4. 基于单片机音频放大器声控灯控制电路设计(毕设课设资料)
  5. Keil5 出现error: #28:expression must have a constant value的解决办法
  6. 前嗅教程:通过子栏目进入链接列表采集正文数据
  7. time.After巧妙的超时控制
  8. 8086/8088CPU内部结构,引脚图,物理地址与逻辑地址
  9. C# - 音乐小闹钟_BetaV2.0
  10. 如何迁移系统的详细步骤