一。前記
本人matlab萌新,在學習數學
建模
的時候特意寫下一點東西以供回頭複習,也可以給xdm一些介紹和鞏固。本次較為簡單,就來講講
線性規劃
問題的一些matlab寫法。
二。MATLAB中的求解函式
是決策向量,一個包含n個自變數的向量,即
;
fval是最後的最值(應該只可以計算最小值,如果是求最大值就要取相反數轉為求最小值)
linprog是函式名
f是
價值向量
,是下面第一個公式裡的
組成的1×n型向量,
A是所有不等式組的
係數矩陣
;
b是不等式後面的值;
Aeq是恆等式前的係數矩陣,beq是恆等式右側的值
lb,ub分別表示決策向量的下、上限,即對自變數自身的限制條件。
看著抽象,到時候看具體例題吧。
三。題型和解法
在求解現實問題中,如果可以用線性規劃模型解決,必定會產生一下基本形式:
第一行是題目所求的一個最值,第二、三行是一些限定條件,第四行是關於x本身的一些條件。
如果上面的
標準型公式
有些抽象的話,具體的例子(見下)就能讓大家理解了。在如解決工廠怎麼生產可以利潤最大化等等問題的時候,往往最後會得到上述這樣的
方程組
,那麼如果手算覺得麻煩,不妨採用MATLAB來計算吧!
但是要注意,MATLAB這個語言和人不一樣,要讓MATLAB理解這幾行算式,需要要對它們變形,下面來看看具體過程:
1)對max z 或者min z的變形。MATLAB需要把方程組變成矩陣形式,且要注意MATLAB的對應公式是
不計算max
的,所以要把max換成min。求一個式子的最大值,就是求這個式子取負的最小值。於是第一行max所求轉化為:
, 這裡的c是係數的1×n型矩陣,這個是
線性代數
表達;
2)相似地,把後面的一系列方程化成係數矩陣乘自變數矩陣的形式,這裡也要注意,對應公式不計算
,所以對於≥部分也應取負:
, 這個式子只對原來是≥的取負,其他的就不需要了;
ok,現在我們對例題進行求解
例1。求解以下線性規劃問題:
解:先化方程為MATLAB看得懂的形式:
現在使用
linprog函式
:
f=[-2 -1 5];
A=[-2 5 -1; 1 3 1]; 這裡只有兩個不等式,矩陣裡的分號是換行;
b = [-10 12];
Aeq=[1 1 1],beq=7; 這裡恆等式只有一個,beq不需要變成矩陣啦;
lb=[0 0 0]=zeros(3,1), 這裡僅有下限。
好啦現在可以寫這個函數了:
>>
f
=
[
-
2
-
3
5
];
>>
A
=
[
-
2
5
-
1
;
1
3
1
];
>>
b
=
[
-
10
;
12
];
>>
Aeq
=
[
1
,
1
,
1
];
beq
=
7
;
>>
[
x
,
y
]=
linprog
(
f
,
a
,
b
,
aeq
,
beq
,
zeros
(
3
,
1
));
>>
x
,
y
=
-
y
%這裡要注意,之前求的是-y的最小值,現在取相反數回到原來的值;
然後得到x,y的解:
x =
6。4286
0。5714
0。0000
y =
14。5714
是不是很容易哈哈哈(尬)
特別地,對於求
而條件仍然是
型,
依然可以使用這種方法,具體過程是:
取
,
,那麼
;
;
於是上面的式子化為:
, 這裡的A,u,v,b已經是向量了
按照上面的普通解法就可以做了。
線性規劃的解法雖然簡單但是在很多時候都可以用到,值得使用。