matlab學習筆記之求解線性規划問題和二次型問題


一、線性規划問題

  已知目標函數和約束條件均為線性函數,求目標函數的最小值(最優值)問題。

1.求解方式:用linprog函數求解

2.linprog函數使用形式:

  x=linprog(f,A,b) 

  x=linprog(f,A,b,Aeq,beq) 

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

  x=linprog(f,A,b,Aeq,beq,lb,ub,x0) 

  x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)  

  [x,fval]=linprog(…) 

  [x, fval, exitflag]=linprog(…) 

  [x, fval, exitflag, output]=linprog(…) 

  [x, fval, exitflag, output, lambda]=linprog(…)

3.介紹一種最常用的:

  [x,fval,exitflag,output,lambda] = linprog(f,A,b,Aep,beq,lb,ub); 

其中,f是目標函數系數矩陣;A和b是不等式約束條件的參數;Aeq和beq是等式約束條件的參數;lb和ub為x取值的取值范圍。

  lambda.ineqlin—不等式約束A,b

  lambda.eqlin—等式約束Aep,bep

  lambda.upper—上界條件ub

  lambda.lower—下界條件lb

4.實例:

目標函數:f(x) = –5x1 – 4x2 –6x3,

約束條件:

  x1 – x2 + x3 ≤ 20

  3x1 + 2x2 + 4x3 ≤ 42

  3x1 + 2x2 ≤ 30

  0 ≤ x1, 0 ≤ x2, 0 ≤ x3

Matlab程序:

>> f = [-5; -4; -6]; A = [1 -1 1; 3 2 4; 3 2 0]; b = [20; 42; 30]; lb = zeros(3,1);
>> [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb);
>> x
x =
    0.0000
   15.0000
    3.0000

>> fval
fval =
  -78.0000

二、二次型規划問題

  理解完線性規划問題再來學習二次型規划問題就簡單得多了,可以相似類比。

1.求解方式:用quadprog函數來求解

2.quadprog函數使用形式:

  x = quadprog(H,f)

  x = quadprog(H,f,A,b)

  x = quadprog(H,f,A,b,Aeq,beq)

  x = quadprog(H,f,A,b,Aeq,beq,lb,ub)

  x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)

  x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)

  x = quadprog(problem)

  [x,fval] = quadprog(H,f,...)

  [x,fval,exitflag] = quadprog(H,f,...)

  [x,fval,exitflag,output] = quadprog(H,f,...)

  [x,fval,exitflag,output,lambda] = quadprog(H,f,...)

 

3.實例:

 

Matlab程序:

>> H = [4 -4;-4 8];f = [-6;-3];A = [1 1;4 1];b = [3;9];lb = ones(2,1);
>> [x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb);
>> x
x = 
    1.9500

    1.0500

>> fval
fval =
  -11.0250

 

注:若求解的是最大值問題亦可轉化為求最優化問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM