上一篇 回到目录 下一篇

《Matlab/Simulink与控制系统仿真》程序指令总结

  • Matlab_Simulink_BookExample
  • 9. 线性系统状态空间分析
    • 9.2.4 状态方程求解
      • 9.2.4.2 矩阵指数的性质及求法
      • 9.2.4.1 齐次方程求解
      • 9.2.4.3 非齐次方程求解
    • 9.1 Matlab 函数
    • 例题 9_2
    • 例题 9_3
    • 例题 9_4
    • 例题 9_5
    • 例题 9_6
    • 例题 9_7
    • 例题 9_8
    • 例题 9_9
    • 例题 9_10
    • 例题 9_11
    • 例题 9_12

书中详细实例代码可见:Github

更多关于基础原理的讲解:【控制】第九章-线性系统的状态空间描述

Matlab_Simulink_BookExample

图书:《Matlab/Simulink与控制系统仿真》

9. 线性系统状态空间分析

状态空间描述具有以下特点:

  1. 状态空间描述考虑到了“输入-状态-输出”这一过程,考虑到了被经典控制理论的“输入-输出”描述所忽略的状态,因此它揭示了问题的本质,即输入引起状态的变化,而状态决定了输出
  2. 输入引起的状态变化是一个运动过程,数学上表现为向量微分方程,即状态方程。状态决定输出是一个变换过程,数学上表现为变换方程,即代数方程
  3. 系统的状态变量个数等于系统的阶数,一个 nnn 阶系统的状态变量个数为 nnn。
  4. 对于给定的系统,状态变量的选择不唯一,状态变量的线性变换结果也可以作为状态变量。
  5. 一般来说,状态变量不一定是物理上可测量或可观察的量,但从便于构造控制系统来说,把状态变量选为可测量或可观察的量更合适。

9.2.4 状态方程求解

9.2.4.2 矩阵指数的性质及求法

对于线性定常系统来说,齐次方程的求解可归结为求矩阵指数 eA(t−t0)e^{A(t-t_0)}eA(t−t0​) 。eA(t−t0)e^{A(t-t_0)}eA(t−t0​) 具有以下基本性质:

  1. (性质1)组合性质,从

  2. (性质12)矩阵指数 eAte^{At}eAt 可表示为有限项之和,即 eAt=∑i=0n−1Aiai(t)e^{At} = \sum_{i=0}^{n-1} A^i a_i(t)eAt=i=0∑n−1​Aiai​(t)

Proof. 见书 P243页

  1. (性质13)矩阵指数函数可用拉氏反变换得到:eAt=L−1[(sI−A)−1]e^{At} = \mathcal{L}^{-1}[(sI-A)^{-1}]eAt=L−1[(sI−A)−1]

9.2.4.1 齐次方程求解

X(t)=eA(t−t0)X(t0)X(t) = e^{A(t-t_0)} X(t_0)X(t)=eA(t−t0​)X(t0​)

X(t)=eAtX0X(t) = e^{At}X_{0}X(t)=eAtX0​

9.2.4.3 非齐次方程求解

X(t)=eA(t−t0)X(t0)+eAt∫t0te−AτBU(τ)dτX(t) = e^{A(t-{t_0})} X(t_0) + e^{At}\int_{t_0}^{t} e^{-A\tau} BU(\tau)d\tauX(t)=eA(t−t0​)X(t0​)+eAt∫t0​t​e−AτBU(τ)dτ

9.1 Matlab 函数

tf2ss() 将传递函数模型转换为状态空间模型

zp2ss() 将零极点模型转换为状态空间模型

ss 直接建立状态空间模型

canon() 将系统直接转化为对角型的函数

ss2ss() 进行状态空间表达式的线性变换的函数

rat() 返回一个有理近似值的字符向量

ctrb() 求取系统可控判别矩阵的函数

obsv() 求取系统可观判别矩阵的函数

ctrbf() 系统进行能控性分解的函数

obsvf() 系统进行能观测性分解的函数

lyap() lyap2() dlyap() 求解李亚普诺夫方程函数

例题 9_2

% Page249:已知开环传函,求状态空间模型
clear;
clc;% G1 函数的分子、分母多项式
num = [2, 8, 6];
den = [1. 8, 16, 6];
% 将 G1 传递函数模型转换为状态空间模型
[A1, B1, C1, D1] = tf2ss(num, den);
% G2 函数的零极点、增益
z = [-1, -3];
p = [0, -2, -8];
k = 2;
% 将 G2 传递函数模型转换为状态空间模型
[A2, B2, C2, D2] = zp2ss(z, p, k);

例题 9_3

% Page250:已知系统的动力学微分方程,求系统的状态空间模型
clear;
clc;% 微分方程输入量、输出量的系数
num = [1, 2, 1];
den = [1, 3, 3, 1];
% 建立传递函数模型
sys1 = tf(num, den);
% 求状态空间表达式
sys = ss(sys1);

例题 9_4

% Page251:已知系统状态空间模型,求系统的对角标准型
clear;
clc;A = [0 1 0; 0 0 1; -6 -11 -6];
B = [1; 0; 0];
C = [1 1 0];
D = 0;
% 生成对角标准型
[As, Bs, Cs, Ds, Ts] = canon(A, B, C, D, 'mod');

例题 9_5

% Page252:已知系统传递函数,求系统约当标准型
clear;
clc;num1 = [2, 1];
den1 = [1, 7, 14, 8];
% 求系统的分式表达式
[r1, p1, k1] = residue(num1, den1);
% 对分式结果进行变换,得到约当标准型
A1 = diag(p1);
B1 = ones(length(r1), 1);
C1 = rat(r1);
D1 = 0;

例题 9_6

% Page253:已知矩阵,求解状态转移矩阵
clear;
clc;A = [0 1 0;0 0 1;1 -3 3;];
% 状态转移时刻
t = 0.2;
% 计算状态转移矩阵
Phi = expm(A*t);

例题 9_7

% Page253:已知状态空间模型,求解脉冲响应、阶跃响应、响应曲线
clear;
clc;A = [-2 -2.5 -0.5; 1 0 0; 0 1 0];
B = [1; 0; 0];
C = [0 1.5 1];
D = [];
% 建立状态空间模型
G = ss(A,B,C,D);
% 仿真时间
t = [0:0.1:20]';
% 计算脉冲响应并添加栅格
% impulse(G); grid on
% 计算阶跃响应并添加栅格
% step(G); grid on% 接着输入如下代码
% 初始状态
xo = [1; 0; 2];
% 输入量 u
u(1, 1:20) = 2*ones(1, 20);
u(1, 21:201) = 0.5*ones(1, 181);
% 计算输入响应
[y, t, x] = lsim(G, u, t, xo);
% 绘制曲线
plot(t,x(:,1),'-', t,x(:,2),'--', t,x(:,3),'-.')
% 添加坐标轴
xlabel('时间/秒'); ylabel('幅值');
% 添加栅格
grid
% 添加标注
text(6, 0.3, 'x_1(t)');
text(6, -0.5, 'x_2(t)');
text(8, 1.8, 'x_3(t)');figure(2)
plot(t,y)

例题 9_8

% Page262:已知状态空间模型,判断系统是否可控?是否可观?
clear;
clc;A = [1 0 -1; -1 -2 0; 3 0 1];
B = [1 0; 2 1; 0 2];
C = [1 0 0; 0 -1 0];
% 计算可控判别矩阵
M = ctrb(A, B);
% 计算可控判别矩阵的秩
RM = rank(M);
% 计算可观判别矩阵
N = obsv(A, C);
% 计算可观判别矩阵的秩
RN = rank(N);

例题 9_9

% Page263:已知状态空间模型,判断可控性,如果完全可控,转化为可控 II 型
clear;
clc;A = [1 2 0; 3 -1 1; 0 2 0];
B = [2; 1; 1];
C = [0 0 1];
D = 0;
% 计算可控判别矩阵
T = ctrb(A, B);
% 计算可控判别矩阵的秩
R = rank(T);% 计性状态空间的线性变换
[Ac2, Bc2, Cc2, Dc2] = ss2ss(A, B, C, D, inv(T));

例题 9_10

% Page263:已知状态空间模型,求该系统的能观 I 型
clear;
clc;A = [1 2 0; 3 -1 1; 0 2 0];
B = [2; 1; 1];
C = [0 0 1];
D = [0];
% 计算可观判别矩阵
T = obsv(A, C);
% 进行状态空间的线性变换
[Ao1, Bo1, Co1, Do1] = ss2ss(A, B, C, D, T);

例题 9_11

% Page264:已知状态空间模型,进行能控性分解和能观性分解
clear;
clc;A = [0 0 -1; 1 0 -3; 0 1 -3];
B = [1; 1; 0];
C = [0 1 -2];
% 能控性结构分解
[Ac, Bc, Cc] = ctrbf(A, B, C);
% 能观性结构分解
[Ao, Bo, Co] = obsvf(A, B, C);% 若想要得到标准形式
Acc = rot90(Ac, 2);
Bcc = rot90(Bc, 2);
Ccc = rot90(Cc, 2);

例题 9_12

% Page269:已知系统状态矩阵,给定正定对称矩阵,求李亚普诺夫方程解 P
clear;
clc;% 状态矩阵
A = [0 1; -1 -1];
% 给定的正定对称矩阵
Q = [1 0; 0 1];
% 求解李亚普诺夫方程
P = lyap(A', Q);
上一篇 回到目录 下一篇

P9 线性系统状态空间分析-《Matlab/Simulink与控制系统仿真》程序指令总结相关推荐

  1. P10 线性系统状态空间设计-《Matlab/Simulink与控制系统仿真》程序指令总结

    上一篇 回到目录 下一篇 <Matlab/Simulink与控制系统仿真>程序指令总结 Matlab_Simulink_BookExample 10. 线性系统状态空间设计 10.1 Ma ...

  2. P6 根轨迹分析法-《Matlab/Simulink与控制系统仿真》程序指令总结

    上一篇 回到目录 下一篇 <Matlab/Simulink与控制系统仿真>程序指令总结 Matlab_Simulink_BookExample 6. 根轨迹分析法 6.1 函数 6.2 根 ...

  3. 目录-《Matlab/Simulink与控制系统仿真》程序指令总结

    上一篇 回到目录 下一篇 <Matlab/Simulink与控制系统仿真> 章节 题目 P2 Matlab计算基础 P3 Simulink仿真 P4 控制系统数学模型 P5 Matlab/ ...

  4. P13 最优控制系统-《Matlab/Simulink与控制系统仿真》程序指令总结

    上一篇 回到目录 下一篇 <Matlab/Simulink与控制系统仿真>程序指令总结 Matlab_Simulink_BookExample 13. 最优控制系统 13.1 Matlab ...

  5. P7 频域分析法-《Matlab/Simulink与控制系统仿真》程序指令总结

    上一篇 回到目录 下一篇 <Matlab/Simulink与控制系统仿真>程序指令总结 Matlab_Simulink_BookExample 7. 频域分析法 7.1 Matlab 函数 ...

  6. P11 非线性系统-《Matlab/Simulink与控制系统仿真》程序指令总结

    上一篇 回到目录 下一篇 <Matlab/Simulink与控制系统仿真>程序指令总结 Matlab_Simulink_BookExample 11. 非线性系统 11.1 Matlab ...

  7. P5 Matlab/Simulink 在时域分析中的应用-《Matlab/Simulink与控制系统仿真》程序指令总结

    上一篇 回到目录 下一篇 <Matlab/Simulink与控制系统仿真>程序指令总结 Matlab_Simulink_BookExample 5. Matlab/Simulink 在时域 ...

  8. P12 离散控制系统-《Matlab/Simulink与控制系统仿真》程序指令总结

    上一篇 回到目录 下一篇 <Matlab/Simulink与控制系统仿真>程序指令总结 Matlab_Simulink_BookExample 12. 离散控制系统 表12.11 离散系统 ...

  9. P8 控制系统校正与综合-《Matlab/Simulink与控制系统仿真》程序指令总结

    上一篇 回到目录 下一篇 <Matlab/Simulink与控制系统仿真>程序指令总结 Matlab_Simulink_BookExample 8. 控制系统校正与综合 8.1 Matla ...

最新文章

  1. 汇编 无条件转移和过程调用指令
  2. Asp中解决AJAX乱码问题
  3. 方法:如何获取操作系统所有分区(逻辑驱动器)
  4. easyui datagrid local pager 表格本地分页
  5. Kettle 学习导航帖整理
  6. 数据仓库的ETL、OLAP和BI应用
  7. HTML5: 两个viewport的故事(第一部分)
  8. C++ 对象间的赋值与拷贝构造函数
  9. Linux 之CentOS7-VSFTP搭建
  10. 东芝Toshiba DP-2210 打印机驱动
  11. 2022年帝国CMS7.5内核精仿《5288商机网》二次开发多个功能,运营级
  12. 解析函数的孤立奇点-复变函数
  13. php调用酷狗音乐APi
  14. np.percentile()函数
  15. 致老友-有时候我词不达意 但我真的很开心生活有你
  16. 大话设计模式—访问者模式
  17. css3新增属性sticky
  18. windows11 git 安装SSH密钥
  19. IOS之 点击链接跳转到App Store指定App(应用程序)
  20. arduino为何流行?

热门文章

  1. 自备干货!如何有效的做竞品迭代分析
  2. Docker镜像加速器配置
  3. Selector-背景选择器
  4. Python中的range和xrange区别
  5. delphi 16 网页缩放
  6. HDU 1005 Number Sequence
  7. VS2012+WDK8.0搭建WDF驱动开发环境
  8. C++类和对象学习总结
  9. webpack 零基础到工程实战(1)
  10. pat1038. Recover the Smallest Number (30)