介紹如何使用quadprog and mpcqpsolver.
依然是解決一類典型的二次規劃問題:
通過看matlab文件中的例子可以基本了解如何使用。下面給出幾個例子:
quadprog:
%
% the use of quadprog
h =[1-
1;-1
2]; f =[-
2;-6
];a =[11
;-12
;21]
;b =[2
;2;3
];[x,fval,exitflag,output,lambda]=.
..quadprog
(h,f,a,b)%%
h =[1-
1;-1
2]; f =[-
2;-6
];aeq =[1
1];beq =0;
[x,fval,exitflag,output,lambda]=.
..quadprog
(h,f,
,,aeq,beq)
%% here you can set max iteration and tolerance
options =
optimoptions
('quadprog'
,'display'
,'iter'
,'maxiterations',5
,'tolfun'
,1e-16);
h =[1,
-1,1
-1,2
,-21
,-2,
4];f =[2
;-3;
1];lb =
zeros(3
,1);
ub =
ones
(size
(lb));
aeq =
ones(1
,3);
beq =1/
2;x0 =
;[x,fval,exitflag,output,lambda]
=quadprog
(h,f,
,,aeq,beq,lb,ub,x0,options)
值的注意的問題:
options =
optimoptions
('quadprog'
,'display'
,'iter'
,'maxiterations',5
,'tolfun'
,1e-16
);
在優化選項中,我們可以人為設定maxiteration, tolerance這種對迭代次數產生影響的引數,這個在工程問題中是至關重要的。
另外,通過檢視exitflag, 確定是否是正確解。只有exitflag == 1才對。通過檢視h的正定性,必須是正定矩陣,才能有解。通過檢視lamda,也就是拉格朗日橙子,必須不為負。
mpcqpsolver:
解決如下所示的問題,但是要注意,不等式約束採用了另一種方式,兩種方式都是可以的,這種大於號寫法,拉格朗日函式寫起來不好看,但是後面的對偶問題寫起來好看,對應的kkt條件的表示寫起來也好看,總之無論怎麼寫,總是一邊好看,另一邊就不好看。
mpcsolver首先要求h 是正定的,另外options裡面也沒法顯示迭代細節。用的是kwik演算法, 意思是算在sdp裡面的一支,我所學的sdp裡面沒學到這個,不是很了解kwik, 應該不是什麼主流演算法吧。
連個解算器mathworks連線:
mpcquadprog
Matlab非線性規劃
在matlab非線性規劃數學模型可以寫成一下形式 minf x s.t.begin ax le b aeq x beq c x le 0 ceq x 0 end f x 為目標函式,a,b,aeq,beq為線性約束對應的矩陣和向量,c x ceq x 為非線性約束。matlab求解命令為 x fmi...
Matlab線性 非線性規劃優化演算法(5)
值得單獨一說的是fminunc,fminseach,fminbnd的區別 fminunc只能用於求解連續函式,對於變數沒有限制 fminbnd只能用於求解單變數函式,fminsearch只能用於求解多變數函式,clc clear all fun x abs 1 x x0 1 x1 3 x2 3 我們...
Matlab 線性與非線性規劃
matlab的運籌與決策問題 線性規劃問題 函式 linprog f,a,b,aep,bep,lb,ub 引數分析 f 目標函式的係數排列 a 約束條件的係數矩陣 b 約束條件的增廣矩陣的結果 aep 等式的係數矩陣 bep 等式的結果矩陣 lb 所求解的最小值 ub 所求解的最大值 非線性規劃問題...