1、 函数 1.step 阶跃响应指令 (连续函数) dstep 阶跃响应指令 (离散函数) clear clc num=2 -3.4 1.5; den=1 -1.6 0.8; dstep(num,den) grid on title(离散系统阶跃响应 ) xlabel(时间 ) ylabel(振幅 ) clear clc num=2 -3.4 1.5; den=1 -1.6 0.8 step(num,den) grid on title(连续 系统阶跃响应 ) xlabel(时间 ) ylabel(振幅 ) 2. c2dm()函数 ,连续系统的离散化 在 MATLAB 软件中对连续系统的离散化是
2、应用 c2dm()函数实现的, c2dm()函数的一般格式为 3. 函数 initial(), dinitial() 对于连续系统由 初始状态所引起的响应 ,零输入响应 ,可由函数 initial()来求得 ,其调用格式为 y,x,t=initial(A,B,C,D,x0) y,x,t=initial(A,B,C,D,x0,t) 其中 x0为初始状态 . 同理 ,对于 离散系统的零输入响应函数调用格式为 : y,x,t=dinitial(A,B,C,D,x0) y,x,t=dinitial(A,B,C,D,x0,n) 4. axis 坐标轴范围 axis 一般用来设置 axes 的样式,包括坐
3、标轴范围,可读比例等 axis(xmin xmax ymin ymax) axis(xmin xmax ymin ymax zmin zmax cmin cmax) 坐标轴设置 5. 函数 ss2zp()(与 zplane()连用) MATLAB 还提供了一个类似的函数ss2zp()。 该函数的功能是 直接根据系统的状态方程描述求取系统的零点、极点和增益 ,不必先化成传递函数描述形式。其基本调用格式与 tf2zp()函数类似,只是多了一个输入量选择的参数: Z, P, K ss2zp(A, B, C, D, iu) 其中 (A, B, C, D)是系统的状态方程描述的系数矩阵 , iu表示对系
4、统的第 iu 个输入量求零点、极点和增益 ; Z 是求得的零点矩阵 ; P 是求得的极点矩阵, Z 的列数与输出量 y 的个数一样多,行数视零点个数的多少而定; K 是求得的增益列向量,其维数等于输出量 y 的个数。 6. zplane() zplane 函数用于 画出线性系统在 Z平面上的零极点 。有两种使用方法: 在已知零极点时,例如某滤波器的零点为 -1/2,一对共轭极点为 和 时,只要输入命令 zer = -0.5; pol = 0.9*exp(j*2*pi*-0.3 0.3); zplane(zer,pol) 即可画出零极点。 另一种情况:已知系统的系统函数系数向量 b 和 a ,则
5、可通过调用 zplane(b,a) 绘出零极点。 )3.0(29.0 je )3.0(29.0 je这种情形下, zplane 函数先求得系统函数的零点和极点,然后绘出零极点图。 例子 clear A1=-1.5,-0.8,0,0;0.8,0,0,0;0.3,0.4,-4.0,-1.25;0,0,-1.25,0; B1=1;0;1;0; C1=1,2,1,2; D1=0; t=0.5; A,B,C,D=c2dm(A1,B1,C1,D1,t,m); subplot(2,2,1) dstep(A,B,C,D) grid on title(离散阶跃响应 ) xlabel(时间 ) ylabel(振幅
6、 ) subplot(2,2,2) dimpulse(A,B,C,D) grid on title(离散冲激响应 ) ylabel(振幅 ) xlabel(时间 ) subplot(2,2,3) x0=1,1,1,1; dinitial(A,B,C,D,x0) grid on ylabel(振幅 ) xlabel(时间 ) title(离散零输入响应 ) axis(0 6 -0.5 2.5) subplot(2,2,4) z,p,k=ss2zp(A,B,C,D,1) zplane(z,p) grid on title(离散零极点图 ) xlabel(实部 ) ylabel(虚部 ) 7. ls
7、im()和 dlsim(),任意输入函数的响应 连续系统对任意输入函数的响应可利用 MATLAB 的函数lsim()求取 ,其调用格式为 y,x=lsim(num,den,u,t) y,x=lsim(A,B,C,D,iu,u,t) 其中 ,u为由给定输入序列构成的 矩阵 ,它的每列对应一个输入 ,每行对应一个新的时间点 ,其行数与时间 t 的长度相等 .其他用法同 step()函数 . 8. gensig()特定输入时间响应函数 u,t=gensig(type,Ta) type 类型 :sin、 square(方波 )、 pulse Ta周期 如 生成一个周期为 5s,持续时间为 30s,采样
8、时间为 0.1s的方波。 u,t=gensig(square,5,30,0.1) plot(t,u) axis(0,30,-0.5,1.5) 9.tf() transfer function 数 转移函数, 自 传递函数 Sys= tf (NUM, DEN ) 用于 创建一个传递函数 的表达。 例子 clear u,t=gensig(squre,4,10,0.1); H=tf(2,5,1,1,2,3);tf(1,-1,1,1,5); lsim(H,u,t) grid on title(周期为 4 秒的方波输出响应 ) xlabel(时间 ) ylabel(振幅 ) grid off 10.sy
9、m()、 syms 定义符号变量 sym( x , y) %定义符号变量 x,y syms x y %定义符号变量 x,y 11.limit():求极限函数 (P140) 符号极限, ( 1) limit(F,v,a): 计算符号对象 F,当指定变量 V 到 a时的极限。 ( 2) limit(F, a) : 计算符号对象 F, 当默认的独立变量趋近于 a 的极限。 ( 3) limit(F) : 计算符号对象 F, 当默认的独立变量趋近于 0 的极限。 ( 4) limit(F,v,a, right )或 limit(F,v,a, left ): 计算符号函数 F 的单侧极限:右极限 v到
10、a的极限,或左极限 v到 a的极限。 12.diff(): 求微分函数( P141) ( 1) diff(S, v ): 对符号对象 S 中指定的符号变量 v求其 1阶导数。 ( 2) diff(S): 对符号对象 S 中默认的独立变量求其 1 阶导数。 ( 3) diff(S,n): 对符号对象 S 中默认的独立变量求其 n 阶导数。 ( 4) diff(S, v ,n): 对符号对象 S 中指定的符号变量 v 求其 n 阶导数。 13.int(): 求积分函数( P141) ( 1) R=int(S,v): 对符号对象 S 中指定的符号变量 v求 不定积分 ,结果没有带任意常数 C。 (
11、2) R=int(S): 对符号对象 S中默认的独立变量求不定积分。 ( 3) R=int(S,v,a,b): 对符号对象 S中指定的符号变量 v 求从a到 b 的定积分。 ( 4) R=int(S,a,b): 对符号对象 S 中默认的独立变量求从 a到 b的定积分。 14.符号 inf 无穷大 MATLAB 中无穷大用 Inf 表示,这个符号是 MATLAB 已经定义好的特殊变量。负无穷大用 -inf 表示,正无穷大用 +inf 或 inf表示。 15.rand() 常用的产生通用特殊矩阵的函数 zeros:产生 全 0 矩阵 (零矩阵 ) ones:产生 全 1 矩阵 (幺矩阵 ) eye
12、:产生 单位矩阵 rand:产生 0 1 间均匀分布的随机矩阵 randn:产生 均值为 0,方差为 1 的标准正态分布随机矩 阵 以 zeros 函数为例 zeros(m):产生 m m零矩阵 zeros(m,n) :产生 m n零矩阵 zeros(size(A) :产生一个与矩阵 A同样大小的零矩阵 Rand:生成均匀分布的伪随机数 ,分布在( 01)之间 , 主要语法: rand(m,n)生成 m 行 n 列的均匀分布的伪随机数 产生在 a,b区间服从均匀分布的随机数方法 a + (b-a)*rand(m,n) Randn:生成标准正态分布的伪随机数(均值为 0,方差为 1) 主要语法:
13、和上面一样 产生均值为 ,方差为 2的随机数方法 例子 clear num=2 -6.8 3.6;den=3 -4.3 1.75; u=rand(100,1); dlsim(num,den,u); grid on clear num=1.064; den=2,-3.685,1.791; u1=ones(1,50),-1*ones(1,50); u=u1,u1,u1; dlsim(num,den,u) grid on title(离散系统仿真 ) xlabel(时间 ) ylabel(振幅 ) 16. pzmap() MATLAB 提供了函数 pzmap()来 绘制系统的零极点图 ,其用法如下
14、调用格式为 pzmap(p,z); P 零点向量 z 极点向量 p,z=pzmap(a,b,c,d):返回状态空间描述系统的极点矢量和零点矢量, 而不在屏幕 上绘制出零极点图。 (不绘图,只求 p,z) p,z=pzmap(num,den):返回传递函数描述系统的极点矢量和零点矢量, 而不在屏幕 上绘制出零极点图。 (不绘图,只求 p,z) pzmap(a,b,c,d)或 pzmap(num,den): 不带输出参数项 ,则 直接 在 s 复平面上绘制出系统对应的零极点位置,极点用表示,零点用 o 表示。 (绘图,不求 p,z) pzmap(p,z):根据系统已知的零极点列向量或行向量直接在
15、s 复平面上绘制出对应的零极点位置,极点用表示 ,零点用 o 表示。 例子 clear num=0.0001 0.0218 1.0436 9.3599; den=0.0006 0.0268 0.06365 6.2711; p,z=pzmap(num,den) %求 p,z 值 pzmap(num,den) %绘图,绘出图纸 grid on title(零极点图 ) xlabel(实轴 ) ylabel(虚轴 ) clear num=0.0001 0.0218 1.0436 9.3599; den=0.0006 0.0268 0.06365 6.2711; sys=tf(num,den); pz
16、map(sys) p,z=pzmap(sys) title(零极点图 ) xlabel(实轴 ) ylabel(虚轴 ) 图与上面相同 17. rlocus() MATLAB 提供了函数 rlocus()来 绘制系统的根轨迹图 ,其用法如下: rlocus(a,b,c,d)或者 rlocus(num,den):根据 SISO开环系统的状态空间描述模型和传递函数模型,直接在屏幕上绘制出系统的根轨迹图。开环增益的值从零到无穷 大变化。 rlocus(a,b,c,d,k)或 rlocus(num,den,k): 通过指定开环增益 k 的变化范围来绘制系统的根轨迹图。 r=rlocus(num,den
17、,k) 或者r,k=rlocus(num,den) :不在屏幕上直接绘出系统的根轨迹图,而根据开环增益变化矢量 k ,返回闭环系统特征方程 1 k*num(s)/den(s)=0 的根 r,它有 length(k)行,length(den)-1列,每行对应某个 k值时的所有闭环极点。或者同时返回 k 与 r。 若给出传递函数描述系统的分子项 num 为负,则利用 rlocus 函数绘制的是系统的零度根轨迹。(正反馈系统或非最小相位系统) 例子 clear num=0.0001 0.0218 1.0436 9.3599; den=0.0006 0.0268 0.06365 6.2711; sys
18、=tf(num,den); rlocus(sys) title(根轨迹图 ) xlabel(实轴 ) ylabel(虚轴 ) rlocfind()函数 MATLAB 提供了函数 rlocfind()来 找出给定的一组根(闭环极点)对应的根轨迹增益 。其用法如下: k,p=rlocfind(a,b,c,d)或者 k,p=rlocfind(num,den) 它要求在屏幕上 先已经绘 制好有关的根轨迹图。然后,此命令将产生一个光标以用来选择希望的闭环极点。命令执行结果: k 为对应选择点处根轨迹开环增益; p 为此点处的系统闭环特征根。 不带输出参数项 k,p时,同样可以执行,只是此时只将 k 的值
19、返回到缺省变量 ans 中。 例 clear si=1; s2=conv(1,0,conv(0.5,1,4,1); t=tf(si,s2); rlocus(t) k,p=rlocfind(t) 例子 clear num=1 3; den=conv(1 0,conv(1 5,conv(1 6,1 2 2); %conv()函数,“相乘” sys=tf(num,den) rlocus(sys) %绘制系统的根轨迹图 k,p=rlocfind(sys) %在屏幕上先已经绘制好有关的根轨迹图。然后,此命令将产生一个光标以用来选择希望的闭环极点。命令执行结果: k 为对应选择点处根轨迹开环增益; p 为
20、此点处的系统闭环特征根。 运行结果中:如果 p(极点 )的实部全为负值,则在该增益点(k)处系统是稳定的。 (闭环系统 ) sgrid()函数 sgrid:在现存的屏幕根轨迹或零极点图上 绘制 出自然振荡频率 wn、阻尼比矢量 z对应的 格线 。 sgrid(new) :是先清屏,再画格线。 sgrid(z,wn):则绘制由用户指定的阻尼比矢量 z、自然振荡频率 wn 的格线。 例 clear n1=0.0001 0.0218 1.0436 9.3599; n2=0.0006 0.0268 0.06365 6.2711; s1=tf(n1,n2); pzmap(s1) % 绘制零极点图 sgr
21、id %绘制格线 title(零极点图 ) xlabel(实轴 ) ylabel(虚轴 ) 19.rltool 在 matlaB 命令窗口中输入“ rltool”, 打开系统根轨迹设计器 ; rltool(sys) 打开系统模型 sys 带根轨迹的设计器 ; eg clear n1=1,1; n2=conv(1,0,conv(1,-1,1,4,16); s=tf(n1,n2) rltool(s) 20. freqs()频率响应函数 H=freqs(num,den,w) num 分子多项式系数 den 分母多项式系数 w 需计算的 H(jw)的抽样点 (数组 w中 最 少需包含两个 w 的抽样点
22、 )。 angle()和 abs() 使用 MATLAB 所提供的 abs 函数和 angle 函数分别提取 幅频特性 与 相频特性 。 angr=angle(r) %求 r 的相角 例如 clear num=4;den=1 2 4; w=0:0.01:3; g=freqs(num,den,w) mag=abs(g) plot(w,mag) grid on title(幅频特性曲线 ) xlabel(频率( rad./s) ) ylabel(幅值 ) axis(0 3 0.5 1.2) 21.nyquist() 频率特性函数 G (j )在复平面的图像为系统的极坐标频率特性图或 Nyquist
23、 图。 Nyquist 判据:如果系统的开环传递函数 G(s)在右半s平面有 p个极点,则闭环系统稳定的充分必要条件是:当 从 连续的变化到 + 时,开环频率特性函数 G (j )的 Nyquist图逆时针方向包围复平面上的 (-1, j0)点 p 圈。 应用 Nyquist 稳定判据研究控制系统的稳定性有很多优点:首先,它主要靠作图,手工计算量很小。其次,它不仅能回答闭环系统是否稳定,而且还可以得到系统接近于不稳定的程度。更进一步,这个判据往往还可以提示改善系统稳定性的办法。 连续系统函数的调用格式为 nyquist(sys) nyquist(sys,w) Re,Im,w=nyquist(n
24、um,den) Re,Im,w=nyquist(num,den,w) Re,Im,w=nyquist(A,B,C,D) 其中 返回值 Re,Im 和 w 分别为频率特性的实部向量、虚部向量和对应的频率向量 dnyquist() 离散系统函数的调用格式为 dnyquist(a,b,c,d,Ts) dnyquist(a,b,c,d,Ts,iu) dnyquist(a,b,c,d,Ts,iu,w) 其中 TS和 w 分别为频率特性的取样时间和对应的频率 向量 列子 clear k1=1700;k2=6300; den=1 52 100 0; w=8:1:80; figure(1) nyquist(k
25、1,den,w) grid on title(nyquist 图 ) xlabel(实数轴 ) ylabel(虚数轴 ) figure(2) nyquist(k2,den,w) grid on title(nyquist 图 ) xlabel(实数轴 ) ylabel(虚数轴 ) axis(-2 0 -1 1) 22. zp2tf() zp2tf()由零极点形式转化为传递函数形式 num, den=zp2tf(z,p,k) Z 是求得的零点矩阵 ; P 是求得的极点矩阵, Z 的列数与输出量 y 的个数一样多,行数视零点个数的多少而定; K 是求得的增益列向量,其维数等于输出量 y 的个数。
26、tf2zp() z, p, k=tf2zp(num,den) 传函到零极 由传递函数转化为零极点形式 ss2tf()由状态空间转化为传递函数形式 ss2zp()由状态空间转化为零极点形式 tf2ss()由传递函数形式转化为状态空间 A B C D=tf2ss(num, den) zp2ss()由零极点形式转化为状态空间形式 23.cloop() 闭环: cloop(单位反馈) 格式: ac,bc,cc,dc=cloop(a,b,c,d,sign) 通过将所有的输出反馈到输入,从而产生闭环系统的 状态空间模型。当 sign=1 时采用正反馈;当 sign= -1 时采用负反馈; sign 缺省时
27、,默认为负反馈 。 ac,bc,cc,dc=cloop(a,b,c,d,outputs,inputs) 表示将指定的输出 outputs 反馈到指定的输入 inputs,以此构成闭环系统的状态空间模型。一般为正 反馈,形成负反馈时应在 inputs 中采用负值。 numc,denc=cloop(num,den,sign) 表示由传递函数表示的开环系统构成闭环系统, sign 意义与上述相同。 例子 clear k1=16.7/0.125; z1=0; p1=-1.25 -4 -16; num1,den1=zp2tf(z1,p1,k1) num,den=cloop(num1,den1) z,p,k=tf2zp(num,den); p figure(1) nyquist(num,den) title(nyquist 图 ) xlabel(实数轴 ) ylabel(虚轴、 ) figure(2) num2,den2=cloop(num,den) impulse(num2,den2) 24. sqrt() 求 平方 根 例如 mk1 程序: W1=sqrt(k/m) 25.矩阵 (数组 )算法 a=1 2 2 5 4 4 4 b=5 9 8 9 6 2 7 c=5 2 8 9 6 2 7 数组相加乘除要加点 (是给 符号加的 ) a.+c.+b a./c./b a.*b.*c