【matlab】状态空间模型与传递函数模型的建立与转换

SISO系统

线性定常连续系统一般以常系数线性常微分方程来描述。对于一个SISO线性定常连续系统,其常微分方程描述为:

对应的经拉氏变换得到的传递函数模型为

在Matlab中,多项式a_0s^n+a_1s^{n-1}...+a_n常用数组表达,如n阶多项式可用n+1个元素的数组表达为[aa1  …  an],其中,数组元素按多项式中“s”的降幂顺序排列,其中的“0”不能省略。因此传递函数的分子与分母多项式可以用2个数组表达

num=[bb1  …  bn]

den=[aa1  …  an]

在Matlab中,传递函数模型变量的数据结构为‘tf’类,可采用函数命令tf()来描述分子和分母多项式的数组组合,建立控制系统的传递函数模型。
tf()函数命令的主要调用格式为
                       sys=tf(num,den)或直接为sys=tf([bb1  …  bn], [aa1  …  an])
经过上述命令,变量sys即表示上述连续系统传递函数模型。类似地,对于SISO线性定常离散系统,其高阶差分方程模型和z域传递函数模型分别为

建立Matlab的离散定常系统传递函数模型可采用函数命令tf(),其建立离散系统传递函数的语句为:
num=[b0  b1  …  bn]

den=[a0  a1  …  an]

sys=tf(num, den, Ts)
或直接为:
sys=tf([b0  b1  …  bn], [a0  a1  …  an] , Ts)
其中,Ts为采样周期的值。当Ts=-1或者Ts=[]时,则系统的采样周期未定义。经过上述命令,变量sys即表示上述离散系统传递函数模型。
eg:

num_1=[1 2 1];
den_1=[1 5 6];
sys_1=tf(num_1,den_1,-1)

MIMO系统

MIMO线性定常连续系统的传递函数阵G(s)可以表示为

其中,Gij(s)=nij(s)/dij(s)描述了第i个输出与第j个输入之间的动态传递关系,nij(s)和dij(s)分别为其分子与分母多项式.
eg:

num={[1 2 1] [1 5]; [2 3] [6]};

den={[1 5 6] [1 2]; [1 6 11 6] [2 7]};

sys_1=tf(num,den)

状态空间模型

线性定常连续系统的状态空间模型为

ss()函数的主要调用格式为:
sys=ss(A,B,C,D)
式中,A,B,C,D为已经赋值的适宜维数的数组(矩阵)。
若输入的矩阵维数不匹配,ss()函数将显示出错信息,指出系统矩阵维数不匹配。对线性定常离散系统S(G,H,C,D),则用函数ss()来建立状态空间模型的调用格式为:

sys=ss(G,H,C,D,Ts)

式中,Ts为输入的采样周期,与建立离散系统传递函数的Matlab函数tf()的格式一致。

eg:

A_2=[0 1; -2 -3];
B_2=[0; 1];  C_2=[1 0];  
D_2=0;
sys_2=ss(A_2,B_2,C_2,D_2) 

状态空间模型到传递函数模型的转换

由状态空间模型求解传递函数模型问题的调用格式为:

连续系统: con_tf=tf(con_ss)

离散系统: dis_tf=tf(dis_ss)

传递函数模型到状态空间模型的转换

(1) 转换函数ss()

连续系统: con_ss=ss(con_tf)

离散系统: dis_ss=ss(dis_tf)

(2) 规范形转换函数canon()
Matlab提供的规范形转换函数canon()可以将传递函数模型转换得到状态空间的模态规范形,即对角规范形,其调用格式为:

连续系统: con_ss=canon (con_tf, 'modal')

离散系统: dis_ss=canon (dis_tf, 'modal')

(3) 常微分方程(传递函数)转换为状态空间模型函数dif2ss()  
函数dif2ss()的主要调用格式为:
sys_ss=dif2ss (sys_tf,type)
sys_ss=dif2ss (sys_num, sys_den,type)
eg:
num_1=[2 14 24];  den_1=[1 5 8 4];
sys_1=tf(num_1,den_1);
sys_comp=dif2ss(sys_1,'companion')
sys_jord=dif2ss(num_1,den_1,'jordan') 

状态空间模型的变换

Matlab提供在给定变换矩阵下,计算状态空间模型变换的可直接调用函数ss2ss(),其调用格式为:
sysT = ss2ss(sys,T)
其中,sys和sysT分别为变换前与变换后(输入与输出)的状态空间模型变量;T为给定的变换矩阵。
eg:
A=[0 1 0; 0 0 1; -6 -11 -6];
B=[0; 0; 6];  C=[1 0 0];  D=0;
P=[1 1 1; -1 -2 -3; 1 4 9];
sys_in=ss(A,B,C,D);
sys_out=ss2ss(sys_in,inv(P)) 

 特征值、特征向量与广义特征向量的计算

Matlab提供直接计算特征值和特征向量的函数为eig(),其调用格式为:

d = eig(A)

[V,D] = eig(A)

Matlab的函数eig()不能直接计算广义特征向量,要计算广义特征向量则需要符号计算工具箱的函数jordan(),其调用格式为

J = jordan(A)

[V,J] = jordan(A)

eg:

A=[0 1 0; 0 0 1; -4 -8 -5];
B=[0; 0; 1];  C=[1 0 0];  D=0;
sys_in=ss(A,B,C,D);
[P,J]=jordan(A);
sys_out=ss2ss(sys_in,inv(P)) 

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值