现代控制理论课程实验一:线性系统状态空间分析与运动解

简介: 现代控制理论课程实验一:线性系统状态空间分析与运动解

b2886c1efc93409d98807e82d31d6953.jpg

一、实验目的


image.png


掌握线性系统状态空间标准型、解及其模型转换。


二、实验设备与软件:


MATLAB数值分析软件


三、实验原理:


3.1、求矩阵特征值和特征向量命令格式


[V J]=eig(A)

cv= eig(A)

说明:V特征向量,J是Jordan型;cv是特征值列向量

3.2、求运动的方法


(1)利用Laplace逆变换----适合于连续/离散线性系统

采用ilaplace/ iztrans对传递函数求逆,这种方法一般是零输入情况下求响应。

(2)用连续(离散)状态转移矩阵表示系统解析解----适合于线性定常系统

对连续线性定常系统有:


5b9ed31033284ebfaec754ce06ba28b0.jpg


显然要计算系统状态转移矩阵 ,有多种方法,如定义法、Laplace变换法、Sylvester方法。

在Matlab中采用了Pade逼近求取的方法,调用格式为:phi=expm( )。

对离散线性定常系统有:



ad06300f929b4befba4fc20551f88462.jpg

3.3、状态方程的数值积分方法----适合于连续的线性和非线性系统


采用直接数值积分可以很容易地处理各种定常/时变和线性/非线性系统。有很多数值积分方法,其中有一类预测-修正数值积分方法+自适应步长调整的算法比较有效。在Matlab/Simulink中包含的多种有效的、适用于不同类型的ODE(Ordinary Differential Equations)求解算法,典型的是Runge-Kutta算法,其通常使用的函数格式如下:


[t,x] = ode45(odefun,[ti,tf],x0,options)----采用四阶、五阶Runge-Kutta算法
[t,x] = ode23(odefun,[ti,tf],x0,options)----采用二阶、三阶Runge-Kutta算法


说明:a.这两个函数是求解非刚性常微分方程组的函数,还有一些求解刚性 常微分方程组的方法,如ode15s ode23s ode23t ode23tb等。

b.参数options为积分的误差设置,取值为相对误差’reltol’ 和绝对误差’abstol’;[ti,tf]求解的时间范围;x0是初值向量;[t,x]是解。

c. Runge-Kutta算法是最常用的数值方法,请查阅相关资料,阅读算法的原理与计算格式。

下面是一个例子:


9061e47bad4b4f96879350ad1d091965.jpg


3.4、利用Cotrol ToolBox中的离散化求解函数----适合于LTI系统


a.用step()/impulse()函数求取阶跃输入/冲激输入时系统的状态响应:


当系统G是连续的情况下:

调用[y,t,x]=step/impulse(G)会自动对连续系统G选取采样时间范围和采样周期;

调用[y,t,x]=step/impulse(G,ti:Ts:tf)由有户自已定义对连续系统G的采样时间范围和采样周期。

当系统G是离散的情况下:

调用[y,t,x]=step/impulse(G)会按离散系统G给出的采样周期计算;

调用[y,t,x]=step/impulse(G,ti:Ts:tf)时Ts必须与离散系统G给出的采样周期一致。


b.用lsim()函数求取任意输入时系统的状态响应


调用格式:[y,x,t]=lsim(G,u,ti:Ts:tf,x0)(要注意连续系统与离散系统的情况)


c.零输入响应可用initial()函数


调用格式:[y,x,t]=initial(G,x0) (要注意连续系统与离散系统的情况)


3.5、利用Simulink环境求取响应----适于所有系统求取响应


使用Simulink求取线性或非线性系统的响应


调用格式如下:[t,x,y]=sim(‘XX.mdl’, ti:Ts:tf, options,u)


四、实验内容


已知线性系统


db587d93e41d41f583008883817a4c88.jpg

实验程序如下


clear
A = [ -21 19 -20; 19 -21 20; 40 -40 -40]; 
B = [ 0; 1; 2];
C = [ 1 0 2];
D = [0];
stateSpace = ss(A, B, C, D);    % 状态空间表达式
% 阶跃响应
[stepOutResponse, stepTime, stepResponse] = step(stateSpace);
% 冲激响应
[impulseOutResponse, impulseTime, impulseResponse] = impulse(stateSpace);
figure(1);
subplot(2, 1, 1);
plot(stepTime, stepResponse);
title('阶跃响应状态响应曲线');
grid on;
subplot(2, 1, 2);
plot(stepTime, stepOutResponse);
title('阶跃响应输出响应曲线');
grid on;
figure(2);
subplot(2, 1, 1);
plot(impulseTime, impulseResponse);
title('冲激响应状态响应曲线');
grid on;
subplot(2, 1, 2);
plot(impulseTime, impulseOutResponse);
title('冲激响应输出响应曲线');
grid on;
t =[0: 0.01: 5];
u = (1 + exp(-t) .* cos(5 * t)).*(t<3) + 1 * (t>= 3);
t = t'; u = u';
ut = [t, u];
[t1, x, y] = sim('shiyan.mdl', t, [], ut);
figure(3);
subplot(2, 1, 1);
plot(t1, x);
title('状态响应曲线');
grid on;
subplot(2, 1, 2);
plot(t1, y);
title('输出响应曲线');
grid on;
 % 传递函数
[num, den] = ss2tf(A, B, C, D, 1); 
transferFunc = tf(num, den);
figure(4);
rlocus(transferFunc);
title('K增益负反馈闭环根轨迹图');
grid on;
figure(5);
bode(transferFunc);
title('系统的bode图'); grid on;
figure(6);
nyquist(transferFunc);
title('系统的Nyquist图');
grid on;

利用Matlab求零状态下的阶跃响应(包括状态和输出),生成两幅图:第一幅绘制各状态响应曲线并标注;第二幅绘制输出响应曲线。


28b0a7a5d7a8466bab6af12aaa99fc50.png


利用Matlab求零状态下的冲激响应(包括状态和输出),生成两幅图:第一幅绘制各状态响应曲线并标注;第二幅绘制输出响应曲线。


36f9e909cc904d47a1a31014e777536d.png



若控制输入为

e6e1344f77aa4f3c9631e3263f78f9d7.jpg



且初始状态为


e8dee35b1f704444907ea03add2ee2b0.jpg


求系统的响应,要求

  • a. 在Simulink中画出模型求响应,生成两幅图:第一幅绘制各状态响应曲线并标注;第二幅绘制输出响应曲线。



2626cea1ff30456b9dd2a1273ae3de63.png

系统的传递函数


ba2fd44f20874b2cb2ff7fef4be2fc73.png


采用K增益负反馈,绘制闭环根轨迹图

5f38c22a99f441f49618ed0eda71c097.png


有根轨迹可知,第一条趋于源点,第二条趋于在20-60之间,第三条趋于无穷远。

Matlab中绘制Bode图和Nyquist图


965e4c9d3cea44208f82109668be06d7.png


b040af4415504e959ec3fb458cdd15d7.png

对于bode图可以知道,交越频率在转折频率之后,所以系统响应变化在低频段。对于相频,系统的相频特性均为负值。有Nyquist图可以知道,系统是稳定的。


五、实验总结


image.jpeg


5.1、实验原理


在Matlab可以求解线性定常连续系统的状态空间模型:


阶跃响应函数step()可用于计算在单位阶跃输入和零初始状态(条件)下传递函数模型的输出响应,或状态空间模型的状态和输出响应。

脉冲激励下的仿真函数impulse()可用于计算在脉冲刺激输入下传递函数模型的输出响应,或状态空间模型的状态和输出响应。

任意输入激励下的仿真函数lsim()可用于计算在给定的输入信号序列(输入信号函数的采样值)下传递函数模型的输出响应。


5.2、实验总结


通过本次实验,


  • 掌握了线性系统的状态空间表达式与传递函数之间在MATLAB中的使用。
  • 知道了如何在simulink中建立状态方程的系统仿真模型。
  • 以及如何求出状态空间的状态变量在各种响应后的状态、如何建立状态空间系统的仿真模型等。


a4f70d81c2a348cf9c7f4d188f528613.jpg


相关文章
|
7月前
|
机器学习/深度学习 自然语言处理 算法
【模式识别】探秘判别奥秘:Fisher线性判别算法的解密与实战
【模式识别】探秘判别奥秘:Fisher线性判别算法的解密与实战
159 0
|
7月前
|
算法
【数理统计实验(二)】参数估计
【数理统计实验(二)】参数估计
|
2月前
|
机器学习/深度学习
心电图学习任务四——建模与调参
心电图学习任务四——建模与调参
38 0
|
5月前
|
机器学习/深度学习 数据采集 算法
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机分类模型(SVC算法)项目实战
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机分类模型(SVC算法)项目实战
|
机器学习/深度学习 数据挖掘 语音技术
基于对数谱图的深度学习心音分类
这是一篇很有意思的论文,他基于心音信号的对数谱图,提出了两种心率音分类模型,我们都知道:频谱图在语音识别上是广泛应用的,这篇论文将心音信号作为语音信号处理,并且得到了很好的效果。
134 1
|
7月前
|
C++
【数理统计实验(三)】假设检验的R实现(一)
【数理统计实验(三)】假设检验的R实现
|
7月前
R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状
R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状
|
算法 数据挖掘 API
贝叶斯统计在Python数据分析中的高级技术点:贝叶斯推断、概率编程和马尔科夫链蒙特卡洛
贝叶斯统计在Python数据分析中的高级技术点:贝叶斯推断、概率编程和马尔科夫链蒙特卡洛
121 1
贝叶斯统计在Python数据分析中的高级技术点:贝叶斯推断、概率编程和马尔科夫链蒙特卡洛
|
传感器 Dragonfly 算法
【粒子群算法和蝴蝶算法组合】粒子群混沌混合蝴蝶优化算法研究(Matlab代码实现)
【粒子群算法和蝴蝶算法组合】粒子群混沌混合蝴蝶优化算法研究(Matlab代码实现)
144 0
|
机器学习/深度学习 自然语言处理 算法
m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面
m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面
157 0
m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面