воскресенье, 7 января 2018 г.

Octave. Вопросы динамики

Для решения проблем теории управлении в Octave существует пакет control, который, однако, не входит в базовый состав программы. Теоретически, данный пакет должен устанавливаться из рабочего окна с помощью команды (для третьей версии пакета)
   pkg install control-3.0.0.tar.gz
однако в Ubuntu мне удалось его поставить только через
   apt-get install octave-control
Перед началом использования пакета не забудьте его загрузить:
   pkg load control


Чтобы создать модель передаточой функции, можно воспользоваться tf(). При этом есть несколько возможностей. Можно определить символьную переменную и использовать её в арифметическом выражении.

   s = tf('s')
   a = 1/(1+s)

Функция также позволяет задать числитель и знаменатель передаточной функции в виде коэффициентов полиномов.

   b = tf([1],[2 1 1])

Если система имеет несколько входов и выходов, то и числитель, и знаменатель будут списками, где элемент {i,j} означает числитель (или знаменатель) функции от i-го входа к j-му выходу. Для дискретной системы следует определить переменную z и время выборки:

   z = tf('z', 0.1)
   H = 0.05/(z-0.7)

Для работы в пространстве состояний имеется функция

   ss(a,b[,c[,d]]) 

которая строит модель на основе матриц a,b,c,d. Если подать на вход ss() объект, полученный через tf(), то можно сконвертировать передаточную функцию в матрицы a,b,c,d. Обратное также справедливо. 

Для доступа к переменным объектов есть специальные методы.

   [a,b,c,d,tsam] = ssdata(sys) - доступ к матрицам и времени семплирования
   [num, den, tsam] = tfdata(sys) - доступ к числителю, знаменателю и времени семплирования
   get(sys, property) - получить требуемое значение
   set(sys, property, value) - установить требуемое значение

Для соединения элементов в случае одного входа и выхода (SISO) можно воспользоваться арифметическими операциями.

   a * b - последовательное соединение элементов
   a + b - параллельное соединение элементов

Обратную связь устанавливает следующая команда:

   feedback(sys) - единичная отрицательная обратная связь
   feedback(sys1,sys2) - система sys2 в цепи обратной связи
   feedback(sys1,sys2,'+') - положительная обратная связь

Для более сложных соединений элементов существуют специальные функции, такие как append(), connect(), series() и т.п.    

Построить характеристики системы позволяют следующие методы.

   zpmap(sys) - карта нулей и полюсов (также есть отдельно функции zero() и pole() соответственно) 
   impulse(sys) - импульсная переходная функция
   step(sys) - реакция на функцию Хэвисайда 
   bode(sys) - диаграмма Боде
   nyquist(sys) - диаграмма Найквиста
   rlocus(sys) - корневой годограф 

При необходимости, перечисленные функции могут не только построить графики, но и вернуть рассчитанные данные в виде таблицы.

С точки зрения устойчивости также могут быть полезны:

   isstable(sys) - проверка устойчивости
   [g, phi] = margin(sys) - запас устойчивости по амплитуде и фазе

И напоследок, пример графика, который может построить Octave для заданной динамической системы (в данном случае это диаграмма Боде для системы b).
 

Комментариев нет:

Отправить комментарий