数学建模线性规划实例及详细解答(MATLAB代码)
前言:
?最近在學習數學建模的算法與應用,以一本較好的書籍為指導(《數學建模算法與應用》),不過對于我來說,我主要去攻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 %上述轉換為求最小值,再提個符號變為上述求得目標值再來一道相對較難的:
/2表示絕對值x1x_{1}x1?當然這里的x1x_{1}x1?更上面的不一樣。然而,去掉絕對值的數,我們可以用(x1x_{1}x1?-x2x_{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:
?解:設x1x_{1}x1?,x2x_{2}x2?分別表示在產品I中通過設備A1A_{1}A1?,A2A_{2}A2?的機器個數,同樣x3x_{3}x3?,x4x_{4}x4?,x5x_{5}x5?,分別表示在產品I中通過設備B1B_{1}B1?,B2B_{2}B2?,B3B_{3}B3?的機器個數。x6x_{6}x6?,x7x_{7}x7?,x8x_{8}x8?,分別在產品II中表示通過設備A1A_{1}A1?,A2A_{2}A2?,B1B_{1}B1?的機器個數,x9x_{9}x9?表示在產品III中A2A_{2}A2?機器的個數。
有這樣的等式:x1x_{1}x1?+x2x_{2}x2?+x3x_{3}x3?=x4x_{4}x4?+x5x_{5}x5?,x6x_{6}x6?+x7x_{7}x7?=x8x_{8}x8?。
(圖來源《數學建模算法與應用習題解答》)
對于該MATLAB代碼我感覺是有點難度,在此小編就不在展示了哦,大家實力非常強,所以我就不展示了。😄😄😄
再來一道代碼詳細的題目:
在此,小編就不建模了,我給出一個好的建模解析給你們:
對于在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:3a1(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:3a3(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; %目標函數最終的值啊!!!寫這篇博客讓我承受了莫大的打擊,先是數學公式編輯的學習,再到放棄該學習,最后又是直接放圖片。再則自己為了讓讀者易懂,寫了幾頁的草稿…在此,我好像有點累了,我好像要去休息了。我想在此對大家說一句保護好身體哦,還有就是多多支持!!!😄😄😄
好了,這篇博客也寫完了,希望對大家有幫助!!!
總結
以上是生活随笔為你收集整理的数学建模线性规划实例及详细解答(MATLAB代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue报错:error Strings
- 下一篇: SSIS 学习之旅 FTP访问类