пятница, 15 декабря 2017 г.

Maxima. Динамические системы

Для решения задач теории управления в Maxima имеется пакет coma, который содержит набор функций, упрощающих данную работу. Скачать руководство (на английском), а также сам пакет (при необходимости), можно по данной ссылке

Пакет использует ряд соглашений: параметр Лапласа всегда обозначается через s, время - t, частота - omega, если аргументом выражения является передаточная функция, то оно может обрабатывать и список функций.


Для загрузки пакета введите команду

   load(coma);

Следует иметь ввиду, что пакет, по-умолчанию, ориентирован на работу в wxMaxima. Это выражается в том, что программы будет пытаться отрисовывать графики в текущем окне. Если же вы работает в консоли или в XMaxima, есть несколько вариантов. Либо в каждой графической функции добавлять аргумент "wx = false",  либо после загрузки поменять значение параметра по-умолчанию: "coma_defaults[2]: wx = false", либо в самом файле coma.mac переписать данный параметр. Я выбрал третье. 

Начнём с передаточных функций. Сгенерировать выражение для передаточной функции на основе системы уравнений позволяет функция

   transfer_function(уравнения, переменные, вход, выход)

Например, для схемы, показанной на рисунке, система уравнений будет выглядеть следующим образом
   eqs: [x1=u-F3*y, x2=F1*x1, x3=x2-y, y=F2*x3];
Здесь x1-x3 - промежуточные переменные, u - вход, y - выход, F1-F3 - функции элементов системы. Полная передаточная функция будет иметь вид
   transfer_function(eqs, [x1,x2,x3,y], u, y);   -->  F1*F2/(F1*F2*F3+F2+1)

Передаточные функции могут быть сгенерированы автоматически с помощью 

   rantranf(n) - случайная функция порядка n,
   stable_rantranf(n) - устойчивая случайная функция не выше 6-й степени.

Другие полезные функции:

   tranftype(F(s)) - возвращает тип функции в виде строки,
   ntranfp(F(s)) - возвращает true, если все параметры являются числами,
   closed_loop(Fo(s)) - формирует передаточную функцию замкнутой системы из разомкнутой,
   open_loop(Fw(s)) - формирует передаточную функцию разомкнутой системы из замкнутой
   time_delay(T,n[,k]) - строит аппроксимацию Паде для системы порядка n с числителем порядка k для задержки T,
   sum_form(F(s),n) - приводит выражение к каноническому виду,
   product_form(F(s)[,n]) - раскладывает передаточную функцию на линейные и квадратичные составляющие. 

Параметр n фукнции sum_form() определяет, на который из коэффициентов выражение будет нормировано (числитель: 1 - первый, 2 - последний; знаменатель: 3 - первый, 4 - последний). 

Для графического представления результатов могут использоваться следующие функции:

   step_response(F(s)) - реакция на функцию Хэвисайда (ступеньку),
   bode_plot(F(s)) - параметры системы в частотной области,
   magnitude_plot(F(s)) - амплитудно-частотная характеристика,
   phase_plot(F(s)) - фазо-частотная характеристика,
   asymptotic(F(s)) - приближение характеристик системы с помощью асимптот, 
   nyquist_plot(F(s)) - диаграмма Найквиста. 

Например
   pt2lst: create_list(1/(s**2+2*d*s+1), d, [0.0001,0.1,0.2,0.3,0.4,0.5]);
   step_response(pt2lst);



Характеристики системы и параметры устойчивости могут быть определены следующими функциями.

   poles(F(s)) - список нулей знаменателя (полюсов),
   zeros(F(s)) - список нулей числителя,
   poles_and_zeros(F(s)) - график нулей и полюсов,
   root_locus(F(s,k)) - корневой годограф системы с параметром k,
   stablep(F(s)) - проверка функции на устойчивость,
   stability_limit(F(s),k) - определение пределов устойчивости относительно параметра k
   hurwitz(p(s)) - вычисление определителей Гурвица для полинома p,
   phase_margin(F(s)) - запас устойчивости по фазе,
   gain_margin(F(s)) - запас устойчивости по амплитуде. 

Для работы в пространстве состояний система должна быть представлена списком из 4-х матриц: [A,B,C,D]. Если последняя матрица нулевая, она может быть опущена. Следующие функции могут быть полезны при работе с данными матрицами.

   systemp(A,B,C[,D]), systemp(sys) - проверка корректности системы,
   transfer_function(A,B,C[,D]), transfer_function(sys) - вычисление передаточной функции системы,
   controller_canonical_form(f) - приведение матрицы состояния к канонической форме.

Конечно, здесь описаны далеко не все возможности пакета. Но и приведённого списка достаточно, чтобы показать, что в ряде случаев Maxima может стать доступным инструментом для решения задач управления.

 

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

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