Введение
В рамках более крупной системы я пытаюсь создать передаточную функцию с несколькими входами и несколькими выходами, которая связывает входы и выходы только на главной диагонали*. т.е. он имеет ненулевые передаточные функции между входом 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];
Это прекрасно работает, но (а) жестко кодирует количество входов/выходов и (б) становится все более ужасным, чем больше входов и выходов у вас есть.
Функция 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 из передаточных функций без "жесткого кодирования" количества входов и выходов