控制工程的MATLAB实现--传递函数、时域响应
控制系统数学模型的MATLAB实现
控制系统在MATLAB中的描述
控制系统中,一般用传递函数的形式描述系统,形式如下:
在MATLAB中,用Num=[b1,b2,.....bm,bm+1]和den=[a1,a2,...,an+1]分别表示分子和分母的多项式系数,然后以下语句来来表示整个系统。
sys=tf(num,den);
其中,tf()代表传递函数的形式描述系统,也可以用零极点形式来描述,语句为
ss=zpk(sys);
传递和函数形式与零极点形式可以相互转换
[z,p,k]=tf2zp(num,den);
[num,den]=zp2tf(z,p,k);
当传递函数复杂时,应用多项式乘法函数conv()来实现
den1=[1,2,2];
den2=[2,3,3,2];
den=conv(den1,den2);
用matlab展开部分分式
用num和den分别表示G(s)分子和分母的多项式,即
num=[b1,b2,...,bm+1];
den=[a1,a2,...,an+1];
MATLAB提供函数residue用来实现部分分式展开:
[r,p,k]=residue(num,den);
r,p分别为展开后的留数及极点构成的列向量;k为余项多项式行向量。
若无重极点,MATLAB展开后的一般形式为:
若存在q个 重极点,则展开式将包含以下各项:
计算闭环函数
系统的基本连接方式有三种:串联、并联和反馈。
sys=series(sys1,sys2); %串联
sys=parallel(sys1,sys2);% 并联
sys=feedback(sys1,sys2,-1); %反馈
如果是单位反馈系统,则可使用cloop()函数,sys=cloop(sys1,-1)。
应用举例
1、使用MATLAB求下式的部分分式展开
clc;clear;close all;
num=[1,11,39,52,26];
den=[1,10,35,50,24];
[r,p,k]=residue(num,den)
运行结果如下:
展开式即为:
residue也可用于将部分分式合并
clc;clear;close all;
num=[1,11,39,52,26];
den=[1,10,35,50,24];
[r,p,k]=residue(num,den);
[num,den]=residue(r,p,k)
运行结果如下:
2、用MATLAB求传递函数
已知两个系统G1(s)=1/s和G2(s)=1/(s+2),分别求两者串联,并联时的系统传递函数,并求负反馈连接时系统的零极点增益模型。
clc;clear;close all;
num1=[1];
den1=[1,0];
num2=[1];
den2=[1,2];
[numc,denc]=series(num1,den1,num2,den2);
[numb,denb]=parallel(num1,den1,num2,den2);
[numf,denf]=feedback(num1,den1,num2,den2,-1);
[z,p,k]=tf2zp(numf,denf);
使用MATLAB进行系统时间响应分析
常用函数
MATLAB的提供了多个线性系统在特定输入下仿真的函数。
Step: [y,x]=step(sys,t)或者[y,x]=step(sys)
sys可以由tf()或者zpk()得到,t是选定的仿真时间,没有t的话,则按照自动选择的时间范围,此函数是返回结果数值,并不会直接画图。如果对数值不感兴趣,则可以直接使用以下格式
step(sys,t)或者step(sys)
pulse: impulse()和函数step()的调用格式完全一致。
任意输入下的仿真函数lsim()的调用格式稍微有不同,在调用此函数时,要给定一个输入向量u,调用格式如下:
[y,x]=lsim(sys,u,t) u的个数要与t的个数一致。
同样的,如果不想要数据,只想要图形,也可以直接使用lsim(sys,u,t)指令。
以上所说的都是连续的,吐过是离散的,则对应的函数是dimpulse, dstep, dlsim等。
时域分析常用的函数如下:
step----节约响应
impulse----脉冲响应
lsim-----对指定输入的连续输出
gensing---对lsim产生输入信号
stepfun---产生单位阶跃输入
应用实例
绘制以下传递函数的单位阶跃响应曲线、脉冲响应曲线
clc;clear;close all;
num=[0,0,50];
den=[25,2,1];
step(num,den);
grid on
clc;clear;close all;
num=[0,0,50];
den=[25,2,1];
impulse(num,den);
grid on
如果我们想做一个单位斜坡响应呢,MATLAB里没有斜坡响应的函数,我们可以用lsim函数来做
clc;clear;close all