介绍
作为更大系统的一部分,我正在尝试创建一个多输入多输出传递函数,它只将输入链接到引线对角线上的输出*.即它在输入1和输出1,输入2和输出2等之间具有非零传递函数.
*你是否真的认为MIMO系统是一个公平的评论,我希望它采用这种格式,因为它链接到一个真正是MIMO的大型系统.
硬编码
我可以通过连接传递函数来实现这一点
tf1=tf([1 -1],[1 1]);
tf2=tf([1 2],[1 4 5]);
tf3=tf([1 2],[5 4 1]);
G=[tf1 0 0; 0 tf2 0; 0 0 tf3];
哪个工作正常,但(a)硬编码输入/输出的数量,(b)越多,输入和输出越多越可怕.
诊断功能
这个问题对于diag函数来说似乎是完美的,但似乎没有为’tf’类型定义diag
G=diag([tf1, tf2, tf3])
??? Undefined function or method 'diag' for input arguments of type 'tf'.
手动矩阵操作
我也试过手动操作矩阵(不是我真的希望它能工作)
G=zeros(3);
G(1,1)=tf1;
G(2,2)=tf2;
G(3,3)=tf3;
??? The following error occurred converting from tf to double:
Error using ==> double
Conversion to double from tf is not possible.
tf直接采用MIMO格式
tf还具有一种格式,其中所有分子和分母单独表示,并且直接创建MIMO系统.我试图以非硬编码格式使用它
numerators=diag({[1 -1], [1 2],[1 2]})
denominators=diag({[1 1], [1 4 5],[5 4 1]})
G=tf( numerators , denominators )
??? Error using ==> checkNumDenData at 19
Numerators and denominators must be specified as non empty row vectors.
这个几乎工作,不幸的是分子和分母在对角线上是空的而不是0;导致错误
题
是否可以从传输功能创建MIMO系统,而无需“硬编码”输入和输出的数量
最佳答案 我建议你尝试
realizing每个SISO作为一个状态空间系统,比如说(Ak,Bk,Ck,Dk),组装一个大的对角系统就像
A = blkdiag(A1,....)
B = blkdiag(B1,...)
C = blkdiag(C1,...)
D = diag([D1, ....])
然后使用ss2tf计算增广系统的传递函数.