第一部分数字仿真 实验
DESCRIPTION
第一部分数字仿真 实验. 实验 1 Matlab 概述. The MathWorks,Inc. Matlab 的特点 强大的数学运算能力 方便实用的绘图功能及语言的高度集成性 比较完善的控制领域的工具箱. 第一部分数字仿真 实验. 实验 1 Matlab 概述. 1 Matlab 语言的基本使用环境 命令子窗( command window) 程序调用版( Launch Pad) 命令的历史记录( Command History) 工作空间管理程序( Workspace) 当前目录管理程序( Current Directory). - PowerPoint PPT PresentationTRANSCRIPT
第一部分数字仿真实验
实验 1 Matlab 概述
The MathWorks,Inc
Matlab 的特点强大的数学运算能力方便实用的绘图功能及语言的高度集成性比较完善的控制领域的工具箱
第一部分数字仿真实验
实验 1 Matlab 概述
1 Matlab 语言的基本使用环境 命令子窗 (command window) 程序调用版 (Launch Pad) 命令的历史记录( Command History) 工作空间管理程序( Workspace) 当前目录管理程序( Current Directory)
第一部分数字仿真实验
Matlab 的工作空间
命令是用命令行形式或 m 文件形式输入,那么输入的命令和创建的所有变量值,就会驻留在 Matlab 的工作空间,可在任何需要的时候调用。
工作空间管理命令: who, whos, clear
实验 1 Matlab 概述
关于变量和函数命名
一般为双精度浮点, 8 个字节( 64 位), -1.7*10308—1.7*10308,
表示为 Double( )
图象处理中:无符号 8 位整型, 表示为 unit8( ), int8( )
变量(函数名)由字母引导,可跟字母、数字、下化线等,不超过 19 个字符。区分大小写
支持复数向量、矩阵和字符串型矩阵。
2 Matlab 的基本特性
注释和标点
一行中, % 后面的所有文字都是注释
多条命令可以放在同一行,只要它们被逗号或分号隔开,分号禁止显示。连续三个点 … 表示语句的余下部分将在下行出现,
变量名不能分开,注释行不能续行。
特定常数 eps 浮点运算误差 =2.2204*10-16
j, i 纯虚数 Inf 无穷大 NaN 不定式 pi 圆周率 ans 用于返回结果的缺省变量名 nargin 所用函数的输入变量 nargout 所用函数的输出变量
2 Matlab 的基本特性
Matlab 的搜索路径当你在命令行输入一个字符串(可能是变量或命令),
回车后, Matlab 按一定的顺序执行。例如>> ptest
顺序为:( 1 )检查是否为工作空间中的变量( 2 )检查是否为内置函数( 3 )检查 MEX 文件 ptest.mex 是否存在于当间目录( 4 )检查 M 文件 ptest.m 是否为存在于当间目录( 5 )按次序搜索已设置的路径。检查 ptest.mex 或 ptest.m
是否为存在于 matlab 的搜索路径中。
应用 c 语言按照 Mex技术要求的格式编写相应部分的程序,通过编译连接,形成 Matlab可以直接调用的动态连接库,显著加快运算速度。
Matlab 的三种执行方式
M 文件和 M 函数
1 脚本文件 (批处理文件)启动 M 文件编辑器
b=[1;2;3];
A=[1 2 3;4 5 6;7 8 9];
Inv(A)*b;
脚本文件空间与 Matlab 工作空间是相同的。
Matlab 的三种执行方式
M 文件和 M 函数2 M 函数 function s=example2(A,b)
% 求解线性方程组 As=b 的解 s
if det(A)~=0
s=inv(A)*b
else
error(‘A 是一个奇异矩阵’ )
end ;
>> s=example2(A,b)
保存文件时,文件名和函数名必须相同。
Matlab 的三种执行方式
m 函数有自己专用的工作空间,函数内部变量与 matlab 工作空间
之间的唯一联系是函数的输入和输出变量。
Matlab 的全局变量,函数与其他函数、 matlab 工作空间共享变量。说明变量全局共享的方法是“ global 变量名”
[ 返回变量列表 ]= 函数名(变量列表)
例如: [v,d]=eig(A)
函数调用语句
Matlab里的函数(内置)
>>x=[1, pi, 0.1 0.5 ]
>> cos(x)
Ones(2,2), eye(3) length(A),size(A),sum(A),max(A)
rank det log10,log log,sin cos tan
>>sum(x)
>>t=0:0.1:10
Matlab 的矩阵运算
>>A=[1,2,3;4,5,6;7,8,9]
Matlab 的矩阵运算
冒号表达式给行向量赋值
>>A=[A;[1 2 4]]
>>b=s1:s2:s3
x=(first:last)
x=(first:increment:last)
x=linspace(first,last,n)
x=logspace(first,last,n)
3 矩阵的 Matlab 表示
访问矩阵的元素
>>A=[1,2,3;4,5,6;7,8,9]
>>A(1,:)
>>A(2,1:3)
>>A(1:3,1)
>>A(2,2)=1;
>>zeros(2,2)
>>ones(3,1)
>>eye(4)
3 矩阵运算
矩阵转置,加、减、乘,除
>>B=A ‘
>> C=A+B;
>> D=A*B
>>inv(A)
>> A\B 左乘,当 A 为非奇异方阵时 =inv(A)*B
>> B/A 右乘,当 A 为非奇异方阵时 =B*inv(A)
>> C=A.*B 矩阵对应元素之间的乘积
点运算
4 流程控制结构
循环语句、条件语句、开关语句的结构
通常使用的循环格式为 for i=s1:s3:s2 判断 i 是否在 s1,s2之间
>>msum=0;
for i=1:1:100,
msum=msum+i;
end;
msum
循环结构for …end
while…end
for 循环变量 =Vect 循环体语句
组end
4 流程控制结构
循环语句、条件语句、开关语句的结构
当逻辑变量为非零,则执行条件块语句组的内容,执行完后继续向下执行;若逻辑变量为零,则跳过条件块语句组直接向下执行
>>msum=0; i=1; while (i<=100), msum=msum+i; i=i+1; end;
条件转移结构
while…end
if 逻辑变量 条件块语句
组end
4 流程控制结构
循环语句、条件语句、开关语句的结构
开关语句 switch…case
条件转移结构
if 条件式 条件块语句组 1else 条件块语句组 2end
if 条件式 1 条件块语句组 1elseif 条件式 2 条件块语句组 2 :else 条件块语句组 n+1end
5 Matlab 函数编写
M 函数的基本结构
例 生成一个 m*n阶的 Hibert 矩阵,它的第 i 行第 j列的元素为 1/(i+j-1)
function [ 返回变量列表 ]= 函数名(输入变量列表)
注释说明语句段 由 % 引导 输入、返回变量格式的检测 函数体语句
nargin:nargout:
5 Matlab 函数编写M 函数例题 function A=myhilb(n,m)% % If nargout>1, error(‘Too many output arguments’); endIf nargin==1, m=n;elseif nargin==01nargin>2) error(‘wrong number of intput arguments’); end
A1=zeros(n,m);for i=1:n for j=1:m A1(i,j)=1/(i+j-1); end,endIf nargout==1,A=A1;elseif
nargout==0,disp(A1);end
5 Matlab 函数编写M 函数的跟踪调试
function A=myhilb(n,m)% % If nargout>1, error(‘Too many output arguments’); endIf nargin==1, m=n;elseif nargin==01nargin>2) error(‘wrong number of intput arguments’); end
A1=zeros(n,m);for i=1:n for j=1:m A1(i,j)=1/(i+j-1); end,endIf nargout==1,A=A1;elseif
nargout==0,disp(A1);end
6 Matlab 语言下图形绘制基本二维图象绘制语句
plot(x, y)
>> t=0:0.1:2*pi;y=[sin(t); cos(t)];plot(t,y)
>> t=0:0.1:2*pi;plotyy(t,sin(t),t,0.1*cos(t))
带有其他选项的绘图函数
plot(x1, y1 ,选项 1 , x2, y2 ,选项 2 ,。。。 )
6 Matlab 语言下图形绘制带有其他选项的绘图函数示例
plot(t, sin(t),’-’,t,cos(t),’:’,t,sin(t).*cos(t),’x’)
>> grid xlabel(‘ ‘) ylabel(‘ ’) title(‘ ‘) axis([xmin,xmax,ymin,ymax])
二维曲线的标注方法
Matlab提供的特殊二维曲线绘制函数
6 Matlab 语言下图形绘制带有其他选项的绘图函数示例
plot(t, sin(t),’-’,t,cos(t),’:’,t,sin(t).*cos(t),’x’)
6 Matlab 语言下图形绘制在已有的图形上叠加其他图形
hold on 设置当前图形的 hold属性为 onhold off 设置当前图形的 hold属性为 offishold 返回 hold属性
T=0:0.1:10;
plot(t, sin(t),’-’,t,cos(t),’:’,t,sin(t).*cos(t),’x’);
legend(‘sin(t)’,’cos(t)’,’cos(t)*sin(t)’)
6 Matlab 语言下图形绘制带有其他选项的绘图函数示例
plot(t, sin(t),’-’,t,cos(t),’:’,t,sin(t).*cos(t),’x’)
7 传递函数的 Matlab描述
传递函数描述 多项式描述与运算
>> p=[1 3 0 5]; >> q=[1 2];>>n=conv(p,q)>> roots(p)>> value=polyval(n,-2)
p(s)=s3+3s2+5
n(s)=p(s)q(s)
多项式 p(s)的根
求 s=-2 时 n(s)的值
7 传递函数的 Matlab描述
传递函数描述 G=tf(num,den)
>>G=tf(num,den)>>printsys(G)>>[p,z]=pzmap(num,den)
G(s)=num(s)/den(s)
零极点图
打印结果
G(s)=(6s2+1)/(s3+3s2+3s+1)
[z,p,k]=tf2zp(num,den)
7 传递函数的 Matlab描述
框图的串联、并联和反馈[num,den]=series(num1,den1, num2,den2)
[num,den]=paralle1(num1,den1, num2,den2)
[num,den]=feedback(num1,den1, num2,den2,sign)
单位反馈
消除公因式
[num,den]=cloop(num1,den1,sign)
[num,den]=minreal(numg,deng)
7 传递函数的 Matlab描述设: G1=num1/den1, G2=num2/den2
num1=s+1, den1=s2+5s+6
num2=1, den2=s2+3s
求 G1G2 的串联和反馈连接的等效传函,并求出零极点图
num,den]=series(num1,den1, num2,den2)[num,den]=feedback(num1,den1, num2,den2,sign
[num,den]=cloop(num1,den1,sign)
G1 G1 G1 G1
G1
G1
8 命令行下的时域计算
给定传递函数 G1=2, 计算单位阶跃响应 G2=1/[(s+1)(s+3)]
[y,x,t]=step(num,den);plot(t,y)
step(num,den)
[y,x,t]=step(num,den,t);plot(t,y)
G1 G1
8 命令行下的时域计算
控制器:
放大器
执行机构和读取臂:
直流电机和手臂
传感器:
磁头和索引磁道
预期磁
头位置
实际磁
头位置
磁盘驱动读取系统框图模型
磁盘驱动读取系统框图模型
讨论: 增益 K=10,80 时系统阶跃指令 (r(t)=u(t)) 的瞬态响应和 扰动阶跃信号 (d(t)=u(t)) 所产生的响应 .
K
)20(
1
ss
G1(s) 线圈 D(s) G2(s) 负载
R(s) E(s) Y(s)
)1000(
5000
s
磁盘驱动读取系统框图模型
解:
1 求反馈回路的传递函数, R(s)----Y(s); D(s)-----Y(s)
2 用 step 函数求对应的响应,求响应的稳态值,画出曲线。
K
)20(
1
ss
G1(s) 线圈 D(s) G2(s) 负载
R(s) E(s) Y(s)
)1000(
5000
s
仿真作业
1 用 Matlab 可以识别的格式输入下面两个矩阵
再求出它们的乘积 C,并将
C 矩阵的右下脚 23子矩阵赋给 D 矩阵,赋值完成后,调用相应的命令查看 matlab工作空间的占用情况。
345981
2435762
2455332
8763441
,
4981
9323
7531
7532
3321
i
i
i
BA
仿真作业
2 解线性方程
6015
14035
14436
13634
9624
54321
410975
391086
278107
15675
x
3 用 for 循环结构编写程序,求出
63
0
2i
ik
第一部分数字仿真实验
实验 2 Matlab/simulink 及时域仿真
Simulink 是 matlab提供的实现动态系统建模和仿真的一个软件包。
>>simulink
Simulink Library Browser 窗口
Simlink 的基本模块库
第一部分数字仿真实验
实验 2-1 Matlab/simulink 及时域仿真
仿真步骤: 根据系统模型建立mdl模型文件 在指定输入信号下进行数字仿真获得系统
的时间响应曲线。 根据性能指标的定义计算系统的各项性能指标。
第一部分数字仿真实验
实验 2-1 Matlab/simulink 及时域仿真
在工作空间利用 matlab提供的函数例如step,margin 等也可以进行时域分析计算。
实验 2 Matlab/simulink 及时域仿真
求解 Van der Pol 方程
实验 2-2 simulink 模型举例
1 2
22 1 2 1
,
( 1)
x x
x x x x
在 .mdl模型文件中描述方程的关系
在 matlab 命令窗给参数赋值
mu=1;x01=1;x02=-2
实验 2 Matlab/simulink 及时域仿真
求解具有非线性环节的控制系统
实验 2-2 simulink 模型举例
1 0.8s
s
在 .mdl模型文件中描述方程的关系
在 matlab 命令窗给参数赋值 c=1;
10
0.1 1s 1
s
实验 2-2 Matlab/simulink 及时域仿真
子系统( subsystem)
创建子系统
基于 matlab 函数的系统仿真分析
Matlab 函数 pzmap, zp2tf, tf2zp, roots
27243
64523)(
2345
234
sssss
sssssG
求零极点图
num=[3 2 5 4 6];
den=[1 3 4 2 7 2];
[z,p,k]=tf2zp(num,den)
pzmap(num,den)
roots(den)
[num1,dn1]=zp2tf(z,p,k)
当没有零点时 , z=[ ]
应用 simulink进行仿真
单位阶跃响应函数 step 单位脉冲响应函数 impulse 任意输入下的响应函数 lsim
t = 0:0.01:5; u = sin(t); lsim(sys,u,t)
sys=tf(num,den)
[y,t,x]=lsim(sys,u,t)
[y,t,x] = lsim(sys,u,t)
[y,t,x] = lsim(sys,u,t,x0)
应用 simulink进行仿真
[num,den]=cloop(10,[1 2 0],-1)step(num,den)impulse(num,den)
)2(
10)(
sssG
求系统的脉冲响应 (稳定性 ) 和动态性能指标 .
例如 : 单位负反馈系统的开环传递函数为
实验 3 应用 Matlab进行根轨迹分析
本节介绍的函数有 rlocus, 调用方式:rlocus(num,den)[r,k]=rlocus(num,den)axis([minx maxx miny maxy])
绘制根轨迹图
绘制系统的根轨迹图。
( 5)( ) ( )
( 1)( 2)( 3)gk s
G s H ss s s s
例题 1 :控制系统的开环传递函数为
实验 3 应用 Matlab进行根轨迹分析
root-locus_examp1.m
num=[1 5];
d1=conv([1 1],[1 2]);
d2=conv([1 3],d1]);
den=[d2 0];
rlocus(num,den)
% 或[num,den]=zp2tf([-5],[0 -1 -2 -3 ],3)[r,k]=rlocus(num,den);
绘制系统的根轨迹图。( 5)
( ) ( )( 1)( 2)( 3)
gk sG s H s
s s s s
实验 3应用 Matlab进行根轨迹分析
作业题:控制系统的闭环传递函数为
1) 绘制系统 k 变化时的根轨迹图 ;
2) 用根轨迹方法求当 k=20 时闭环的全部极点 ,给出单位阶跃响应曲线 ;
3) 讨论系统的闭环主导极点是哪些 , 用主导极点法给出系统的单位阶跃响应 , 将结果与 2) 比较 ,并进行分析 ( 可用解析法 ) 。
( 1)( 3)( )
( 2)( 3) ( 1)
k s ss
s s s k s
实验 3应用 Matlab进行根轨迹分析
例题 2 :控制系统的闭环传递函数为
( 1)( 3)( )
( 2)( 3) ( 1)
k s ss
s s s k s
解:写出根轨迹方程
( ) ( 2)( 3) ( 1) 0
( 1)1 0
( 2)( 3)
D s s s s k s
k s
s s s
实验 3应用 Matlab进行根轨迹分析
root-locus_examp2.m
选择闭环复数的极点, -2.0 ,根轨迹增益 k=20. 找出另一个极点 -0.89
写出 k=20 时的闭环系统的所有极点和零点
实验 3 应用 Matlab进行根轨迹分析
root-locus_examp2.m
选择闭环复数的极点, -2.0 ,根轨迹增益 k=20. 找出另一个极点 -0.89
num=[1 1];
d1=conv([1 2],[1 3]);
den=[d1 0];
rlocus(num,den)
% 或[r,k]=rlocus(num,den);
写出 k=20 时的闭环系统的所有极点和零点
实验 3应用 Matlab进行根轨迹分析
系统的闭环的主导极点 =?
1,2 32.0 4.3, 0.89s j s
观看系统的单位阶跃响应
( 1)( 3)( )
( 2)( 3) ( 1)
k s ss
s s s k s
nmb=k1*[1 4 3];
denb=[1 5 6+k1 k1];step(numb,denb)
1 21, 3z z
实验 3应用 Matlab进行根轨迹分析
分析系统的单位阶跃响应的解析式
nmc=k1*[1 4 3];
denc=[1 5 6+k1 k1 0];
[r,p,k]=residue(numc,denc)
r=
p=
k=[ ]
( 1)( 3) 1( )
( 2)( 3) ( 1)
k s sC s
s s s k s s
(1) (2) (3) (4)( ) ( )
(1) (2) (3) (4)
r r r rC s k s
s p s p s p s p
实验 3 应用 Matlab进行根轨迹分析
例题 3 某单位反馈控制系统的开环传递函数为
绘制系统的根轨迹,确定当系统的阻尼比为 0.7 时系统的闭环极点,并分析系统的性能。
解:绘制根轨迹
nm= [4 3 1];
den=[3 5 1 0];
sgrid
rlocus(num,den)
[k,p]=rlocfind(num,den)
2
2
(4 3 1)( )
(3 5 1)
k s sG s
s s s
K=0.27552
P=-1.7908
-0.1623+0.1653j
实验 3 应用 Matlab进行根轨迹分析
例题 3 某单位反馈控制系统的开环传递函数为
绘制系统的根轨迹,确定当系统的阻尼比为 0.7 时系统的闭环极点,并分析系统的性能。
解:整理成标准形式,绘制根轨迹 2
2
4 / 3 ( 3/ 4 1/ 4)( )
( 5 / 3 1/ 3)
k s sG s
s s s
nm= [1 3/4 1/4];
den=[1 5/3 1/3 0];
sgrid
rlocus(num,den)
[k,p]=rlocfind(num,den)
2
2
(4 3 1)( )
(3 5 1)
k s sG s
s s s
K=0.27552
P=-1.7908
-0.1623+0.1653j
实验 3 应用 Matlab进行根轨迹分析
习题 4-6 某单位反馈控制系统的开环传递函数为
绘制系统的根轨迹,确定当系统的阻尼比为 0.7 时系统的闭环极点,并分析系统的性能。
解:整理成标准形式,绘制根轨迹 2
2
4 / 3 ( 3/ 4 1/ 4)( )
( 5 / 3 1/ 3)
k s sG s
s s s
nm= [1 3/4 1/4];
den=[1 5/3 1/3 0];
sgrid
rlocus(num,den)
[k,p]=rlocfind(num,den)
( )( )
( 1)( 2)
k s aG s
s s s
实验 4 应用 Matlab进行频域分析
Matlab 函数有 bode, logsapce, margin
绘制系统的频率特性图 bode
bode(num,den)
nm=5* [0.1 1];
d1=conv([0.5 1],[1/2500 0.6/50 1]);
den=[d1 0];
bode(num,den)
[mag,phase]=bode(num,den);
2 2
5(0.1 1)( )
(0.5 1)(1/(50) 0.6 / 50 1)
sG s
s s s s
实验 4 应用 Matlab进行频域分析
Matlab 函数有 bode, logsapce, margin
w : rad/s
完全指定频率可用 logspace 函数说明
扫描翻译书的 p377 介于 10a 与 10b之间的 n 个点