【MPC】①二次规划问题MATLAB求解器quadprog

本文详细介绍了二次规划问题在MATLAB中的标准形式,包括正定矩阵的概念及其在二次规划中的作用。通过quadprog函数,演示了如何解决带有线性不等式和等式约束的二次规划问题,并给出了具体示例代码和输出结果。此外,还提供了矩阵正定性的MATLAB判断方法及生成正定、半正定、负定矩阵的示例。
摘要由CSDN通过智能技术生成

一、概述

二次规划是指约束为线性的二次优化问题。在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再解处的目标函数值
exitflagquadprog停止的原因
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)
  • 48
    点赞
  • 210
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
利用二次规划Quadratic Programming)的模型预测控制(Model Predictive Control,MPC)可以通过MATLAB代码完整推导出来。下面是一种可能的推导过程: 1. 定义MPC问题的模型: a. 系统模型:确定被控制对象的状态空间方程和输出方程,包括状态变量、输入变量和测量变量的定义。 b. 设计控制:定义控制的输出量,例如目标函数,控制目标和约束条件。 2. 初始化MPC设置: a. 设置采样时间:确定采样时间步长,即控制周期。 b. 设置预测时间:选择需要预测的未来时间步数,即预测时域。 c. 设置控制时域:选择需要控制的时间步数,即控制时域。 d. 设置权重矩阵:根据控制目标和约束条件设置权重矩阵,用于计算目标函数。 3. 构建MPC问题的目标函数和约束条件: a. 设计目标函数:根据控制目标,构建目标函数的矩阵和向量,包括状态误差、控制输入和测量输出等。 b. 设计约束条件:根据约束条件,构建约束条件的矩阵和向量,包括状态限制、控制输入限制和偏差限制等。 4. 编写MPC代码进行求解: a. 定义MATLAB变量:定义和初始化用于存储目标函数和约束条件矩阵的MATLAB变量。 b. 利用MATLAB的优化工具箱:利用MATLAB中的二次规划函数(如quadprog)对目标函数和约束条件进行求解。 c. 获得最优解:获取优化问题的最优解,即控制的输出变量。 5. 实施控制策略: a. 将控制的输出作为系统的输入。 b. 继续迭代:更新系统状态和测量值,再次运行MPC模型,以实现闭环控制。 以上是一种可能的利用二次规划的MPC推导和MATLAB代码实现的过程。实际过程中,还可能包括一些特定于问题的定制化步骤。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后厂村路蔡徐坤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值