一。前記

本人matlab萌新,在學習數學

建模

的時候特意寫下一點東西以供回頭複習,也可以給xdm一些介紹和鞏固。本次較為簡單,就來講講

線性規劃

問題的一些matlab寫法。

二。MATLAB中的求解函式

[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)

x

是決策向量,一個包含n個自變數的向量,即

[x_1,x_2,..,x_n]

fval是最後的最值(應該只可以計算最小值,如果是求最大值就要取相反數轉為求最小值)

linprog是函式名

f是

價值向量

,是下面第一個公式裡的

c

組成的1×n型向量,

A是所有不等式組的

係數矩陣

b是不等式後面的值;

Aeq是恆等式前的係數矩陣,beq是恆等式右側的值

lb,ub分別表示決策向量的下、上限,即對自變數自身的限制條件。

看著抽象,到時候看具體例題吧。

三。題型和解法

在求解現實問題中,如果可以用線性規劃模型解決,必定會產生一下基本形式:

max

z=\sum_{j=1}^{n}{c_{j}x_{j}},

A*x\leq b,

\sum_{j=1}^{n}{a_{ij}x_j}=b_i,i=1,2,...,m,

x_j\geq0,j=1,2,...,n.

第一行是題目所求的一個最值,第二、三行是一些限定條件,第四行是關於x本身的一些條件。

如果上面的

標準型公式

有些抽象的話,具體的例子(見下)就能讓大家理解了。在如解決工廠怎麼生產可以利潤最大化等等問題的時候,往往最後會得到上述這樣的

方程組

,那麼如果手算覺得麻煩,不妨採用MATLAB來計算吧!

但是要注意,MATLAB這個語言和人不一樣,要讓MATLAB理解這幾行算式,需要要對它們變形,下面來看看具體過程:

1)對max z 或者min z的變形。MATLAB需要把方程組變成矩陣形式,且要注意MATLAB的對應公式是

不計算max

的,所以要把max換成min。求一個式子的最大值,就是求這個式子取負的最小值。於是第一行max所求轉化為:

min

-c^Tx

, 這裡的c是係數的1×n型矩陣,這個是

線性代數

表達;

2)相似地,把後面的一系列方程化成係數矩陣乘自變數矩陣的形式,這裡也要注意,對應公式不計算

\geq

,所以對於≥部分也應取負:

-Ax\leq-b

, 這個式子只對原來是≥的取負,其他的就不需要了;

ok,現在我們對例題進行求解

例1。求解以下線性規劃問題:

max

z=2x_1+3x_2-5x_3,

x_1+x_2+x_3=7,

2x_1-5x_2+x_3\geq10,

x_1+3x_2+x_3\leq12,

x_1,x_2,x_3\geq0.

解:先化方程為MATLAB看得懂的形式:

min

w=-2x_1-x_2+5x_3,

x_1+x_2+x_3=7,

-2x_1+5x_2-x_3\leq-10,

x_1+3x_2+x_3\leq12,

x_1,x_2,x_3\geq0.

現在使用

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

是不是很容易哈哈哈(尬)

特別地,對於求

max

z=a_1\left| x_1 \right|+...+a_n\left| x_n \right|,

而條件仍然是

Ax\geq b

型,

依然可以使用這種方法,具體過程是:

u_i=\frac{x_i+\left| x_i \right|}{2}

v_i=\frac{\left| x_i \right|-x_i}{2}

,那麼

x_i=u_i-v_i

\left| x_i\right|=u_i+v_i

於是上面的式子化為:

max

z=\sum_{i=1}^{n}{u_i+v_i},

A(u,v)\leq b, \Rightarrow[A,-A]\cdot[u

v]^T\leq b

, 這裡的A,u,v,b已經是向量了

u,v\geq0

按照上面的普通解法就可以做了。

線性規劃的解法雖然簡單但是在很多時候都可以用到,值得使用。