Sirius' blog Sirius' blog
首页
  • 学习笔记

    • 《C++》
    • 《MATLAB》
    • 《Python》
  • 学习笔记

    • 《Git》
    • 《CMake》
  • 技术文档
  • 博客搭建
  • 学习
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Sirius0v0

怕什么真理无穷,进一寸有一寸的欢喜
首页
  • 学习笔记

    • 《C++》
    • 《MATLAB》
    • 《Python》
  • 学习笔记

    • 《Git》
    • 《CMake》
  • 技术文档
  • 博客搭建
  • 学习
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 学习笔记

    • Matlab在数模上的应用——基础打杂篇
    • Matlab在制导控制的应用(科学计算)
    • Matlab在制导控制的应用(线性控制)
      • 线性系统描述方法
        • 线性连续系统
        • 线性离散时间系统
        • 线性系统的互相转换
        • 线性系统的连接处理
      • 线性控制系统特性分析
        • 稳定性分析
        • 可控可观性分析
        • 线性系统规范分解
      • 线性控制系统时域分析
      • 线性控制系统根轨迹分析
      • 线性控制系统频域分析
      • 线性定常系统分析工具LinearSystemAnalyzer
      • SISO控制系统辅助设计工具controlSystemDesigner
      • 一个案例
    • S-Function入门——基础介绍
    • Level-1 Matlab S-Function编写入门
    • C-Mex S-Function编写入门
  • 踩坑记录

  • 《MATLAB》与控制
  • 学习笔记
Sirius0v0
2021-03-19
目录

Matlab在制导控制的应用(线性控制)

# Matlab在制导控制中的应用——线性系统模型控制

# 线性系统描述方法

# 线性连续系统

# 传递函数描述形式

sys = tf(num, den);
sys = tf(num, den, 'InputDelay',tao);		% 附加延迟环节

% 从系统中提取分子分母多项式
[num, den] = tfdata(sys)		% num,den 默认元胞数组
[num, den] = tfdata(sys,'v')	% 对于SISO添加参数得到数值向量

# 零极点描述形式

sys = zpk(z, p, k)		% z零点 p极点 k增益

% 从系统中提取零极点和增益
[z,p,k] = zpkdata(sys);
[z,p,k] = zpkdata(sys,'v');

# 非标准形式

s = tf('s')		% 定义传递函数算子
sys =( s^2+s*4-17)/(s^6-s^2+s-18)

>> sys =
 
    s^2 + 4 s - 17
  ------------------
  s^6 - s^2 + s - 18
 
Continuous-time transfer function.

# 状态空间形式

sys = ss(A, B, C, D);

% 从系统中提取状态空间矩阵
[A, B, C, D] = ssdata(sys);

# 线性离散时间系统

%% 传递函数描述
sysd = tf(num, den, Ts)		% Ts为采样周期
sysd = zpk(z,p,k,Ts);

[num, den, Ts] = tfdata(sysd)
[z,p,k,Ts] = zpkdata(sysd)

%% 状态空间描述
sysd = ss(A, B, C, D, Ts);

[A, B, C, D, Ts] = ssdata(sysd)

# 线性系统的互相转换

  • 连续系统之间的
[num, den] = ss2tf(A,B,C,D)
[z,p,k] = ss2zp(A,B,C,D)
[num, den] = zp2tf(z,p,k)
[A,B,C,D] = zp2ss(z,p,k)
[z,p,k] = tf2zp(num, den)
[A,B,C,D] = tf2ss(num, den)
  • 连续与离散系统之间的
sysd = c2d(sysc,Ts)
sysd = c2d(sysc,Ts,method)		% 指定转换方法
% 'zoh'零阶保持器(默认)
% 'impulse'脉冲不变变换
% 'matched'零极点匹配变换
% 'foh'一阶保持器
% 'tustin'双线性变换

sysc = d2c(sysd);
sysc = d2c(sysd,method);
% 'zoh'
% 'foh'
% 'tustin'
% 'matched'

% 离散到离散的转换,用于采样时间的重新设置
sysd2 = d2d(sysd,Ts)
sysd2 = d2d(sysd,Ts,method)
% 'zoh'
% 'tustin'

# 线性系统的连接处理

# 串联

% 对于简单(SISO)串联
sys = sys1 * sys2
sys = series(sys1, sys2)
[num, den] = series(num1, den1, num2, den2);	% 直接求取串联后的多项式

% 对于较为复杂的串联
sys = series(sys1, sys2, output1, input2)
% 例子
% sys1 5I4O; sys2 3I2O; sys1第二端口与第四端口分别与sys2第三端口和第一端口相连
output1 = [2 4];
input2 = [3 1];
sys = series(sys1, sys2, output1, input2);

较为复杂的MIMO串联关系示意图

# 并联

% 对于简单(SISO)并联
sys = sys1 + sys2;
sys = parallel(sys1,sys2);

% 较为复杂的系统
sys = parallel(sys1,sys2,inp1,inp2,out1,out2);

# 反馈

[num,den] = feedback(numG,denG,numH,denH[,sign]);
sys = feedback(sysG,sysH[,sign]);
% sign可选参数,1表示正反馈,-1表示负反馈

# 线性控制系统特性分析

# 稳定性分析

r = roots(p)	% 求取特征多项式的根
e = eig(A)		% 求系统的矩阵的特征向量
p = pole(sys)	% 求系统极点
z = zero(sys)	% 求系统零点
[z gain] = zero(sys)	% 求系统零点和增益
pzmap(sys)		% 绘制系统零极点图
[p,z] = pzmap(sys)		% 求系统极点和零点

% 关于李雅普诺夫稳定性分析的相关函数
X = lyap(A,Q)	% 求连续系统的李雅普诺夫方程
X = dlyap(A,Q)	% 求离散系统的李雅普诺夫方程

# 可控可观性分析

% 可控性
Tc = ctrb(A,B)		% 求取系统可控性判别矩阵
k = rank(Tc)

% 可观性
Tg = obsv(A,C)		% 求取系统可控性判别矩阵

# 线性系统规范分解

% 可控性规范分解
[Abar,Bbar,Cbar,T] = ctrbf(A,B,C)	% T为相似变换矩阵

% 可观性规范分解
[Abar,Bbar,Cbar,T] = obsvf(A,B,C)

# 线性控制系统时域分析

% 单位阶跃响应
step(sys[,Tfinal])			% 绘制规定时间内的单位阶跃响应
step(sys,t)					% 绘制指定时间序列的单位阶跃响应
y = step(sys,t)				% 求取指定时间序列的单位阶跃响应值
[y,t] = step(sys)
[y,t] = step(sys,Tfinal)
[y,t,x] = step(sys)			% x为系统返回的状态轨迹

% 线性系统的稳态响应大小
dc = dcgain(sys)
dc = dcgain(num,den);
dc = dcgain(A,B,C,D)

% 单位脉冲响应
impulse(sys)
y = impulse(sys,t)
[t,y] = impluse(sys)

% 零输入响应函数
initial(sys,x0[,Tfinal])				% x0为系统的初始状态
initial(sys,x0,t)
[y,t,x] = initial(sys,x0)
[y,t,x] = initial(sys,x0,Tfinal)
[y,t,x] = initial(sys,x0,t)

% 任意输入相应函数
lsim(sys,u,t)					% u为设定的输入信号向量
y = lsim(___)

# 线性控制系统根轨迹分析

# 线性控制系统频域分析

# 线性定常系统分析工具LinearSystemAnalyzer

# SISO控制系统辅助设计工具controlSystemDesigner

# 一个案例

编辑 (opens new window)
#MATLAB#控制学
上次更新: 2022/04/07, 13:46:09
Matlab在制导控制的应用(科学计算)
S-Function入门——基础介绍

← Matlab在制导控制的应用(科学计算) S-Function入门——基础介绍→

最近更新
01
ipopt优化库配置及使用
07-21
02
ubuntu离线安装包的方法
07-21
03
其它控件的使用
03-05
更多文章>
Theme by Vdoing | Copyright © 2020-2024 Sirius0v0 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式