ВВЕДЕНИЕ
МАТЛАБ (MATLAB) – система компьютерной математики, которая в настоящее время широко применяется исследователями для решения прикладных и теоретических задач на ЭВМ. Название МАТЛАБ происходит от словосочетания “матричная лаборатория" (matrix laboratory), что первоначально соответствовало основному назначению системы – матричным вычислениям. Впоследствии, с развитием системы, в неё были добавлены функции и вычислительные алгоритмы из многих других областей математики. Но основной подход к элементарным операциям, когда число рассматривается как частный случай матрицы, сохранился. В настоящее время МАТЛАБ представляет собой развитую систему, включающую в себя в качестве составных частей инструменты для решения задач из разных областей математики, таких как линейная алгебра, численные методы, динамические системы и т. д.
Пользователю предлагается несколько вариантов использования системы. Основным режимом является режим командной строки, при котором команды, набираемые пользователем на клавиатуре в ответ на приглашение системы, выполняются в диалоговом режиме с немедленной выдачей результата. В этом режиме легко получить решение таких задач, как вычисление определителей, обращение и перемножение матриц, решение систем линейных алгебраических уравнений и др. Для выполнения этих и других операций необходимо вызвать соответствующую функцию системы, передав ей входные параметры и, возможно, сохранить результат для последующего использования.
Ядро МАТЛАБ содержит более тысячи функций. Помимо них доступно большое количество внешних функций, описанных в расширениях системы. В добавление к ним пользователь может создавать свои собственные функции, используя для этого специально предусмотренный язык программирования. Таким образом, МАТЛАБ является расширяемой системой, и это одно из важных её достоинств.
Помимо режима командной строки, являющегося основным режимом работы, некоторые расширения МАТЛАБ предлагают собственные диалоговые средства. Примером такого расширения является PDE Tool – графический интерфейс, предназначенный для решения дифференциальных уравнений в частных производных. Помимо функций, доступных из командной строки, он также предоставляет пользователю графическую среду, работающую в отдельном окне.
Выше упоминалось о том, что в МАТЛАБ имеется язык программирования. С его помощью можно создавать и реализовывать собственные алгоритмы, используя все доступные функции системы и все основные приёмы программирования, имеющиеся в других языках, такие как подпрограммы, циклы, ветвления, рекурсии и другие. Запись алгоритма на языке программирования МАТЛАБ сохраняется в файле в текстовом формате, либо в специальном внутреннем представлении.
МАТЛАБ обладает развитой графикой. Графическая подсистема МАТЛАБ является объектно-ориентированной. Графики выводятся на экран в отдельных окнах, причём как сами окна, так и составные части графиков (оси, разметка, надписи, линии) являются элементами иерархического дерева объектов.
Для построения графиков в МАТЛАБ имеется большой набор функций, позволяющих создавать множество различных типов двумерных и трёхмерных графиков, диаграмм, гистограмм и т. д., причём элементами графического окна можно управлять программно.
Как графические объекты рассматриваются также такие элементы, как кнопки, текстовые надписи, поля ввода, полосы прокрутки и т. п. Свойства и методы этих объектов доступны пользователю, что даёт возможность создавать в МАТЛАБ Windows-приложения. Для проектирования форм имеется редактор, вызываемый по команде GUIDE.
Вдобавок к развитым графическим средствам МАТЛАБ в качестве одного из своих расширений предоставляет пользователю Virtual Reality Toolbox - пакет для разработки и отображения сцен виртуальной реальности, для которых доступны средства анимации. Это позволяет не только моделировать динамические процессы в Simulink (Simulink – расширение МАТЛАБ, предназначенное для моделирования динамических процессов), но и, подключив потоки выходных данных к входам спроектированной пользователем виртуальной сцены, наблюдать на мониторе анимированную динамику процесса.
Современные версии МАТЛАБ имеют развитые средства интеграции с другими языками программирования. Непосредственно из МАТЛАБ-программы можно создавать и использовать объекты Java; для написания S-функций (системных функций МАТЛАБ-Simulink) можно использовать языки высокого уровня C, C++, Ada, Fortran; кроме того функции системы МАТЛАБ можно экспортировать в dll и вызывать из других программ. Также можно использовать вычислительные возможности системы, передавая запросы удалённому компьютеру по сети.
МАТЛАБ поддерживает некоторые виды символьных вычислений. Среди них арифметические операции над числами с произвольным количеством разрядов, преобразование выражений, символьное дифференцирование, аналитическое вычисление пределов, интегралов, вычисление сумм рядов.
В МАТЛАБ реализованы численные методы решения ряда вычислительных задач, таких как нахождение корней полиномов, решение задачи Коши для систем ОДУ, вычисление определённого интеграла, решение нелинейных уравнений.
Список возможностей МАТЛАБ не ограничивается тем, что было перечислено выше, и меняется с выходом каждой следующей версии пакета. На сегодняшний день система МАТЛАБ считается одной из наиболее мощных и развитых систем компьютерной математики.
ОСНОВНЫЕ ФУНКЦИИ
Как уже говорилось, основным режимом работы в системе МАТЛАБ является режим командной строки, при котором команды набираются пользователем на клавиатуре в ответ на приглашение системы и немедленно обрабатываются. Примером команды может служить инструкция присваивания какой-либо переменной (переменным) результата выражения, например:
>>x=2+2
x = 4
В этом примере “>>” – это приглашение системы, x – переменная рабочей области, которой будет присвоен результат. Последняя строка примера – это ответ системы на команду пользователя.
Выражение может формироваться из вызовов функций, арифметических и логических операций, операндами которых могут быть числовые, строковые и логические константы и массивы, переменные, вызовы функций и другие выражения. Большинство операций и функций реализовано таким образом, что их аргументами могут быть как скалярные величины, так и матрицы. При этом результат выполнения операции также будет скалярным или матричным, в зависимости от аргумента. Матрицы в МАТЛАБ записываются перечислением своих элементов внутри квадратных скобок по строкам, строки при этом разделяются точками с запятой. Рассмотрим пример – сложение двух матриц, которое выполняется по аналогии со сложением двух скалярных величин:
>>A=[1 2; 3 4];
>>B=[8 7; 6 5];
>>C=A+B
C=
9 9
9 9
Знак “+” означает матричное сложение, то есть аргументы складываются по правилам матричной алгебры. То же самое касается операций вычитания, умножения и деления – эти операции выполняются по правилам матричной алгебры, которые в случае скалярных аргументов совпадают с правилами обычных арифметических вычислений. Размеры матриц аргументов при этом должны быть согласованы по правилам линейной алгебры. Для выполнения операции над матричными аргументами поэлементно следует использовать поэлементные операции: “.+”, “.-“, “.*”, “./”. Результатом поэлементной операции будет матрица, все элементы которой являются результатом этой операции над соответствующими элементами аргументов. Для операций сложения и вычитания матричные операции совпадают с поэлементными операциями, но для умножения, деления и возведения в степень (которое записывается как x^n) это уже не так:
>>A=[1 2; 3 4];
>>B=[8 7; 6 5];
>>C=A*B
C=
20 17
48 41
>>D=A.*B
D =
8 14
18 20
Матричное деление матрицы A на матрицу B в МАТЛАБ понимается как нахождение такой матрицы C=A/B, чтобы матрица C*B-A была бы наиболее близка к нулевой матрице в смысле некоторой нормы.
Ещё одна матричная операция, а именно транспонирование, записывается в МАТЛАБ так:
>>A.’
Если в этой записи точку перед апострофом не ставить, то вдобавок к транспонированию все элементы матрицы будут взяты с комплексным сопряжением. Здесь заметим, что комплексные числа используются в системе МАТЛАБ, и над ними можно производить все определённые для них вычисления. Комплексное число представляется как сумма действительной и мнимой части, формируемой при помощи специальной константы – мнимой единицы, которая после начала работы системы помещается одновременно в две ячейки – переменные i и j. Присваивать другие значения этим переменным можно, но не рекомендуется.
Простейшая операция над комплексными числами – выделение действительной и мнимой части – показана на примере, дополнительно иллюстрирующем, что многие функции в МАТЛАБ могут принимать и возвращать как скалярные, так и матричные значения.
>>A=[2+3*i 1-7*j -4*i];
>>Re=real(A)
Re=
[2 1 0]
>>Im=imag(A)
Im=
[3 -7 -4]
Ещё одно полезное качество системы МАТЛАБ – возможность возвращать несколько результатов из одного вызова функции. Причём пользователь может сам определять, нужно ли ему получать все результаты или нет. Например, функции min и max могут возвращать не только минимальный или максимальный элемент вектора, но и его индекс (номер позиции в векторе):
>>a=[4 3 2 75 2];
>>max(a)
ans=
75
>>[m idx]=min(a)
m=
2
idx=
3
Обсуждая этот пример, отметим, что если вызов функции производится без присваивания какой-либо переменной, то ответ помещается в специальную переменную ans, при этом она получает значение только первого из возвращаемых параметров. Чтобы получить значения остальных выходных параметров, необходимо в операторе присваивания зарезервировать под них переменные, как это показано в примере. Полученное значение индекса наименьшего элемента можно использовать для выбора соответствующего элемента из вектора. В общем случае запись A(m,n) означает выбор одного из элементов прямоугольной матрицы, стоящего на пересечении строки m и столбца n, а запись A(k) – выбор элемента, находящегося на позиции k из вектора, полученного записыванием по очереди всех столбцов матрицы в один вектор. Если же необходимо вычленить из матрицы A подматрицу, находящуюся на пересечении строк с i0 по i1 и столбцов с j0 по j1, то это можно сделать так: A(i0:i1, j0:j1). Запись i0:i1 означает вектор целых чисел от i0 до i1. Имеет место следующее обобщение: запись a0:a1:a2 в МАТЛАБ означает упорядоченный набор чисел, начинающийся с числа a0, образующих арифметическую прогрессию с шагом a1 и не превосходящих величину a2 (с нужной стороны, в зависимости от знака a1).
Ещё одно замечание – по умолчанию любая команда в системе МАТЛАБ приводит к отображению результата. Чтобы результат не выводился, достаточно завершить ввод команды точкой с запятой:
>>a=[1 2; 3 4]
a=
1 2
3 4
>>a;
>>b=[1 2; 3 4];
>>b
b=
1 2
3 4
Это полезно при создании пользователем функций в режиме программирования, когда в процессе расчёта по программе необходимо избежать вывода результатов промежуточных вычислений.
Теперь перечислим некоторые элементарные математические функции.
cos
cot
csc
sec
sin
tan
acos
acot
acsc
asec
asin
atan
atan2
cosh
coth
csch
sech
sinh
tanh
acosh
acoth
acsch
asech
asinh
atanh
exp
log
log2
log10
sqrt
ceil
fix
floor
round
gcd
lcm
abs
sign
mod
rem
mean
median
min
max
std
var
|
косинус
котангенс
косеканс
секанс
синус
тангенс
арккосинус
арккотангенс
арккосеканс
арксеканс
арксинус
арктангенс
модификация арктангенса
гиперболический косинус
гиперболический котангенс
гиперболический косеканс
гиперболический секанс
гиперболический синус
гиперболический тангенс
гиперболический арккосинус
гиперболический арккотангенс
гиперболический арккосеканс
гиперболический арксеканс
гиперболический арксинус
гиперболический арктангенс
экспонента
натуральный логарифм
двоичный логарифм
десятичный логарифм
квадратный корень
округление до целого в большую сторону
отбрасывание дробной части
округление до целого в меньшую сторону
округление до ближайшего целого
наибольший общий делитель
наименьшее общее кратное
модуль (абсолютная величина) числа
знак числа
остаток от деления с учётом знака делимого
остаток от деления
среднее
медиана
минимальное значение
максимальное значение
среднеквадратичное отклонение
дисперсия
|
Зная имя функции, способ её использования можно уточнить в справочной системе МАТЛАБ.
Остановимся вкратце на основных функциях линейной (матричной) алгебры.
inv
pinv
det
rank
trace
norm
size
jordan
poly
eig
cond
null
|
обращение матрицы (нахождение обратной)
псевдообратная матрица
определитель матрицы
ранг матрицы
след матрицы
норма матрицы
размер матрицы
приведение к форме Жордана
характеристический полином матрицы
собственные векторы и собственные значения матрицы
число обусловленности матрицы
базис ядра матрицы
|
Опять-таки, подробности использования функций не представляет труда уточнить в справочной системе МАТЛАБ.
Заметим, что если имеется система линейных алгебраических уравнений с квадратной невырожденной матрицей Ax=b, то её решение можно получить как x=inv(A)*b или x=A\b. Последнее выражение также даёт некоторое частное решение неоднородной системы в случае, если матрица A вырождена и имеется бесконечно много решений. В этом случае для построения общего решения необходимо найти общее решение однородной системы, которое совпадает с ядром матрицы и может быть найдено с помощью функции null. В случае если система не имеет решений, нормальное псевдорешение может быть получено так: x=pinv(A)*b.
ЧИСЛЕННЫЕ МЕТОДЫ
Одним из математических объектов, поддерживаемых в МАТЛАБ, является полином. Он представляется в системе вектором своих коэффициентов, начиная с коэффициента при старшей степени:
>>p=[2 4 -3 1];
Это запись полинома 2x3 + 4x2 – 3x +1. Для полиномов реализовано большое количество функций, некоторые из которых приведены ниже:
polyval
poly
roots
conv
deconv
polyder
residue
|
значение полинома в точке
восстановление полинома по корням
корни полинома
свёртка (умножение) полиномов
деление полиномов
производная полинома
разложение отношения полиномов в сумму простых дробей
|
Далее приведём функции, применяемые при численном дифференцировании, интегрировании и решении дифференциальных уравнений:
diff
gradient
del2
trapz
quad
ode45
ode23
ode113
ode15s
ode23s
ode23t
ode23tb
bvp4c
fzero
fsolve
fminbnd
fminsearch
|
конечные разности произвольного порядка
аналог градиента
оператор Лапласа
вычисление определённого интеграла методом трапеций
вычисление определённого интеграла методом парабол
здесь и ниже: решатели задачи Коши для систем ОДУ
---//---
---//---
---//---
---//---
---//---
---//---
решатель краевой задачи для систем ОДУ
поиск корня нелинейного уравнения
решение систем нелинейных уравнений
поиск минимума
многомерная минимизация
|
Для решения задачи Коши предлагается сразу несколько решателей, реализующих различные численные методы: методы Рунге-Кутта различных порядков, методы Адамса, различные линейные многошаговые методы и т. д.
Проектирование и моделирование систем управления.
Пакет Control System Toolbox
Пакет предназначен для моделирования, анализа и проектирования непрерывных и дискретных систем автоматического управления и регулирования. Функции пакета способны производить вычисления с передаточными функциями, описанием объектов в пространстве состояний, отображать на графиках частотные и временные характеристики, нули и полюсы систем.
В пакете реализованы следующие возможности:
- обширный набор средств анализа одномерных и многомерных непрерывных и дискретных систем и объектов;
- построение основных характеристик систем: импульсной, передаточной и переходной, реакция на произвольное воздействие;
- построение частотных характеристик: диаграмм Боде, Найквиста, Николса и др.;
- разработка замкнутых систем регулирования;
- проектирование регуляторов;
- определение характеристик моделей: управляемости, наблюдаемости, понижение порядка моделей;
- доступны вычислительные операции для систем с запаздыванием;
Основными объектами вычислений являются:
- объект верхнего уровня LTI (Linear Time-Invariant System –линейная стационарная система)
- потомки объекта LTI для следующих типов моделей:
- в tf-форме – задание числителя и знаменателя передаточной функции (tf – transfer function)
- в форме zpk (задание нулей, полюсов и коэффициента усиления передаточной функции)
- в ss-форме (задание системы в пространстве состояний, путём указания матриц коэффициентов дифференциальных уравнений)
- в frd-форме (задание вектора частот и соответствующих значений комплексного коэффициента передачи)
В состав пакета Control System входит более ста функций. Для вывода полного набора средств пакета предназначена команда help control. Приведём некоторые:
tf
zpk
ss
dss
frd
tfdata
zpkdata
ssdata
frdata
parallel
series
feedback
append
ltiview
bode
nyquist
nichols
place
kalman
ctrb
obsv
canon
step
impulse
initial
lsim
|
задание системы числителем и знаменателем передаточной функцией
задание системы нулями и полюсами передаточной функции
задание непрерывной системы в переменных состояния
задание дискретной системы в переменных состояния
задание системы вектором частот и откликов
получение числителя и знаменателя передаточной функции
получение нулей и полюсов передаточной функции
получение матриц пространства состояний
получение частот и откликов
параллельное соединение подсистем
последовательное соединение подсистем
соединений подсистем обратной связью
объединение подсистем
графический интерфейс анализа систем
диаграмма Боде
диаграмма Найквиста
диаграмма Николса
построение вектора обратной связи для заданных полюсов
наблюдатель Калмана
матрица управляемости
матрица наблюдаемости
каноническое представление в пространстве состояний
переходная характеристика
импульсная характеристика
отклик системы на начальные условия
отклик системы на заданное воздействие
|
После того, как создан объект LTI (модель задана одной из функций ss, zpk, tf, frd), для его преобразования в другое представление можно использовать соответствующую из этих функций.
>> num=[1 0];
>> den=[1 2 10];
>> sys=tf(num, den)
Transfer function:
s
--------------
s^2 + 2 s + 10
>> sys=ss(sys)
a =
x1 x2
x1 -2 -5
x2 2 0
b =
u1
x1 1
x2 0
c =
x1 x2
y1 1 0
d =
u1
y1 1
Здесь a, b, c и d – матрицы системы дифференциальных уравнений (в пространстве состояний):
Далее можно вычислить матрицы управляемости и наблюдаемости для системы:
>> ctrb(sys)
ans =
1 -2
0 2
>> obsv(sys)
ans =
1 0
-2 -5
Наконец, найдём такой вектор обратной связи, чтобы замкнутая система имела спектр в точках -10 и -11:
>> k=place(sys.a,sys.b,[-10,-11])
k =
-23.0000 50.0000
Для аналитического конструирования регуляторов служит группа функций. В частности, функция lqr осуществляет синтез оптимального регулятора для непрерывной системы:
>>[K, S, e]=lqr(A,B,Q,R,N)
Функция возвращает матрицу K обратных связей такую, что закон управления u=-Kx минимизирует квадратичный критерий качества:
для непрерывной ss-модели. Возвращаемый параметр e представляет собой собственные значения замкнутой системы (матрицы A-BK). Аналогичные функций есть для некоторых других критериев оптимизации, а также как для непрерывных, так и для дискретных систем.
Анимация встроенными средствами МАТЛАБ
Построение визуальной статической модели системы в редакторе виртуальных миров.
Система МАТЛАБ предоставляет среду создания и редактирования файлов в формате VRML (Virtual Reality Modeling Language), принятом стандарте описания трёхмерных сцен, сформированных из отдельных графических примитивов (элементарных геометрических тел). Редактор V-Realm Builder, поставляемый вместе с МАТЛАБ, позволяет в интерактивном режиме создавать виртуальные сцены и сохранять их в формате VRML. Графические примитивы (сферы, параллелепипеды, конусы и др.) при этом организовываются в иерархические структуры, управляя параметрами которых можно менять размер, форму, положение, условия видимости и другие характеристики представленных объектов, влияющие на отображаемую картину. При этом изменение какого-то параметра в процессе отображения в соответствии с некоторым законом делает картину динамической, то есть пользователь видит движущуюся сцену. Для организации такого взаимодействия в МАТЛАБ-Simulink есть встроенные средства (блок VR-Sink). Приведём пример виртуальной трёхмерной сцены, построенной и сохранённой в формате VRML при помощи V-Realm Builder. Сцена представляет собой стилизованное изображение двух перевёрнутых вертикальных маятников, закреплённых нижними концами на горизонтальной платформе так, что они могут вращаться вокруг точки закрепления в вертикальной плоскости.
#VRML V2.0 utf8
#Created with V-Realm Builder v2.0
#Integrated Data Systems Inc.
#www.ids-net.com
Background {
groundAngle [ 0.9, 1.5, 1.57 ]
groundColor [ 0 0.8 0,
0.174249 0.82 0.187362,
0.467223 0.82 0.445801,
0.621997 0.67 0.600279 ]
skyAngle [ 0.1, 1.2, 1.57 ]
skyColor [ 0.76238 0.8 0.1427,
0.277798 0.219779 0.7,
0.222549 0.390234 0.7,
0.60094 0.662637 0.69 ]
}
DEF Pend2 Transform {
translation 1 1 0
center 0 -1.5 0
children DEF Sh1 Shape {
appearance Appearance {
material Material {
}
}
geometry DEF Cyl1 Cylinder {
height 2
radius 0.1
}
}
}
DEF Pend1 Transform {
translation -1 1.5 0
center 0 -1.5 0
children DEF Sh2 Shape {
appearance Appearance {
material Material {
}
}
geometry DEF Cyl2 Cylinder {
height 3
radius 0.1
}
}
}
DEF Platform Transform {
translation 0 0 0
children Shape {
appearance Appearance {
material Material {
}
}
geometry Box {
size 4 0.1 1
}
}
}
Вот как выглядит окно редактора в момент создания сцены:
Построение математической модели в Simulink с учётом внутренней динамики
Для решения задачи стабилизации двух вертикальных перевёрнутых маятников на горизонтальной движущейся платформе одним управлением используется расширение системы МАТЛАБ для моделирования динамических систем – Simulink. Модель включает в себя несколько блоков, соединённых между собой так, что реализуется обратная связь, стабилизирующая маятники в вертикальном положении одновременно одним управлением. Одна из подсистем реализует наблюдатель состояния, вторая – стабилизацию по оценке состояния при помощи обратной связи.
Изменяемыми параметрами модели являются массы и длины маятников, масса тележки, ускорение свободного падения, а также целевой спектр устойчивой системы. Параметры задаются в рабочем пространстве МАТЛАБ при помощи m-файла, который представлен ниже.
m1=1 % Масса первого маятника
m2=3 % Масса второго маятника
M=5 % Масса тележки
l1=2 % Длина первого маятника
l2=4 % Длина второго маятника
g=9.81 % Ускорение свободного падения
Расчётные матрицы получаются из уравнений движения, записанных приближённо для случая малых углов отклонения маятников. В качестве неизвестных компонент вектора состояния взяты соответственно координата и скорость тележки, угол отклонения и скорость его изменения для первого маятника, и то же самое для второго маятника – итого 6 переменных:
Далее формируются расчётные матрицы:
A=[0 1 0 0 0 0; 0 0 -m1*g/M 0 -m2*g/M 0; 0 0 0 1 0 0; 0 0 g/l1*(1+m1/M) 0 g/l1*m2/M 0; 0 0 0 0 0 1;0 0 m1/l2*g/M 0 g/l2*(1+m2/M) 0] B=[0;1/M;0;-1/l1/M;0;-1/l2/M] C=[1 0 0 0 0 0] % Наблюдаем только координату тележки D=zeros(6,1)
IC=[0 0 0.1 0 0.05 0] % начальные условия LAMBDA=[-0.61 -0.62 -0.63 -0.64 -0.65 -0.66] % целевой спектр устойчивой системы
Диаграмма динамической модели, построенной в Simulink
В качестве параметров L и K используются векторы, вычисляемые при помощи функции place по известным значениям матриц и целевого спектра. Коричневой рамкой выделена подсистема, являющаяся наблюдателем.
Графики, полученные в результате расчёта
Скорость тележки
|