返回首页

matlab控制系统建模基础教程

时间:2012-10-31 21:43来源:知行网www.zhixing123.cn 编辑:麦田守望者

包括:数字仿真算法、微分方程模型、传递函数模型、状态方程模型、模型转换、控制系统建模。

6.1 控制系统的数学描述

6.1.1 数学仿真算法 改进的欧拉法 龙格—库塔法

1、改进的欧拉法

(1) 数学含义:对于一阶微分方程

假定y(0)=y0已给定,可求得t0处y(t0)的切线斜率f(t0,y0)和t1处的y(t1) 切线斜率f(t1,y1),则改进的欧拉公式为:

其中:

(2)函数表达

[调用格式] [T Y]=ode23(oedfun ,tspan ,y0)

[T Y]=ode23(oedfun ,tspan ,y0 , options)

[T Y]=ode23(oedfun ,tspan ,y0 ,options, p1 , p2, …)

使用改进欧拉法实现对微分方程求解。 Odefun 输入函数

Tspan 时间间隔 y0初始矢量

options 可选的odeset函数 p1 p2 可选参数

2、四阶龙格—库塔法

(1)数学含义

对于一阶微分方程

在tn-tn+1区间内,取不同的ti(i=1,…4)所对应的f(xi,yi)求加权平均值,作为该区间的斜率,则四阶龙格—库塔法公式:

(2)函数表达

[调用格式] [T Y]=ode45(oedfun ,tspan ,y0)

[T Y]=ode45(oedfun ,tspan ,y0 , options)

[T Y]=ode45(oedfun ,tspan ,y0 ,options, p1 , p2, …)

Odefun 输入函数

Tspan 时间间隔 y0初始矢量

options 可选的odeset函数 p1 p2 可选参数

6.1.2 微分方程模型

1、方法描述

微分方程模型是数学模型的一种主要形式。当采用一阶微分方程的数值积分法进行数值计算时,应该把高阶微分方程变换成n个一阶微分方程形式。对于微分方程而言,除了少数可以得到解析解外,大多数只能采用数值解法。

2、例:在RC低通滤波器电路中,电阻R=5,理想电压源Vi=20V,电容=70uf。分析在电路元件电容的时域特性。

分析:电容电压与电流关系:

根据基尔霍夫定律,得出微分方程:

利用ode函数时,必须对微分方程做以下假设:

function dy=cir1(t,y)

vi=20;

r=5;

c=70e-06;

dy=zeros(1,1);

dy(1)=(vi-y(1))/(r*c);

[t y]=ode23(@cir1,[0 0.006],[0]);

plot(t,y(:,1));

title('vc-time');

xlabel('time(sec)');ylabel('vc(v)');

6.1.3 传递函数模型 (拉普拉斯变换与反变换)

1、范例分析:对传递函数做幅频和相频曲线。

clf;

num=[0 0 1 1];%分子系数

den=[3 4 5 6];%分母系数

[h w]=freqs(num,den);%频率响应

amp=abs(h);%幅值

subplot(2,1,1);semilogx(w,amp); title('amp');%幅频曲线

ang=angle(h);%相角

subplot(2,1,2);semilogx(w,ang); title('angle');%相频曲线

2、 传递函数的零点、极点、增益

(1) 方法描述

传递函数形式

转换为零点、极点、增益的形式:

其中,z为系统的零点 p极点 k增益

判断系统是否稳定:极点有一个的实部是正数---系统不稳定

(所有极点实部都是负数---系统稳定)

[调用格式] [z p k]=tf2zp(num ,den)

num传递函数分子系数矢量 den 传递函数分母系数矢量

(2) 范例分析

例1、 根据传递函数求解零点、极点、增益,并判断系统是否稳定。

num=[2 3 4];

den=[3 4 5 6 7 8 9];

[z p k]=tf2zp(num,den);

例2、根据传递函数求解零点、极点、增益,做幅频和相频曲线。

num=[0 0 0 0 2 3 4];

den=[3 4 5 6 7 8 9];

[z p k]=tf2zp(num,den);

[h,w]=freqs(num,den);

amp=abs(h);

subplot(2,1,1);semilogx(w,amp);

title('amp-freq');xlabel('freq(rad)');ylabel('amp');

ang=angle(h);

subplot(2,1,2);semilogx(w,ang);

title('ang-freq');xlabel('freq(rad)');ylabel('ang');

3、 根据零点、增益、极点求传递函数

[调用格式] [num den]=zp2tf(z ,p, k)

例:根据零点、增益、极点求传递函数

k=2;z=[-1 -2]';p=[-2+i*3 -2-i*3 -4 -5]';%zp转置必须用

[num den]=zp2tf(z,p,k);

4、 绘制零点、极点图

[调用格式] zplane(z,p)

zplane(num,den)

在零点、极点图中,极点用x表示,零点用o表示。

例:根据传递函数绘制零点、极点图。

num=[0 0 0 1 4 3 ];

den=[1 18 132 498 971 780];

zplane(num,den);

5、 传递函数的部分分式展开

(1) 方法描述

传递函数形式为

转换为部分分式展开形式

[调用格式] [r p k]=residue(num,den)

R 部分分式留数矢量 p部分分式极点矢量

K部分分式常数矢量 num传递函数分子矢量

Den传递函数分母矢量

(2) 例:根据函数求解部分分式展开形式

num=[0 0 0 0 2 3 4];

den=[3 4 5 6 7 8 9 ];

[r p k]=residue(num,den);

6、 根据部分分式求解传递函数

[调用格式] [num den]=residue(r ,p, k)

例:根据部分分式求解传递函数

r=[1 2 3 i*2 -i*2]';%转置可加,可不加

p=[1 2 3 1+i 1-i]'; %转置可加,可不加

k=[1 1];

[num den]=residue(r,p,k)

6.1.4 状态方程模型

1、 创建状态方程

[调用格式] sys=ss(a,b,c,d)

sys状态方程系统的名称

重要提示:a矩阵的行数、列数相同,并与b矩阵的行数相同,与状态变量个数相同;

C d矩阵的行数与输出变量的个数相同,列数与输入量的个数相同;

[调用格式] [a b c d]=ssdata(sys)

Ssdata显示系统的状态矩阵

6.1.5 模型转换

1、 传递函数与状态方程模型的转换

(1) 方法描述

传递函数模型

状态方程模型

[调用格式] [a b c d]=tf2ss(num,den)

传递函数转换为状态方程模型

[num den]=ss2tf(a, b ,c ,d)

状态方程模型转换为传递函数

(3) 例:传递函数转换为状态方程

num=[0 0 1 10 31 30];den=[1 13 65 155 174 72];

[a b c d]=tf2ss(num,den)

2、 零点极点与状态方程模型的转换

(1) 方法描述

零点极点增益模型

状态方程模型

[调用格式] [a b c d]=zp2ss(z ,p,k)

零点极点转换为状态方程模型

[z p k]=ss2zp(a ,b,c,d)

状态方程模型转换为零点极点

(2) 例1:零点极点转换为状态方程模型

z=[-0.5 -1];p=[-1.5 -2 -3 -4 ];k=1.5;

[a b c d]=zp2ss(z,p,k)

例2:状态方程模型转换为零点极点

a=[-18 -129 -460 -816 -576;1 0 0 0 0;0 1 0 0 0;0 0 1 0 0;0 0 0 1 0];

b=[1 0 0 0 0 ]';

c=[0 0 1 3 2];d=0;

[z p k]=ss2zp(a ,b,c,d)

6.1.6控制系统建模

控制系统建模包括系统模型串联(series)、并联(parallel)、反馈(feedback)、添加状态变量的输出(augstate)、构造多输入输出系统(append)、构造二阶系统的数学模型(ord2)。

1、 模型串联

[调用格式] sys=series(sys1,sys2)

控制系统模型的创建函数

项目

函数

含义

传递函数模型

Sys=tf(num,den)

创建传递函数

[num den]=tfdata(sys)

显示函数模型数据信息

传递函数零点、极点、增益模型

Sys=zpk(z,p,k)

创建零点、极点、增益模型

[z p k ]=zpkdata(sys)

显示函数模型数据信息

状态方程模型

Sys=ss(a b c d)

创建状态方程模型

[a b c d]=ssdata(sys)

显示函数模型数据信息

例:实现两个传递函数模型的串联

系统一:

系统二:

num1=[0 0 1 1];den1=[1 9 26 24];

sys1=tf(num1,den1);

num2=[0 0 1 2];den2=[1 9 23 15];

sys2=tf(num2,den2);

sys=series(sys1,sys2);

[num den]=tfdata(sys);

[z p k]=zpkdata(sys);

[a b c d]=ssdata(sys);

2、模型并联

[调用格式] sys=parallel(sys1,sys2)

例:实现两个传递函数模型的并联

系统一:

系统二:

z1=[-1];p1=[-2 -3 ];k1=1;

sys1=zpk(z1,p1,k1);

z2=[-2];p2=[-1 -3 -5];k2=2;

sys2=zpk(z2,p2,k2);

sys=parallel(sys1,sys2);

[a b c d]=ssdata(sys)

[num,den]=ss2tf(a, b, c, d)

[z p k]=ss2zp(a ,b ,c, d)

3、模型反馈

[调用格式] sys=feedback(sys1,sys2)

实现两个控制系统模型负反馈互联

Sys=feedback(sys1,sys2,sign)

实现两个控制系统模型反馈互联,

sign=-1 表示负反馈互联

sign=1 表示正反馈互联

例:实现两个状态方程模型的反馈互联

系统一:

系统二:

a1=[-4 -3;1 0];b1=[1 0]';c1=[1 2];d1=0;

sys1=ss(a1,b1,c1,d1);

a2=[-4.5 -4.5 ;1 0];b2=[1 0]';c2=[1 1];d2=0;

sys2=ss(a2,b2,c2,d2);

sys=feedback(sys1,sys2);

[a b c d]=ssdata(sys);

4、添加状态变量的输出

(1)方法描述

已知状态方程模型

可以在输出中添加该状态方程的状态变量,由此得到的状态方程模型为: 其中

[调用格式] asys=augstate(sys)

Sys—输入控制系统模型 asys---添加状态变量后输出系统模型

(2)例:实现状态方程模型的添加状态变量输出

系统一:

a=[-1 -3;1 0];b=[1 0]';c=[1 2];d=0;

sys=ss(a,b,c,d);

asys=augstate(sys);

[a1 b1 c1 d1]=ssdata(asys);

5、构造多输入输出系统

(1)方法描述

已知单输入输出系统一状态模型为:

已知单输入输出系统二状态模型:

将两个单输入输出系统连接,组合成一个多输入输出系统,状态方程模型:

[调用格式] sys=append(sys1,sys2….sysn)

(2)例:实现由两个单输入输出系统组合后的多输入输出系统。

系统一:

系统二:

a1=[-1 -3;1 0];b1=[1 0]';c1=[1 2];d1=[2];

sys1=ss(a1,b1,c1,d1);

a2=[-2 -5;1 0];b2=[1 0]';c2=[1 3];d2=[3];

sys2=ss(a2,b2,c2,d2);

sys=append(sys1,sys2);

[a b c d]=ssdata(sys);

6、构造两阶系统的数学模型

(1)方法描述

固有频率和阻尼因数是控制系统的两个重要参数,利用固有频率和阻尼因数可以构造控制系统的数学模型。

<1>使用固有频率和阻尼因数构造两阶系统状态方程模型

[调用格式] [a b c d]=ord2(wn, z)

Wn—固有频率 z—阻尼因数

<2>使用固有频率和阻尼因数构造两阶系统传递函数模型

[num den]=ord2(wn, z)

<3>求解系统的固有频率和阻尼因数

[调用格式] [wn z]=damp(sys)

(2)例1:求解系统的固有频率和阻尼因数

系统一:

a=[-7 -12;1 0];b=[1 0]';c=[1 2];d=[1];

sys=ss(a,b ,c,d);

[wn z]=damp(sys);

例2:已知系统的固有频率和阻尼因数,求解状态方程和传递函数模型。(wn=3 z=0.3)

wn=3;z=0.3;

[a b c d]=ord2(wn,z);

[num den]=ord2(wn,z);

------分隔线----------------------------
标签(Tag):MATLAB Matlab技巧 Matlab实例教程 matlab源代码 matlab基础教程
------分隔线----------------------------
推荐内容
猜你感兴趣