【无标题】

#看到一篇关于matlab求传递函数的响应的文章,特别好,转载上来。感谢原作者。源地址如下https://zhuanlan.zhihu.com/p/441435974
控制系统数学模型的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
num=[0,0,50];
den=[25,2,1];
sys=tf(num,den);
t=0:0.01:200; %时间向量
u=t; %定义一个斜坡
lsim(sys,u,t); %调用任意输入的响应函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值