第一部分数字仿真 实验

56
第第第第第第 第第 第第 1 Matlab 第第 The MathWorks,Inc Matlab 第第第 第第第第第第第第第 第第第第第第第第第第第第第第第第第第 第第第第第第第第第第第第第

Upload: kineta

Post on 14-Jan-2016

87 views

Category:

Documents


5 download

DESCRIPTION

第一部分数字仿真 实验. 实验 1 Matlab 概述. The MathWorks,Inc. Matlab 的特点 强大的数学运算能力 方便实用的绘图功能及语言的高度集成性 比较完善的控制领域的工具箱. 第一部分数字仿真 实验. 实验 1 Matlab 概述. 1 Matlab 语言的基本使用环境 命令子窗( command window) 程序调用版( Launch Pad) 命令的历史记录( Command History) 工作空间管理程序( Workspace) 当前目录管理程序( Current Directory). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第一部分数字仿真 实验

第一部分数字仿真实验

实验 1 Matlab 概述

The MathWorks,Inc

Matlab 的特点强大的数学运算能力方便实用的绘图功能及语言的高度集成性比较完善的控制领域的工具箱

Page 2: 第一部分数字仿真 实验

第一部分数字仿真实验

实验 1 Matlab 概述

1 Matlab 语言的基本使用环境 命令子窗 (command window) 程序调用版 (Launch Pad) 命令的历史记录( Command History) 工作空间管理程序( Workspace) 当前目录管理程序( Current Directory)

Page 3: 第一部分数字仿真 实验

第一部分数字仿真实验

Matlab 的工作空间

命令是用命令行形式或 m 文件形式输入,那么输入的命令和创建的所有变量值,就会驻留在 Matlab 的工作空间,可在任何需要的时候调用。

工作空间管理命令: who, whos, clear

Page 4: 第一部分数字仿真 实验

实验 1 Matlab 概述

关于变量和函数命名

一般为双精度浮点, 8 个字节( 64 位), -1.7*10308—1.7*10308,

表示为 Double( )

图象处理中:无符号 8 位整型, 表示为 unit8( ), int8( )

变量(函数名)由字母引导,可跟字母、数字、下化线等,不超过 19 个字符。区分大小写

支持复数向量、矩阵和字符串型矩阵。

Page 5: 第一部分数字仿真 实验

2 Matlab 的基本特性

注释和标点

一行中, % 后面的所有文字都是注释

多条命令可以放在同一行,只要它们被逗号或分号隔开,分号禁止显示。连续三个点 … 表示语句的余下部分将在下行出现,

变量名不能分开,注释行不能续行。

特定常数 eps 浮点运算误差 =2.2204*10-16

j, i 纯虚数 Inf 无穷大 NaN 不定式 pi 圆周率 ans 用于返回结果的缺省变量名 nargin 所用函数的输入变量 nargout 所用函数的输出变量

Page 6: 第一部分数字仿真 实验

2 Matlab 的基本特性

Matlab 的搜索路径当你在命令行输入一个字符串(可能是变量或命令),

回车后, Matlab 按一定的顺序执行。例如>> ptest

顺序为:( 1 )检查是否为工作空间中的变量( 2 )检查是否为内置函数( 3 )检查 MEX 文件 ptest.mex 是否存在于当间目录( 4 )检查 M 文件 ptest.m 是否为存在于当间目录( 5 )按次序搜索已设置的路径。检查 ptest.mex 或 ptest.m

是否为存在于 matlab 的搜索路径中。

应用 c 语言按照 Mex技术要求的格式编写相应部分的程序,通过编译连接,形成 Matlab可以直接调用的动态连接库,显著加快运算速度。

Page 7: 第一部分数字仿真 实验

Matlab 的三种执行方式

M 文件和 M 函数

1 脚本文件 (批处理文件)启动 M 文件编辑器

b=[1;2;3];

A=[1 2 3;4 5 6;7 8 9];

Inv(A)*b;

脚本文件空间与 Matlab 工作空间是相同的。

Page 8: 第一部分数字仿真 实验

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)

保存文件时,文件名和函数名必须相同。

Page 9: 第一部分数字仿真 实验

Matlab 的三种执行方式

m 函数有自己专用的工作空间,函数内部变量与 matlab 工作空间

之间的唯一联系是函数的输入和输出变量。

Matlab 的全局变量,函数与其他函数、 matlab 工作空间共享变量。说明变量全局共享的方法是“ global 变量名”

[ 返回变量列表 ]= 函数名(变量列表)

例如: [v,d]=eig(A)

函数调用语句

Page 10: 第一部分数字仿真 实验

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

Page 11: 第一部分数字仿真 实验

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)

Page 12: 第一部分数字仿真 实验

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)

Page 13: 第一部分数字仿真 实验

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 矩阵对应元素之间的乘积

点运算

Page 14: 第一部分数字仿真 实验

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

Page 15: 第一部分数字仿真 实验

4 流程控制结构

循环语句、条件语句、开关语句的结构

当逻辑变量为非零,则执行条件块语句组的内容,执行完后继续向下执行;若逻辑变量为零,则跳过条件块语句组直接向下执行

>>msum=0; i=1; while (i<=100), msum=msum+i; i=i+1; end;

条件转移结构

while…end

if 逻辑变量 条件块语句

组end

Page 16: 第一部分数字仿真 实验

4 流程控制结构

循环语句、条件语句、开关语句的结构

开关语句 switch…case

条件转移结构

if 条件式 条件块语句组 1else 条件块语句组 2end

if 条件式 1 条件块语句组 1elseif 条件式 2 条件块语句组 2 :else 条件块语句组 n+1end

Page 17: 第一部分数字仿真 实验

5 Matlab 函数编写

M 函数的基本结构

例 生成一个 m*n阶的 Hibert 矩阵,它的第 i 行第 j列的元素为 1/(i+j-1)

function [ 返回变量列表 ]= 函数名(输入变量列表)

注释说明语句段 由 % 引导 输入、返回变量格式的检测 函数体语句

nargin:nargout:

Page 18: 第一部分数字仿真 实验

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

Page 19: 第一部分数字仿真 实验

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

Page 20: 第一部分数字仿真 实验

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 ,。。。 )

Page 21: 第一部分数字仿真 实验

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提供的特殊二维曲线绘制函数

Page 22: 第一部分数字仿真 实验

6 Matlab 语言下图形绘制带有其他选项的绘图函数示例

plot(t, sin(t),’-’,t,cos(t),’:’,t,sin(t).*cos(t),’x’)

Page 23: 第一部分数字仿真 实验

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)’)

Page 24: 第一部分数字仿真 实验

6 Matlab 语言下图形绘制带有其他选项的绘图函数示例

plot(t, sin(t),’-’,t,cos(t),’:’,t,sin(t).*cos(t),’x’)

Page 25: 第一部分数字仿真 实验

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)的值

Page 26: 第一部分数字仿真 实验

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)

Page 27: 第一部分数字仿真 实验

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)

Page 28: 第一部分数字仿真 实验

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

Page 29: 第一部分数字仿真 实验

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

Page 30: 第一部分数字仿真 实验

8 命令行下的时域计算

控制器:

放大器

执行机构和读取臂:

直流电机和手臂

传感器:

磁头和索引磁道

预期磁

头位置

实际磁

头位置

磁盘驱动读取系统框图模型

Page 31: 第一部分数字仿真 实验

磁盘驱动读取系统框图模型

讨论: 增益 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

Page 32: 第一部分数字仿真 实验

磁盘驱动读取系统框图模型

解:

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

Page 33: 第一部分数字仿真 实验

仿真作业

1 用 Matlab 可以识别的格式输入下面两个矩阵

再求出它们的乘积 C,并将

C 矩阵的右下脚 23子矩阵赋给 D 矩阵,赋值完成后,调用相应的命令查看 matlab工作空间的占用情况。

345981

2435762

2455332

8763441

,

4981

9323

7531

7532

3321

i

i

i

BA

Page 34: 第一部分数字仿真 实验

仿真作业

2 解线性方程

6015

14035

14436

13634

9624

54321

410975

391086

278107

15675

x

3 用 for 循环结构编写程序,求出

63

0

2i

ik

Page 35: 第一部分数字仿真 实验

第一部分数字仿真实验

实验 2 Matlab/simulink 及时域仿真

Simulink 是 matlab提供的实现动态系统建模和仿真的一个软件包。

>>simulink

Simulink Library Browser 窗口

Simlink 的基本模块库

Page 36: 第一部分数字仿真 实验

第一部分数字仿真实验

实验 2-1 Matlab/simulink 及时域仿真

仿真步骤: 根据系统模型建立mdl模型文件 在指定输入信号下进行数字仿真获得系统

的时间响应曲线。 根据性能指标的定义计算系统的各项性能指标。

Page 37: 第一部分数字仿真 实验

第一部分数字仿真实验

实验 2-1 Matlab/simulink 及时域仿真

在工作空间利用 matlab提供的函数例如step,margin 等也可以进行时域分析计算。

Page 38: 第一部分数字仿真 实验

实验 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

Page 39: 第一部分数字仿真 实验

实验 2 Matlab/simulink 及时域仿真

求解具有非线性环节的控制系统

实验 2-2 simulink 模型举例

1 0.8s

s

在 .mdl模型文件中描述方程的关系

在 matlab 命令窗给参数赋值 c=1;

10

0.1 1s 1

s

Page 40: 第一部分数字仿真 实验

实验 2-2 Matlab/simulink 及时域仿真

子系统( subsystem)

创建子系统

Page 41: 第一部分数字仿真 实验

基于 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=[ ]

Page 42: 第一部分数字仿真 实验

应用 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)

Page 43: 第一部分数字仿真 实验

应用 simulink进行仿真

[num,den]=cloop(10,[1 2 0],-1)step(num,den)impulse(num,den)

)2(

10)(

sssG

求系统的脉冲响应 (稳定性 ) 和动态性能指标 .

例如 : 单位负反馈系统的开环传递函数为

Page 44: 第一部分数字仿真 实验

实验 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 :控制系统的开环传递函数为

Page 45: 第一部分数字仿真 实验

实验 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

Page 46: 第一部分数字仿真 实验

实验 3应用 Matlab进行根轨迹分析

作业题:控制系统的闭环传递函数为

1) 绘制系统 k 变化时的根轨迹图 ;

2) 用根轨迹方法求当 k=20 时闭环的全部极点 ,给出单位阶跃响应曲线 ;

3) 讨论系统的闭环主导极点是哪些 , 用主导极点法给出系统的单位阶跃响应 , 将结果与 2) 比较 ,并进行分析 ( 可用解析法 ) 。

( 1)( 3)( )

( 2)( 3) ( 1)

k s ss

s s s k s

Page 47: 第一部分数字仿真 实验

实验 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

Page 48: 第一部分数字仿真 实验

实验 3应用 Matlab进行根轨迹分析

root-locus_examp2.m

选择闭环复数的极点, -2.0 ,根轨迹增益 k=20. 找出另一个极点 -0.89

写出 k=20 时的闭环系统的所有极点和零点

Page 49: 第一部分数字仿真 实验

实验 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 时的闭环系统的所有极点和零点

Page 50: 第一部分数字仿真 实验

实验 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

Page 51: 第一部分数字仿真 实验

实验 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

Page 52: 第一部分数字仿真 实验

实验 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

Page 53: 第一部分数字仿真 实验

实验 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

Page 54: 第一部分数字仿真 实验

实验 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

Page 55: 第一部分数字仿真 实验

实验 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

Page 56: 第一部分数字仿真 实验

实验 4 应用 Matlab进行频域分析

Matlab 函数有 bode, logsapce, margin

w : rad/s

完全指定频率可用 logspace 函数说明

扫描翻译书的 p377 介于 10a 与 10b之间的 n 个点