自动控制常见MATLAB函数的应用

更新时间:2023-12-29 10:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

自动控制常见MATLAB函数的应用

1、 在matlab中采用roots函数求解多项式的根,采用conv函数实

现多项式的积,相互连接的模块的模型求解也相当简单(1)、串联连接命令G=G1*G2(2)、并联连接命令G=G1±G2(3)、反馈连接命令G=feedback(G1,G2,Sign)(sign用来表示系统是正反馈或负反馈,sign=-1为负反馈) 例如:① 程序如下: >> p=[1 3 0 4]; >> roots(p) ans =

-3.3553 0.1777 + 1.0773i 0.1777 - 1.0773i ②、用matlab实现: 程序如下: >> p=[3 2 1];q=[1 4]; >> n=conv(p,q) n =

3 14 9 4 ③、一个传递函数模型, s)?G(可以由下面的命令输入:

p(s)?s?3s?432n(s)?(3s?2s?1)(s?4)2s?5s3?3s2?4s?5>> num=[1 5];den=[1 3 4 5]; >> G=tf(num,den)

Transfer function: s + 5 --------------------- s^3 + 3 s^2 + 4 s + 5

④、如下图所示,前向传递函数为G(S),反馈回路传递函数为H(S),利用feedback计算系统的闭环传递函数

程序如下:

>> numg=[1];deng=[500 0 0]; >> numh=[1 1];denh=[1 2];

>> [num,den]=feedback(numg,deng,numb,denh,-1);

>> [num,den]=feedback(numg,deng,numh,denh,-1); >> G=tf(num,den)

H(S)?1R(S)E(S)C(S)?????????G(S)?????2?500SS?1S?2 Transfer function: s + 2 -------------------------- 500 s^3 + 1000 s^2 + s + 1

2、在matlab中,可以轻松的求解系统的所有极点,从而判断其稳定性

例子:系统的传递函数为: G(S)?

用matlab判断其稳定性,程序如下: >> num=[1,7,24,24]; >> den=[1:9]; >> roots(den) ans =

-1.2888 + 0.4477i -1.2888 - 0.4477i -0.7244 + 1.1370i -0.7244 - 1.1370i 0.1364 + 1.3050i 0.1364 - 1.3050i 0.8767 + 0.8814i 0.8767 - 0.8814i

可见4个极点带有正实部,所以系统不稳定

S?7S?24S?24S?2S?3S?4S?6S?7S?8S?9876532323、 MATLAB中给出了一个函数step()直接求取线性系统的阶跃

响应,该函数的调用方式如下:y=step(G, t)(G为系统的传递函数,t为要计算的点到所在时刻的值组成的时间向量,t一般可以由t=0:dt:t_end等步长地产生,t-end为终值时间,而dt为步长;y为系统的输出量) 例子:系统的传递函数为:

G(S)?SS43?7S32?24S?242?10S?35S?50S?24线性系统的稳态值可以通过dcgain()来求得,impulse()函数可以求出系统的脉冲响应

程序如下:>> num=[1,7,24,24];den=[1,10,35,50,24]; >> G=tf(num,den); >> t=0:0.1:10; >> y=step(G,t); >> plot(t,y) >> Y=dcgain(G) Y = 1 >> hold on >> y1=impulse(G,t); >> plot(t,y1)

例子:控制精度

ka变化时,系统的闭环传递函数为:

5000Kas?1020s?20000s?5000ka32 ?(s)?kaG1(S)G2(S)?1?kaG1(S)G2(S)应用如下MATLAB语言,可得到

ka=10、 ka=40、k a=80时

的系统响应。可见,当 80时,系统响应速度明显加快,但出k a ?现振荡 程序如下: >> ka=80;

>> nf=[5000];df=[1 1000]; >> ng=[1];dg=[1 200];

>> [num,den]=series(ka*nf,df,ng,dg); >> [n,d]=cloop(num,den); >> t=[0:0.01:2]; >> y=step(n,d,t);

>> plot(t,y,'black'),grid on

4、 用matlab绘制根轨迹

MTLAB中提供了rlocus()函数,用来绘制给定的根轨迹,该函数

R= rlocus(G, K) 的调用方式为:(G为系统的模型,

输入变量k为用户自己选择的增益,返回的变量R为根轨迹各点构成的复数矩阵)如果k值不给定,则该函数自动选择k,在这种情况下

[R,K]?rlocus(G)

这样产生的k值可以用来确定闭环系统稳定的增益范围

如果在函数调用中不返回任何参数,则将在图形窗口中自动绘制系统根轨迹曲线

Rlocus(G) Rlocufind()函数允许用户求取根轨迹上指定点处的开环增益,并将该增益下的所有的闭环极点显示出来:

[K P]=rlocufind(G) 例子:闭环系统的闭环传递函数为: ?(s)?特征方程可以写为: 1?Ks?1s(s?2)(s?3)K(s?1)(s?2)

s(s?2)(s?3)?K(s?1)P(s)?0?0在解题前,必须将特征方程写成下面形式: 1?KQ(s)K为所关心的参数,变化范围从0到 ?? ,绘制的根轨迹如下:

程序如下: >> num=[1 1]; >> den=[1 5 6 0]; >> G=tf(num,den); >> hold on;rlocus(G); >> [K,P]=rlocfind(G)

Select a point in the graphics window selected_point = -2.4621 + 0.0248i K = 0.4196 P =

-2.4655 + 0.0246i -2.4655 - 0.0246i

-0.0690

例子:研究系统根轨迹曲线和阶跃响应曲线之间的关心,考虑系统输出:

C(s)??(s)R(s)?K(s?1)(s?2)s(s?2)(s?3)?K(s?1)R(s)输入为单位阶跃信号时:程序如下: >> t=0:0.2:15; >> K=16.2859; >> num=K*[1 4 3]; >> den=[1 5 6+K K]; >> G=tf(num,den); >> y=step(G,t); >> plot(t,y) >> grid on

5、 在MATLAB中,使用较多的频域稳定性函数有bode函数、

nyquist函数、nichols函数、margin函数,pade函数,ngrid函数等。

MATLAB的控制系统工具箱中提供了bode()函数来求取、绘制给给定线性系统的伯德图,函数调用方式如下:

[mag,pha]=bode(G.,w)

其中G为系统的对象模型,变量w为用户制定频率点构成的向量,该函数在这些频率点上对系统进行频率分析。mag、pha对应系统的幅值和相位向量,相位的单位为角度。同时经常要将幅值向量转换成分贝形式,MATLAB命令为:

magdB=20*log10(mag) 该函数的另一种调用格式为: [mag,pha,w]=bode(G.) 这时w可以自动生成,如果在调用bode函数时不返回变量,则MATLAB自动生成系统的伯德图。一般和计算增益裕度和相角裕度的函数margin结合使用

例子:考虑系统传递函数: G(s)?s?3s(s?1)(s?2)则可以用下面的命令绘出系统的伯德图,计算出增益裕度和相角裕度,程序如下: >> w=logspace(-1,1,200); >> num=[1 3];

>> den=[conv([1 1],[1 2]),0]; >> G=tf(num,den); >> [x y w]=bode(G,w); >> margin(x,y,w)

例子:考虑系统传递函数

G(s)?0.5s?2s?s?0.532则可用下面命令绘出系统的奈氏图 >> num=[0.5]; >> den=[1 2 1 0.5];

>> [re,im]=nyquist(num,den); >> plot(re,im),grid on

本文来源:https://www.bwwdw.com/article/fwqx.html

Top