多速率感知环境下的状态观测器及其基于l2诱导范数的设计(Matlab代码实现)

简介: 多速率感知环境下的状态观测器及其基于l2诱导范数的设计(Matlab代码实现)

💥1 概述

提升技术已成为采样系统设计的主要工具,但提升变换不能保证频率响应不变,故不适用于加权(函数)H∞设计。为此,针对采样控制系统的结构特点,将频率响应分为两个通道进行计算,采用经典的多速率感知环境下的状态观测器,既可以得到频率响应,又可以求得系统的L2诱导范数。方法简单直观,物理概念清楚。讨论了一类不确定时变时滞切换系统基于状态观测器的非脆弱H∞控制问题。首先,给出基于观测器的非脆弱H∞控制器形式,在同时限定时滞上界和时滞导数上界的条件下,利用单李雅普诺夫函数方法和凸组合技术,构造李雅普诺夫泛函和其对应的切换规则;其次,利用不等式引理对求导后的李雅普诺夫泛函进行不等式放缩进而消除不等式中的时变时滞项;再次,引入J函数得到满足H∞性能指标的非线性矩阵不等式,并利用Schur补引理将非线性矩阵不等式转化为等价的2个线性矩阵不等式,得到一类不确定变时滞切换系统存在基于状态观测器的H∞控制器且满足H∞性能指标的充分条件;最后,给出由2个子系统构成的一个切换系统,利用LMI工具箱进行数值例子仿真说明定理的有效性和实用性。


📚2 运行结果

部分代码:

set(0,'DefaultAxesLinewidth',2,'DefaultLineLineWidth',2);
set(0,'defaultAxesFontSize',14);
set(0,'defaultAxesFontName','arial');
set(0,'defaultTextFontName','arial');
%close all
%clear
al1 = 0.01;
al2 = 0.01;
A = [0.95 0.5 0.2;-0.1 0.9 -0.2;0 0.1 0.85]; % Stable Plant
%A = [1.2 0.5 0.2;-0.1 1 -0.2;0 0.1 1]; % Unstable Plant
B = [1;1.5;2];
C = [1 1 0;0 1 1];
D = [1 0;0 1];
S0 = [1 0;0 1];
S1 = [0 0;0 0];
S2 = [1 0;0 0];
S3 = [0 0;0 1];
S4 = [1 0;0 0];
S5 = [0 0;0 0];
C0 = S0*C;
C1 = S1*C;
C2 = S2*C;
C3 = S3*C;
C4 = S4*C;
C5 = S5*C;
D0 = S0*D;
D1 = S1*D;
D2 = S2*D;
D3 = S3*D;
D4 = S4*D;
D5 = S5*D;
setlmis([])
[gamma2,n,sgamma2] = lmivar(1,[1 1]);
[P1,n,sP1] = lmivar(1,[3 1]);
[P2,n,sP2] = lmivar(1,[3 1]);
[P3,n,sP3] = lmivar(1,[3 1]);
[P4,n,sP4] = lmivar(1,[3 1]);
[P5,n,sP5] = lmivar(1,[3 1]);
[P0,n,sP0] = lmivar(1,[3 1]);
[Y1,n,sY1] = lmivar(2,[3 2]);
[Y2,n,sY2] = lmivar(2,[3 2]);
[Y3,n,sY3] = lmivar(2,[3 2]);
[Y4,n,sY4] = lmivar(2,[3 2]);
[Y5,n,sY5] = lmivar(2,[3 2]);
[Y0,n,sY0] = lmivar(2,[3 2]);
S1 = newlmi;
lmiterm([-S1 1 1 P1],1,1)
lmiterm([-S1 1 2 P1],1,A)
lmiterm([-S1 1 2 Y1],1,C1)
lmiterm([-S1 2 2 P0],1,1)
lmiterm([-S1 2 2 0],-1)
lmiterm([-S1 1 3 P1],1,B)
lmiterm([-S1 3 3 gamma2],1,eye(1,1))
lmiterm([-S1 1 4 Y1],1,D1)
lmiterm([-S1 4 4 gamma2],1,eye(2,2))
S2 = newlmi;
lmiterm([-S2 1 1 P2],1,1)
lmiterm([-S2 1 2 P2],1,A)
lmiterm([-S2 1 2 Y2],1,C2)
lmiterm([-S2 2 2 P1],1,1)
lmiterm([-S2 2 2 0],-1)
lmiterm([-S2 1 3 P2],1,B)
lmiterm([-S2 3 3 gamma2],1,eye(1,1))
lmiterm([-S2 1 4 Y2],1,D2)
lmiterm([-S2 4 4 gamma2],1,eye(2,2))
S3 = newlmi;
lmiterm([-S3 1 1 P3],1,1)
lmiterm([-S3 1 2 P3],1,A)
lmiterm([-S3 1 2 Y3],1,C3)
lmiterm([-S3 2 2 P2],1,1)
lmiterm([-S3 2 2 0],-1)
lmiterm([-S3 1 3 P3],1,B)
lmiterm([-S3 3 3 gamma2],1,eye(1,1))
lmiterm([-S3 1 4 Y3],1,D3)
lmiterm([-S3 4 4 gamma2],1,eye(2,2))
S4 = newlmi;
lmiterm([-S4 1 1 P4],1,1)
lmiterm([-S4 1 2 P4],1,A)
lmiterm([-S4 1 2 Y4],1,C4)
lmiterm([-S4 2 2 P3],1,1)
lmiterm([-S4 2 2 0],-1)
lmiterm([-S4 1 3 P4],1,B)
lmiterm([-S4 3 3 gamma2],1,eye(1,1))
lmiterm([-S4 1 4 Y4],1,D4)
lmiterm([-S4 4 4 gamma2],1,eye(2,2))
S5 = newlmi;
lmiterm([-S5 1 1 P5],1,1)
lmiterm([-S5 1 2 P5],1,A)
lmiterm([-S5 1 2 Y5],1,C5)
lmiterm([-S5 2 2 P4],1,1)
lmiterm([-S5 2 2 0],-1)
lmiterm([-S5 1 3 P5],1,B)
lmiterm([-S5 3 3 gamma2],1,eye(1,1))
lmiterm([-S5 1 4 Y5],1,D5)
lmiterm([-S5 4 4 gamma2],1,eye(2,2))
S6 = newlmi;
lmiterm([-S6 1 1 P0],1,1)
lmiterm([-S6 1 2 P0],1,A)
lmiterm([-S6 1 2 Y0],1,C0)
lmiterm([-S6 2 2 P5],1,1)
lmiterm([-S6 2 2 0],-1)
lmiterm([-S6 1 3 P0],1,B)
lmiterm([-S6 3 3 gamma2],1,eye(1,1))
lmiterm([-S6 1 4 Y0],1,D0)
lmiterm([-S6 4 4 gamma2],1,eye(2,2))
LMIs = getlmis;
c = [1 zeros(1,72)];
[copt,xopt] = mincx(LMIs,c);
P0opt = dec2mat(LMIs,xopt,P0);
Y0opt = dec2mat(LMIs,xopt,Y0);
P1opt = dec2mat(LMIs,xopt,P1);
Y1opt = dec2mat(LMIs,xopt,Y1);
P2opt = dec2mat(LMIs,xopt,P2);
Y2opt = dec2mat(LMIs,xopt,Y2);
P3opt = dec2mat(LMIs,xopt,P3);
Y3opt = dec2mat(LMIs,xopt,Y3);
P4opt = dec2mat(LMIs,xopt,P4);
Y4opt = dec2mat(LMIs,xopt,Y4);
P5opt = dec2mat(LMIs,xopt,P5);
Y5opt = dec2mat(LMIs,xopt,Y5);
L0 = -P0opt^(-1)*Y0opt;
L1 = -P1opt^(-1)*Y1opt;
L2 = -P2opt^(-1)*Y2opt;
L3 = -P3opt^(-1)*Y3opt;
L4 = -P4opt^(-1)*Y4opt;
L5 = -P5opt^(-1)*Y5opt;
x(1,1) = 0;
x(2,1) = 0;
x(3,1) = 0;
xp(1,1) = 0;
xp(2,1) = 0;
xp(3,1) = 0;
Ts = 0.01;
t = 0:1:600;
a = 0:0.01:2*pi;
u = sin(a);
u_proposed = 0;
y_proposed = 0;
uy_proposed_sum = 0;
e_proposed_sum = 0;
for k = 1:600;
    if k <= 600
    u_proposed = al1*randn;
    y_proposed = al2*[randn;randn];
    else
        u_proposed = 0;
        y_proposed = 0;
    end
    xp(:,k+1) = A * xp(:,k) + B * u(:,k) + B *u_proposed;
    yp(:,k) = C * xp(:,k) + D * y_proposed ;
    if rem(k,6) == 0
    x(:,k+1) = (A - L0*C) * x(:,k) + B * u(:,k) + L0*yp(:,k);
    y(:,k) = C * x(:,k);
    elseif rem(k,6) == 1
    x(:,k+1) = (A - L1*C) * x(:,k) + B * u(:,k) + L1*yp(:,k);
    y(:,k) = C * x(:,k);
        elseif rem(k,6) == 2
    x(:,k+1) = (A - L2*C) * x(:,k) + B * u(:,k) + L2*yp(:,k);
    y(:,k) = C * x(:,k);
        elseif rem(k,6) == 3
    x(:,k+1) = (A - L3*C) * x(:,k) + B * u(:,k) + L3*yp(:,k);
    y(:,k) = C * x(:,k);
        elseif rem(k,6) == 4
    x(:,k+1) = (A - L4*C) * x(:,k) + B * u(:,k) + L4*yp(:,k);
    y(:,k) = C * x(:,k);
        elseif rem(k,6) == 5
    x(:,k+1) = (A - L5*C) * x(:,k) + B * u(:,k) + L5*yp(:,k);
    y(:,k) = C * x(:,k);
    end
    uy_proposed_sum = uy_proposed_sum + u_proposed^2 + norm(y_proposed)^2; 
    e_proposed_sum = e_proposed_sum + norm(x(:,k)-xp(:,k))^2; 
end
figure(1),stairs(t,xp(1,:),'k','LineStyle','--'),hold on,stairs(t,xp(2,:),'k','LineStyle','--'),hold on,stairs(t,xp(3,:),'k','LineStyle','--')
figure(1),stairs(t,x(1,:),'k'),hold on,stairs(t,x(2,:),'k'),hold on,stairs(t,x(3,:),'k')
ylabel('x,x_{ob}')
xlabel('k')
%figure(4),stairs(t,xp(1,:)-x(1,:),'k'),hold on,stairs(t,xp(2,:)-x(2,:),'k'),hold on,stairs(t,xp(3,:)-x(3,:),'k'),axis([0 500 -5 5]);
%
%ylabel('e')
%xlabel('k')
figure(2) %z,zQ1
subplot(3,1,1);
hold on; %grid on
stairs(t,xp(1,:)-x(1,:),'k','LineWidth',0.5);
axis([0 500 -0.5 0.5])
%set(gca,'fontsize',14);
xlabel('k')
ylabel('e_1')
box on
%
%figure(12) %v1
subplot(3,1,2);
hold on; %grid on
stairs(t,xp(2,:)-x(2,:),'k','LineWidth',0.5);
axis([0 500 -0.5 0.5])
%set(gca,'fontsize',14);
xlabel('k')
ylabel('e_2')
box on
subplot(3,1,3);
hold on; %grid on
stairs(t,xp(3,:)-x(3,:),'k','LineWidth',0.5);
axis([0 500 -0.5 0.5])
%set(gca,'fontsize',14);
xlabel('k')
ylabel('e_3')
box on
gamma_proposed = sqrt(copt)
gamma_proposed_sim = sqrt(e_proposed_sum/uy_proposed_sum)

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。


[1]刘彦文,王广雄,何朕.采样系统的频率响应和L_2诱导范数[J].控制与决策,2005(10):1133-1136.DOI:10.13195/j.cd.2005.10.55.liuyw.011.


[2]Hiroshi Okajima (2023) State Observer under Multi-rate Sensing Environment and Its Design using l2-Induced Norm [Source Code].  


🌈4 Matlab代码实现

相关文章
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
215 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
139 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
算法
基于多路径路由的全局感知网络流量分配优化算法matlab仿真
本文提出一种全局感知网络流量分配优化算法,针对现代网络中多路径路由的需求,旨在均衡分配流量、减轻拥塞并提升吞吐量。算法基于网络模型G(N, M),包含N节点与M连接,并考虑K种不同优先级的流量。通过迭代调整每种流量在各路径上的分配比例,依据带宽利用率um=Σ(xm,k * dk) / cm来优化网络性能,确保高优先级流量的有效传输同时最大化利用网络资源。算法设定收敛条件以避免陷入局部最优解。
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
105 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
6月前
|
机器学习/深度学习 数据可视化 算法
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
57 0
|
7月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
7月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
7月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
7月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)