数学建模线性规划实例及详细解答(MATLAB代码)

您所在的位置:网站首页 收敛函数举例说明例题及答案大全 数学建模线性规划实例及详细解答(MATLAB代码)

数学建模线性规划实例及详细解答(MATLAB代码)

2024-07-11 15:58| 来源: 网络整理| 查看: 265

前言:

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

注意:如要那本书的电子版可以关注我,然后免费送你!!!

1.题目1:

先来一道简单的吧: 图一 这是让大家熟悉一下对MATLAB代码的😄

1.1.MATLAB代码: 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 %上述转换为求最小值,再提个符号变为上述求得目标值

再来一道相对较难的: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191127200556922.png图2 图3 不知道大家看到绝对值会出现什么反应。我们可以定义其它的变量来代替绝对值里面的数,比如用( 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代码: 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:

图4 图5  解:设 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​。 图5 (图来源《数学建模算法与应用习题解答》) 对于该MATLAB代码我感觉是有点难度,在此小编就不在展示了哦,大家实力非常强,所以我就不展示了。😄😄😄 再来一道代码详细的题目: 图6 在此,小编就不建模了,我给出一个好的建模解析给你们: 图7 图8 对于在markdown中,其数学公式太难打了,所以,我就发一张这样的笔记,给大家看一下哈,这是我将每一步写成有数字的建模方式,有了这样的,我们就可以更好的写代码。(字有点丑,大家将就一下哈)

2.1.代码: %目标函数 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; %目标函数最终的值

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3