MATLAB线性规划相关函数用法

一.线性规划的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,可能写的有点乱。这些函数如果不经常用很可能忘所以记下来方便以后复习,重要的是大家一起分享吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

势能线段树(均摊分析)

势能线段树 线段树能够通过打懒标记实现区间修改的条件有两个: 能够快速处理懒标记对区间询问结果的影响能够快速实现懒标记的合并 但有的区间修改不满足上面两个条件(如区间整除/开方/取模等)。 但某些修改存在一些奇妙的性质&#xff0c…

.NET Core 出得云端入得本地,微软让跨平台应用勇敢表达

地铁公交的上班路上、咖啡馆里等人的时候,这些碎片化时间都是现代人学习和充电的机会,根据第42次CNNIC中国互联网发展状况统计报告,截至2018年6月,网络文学用户规模已达4.06亿,占网民总体50.6%;手机网络文学…

【每日一题】7月3日精讲—毒瘤xor

【每日一题】7月3日精讲—毒瘤xor 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 32768K,其他语言65536K Special Judge, 64bit IO Format: %lld文章目录题目描述题解:代码:题目描述 输入描述: 第一行一个整…

【DP】集合问题(2015特长生 T4/luogu 1466)

正题 luogu 1466 题目大意 给你1~n的一个集合,问你有多少种方案把该集合分成两个集合,且两集合的数字之和相等 解题思路 设fi,jf_{i,j}fi,j​为放好i个数且集合1的和比集合2的和大j的方案书 那么对于第i个放到两个集合中,分别从fi−1,j−…

P5212-SubString【LCT,SAM】

正题 题目链接:https://www.luogu.com.cn/problem/P5212 题目大意 开始一个字符串SSS,有nnn次操作 在SSS末尾加入一个字符串询问一个串在SSS中出现了多少次 强制在线 解题思路 强制在线的话,只有SAM\text{SAM}SAM能够支持动态插字符了,但…

了解改良圈算法

一.相关知识——Hamilton圈 什么是Hamilton圈? 哈密顿图(哈密尔顿图)(英语:Hamiltonian path,或Traceable path)是一个无向图,由天文学家哈密顿提出,由指定的起点前往指…

ASP.NET Core Middleware

中间件(Middleware)是ASP.NET Core中的一个重要特性。所谓中间件就是嵌入到应用管道中用于处理请求和响应的一段代码。ASP.NET Core Middleware可以分为两种类型:Conventional MiddlewareIMiddlewareConventional Middleware这种中间件没有实现特定的接口或者继承特…

NOIP复健计划——动态规划

树形DP [POI2011] DYN-Dynamite 二分KKK check(mid): 能否选出mmm个点,使得 ∀i为关键点,Minjisselected{dis(i,j)}≤mid\forall i为关键点,Min_{j\ is\ selected}\{dis(i,j)\}\leq mid∀i为关键点,Minj is selecte…

【每日一题】7月6日精讲—平衡二叉树

来源:牛客网: 文章目录题目描述题解:代码:时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 1048576K,其他语言2097152K 64bit IO Format: %lld题目描述 平衡二叉树,顾名思义就…

【DP】晨练计划(ybtoj)

正题 ybtoj 题目大意 给你n个时间点 在第i个时间点跑步有aia_iai​点贡献,但会加一点疲惫值,疲惫值不能超过m 当前疲惫值为x,那么你可以花x点时间来清空疲惫值,当然也可以啥都不干 问你第n个时间后疲惫值为0的最大贡献 解题思…

MATLAB灰色预测

一.灰色预测 1.灰色系统下的灰色预测 <1>什么是灰色系统&#xff1f; 所谓的灰色系统其实就是夹杂在白色系统和黑色系统之中的一种系统&#xff0c;而白色系统就是全部信息已知的系统&#xff0c;黑色系统就是全部信息未知的系统。所以&#xff0c;夹在这两种系统中间…

ASP.NET Core 中的依赖注入

什么是依赖注入软件设计原则中有一个依赖倒置原则&#xff08;DIP&#xff09;&#xff0c;为了更好的解耦&#xff0c;讲究要依赖于抽象&#xff0c;不要依赖于具体。而控制反转(Ioc)就是这样的原则的其中一个实现思路, 这个思路的其中一种实现方式就是依赖注入(DI)。什么是依…

P4357-[CQOI2016]K远点对【K-Dtree】

正题 题目链接:https://www.luogu.com.cn/problem/P4357 题目大意 平面上给出nnn个点&#xff0c;求第kkk远的点对距离。 解题思路 K-Dtree\text{K-Dtree}K-Dtree的模板题&#xff0c;但是这里只有二维&#xff0c;大概是每次根据一个维度把nnn个点分成两半像线段树一样丢到下…

【每日一题】7月7日题目精讲—最短路

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 1048576K&#xff0c;其他语言2097152K 64bit IO Format: %lld题目描述 给一个连通图&#xff0c;每次询问…

【dfs】栅栏的木料(2012特长生 T4)

题目大意 给你n个木板&#xff0c;给你这些木板的长度&#xff0c;你可以把这些木板切开&#xff0c;现在有m个木料&#xff0c;问你最多可以切出多少个木料 解题思路 可以dfs枚举每个木料用哪个木板来切 但这样显然会超时&#xff0c;那么考虑剪枝 1.对于一些木板&#xf…

【c++算法刷题笔记】——洛谷1

2020/2/14-2/16 1. 循环提取一个数的每一位数字 while (d > 0) //d0跳出循环 {xd%10; //x每次为d的个位数 d d / 10; //相当于d每次舍去个位数 }2. cnew创建动态二维数组 int *anew int[n]; //创建动态一维数组 int(* a)[2…

【活动(广州)】office365的开发者训练营

Office 365每月有超过1亿的商业活跃用户&#xff0c;是现有最大的生产力服务。Office 365为开发人员提供了一个令人难以置信的机会&#xff0c;包括业务关键数据和数百万用户&#xff0c;以及一个旨在让人们保持工作流程的平台。作为一名开发人员&#xff0c;您可以使用每天使用…

P5325-[模板]Min_25筛

正题 题目链接:https://www.luogu.com.cn/problem/P5325 题目大意 定义一个积性函数满足f(pk)pk(pk−1)f(p^k)p^k(p^k-1)f(pk)pk(pk−1) 求∑i1nf(i)\sum_{i1}^nf(i)∑i1n​f(i) 解题思路 首先我们可以把f(pk)f(p^k)f(pk)是质数的情况拆成一个222阶的多项式f(x)x2−xf(x)x^2…

牛客网【每日一题】7月8日 Alliances

来源&#xff1a;牛客网 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 5秒&#xff0c;其他语言10秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 树国是一个有n个城市的国家&#xff0c;城市编号…

【bfs】廉价最短路径(2013特长生 T4)

题目大意 给你一个图&#xff0c;每条边有一个代价&#xff0c;让你求0到1在最短路径的前提下的最小代价 解题思路 bfs同时求个最代价 代码 #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #de…