Matlab 中的線性規劃函式使用方法

2021-06-08 16:42:13 字數 2592 閱讀 2171

線性規劃

lp(linear programming,線性規劃)是一種優化方法,在優化問題中目標函式和約束函式均為向量變數的線性函式,lp問題可描述為:

min  x

s.t.

a·x b

aeq·x=beq

vlb x vub

其中 ,b,beq均為向量,a,aeq為矩陣,x為向量變數.矩陣a和向量b是線性不等式約束條件的係數,aeq和beq是等式約束條件的係數.

在matlab中,用於lp的求解函式為linprog.其呼叫格式為:

[x,fval,lambda]=linprog

(f,a,b,aeq,beq,vlb,vub,x0,options)

其中f,a,b,是不可預設的輸入變數,x是不可預設的輸出變數,它是問題的解.vlb,vub均是向量,分別表示x的下界和上界,x0為x的起始點,options為optimset函式中定義的引數的值,fval是目標函

數在解x處的值,lambda為在解x處的lagrange乘子.lambda.lower對應於vlb,lambda.upper對應於ulb,lambda.ineqlin是對應於線性不等式約束的,lambda.eqlin是對應於線性等式約束的.

下面舉乙個小例子看看函式的作用:

minz=-4a+b+7c

s.t.

a+b-c=5 3a-b+c<=4

a+b-4c<=-7 a,b>=0

問a,b,c分別取何值時,z有最小值

編寫m檔案

c=[-4 1 7];

a=[3 -1 1;1 1 -4];

b=[4; -7];

aeq=[1 1 -1];

beq=[5];vlb=[0, 0];

vub=;[x,fval]=linprog(c,a,b,aeq,beq,vlb,vub)

結果:x = 2.2500 6.7500 4.0000fval = 25.7500

即a,b,c分別取2.2500 6.7500 4.0000時,z有最小值25.7500

更加詳細的例子如下,因為上面沒有講明最大值與最小值的區別,補充如下:

函式格式:linprog(f,a,b,a1,b1,xstart,xend)

f:求解最小函式的表示式係數矩陣是m*1的矩陣

a:≤不等式條件約束矩陣其均為形式

b:a對應不等式右邊的常數項

a1:=等式條件約束矩陣

b1:a1對應不等式右邊的常數項

xstart:x的取值範圍的最小值的係數矩陣為n*1的矩陣

xend:x的取值範圍的最大值的係數矩陣為n*1的矩陣

函式說明:不存在的項填寫即可

函式功能:線性規劃求最優值.

例子1:

求f=3*x1+6*x2+2*x3的最大值

滿足的條件是

3*x1+4*x2+x3≤2

x1+3*x2+2*x3≤1

且x1、x2、x3均大於等於0

matlab求解如下

a =[ 3 4 1

1 3 2 ]

b =[ 2

1 ]

f=[ -3

-6 -2 ]%這裡為什麼會是負數,因為matlab求的是f的最小值,要求最大值則取要求係數的相反數即可.

x=[ 0

0 0 ]

linprog(f,a,b,,,x,)%執行的matlab命令後輸出的如下內容.注意這裡的表示那一項不存在.當然最後那乙個也可以不要即linprog(f,a,b,,,x)

optimization terminated.

ans =

0.4000

0.2000

0.0000%即x1=0.4,x2=0.2,x3=0為最優解.帶回原式我可以知道f的最大值=3*0.4+6*0.2=2.4

例子2:

求f=-2*x1-3*x2-x3的最小值

滿足的條件是

x1+x2+x3≤3

x1+4*x2+7*x3+x4=9

且x1、x2、x3、x4均大於等於0

matlab求解如下

原題等價於求f=-2*x1-3*x2-x3+0*x4的最小值

其條件等價於

x1+x2+x3+0*x4≤3

x1+4*x2+7*x3+x4=9

則在matlab輸入如下內容

a=[1 1 1 0]

b=[3]

a1=[1 4 7 1]

b1=[9]

x=[ 0

0 0

0] f=[ -2

-3 -1

0] linprog(f,a,b,a1,b1,x)%執行命令或者輸入linprog(f,a,b,a1,b1,x,)

optimization terminated.

ans =

1.0000

2.0000

0.0000

0.0000

%說明x1=1,x2=2,x3=0,x4=0取得最小值

matlab中的線性規劃

matlab中的線性規劃 目前本人基於matlab做了一些建模入門的基礎教程,可以在這裡分享給大家,matlab中關於linprog的具體使用語法。其實對於乙個剛入門時候的小七來說,看到這個圖腦袋一陣模糊,具體怎麼用,依舊一臉懵。在matlab學習中,最好用的學習方法莫過於通過乙個具體的例項,下面我...

Matlab 線性規劃函式linprog之三 用例

1 inprog函式是用來求解線性規劃問題的。什麼是線性規劃問題?就是在一系列的線性條件的約束下,從而規定了可行解,在通過具體的目標函式,求得滿足函式 的最優的解 例如平常的線性規劃函式的例子 而在matlab中使用matlab 標準的格式 若是目標函式是求解最大值的話,則取 c形式 具體的應用 c...

線性規劃(matlab實現)

那天上了線性規劃,老師總是說,程式設計怎麼實現,一本天大出的薄薄的最優化方法的書,還有程式設計的步驟,我晚上就試了試,這個陣列設定,是按照書上的乙個例題。高興的是單純型表的遍歷正確,但還沒有最後輸出最有值,當時有點困了。b 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 b 6 8 ...