MATLAB线性规划相关函数用法

2023-10-29

一.线性规划的Matlab标准形式及软件求解

1. MATLAB中规定线性规划的标准形式为
在这里插入图片描述
其中c和 x为n 维列向量, A、 Aeq 为适当维数的矩阵,b 、beq为适当维数的列向量。 (Aeq 对应约束条件中等式约束的系数矩阵,A为约不等式约束的系数矩阵)
在这里插入图片描述
2. MATLAB函数用法——linprog

[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,OPTIONS) 

这里 x返回最优值对应自变量大多数是一个向量,fval 返回目标函数的最优值,A是不等式矩阵,b不等式右边的列向量,Aeq等式约束矩阵,beq等式右边的列向量,LB 和 UB 分别是变量 x的下界和上界, OPTIONS 是控制参数。(b,beq,LB,UB均为列向量)

3.例题
在这里插入图片描述

clc;clear;
c=[2;3;-5];
A=[-2,5,-1;1,3,1]; 
b=[-10;12]; 
Aeq=[1,1,1]; 
beq=7; 
[x,fval]=linprog(-c,A,b,Aeq,beq,zeros(3,1)); %MATLAB中所给函数求的是最小值因为题目中求最大值所以-c
fval=-fval;

4.可以转化为线性规划的问题
①对绝对值的处理
在这里插入图片描述
对于“x=u-v”和“|x|=u+v”,任何一个数都可以被两个非负数表示如果这个数为正数+,那么x=u,v=0;如果这个数为负数-,那么x=v,u=0.
②例题
在这里插入图片描述

clc;clear;
c=1:4;
c=[c,c]';
A=[1 -1 -1 1;1 -1 1 -3;1 -1 -2 3];
A=[A,-A];                               %构造变换矩阵
b=[-2 -1 -0.5]';
[y,fval]=linprog(c,A,b,[],[],zeros(8,1));%没有等式约束,对应空矩阵[]
x=y(1:4)-y(5:end);                      %变回到原问题x=u-v,对于y前四个为u,后四个为v

对于这个方法我看到只能用一个字形容——妙啊

二.整数线性规划的Matlab求解

1. 线性规划中实际情况中,很多情况要求自变量为整数

在这里插入图片描述

2. 整数线性规划函数——intlinprog*

[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,LB,UB,x0,OPTIONS) 

这里intcon为代表了整数决策变量所在的位置,x0为初始变量(在求之前对所求变量做一个预估)。其它和linprog函数中的含义一样。

3. 例题
在这里插入图片描述

clc;clear;
c=[-3 -2 -1]';
intcon=3;        %整数变量的位置为3 如果有3个都是整数则intcon=[1,2,3]
A=ones(1,3);
b=7;
Aeq=[4,2,1];
beq=12;
LB=zeros(3,1);
UB=[Inf;Inf;1];%对于x1,x2都是非负数,而x3为0-1之间的整数即x3=0或者1
[x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,LB,UB);

3.非线性规划的Matlab标准形式及软件求解

1.MATLAB中规定非线性规划的标准形式为
在这里插入图片描述
这里c(x)和ceq(x)为非线性向量函数

2. 非线性规划函数——fmincon

[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,LB,UB,nonlcon,OPTIONS)

这里fun是用M文件定义的函数f(x),x0是x的初始值,nonlcon是用M文件定义的非线性向量函数c(x)和ceq(x)。
其它和linprog函数中的含义一样。

3. 例题
在这里插入图片描述

%% 编写函数fun
function f=fun1(x)
f=sum(x.^2)+8;
end	
%% 编写函数nonlcon
function [g,h]=fun2(x)
g=[-x(1)^2+x(2)-x(3)^2,x(1)+x(2)^2+x(3)^2-20];%非线性不等式约束
h=[-x(1)-x(2)^2+2,x(2)+2*x(3)^2-3];%非线性等式约束
end
%% 主文件程序
clc;clear;
[x,fval]=fmincon(@fun1,rand(3,1),[],[],[],[],zeros(3,1),[],@fun2);

4.二次规划的Matlab标准形式及软件求解

1. MATLAB中规定二次规划的标准形式为
在这里插入图片描述
若某非线性规划的目标函数为自变量x的二次函数,约束条件又全是线性的,就称这种规划为二次规划

2. 二次规划函数——quadprog

[x,fval]=quadprog(H,f,A,b,Aeq,beq,LB,UB,x0,OPTIONS)

这里H为实对称矩阵,f相当于除去二次的线性规划系数

3. 例题
在这里插入图片描述

clc;clear;
H=[4,-4;-4,8];
f=[-6,-3]';
A=[1 1;4 1];
b=[3 9]';
[x,fval]=quadprog(H,f,A,b,[],[],zeros(2,1));%没有等式约束

5.无约束极值问题的数值解

1. fminunc和fminsearch

[x,fval] = fminunc(fun,x0,OPTIONS)
[x,fval] = fminsearch(fun,x0,OPTIONS)

使用optimset可以设置OPTIONS
fminsearch只能求出给定初值附近的一个极小值点(如果要求极大值求相反数)
2. 例题
在这里插入图片描述

clc;clear;
f=@(x)x(1)^3-x(2)^3+3*x(1)^2+3*x(2)^2-9*x(1);
g=@(x)-f(x);
[x1,fval1]=fminunc(f,rand(2,1));   %求极小值
[x2,fval2]=fminsearch(g,rand(2,1));%求极大值
fval2=-fval2;

6.约束极值问题的数值解

1. 单变量非线性函数极小值——fminbnd

在这里插入图片描述

[x,fval]=fminbnd(fun,x1,x2,OPTIONS)

fun是用M文件定义的函数、匿名函数(@)或者Matlab中单变量数学函数。x∈[x1,x2]
在这里插入图片描述

clc;clear;
f=@(x)(x-3)^2-1;
[f,fval]=fminbnd(f,0,5);

2.fseminf函数
在这里插入图片描述
这里c(x),ceq(x)为向量函数,Ki(x,wi)为标量函数,w1,w2,…,wn为附加变量。

[x,fval]=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,LB,UB,OPTIONS)

这里ntheta为半无穷约束Ki(x,wi)的个数,seminfcon用于定义非线性不等式约束c(x)、非线性等式约束ceq(x)和半无穷约束Ki(x,wi)的函数,seminfcon有两个输入参数x和s,s是推荐步长,也可以不使用。
在这里插入图片描述

%% 编写fun函数文件
function f=fun1(x)
f=sum((x-0.5).^2);
end
%% 编写seminfcon函数文件
function [c,ceq,k1,k2,s]=fun2(x,s)
c=[];ceq=[];%这里没有非线性等式和不等式约束
if isnan(s(1,1))%如果s是NaN
s=[0.2,0;0.2,0];
end
%取样值
w1=1:s(1,1):100;
w2=1:s(2,1):100;
%半无穷约束
k1=sin(w1*x(1)).*cos(w1*x(2))-1/1000*(w1-50).^2-sin(w1*x(3))-x(3)-1;
k2=sin(w2*x(2)).*cos(w2*x(1))-1/1000*(w2-50).^2-sin(w2*x(3))-x(3)-1;
%画图
plot(w1,k1,'-',w2,k2,'+');
end
%% 编写主程序
clc;clear;
x0=[0.5;0.2;0.3];%如果初值不合适可能得不到可行解
[x,feval]=fseminf(@fun1,x0,2,@fun2);

3. fminimax函数
在这里插入图片描述

[x,fval]=fminimax(fun,x0,A,b,Aeq,beq,LB,UB,nonlcon,OPTIONS)

这里nonlcon是用M文件定义的非线性向量函数c(x)和ceq(x)。
在这里插入图片描述

%% 编写函数文件
function f=fun(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];
end
%% 编写主程序调用函数文件
clc;clear;
[x,fval]=fminimax(@fun,rand(2,1));

2020/2/11今天看了数学建模线性相关的知识,感觉有很多不知道的函数用法,所以自己总结一下,以上全部来自于《数学建模算法与应用》。第一次写CSDN,可能写的有点乱。这些函数如果不经常用很可能忘所以记下来方便以后复习,重要的是大家一起分享吧!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB线性规划相关函数用法 的相关文章

  • 一次分配多个字段的聪明方法?

    由于遗留函数调用 我有时被迫编写像这样的丑陋的包装器 function return someWrapper someField a someField a b someField b and so on realistically it
  • Matlab-如何在曲线上绘制切线

    我在 matlab 中绘制了一个图表 plot x y 我的图表有不同的斜率 我如何在每个斜率上绘制切线并计算斜率的系数 如果您没有用于绘制点的显式函数 您可以使用有限差分 http en wikipedia org wiki Finite
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • 将自动生成的 Matlab 文档导出为 html

    我想为我开发的 Matlab 工具箱生成完整的帮助 我已经看到如何显示自定义文档 http www mathworks fr fr help matlab matlab prog display custom documentation h
  • Matlab Mex文件编译

    我正在尝试编译一个 mex 文件以在 matlab 中使用套接字连接 问题是它总是说我没有安装sdk或编译器 但我已经安装了 Visual Studio 2010 Express Visual Studio 2012 Express Vis
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • 句柄类和值类的区别

    我有一些 C 背景 想使用 Matlab 中的类 句柄和值类有什么区别 我知道如果我想定义一个带有重载运算符 例如 和 的矩阵类 我会使用值类 然而 有时 当我选择一个手柄类时 事情似乎只对我有用 MathWorks 提供了一些有关其用途的
  • 在 MATLAB 中重命名文件

    我正在尝试以编程方式重命名工作目录中的文件a temp txt to b hello txt 您建议如何这样做 MATLAB中有一个简单的文件重命名函数吗 我认为您正在寻找 MOVEFILE
  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 括号中的波形符字符

    在 MATLAB 中 以下代码执行什么操作 m func returning matrix 波浪号运算符 的作用是什么 在 Matlab 中 这意味着不要将函数中相应的输出参数分配到赋值的右侧 因此 如果func returning mat
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • 从开始/结束索引列表创建向量化数组

    我有一个两列矩阵M包含一堆间隔的开始 结束索引 startInd EndInd 1 3 6 10 12 12 15 16 如何生成所有区间索引的向量 v 1 2 3 6 7 8 9 10 12 15 16 我正在使用循环执行上述操作 但我想
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof

随机推荐

  • 【cdk的使用】C语言 一个仅用200行代码实现的logger系统 使用

    Github地址 https github com wujin1989 cdk 经常有人说 一个好的代码 不需要记录太多的log 确实 我信了 这也导致cdk也是基于这点出发的 所以cdk的logger系统很简单 仅仅200行左右代码 但是
  • [转]新一代 Linux 文件系统 btrfs 简介

    刘 明 ovis poly sina com 软件工程师 上海交通大学电子与通信工程系 2009 年 8 月 20 日 Btrfs 被称为是下一代 Linux 文件系统 近年来 ext2 3 遇到越来越多的扩展性问题 在期待 ext4 的同
  • 网编(20):UDP传输数据经常遇到的问题

    相对于TCP 协议的程序设计 UDP 协议的程序虽然程序设计的环节要少一些 但是由于UDP 协议缺少流量控制等机制 容易出现一些难以解决的问题 UDP 的报文丢失 报文乱序 connect 函数 流量控制 外出网络接口的选择等是比较容易出现
  • 简单谈谈weex、nvue和vue

    1 区别 weex we except 自己的理解 支持原生和vue并写 原生渲染 但是组件库不完善 仅支持编写app nvue嵌入了weex引擎 又有uniapp丰富的组件库 相当于dcloud写的weex升级版 在uniapp中支持使用
  • 把xml转为成javaBean javaBean转为成xml

    1 先定义javaBean package com wutka jox test import com wutka jox import java util public class TestBean implements java io
  • 【满分】【华为OD机试真题2023 JS】计算网络信号

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 计算网络信号 知识点广搜数组 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 网络信号经过传递会逐层衰减 且遇到阻隔物无法直接穿透 在此情况下需要计算某个位置的网
  • Selenium成长之路-09简单对象定位之link text方法

    有的时候 我们需要操作的元素是一个文字链接 那么我们可以通过 linktext 或 partiallinktext 进行元素 定位 今天我们先来介绍link text元素定位 百度首页上面的 新闻 hao123 地图 等就可以使用link
  • 用Go语言开发以太坊合约

    转发请注明出处 https blog csdn net ahy231 article details 114112638 序 网上关于 go 语言开发 DApp 的教程较少 因此我只能通过官方文档来系统学习 go 语言的 DApp 开发 这
  • MacOS13+系统运行Stable Diffusion出现的问题及解决方法汇总

    目录 先睹为快 开发环境 问题一 点 生成 按钮就退出程序 问题二 生成的图片是马赛克 第一步 解决环境问题 第二步 更新指定的torch版本包 步骤一 更新指定的torch包 步骤二 重新安装pytorch nightly版本的包 问题三
  • 解决虚拟机VM和WSL2切换问题

    操作环境 windows11 虚拟机 wsl2用的都是Ubuntu 18 04 问题描述 因为之前一直使用wsl2 很久没有使用VM虚拟机 今天打开的时候发现VM不能用了 于是查资料发现用VM和wsl2会冲突 解决办法 首先说一下怎么从之前
  • C和C++中字符串说明与记录

    文章目录 目的 C语言 字符基本说明 字符串声明与操作 字符串常用函数说明 属性 复制 合并 替换 查询 比较 类型检查 类型转换 C C 字符串基本说明 C string和C语言字符串转换 C string常用方法说明 属性 类型转换 修
  • flutter滚动Text文本

    GlobalKey scrollTextKey new GlobalKey Timer scrollTextTimer ScrollController controller int index 0 override void initSt
  • js实现首页图片的轮播效果

    在大多数的网站里面首页都会有一个图片轮播的效果 而我们开发者要实现这种效果要么是使用第三方插件 要么是使用js自己写函数来实现这种效果 而我自己就是自己写js来实现这种效果 首先 我们来看一下最终完成的效果 这个就是最终实现的效果 下面我们
  • Qt5.0+msvc2010:解決中文乱码的问题

    1 在Qt Creator的工具列 选择 工具 gt 选项 进入设置界面 2 在弹出的设置界面里面 选择 文本编辑器 选择 行为 选项卡 把 行为 选项卡下面的 默认编码 置成 UTF 8 同时 UTF 8 BOM 置成 总是删除 最后点
  • MySQL(69)MySQL查看视图

    MySQL查看视图 创建好视图后 可以通过查看视图的语句来查看视图的字段信息以及详细信息 本节主要讲解如何使用 SQL 语句来查看视图的字段信息以及详细信息 查看视图的字段信息 查看视图的字段信息与查看数据表的字段信息一样 都是使用 DES
  • docker安装fastdfs

    1 搜索fastdfs docker search fastdfs 2 拉取镜像 docker pull morunchang fastdfs 3 运行tracker docker run d name tracker net host m
  • Gerrit 使用git常见问题

    目录 git push 失败报错 remote rejected master gt master prohibited by Gerrit git push报错 ERROR missing Change Id in message foo
  • Android Logcat&debug实用技巧

    logcat 作为我们最常用的调试手段 相信大家都不会陌生 这里总结一下 在使用Logcat过程中 常用的一些debug技巧 目的是为了快速有效的帮助找到并解决问题 先来看一看Logcat打印结构 常用 logcat v threadtim
  • 网上投稿地址大全

    网上投稿地址大全 上海科技报 kgbshen online sh cn 厂长经理日报 cjb490 sina com 四川日报 sichuandaily scol com cn 四川农村日报 country scol com cn 华西都市
  • MATLAB线性规划相关函数用法

    一 线性规划的Matlab标准形式及软件求解 1 MATLAB中规定线性规划的标准形式为 其中c和 x为n 维列向量 A Aeq 为适当维数的矩阵 b beq为适当维数的列向量 Aeq 对应约束条件中等式约束的系数矩阵 A为约不等式约束的系