560 likes | 773 Views
第一部分数字仿真 实验. 实验 1 Matlab 概述. The MathWorks,Inc. Matlab 的特点 强大的数学运算能力 方便实用的绘图功能及语言的高度集成性 比较完善的控制领域的工具箱. 第一部分数字仿真 实验. 实验 1 Matlab 概述. 1 Matlab 语言的基本使用环境 命令子窗( command window) 程序调用版( Launch Pad) 命令的历史记录( Command History) 工作空间管理程序( Workspace) 当前目录管理程序( Current Directory).
E N D
第一部分数字仿真实验 实验 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 应用c语言按照Mex技术要求的格式编写相应部分的程序,通过编译连接,形成Matlab可以直接调用的动态连接库,显著加快运算速度。 顺序为: (1)检查是否为工作空间中的变量 (2)检查是否为内置函数 (3)检查MEX文件ptest.mex是否存在于当间目录 (4)检查M文件ptest.m是否为存在于当间目录 (5)按次序搜索已设置的路径。检查ptest.mex或ptest.m是否为存在于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工作空间 之间的唯一联系是函数的输入和输出变量。 函数调用语句 [返回变量列表]=函数名(变量列表) 例如: [v,d]=eig(A) Matlab的全局变量,函数与其他函数、matlab工作空间共享变量。说明变量全局共享的方法是“global 变量名”
Matlab里的函数(内置) Ones(2,2), eye(3) length(A),size(A),sum(A),max(A) rank det log10,log log,sin cos tan >>x=[1, pi, 0.1 0.5 ] >> cos(x) >>sum(x) >>t=0:0.1:10
Matlab的矩阵运算 Matlab的矩阵运算 >>A=[1,2,3;4,5,6;7,8,9] >>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 循环变量=Vect 循环体语句组 end for …end 循环结构 while…end 通常使用的循环格式为 for i=s1:s3:s2 判断i是否在s1,s2之间 >>msum=0; for i=1:1:100, msum=msum+i; end; msum
4 流程控制结构 循环语句、条件语句、开关语句的结构 条件转移结构 if 逻辑变量 条件块语句组 end while…end 当逻辑变量为非零,则执行条件块语句组的内容,执行完后继续向下执行;若逻辑变量为零,则跳过条件块语句组直接向下执行 >>msum=0; i=1; while (i<=100), msum=msum+i; i=i+1; end;
4 流程控制结构 循环语句、条件语句、开关语句的结构 条件转移结构 if 条件式1 条件块语句组1 elseif 条件式2 条件块语句组2 : else 条件块语句组n+1 end if 条件式 条件块语句组1 else 条件块语句组2 end 开关语句switch…case
5 Matlab函数编写 M函数的基本结构 function [返回变量列表]=函数名(输入变量列表) 注释说明语句段 由%引导 输入、返回变量格式的检测 函数体语句 nargin: nargout: 例 生成一个m*n阶的Hibert矩阵,它的第i行第j列的元素为1/(i+j-1)
5 Matlab函数编写 function A=myhilb(n,m) % % If nargout>1, error(‘Too many output arguments’); end If 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,end If nargout==1,A=A1;elseif nargout==0,disp(A1);end M函数例题
5 Matlab函数编写 function A=myhilb(n,m) % % If nargout>1, error(‘Too many output arguments’); end If 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,end If nargout==1,A=A1;elseif nargout==0,disp(A1);end M函数的跟踪调试
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属性为on hold off 设置当前图形的hold属性为off ishold 返回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) 消除公因式
G1 G1 G1 G1 G1 G1 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 8 命令行下的时域计算 [y,x,t]=step(num,den); plot(t,y) step(num,den) 给定传递函数G1=2, 计算单位阶跃响应 G2=1/[(s+1)(s+3)] [y,x,t]=step(num,den,t); plot(t,y)
执行机构和读取臂: 直流电机和手臂 预期磁 头位置 控制器: 放大器 实际磁 头位置 传感器: 磁头和索引磁道 8 命令行下的时域计算 磁盘驱动读取系统框图模型
G1(s) 线圈D(s) G2(s)负载 R(s) E(s)Y(s) K 磁盘驱动读取系统框图模型 讨论: 增益K=10,80时系统阶跃指令(r(t)=u(t))的瞬态响应和扰动阶跃信号(d(t)=u(t))所产生的响应.
G1(s) 线圈D(s) G2(s)负载 R(s) E(s)Y(s) K 磁盘驱动读取系统框图模型 解: 1 求反馈回路的传递函数,R(s)----Y(s); D(s)-----Y(s) 2 用step 函数求对应的响应,求响应的稳态值,画出曲线。
仿真作业 1 用Matlab 可以识别的格式输入下面两个矩阵 再求出它们的乘积C,并将 C矩阵的右下脚23子矩阵赋给D矩阵,赋值完成后,调用相应的命令查看matlab工作空间的占用情况。
仿真作业 2解线性方程 3 用for 循环结构编写程序,求出
第一部分数字仿真实验 实验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及时域仿真 实验2-2 simulink 模型举例 求解Van der Pol 方程 在.mdl模型文件中描述方程的关系 在matlab命令窗给参数赋值 mu=1;x01=1;x02=-2
实验2 Matlab/simulink及时域仿真 实验2-2 simulink 模型举例 求解具有非线性环节的控制系统 在.mdl模型文件中描述方程的关系 在matlab命令窗给参数赋值c=1;
实验2-2 Matlab/simulink及时域仿真 子系统(subsystem) 创建子系统
基于matlab函数的系统仿真分析 Matlab函数 pzmap, zp2tf, tf2zp, roots 求零极点图 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 [y,t,x] = lsim(sys,u,t) [y,t,x] = lsim(sys,u,t,x0) t = 0:0.01:5; u = sin(t); lsim(sys,u,t) sys=tf(num,den) [y,t,x]=lsim(sys,u,t)
应用simulink进行仿真 [num,den]=cloop(10,[1 2 0],-1) step(num,den) impulse(num,den) 例如: 单位负反馈系统的开环传递函数为 求系统的脉冲响应(稳定性)和动态性能指标.
实验 3 应用Matlab进行根轨迹分析 本节介绍的函数有rlocus, 调用方式: rlocus(num,den) [r,k]=rlocus(num,den) axis([minx maxx miny maxy]) 绘制根轨迹图 例题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); 绘制系统的根轨迹图。
实验 3应用Matlab进行根轨迹分析 作业题:控制系统的闭环传递函数为 • 绘制系统k变化时的根轨迹图; • 用根轨迹方法求当k=20时闭环的全部极点,给出单位阶跃响应曲线; • 讨论系统的闭环主导极点是哪些, 用主导极点法给出系统的单位阶跃响应, 将结果与2) 比较,并进行分析(可用解析法)。
实验 3应用Matlab进行根轨迹分析 例题2:控制系统的闭环传递函数为 解:写出根轨迹方程
实验 3应用Matlab进行根轨迹分析 root-locus_examp2.m 选择闭环复数的极点,-2.0,根轨迹增益k=20. 找出另一个极点-0.89 写出k=20时的闭环系统的所有极点和零点
实验 3 应用Matlab进行根轨迹分析 root-locus_examp2.m num=[1 1]; d1=conv([1 2],[1 3]); den=[d1 0]; rlocus(num,den) % 或 [r,k]=rlocus(num,den); 选择闭环复数的极点,-2.0,根轨迹增益k=20. 找出另一个极点-0.89 写出k=20时的闭环系统的所有极点和零点
实验 3应用Matlab进行根轨迹分析 系统的闭环的主导极点=? 观看系统的单位阶跃响应 nmb=k1*[1 4 3]; denb=[1 5 6+k1 k1]; step(numb,denb)