上一篇 回到目录 下一篇

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

  • Matlab_Simulink_BookExample
  • 5. Matlab/Simulink 在时域分析中的应用
    • 5.1 Matlab 函数
    • 例题 5_1
    • 例题 5_2
    • 例题 5_5
    • 例题 5_6
    • 例题 5_7
    • 例题 5_8
    • 例题 5_9
    • 例题 5_10
    • 例题 5_17
    • 例题 5_18

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

Matlab_Simulink_BookExample

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

5. Matlab/Simulink 在时域分析中的应用

5.1 Matlab 函数

step() 单位阶跃响应函数

impulse() 单位脉冲响应函数

initial() 零输入响应函数

lsim() 任意输入响应函数

  1. lsim(sys1, u, t)lsim(sys2, u, t, x0)
  2. u 为输入信号,x0 为初始条件,t 为等间隔时间向量,sys1 为 tf() 或 zpk() 模型,sys2 为 ss() 模型。
  3. [Y, T, X] = lsim(sys1, u, t)[Y, T, X] = lsim(sys2, u, t, x0)
  4. Y 为响应的输出,T 为仿真的时间,X 为系统的状态变量。
  5. 当不带输出变量引用函数时,lsim() 函数在当前图形窗口中直接绘制出系统的零输入响应曲线。
  6. 当带有输出变量引用函数时,可得到系统零输入响应的输出数据,而不直接绘制出曲线。
  7. 对于离散系统,只需在连续系统对应函数前加 “d” 即可,如 dstep, dimpulse 等,其调用格式与 step, impulse 类似。

pzmap() 绘制系统的零极点图

例题 5_1

% Page108:已知闭环传递函数,求单位阶跃响应和单位斜坡响应
clear;
clc;num = [1];
den = [1, 0.4, 1];
% 响应时间
t = [0:0.1:10];
% u 为单位斜坡输入
u = t;
% 单位阶跃响应
y = step(num, den, t);
% 单位斜坡响应
y1 = lsim(num, den, u, t);
% 将两条响应曲线绘制在同一个图上
plot(t, y, 'b-', t, y1, 'r:')
% 添加栅格
grid
% 添加横纵坐标轴
xlabel('Time [ses] t'); ylabel('y');
% 添加图标题
title('单位阶跃和单位斜坡输入响应曲线');
% 添加文字标注
legend('单位阶跃响应曲线', '单位斜坡响应曲线');

例题 5_2

% Page109:已知开环传函,系统输入信号为三角波,求响应
clear;
clc;numg = [1, 2];
deng = [1, 10, 1];
% 建立单位负反馈传递函数
[num, den] = cloop(numg, deng, -1);
% 产生三角波
v1 = [0:0.1:1];
v2 = [0.9:-0.1:-1];
v3 = [-0.9:0.1:0];
u = [v1, v2, v3];
% 仿真时间
t = [0:0.1:4];
% 求取系统在三角波输入下的响应
[y, x] = lsim(num, den, u, t);
% 将输入的三角波和输出响应曲线绘制在同一个图上
plot(t, y, t, u);
grid
% 添加横纵坐标轴
xlabel('Time [ses] t'); ylabel('y');
% 添加图标题
title('三角波输入和输入下的响应曲线');
% 添加文字标注
legend('响应曲线', '三角波输入');

例题 5_5

% Page112:使用游动鼠标法和编程法求取系统的性能指标
clear;
clc;% 建立零极点模型
G = zpk([ ], [-1+3i, -1-3i], 3);
% 求取阶跃响应
step(G);% 以上为游动鼠标法
% 以下为编程法% 建立零极点模型
G = zpk([ ], [-1+3i, -1-3i], 3);
% 计算最大峰值时间和它对应的超调量
C = dcgain(G);
% 求取阶跃响应
[y, t] = step(G);
plot(t,y)
grid
% 取得最大峰值时间
[Y, k] = max(y);
timetopeak = t(k);
% 计算超调量
percentovershoot = 100 * (Y-C)/C;
% 计算上升时间
n = 1;
while y(n) < Cn = n+1;
end
risetime = t(n);
% 计算稳态响应时间
i = length(t);
while (y(i)>0.98*C)&(y(i)<1.02*C)i = i-1;
end
settlingtime = t(i);

例题 5_6

% Page114:已知开环传函,计算阻尼比不同时单位负反馈系统的单位阶跃响应曲线
clear;
clc;% 固有频率
wn = 1;
% 7 个不同的阻尼比取值
sigma = [0, 0.2, 0.4, 0.6, 0.9, 1.2, 1.5];
num = wn*wn;
% 将 t 在 0 到 20 之间均等分成 200 份
t = linspace(0, 20, 200);
for j = 1:7% 求开环传函的分母den = conv([1,0], [1,2*wn*sigma(j)]);% 建立开环传递函数s1 = tf(num, den);% 建立单位负反馈系统的传递函数sys = feedback(s1, 1);% 求取单位阶跃响应y(:, j) = step(sys, t);
end
% 在同一图上绘制单位阶跃响应曲线并添加栅格
plot(t, y(:, 1:7));grid
% 添加图标题
title('典型二阶系统取不同阻尼比时的单位阶跃响应');
% 放置 sigma 取不同值的文字注释
gtext('sigma=0');
gtext('sigma=0.2');
gtext('sigma=0.4');
gtext('sigma=0.6');
gtext('sigma=0.9');
gtext('sigma=1.2');
gtext('sigma=1.5');

例题 5_7

% Page116:已知开环传函,求k不同时单位负反馈系统的单位阶跃响应曲线
clear;
clc;% 时间常数
T = 1;
% 6 个不同的开环增益取值
k = [0.1, 0.2, 0.5, 0.8, 1.0, 2.4];
% 将时间 t 在 0 到 20 之间分成 200 份
t = linspace(0, 20, 200);
% 开环传递函数的分子、分母表达式
num = 1;
den = conv([1, 0], [T 1]);
for j = 1:6% 建立开环传递函数s1 = tf(num*k(j), den);% 建立闭环传递函数sys = feedback(s1, 1);% 求取单位阶跃响应y(:, j) = step(sys, t);
end
% 在同一图上绘制单位阶跃响应曲线并添加栅格
plot(t, y(:, 1:6));
grid
% 添加图标题
title('典型二阶系统取不同开环增益时的单位阶跃响应')
% 放置 k 取不同值的文字注释
gtext('k=0.1');
gtext('k=0.2');
gtext('k=0.5');
gtext('k=0.8');
gtext('k=1.0');
gtext('k=2.4');

例题 5_8

% Page117:已知二阶系统,绘制tau不同值时,单位负反馈系统的单位阶跃曲线
clear;
clc;% 时间常数
T = 1;
% 开环增益 K 的值
K = 1;
% 6 个不同的微分反馈系数
tau = [0, 0.05, 0.2, 0.5, 1.0, 2.4];
% 将 t 在 0 到 20 之间均等分成 200 份
t = linspace(0,20,200);
% 开环传递函数的分子多项式
num = 1;
for j=1:6% 求取开环传函的分母表达式den=conv([1,0], [T, 1+tau(j)]);% 建立开环传函s1 = tf(num*K, den);% 建立单位负反馈系统的传递函数sys = feedback(s1, 1);% 求取单位阶跃响应y(:,j) = step(sys, t);
end
% 在同一图上绘制单位阶跃响应曲线并添加栅格
plot(t, y(:,1:6)); grid
% 放置 K 取不同值的文字注释
gtext('tau=0');
gtext('tau=0.05');
gtext('tau=0.2');
gtext('tau=0.5');
gtext('tau=1.0');
gtext('tau=2.4');

例题 5_9

% Page119:已知闭环传函,求未知量取不同值的单位阶跃响应
clear;
clc;% 3 个不同的微分时间常数
tau = [0, 0.2, 0.4];
% 将 t 在 0 到 8 之间均等分为 80 份
t = linspace(0, 8, 80);
% 开环传递函数的分子、分母多项式
num = 4;
den = [1 2 4];
for j=1:3% 建立系统传递函数sys = tf(conv(num, [tau(j), 1]),den);% 求取单位阶跃响应y(:,j) = step(sys, t);
end
% 将 3 条响应曲线绘制在同一个图傻姑娘并添加栅格
plot(t,y(:, 1:3)); grid;
title('比例微分控制,不同微分时间下的系统阶跃响应');
gtext('tau=0');
gtext('tau=0.2');
gtext('tau=0.4');

例题 5_10

% Page119:已知传递函数,分析主导极点,并比较新系统与原系统的单位阶跃响应
clear;
clc;% 原系统的增益
K = 147.3;
% 仿真时间
t = 0:0.1:6;
num0 = K*[1, 1.5];
% 传递函数分母的系数
den00 = [1, 2, 5];
den01 = [1, 10, 26];
den02 = [1, 1.7];
% 建立原系统传递函数
sys0 = tf(num0, conv(den00, conv(den01, den02)));
% 求原系统的阶跃响应
y0 = step(sys0, t);
num1 = 5;
% 建立主导极点所构成的系统传递函数
sys1 = tf(num1, den00);
% 求取主导极点所构成的系统的阶跃响应
y1 = step(sys1, t);
% 绘制阶跃响应曲线并添加栅格
plot(t, y0, t, y1); grid;
% 添加图标题
title('阶跃响应对比');
% 放置区别两条曲线的文字注释
gtext('原系统的单位阶跃响应');
gtext('主导极点构成的系统的单位阶跃响应');

例题 5_17

% Page131:已知传递函数,判断稳定性,绘制零极点图
clear;
clc;% 开环零点、极点、增益
z = -2.5;
p = [0, -0.5, -0.7, -3];
k = 0.2;
% 建立零极点形式的开环传递函数
Go = zpk(z,p,k);
% 单位负反馈连接
Gc = feedback(Go, 1);
% 建立闭环传递函数
Gctf = tf(Gc);
% 获取闭环传递函数的特征多项式
dc = Gctf.den;
% 将特征多项式系数转换为字符形式的函数,便于查看
dens = poly2str(dc{1}, 's');% 获取其多项式系数
den = [1, 4.2, 3.95, 1.25, 0.5];
% 求取特征根
p = roots(den);
% 绘制零极点图
pzmap(Gctf);
grid

例题 5_18

% Page132:建立模型,分析稳定性,绘制阶跃响应曲线,计算稳态误差,分析性能
clear;
clc;% 传递函数的分子、分母多项式系数
num1 = [20];
den1 = [1 2 0];
% 二阶系统的传递函数
sys1 = tf(num1, den1);
% 微分环节传递函数的分子、分母多项式系数
num2 = [0.1 0];
den2 = [0 1];
% 微分环节的传递函数
sys2 = tf(num2, den2);
% 内环反馈的传递函数
sys_inner = feedback(sys1, sys2);
% 外环反馈的传递函数
sys_outer = feedback(sys_inner, 1);% 根据求得的系统传递函数,利用 roots 命令判断系统的稳定性
% 闭环系统传递函数分母多项式系数
den = [1 4 20];
% 求闭环系统特征多项式的根
roots(den)
% 利用 pzmap 命令绘制系统的零极点图
pzmap(sys_outer);
grid on;% 计算系统的阶跃响应
% 闭环系统传递函数分子、分母多项式系数
num = [20];
den = [1 4 20];
% 计算闭环系统的阶跃响应
[y, t, x] = step(num, den);
% 绘制阶跃响应曲线
plot(x, y);
grid on;% 计算系统的超调量
% 阶跃响应的稳态值
y_stable = 1;
% 闭环系统阶跃响应的最大值
max_response = max(y);
% 阶跃响应的超调量
sigma = (max_response - y_stable) / y_stable;% 计算系统的上升时间
% 遍历响应曲线
for i=1:length(y)% 如果某个时刻系统的输出值大于稳态值if y(i)>y_stable% 循环中断break;end
end
% 计算此时对应的时间,就是阶跃响应的上升时间
tr = x(i)
% 计算系统的峰值时间
% 查找系统阶跃响应的最大值
[max_response, index] = max(y);
% 计算此时对应的时间,就是阶跃响应的峰值时间
tp = x(index)
% 计算系统的调整时间 ---> 取物插带为 2
% 遍历响应曲线
for i=1:length(y)% 如果当前响应值在误差带内if max(y(i:length(y))) <= 1.02 * y_stableif min(y(i:length(y))) >= 0.98 * y_stable% 循环退出break;endend
end
% 计算此时对应的时间,就是系统阶跃响应的调整时间
ts = x(i)
上一篇 回到目录 下一篇

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

  1. matlab在锁具装箱问题中的应用,matlab在锁具装箱问题中的应用

    matlab在锁具装箱问题中的应用 Matlab在锁具装箱问题中的应用某厂生产一种弹子锁具,每个锁具的钥匙有 5个槽,每个槽的高度从 {1, 2, 3, 4, 5, 6}6个数(单位略)中任取一个,由 ...

  2. 利用MATLAB进行系统时域分析,实验二 利用matlab进行系统的时域分析

    实验二 利用matlab进行系统的时域分析 实验二 利用MATLAB进行系统的时域分析 1.实验目的 在理论学习的基础上,通过本实验熟悉LTI连续时间系统的时域分析方法, 熟悉系统的零输入响应.零状态 ...

  3. MATLAB在动态经济学中的应用,MATLAB在动态经济学中的应用

    前言 经济学家一般都认为经济系统是动态的,对经济系统进行动态分析是必要的.但由于对经济系统进行动态分析需要较多的微分方程.差分方程和现代控制理论等方面的理论分析和计算,因此长期以来在初级和中级经济学教 ...

  4. matlab在重积分计算中的应用,MATLAB在重积分计算中的应用

    第29卷第4期Vol.29NO.4 重庆工商大学学报(自然科学版) JChongqingTechnolBusinessUniv.(NatSciEd) 2012年4月Apr.2012 文章编号:1672 ...

  5. matlab在光学实验中的应用,Matlab在光学信息处理仿真实验中的应用

    收稿日期 :200402213 基金项目 :佛山科学技术学院校级科研课题经费资助 作者简介 :谢嘉宁(1971 - ) ,女 ,广东潮州人 ,佛山科学技术学院物理系讲师 ,光学工程硕士 ,主要从事光学 ...

  6. matlab mxarray赋值,C++中数组与MATLAB mxArray相互赋值

    完成功能下: C++中产生一个256X256大小的数组A;现在要在这个数组显示为一个灰度图像,然后把该数组里面的每一个值乘2后返回给原数组: C++程序如下: #include "stdaf ...

  7. matlab在解析几何教学中的应用,Matlab在解析几何教学中的应用

    数学是研究空间形式(几何学)和数量关系(代数学)的科学,解析几何是一门大学基础课程,为代数学提供了几何模型,也为物理学.工程技术提供了必要的数学工具.解析几何是通过用代数学的方法来研究几何图形,认识空 ...

  8. matlab 开普勒方程,理论力学中非线性问题的 MATLAB数值解

    第20卷第10期大 学 物 理Vol.20No.10 2001年10月COLL EGE PHYSICS Oct.2001 基础物理教学现代化问题 理论力学中非线性问题的MAT LAB 数值解 收稿日期 ...

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

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

最新文章

  1. php mysql orm_PHP ORM操作MySQL数据库
  2. UVa10340 - All in All(贪心算法)
  3. wxWidgets:wxActivateEvent类用法
  4. 第三次学JAVA再学不好就吃翔(part71)--BigDecimal类
  5. python爬虫进程和线程_python爬虫番外篇(一)进程,线程的初步了解-阿里云开发者社区...
  6. ASP.NET MVC RedirectToRoute类[转]
  7. HashMap的工作原理--重点----数据结构示意图的理解
  8. 初学java,有哪些值得推荐的 Java 练手项目?
  9. xposed android id修改,Xposed模块开发:修改设备IMEI
  10. AI 医生“战疫”在前线
  11. 计算机公式和函数的区别,什么是函数 什么是公式
  12. 计算机网络之奈奎斯特定理和香农定理
  13. 玩转亚马逊 AWS IoT(1): IoT 业务梳理
  14. 磕磕碰碰搭建Nginx实现接口映射
  15. Redis的清洁——定期删除+惰性删除+内存淘汰策略
  16. 测试飞机高度和速度的软件,测量飞行的高度、速度和方向
  17. 微信小商店经验个人收集
  18. Java应用,如何提高系统健壮性
  19. android+最新手机,最新Android手机性能榜单:骁龙845+8G的它只排第三
  20. Android 展开/收回动画效果思路与实现

热门文章

  1. vue.js实战 第一篇 1-3章计算属性
  2. python3 第三十四章 - 聊聊File对象
  3. 8天学通MongoDB——第五天 主从复制
  4. 文字或者图片连续滚动
  5. 一个简单的GridView分页
  6. {HTML5}JQueryMobile页面跳转参数的传递解决方案
  7. 电动力学每日一题 2021/10/23 载流板产生的电磁场
  8. UA MATH571B 试验设计I 试验设计简介
  9. arcgis engine 计算距离面积体积
  10. Java 学习笔记 反射与迭代器