概述
包括:数字仿真算法、微分方程模型、传递函数模型、状态方程模型、模型转换、控制系统建模。
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);
最后
以上就是漂亮老虎为你收集整理的matlab控制系统建模,matlab控制系统建模基础教程的全部内容,希望文章能够帮你解决matlab控制系统建模,matlab控制系统建模基础教程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复