前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数学建模线性规划实例及详细解答(MATLAB代码)[通俗易懂]

数学建模线性规划实例及详细解答(MATLAB代码)[通俗易懂]

作者头像
Java架构师必看
发布2022-08-03 08:21:30
1K0
发布2022-08-03 08:21:30
举报
文章被收录于专栏:Java架构师必看

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说数学建模线性规划实例及详细解答(MATLAB代码)[通俗易懂],希望能够帮助大家进步!!!

前言:

 最近在学习数学建模的算法与应用,以一本较好的书籍为指导(《数学建模算法与应用》),不过对于我来说,我主要去攻MATLAB代码及建模方法,当然书里还有lingo代码解析。对于这本书,我感觉还是蛮难啃的,就像今天我写的这篇博客来说,其中最后一题就是我啃了不知道有多久,最后我老老实实的把每一步都写在纸上,然后一步一步的用MATLAB去试,最后终于搞懂了,此时心情不可言喻啊😃。如此,我来分享一下我学到的东西吧。

1.题目1:

先来一道简单的吧:

这是让大家熟悉一下对MATLAB代码的😄

1.1.MATLAB代码:

代码语言:javascript
复制
f=[-3,1,1];
A=[1,-2,1;4,-1,-2]
b=[11;-3];
Aeq=[-2,0,1];
beq=[1];
lb=zeros(3,1);
[x,fval]=linprog(f,A,b,Aeq,beq,lb,[])
x=-x                                                 %上述转换为求最小值,再提个符号变为上述求得目标值

只听到从架构师办公室传来架构君的声音:

独立扬新令,千营共一呼。有谁来对上联或下联?

再来一道相对较难的:

不知道大家看到绝对值会出现什么反应。我们可以定义其它的变量来代替绝对值里面的数,比如用( x 1 x_{1} x1​+ x 2 x_{2} x2​)/2表示绝对值 x 1 x_{1} x1​当然这里的 x 1 x_{1} x1​更上面的不一样。然而,去掉绝对值的数,我们可以用( x 1 x_{1} x1​- x 2 x_{2} x2​)/2,其中,每个数都大于等于0,接下来,我们可以上代码了。

1.2.MATLAB代码:

代码语言:javascript
复制
f=[1/2,1/2,1,1,3/2,3/2,2,2];
Aeq=[1/2,-1/2,-1/2,1/2,-1/2,1/2,1/2,-1/2;1/2,-1/2,-1/2,1/2,1/2,-1/2,-3/2,3/2;1/2,-1/2,-1/2,1/2,-1,1,3/2,-3/2];
beq=[0;1;-1/2];
lb=zeros(8,1);
[x,fval]=linprog(f,[],[],Aeq,beq,lb,[])

好了,我相信大家看到这里应该对相关的MATLAB代码熟悉了吧,那现在我们来实战一下。

2.题目2:

 解:设 x 1 x_{1} x1​, x 2 x_{2} x2​分别表示在产品I中通过设备 A 1 A_{1} A1​, A 2 A_{2} A2​的机器个数,同样 x 3 x_{3} x3​, x 4 x_{4} x4​, x 5 x_{5} x5​,分别表示在产品I中通过设备 B 1 B_{1} B1​, B 2 B_{2} B2​, B 3 B_{3} B3​的机器个数。 x 6 x_{6} x6​, x 7 x_{7} x7​, x 8 x_{8} x8​,分别在产品II中表示通过设备 A 1 A_{1} A1​, A 2 A_{2} A2​, B 1 B_{1} B1​的机器个数, x 9 x_{9} x9​表示在产品III中 A 2 A_{2} A2​机器的个数。

有这样的等式: x 1 x_{1} x1​+ x 2 x_{2} x2​+ x 3 x_{3} x3​= x 4 x_{4} x4​+ x 5 x_{5} x5​, x 6 x_{6} x6​+ x 7 x_{7} x7​= x 8 x_{8} x8​。

(图来源《数学建模算法与应用习题解答》)

对于该MATLAB代码我感觉是有点难度,在此小编就不在展示了哦,大家实力非常强,所以我就不展示了。😄😄😄

再来一道代码详细的题目:

在此,小编就不建模了,我给出一个好的建模解析给你们:

对于在markdown中,其数学公式太难打了,所以,我就发一张这样的笔记,给大家看一下哈,这是我将每一步写成有数字的建模方式,有了这样的,我们就可以更好的写代码。(字有点丑,大家将就一下哈)

2.1.代码:

代码语言:javascript
复制
%目标函数
c=[3100;3800;3500;2850];     %由目标函数可知有12个未知数,且有一些规律,大家可以自行找一下
c=c*ones(1,3);               %使c变成一个4行3列的函数,并且,刚刚对应于目标函数未知量前面的系数
c=c(:);                    %将c以列排序
%接下来就看约束条件1,可看出未知数前面系数是1,且需要构造一个下面的数组
a1=zeros(3,12);
for i=1:3
    a1(i,4*i-3:4*i)=1;          %如果大家看不懂的话,可以去MATLAB上试一下这段代码最后数组的结果
end
b1=[10 16 8]';
%看约束条件2
a2=zeros(4,12);
for i=1:4                             
    a2(i,i:4:12)=1;                    %如果大家看不懂的话,可以去MATLAB上试一下这段代码最后数组的结果
end
b2=[18 15 23 12]';
%看约束条件3
bb=[480;650;580;390];
a3=zeros(3,12);
for i=1:3
    a3(i,4*i-3:4*i)=bb;           %如果大家看不懂的话,可以去MATLAB上试一下这段代码最后数组的结果
end
b3=[6800 8700 5300]';
a=[a1;a2;a3];
b=[b1;b2;b3];
%看平衡条件
aeq=zeros(2,12);             %如果大家看不懂的话,可以去MATLAB上试一下这段代码最后数组的结果
aeq(1,1:4)=1/10;
aeq(1,5:8)=-1/16;
aeq(2,5:8)=1/16;
aeq(2,9:12)=-1/8;
beq=[0;0];
lb=zeros(12,1);
[x,y]=linprog(-c,a,b,aeq,beq,lb,[])
x=reshape(x,[4,3])         %解出的x值以列排序,将它重组为3*4的数组
x=sum(x')                  %表示舱口1,2,3分别放入货物的总重量
y=-y;                  %目标函数最终的值

啊!!!写这篇博客让我承受了莫大的打击,先是数学公式编辑的学习,再到放弃该学习,最后又是直接放图片。再则自己为了让读者易懂,写了几页的草稿…在此,我好像有点累了,我好像要去休息了。我想在此对大家说一句保护好身体哦,还有就是多多支持!!!😄😄😄

好了,这篇博客也写完了,希望对大家有帮助!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-012,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
    • 1.题目1:
      • 1.1.MATLAB代码:
        • 1.2.MATLAB代码:
          • 2.题目2:
            • 2.1.代码:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档