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

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

对连续线性定常系统有:
在这里插入图片描述

显然要计算系统状态转移矩阵 ,有多种方法,如定义法、Laplace变换法、Sylvester方法。
在Matlab中采用了Pade逼近求取的方法,调用格式为:phi=expm( )。
对离散线性定常系统有:
在这里插入图片描述

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算法是最常用的数值方法,请查阅相关资料,阅读算法的原理与计算格式。
下面是一个例子:
在这里插入图片描述

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)

四、实验内容

已知线性系统
在这里插入图片描述

实验程序如下

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求零状态下的阶跃响应(包括状态和输出),生成两幅图:第一幅绘制各状态响应曲线并标注;第二幅绘制输出响应曲线。
    在这里插入图片描述
  • 利用Matlab求零状态下的冲激响应(包括状态和输出),生成两幅图:第一幅绘制各状态响应曲线并标注;第二幅绘制输出响应曲线。
    在这里插入图片描述

若控制输入为

在这里插入图片描述

且初始状态为

在这里插入图片描述

求系统的响应,要求

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

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值