2016-07-03 24 views
1

Имеются управляемые и наблюдаемые формы состояния-состояния от передаточной функции canonical. Однако, когда я пробую ss2tf от Matlab, я получаю другой результат. Какой алгоритм использует Matlab? Есть ли какая-либо документация или реализация с открытым исходным кодом?Алгоритм, лежащий в основе ss2tf в Matlab

>> a = [1 0.4 1]; 
>> b = [1 2 1]; 
>> [A,B,C,D] = tf2ss(b,a) 

A = 

    -0.4000 -1.0000 
    1.0000   0 


B = 

    1 
    0 


C = 

    1.6000   0 


D = 

    1 
+1

Вы уже пытались 'edit tf2ss' ;-)? –

ответ

2

Во-первых, чтобы иметь в виду, что государственные представительства не являются уникальными. Различные представления состояний могут привести к одному и тому же передаточному представлению (они фактически образуют класс эквивалентности вплоть до отмены полюсов/нулей).

Здесь разница в том, что и ничего более. Проверьте следующие системы: все они имеют ту же самую функцию передачи, но имеют разные матрицы C (G, H, отличающиеся от J), но Н, J находятся в канонической форме

G = ss(tf(b,a)) 
H = ss2ss(G,rot90(eye(2))) 
J = canon(H,'companion') 

и canon использования отрицательной отходящих диагоналей А матрица, вероятно, после балансировки. Также может быть ошибкой.

Как упоминается WG~ (бесстыдный штекер Я автор harold), в общем, есть гораздо более задействованные алгоритмы для преобразования, поскольку системы MIMO требуют большей осторожности. Я внедрил вариант Раздела 4.4 W.A.Wolowich, Linear Multivariable Systems (1974). Я думаю, что Matlab делает аналогичную вещь, но также и балансы (вид) реализации, которые я еще не добавил.

В целом, эти контролируемые и наблюдаемые формы не имеют должного кондиционирования из-за сопутствующей структуры. Поэтому требуется дополнительная осторожность, если что-то имеет значительный размер и серьезность.

На практике не используйте их для оценки управляемости или наблюдаемости, отличных от некоторых упражнений по учебнику. Вместо этого используйте minreal и работайте с минимальными системами.

Причина, по которой всплывает матрица компаньонов, состоит в том, что корни действительного многочлена и собственные значения матрицы сопутствующих частиц, образованные коэффициентами этого полинома, совпадают. Для некоторых исторических замечаний ознакомьтесь с этим Cleve Moler's blog post о корнях.

Для классического примера, почему это плохо обусловленная проблема here is the example from the master himself.

+0

Вы имеете в виду 'H = ss2ss (G, rot90 (eye (2)))'? – ar2015

+0

@ ar2015 Ах да, извините – percusse

+0

Я все еще должен глубоко об этом думать и, вероятно, задам вам больше вопросов. – ar2015

2

Только что проверил ss2tf, что внутренние функции вы хотели знать. Он в основном вычисляет полюсы и нули из системы состояний пространства, а затем формирует передаточную функцию. Для этого используется функция ss2zp. Полюсы легко определяются путем вычисления собственных значений матрицы состояний A. Однако на самом деле я действительно не знаю, как он вычисляет нули. Потому что функция. ltipack.sszero, который вычисляет нули государственной космической системы, составляет protected. Однако, скорее всего, он использует алгоритм, аналогичный http://www.mathworks.com/matlabcentral/fileexchange/2199-digital-control/content/sszero.m.

Вы также можете проверить https://github.com/ilayn/harold/blob/master/harold/harold.py#L2162, который использует алгоритм, описанный в http://perso.uclouvain.be/paul.vandooren/publications/MisraVV94.pdf