简介
作为更大系统的一部分,我正在尝试创建一个多输入多输出传递函数,该函数仅将输入链接到前导对角线上的输出*。即它在输入 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 函数
这个问题对于 diag 函数来说似乎是完美的,但是 diag 似乎没有为类型 'tf' 定义
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 系统