с. Приложение С. ФУНКЦИИ И ПОДПРОГРАММЫ ПАКЕТА MATLAB

В настоящем приложении даны описания основных процедур пакета MATLAB^ ([72, 59, 81, 139]), которые применяются в задачах анализа и синтеза систем управления и используются в тексте данной книги.

Программы общего назначения

с = сопѵ(а, Ь)

CONV - вычисление свертки векторов.

С = сопѵ(А, В) находит свертку векторов А и В. Результат есть вектор размера length(A)-blength(B)-l. Если векторы А и В являются векторами коэффициентов многочленов, то свертка эквивалентна умножению многочленов.

См. также XCORR, DECONV, и C0NV2.

[х, cnt] = fmins(funfcn, х, tol, prnt)

FMINS - находит минимум функции нескольких переменных, то есть выполнят нелинейную оптимизацию.

X = fmins(’f’, хО) начинает в точке хО и вычисляет новый вектор X, при котором достигается минимум функции f(x). ’f’

-    строка, содержащая имя минимизируемой функции, обычно заданной в виде т-файла [72, 139].

X = fmins(F, X, tol) параметр tol служит для установки точности. Значение по умолчанию 10“^.

X = fmins(F, X, tol, 1) выводит краткую информацию о каждом шаге. [X, cnt] = fmins(F, X, ...) выводит также число шагов.

[xf, termcode, path] =fsolve(fvec, xO, details, fparam, jac, scale)

FSOLVE - решение системы нелинейных уравнений.

X = fsolve(’f’, ХО) начиная с точки ХО вычисляет новый вектор X, являющийся решением f(x) = 0. ’f’ - строка, содержащая имя функции, для которой следует получить решение, обычно - т-файла.

у = logspace(dl, d2, n)

LOGSPACE - создает вектор логарифмически равномерно расположенных значений.

logspace(dl, d2) создает вектор логарифмически равномерно расположенных значений в 50 точках между декадами 10* и  Если d2 = 7Г, тогда точки располагаются между 10* и

7Г. logspace(dl, d2, N) создает N значений.

См. также LINSPACE и

LTIFR - вычисление частотной характеристики линейной стационарной системы.

G = ltifr(A, Ь, s) вычисляет частотную характеристику системы

G'(s) = {sl-A)-4

для комплексных значений s. Вектор-столбец Ь должен иметь столько строк, сколько матрица А. Вычисляется матрица G, имеющая size(A) строк и length(s) столбцов.

[х, у] = meshdom(x, у)

MESHDOM - создает массивы X и Y для трехмерных графиков.

[XX, YY] = meshdom(X, У) преобразует области, заданные в X и Y в массивы XX и YY, которые могут использоваться для вычисления функций двух переменных и 3-мерной решетчатой графики.

[tout, yout] = ode45(FunFcn, tO, tfinal, yO, tol, trace)

ODE45 - интегрирование системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 4 и 5-го порядков. См. также ODE23.

[Т, Y] = ode45(’yprime’, ТО, Tfinal, Y0) интегрирует систему обыкновенных дифференциальных уравнений, описанную в т-файле YPRIME.M на интервале от ТО до Tfinal с начальными условиями Y0.

[Т, Y] = ode45(F, ТО, Tfinal, Y0, TOL, 1) использует точность TOL и выводит информацию о состоянии в процессе интегрирования.

ВХОДНЫЕ ПАРАМЕТРЫ:

F - строка содержащая имя пользовательской функции, в которой описываются решаемые уравнения. Вызов функции:

yprime = fun(t, у)

где F = ’fun’, t - время (аргумент интегрирования; скаляр), у - решение (вектор-столбец), yprime - вычисляемый вектор производных: yprime(i) =

to - начальное значение t.

tfinal - конечное значение t.

уО - вектор-столбец начальных значений.

tol - требуемый допуск. Значение по умолчанию: tol = 10“®.

trace - при ненулевом значении каждый шаг выводится на печать. По умолчанию trace = 0.

ВЫХОДНЫЕ ПАРАМЕТРЫ:

Т - полученный вектор-строка значений времени (аргумента интегрирования).

Y - полученное решение, по вектор-столбцу для каждого момента времени.

с = ро1у(х)

POLY - характеристический многочлен.

Если А - пхп-матрица, poly (А) является вектором-строкой с п-Ы элементами, являюш;имися коэффициентами характеристического многочлена det(A/„ — А). Если V - вектор, то ро1у(Ѵ) является вектором, элементы которого есть коэффициенты многочлена с заданными в V корнями. Для векторов ROOTS и POLY - взаимно обратные функции.

у = ро1уѵа1(с, х)

POLYVAL - вычисление значения полинома.

Если V - вектор, элементы которого есть коэффициенты многочлена, то ро1уѵа1(Ѵ, s) является значением полинома, вычисленным в точке s. Если S - матрица или вектор, то полином вычисляется при всех значениях S.

См. POLYVALM для вычисления матричного многочлена.

[coeffs, poles, к] = residue(u, v, к)

RESIDUE - разложение на простейшие дроби или вычисление вычетов.

[R, Р, К] = residue(B, А) вычисляет вычеты, полюса и целую часть (т.е. разложение на простейшие) отношения двух многочленов В и А:

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

[в, А] = residue(R, Р, К) преобразует представление в виде простейших дробей обратно, в В/А-форму.

г = roots(c)

ROOTS - вычисляет корни полинома.

roots(C) вычисляет корни полинома, коэффициенты которого являются элементами вектора С. Если С имеет N-Ы компоненты, полином имеет вид СіХ^ -Ь ... -Ь + C^+i-

См. также R00TS1 и POLY.

у = tablel(tab, хО)

TABLE1 - поиск по таблице.

Y = tablel(TAB, ХО) по таблице строк TAB находит линейно-интерполированное значение, обраш;аясь со значением ХО к первому столбцу TAB. Первый столбец таблицы должен быть монотонно возрастаюш;им. Если значение ХО выходит за границы первого столбца TAB. ХО может быть вектором.

См. также TABLE2.

Программы исследования систем управления

X = are(F, G, П)

ARE - Решение алгебраического уравнения Риккати

X = are(F, G, И) возвраш;ает решение (если оно имеется) алгебраического уравнения Риккати:

где матрицы G=G^ > О, Н=Н’^.

[ЛЬ, ВЬ, Cb]=balreal(A, В, С)

BALREAL - сбалансированная реализация уравнений состояния и понижение порядка модели. ^

[АЬ, ВЬ, СЬ] = Ьа1геа1(А, В, С) возвраш;ает сбалансированную реализацию уравнений состояния системы [А, В, С).

[АЬ, ВЬ, СЬ, G, Т] = Ьа1геа1(А, В, С) также возвраш;а- ет вектор G, содержаш;ий диагональные элементы грамиа- на сбалансированной реализации и матрицу Т преобразования подобия, использованную при преобразовании [А, В, С) к {АЬ, ВЬ, СЬ). Если нормализация системы выполнена успешно.

малые элементы грамиана G показывают элементы, которые могут быть исключены при понижении порядка модели.

[mag, phase] = bode(a, b, с, d, iu, w)

BODE - амплитудно и фазо-частотные характеристики (диаграммы Боде) линейной системы непрерывного времени.

[MAG, PHASE] = bode(A, В, С, D, iu, W) вычисляет частотную характеристику системы

от і-го входа при s = jlu. Вектор W должен содержать значения частот (в радианах), для которых требуется вычислить диаграммы Боде. BODE вычисляет матрицы MAG и PHASE (в градусах), число столбцов которых равно размерности выхода у, с length(W) строками.

[MAG, PHASE] = bode(NUM, DEN, W) вычисляет частотную характеристику системы, заданной передаточной функцией

где NUM и DEN содержат коэффициенты полиномов по убывающим степеням.

См. LOGSPACE для получения частот в логарифмическом масштабе.

Co=ctrb(A, В)

CTRB - формирование матрицы управляемости.

ctrb(A, В) возвращает матрицу управляемости Со = [ В, АВ, А^В, ..., А"-іВ].

[Abar, Bbar, Cbar, Т, К] = ctrbf(A, В, С)

CTRBF - треугольная форма управляемости.

[АЬаг, Bbar, Cbar, Т, К] = ctrbf(A, В, С) возвращает разбиение на подпространства управляемых и неуправляемых состояний.

[Abar, Bbar, Cbar, Т, К] = ctrbf(A, В, С, TOL) использует точность TOL.

Если матрица управляемости Со[А, В) имеет rank г < п, то имеется преобразование подобия Т такое, что

Abar = ТАГ, Bbar = ТВ, Cbar = СГ, {V = Т~^) и преобразованная система имеет вид

где пара (Ас, Вс) управляемая и Cc{sl — Ас)~^Вс =

= C{sI - А)-^В.

[Р, G] = c2d(a, Ь, t)

C2D - преобразование уравнений состояния непрерывной системы к дискретной форме.

[Р, G] = c2d(A, В, Т) преобразует систему непрерывного времени

к уравнениям состояния дискретной системы

при экстраполяторе нулевого порядка входного сигнала и интервале дискретности [выборочном интервале, sample time) Т.

[Wn, Z] = damp(A)

DAMP - собственные частоты и коэффициенты демпфирования.

[Wn, Z] = damp(A) возвращает векторы Wn и Z, содержащие собственные частоты и коэффициенты демпфирования аргумента А. Переменная А может иметь один из следующих форматов:

1)   если А квадратная, то предполагается, что это матрица ”А” уравнений состояния;

2)   если А - вектор-строка, то предполагается, что это вектор коэффициентов характеристического многочлена системы;

3)   если А - вектор-столбец, то предполагается, что это вектор корней характеристического многочлена;

Во всех случаях, DAMP возвращает собственные частоты и коэффициенты демпфирования системы.

G = dgram(A, В)

DGRAM - грамианы управляемости и наблюдаемости дискретной системы.

dgram(A, В) возвращает грамиан управляемости дискретной системы.

dgram(A’, С’) возвращает грамиан наблюдаемости дискретной системы

См. также GRAM.

[L, М, Р] = dlqe(A, G, С, Q, R)

DLQE - синтез дискретного линейного алгоритма оценивания по квадратичному критерию.

Для дискретной системы

— уравнения состояния

— уравнения измерений с моментами возмущений и шумов измерения:

функция dlqe(A, G, С, Q, R) возвращает матрицу коэффициентов L дискретного стационарного фильтра Калмана:

-    уравнение состояния

-    уравнение измерений

Фильтр Калмана вырабатывает оптимальную по линейному квадратичному критерию (ЛКК) оценку х* состояния х.

[L, М, Р] = dlqe(A, G, С, Q, R) возвращает матрицу коэффициентов передачи L, решение алгебраического уравнения Риккати М и ковариационную матрицу ошибок оценивания по результатам измерений Р = Е{{х* — х){х* — х) }.

[К, S] = dlqr(A, В, Q, R)

DLQR - синтез линейного дискретного регулятора по квадратичному критерию.

[К, S] = dlqr(A, В, Q, R) вычисляет оптимальную матрицу коэффициентов обратной связи К такую, что закон управления и = —Кх минимизирует функцию потерь J ='^ х Qx + и Ru при уравнении связи

Также возвращается установившееся решение S нрисоединен- ного дискретного матричного уравнения Риккати

X = dlyap(A, С)

DLYAP - решение дискретного уравнения Ляпунова.

X = dlyap(A, С) находит решение дискретного уравнения Ляпунова

См. также LYAP.

[АЬ, ВЬ, СЬ, ВЬ] = dmodred(A, В, С, D, ELIM)

DMODRED - понижение порядка дискретной модели.

[АЬ, ВЬ, СЬ, Db] = dmodred(A, В, С, D, ELIM) уменьшает порядок модели, пренебрегая компонентами вектора состояния, описанными в векторе ELIM. Вектор состояния разделяется на XI, который сохраняется, и Х2, который опускается,

Х2[п-Ы] приравнивается Х2[п], и полученные уравнения разрешаются относительно XI. Полученная система имеет на LENGTH(ELIM) меньшую размерность вектора состояния и может рассматриваться как система, у которой состояния ELIM изменяются мгновенно.

См. также DBALREAL, BALREAL и MODRED

[а, Ь] = d2c(phi, gamma, t)

D2C - преобразование уравнений состояния из дискретного времени в непрерывное.

[А, В] = d2c(P, С, Т) преобразует дискретную систему (С.4) к непрерывному виду уравнений состояния (С.З) при экстраполяторе нулевого порядка входного сигнала и интервале дискретности Т.

[mag, phase] = dbode(a, Ь, с, d, iu, w)

DBODE - амплитудно- и фазо-частотные характеристики (диаграммы Боде) линейной системы дискретного времени.

[MAG, PHASE] = dbode(A, B, C, D, iu, W) вычисляет частотную характеристику системы (C.l) от і-го входа нри 2 = Вектор W должен содержать значения частот (в радианах), для которых требуется вычислить диаграммы Боде. Обычно ш < тт. DBODE вычисляет матрицы MAG и PHASE (в градусах), число столбцов которых равно размерности выхода у и length(W) строк.

[MAG, PHASE] = dbode(NUM, DEN, W) вычисляет частотную характеристику системы, заданной передаточной функцией

где NUM и DEN содержат коэффициенты полиномов по убывающим степеням.

[у, х] = dimpulse(a, Ь, с, d, iu, n)

DIMPULSE - функция веса (импульсная функция) дискретной линейной системы.

Y    = dimpulse(A, В, С, D, iu, п) вычисляет реакцию системы

на одиночный пробный сигнал (5-Кропекера), приложенный к і-му входу. Целое п задает число точек, для которых следует получить функцию веса. DIMPULSE вычисляет матрицу У , число столбцов которой равно размерности выхода у и п строк.

[Y, X] = dimpulse(A, В, С, D, iu, п) также возвращает процесс изменения состояния системы.

Y    = dimpulse(NUM, DEN, п) вычисляет функцию веса по описанию системы в виде передаточной функции (С.5), где NUM , DEN содержат расположенные по убыванию коэффициенты полиномов.

[у, х] = dlsim(a, Ь, с, d, и, хО)

DLSIM - моделирование дискретной линейной системы

У = dlsim(A, В, С, D, U) вычисляет реакцию системы(С.б) на входную последовательность U. Матрица U должна содержать такое количество столбцов, какова размерность входа U. Каждая строка U соответствует новому моменту времени. DLSIM формирует матрицу Y, число столбцов которой равно количеству значений выхода у и число LENGTH(U) строк.

[Y, X] = dlsim(A, В, С, D, U) также возвращает процесс изменения состояния системы.

dlsim(A, В, С, D, U, ХО) можно использовать, если заданы (ненулевые) начальные условия.

Y    = dlsim(NUM, DEN, U) вычисляет переходный процесс в линейной дискретной системе, заданной передаточной функцией (С.5), где NUM и DEN содержат расположенные по убыванию коэффициенты полиномов.

dlsim(NUM, DEN, U) эквивалентно filter(NUM, DEN, U).

[у, x] = dstep(a, b, c, d, iu, n)

DSTEP - переходная функция дискретной линейной системы.

У = dstep(A, В, С, D, iu, п) вычисляет переходную функцию системы (С.6) по і-му входу. Целое п показывает требуемое число точек (шагов). DSTEP вычисляет матрицу Y, число столбцов которой равно размерности выхода у, а число строк равно п.

[Y, X] = dstep(A, В, С, D, iu, п) также возвращает процесс изменения вектора состояния системы.

У = dstep(NUM, DEN, п) вычисляет переходный процесс по передаточной функции (С.5), где NUM и DEN содержат коэффициенты числителя и знаменателя передаточной функции, расположенные в порядке убывания степеней.

[у, х] = impulse(a, Ь, с, d, iu, t)

IMPULSE - функция веса (импульсная функция) непрерывной линейной системы.

Y    = impulse(A, В, С, D, iu, Т) вычисляет функцию веса системы (С.1) по отношению к і-му входу. Вектор Т должен содержать регулярную последовательность моментов времени, которая задает временную ось для функции веса. IMPULSE формирует матрицу Y содержащую столько столбцов, какова размерность вектора у и LENGTH(T) строк.

[У, X] = impulse(A, В, С, D, iu, Т) также возвращает процесс изменения состояния системы.

Y    = impulse(NUM, DEN, Т) вычисляет функцию веса по описанию системы в виде передаточной функции (С.2), где NUM и DEN содержат коэффициенты многочленов по убывающим степеням.

[L, P] = lqe(A, G, C, Q, R)

LQE - синтез линейного идентификатора состояния но квадратичному критерию.

Для непрерывной системы:

- уравнение состояния ,

- уравнение измерений

с ковариационными матрицами возмущений и шумов измерения:

функция

lqe(A, G, С, Q, R) возвращает матрицу коэффициентов передачи L такую, что стационарный фильтр Калмана

вырабатывает линейную, оптимальную по квадратичному критерию оценку x{t).

[L, Р] = lqe(A, G, С, Q, R) - возвращает матрицу коэффициентов передачи L и решение алгебраического уравнения Риккати Р, которое является матрицей ковариаций ошибки оценивания.

[К, S] = lqr(A, В, Q, R, N)

LQR - синтез линейного регулятора по квадратичному критерию для непрерывной системы.

[К, S] = lqr(A, В, Q, R) вычисляет оптимальную матрицу коэффициентов обратной связи К такую, что закон управления u{t) = —Kx[t) минимизирует функцию потерь

при связи x[t) = Ax[t) +

Кроме того, возвращается матрица S - решение присоединенного уравнения Риккати SA -Ь Л S' — SBR~^B S' -Ь Q = О [К, S] = lqr(A, В, Q, R, N) включает перекрестную составляющую 2х которая связывает и и х в целевой функции.

Программа осуществляет разложение но собственным векторам. Можно использовать аналогичную процедуру [К, S]

= lqr2(A, В, Q, R, N), использующую алгоритм Шура для решения алгебраического уравнения Риккати и численно более достоверна, чем LQR.

[К, S] = lqry(A, В, Q, R, N)

LQRY - синтез линейного регулятора квадратичному критерию с управлением по выходу и квадратичному критерию для непрерывных систем.

[К, S] = lqry(A, В, С, D, Q, R) вычисляет оптимальную матрицу обратной связи К такую, что закон управления u{t) =

— Ky{t) минимизирует целевую функцию

при связи

Кроме того, возвращается матрица S - решение присоединенного уравнения Риккати SA + S — SBR~^B^S + Q = О

[К, S] = lqry(A, В, Q, R, N) включает перекрестную составляющую 2у которая связывает и и у в целевой функции.

[у, х] = lsim(a, Ь, с, d, и, t, хО)

LSIM - моделирование линейной системы непрерывного времени при произвольном входе.

lsim(A, В, С, D, и, Т) вычисляет и выводит реакцию системы (С.1) на входной процесс U. Матрица U должна иметь число столбцов, совпадающее с размерностью вектора входа U. Каждая строка U соответствует новому моменту времени, и и должна иметь length(T) строк.

Y=lsim(A, В, С, D, и, Т) вычисляет (без вывода) матрицу Y, число столбцов которой равно размерности выхода у и length(T) строк.

[Y, X] = lsim(A, В, С, D, U, Т) также возвращает процесс изменения состояния системы.

lsim(A, В, С, D, и, Т, ХО) можно использовать, если заданы ненулевые начальные условия.

lsim(NUM, DEN, U, T) выводит реакцию системы по заданной передаточной функции (С.2), где NUM и DEN содержат коэффициенты многочленов по убывающим степеням.

X = 1уар(А, В, С)

LYAP - решение уравнения Ляпунова.

X = 1уар(А, С) находит решение матричного уравнения Ляпунова

X = 1уар(А, В, С) находит решение обобщенного матричного уравнения Ляпунова АХ + ХВ = —С.

См. также DLYAP.

[Gm, Pm, Wcg, Wcp] = margin(mag, phase, w)

MARGIN - вычисление запасов устойчивости по усилению и по фазе и соответствующих частот пересечения.

[Cm, Pm, Wcg, Wcp] = margin(MAG, PHASE, W) вычисляет запас устойчивости по усилению Cm, по фазе Pm и соответствующие частоты Wcg и Wcp по заданным векторам АЧХ (диаграмме Боде), ФЧХ и частоты MAG, PHASE, W для рассматриваемой системы. Производится интерполяция между значениями по частоте для определения точных значений.

[Ат, Вт, Cm, Dm] = minreal(A, В, С, D, TOL)

MINREAL - минимальная реализация и сокрщение нулей и полюсов.

[Ат, Вт, Cm, Dm] = minreal(A, В, С, D) возвращает ми- нимальую реализацию по уравнениям состояния системы (А,

В, С, D). Выводится сообщение о количестве исключенных компонент вектора состояния.

[Ат, Вт, Cm, Dm] = minreal(A, В, С, D, TOL) использует точность TOL при определении переменных состояния, которые исключаются.

[Zm, Pm] = minreal(Z, Р), где Z и Р - вектор-столбцы, содержащие нули и полюса, исключает общие корни, принадлежащие полю точностью TOL = 10*SQRT(EPS)*ABS(Z(i)).

[Zm, Pm] = minreal(Z, P, TOL) использует точность TOL.

Для передаточных функций

[NUMm, DENm] = minreal(NUM, DEN), где NUM, DEN - вектор-строки коэффициентов многочленов числителя и знаменателя, MINREAL исключает общие корни.

[NUMm, DENm] = minreal(NUM, DEN, TOL) использует точность TOL.

Ob = obsv(A, C)

OBSV - формирование матрицы наблюдаемости.

obsv(A, С) возвращает матрицу наблюдаемости

[Abar, Bbar, Cbar, Т, К] = obsvf(A, В, С, TOL)

OBSVF - треугольная форма наблюдаемости.

[АЬаг, Bbar, Cbar, Т, К] = obsvf(A, В, С) возвращает разбиение на подпространства наблюдаемых и ненаблюдаемых состояний.

[Abar, Bbar, Cbar, Т, К] = obsvf(A, В, С, TOL) использует точность TOL.

Если матрица управляемости пары [А, С) имеет ранг г < п, то имеется преобразование подобия Т такое, что Abar = ТАГ, Bbar = ТВ, Cbar = СГ {Г = Т~^) и преобразованная система имеет вид

где пара (Ао,Со) наблюдаемая и Co{sI — Ао)~^Во =

= C{sI - А)-^В.

К = р1асе(А, В, Р)

PLACE - вычисление матрицы обратной связи по состоянию (решение задачи модального управления).

К = р1асе(А, В, Р) вычисляет постоянную матрицу обратной связи К такую, что собственные числа матрицы А-ВК определяются заданным вектором Р. Комплексные собственные числа в векторе Р должны представляться комплексносопряженными парами. Никакое собственное число не должно иметь кратность, превосходящую число управляющих воздействий.

Выводимое значение ’’ndigits” (п знаков) является оценкой того, насколько удачно распределены собственные значения. Оно служит оценкой того, сколько десятичных разрядов собственных чисел А-ВК удовлетворяют заданным в массиве Р значениям.

Предупреждающее сообщение появляется, если пепулевые полюса замкнутой системы на 10% превышают заданные в Р значения.

[num, den] = ss2tf(a, b, с, d, iu)

SS2TF - преобразование уравнений состояния в передаточную функцию.

[NUM, DEN] = ss2tf(A, В, С, D, iu) вычисляет передаточную функцию (С.2) или (С.5) системы (С.1), (С.6) от і-го входа. Вектор DEN содержит коэффициенты знаменателя в порядке убывания степени s. Коэффициенты числителя содержатся в матрице NUM, имеющей столько строк, какова размерность выхода у.

[у, х] = step(a, Ь, с, d, iu, t)

STEP - переходная функция линейной непрерывной системы.

Y    = step(A, В, С, D, iu, Т) вычисляет переходную функцию системы (С.1) на входное ступенчатое воздействие к і- му входу. Вектор Т должен иметь регулярные значения по временной оси. STEP вычисляет матрицу Y, имеющую столько столбцов, какова размерность выходного вектора у и length(T) строк.

[Y, X] = step(A, В, С, D, iu, Т) также возвращает процесс изменения состояния системы.

У = step(NUM, DEN, Т) вычисляет переходный процесс по описанию системы передаточной функцией (С.2), где NUM и DEN содержат коэффициенты многочленов по убывающим степеням.

[а, Ь, с, d] = tf2ss(num, den)

TF2SS - преобразование передаточной функции к уравнениям состояния.

[А, В, С, D] = tf2ss(NUM, DEN) вычисляет уравнения состояния (С.1) или (С.6) по передаточной функции (С.2), (С.5) для системы с одним (скалярным) входом. Вектор DEN должен содержать коэффициенты знаменателя в порядке убывания степени s. Коэффициенты числителя должны содержатся в матрице NUM, имеющей столько строк, какова размерность выхода у. Уравнения состояния получаются в управляемой канонической форме. Для дискретных систем матрица числителя должна быть дополнена нулевыми элементами до совпадения степеней числителя и знаменателя.

Примеры подпрограмм преобразования моделей

Программа ss2df преобразования уравнений состояния к вещественной диагональной форме

function [Ad,Bd,Cd,T]=ss2df(A,B,C)

[n,m]=size(A)

[v,p]=eig(A)

k=l;

P=[ ];

while k<=n, if all(imag(v(:,k)) ==0)

P = [P v(:,k)]; k=k+l; else

P = [P, l/2*(v(:,k)+v(:,k+l)),... l/2/j*(v(:,k)-v(:,k+l))]; k=k+2; end end

T=inv(P);

Ad=T*A*P;

Bd=T*B;

Cd=C*P;

Программа tf2cf приведения передаточной функции к УКП

для SIMO-систем

function [A,B,C,D]=tf2cf(num,den) n=length(den)-l;

[l,r]=size(num); if (r>n+l) — (den(l) ==0)

еггог(’Степень знаменателя должна быть не ниже степени числителя.’) end

dn=den/den(l);

nm=[zeros(l,n-r+l),num/den(l)];

A=[zeros(n-l,l) eye(n-l,n-l); -dn(n+l:-l:2)];

B = [zeros(n-l,l); 1];

C=nm(:,r:-l:2)-nm(:,l)*dn(r:-l:2);

D(:,l)=nm(:,l);

Программа tf2of приведения передаточной функции к НКП

для MISO-систем

function [A,B,C,D]=tf2of(num,den) n=length(den)-l;

[m,r]=size(num); if (r>n+l) — (den(l) ==0)

еггог(’Степень знаменателя должна быть не ниже степени числителя.’) end

dn=den/den(l);

nm=[zeros(m,n-r+l),num/den(l)];

A=[zeros(n-l,l) eye(n-l,n-l); -dn(n+l:-l:2)];

C = [l, zeros(l,n-l)];

D(l,:)=nm(:,l)’;

nm=nm-nm(:,l)*dn;

B(l,:)=nm(:,2)’; for k=2:n sm=0; for l=l:k-l

sm=sm+B(l,:)*dn(k-l+l);

end

B(k,:)=nm(:,k+l)’-sm;

end