Matlab-Yalmip-MPC教程

博客中所有内容均来源于对yalmip官方教程的翻译以及自己在学习过程中的心得体会:https://yalmip.github.io/tutorials/

一、基础MPC形式(Model predictive control - Basics)

       首先,让我们定义线性时不变(Linear Time-Invariant Systems)系统及控制问题的数值数据。以单输入单输出问题为例:

yalmip('clear') %清除所有由YALMIP生成的变量
clear all %清除MATLAB工作区中的所有变量

% MPC模型定义
A = [2 -1;1 0.2]; %状态矩阵
B = [1;0]; %输入矩阵
nx = 2; %状态变量
nu = 1; %输入变量

% MPC参数设置
Q = eye(2); %状态惩罚矩阵
R = 2; %控制输入的惩罚系数
N = 7; %预测时域

% 初始状态变量
x0 = [3;1];

优化问题的目标是在有限时域内最小化状态和控制轨迹的代价函数,并满足所设定的约束条件。

1.显示预测形式

       实现的第一个版本明确地将预测状态表示为给定当前状态和未来控制序列的函数(下文将提出更好的方法)。通过简单地循环仿真方程,并在时域内收集约束和目标项。请注意快速定义控制输入列表的过程。

u = sdpvar(repmat(nu,1,N),repmat(1,1,N)); %控制输入量定义,生成一个1*N的cell,cell中每一个元素的大小为nu*1

constraints = []; %约束定义,这个必须在程序中加入
objective = 0;
x = x0;
for k = 1:N
    x = A*x + B*u{k};
    objective = objective + norm(Q*x,1) + norm(R*u{k},1);
    constraints = [constraints, -1 <= u{k}<= 1, -5<=x<=5];
end

生成了约束和目标函数后,我们就可以求解优化问题。

optimize(constraints,objective);
value(u{1})

在上述优化问题中的状态变量的初始值是给定的,每次遇到新的初始状态时都要更改初始值,为了避免一些不必要的复杂计算,我们将问题的初始状态作为决策变量来处理。

u = sdpvar(repmat(nu,1,N),repmat(1,1,N));
x0 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值