当前位置:网站首页>【MPC】①二次规划问题MATLAB求解器quadprog
【MPC】①二次规划问题MATLAB求解器quadprog
2022-07-01 10:14:00 【后厂村路蔡徐坤】
文章目录
一、概述
二次规划是指约束为线性的二次优化问题。在Matlab中,quadprog是具有线性约束的二次目标函数求解器。
(一)二次规划标准形式
min x 1 2 x T H x + f T x \mathop {\min }\limits_x \frac{1}{2}{ {\bf{x}}^{\bf{T}}}{\bf{Hx}} + { {\bf{f}}^{\bf{T}}}{\bf{x}} xmin21xTHx+fTx其实H是Hessian 阵,是n乘n的对称阵。
1、海森矩阵的正定性与函数最优性
- 如果 Hessian 矩阵是半正定的,则我们说该式是一个凸二次规划,在这种情况下该问题的困难程度类似于线性规划。如果有至少一个向量满足约束并且在 可行域 有下界,则凸二次规划问题就有一个全局最小值。
- 如果是正定的,则这类二次规划为严格的凸二次规划,那么全局最小值就是唯一的。
- 如果是一个 不定矩阵 ,则为非凸二次规划,这类二次规划更有挑战性,因为它们有多个平稳点和局部极小值点。
2、基本数学概念
- 基础概念:https://blog.csdn.net/jbb0523/article/details/50598523
- 凸 严格凸,举例:https://zhuanlan.zhihu.com/p/399549564
3、对称阵的正定性判断
- 正定矩阵:矩阵的所有特征值均大于0
- 半正定矩阵:矩阵的所有特征值均非负
- 负定矩阵:矩阵所有特征值均小于0
https://blog.csdn.net/Infinity_07/article/details/109569450
4、matlab正、半正、负定阵生成,与quadprog验证
(1)matlab判断正定性:
% 判断矩阵m是正定、半正定还是负定
m = [2 -1; -1 2];
if issymmetric(m) % 检查矩阵是否对称
% disp('矩阵对称');
d = eig(m); % 计算矩阵特征值
if all(d > 0)
disp('矩阵正定');
elseif all(d >= 0)
disp('矩阵半正定');
else
disp('矩阵负定');
end
else
disp('矩阵不对称');
end
(2)matlab产生正定阵的操作
https://blog.csdn.net/zhao523520704/article/details/52918376/
H_posi=diag([1,2,3]);
H_semi=diag([0,2,3]);
H_nega=diag([-1,-2,-3]);
(二)输入参数
符号 | 参数含义 |
---|---|
H | 二次目标矩阵 |
f | 线性目标向量 |
A | 线性不等式矩阵 |
b | 线性不等式向量 |
Aeq | 线性等式约束矩阵 |
beq | 线性等式约束向量 |
lb | 下界 |
ub | 上界 |
(三)输出参数
符号 | 参数含义 |
---|---|
x | 解,以实数向量形式返回 |
wsout | 解的热启动对象 |
fval | 再解处的目标函数值 |
exitflag | quadprog停止的原因 |
output | 有关优化过程的信息,以结构体形式返回 |
lambda | 解处的拉格朗日乘数 |
二、MATLAB基础语法
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(___)
[x,fval,exitflag,output] = quadprog(___)
[x,fval,exitflag,output,lambda] = quadprog(___)
[wsout,fval,exitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq,lb,ub,ws)
三、MATLAB典型求解样例
(一)具有线性不等式约束的二次规划
H = [1 -1; -1 2];
f = [-2; -6];
A = [1 1; -1 2; 2 1];
b = [2; 2; 3];
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b);
x =
0.6667
1.3333
fval = -8.2222
exitflag =
1
(二)具有线性等式约束的二次规划
H = [1 -1; -1 2];
f = [-2; -6];
Aeq = [1 1];
beq = 0;
[x,fval,exitflag,output,lambda] = ...
quadprog(H,f,[],[],Aeq,beq)
x = -0.8000
0.8000
fval = -1.6000
exitflag =
1
(三)具有线性约束和边界的二次规划
H = [1,-1,1
-1,2,-2
1,-2,4];
f = [2;-3;1];
lb = zeros(3,1);
ub = ones(size(lb));
Aeq = ones(1,3);
beq = 1/2;
x = quadprog(H,f,[],[],Aeq,beq,lb,ub);
边栏推荐
猜你喜欢
关于#SQL#的问题,如何解决?
数字藏品市场新局面
程序员都想去国企?技术落后薪资低,躺平几年出来都找不到工作...
SQL server2014 failed to delete the database, with an error offset of 0x0000
The programmer was beaten.
Prefabricated dishes usher in the "golden age", who can lead the next trillion market
scratch大鱼吃小鱼 电子学会图形化编程scratch等级考试二级真题和答案解析2022年6月
缺少比较器,运放来救场!(运放当做比较器电路记录)
Initial experience of Flink, a mainstream real-time stream processing computing framework
Hardware midrange project
随机推荐
About widthstep of images in opencv
数字藏品市场新局面
【论文阅读】Trajectory-guided Control Prediction for End-to-end Autonomous Driving: A Simple yet Strong Ba
CRC verification
在中金证券上做基金定投安全吗?
STM32逆变器电源设计方案,基于STM32F103控制器[通俗易懂]
It is interesting to understand MMAP in this way!
全球基金和资管的股票建仓率达到15年内新低
12.Gateway新一代网关
SQL SERVER2014删除数据库失败,报错偏移量0x0000...
Thread Basics
bash: ln: command not found
442. 数组中重复的数据
PHP string to binary conversion
渗透常用工具-Goby
亿学学堂帮个人开的证券账户安全吗?是不是有套路
High precision factorial
Floyd repeat
问下群里的各位,有使用flink oracle cdc的logminer方案,在生产上稳定运行的实际
The latest masterpiece of Alibaba, which took 182 days to produce 1015 pages of distributed full stack manual, is so delicious