2013-11-29 1 views
2

Я хочу определить линеаризованную передаточную функцию от нелинейной системы, сделанной в Simulink. Я могу видеть, что это должно быть возможно использовать функцию linmod в Matlab, но когда я пытаюсь этоMatlab: Линеаризация модели Simulink и линеаризованная функция передачи?

[num,den]=linmod('sys') 

Я не получаю числитель и знаменатель, но вместо того, чтобы пространство состояний матрицы и т.д. Может кто-нибудь помочь?

ответ

2

Попробуйте функцию balred вместо: documentation

rsys = balred(sys,ORDERS) вычисляет приближение уменьшенного порядка rsys модели LTI sys. Желаемый порядок (количество состояний) для rsys - , указанный ORDERS. Вы можете попробовать несколько заказов сразу, установив ORDERS в вектор целых чисел, и в этом случае rsys - это вектор моделей с уменьшенным порядком. baled использует неявные методы балансировки до вычисляет приближение приведенного порядка rsys.

пример:

Q = tf([1 2 3 4 5],[5 4 3 2 1]) 

Q = 

    s^4 + 2 s^3 + 3 s^2 + 4 s + 5 
    ------------------------------- 
    5 s^4 + 4 s^3 + 3 s^2 + 2 s + 1 

Q_lin = balred(Q,2) 

Q_lin = 

    3.276 s^2 - 2.06 s + 2.394 
    -------------------------- 
    s^2 - 0.2757 s + 0.4789 

balred(Q,1) 

не работает на моем примере, так как есть 2 неустойчивые столбы, но он может также работать для вашей системы ,

2

linmod всегда возвращает представление состояния пространства (см. Документацию). Используйте tf для преобразования STAE-пространство представления функции передачи:

Преобразования в передаточной функции

tfsys = tf(sys) преобразует динамическую модели системы sys в виде функции передачи. Выход tfsys - это объект tf , представляющий sys, выраженный как передаточная функция.

Кстати, если у вас есть Simulink Design Control, лучшей альтернативой является linmodlinearize.