在matlab中 如何将两输入单输出的系统的状态方程变为传递函数

A=[-5.0 0 0 0 0;
0 0 1.0 0 0;
-34.7261 -1126.65 -3.44134 23.6188 0;
0 1049.69 3.125 -23.6920 0;
0 0 0 10.0 -10.0];
B=[5.0 0 0 0 0;
1 0 0 0 0]';
C=[0 0 0 0 1.0;
0 0 0.03597 0 0;
0 13269.96 100 0 0;
0 0 0 1.2231e5 0];
D=zeros(4,2);
E=[0 0 1.3338 0 0;
1 0 0 0 0]';
F=zeros(4,2)%系统的状态空间表达式
[num1,den1]=ss2tf(A1,B1,C1,D1,1);[num2,den2]=ss2tf(A1,B1,C1,D1,2);
[num3,den3]=ss2tf(A1,B2,C1,D1,1);[num4,den4]=ss2tf(A1,B2,C1,D1,2);
H1=[tf(num1(1,:),den1),tf(num2(1,:),den1);
tf(num1(2,:),den1),tf(num2(2,:),den1);
tf(num1(3,:),den1),tf(num2(3,:),den1);
tf(num1(4,:),den1),tf(num2(4,:),den1);];
H2=[tf(num3(1,:),den1),tf(num4(1,:),den1);
tf(num3(2,:),den1),tf(num4(2,:),den1);
tf(num3(3,:),den1),tf(num4(3,:),den1);
tf(num3(4,:),den1),tf(num4(4,:),den1);];
为什么这个这么复杂啊

从模型看,这并不能称为双输入单输出系统,输入u和w都是向量,而输出也是向量。对应的传递函数应该是传函矩阵,可以对ss模型直接用tf函数进行转换:

tf(ss(A,B,C,D))
tf(ss(A,E,C,F))

追问

谢谢您的回答。请看一下我的补充问题,为什么那个程序这么复杂啊

追答

两种方法都可以。

 

我的方法要用到控制系统工具箱,但更简练;你给的代码所用的ss2tf函数属于MATLAB基本系统的一部分,不需要安装控制系统工具箱,但相对繁琐。

 

可以用step、bode之类的函数查看两种方法求出的传递函数矩阵的时间响应或频率响应,还可以用norm函数求两个传函之差的范数,能看到二者基本是一致的(具体算法不同,会有很小的误差)。

追问

谢谢您的回答,我问问看这一块的MATLAB编程哪本书比较详细些?

追答

可以考虑薛定宇的《控制系统计算机辅助设计》,属于国内最早的关于MATLAB的书,现在是第3版。英语过得去的话建议直接看控制系统工具箱的文档,那是最权威的。

温馨提示:答案为网友推荐,仅供参考
相似回答