clear;clc;
delta_t = 0.01; %控制周期10ms
sim_time = 5; %仿真时间5s
%% 模型参数
m = 1; %滑块质量,增加了5%作为建模误差
k = 10;
b = 10;
pos = 0;
vel = 0;
A_ = [1 delta_t;-k*delta_t/m 1-b*delta_t/m]; %离散化预测模型参数A
B_ = [0;delta_t/m]; %离散化预测模型参数B
%% 控制参数
p = 60; %控制时域(预测时域)
Q = 10*eye(2*p); %累计误差权重
W = 0.0001*eye(p); %控制输出权重
umax = 100; %控制量限制,即最大的力
lb=-umax*ones(p,1); %控制量下限
ub=umax*ones(p,1); %控制量上限
Rk = zeros(2*p,1); %参考值序列
%% 中间变量
xk = [pos;vel];
psi = zeros(2*p,2); %psi
theta = zeros(2*p,p);
%% 显示结果
t = 0:delta_t:sim_time; %时间序列
pos_ref = ones(length(t),1); %参考值序列
pos_out = zeros(length(t),1); %实际值序列
u_out = zeros(length(t),1); %控制量序列
tic
%% 主循环
for k=1:length(t)
Rk(1:2:end) = pos_ref(k);
Rk(2:2:end) = vel;
for i=1:1:p
psi(i*2-1:i*2,1:2)=A_^i;
end
for i=1:1:p
for j=1:1:i
theta(i*2-1:i*2,j)=A_^(i-j)*B_;
end
end
E = psi*xk-Rk; %E
H = 2*(theta'*Q*theta+W); %H
f = (2*E'*Q*theta)'; %f
coder.extrinsic('quadprog');
Uk=quadprog(H,f,[],[],[],[],lb,ub);
u=Uk(1);
xk = A_*xk+B_*u;
pos=xk(1);
vel=xk(2);
pos_out(k)=pos;
u_out(k)=u;
end
toc
figure(1);plot(t,pos_ref,'r--', t,pos_out);
xlabel('Sampling Instant');
legend('Output');
figure(2);plot(t,u_out,'r');
xlabel('Sampling Instant');
legend('Control');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
用MPC算法来控制弹簧质量阻尼系统。首先建立弹簧质量阻尼系统的模型,然后将连续时间模型转换成离散模型,推倒预测和优化方程,将控制问题转化成标准二次型问题,分别使用解析法和数值法两种优化求解方式,最后用Matlab进行了单位阶跃响应MPC控制仿真。配合博客:模型预测控制(MPC)九:弹簧质量阻尼的MPC仿真,在matlab 2016a实测可运行
资源推荐
资源详情
资源评论
收起资源包目录
mkb_mpc_matlab.rar (3个子文件)
mkb_reced.m 747B
mkb.m 1KB
mpcgain.m 650B
共 3 条
- 1
巴普蒂斯塔
- 粉丝: 1995
- 资源: 4
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页