实验 一 利用MATLAB 进行线性系统的模型转换及联结实验目的:1、学习系统状态空间模型的建立方法、了解状态空间模型与传递函数、零极点模型之间相互转换的方法;2、通过编程、上机调试,掌握系统状态空间模型与传递函数相互转换的方法。
3、通过编程、上机调试,掌握系统模型的联结方法。
实验原理: 一、连续系统(1)状态空间模型xAx Bu y C x D u=+=+ (1.1)其中:nx R ∈是系统的状态向量,mu R ∈是控制输入,py R ∈是测量输出,A 是n n ⨯维状态矩阵、B 是n m ⨯维输入矩阵、C 是p n ⨯维输出矩阵、D 是直接转移矩阵。
在MA TLAB 中,用(A,B,C,D )矩阵组表示。
系统传递函数和状态空间模型之间的关系如式(1.2)所示。
1()()G s C sI A B D -=-+ (1.2)(2)传递函数模型11101110()(),()m m m m nn n n b s b s b s b num s H s m n den s a s a sa s a ----++++==≤++++在MA TLAB 中,直接用分子/分母的系数表示1010[,,,][,,,]m m n n num b b b den a a a --==(3)零极点增益模型1212()()()()()()()m n s z s z s z H s ks p s p s p ---=---在MA TLAB 中,用[z, p, k]矢量组表示,即1212[,,,];[,,,];[];m n z z z z p p p p k k === 例1.1 求由以下状态空间模型所表示系统的传递函数,[]112233123010000125525512010xx x x u x x x y x x ⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=+⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥----⎣⎦⎣⎦⎣⎦⎣⎦⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦编写并执行以下的m-文件:A=[0 1 0;0 0 1;-5 –25 –5]; B=[0;25;-120]; C=[1 0 0]; D=[0];[num,den]=ss2tf(A,B,C,D) 得到:num= 0 -0.0000 25.0000 5.0000 den= 1.0000 5.0000 25.0000 5.0000 因此,所求系统的传递函数是32255()5255s G s s s s +=+++例1.2 考虑由以下状态空间模型描述的系统:11122211220111254011001xx u x x u y u y u ⎡⎤⎡⎤⎡⎤⎡⎤⎡⎤=+⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥--⎣⎦⎣⎦⎣⎦⎣⎦⎣⎦⎡⎤⎡⎤⎡⎤=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦求其传递函数矩阵。
解 这是一个2输入2输出系统。
描述该系统的传递函数是一个22⨯维矩阵,它包括4个传递函数:11122122()()()()()()()()Y s U s Y s U s Y s U s Y s U s ⎡⎤⎢⎥⎣⎦当考虑输入1u 时,可设2u 为零,反之亦然。
执行以下的m-文件:A=[0 1;-25 –4]; B=[1 1;0 1]; C=[1 0;0 1]; D=[0 0;0 0];[num1,den1]=ss2tf(A,B,C,D,1) [num2,den2]=ss2tf(A,B,C,D,2) 得到:num1=0 1 4 0 0 -25den1=1 4 25num2=0 1.0000 5.0000 0 1.0000 -25.0000den2=1 4 25因此,所求的4个传递函数是122211122222()()425,()425()425()()525,()425()425Y s Y s s U s s s U s s s Y s Y s s s U s s s U s s s +-==+++++-==++++例1.3 试给出以下传递函数的状态空间实现321010()6510s G s s s s +=+++解 执行以下的m-文件:num=[0 0 10 10]; den=[1 6 5 10];[A,B,C,D]=tf2ss(num,den) 得到A=-6 -5 -10 1 0 0 0 1 0B=1 0 0 C=0 10 10 D=因此,所考虑传递函数的一个状态空间实现是[]112233123651011000010001010xx x x u x x x y x x ---⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=+⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦⎣⎦⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦二、离散系统 (1)传递函数模型11101110()m m m m nn n n b zb zb z b H z a z a za z a ----++++=++++(2)零极点增益模型1212()()()()()()()m n z z z z z z H z kz p z p z p ---=---(3)状态空间模型(1)()()()()()x k Ax k Bu k y k C x k D u k +=+=+三、三种模型间的转换表示状态空间模型和传递函数的MA TLAB 函数。
函数ss (state space 的首字母)给出了状态空间模型,其一般形式是 SYS = ss(A,B,C,D)函数tf (transfer function 的首字母)给出了传递函数,其一般形式是 G=tf(num,den)其中的num 表示传递函数中分子多项式的系数向量(单输入单输出系统),den 表示传递函数中分母多项式的系数向量。
(1)传递函数模型与状态空间模型间的转换:函数tf2ss 给出了传递函数的一个状态空间实现,其一般形式是[A,B,C,D]=tf2ss(num,den)函数ss2tf 给出了状态空间模型所描述系统的传递函数,其一般形式是[num,den]=ss2tf(A,B,C,D,iu)其中对多输入系统,必须确定iu 的值。
例如,若系统有三个输入和,则iu 必须是1、2或3,其中1表示1u ,2表示2u ,3表示3u 。
该函数的结果是第iu 个输入到所有输出的传递函数。
(2)传递函数模型与零极点模型间的转换:函数tf2zp 将传递函数模型转换为零极点模型,其一般形式是[z, p, k]=tf2zp(num,den)函数zp2tf 将零极点模型转换为传递函数模型,其一般形式是[num,den]=zp2tf(z, p, k)(3)零极点模型与状态空间模型间的转换:函数tf2zp 将零极点模型转换为状态空间模型,其一般形式是[A,B,C,D]=zp2ss(z, p, k)函数zp2tf 将状态空间模型转换为零极点模型,其一般形式是[z, p, k]=ss2zp(A,B,C,D,iu)四、系统建模与模型联结(1)并联将两个系统按并联方式连接,用parallel 函数实现 格式:[a,b,c,d]=parallel(a1,b1,c1,d1,a2,b2,c2,d2) [a,b,c,d]=parallel(a1,b1,c1,d1,inp1,inp2,out1,out2) [a,b,c,d]=parallel(num1,den1,num2,den2)例1.4 两子系统为1223()424()23g s s s g s s s =++=++将两者作并联连接 输入num1=3; den1=[1,4]; num2=[2,4]; den2=[1,2,3];[num,den]=parallel[num1,den1,num2,den2] 得到num=0 5 18 25den=1 6 11 12; 因此2123251825()()()61112s s g s g s g s s s s ++=+=+++(2)串联将两个系统按串联方式连接,用series 函数实现 (3)闭环将系统通过正负反馈连接成闭环系统,用cloop 函数实现 (4)反馈将两个系统按反馈方式连接成闭环系统,用feedback 函数实现 (5)利用函数sppend 构造增广系统;(6)函数blkbuild 和connect 得到多个子系统任意联结构成的系统。
实验步骤:1、根据所给系统的已知条件,如传递函数、零极点模型或(A 、B 、C 、D ),实现状态空间模型、传递函数模型、零极点增益模型之间的转换,采用MA TLAB 的相关函数编写m-文件。
2、应用系统建模工具,并联、串联、闭环、反馈等函数解决实际问题。
3、在MA TLAB 界面下调试程序。
实验要求:1.在运行以上例程序的基础上,应用MA TLAB 求下面传递函数阵的状态空间实现232252()234s s s G s s s s +⎡⎤⎢⎥++⎣⎦=+++ 提示:num =[0 0 1 2;0 1 5 3]2.一个双输入双输出系统112233412311022711353xx xx u x x -⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=+⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦⎣⎦11223120011x y x y x ⎡⎤⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎣⎦求出此模型的能控标准型和能观标准型。
提示:写出两个子系统的传递函数模型,进而求出这两个传递函数模型的能控标准型实现或能观标准型实现,讨论是否能通过子系统的能控标准型实现或能观标准型实现求出原来系统的能控标准型和能观标准型。
2008年12月11日 星期四 下午 05:09今天终于把matlab 数学实验这本书的基础部分看完了。
从中可以看出,很多都是通过矩阵解出的。
学习它,需要知道微积分,数值分析,这个是基础的。
当学到符号函数的时候,非常高兴,因为在我看来,这可以给出准确完整的结果。
但是,符号解法并不是matlab 的长项,maple 在这方面是厉害的。
在控制原理中,例如求零点、极点,求状态方程,传递函数,能观能控判别,matlab 都已经有相关的函数解决,很是方便,不必麻烦再去编程了。
下面收集了一些matlab 小技巧。
1. Ctrl+C 中断正在执行的操作2. figure 命令新建一个绘图窗口 figure 可以打开一个空的绘图窗口,接下的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口。
当有多个figure 窗口时,在命令窗口中执行如Plot 等命令将覆盖当前figure 窗口中的对象。
所谓的当前figure窗口,也就是最后一次查看的窗口(可以用命令gcf得到)。
figure(N),将编号为N的窗口置为当前figure,出现在所有窗口的最前面,如果该窗口不存在,则新建一个编号为N的空白figure。
3. 注释掉一段程序:%{、%}。
经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。