我正在尝试从我拥有的状态空间矩阵生成传递函数。 问题是矩阵有变量而不是数值,所以我必须在Matlab中使用符号变量。
所以我开始:
A =
[ -a0, 0, 0, 0, 0, 0, a1]
[ 0, -a2, 0, 0, 0, 0, a3]
[ 0, 0, -a4, 0, 0, 0, a5]
[ 0, 0, 0, -a6, 0, 0, a7]
[ 0, 0, 0, 0, -a8, 0, a9]
[ 0, 0, 0, 0, 0, -a10, a11]
[ a12, a13, a14, a15, a16, a17, -a18]
B =
[ b0, b1]
[ 0, b2]
[ 0, b3]
[ 0, b4]
[ 0, b5]
[ 0, b6]
[ 0, 0]
C =
[ 0, 0, 0, 0, 0, 0, 1]
D = 0
然后我使用
在线找到了一个方法Phi=inv(s*eye(7)-A)
Phi是转移matirx的地方。然后使用
H = C * Phi * B + D
H应该是结果。
然而,MATLAB无法处理7乘7矩阵并最终截断结果。
我有更好的方法来实现我需要的传输功能吗?
答案 0 :(得分:4)
看看这个维基百科article on matrix inversion。在考虑矩阵(Is-A)时,它具有非常特殊的形状,您可以使用该文章中给出的一些身份来反转它。你所要做的就是把它分成块,其中A是你的对角线部分,B是右边的垂直向量,C是底部的水平向量,D是矩阵右下角的单个元素。你必须这样做的唯一反转是反转A,它是对角的并且非常容易反转,并且(D-C * inv(A)* B)是单个数字,因为你的C和B分别是行和列向量。这可以通过手工或符号工具箱非常容易地完成。
答案 1 :(得分:1)
为了与B
的维度兼容,您的D
矩阵应为
D = [0 0];
可能截断H是由于这个原因?