Matlab 优化工具箱

这篇具有很好参考价值的文章主要介绍了Matlab 优化工具箱。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 线性规划

1.1 线性规划问题—linprog

语法:[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub,options)
matlab优化工具箱,matlab,矩阵,开发语言,线性回归
f、x、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。
示例1-1
matlab优化工具箱,matlab,矩阵,开发语言,线性回归

f = [-5,-4,-6];
A = [1,-1,1;3,2,4;3,2,0];	%系数矩阵
b = [20,42,30];				%常数项
Aeq = []; beq = [];
lb=[0,0,0];ub = [];x0 = [];
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub,x0);

1.2 混合整数线性规划(MILP)—linprog

语法:[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0,options)
matlab优化工具箱,matlab,矩阵,开发语言,线性回归

f、x、intcon、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。

2 非线性规划

2.1 约束非线性多变量函数的最小值—fmincon()

语法:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

  • fmincon函数是默认从给定的x0为中心开始搜索,直至找到函数的z最小值,并返回距离x0最近的函数最小值对应的值,在计算的时候就必须预先判定函数最小值的对应的x值的大概范围,确保定的初值x0在所求的x附近,以减少计算量。
  • fmincon求解优化问题,最优解不一定唯一。选择不同的迭代初始值x0,可能得到不同的局部最优解(局部最优解不一定为全局最优解)
clc; close all; clear; % 寻找约束非线性多变量函数的最小值
fun = @(x)x;    % 目标函数
x0=[];          % 初始值, length(x0) = 自变量个数, 从x0开始
A=[];           % 系数矩阵 A*x <= b
b=[];           % 向量
Aeq=[];         % 系数矩阵 Aeq*x = beq
beq=[];         % 向量
lb=[];          % 自变量约束边界 lb(1) <= x(1) <= ub(1)        lb(2) <= x(2) <= ub(2)
ub=[];          % 如果 x(i) 无下界,请设置 lb(i) = -Inf,如果 x(i) 无上界,请设置 ub(i) = Inf。
nonlcon = [];         % 非线性约束
option=[];			  %options = optimset('Display','iter');   %在每次迭代时显示输出
[x,f]=fmincon(fun ,x0,A,b,Aeq,beq,lb,ub,nonlcon,option);

示例1:求解有约束最优化问题(常规—线性约束函数)
matlab优化工具箱,matlab,矩阵,开发语言,线性回归

fun = @(x)-(x(2)+x(1)*cos(x(3)))*x(1)*sin(x(3));  % 目标函数
x0=[25;20;1];          % 初始值, length(x0) = 自变量个数, 从x0开始
A=[]; b=[];           
Aeq=[2,1,0];  beq=100;     
lb=[0;0;0];  ub=[100;100;pi/2];  % 自变量约束边界 lb(1) <= x(1) <= ub(1)  lb(2) <= x(2) <= ub(2)         
[x,f]=fmincon(fun ,x0,A,b,Aeq,beq,lb,ub);

示例2-1:求解有约束最优化问题(难—单个非线性约束函数)
matlab优化工具箱,matlab,矩阵,开发语言,线性回归
【步骤1】:定义非线性约束函数

function [c, ceq] = WT_1_non(x)
c=9-x(1)^2-x(2)^2;  %定义非线性约束函数, C*x <= 0;
ceq=[];				%Ceq*x=0;

【步骤2】:定义目标函数

fun = @(x) x(1)^4-4*x(1)-8*x(2)+15;  %定义目标函数
nonlcon = @(x)WT_1_non(x);            %定义非线性约束函数,@WT_1_non
A=[2 3;-1,1];
b=[2;5];
[x,fval]=fmincon(fun,[0,1],A,b,[],[],[],[],nonlcon);

示例2-2:求解有约束最优化问题(难—多个非线性约束函数)
matlab优化工具箱,matlab,矩阵,开发语言,线性回归
【步骤1】:定义非线性约束函数

function [c, ceq] = fun_constraint(x)
c=[3+x(1)*x(2)-x(1)-x(2);x(1)*x(2)-12];
ceq=[];

【步骤2】:定义目标函数

fun = @(x)exp(x(1))*(x(1)^2+2*x(2)^2+3*x(1)*x(2)+5*x(1)+4*x(2)+2);  % 目标函数
fun_con = @fun_constraint;          %非线性约束函数
x0=[-1,1];          % 初始值, length(x0) = 自变量个数, 从x0开始
A=[]; b=[];           
Aeq=[1,2];  beq=0;       
lb=[];  ub=[];  % 自变量约束边界 lb(1) <= x(1) <= ub(1)  lb(2) <= x(2) <= ub(2)         
[x,f]=fmincon(fun ,x0,A,b,Aeq,beq,lb,ub,fun_con);

示例2-3:求解有约束最优化问题(难—多个非线性约束函数)
matlab优化工具箱,matlab,矩阵,开发语言,线性回归
将问题模型转化为标准形式
matlab优化工具箱,matlab,矩阵,开发语言,线性回归
【步骤1】:定义非线性约束函数

function [c, ceq] = fun_constraint(x)
c=[x(1)^2*x(2)-675;x(1)^2*x(3)^2/10^7-0.419];
ceq=[];

【步骤2】:定义目标函数

fun = @(x)-0.201*x(1)^4*x(2)*x(3)^2/10^7;  % 目标函数
fun_con = @fun_constraint;          %非线性约束函数
x0=[4;5;50];          % 初始值, length(x0) = 自变量个数, 从x0开始
A=[]; b=[];           
Aeq=[];  beq=[];       
lb=[0;0;0];  ub=[36;5;125];  % 自变量约束边界 lb(1) <= x(1) <= ub(1)  lb(2) <= x(2) <= ub(2)         
[x,f]=fmincon(fun ,x0,A,b,Aeq,beq,lb,ub,fun_con);

示例3:将梯度计算加入目标函数中,以实现更快或更可靠的计算。
matlab优化工具箱,matlab,矩阵,开发语言,线性回归
【步骤1】:定义梯度函数

function [f,g] = Learn_C_Ti(x)
f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;% Calculate objective f
if nargout > 1      % gradient required
    g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));
        200*(x(2)-x(1)^2)];
end

【步骤2】:定义目标函数

options = optimoptions('fmincon','SpecifyObjectiveGradient',true);%创建使用目标函数梯度的选项。
fun = @Learn_C_Ti;
x0 = [-1,2];
A = [];b = [];
Aeq = [];beq = [];
lb = [-2,-2];ub = [2,2];
nonlcon = [];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);

2.2 求解半无限约束多变量非线性函数的最小值 —fseminf()

语法:x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)

2.3 寻找能够最小化一组目标函数最大值的点—fminimax()

语法:x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
示例:求解函数组取极小-极大值时X的值。
matlab优化工具箱,matlab,矩阵,开发语言,线性回归

【步骤1】:定义非线性约束函数

function f = fun7(x)
f = [2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304
    -x(1)^2 - 3*x(2)^2
    x(1)+3*x(2)-18
    -x(1)-x(2)
    x(1)+x(2)-8];

【步骤2】:定义主函数

clc,clear
[x,y] = fminimax(@fun7,rand(2,1))

2.4 无导数法计算无约束多变量函数的最小值—fminsearch()

语法:x = fminsearch(fun,x0,options)
示例
matlab优化工具箱,matlab,矩阵,开发语言,线性回归

fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;	%函数
x0 = [-1.2,1];		%自变量区间
options = optimset('Display','iter');   %在每次迭代时显示输出
x = fminsearch(fun,x0,options)

fminsearch函数是求解多元函数最小值,需给定初值x0,它采用复形搜索法;

2.5 其他

  • x = fminbnd(fun,x1,x2) %查找单变量函数在定区间上的最小值, 区间[x1,x2]
    matlab优化工具箱,matlab,矩阵,开发语言,线性回归
fun = @(x)(x^3+cos(x)+x*log(x))/exp(x);
[x,fval]=fminbnd(fun,0,2);

总结:fminbnd函数是针对于一元函数求最小值的函数,它是采用的黄金分割法和抛物线插值法,只能求一元连续函数在闭区间上的极值,有时只能求局部极值,若在边界达到极值,求解速度较慢;

  • x = fminunc(fun,x0,options)%求无约束多变量函数的最小值
    示例
    matlab优化工具箱,matlab,矩阵,开发语言,线性回归
fun=@(x)x(1)^3+x(2)^3-3*x(1)*x(2);
[x,fval]=fminunc(fun,[0.5,3]);
  • fminunc与fminsearch类似,它采用大规模内点反射牛顿迭代法或中小规模的拟牛顿法,速度快于fminsearch;故对于求解极值问题可以优先考虑使用fminunc函数.
  • 当目标函数阶数大于2时,fminunc()比fminsearch()更有效;当目标函数高度不连续时,fminsearch()更具稳健性。

3 二次规划—quadprog()

语法:x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)

示例1:
matlab优化工具箱,matlab,矩阵,开发语言,线性回归
将二次规划转化为标准形式:
matlab优化工具箱,matlab,矩阵,开发语言,线性回归

H=[4,-1;-1,2];f=[-3;-5];
A=[1,1;-1,2];b=[5;4];
Aeq=[];         % 系数矩阵 Aeq*x = beq
beq=[];         % 向量
lb=[0;0];ub =[];x0 =[];
options = optimset('Display','iter');   %在每次迭代时显示输出
[x,fval]=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options);

示例2:
matlab优化工具箱,matlab,矩阵,开发语言,线性回归
将二次规划转化为标准形式:
matlab优化工具箱,matlab,矩阵,开发语言,线性回归文章来源地址https://www.toymoban.com/news/detail-784918.html

H=[2,1,1;1,2,0;1,0,2];f=[-5;-3;-6];
A=[5,4,7];b=22;
Aeq=[];         % 系数矩阵 Aeq*x = beq
beq=[];         % 向量
lb=[0;0;0];ub =[];x0 =[];
options = optimset('Display','iter');   %在每次迭代时显示输出
[x,fval]=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options);

到了这里,关于Matlab 优化工具箱的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • MATLAB cftool工具箱——曲线拟合

    MATLAB cftool工具箱——曲线拟合

        cftool工具箱可以将数据点拟合成曲线或曲面并直观显示出图像。能实现多种类型的线性、非线性曲线/面拟合。     有两种方式打开cftool:(1)在命令行窗口输入\\\"cftool\\\"并回车;(2)在MATLAB的\\\"APP\\\"选项栏中找到\\\"Curve Fitting\\\"程序打开即可。     界面左上部分为数据区域,下拉框中

    2024年02月08日
    浏览(11)
  • 【MATLAB第57期】基于MATLAB的双隐含层BP神经网络回归预测模型(无工具箱版本及工具箱版本对比)

    【MATLAB第57期】基于MATLAB的双隐含层BP神经网络回归预测模型(无工具箱版本及工具箱版本对比)

    数据为案例数据 。103行样本,7输入1输出数据。 训练集数据的R2为:0.9022 测试集数据的R2为:0.87266 训练集数据的MAE为:1.8189 测试集数据的MAE为:2.1658 训练集数据的MBE为:-0.00088469 测试集数据的MBE为:0.3059 数据与无工具版本相同,数据顺序也相同。 训练集数据的R2为:1 测试

    2024年02月16日
    浏览(33)
  • Matlab样条工具箱及曲线拟合

    Matlab样条工具箱及曲线拟合

    Matlab样条工具箱提供了样条的建立、操作、绘制等功能. 建立一个样条曲线或曲面,根据前缀可分为4类: 前缀 类别 cs* 三次样条 pp* 分段多项式样条 sp* B样条,系数为基函数系数 rp* 有理B样条 函数操作:求值、求导数、求积分等; 节点操作:节点重数的设定、修改等. 1.三次

    2024年02月08日
    浏览(19)
  • 遗传算法与Matlab GA工具箱

    遗传算法与Matlab GA工具箱

    GA是一种进化算法,基本原理效仿生物界“物竞天择,适者生存”的演化法则。 一些基本概念 种群population:问题潜在的解集 个体individual:每一个可能的解,通过基因编码一定数目的个体形成一个种群 适应度fitness:由此判断个体的优良,进而进行选择 选择selection、交叉cr

    2024年02月09日
    浏览(14)
  • matlab机器人工具箱基础使用

    资料:https://blog.csdn.net/huangjunsheng123/article/details/110630665 test1.m

    2024年02月12日
    浏览(52)
  • 在Matlab中安装LibSVM工具箱

    在Matlab中安装LibSVM工具箱

    1 下载工具箱 地址:LibSVM下载地址 下拉网页: 2 注意事项: 2.1 注意测试数据 ==官网下载的数据包中没有Matlab对应的数据集格式,点此下载:heart_scale.mat.== 链接: https://pan.baidu.com/s/15LYMilm8asw9EYkHmifLyg 提取码: trws 复制这段内容后打开百度网盘手机App,操作更方便哦 –来自百度

    2024年02月04日
    浏览(8)
  • matlab系统辨识工具箱及其反向验证

    matlab系统辨识工具箱及其反向验证

    系统辨识工具箱 什么时候使用系统辨识,当系统传递函数不确定(在多大程度上不确定?)时,通过对输入输出数据采集,通过数学迭代找到控制对象的近似模型。在找到近似模型(传递函数)后,就可以使用线性化调参工具对系统控制参数进行整定,进行控制系统设计。 调用命

    2024年02月05日
    浏览(13)
  • 【Matlab】相机标定(计算机视觉工具箱)

    【Matlab】相机标定(计算机视觉工具箱)

    图像处理和计算机视觉是Matlab的一个主要应用领域,这部分包括4个工具箱——图像处理、计算机视觉、雷达、医学图像。由于视觉的东西容易呈现,所以先从计算机视觉工具箱学起。 官方文档对计算机视觉工具箱的介绍如下:设计和测试计算机视觉、3D 视觉和视频处理系统

    2024年02月05日
    浏览(10)
  • MATLAB曲线拟合工具箱(cftool)介绍(完结)

    MATLAB曲线拟合工具箱(cftool)介绍(完结)

    本文通过实例对MATLAB曲线拟合工具箱进行详细讲解,帮助大家更容易理解曲线拟合工具箱(cftool)。 已知 x = [0 0.2 0.50.8 0.9 1.3 1.4 1.9 2.1 2.2 2.5 2.6 2.9 3.0]; y = [1.27792.1596 2.7311 2.5974 2.4068 1.6215 1.4178 0.9955 0.9666 0.8837 0.9639 1.00311.1233 1.1583]; 并且根据某种物理或数学关系确定y=f(x)的表达

    2024年02月02日
    浏览(10)
  • MATLAB机器人工具箱的下载与安装

    MATLAB机器人工具箱的下载与安装

    1.下载  MATLAB工具箱可从 Peter Corke提供的网站上免费下载,网址为:http://www.petercorke.com/Robotics_Toolbox. html。在 Downloading the Toolbox栏目中单击 here按钮进入下载页面,然后在该页面中填写国家、组织和身份等信息,进入机器人工具箱的下载页面。如图1-1所示,在下载页面中,它提供了机

    2024年02月12日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包