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);
# 并联
% 对于简单(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)
上次更新: 2022/04/07, 13:46:09