Вы находитесь на странице: 1из 52

МЕЖДУНАРОДНЫЙ ИНСТИТУТ

КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

Кафедра информатики и вычислительной техники

Методические указания

к лабораторным работам 10 - 18
по дисциплине

«ПАКЕТЫ ПРИКЛАДНЫХ ПРОГРАММ»

для студентов специальности 09.03.01


“ Информатика и вычислительная техника ”
всех форм обучения

Воронеж
2018
УДК 681.513.2

Рецензент: канд. техн. наук, доцент Харченко А.П.

Составитель: Ю.С. Слепокуров

Методические указания к лабораторным работам 10 - 18 по


дисциплине «Пакеты прикладных программ» для студентов
специальности 09.03.01 “ Информатика и вычислительная
техника ” всех форм обучения / сост. Ю.С. Слепокуров, –
Воронеж : Междунар. ин-т компьют. технологий, 2018, – 50 с.

Методические рекомендации подготовлены в соответствии


с учебным планом и рабочей программой дисциплины «Пакеты
прикладных программ».

Ответственный за выпуск – зав. кафедрой информатики и


вычислительной техники, докт. техн. наук Каладзе В.А.

Печатается по решению Редакционно-издательского совета


Международного института компьютерных технологий.
© Слепокуров Ю.С., составление, 2018
© Оформление. Международный институт
компьютерных технологий, 2018
СИСТЕМА MATLAB ДЛЯ НАУЧНЫХ И ИНЖЕНЕРНЫХ РАСЧЕТОВ
Часть 1. Вычислительная система MATLAB.
Расчеты с использованием MATLAB

Цели работ: Ознакомление с принципами работы системы MATLAB,


матричными операциями, функциональным программированием.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ РАБОТ


Основным типом объектов системы MATLAB является прямоугольная матрица,
элементами которой могут быть как вещественные так и комплексные числа.
Скалярным переменным соответствует матрица размерности [1х1], а векторам -
матрица с одним столбцом или строкой.
Матрица - это таблица данных, но особенность заключается в том, что для
матриц установлены определенные правила выполнения математических операций.
Далее будет показано, как в системе MATLAB реализуется выполнение матричных
операций (например умножение матриц), а также выполнение специальных операций
поэлементной обработки матриц как простых таблиц или массивов (array) чисел.
Система MATLAB предоставляет различные возможности для организации
расчетных работ. Во- первых система MATLAB является средой - интерпретатором
команд и рабочее поле экрана (Command Window) используется для ввода данных и
операторов, здесь же отображаются численные результаты, а графики выводятся в
отдельные окна (Figure). При этом операторы могут содержать константы,
переменные, системные функции и функции пользователя (ранее созданные и
хранящиеся в рабочей директории).
В системе MATLAB применяется также способ вычисления с использованием
программ, написанных пользователем. Программой является внешний M - файл
(текстовый файл с расширением .m), который может создаваться и модифицироваться
любым текстовым редактором, но с обязательным условием экспорта в виде ASCII
файла (без специальных символов редактирования и разметки документа).
Выполнение программы начинается при наборе имени M- файла программы в
командной строке рабочего поля системы.
Результаты работы системы при выполнении команд или M- файла программы
выводятся на рабочее поле экрана и на графики, для которых открываются
специальные окна, возможно сохранение данных в файл. Возможен ввод данных с
клавиатуры.
При запуске системы открывается окно, содержащее:
- строку главного меню системы File ; Edit ; View ; Graphics ; Debug ; Desktop
; Window ; Help;
- панель инструментов-кнопок (MATLAB Toolbar);
- панель ярлыков (Shortcuts Toolbar); Основное окно включает три рабочих
окна:
- окно Current Directory/Workspace;
- окно Command History;
- окно Command Window.
На экране можно открыть несколько окон системы, в том числе редактор,
графики. По команде меню Desktop > Desktop Layout > Default возвращается
исходное состояние и размер окон.
Двойная стрелка в командном окне » указывает на начало командной строки.
Главное меню и панели инструментов показаны на рис.1.

Рис. 1

Математические выражения
Как и большинство систем программирования Matlab обеспечивает выполнение
математических выражений, но в отличие от других языков программирования эти
выражения содержат целые матрицы. В состав математических выражений входят:
- переменные;
- числа;
- операторы;
- функции.

Переменная – массив/вектор/скаляр

Matlab не требует какого-либо описания типа переменной или размерности


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

Запись действительных чисел выполняется:


- в десятичной форме, знак плюс и точка у целых чисел не обязательны.
- в показательной форме по основанию десять; показатель степени отделен
от мантиссы символом e или E, пробел не допускается.
- явного определения целых чисел нет;
- комплексное число представлено дейтсвительной и мнимой частями, при
мнимой части проставлен символ i или j (без знака умножения);
- символ (;) после определения переменой подавляет вывод результата на
экран, как и при записи оператора.

Примеры ввода переменных в систему:


>> a=6;
>> a=3 >> a >> sqrt(-1)

a= a= ans =

3 6 0.0000 + 1.0000i

>> >> >>

В том случае, если переменная уже существует, ей присваивается новое


значение. При задании матрицы (массива) в памяти резервируется пространство, в
соответствии с ее размером.
Несмотря на выполненное выше присвоение переменной a численного значения,
т.е. задании ее в виде скаляра, допустимо сразу или после каких-либо действий
переопределить переменную, например, задать в виде матрицы:
>> b=[1 2 3; 4 5 6; 7 8 9]

b=

1 2 3
4 5 6
7 8 9

>>
Операторы

Язык Matlab это язык операторов. Операторы задаются по одному в командной


строке для исполнения в интерактивном режиме или в виде списка в m- файле или в
script- файле. Фактически m- файл является программой, которая интерпретируется и
выполняется системой Matlab. После выполнения m- файла в операционной среде
системы, до завершения сеанса, остаются все значения глобальных переменных и они
доступны для выполнения любых действий путем задания операторов в командной
строке.
Две формы записи операторов:
- с явным присвоением: переменная = выражение;
- с неявным присвоением: выражение;
Оператор содержит:
- имена переменных и числовые константы;
- имена функций;

- специальные символы указывающие на выполняемые действия + - * / ^ ' и на


порядок действий ();
- символ (;) указывающий на завершение строки матрицы и на подавление
вывода результата на экран;
- разделители операторов при записи более одного оператора в строке (,);
- символы продолжения строки для записи более 256 символов – точки, не
менее двух;
- пробелы, в любых местах, они не влияют на выполняемые действия и
служат для оформления строки;
- символ % указывает на то, что следующие за ним символы являются
комментарием, с него можно начать строку.
Признаком начала командной строки является указатель >>, выводимый
системой автоматически, при готовности к приему команды.
При записи оператора с неявным присвоением, результат вычислений
присваивается автоматически внутренней переменной ans (answer), может быть
вызван и использован по этому имени и сохраняется до выполнения следующего
оператора с неявным присвоением.
Для построения выражений используются арифметические операторы и знаки, указывающие на
порядок действий (»help ops).

Примеры записи переменных, скаляров и матриц, выполнение простых


операторов:
» a = 3; b = -5; % символ ; подавляет эхо-вывод
» (a + b)/2a
c =
-1
» pi % встроенная константа
ans =
3.1416
» i % комплексные числа, i - встроенная константа ans =
0 + 1.0000i
» a = 3 + 2i; % i без знака умножения

Встроенные функции

Matlab выполняет вычисление большого количества стандартных


математических функций – sin, cos, exp, log, sqrt, abs и других (вызов справки с
перечнем help elfun). Задание отрицательного аргумента для log, sqrt не приводит к
ошибке, а автоматически вычисляется соответствующий результат в виде
комплексного числа.
В системе Matlab реализованы также более сложные и специальные функции.
Они сгруппированы по разделам, для их использования рекомендуется обратиться к
справочной системе (help specfun, help elmat и др.)
Стандартные математические функции являются встроенными, что
обеспечивает высокую скорость вычислений, однако алгоритм, описание порядка
действий и вмешательство в программу недоступны.
Специальные функции реализованы в виде m-файлов (sinh, gamma), т.е.
являются внешними. m- файл доступен для просмотра, анализа выполняемых
операций, а также для изменений, которые необходимы для решения какой-либо
конкретной задачи. m-файлы функций содержат в начальных строках комментарии,
которые выводит справочная система при задании команды help funname, где
funname – имя функции.
Векторы и матрицы

» a = [1 2 3 4 5]; % ввод вектора


» sum(a) % использование функции SUM
ans =
15
»
» a = [1 2; 3 4]; % сложение матриц
» b = [5 6; 7 8]

» a + b
ans =

6 8
10 12
» a(2,1) % опрос одного элемента матрицы
ans =
3
Элементы матрицы имеют индексы в соответствии с принятым в математике
порядком:
a11 a12 a13
a11 a12 a13
a a21 a22 a23 a a21 a22 a23
a31 a32 a33 a31 a32 a33
a =

1 2
3 4

>> a' %транспонирование матрицы

ans =

1 3
2 4

Функции обработки векторов

Функция Назначение
s=sum(a) Сумма всех элементов вектора a
p=prod(a) Произведение всех элементов вектора a
m=max(a) Нахождение максимального значения среди
элементов вектора a
[m,k]=max(a) Второй выходной аргумент kсодержит
номер максимального элемента в
векторе a
m=min(a) Нахождение минимального значения среди
элементов вектора a
[m,k]=min(a) Второй выходной аргумент k содержит
номер минимального элемента в
векторе a
m=mean(a) Вычисление среднего арифметического
элементов вектора a
a1=sort(a) Упорядочение элементов вектора по возрастанию

Функция find
Функция find определяет индексы элементов массива, которые удовлетворяют
заданному логическому условию. Как правило, она используется с целью создания
шаблонов для сравнения и образования массивов индексов. В наиболее
употребительной форме функция к = find(x <условие>) возвращает вектор индексов
тех элементов, которые удовлетворяют заданному условию,
А = magic(4)
А =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

k = find(A > 8);


A(k) = 100
100 2 3 100
5 100 100 8
100 7 6 100
4 100 100 1

Функция вида [i, j] = find(x) позволяет получить индексы ненулевых элементов


прямоугольного массива.
Функция вида [i, j. s] = find(x) возвращает, кроме того, и их значения в виде
вектора s.

Вызвав справку по приведенным в таблице функциям (help funname) можно


найти много других функций, предназначенных для преобразования векторов и
матриц.
Указание номеров элементов вектора можно использовать и при вводе векторов,
последовательно добавляя новые элементы (не обязательно в порядке возрастания их
номеров). Команды:
>> h=10; h(2)=20; h(4)=40;
приводят к образованию вектора:
>>
h h
=
10 20 0 40
Для ввода первого элемента h не обязательно указывать его индекс, т.к. при
выполнении оператора h=1 создается вектор (массив размера один на один).
Следующие операторы присваивания приводят к автоматическому увеличению длины
вектора h, а пропущенные элементы (в нашем случае h(3)) получают значение ноль.
Индексация вектором служит для выделения элементов с заданными индексами
в новый вектор. Индексный вектор должен содержать номера требуемых элементов,
например:
» z=[0.2 -3.8 7.9 4.5 7.2 -8.1 3.4];
>> ind=[3 5 7];
>> znew=z(ind)
znew =
7.9000 7.2000 3.4000

Вектора-столбцы с одинаковым числом элементов можно складывать и вычитать


друг из друга при помощи знаков "+" и "–". Такое действие верно и для векторов-
строк:

>> с=a+b;
>> w=u-v;

Сложение и вычитание вектора-строки и вектора-столбца или векторов разных


размеров приводит к ошибке. Операция * предназначена для умножения векторов по
правилу матричного умножения. Поскольку MatLab различает вектора-строки и
вектора-столбцы, то допустимо либо умножение вектора-строки на такой же по длине
вектор-столбец (скалярное произведение), либо умножение вектора-столбца на вектор-
строку (внешнее произведение, в результате которого получается прямоугольная
матрица). Скалярное произведение двух векторов возвращает функция dot, а
векторное — cross:

>> s=dot(a,b)
>> c=cross(a,b)

Векторное произведение определено только для векторов из трех элементов.


Для операции транспонирования зарезервирован апостроф '. Если вектор
содержит комплексные числа, то операция ' приводит к комплексно-сопряженному
вектору. При вычислении скалярного и векторного произведений функциями cross и
dot не обязательно следить за тем, чтобы оба вектора были либо столбцами, либо
строками. Результат получается верный, например, при обращении c=cross(a,b'),
только c становится вектором-строкой.
Для обработки матриц также существуют специальные функции, например,
функции для создания стандартных матриц: zeros, eye, ones, rand, diag (см.
help matlab\elmat).

Особенности оператора умножения (деления, возведения в степень)


MatLab поддерживает два вида вычислительных операций с векторами и
матрицами: матричные и поэлементные.
Наряду с умножением по правилу матричного умножения, существует операция
поэлементного умножения .* (точка со звездочкой). Данная операция применяется к
векторам одинаковой длины и приводит к вектору той же длины, что исходные,
элементы которого равны произведениям соответствующих элементов исходных
векторов. Аналогично может быть выполнена операция с матрицами одинаковой
размерности, в этом случае матрицы - операнды обрабатывается системой как
таблицы, выполняется перемножение соответствующих элементов таблиц,
результатом будет матрица такой же размерности. Например, для введенных ранее
матриц a и b:

» a * b % операция с матрицами
ans =
19 22
43 50
» a.* b % операция с массивами
ans = (таблицами)
5 12
21 32
»
Аналогичным образом выполняется поэлементное деление ./ (точка с косой
чертой). Кроме того, операция .\ (точка с обратной косой чертой) осуществляет
обратное поэлементное деление, то есть выражения a./b и b.\a эквивалентны.
Возведение элементов вектора a в степени, равные соответствующим элементам b,
производится с использованием .^. Для транспонирования векторов-строк или
векторов-столбцов предназначено сочетание .' (точка с апострофом). Операции ' и
.' для вещественных векторов приводят к одинаковым результатам. Не обязательно
применять поэлементные операции при умножении вектора на число и числа на
вектор, делении вектора на число, сложении и вычитании вектора и числа. При
выполнении, например, операции a*2, результат представляет собой вектор того же
размера, что и a, с удвоенными элементами.

Оператор (:)
» a = [1 2 3 4
5 6 7 8];
» sum(a(:,1)) % знак : => операция со столбцом
ans =
6
» a(2,:)
ans =
5 6 7 8
»
» 1:6 % интервал значений целых чисел
ans =
1 2 3 4 5
6
» a = 1:5 % то же с присвоением
a =
1 2 3 4 5
»
» a = 1.1:5.5 % с десятичными знаками, шаг единица
a =
1.1000 2.1000 3.1000 4.1000 5.1000
»
» a = 0.1:0.1:0.5 % дробный шаг
a =
0.1000 0.2000 0.3000 0.4000 0.5000
»

Индексация двоеточием позволяет выделить идущие подряд элементы в новый


вектор. Начальный и конечный номера указываются в круглых скобках через
двоеточие, например:
» z=[0.2 -3.8 7.9 4.5 7.2 -8.1 3.4];
» znew=z(3:6)
znew =
7.9000 4.5000 7.2000 -8.1000

Вызов функции prod с заданием интервала с помощью двоеточия вычисляет


произведение элементов вектора z со второго по шестой:
» p=prod(z(2:6))
» a = [1 2
3 4];
» b = [5
6];
» c = [a,b] % добавление столбца в матрицу
c =
1 2 5
3 4 6

Программирование, файл-функция и файл-программа


Программирование в системе MatLab осуществляется путем написания M –
файлов, которые могут быть либо файл-функциями, либо файл-программами. Файл-
программа является текстовым файлом с расширением m (M-файлом), в котором
записаны команды и операторы MatLab.
Для запуска редактора M-файлов следует нажать кнопку New M-file на панели
инструментов, либо выбрать в меню File в пункте New подпункт M-file. На экране
появляется окно редактора. В нем можно набрать команды, например для построения
графика:
x=[-
1:0.01:1];
y=exp(x);
plot(x,y)
grid on
title('Экспоненциальная функция')
Для запуска программы следует выполнить команду Run из меню Debug в
редакторе. Если предварительно не была выполнена команда Save, то система
предложит сначала сохранить файл программы (Save and Run).
Для запуска программы можно набрать в командной строке имя M-файла (без
расширения) и нажать <Enter>, то есть выполнить, как команду MatLab. При этом
следует учесть, что путь к каталогу с M-файлом должен быть известен MatLab.

Когда текущий каталог установлен, то все M-файлы, находящиеся в нем, могут


быть запущены из командной строки, либо из редактора M-файлов. Все переменные
файл-программы после ее запуска доступны в рабочей среде, т. е. являются
глобальными. Убедится в этом можно, выполнив команду whos. Файл-программа
может использовать переменные рабочей среды. Например, если в командной строке
был выполнен оператор:

>> a=[0.1 0.4 0.3 1.9 3.3];

то файл-программа, содержащая строку bar(а), построит столбцевую диаграмму


вектора a (разумеется, если он не был переопределен в самой файл-программе).
Файл-функции отличаются от файл-программ тем, что они могут иметь входные
и выходные аргументы, а все переменные, определенные внутри файл-функции,
являются локальными и не видны в рабочей среде. M-файл, содержащий файл-
функцию, должен начинаться с заголовка, после него записываются операторы
MatLab. Заголовок состоит из слова function, списка выходных аргументов, имени
файл-функции и списка входных аргументов. Аргументы в списках разделяются
запятой. Пример простейшей файл-функции с двумя входными и одним выходным
аргументами:

function c=mysum(a,b)
c=a+b;

Практически все функции MatLab являются файл-функциями и хранятся в


одноименных M- файлах. Функция sin допускает два варианта вызова: sin(x) и
y=sin(x), в первом случае результат записывается в ans, а во втором — в
переменную y. Наша функция mysum ведет себя точно так же. Более того, входными
аргументами mysum могут быть массивы одинаковых размеров или массив и число.
Разберем теперь, как создать файл-функцию с несколькими выходными
аргументами. Список выходных аргументов в заголовке файл-функции заключается в
квадратные скобки, сами аргументы отделяются запятой. В качестве примера ниже
приведена файл-функция quadeq, которая по заданным коэффициентам квадратного
уравнения находит его корни:

function
[x1,x2]=quadeq(a,b,c)
D=b^2-4*a*c;
x1=(-b+sqrt(D))/(2*a);
x2=(-b-sqrt(D))/(2*a);
При вызове quadeq из командной строки используйте квадратные скобки для
указания переменных, в которые будут занесены значения корней. В конце строки не
ставим точку с запятой и система выдает ответ на экран в командное окно.

>> [r1,r2]= quadeq(1,3,2)


r1 =
-1
r2 =
-2

Справочная система (HELP)

Для обращения к справочной системе необходимо в командном окне MATLAB


набрать команду
» help
При этом будет представлен перечень разделов (HELP topics) справочной
системы. Ниже приведены разделы, на которые следует обратить внимание в первую
очередь.
» help matlab\ops - выводит перечень операторов и специальных символов,
используемых в системе.
» help arith - об арифметических операторах,
» help punct - об использовании специальных символов в командах,
» help colon - о применении специального символа : (двоеточие), который
управляет выполнением ряда важных операций с матрицами.
» help matlab\lang - описание языка системы для работы в режиме
интерпретации команд и программирования (написания M- файлов).
» help matlab\elmat- простые матрицы и базовые операции с матрицами.

» help matlab\elfun - элементарные, базовые функции системы, в том числе


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

» help matlab\matfun - функции линейной алгебры и матричного анализа.

» help matlab\polyfun - функции работы с полиномами и интерполяции.


» help matlab\plotxy - построение графиков по двум координатным осям.
Лабораторная работа 10. Рабочая среда системы MATLAB,
вычислительные операторы, задание векторов и матриц

ЗАДАНИЕ НА ЛАБОРАТОРНЫЙ ПРАКТИКУМ

Операторы, необходимые для выполнения каждого задания,


пишутся одним файлом-сценарием
1.1. Сформировать в рабочей области матрицу 3Х5 и определить значение и индексы
минимального элемента матрицы.
1.2. Сформировать в рабочей области вектор А, состоящий из 10 элементов и
удалить из нее все элементы, значения которых меньше 5.
1.3. Сформировать в рабочей области вектор А из 10 элементов и добавить к нему
вектор, сформированный из элементов этого же вектора, значения которых лежат
в диапазоне 10 – 20.
1.4. Сформировать в рабочей области матрицу 3Х5 и удалить из нее строку с
максимальным элементом.
1.5. Сформировать в рабочей области матрицу 3Х5 и добавить к ней строку,
состоящую из минимальных элементов каждого столбца.
1.6. Из вектора, содержащего 20 элементов, сформировать матрицу 4Х5, строки
которой являются последовательными элементами исходного вектора.
1.7. Из матрицы 3Х5 элементов сформировать вектор длиной 15 элементов путем
последовательной записи в него столбцов исходной матрицы.
1.8. Из матрицы 4Х5 удалить строку или столбец, в которых находятся
минимальный и максимальный элементы матрицы. Если таковых нет, то
матрицу оставить неизменной.

Лабораторная работа 11. Вывод графических результатов решения

plot Построение графиков отрезками прямых

Функции одной переменной y(x) находят широкое применение в практике


математических и других расчетов, а также в технике компьютерного
математического моделирования. Для отображения таких функций используются
графики в Декартовой системе координат. При этом строятся две оси –
горизонтальная X и вертикальная Y – и задаются координаты x и y, определяющие
узловые точки y(x). Эти точки соединяются друг с другом отрезками прямых линий.
Поскольку MATLAB представляет собой матричную систему, совокупность точек y(x)
задается векторами X и Y одинакового размера.
Синтаксис:
plot(x,y)
plot(y)
plot(x,y,’s’)
plot(x1,y1,’s1’,x2,y2,’s2’,…)
plot(x,y)  строит график функции y(x). Если X или Y матрица, то строятся
графики по данным в матрице.
plot(y)  строит график функции y(i), при этом значения берутся из вектора Y, а
i представляет собой индекс соответствующего элемента. Если Y содержит
комплексные элементы, то выполняется команда
plot(real(Y), imag(Y)). Во всех других случаях мнимая часть игнорируется.
plot(x,y,’s’)  строит график функции y(x) но с заданием типа линии графика в
виде строковой константы, которая может принимать следующие значения:
Цвет линии Тип точки Тип линии
y желтый . точка - сплошная
m фиолетовый o окружность : двойной пунктир
c голубой x крест -. штрих-пунктир
r красный + плюс -- штриховая
g зеленый * звездочка
b синий s квадрат
w белый d ромб
k черный v треугольник (вниз)
^ треугольник (вверх)
p пятиугольник
h шестиугольник

Таким образом, с помощью константы s, можно изменять цвет линии,


представлять узловые точки различными знаками, менять тип линии графика.
Функция plot(x1,y1,’s1’,x2,y2,’s2’,…) строит на одном графике ряд линий,
представленных данными вида (x,y,’s’).
При отсутствии указания на цвет линий и точек он выбирается автоматически
одним из шести табличных цветов (исключая белый). Если линий больше шести, то
выбор цветов повторяется. Для монохромных систем линии выделяются стилем.
Пример:
» %Графики трех функций со спецификацией линий каждого графика
» x = - 2*pi : 0.1*pi : 2*pi ;
» y1 = sin(x);
» y2 = sin(x).^2;
» y3 = sin(x).^3;
» plot(x,y1,’-m’,x,y2,’+r’,x,y3,’- -ok’)
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-8 -6 -4 -2 0 2 4 6 8

Рис. 1.2

loglog Графики в логарифмическом масштабе

Для построения графиков функций со значениями x и y, изменяющимися в


широких пределах, нередко используются логарифмические масштабы.
Для этого применяется команда loglog(…), синтаксис которой аналогичен
рассмотренному для команды plot.
semilogx, Графики функций в полулогарифмическом
semilogy масштабе

В некоторых случаях предпочтителен полулогарифмический масштаб графиков,


когда по одной оси задается логарифмический масштаб, а по
другой – линейный.
semilogx(…) – строит график функции в логарифмическом масштабе (основание
10) по оси X и линейным по оси Y.
semilogy(…) – строит график функции в логарифмическом масштабе по оси Y и
линейным по оси X.
Синтаксис команды аналогичен синтаксису команды plot.
contour Построение контурных графиков

Контурные график являются попыткой отобразить на плоскости функции двух


переменных вида z(x,y). Их можно представить в виде совокупности линий равного
уровня, которые получаются, если трехмерная поверхность пересекается рядом
плоскостей, расположенных параллельно друг другу. При этом контурный график
представляет совокупность спроецированных на плоскость y(x) линий пересечения
поверхности z(x,y) плоскостями.
Синтаксис:
contour(z) – строит контурный график по данным матрицы z с автоматическим
диапазоном изменения x и y;
contour(x,y,z) – строит контурный график по данным матрицы z с указанием
спецификаций для x и y;
contour(z,N) и contour(x,y,z,N) – дают построения аналогичные ранее
описанным, с заданием N линий равного уровня (по умолчанию N = 10);
contour(z,V) и contour(x,y,z,V) – строят линии равного уровня для высот,
указанных значениями элементов вектора V;
[C,H] = contour(…) – возвращает дескриптор – матрицу C и вектор столбцов H.
Они используются как входные параметры для команды clabel (см. далее);
contour(…,S) – позволяет использовать перечисленные выше функции с
указанием спецификации линий, аналогично команде plot.
Следует помнить о том, что количество точек в векторе для построения
графика расчетной функции должно быть не менее 60, иначе график будет выглядеть
как ломаная кривая. Чем выше скорость изменения функции, те больше точек должно
быть рассчитано для построения графика.
Построение графиков 3D-поверхностей

meshgrid Функция создания массивов трехмерной графики

Трехмерная поверхность обычно описывается функцией двух переменных


z(x,y). Специфика построения трехмерных графиков требует не просто задания ряда
значений x и y, то есть векторов x и y – она требует определения двумерных массивов
для X и Y матриц.
Синтаксис:
[X,Y] = meshgrid(x,y) – преобразует область, заданную векторами x и y в
массивы X и Y, которые могут быть использованы для вычисления функции двух
переменных и построения трехмерных графиков. Строки выходного массива X
являются копиями вектора x, а столбцы Y – копиями вектора y;
meshgrid(x) – аналогична [X,Y] = meshgrid(x,x);
[X,Y,Z] = meshgrid(x,y,z) – возвращает трехмерные массивы, используемые для
вычисления функций трех переменных и построения трехмерных 3D-графиков.

plot3 Функция построения трехмерных графиков линиями

Синтаксис:
plot3(x,y,z) – строит массив точек, представленных векторами x, y и z, соединяя
их отрезками прямых. Команда имеет ограниченное применение, т.к. строит не
поверхность , а пространственную кривую;
plot3(X,Y,Z) – строит точки с координатами X(i,:), Y(i,:) b Z(i,:) и соединяет их
отрезками прямой, получая таким образом трехмерную поверхность;
plot3(X,Y,Z,S) – обеспечивает аналогичные построения, но со спецификацией
линий и точек, соответствующих синтаксису команды plot.
Пример:
» x=-3:0.1:3;
» y=x;
» z=x.^2+y.^2;
» subplot(2,1,1),plot3(x,y,z),grid on
» [x,y]=meshgrid(x,y);
» z=x.^2+y.^2;
» subplot(2,1,2),plot3(x,y,z),grid on

mesh Сеточные 3D-графики с функциональной окраской

Наиболее представительными и наглядными являются сеточные графики


трехмерных поверхностей с заданной или функциональной окраской.
Синтаксис:
mesh(X,Y,Z) – выводит в графическое окно сетчатую поверхность Z(X,Y) с
функциональной окраской, при которой цвет задается высотой поверхности.
Возможна также форма mesh(Z);
meshc(…) – по синтаксису аналогична предыдущим, но строит график
поверхности, объединенный с проекциями линий равного уровня (графика типа
contour);
meshz(…) – аналогичный синтаксис, но строит поверхность в виде столбиков.
Вспомогательные графические функции

figure Активизация графического окна

Синтаксис:
figure(n)  данная команда делает активным графическое окно с номером n
(если такое окно существует) или создает пустое графическое окно.

axis Масштабирование осей и вывод на экран

Синтаксис:
axis([xmin xmax ymin ymax])
axis(‘auto’)
axis(axis)
axis(‘square’)
axis(‘equal’)

axis([xmin xmax ymin ymax])  устанавливает масштаб по осям x, y для


активного графического окна (для трехмерных графиков добавятся аргументы zmin и
zmax).
axis(‘auto’)  возвращает масштаб по осям к исходным значениям (принятым по
умолчанию).
axis(axis)  фиксирует текущие значения масштабов по осям для последующих
графиков.
axis(‘square’)  устанавливает одинаковый диапазон изменения переменных по
осям.
axis(‘equal’)  устанавливает масштаб, который обеспечивает одинаковые
расстояния между метками по осям x и y.

grid Нанесение сетки

Синтаксис:
grid on  наносит координатную сетку на текущие оси;
grid off  удаляет координатную сетку;
grid  выполняет роль переключателя с одной функции на другую.

hold Управление режимом сохранения текущего окна


Синтаксис:
hold on  включает режим сохранения текущего графика и свойств объекта axis,
так что последующие команды приведет к добавлению новых графиков в активном
графическом окне;
hold off  выключает режим сохранения текущего графика;
hold  реализует переключение с одного режима на другой.

subplot Разбиение графического окна


Синтаксис:
subplot(mnp)  данная команда выполняется перед обращение к функциям
построения графиков для одновременной выдачи нескольких графиков (каждый
со своим объектом axis) в различных частях графического окна. значение m
указывает, на сколько частей разбивается окно по горизонтали, n  по вертикали, а р 
номер позиции, куда будет выводиться очередной график.
Эта же команда используется для перехода от одного подокна к другому.
clabel Маркировка линий равного уровня
Синтаксис:
clabel(C)
clabel(C, v)
clabel(C, 'manual')

clabel(C)  добавляет метки к линиям уровня в случайно выбранных позициях.


clabel(C, v)  маркирует линии уровня контура, заданные в векторе v.
clabel(C, 'manual')  маркирует линии уровней в позициях, указываемых с
помощью мыши. Нажатие клавиши Return или правой кнопки мыши завершает
маркировку. Если мышь недоступна, то можно использовать клавишу пробела для
перехода между линиями уровней и “клавиши-стрелки” для перемещения
перекрестия.

ЗАДАНИЕ НА ЛАБОРАТОРНЫЙ ПРАКТИКУМ

1.1. Построить в одних осях функции sin  x  и y 3 при значениях


y z  y2 
x  cos  x   1
2
x5
аргумента x в диапазоне 0 … 10.
1.2. Построить в одной фигуре, но в разных окнах функции sin  x  и y 3
y z  y2 
x  cos  x   1
2
x5
при значениях аргумента x в диапазоне 0 … 10.
1.3. Построить плоскость функции двух аргументов z  sin  x  cos  y  при значениях
аргументов функции x и y в диапазоне 0… 2 .
1.4. Для функции двух аргументов z  sin  x  cos  y  при x = y = 0… 2 построить линии
равного уровня значений функции -0.2, 0 и 0.5.
1.5. Для экспериментальной функции с точками (
x  [0 0.2 0.4 0.6 0.8 1], y  [0 5 9 15 25 36] ) построить график (используя методы
интерполяции функции), содержащий исходные точки.
1.6. Используя оператор plot написать в графическом окне свои инициалы линиями
синего цвета и толщиной 2.5 пункта.
1.7. Для значений аргумента x =0… 2 построить график функции y=cos(x)./(0.5*x.^2-
2*x+5) и соединить прямой линией локальные экстремумы функции на отрезках
0…1 и 5…6.
sin  x 
y  sin  x  
1.8. Построить в одном окне графики двух функций: x2 и
z  0.2 f  3 f
3
, где значения x лежат в пределах 0…4, а F  0 … 9.

Лабораторная работа 12. Проведение математических расчетов в рабочей


области

ЗАДАНИЕ НА ЛАБОРАТОРНЫЙ ПРАКТИКУМ

1 Вычислить табличное значение заданного выражения-функции f(x) для всех


элементов заданной таблицы чисел — матрицы A (задать x = A, записать формулу
вычисления f(x),и получить результат в виде матрицы того же размера, что и исходная
матрица, варианты заданий

2. Выполнить аппроксимацию данных полиномом и построить графики.


Задать два вектора x и y одинаковой размерности с координатами точек графика
некоторой функциональной зависимости и построить график y(x) (функция plot(x,y)).
Выполнить аппроксимацию заданных точек функции по методу наименьших
квадратов полиномом заданной степени (n = 2 - 5) (функция polyfit).
Выполнить вычисление значений аппроксимирующего полинома в точках,
определяемых аргументом - вектором x и занести полученные значения в вектор z
(функция polyval). Построить график z(x) и сравнить его с заданным графиком y(x).
Графики строить в одном окне (plot(x,y, x,z)). На рисунок графика нанести сетку
командой grid.
Оценить качество приближения по разности y(xi) - z(xi) .

Часть 2. Анализ динамических объектов с использованием программных


средств системы MATLAB и SIMULINK
Цели работ: Ознакомление с пакетом прикладных программ Control System
Toolbox системы MATLAB, предназначенным для работы с линейными
стационарными системами и интерактивным пакетом SIMULINK для моделирования
линейных и нелинейных динамических систем.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ РАБОТ


Классы вычислительных объектов в MATLAB

Классом в MatLAB принято называть определенную форму представления


вычислительных объектов в памяти компьютера в совокупности с правилами
(процедурами) их преобразования. Класс определяет тип переменной, а правила —
операции и функции, которые могут быть применены к этому типу. В свою .очередь,
тип определяет объем памяти, которая отводится под запись переменой в память и
структуру размещения данных в этом объеме. Операции и функции, которые могут
быть применены к определенному типу переменных, образуют методы этого класса.

Основные классы объектов в MatLAB


В системе MatLAB определены 6 встроенных классов вычислительных
объектов:
double Числовые массивы и матрицы действительных или комплексных чисел с
плавающей запятой в формате двойной точности, наиболее
распространенный тип переменных в системе MatLAB, с которым
оперирует большинство функций и процедур
sparse Двумерные комплексные разреженные матрицы двойной точности.
Разреженная структура применяется для компактного хранения матриц
с незначительным количеством ненулевых элементов. Разреженные
матрицы требуют применения специальных методов для решения задач
char Массивы символов - переменные, являющиеся совокупностью символов,
каждый символ занимает 16 битов, эту совокупность часто называют
строкой
struct Массивы записей (структуры). Объекты класса struct состоят из
нескольких составляющих, которые называются полями, каждое из
которых имеет собственное имя
cell Массивы ячеек Переменные класса cell (ячейки) являются совокупностью
некоторых других массивов. Массивы ячеек позволяют объединить
связанные данные (возможно, разных типов и размеров) в единую
структуру
uints Массивы 8-разрядных целых чисел без знаков, позволяет хранить целые
числа от 0 до 255 в 1/8 части памяти, необходимой для чисел двойной
точности. Никакие математические операции для этого класса данных не
определены.

Каждому типу данных соответствуют собственные функции и операторы


обработки, т.е. методы.

Производные классы MatLAB


Рассмотренные выше классы объектов построены таким образом, что на их
основе могут быть созданы новые классы объектов.
В языке MatLAB отсутствует необходимость и возможность предварительного
объявления типа или класса переменных, которые будут использованы. То же самое
относится и к объектам любых вновь создаваемых классов.
Объекты класса создаются в виде структур (записей), т.е. относятся к потомкам
(наследникам) класса struct. Поля структуры и операции с полями являются
доступными только внутри методов данного класса.

Все М-файлы, определяющие методы для объектов данного класса, должны


размещаться в специальном каталоге, который называется каталогом класса и
обязательно имеет имя, состоящее из знака @ (коммерческое "эт") и имени класса, т.е.
имеет вид @<имя класса>. Каталог класса должен быть подкаталогом одного из
каталогов, описанных в путях доступа системы MatLAB, но не самим каталогом.
Каталог класса обязательно должен содержать М-файл с именем, совпадающим с
именем класса. Этот файл называют конструктором класса. Назначение такого М-
файла — создавать объекты этого класса, используя данные в виде массива записей
(структуры) и приписывая им метку класса.
В системе MatLAB на этой основе создан и используется встроенный класс
объектов sym, с которым работает пакет символьных вычислений Symbolic Math
Toolbox, и который позволяет выполнять вычисления с символьными переменными и
матрицами. Пакет Control System Toolbox использует класс объектов LTI и три его
дочерних подкласса tf, zpk, ss, которые поддерживают алгоритмы анализа линейных
стационарных систем автоматического

Классы пакета CONTROL


Пакет прикладных программ (ППП) Control System Toolbox (сокращенно —
CONTROL) сосредоточен в подкаталоге CONTROL каталога TOOLBOX системы
MatLAB. Основными вычислительными объектами этого ППП являются:
– родительский объект (класс) LTI (Linear Time-Invariant System — линейные,
инвариантные во времени системы); в русскоязычной литературе за этими системами
закрепилось название линейные стационарные системы (ЛСС).
– дочерние объекты (классы), т.е. подклассы класса LTI, соответствующие трем
разным представлениям ЛСС:
1. TF-объект (Transfer Function — передаточная функция);
2. ZPK-объект (Zero-Pole-Gain — нули-полюсы-коэффициент передачи);
3. SS-объект (State Space — пространство состояния).
Объект LTI, как наиболее общий, содержит информацию, независящую от
конкретного представления ЛСС (непрерывного или дискретного), а также от имен
входов и выходов. Дочерние объекты определяются конкретной формой
представления ЛСС, т.е. зависят от модели представления. Объект класса TF
характеризуется векторами коэффициентов числителя и знаменателя рациональной
передаточной функции. Объект класса ZPK характеризуется векторами, содержащими
значения нулей, полюсов передаточной функции системы и коэффициента передачи
системы. Наконец, объект класса SS определяется четверкой матриц, описывающих
динамическую систему в пространстве состояния. Ниже приведены основные
атрибуты этих классов, их обозначения и смысл.

Атрибуты (поля) LTI-объектов


Ниже NU, NY и NX определяют число входов (вектор U), выходов (вектор Y) и
переменных состояния (вектор X) ЛСС соответственно; ОМ (SISO) — одномерная
система, т.е. система с одним входом и одним выходом; MM (MIMO) — многомерная
система (с несколькими входами и выходами).

Перечень основных процедур пакета CONTROL, сгруппированных по


функциональному назначению

Создание LTI-моделей
ss Создает модель пространства состояния
zpk Создает модель нули/полюсы/коэффициенты передачи
tf Создает модель передаточной функции
dss Специфицирует описатель модели пространства состояния
fflt Специфицирует цифровой фильтр
set Установка/модификация атрибутов LTI-модели
Itiprops Детальная справка об атрибутах LTI-моделей
Извлечение данных
ssdata Извлечение матриц пространства состояния
zpkdata Извлечение данных о нулях/полюсах/КП
tfdata Извлечение числителя(-лей) и знаменателя(-лей) ПФ
dssdata Получение информации о версии описателя SSDATA
get Получение информации о значениях свойств LTI-модели
Получение информации об отдельных характеристиках модели
class Информация о типе модели (ss, zpk или tf)
size Информация о размерах матриц входа и выхода
isempty Проверка, является ли LTI-модель пустой
isct Проверка, является ли модель непрерывной
isdt Проверка, является ли модель дискретной
isproper Проверка, является ли модель правильной
issiso Проверка, имеет ли модель один вход и один выход
isa Проверка, является ли LTI-модель моделью заданного типа
Преобразование системы
ss Преобразование в пространство состояния
zpk Преобразование в нули/полюсы/КП

Работа с передаточными функциями с использованием функций пакета


CONTROL
Передаточная функция формируется функцией tf, в качестве аргументов
задаются коэффициенты полиномов числителя и знаменателя в порядке убывания
степени оператора s:

>> tf([3 1], [1 1 1])

Transfer function:
3 s + 1
-----------
s^2 + s + 1

Целесообразно выполнить присвоение модели, представляемой данной


передаточной функцией некоторой переменной:
>> w1 = tf([3 1], [1 1 1])

Transfer function:
3 s +
1
-----------
s^2 + s + 1

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


необходимо внимательно следить за получаемыми результатами. Например,
передаточную функцию системы с единичной отрицательной обратной связью можно
получить с использованием операторов Matlab:
>> w1 = tf([3 1], [1 1 1])
Transfer function:
3 s + 1
-----------
s^2 + s + 1
>> W1 = w1/(1+w1)
Transfer function:
3 s^3 + 4 s^2 + 4 s + 1
-----------------------------
s^4 + 5 s^3 + 7 s^2 + 6 s + 2

Однако результат не вполне понятен, т.к. увеличился порядок системы.


Преобразование с помощью функции feedback дает иной результат:
>> W2 = feedback(w1,1)
Transfer function:
3 s + 1
-------------
s^2 + 4 s + 2

Выполним преобразование передаточной функции W1 = w1/(1+w1) в zpk


форму:
>> zpk(W1)
Zero/pole/gain:
3 (s+0.3333) (s^2 + s + 1)
-----------------------------------
(s+3.414) (s+0.5858) (s^2 + s + 1)

Из полученного результата видно, что в числителе и знаменателе присутствует


множитель второго порядка (s^2 + s + 1), который соответствует знаменателю
передаточной функции прямой цепи и подлежит сокращению в результирующей
формуле. Проверяем:
>> zpk(W2)
Zero/pole/gain:
3 (s+0.3333)
--------------------
(s+3.414) (s+0.5858)

Результат соответствует формуле для W1 при сокращении сомножителя (s^2 + s


+ 1).

Анализ свойств динамической системы


При анализе системы, состоящей из нескольких блоков, возникает задача
получения передаточной функции для всей системы или для подсистемы,
включающей в себя ряд блоков.
Для выполнения преобразований целесообразно задать передаточные функции
всех блоков системы, а затем выполнять расчеты для подсистем и системы в целом.
Например, для расчета параметров передаточной функции силового
гиростабилизатора можно написать следующую программу.
% исходные данные
H = 2000; Jp = 0.8;
Jst = 125; Dst = 300; Dp = 0;
Kr = 50000;
% расчет параметров
Omega = H * sqrt(1+Dst*Dp/H^2)/sqrt(Jst * Jp);
t0 = 1/Omega;
dzeta = (Dp/(2*H))/sqrt(Jst/Jp)+(Dst/(2*H))*sqrt(Jp/Jst))
*(1/sqrt(1+(Dst*Dp)/H^2));

t1 = 2*t0;
% формирование
передаточных функций w1 =
tf([Kr/H],[1 0]);
w2 = tf([1],[t0^2 2*t0*dzeta 1]);
w3 = tf([1], [t1 1])*tf([1], [t1 1]); % корректирующее
звено
W = w1 * w2 * w3;

В результате получена передаточная функция


>> W
Transfer function:
25
--------------------------------------------------------------
2.5e-009 s^5 + 5.06e-007 s^4 + 0.0001262 s^3 + 0.02006 s^2 + s

Основы работы с системой Simulink


SIMULINK является программной системой интерактивного моделирования и
позволяет использовать вычислительные возможности MATLAB для решения
широкого круга задач моделирования и анализа систем.
Для вызова подсистемы Simulink необходимо задать команду simulink в
командной строке MATLAB или нажать кнопку Simulink на панели инструментов
MATLAB. При этом открывается окно Simulink Library Brouser – библиотека
Simulink. Окно библиотеки содержит позиции меню File Edit View Help и панель
инструментов.
Для дальнейшей работы есть возможность создать новую модель или открыть
файл модели, созданный ранее, выполнив команду из меню или нажав кнопку панели
инструментов.
Модель состоит из блоков и связей, или линий передачи сигналов. Блоки
сгруппированы по назначению, группы отображаются в виде иерархической
структуры в окне библиотеки. Нужный блок можно найти, набрав егь название в
строке поиска и нажав кнопку Find Block в строке инструментов (бинокль).
Для того, чтобы создать новую модель, следует нажать кнопку Create a new
model на панели инструментов библиотеки или выполнив соответствующую команду
из меню File. При этом открывается новое окно – поле сборки модели. Если
выполняется команда открытия ранее созданного файла, открывается окно с моделью,
собранной ранее.

Для "сборки" схемы модели блок из окна библиотеки необходимо перетащить в


окно (поле сборки) новой модели. Двойной щелчок по блоку открывает окно
установки параметров.
Более сложные блоки требуют задания большего числа параметров, например,
для генератора необходимо ввести форму колебаний, амплитуду и частоту, причем
частоту можно задать в единицах Герц или рад/с.
Анализ свойств динамической системы
Для анализа свойств динамической системы, созданной в Simulink можно
применить LTI-viewer.

Для обозначения входа и выхода можно также указать на точку схемы (линию
связи блоков) мышью и нажав правую кнопку. При этом выпадает меню, в котором
следует выбрать позицию Linearisation Points и далее Input или Output. Затем, через
меню Tools-Control Design- Linear Analysis запускаем LTI-viewer.

Лабораторная работа 13. Построение модели решения системы


дифференциальных уравнений в рабочей области (передаточная функция)

Передаточная функция W (s) линейной стационарной системы от комплексной


переменной s определяется как отношение преобразования Лапласа выхода к
преобразованию Лапласа входа при нулевых начальных условиях
 
Y ( s)
W ( s)  , Y ( s)   y (t )e st dt , U ( s)   u (t )e st dt .
U ( s) 0 0

В качестве примера рассмотрим структурную модель решения следующей


системы дифференциальных уравнений:

 x1  10 u  0.04 y

 d 2 x2 dx
 0.05 2
 0.4 2  x2  20 x1
 dt dt
 dy
0.25 dt  x2
Здесь переменная u является внешним сигналом для системы, а переменная y -
выходом.
Запишем систему уравнений в операторной форме:
 x1  s   10 u  s   0.04 y  s 

0.05 s x2  s   0.4 s x2  s   x2  s   20 x1  s 
2


0.25 s y ( s)  x2  s 
Первое уравнение – алгебраическое. Оно входит в структуру системы
аналогично построению модели SIMULINK. Из второго, найдем передаточную
функцию:
x2  s   0.05 s 2  0.4 s  1  20 x1  s  , откуда
x2  s  20
W2  s    .
x1  s  0.05 s  0.4 s  1
2

y s 1
Третье уравнение преобразуется W3  s    .
x2  s  0.25 s
Таким образом, можно составить укрупненную структуру системы:
u h2 h3
h1
x1 20 1 y
1 10 y
0.05s2 +0.4s+1 0.25s
Constant Gain Transfer Fcn Transfer Fcn1 To Workspace

Gain1

0.04

h4

Используя операторы создания и объединения моделей пакета Control System


Toolbox можно получить эквивалентную передаточную функцию системы.
Для нашей системы
>> sys=append(h1,h2,h3,h4);
>> h=connect(sys,[2 1 -4; 3 2 0; 4 3 0], [1], [3])

Transfer function:
16000
-----------------------
s^3 + 8 s^2 + 20 s + 64
Умножим числитель и знаменатель на постоянный коэффициент 0,0125 и
получим
>> h=h*0.0125
Transfer function:
200
------------------------
s^3 + 8 s^2 + 20 s + 64
>> h.den{1}=h.den{1}*0.0125
Transfer function:
200
---------------------------------
0.0125 s^3 + 0.1 s^2 + 0.25 s + 0.8
что соответствует ранее полученной передаточной функции.
Таким образом, использование функции connect позволяет определить передаточную
функцию системы со структурой любой сложности.
Задание на лабораторную работу
1. Составить модель вида “передаточная функция”, описываемой системой
дифференциальных уравнений в соответствии со своим вариантом (справа
приведены значения перерегулирования и времени регулирования для контроля
правильности полученного решения).

№ Уравнения  Tр
1  dx1 50,8 0,172
0.001 dt  x1  20* U  0.1x2  ;
 2
0.01 d x2  0.52 dx2  x  50x ; y  x
 dt 2 dt
2 1 2

2  dx1 36,7 0,0898


0.005 dt  x1  50* U  0.2x3  ;

 dx2
 0.02  x2  5*  x1  x2  ;
 dt
 dx3
0.5 dt  x3  10x2 ; y  x3

3  dx1 62.3 0,334
0.002 dt  x1  40* U  0.02 x3  ;

 dx2
0.05  x2  15x1 ;
 dt
 dx3
0.4 dt  x3  10*  x2  0.5 x3  ; y  x3

4  dx1 36.0 0,229
0.01 dt  x1  20* U  0.02x1  0.005 x3  ;

 dx2
0.02  x2  10 x1 ;
 dt
 dx3
0.5 dt  x3  40x2 ; y  x3

5  dx1 52.1 1.03
0.05 dt  x1  20* U  0.02 x1  0.005x3  ;

 dx2
0.05  x2  40x1;
 dt
 dx3
0.5 dt  x3  5  x2  0.1x3  ; y  x3

6  dx1 59,5 0,278
0.005 dt  x1  20* U  0.005 x3  ;

 dx2
0.02  x2  10*  x1  0.1x3  ;
 dt
 dx3
0.2 dt  x3  25 x2 ; y  x3

7  dx1 30.9 0.649
0.05 dt  x1  10* U  0.001x3  ;

 dx2
0.2  x2  40*  x1  0.02x3  ;
 dt
 dx3
0.5 dt  x3  50*  x2  0.1x3  ; y  x3

№ Уравнения  Tр
8  dx1 60.9 0.222
0.005 dt  x1  20* U  0.005 x2  0.01x3  ;

 dx2
0.04  x2  40 x1 ;
 dt
 dx3
0.5 dt  80*  x2  0.4 x3  ; y  x3

9  dx1 46.8 0.954
0.05 dt  x1  50* U  0.001x3  ;

 dx2
0.04  20*  x1  0.05x3  ;
 dt
 dx3
0.5 dt  x3  25*  x2  0.4 x3  ; y  x3

10  dx1 31.7 0.066
0.002 dt  x1  50* U  0.01x2  0.01x3  ;

 dx2
0.04  x2  10 x1 ;
 dt
 dx3
0.25 dt  x3  50x2 ; y  x3

11  dx1 55.6 0.169
 0.02  x1  20* U  0.02 x1  0.01x3  ;
dt

 dx2
0.004  x2  40*  x1  0.04x3  ;
 dt
 dx3
0.25 dt  20 x2 ; y  x3

12  dx1 50 0.288
0.005 dt  x1  40* U  0.001x3  ;

 dx2
0.04  x2  20*  x1  0.02x2  0.01x3  ;
 dt
 dx3
0.2 dt  x3  30 x2 ; y  x3

13  dx1 50.8 0.57
0.005 dt  x1  60* U  0.001x1  0.002 x3  ;

 dx2
0.2  x2  40*  x1  0.05 x2  ;
 dt
 dx3
0.5 dt  x3  20x2 ; y  x3

14  dx1 35.2 0.118
0.005 dt  x1  20* U  0.01x2  0.005 x3  ;

 dx2
0.08  x2  40*  x1  0.02 x2  ;
 dt
 dx3
0.2 dt  x3  50 x2 ; y  x3

№ Уравнения  Tр
15  dx1 40.1 0.0754
0.001 dt  x1  50* U  0.005 x2  0.05 x3  ;

 dx2
0.04  20 x1 ;
 dt
 dx3
0.8 dt  x3  20*  x2  0.02x3  ; y  x3

16  dx1 56.4 0.141
0.002 dt  x1  100* U  0.05 x2  0.5x3  ;

 dx2
0.4  x2  40*  x1  0.05x3  ;
 dt
 dx3
0.6 dt  x3  25 x2 ; y  x3

17  dx1 40.1 0.242
0.005 dt  x1  20* U  0.2 x1  0.1x3  ;

 dx2
0.05  x2  15x1 ;
 dt
 dx3
0.4 dt  x3  10*  x2  0.5x3  ; y  x3

18  38.5 2.54
 x1  20* U  0.004 x3  ;

 d 2 x2 dx
 0.05 2
 0.2 2  x2  5x1;
 dt dt
 dx3
0.4 dt  x3  10*  x2  0.5x3  ; y  x3
19  dx1 45.3 0.426
0.01 dt  x1  20* U  0.05 x2  0.08x3  ;

 dx2
0.05  x2  10 x1 ;
 dt
 dx3
0.6 dt  x3  40x2 ; y  x3

20  58.1 0.0538
0.001 dt  x1  10* U  0.05*  x1  0.5 x2   0.5 x3  ;
dx1

 dx2
0.05  x2  40*  x1  0.5x2  ;
 dt
 dx3
0.3 dt  x3  25 x2 ; y  x3

21  dx1 58.7 0.0901
0.003  x1  100* U  0.05 x3  ;
dt


 x2  40*  x1  0.5*  x2  0.05 x3   ;
dx2
0.05
 dt
 dx3
0.5 dt  x3  22*  x2  0.05x3  ; y  x3

Лабораторная работа 14. Построение модели решения системы
дифференциальных уравнений в рабочей области (пространство состояний)

Составление матриц пространства состояний системы.


Любая система, имеющая сосредоточенные параметры и, следовательно,
описываемая конечным числом обыкновенных дифференциальных и алгебраических
уравнений, может быть описана в форме переменных состояния. Для систем с большим
числом переменных состояния запись уравнений в общем виде может быть сделана
гораздо более компактной, если представить их в векторно-матричной форме.
 x  t   A  t  x  t   B  t  u  t  ;


 y t   C t  x t   D t  u t .

Обозначенные буквами A, B, C и D матрицы имеют следующие названия и
смысл:
A(t)  матрица размера nn (квадратная матрица n-го порядка), называемая
матрицей системы. Она характеризует динамические свойства системы;
B(t)  прямоугольная nr матрица, называемая матрицей управления. Она
характеризует воздействие входных переменных u j на переменные состояния xi ;
C(t)  mn матрица измерения. Она характеризует связь выходных координат yk
(как правило, это измеряемые переменные) с переменными состояния xi ;
D(t)  mr матрица. Она характеризует непосредственное воздействие входов u j
на выходы yk . В электромеханических системах управления чаще всего D(t)=0.
Если элементы матриц A, B, C и D не зависят от времени, то система
стационарна, и уравнения в переменных состояния приобретают вид:
 x  Ax  Bu;

 y  Cx  Du.
Определим матрицы системы пространства состояний для нашей системы. Для
этого нужно выполнить следующие преобразования исходной системы уравнений:
1. Избавляемся от уравнений высокого порядка, вводя дополнительные
переменные:
 x1  10 u  0.04 y
 dx
 2  x3
 dt

 dx3
0.05 dt  0.4 x3  x2  20 x1

0.25 dy  x
 dt
2

2. Избавляемся от алгебраических уравнений, и решаем все уравнения


относительно производной:
 dx2
 dt  x3

 dx3 20*10* u  20*0.04* y  0.4* x3  x2
  .
 dt 0.05
 dy x2
 dt  0.25

Теперь мы можем определить матрицы пространства состояния системы:
x2 x3 y
u
x2 0 1 0
x2 0
A  x3 1 0.4 20*0.04 ; B 
   20*10
0.05 0.05 0.05 x3
0.05
1
y 0 0 y 0
0.25
x2 x3 y
C ; D  0.
0 0 1
Введем матрицы в рабочую область и оператором ss сформируем объект
пространства состояний:
WS  ss  A, B, C, D  .
>> A=[0 1 0;-1/0.05 -0.4/0.05 -20*0.04/0.05;1/0.25 0 0]

A=
0 1 0
-20 -8 -16
4 0 0
>> B=[0; 20*10/0.05; 0]

B=
0
4000
0

>> C=[0 0 1]

C=
0 0 1
>> D=0

D=
0

>> Ws=ss(A,B,C,D)
a=
x1 x2 x3
x1 0 1 0
x2 -20 -8 -16
x3 4 0 0
b=
u1
x1 0
x2 4000
x3 0
c=
x1 x2 x3
y1 0 0 1
d=
u1
y1 0
Continuous-time model.

Модель в пространстве состояний можно построить не для всех передаточных


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

Уравнения для построения модели выбираем из таблицы задания к


лабораторной работе 13 в соответствии со своим вариантом.

Лабораторная работа 15. Анализ решения систем дифференциальных


уравнений
Операторы и функции для анализа систем
dcgain Расчет коэффициента передачи

Синтаксис:
k = dcgain(sys)
Функция k = dcgain(sys) вычисляет коэффициент передачи k для lti-модели sys.
Коэффициент передачи для lti-модели с интегратором равен бесконечности.
Внимание! Для стандартного переходного процесса, определяемого единичным
входным воздействием, значение коэффициента усиления эквивалентно
установившемуся значению переходной характеристики.

pzmap Вычисление полюсов и нулей системы


Синтаксис:
pzmap(sys)
[p, z] = pzmap(sys)
Команда pzmap(sys) указывает расположение полюсов и нулей непрерывной или
дискретной lti-модели sys на комплексной плоскости. Для одномерной lti-модели
выводятся полюсы и нули ее передаточной функции; для многомерной lti-модели -
полюсы и передаточные нули. Полюсы изображаются маркером х, а нули - о.
Функция [р, z] = pzmap(sys) возвращает полюсы и передаточные нули в виде
векторов-столбцов р и z. План расположения нулей и полюсов на экран не выводится.
Для наглядности можно построить линии постоянного уровня для коэффициента
демпфирования и собственной частоты на плоскости s или z, используя команды sgrid
или zgrid.
sgrid, zgrid Построение сеток постоянного уровня
Синтаксис:
sgrid zgrid
sgrid(z, wn) zgrid(z, wn)
Команды sgrid и zgrid строят сетки постоянных коэффициентов демпфирования
от 0 до 1 с шагом 0.1 и собственных частот от 0 до 10 рад/с с шагом 1 рад/с на
плоскостях s и z, соответственно.
Функции sgrid(z, wn) и zgrid(z, wn) строят сетки постоянных коэффициентов
демпфирования и собственных для значений, указанных в векторах z и wn.
Функция zgrid([ ], [ ]) строит окружность единичного радиуса.
Замечание:
Если текущая s или z плоскость содержит расположение нулей и полюсов или
график корневого годографа, то команда sgrid строит сетку координат поверх графика.
Пример: построить на s и z плоскости сетки постоянных коэффициентов демп-
фирования и собственных частот:
» subplot(1, 2, 1),sgrid
20 1

10 0.5

0 0

-10 -0.5

-20 -1
-20 -15 -10 -5 0 -1 -0.5 0 0.5 1

» subplot(1, 2, 2),zgrid

bode Построение логарифмических частотных характеристик

Синтаксис:
bode(sys)
bode(sys, w)
bode(sys1, sys2, …, sysN)
Группа команд и функций bode предназначена для расчета амплитудных и
фазовых логарифмических частотных характеристик (диаграмм Боде) для lti-моделей.
Команды bode строят на экране графики логарифмических частотных характеристик.
Функция bode выполняет только расчет характеристик, но графиков не выводит.
Логарифмические частотные характеристики применяются при анализе таких свойств
систем, как запас устойчивости по фазе и амплитуде, коэффициент передачи, ширина
полосы пропускания, реакция системы на возмущения.
Команда bode(sys) строит на экране графики логарифмических частотных
характеристик для lti-модели sys. Эта модель может быть непрерывной или
дискретной, одномерной или многомерной. В случае многомерной модели функция
bode строит множество логарифмических частотных характеристик для каждого канала
системы от входа к выходу. Диапазон частот определяется автоматически по значениям
нулей и полюсов передаточной функции системы.
Команда bode(sys, w) строит логарифмические частотные характеристики в
заданном диапазоне частот. Этот диапазон должен быть задан массивом ячеек w =
{wmin, wmax}. Для построения логарифмических частотных характеристик на
заданных частотах создается вектор значений частот w. Для создания логарифмической
сетки следует применить команду logspace. Единица измерения частоты - рад/с.
Команды bode(sysl, sys2,..., sysN), bode(sysl, sys2,..., sysN, w) позволяют
построить частотные характеристики для нескольких lti-моделей на одном графике.
Все модели должны иметь одинаковое количество входов и выходов, среди них могут
быть как непрерывные, так и дискретные.
Пример:
Построить логарифмические частотные характеристики для непрерывной lti-
модели с одним входом и одним выходом.
g = tf([1 0.1 7.5],[1 0.12 9 0 0]);
bode(g)
Перейдем от непрерывной модели к дискретной с периодом дискретности Ts =
0,5 с и построим на одном графике их частотные характеристики:
» gd=c2d(g,0.5)

Transfer function:
0.121 z^3 + 0.07256 z^2 + 0.06758 z + 0.1146
----------------------------------------------------------
z^4 - 2.138 z^3 + 2.218 z^2 - 2.021 z + 0.9418
Sampling time: 0.5
» bode(g,'k',gd,'k:')

margin Определение запасов устойчивости по фазе и модулю

Синтаксис:
margin(sys)
[Gm, Pm, Wcg, Wcp] = margin(sys)
[Gm, Pm, Wcg, Wcp] = margin(mag, phase, w)

Группа команд и функций margin вычисляет запасы устойчивости по фазе и


модулю, а также соответствующие частоты для lti-моделей одномерных разомкнутых
систем. Значения запасов устойчивости указывают, на сколько частотная
характеристика разомкнутой системы удалена от критической точки (-1 +j0).
Запас устойчивости по модулю - это значение амплитудной частотной
характеристики на частоте, где фазовая частотная характеристика имеет значение -180
град.
Запас устойчивости по фазе - это разность между значением фазовой частотной
характеристики и - 180 град на частоте среза.
Частота среза - это частота, где значение амплитудной частотной характеристики
равно 1.0, или 0 дБ.
Как правило, запас устойчивости по фазе в пределах между 30 и 60 град
обеспечивает приемлемый компромисс между устойчивостью и полосой пропускания.
Команда margin(sys) строит логарифмические частотные характеристики
разомкнутой системы с указанием запасов ее устойчивости. Команда применима как к
непрерывным, так и к дискретным lti-моделям.
Функция [Gm, Pm, Wcg, Wcp] = margin(sys) рассчитывает запас устойчивости
по амплитуде Gm, запас устойчивости по фазе Pm и соответствующие частоты Wcg и
Wcp для данной модели одномерной разомкнутой системы sys. Если имеется несколько
точек пересечения амплитудной характеристики на уровне 0 дБ и фазовой - на уровне -
180 град, то возвращаются наименьшие значения соответствующих запасов
устойчивости.
Пример:
Рассчитать запасы устойчивости по фазе и модулю, если задана следующая
дискретная передаточная функция разомкнутой системы:

» hd=tf([0.04798 0.0464],[1 -1.81 0.9048],0.1)


Transfer function:
0.04798 z + 0.0464
--------------------------
z^2 - 1.81 z + 0.9048
Sampling time: 0.1

» [Gm,Pm,Wcg,Wcp]=margin(hd);
» [20*log10(Gm),Pm,Wcg,Wcp]

ans =
6.2424 13.5712 5.4374 4.3544
Для графического отображения этих значений

» margin(hd)

step Переходная функция


Синтаксис:
step(sys)
step(sys, t)
step(sys1, sys2,..., sysN)
step(sys1, 'PlotStytel',..., sysN, 'PlotStyleN')
[y, t, x] = step(sys)
[y, t, x] = step(sys, t)

Команды и функции step рассчитывают и строят реакцию модели на единичную


ступенчатую функцию. Эта реакция называется переходной функцией. Для моделей,
заданных в пространстве состояний, начальные условия предполагаются нулевыми.
Команда step(sys) строит график переходной функции для lti-модели sys. Эта
модель может быть непрерывной и дискретной, одномерной и многомерной. Для
многомерной модели строится набор переходных функций по каждому каналу входа-
выхода. Продолжительность моделирования определяется автоматически так, чтобы
отобразить основные особенности переходных процессов.
Команда step(sys, t) позволяет явно указать продолжительность моделирования
либо в виде момента окончания t = Tfinal в секундах, либо в виде вектора t = 0:dt:Tfinal.
Для дискретных моделей значение dt должно соответствовать периоду дискретности;
для непрерывных моделей значение dt должно быть достаточно малым, чтобы учесть
наиболее быстрые изменения переходного процесса.
Команды step(sysl, sys2, ..., sysN), step(sysl, sys2, ..., sysN, t) позволяют на одном
графике построить переходные функции для нескольких Iti-моделей sysl,..., sysN. Все
модели должны иметь одинаковое число входов и выходов.
Функции [у, t, х] = step(sys), [у, t, x] = step(sys, t) вычисляют переходные
функции для вектора выходов у, вектор моментов времени t, значения переменных
состояния х. Графики при этом не строятся.
Для одномерных моделей массив у имеет следующие размеры: число строк равно
длине вектора t, а число столбцов - числу выходов. Аналогично массив х имеет число
строк, равное длине вектора t, и число столбцов, равное количеству переменных
состояния.
Пример: построить переходную функцию для ss-модели 2-го порядка
» a=[-0.5572 -0.7814; 0.7814 0];
» b=[1 -1; 0 2];
» c=[1.9691 6.4493];
» sys=ss(a, b, c, 0);
» H=tf(sys)
Transfer function from input 1 to output:
1.969 s + 5.039
------------------------------
s^2 + 0.5572 s + 0.6106

Transfer function from input 2 to output:


10.93 s - 0.9297
------------------------------
s^2 + 0.5572 s + 0.6106

» step(sys)

Для непрерывной модели строится эквивалентная дискретная модель с


экстраполятором 0-го порядка. Период дискретности выбирается автоматически,
исходя из динамических свойств модели, за исключением случая, когда задается вектор
времени t = 0:dt:Tf, в этом случае dt используется как значение периода дискретности.

impulse Импульсная функция

Синтаксис:
impulse(sys)
impulse(sys, t)
impulse(sys1, sys2,..., sysN)
impulse(sys1, sys2, ...,sysN, t)
Команды и функции impulse рассчитывают и строят реакцию на импульсную
функцию Дирака для непрерывной модели или на единичный импульс для дискретной
модели. Эта реакция называется импульсной переходной или весовой функцией. Для
моделей, заданных в пространстве состояний, начальные условия предполагаются
нулевыми.
Команда impulse(sys) строит график импульсной переходной функции для lti-
модели sys. Эта модель может быть непрерывной и дискретной, одномерной и
многомерной. Для многомерной модели строится набор импульсных переходных
функций по каждому каналу входа-выхода. Продолжительность моделирования
определяется автоматически так, чтобы отобразить основные особенности переходных
процессов.
Команда impulse(sys, t) позволяет явно указать продолжительность мо-
делирования либо в виде момента окончания t = Tfinal в секундах, либо в виде вектора t
= 0:dt:Tfinal. Для дискретных моделей значение dt должно соответствовать периоду
дискретности; для непрерывных моделей значение dt должно быть достаточно малым,
чтобы учесть наиболее быстрые изменения переходного процесса.
Команды impulse(sysl, sys2, ..., sysN), impulse(sysl, sys2, ..., sysN, t) позволяют на одном
графике построить импульсные переходные функции для нескольких lti-моделей
sysl,..., sysN. Все модели должны иметь одинаковое число входов и выходов.

lsim Реакция системы на произвольный сигнал


Синтаксис:
lsim(sys,u,t)

Команда выполняет морасчет реакции системы, заданной объектом sys, на


произвольный входной сигнал u(t). Вектор t задает равномерные промежутки времени,
матрица должна иметь столько же элементов, сколько точек содержится в векторе t. В
идеальном случае переменная u вычисляется на основе вектора времени. Например:
построим реакцию системы на сигнал, определяемый выражением 10 1  e0.8 t  на
отрезке времени 0…1с. Для этого задаем вектор времени t  0 : 0.005 :1; и определяем
вектор значений переменных u  10* 1  exp  0.8* t   ; . Теперь можно расчитать реукцию
системы, описываемой объектом sys на этот сигнал с помощью команды lsim  sys, u, t  .
Если требуется расчитать переходный процесс не при единичном, а каком-либо другом
значении ступенчатого входного сигнала, то сначала определяем время процесса
командой step(sys) , затем формируем вектор времени t , после чего можно
сформировать ступенчатый сигнал нужной амплитуды командами u  t; u :  20 Первый
оператор нужен для создания вектора одинакового размера с вектором времени.
gensig Генерация сигналов для команды lsim
Синтаксис:
[u, t) = gensig(type, tau)
[u, t] = gensig(type, tau, Tf, Ts)
Первая команда создает скалярный сигнал u вида «type» и с периодом tau (в сек.).
Имеются следующие виды сигналов: 'sin' — синусоида; 'square' — прямоугольные
колебания; 'pulse' — периодически повторяющиеся импульсы. Команда возвращает
вектор t моментов выборки и вектор u значений сигнала в эти моменты. Все
генерируемые сигналы имеют единичную амплитуду. Вторая команда дополнительно
задает время действия сигнала T f и интервал между моментами выборки TS .

Задание на лабораторную работу


1. Для tf-модели своего варианта, полученной в лабораторной работе №13
получить эквивалентные объекты в ss и zpk форме. Проверить эквивалентность их
характеристик.
2. Получить импульсную характеристику своей системы и сравнить время
переходного процесса со временем протекания импульсной характеристики.
3. Рассчитать нули и полюса системы. Построить карту расположения корней
характеристического уравнения.
4. Определить запасы устойчивости системы по модулю и по фазе.
5. Определить коэффициент усиления системы.
6. Определить уровень установившегося выходного сигнала при подаче на вход
системы задания равного 2,5

Лабораторная работа 16. Решение систем дифференциальных уравнений


в пакете Simulink

В качестве примера рассмотрим структурную модель решения следующей


системы дифференциальных уравнений:

 x1  10 u  0.04 y

 d 2 x2 dx
 0.05 2
 0.4 2  x2  20 x1
 dt dt
 dy
0.25 dt  x2
Здесь переменная u является внешним сигналом для системы, а переменная y -
выходом.
Определим структуру решения первого уравнения системы:
u
x1
1 10

Constant Gain

Gain1

0.04

Внешняя переменная u задается блоком Constant = 1.


Добавим структурное решение второго уравнения. Принцип структурного
решения дифференциального уравнения заключается в подаче на вход интегратора
величины, равной производной выходной переменой уравнения. Решив уравнение
относительно старшей производной получим:
dx2
20 x1  0.4  x2
d 2 x2 dt
 ,
dt 2 0.05
что эквивалентно следующей структуре:
x1
20 d2x2/dt2 dx2/dt
x2
1 1
1/0.05
Gain3 s s
Gain Integrator Integrator1

Gain1

0.4

Третье уравнение имеет следующую структуру решения:


dy/dt
x2 y
1
1/0.25
s

. Gain Integrator

Таким образом, общее решение системы дифференциальных уравнений имеет


следующий вид:
u
x1
1 10 20 d2x2/dt2 dx2/dt
x2 dy/dt y
1 1 1
Constant Gain 1/0.05 1/0.25 y
Gain4 s s s
Gain2 Integrator Integrator1 Gain5 Integrator2 To Workspace

Gain3

0.4

Gain1

0.04

Для проведения линейного анализа качества работы системы необходимо


добавить в модель входную и выходную точки линеаризации (в ранних версиях пакета
– порты ввода вывода). Это делается правым кликом на линиях входного и выходного
сигналов системы с использованием контекстного меню: Linearization Point –> Input
Point (Output Point).
Затем необходимо выполнить собственно расчет системы вызовом блока ltiview :
Tools –> Control Design –> Linear Analysis. В открывшемся окне нажать кнопку
Linearize Model, расположенную в нижней части окна.

Моделирование нелинейностей
В отличие от моделей, создаваемых в рабочей области путем составления
передаточной функции и матриц пространства состояний, модель в системе SIMULINK
может включать в себя нелинейные объекты. Наиболее характерными нелинейными
блоками являются:

Saturation – ограничитель (выполняет ограничение уровня выходного


сигнала), в параметрах задаются верхний порог сигнала (Upper
limit) и нижний (Lower limit) пороги сигнала.
Dead Zone – зона нечувствительности, в параметрах задается нижний и
верхний пороги зоны (Start of dead zone, End of dead zone).

Rate Limiter –ограничение скорости выходного сигнала, в параметрах


задаются уровни скорости при увеличении и уменьшении выходного
сигнала (Rising slew rate, Falling slew rate).

Relay – реле, в параметрах задаются точки переключения (Switch on


point и Switch off point), в также величины сигналов в режимах
«включено» (Output when on) и «выключено» (Output when off).

Задание на лабораторную работу


1. Составить модель в системе SIMULINK.
2. Определить показатели качества управления для заданного варианта системы
автоматического управления.
3. Проверить адекватность полученной модели и моделей вида "передаточная
функция" и "система пространства состояний".
4. Ограничить уровень выходного сигнала первого интегратора модели пределами
(-10 ÷ 10) и сравнить результаты моделирования с исходным вариантом.
Провести аналогичное исследование с величиной входного сигнала равным 10.
5. Ограничить чувствительность первого интегратора модели к входному сигналу
зоной (-0,05 ÷ 0,05) и сравнить результаты моделирования с исходным
вариантом. Провести аналогичное исследование с величиной входного сигнала
равным 10.
6. Ограничить скорость нарастания выходного сигнала первого интегратора модели
пределами (-1 ÷ 1) и сравнить результаты моделирования с исходным вариантом.
Провести аналогичное исследование с величиной входного сигнала равным 10.

Лабораторная работа 17. Разработка функций исследования решения


уравнений

Управление программой
find Поиск индексов и значений элементов массива по
заданному условию
Функция find определяет индексы элементов массива, которые удовлетворяют
заданному логическому условию. Как правило, она используется с целью создания
шаблонов для сравнения и образования массивов индексов. В наиболее
употребительной форме функция к = find(x <условие>) возвращает вектор индексов
тех элементов, которые удовлетворяют заданному условию,
А = magic(4)
А=
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
k = find(A > 8); A(k) = 100
100 2 3 100
5 100 100 8
100 7 6 100
4 100 100 1

Функция вида [i, j] = find(x) позволяет получить индексы ненулевых элементов


прямоугольного массива.
Функция вида [i, j. s] = find(x) возвращает, кроме того, и их значения в виде вектора s.
Существует 4 основных оператора управления последовательностью исполнения
инструкций:
 оператор условия if в сочетании с операторами else и elseif выполняет группу
инструкций в соответствии с некоторыми логическими условиями;
 оператор переключения switch в сочетании с операторами case и otherwise
выполняет различные группы инструкций в зависимости от значения некоторого
логического условия;
 оператор условия while выполняет группу инструкций неопределенное число
раз в соответствии с некоторым логическим условием завершения;
 оператор цикла for выполняет группу инструкции фиксированное число раз.
Все операторы управления включают оператор end, чтобы указать конец блока, в
котором действует этот оператор управления.
if …else … elseif … end Оператор условия
Синтаксис:
if условие if условие if условие
инструкции инструкции инструкции
end else elseif условие
инструкции инструкции
end else
инструкции
end

Оператор условия if ... end вычисляет некоторое логическое выражение и


выполняет соответствующую группу инструкций в зависимости от значения этого
выражения. Если логическое выражение истинно, то MATLAB выполнит все
инструкции между if и end, а затем продолжит выполнение программы в строке после
end. Если условие ложно, то MATLAB пропустит все утверждения между if и end и
продолжит выполнение в строке после end.
Если логическое условие включает переменную, не являющуюся скаляром, то
утверждение будет истинным, если все элементы отличны от нуля.
Операторы if ... else ... end и if ... elseif ... end создают дополнительные ветвления
внутри тела оператора if:
 оператор else не содержит логического условия. Инструкции, связанные с
ним, выполняются, если предшествующий оператор if (и, возможно, elseif) ложен;
 оператор elseif содержит логическое условие, которое вычисляется, если
предшествующий оператор if (и, возможно, elseif) ложен. Инструкции, связанные с
оператором elseif, выполняются, если соответствующее логическое условие истинно.
Оператор elseif может многократно использоваться внутри оператора условия if.
switch … case … otherwise .. end Оператор переключения
Синтаксис:
switch <выражение>
case <значение1>
инструкции % выполняются когда <выражение> = <значение1>
case <значение2>
инструкции % выполняются когда <выражение> = <значение2>

otherwise
инструкции
% выполняются если <выражение> не совпало ни с одним из значений
end
Оператор переключения switch выполняет ветвления, в зависимости от значений
некоторой переменной или выражения.
Оператор переключения включает:
 заголовок switch, за которым следует вычисляемое выражение (скаляр или
строка);
 произвольное количество групп case. Заголовки групп состоят из слова case, за
которым следует возможное значение выражения, расположенное на одной строке.
Последующие строки содержат инструкции, которые выполняются для данного
значения выражения. Выполнение продолжается до тех пор, пока не встретится
следующий оператор case или оператор otherwise. На этом выполнение блока switch
завершается;
 группа otherwise. Заголовок включает только слово otherwise, начиная со
следующей строки размещаются инструкции, которые выполняются, если значение
выражения оказалось не обработанным ни одной из групп case. Выполнение
завершается оператором end;
 оператор end - является последним в блоке переключателя.
Оператор переключения switch работает, сравнивая значение вычисленного
выражения со значениями групп case. Для числовых выражений оператор case выпол-
няется, если <значение>= =<выражение>. Для строковых выражений оператор case
истинен, если strcmp(значение, выражение) истинно.
Оператор switch может использовать множественное условие в единственной
группе case посредством включения выражения case, если выражение для этого
условия записано в виде массива ячеек:
switch var
case 1
disp(‘1’)
case (2, 3, 4)
disp(‘2 или 3 или 4’)
case 5
disp(‘5’)
end;

while … end Оператор с неопределенным числом операций


Синтаксис:
while <выражение>
инструкции
end

Оператор цикла с неопределенным числом операций while ... end многократно


выполняет инструкцию или группу инструкций, пока управляющее выражение
истинно.
Если выражение использует массив, то все его элементы должны быть истинны,
чтобы продолжить выполнение. Чтобы привести матрицу к скалярному значению,
следует использовать функции any и all.
Выход из while-цикла может быть реализован с помощью оператора break.
Если в операторе while управляющее условие является пустым массивом, то
такое условие ложно, то есть оператор вида while A, SI, end никогда не выполнит
инструкции SI. если А - пустой массив.

Пример:
Этот цикл с неопределенным числом операций находит первое целое число п,
для которого n! записывается числом, содержащим 100 знаков:
n = 1;
while prod(1:n) < 1e100
n = n + 1;
end

for … end Оператор цикла с определенным числом операций


Синтаксис:
for <переменная цикла> = <начальное значение>:<приращение>:<конечное
значение>
инструкции
end

Оператор цикла for ... end выполняет инструкцию или группу инструкций
предопределенное число раз. По умолчанию приращение равно 1. Можно задавать
любое приращение, в том числе отрицательное. Для положительных индексов
выполнение завершается, когда значение индекса превышает <конечное значение>; для
отрицательных приращений выполнение завершается, когда индекс становится меньше
чем <конечное значение>.
Допустимы вложенные циклы типа:
for i = 1 : m
for j = 1 : n
A(i, j)=1/( i + j - 1);
end
end
Использование массива в качестве переменной цикла. В качестве переменной
цикла for могут использоваться массивы.
Пример: рассмотрим массив А размера mn. Оператор цикла
for i = A
инструкции
end
определяет переменную цикла i как вектор А(:, k). Для первого шага цикла k
равно 1; для второго - k равно 2 и так далее, пока k не достигнет значения n. То есть
цикл выполняется столько раз, сколько столбцов в матрице А. Для каждого шага i - это
вектор, содержащий один из столбцов массива А.

Задание на лабораторную работу


1. Для системы дифференциальных уравнений своего варианта разработать файл-
функцию определения зависимости показателей качества переходной характеристики
объекта (время регулирования и перерегулирование, наименование показателя является
входным аргументом функции) от двух вариативных параметров системы
(подчеркнуты в уравнениях):
 установившееся значение переходной характеристики определяется функцией
dcgain();
 значения перерегулирования и времени регулирования можно получить
оператором stepinfo
>> stepinfo(h)

ans =

RiseTime: 0.1426
SettlingTime: 1.4786
SettlingMin: 0.8779
SettlingMax: 1.4007
Overshoot: 40.0747
Undershoot: 0
Peak: 1.4007
PeakTime: 0.3684

>>
 значение параметров качества переходной характеристики определять только
при условии устойчивости системы для текущих величин переменных параметров
(устойчивость системы определяется отсутствием нулевых или положительных корней
характеристического уравнения). Вектор корней можно получить используя функцию
pole();
 полученные результаты вывести в виде плоскости изменения исследуемого
показателя качества;
 подтвердить достоверность исследований, определив базовую точку (при
исходных значениях вариативных параметров) значения исследуемого показателя
качества на полученной плоскости путем построения контура полученной плоскости
для контрольного значения параметра. Формат функции для такого построения:
[c,h] = contour(X,Y,Z,[v v]); clabel(c,h)
где X, Y  плоскости изменения вариативных параметров;
Z  плоскость рассчитанных значений исследуемого параметра качества системы;
v  контрольное значение параметра качества системы, получаемое при исходных
значениях варьируемого параметра.

Лабораторная работа 18. Дискретные системы. Моделирование АЦП


Одним из компонентов микропроцессорного регулятора системы
автоматического управления является аналого-цифровой преобразователь (АЦП),
который преобразует входные аналоговые сигналы системы управления в цифровой
код. Основными показателями качества работы АЦП являются время и точность
преобразования. Время преобразования определяет дискретность работы
микропроцессорного регулятора во времени, т.е. осуществляет квантование входного
сигнала по времени. Это свойство присутствовало и в классическом Z-преобразовании,
однако, в микропроцессорном исполнении нельзя упускать другую особенность –
точность преобразования. Точность преобразования входного сигнала определяется
разрядностью АЦП и вносит дополнительную погрешность в работу регулятора.
Задача первого этапа моделирования микропроцессорной системы управления состоит
в определении параметров АЦП, которые обеспечивают приемлемое
функционирование системы.
Функциональная схема АЦП имеет следующий вид:
Входной
сигнал
Компаратор Ключ Счетчик
импульсов

Генератор Генератор
пилообразного прямоугольных
сигнала импульсов

При этом устройства, используемые в АЦП должны обладать следующими свойствами:


 амплитуда генератора пилообразного напряжения должны соответствовать
максимальному значению входного сигнала, а частота – времени одного аналого-
цифрового преобразования;
 частота генератора прямоугольных импульсов должна быть такой, чтобы за
время, соответствующее одному периоду генератора «пилы», количество
импульсов попавших на вход счетчика не превысило разрядности АЦП;
 счетчик импульсов должен иметь вход для управления сбросом показаний,
который будет происходить перед началом очередного периода пилообразного
сигнала;
 в систему должны поступать показания счетчика, взятые перед его сбросом.
Для реализации модели АЦП воспользуемся следующими блоками системы
Simulink:
 Sine Wave – генератор синусоидального сигнала, который будем
использовать в качестве источника входного сигнала без изменения
параметров блока заданных по умолчанию;
 Repeating Sequence – генератор пилообразного напряжения. Параметры
блока задаем следующими - Time values = [0 50е-6] – время двух
преобразований, Output values = [-1 1] – диапазон изменения входного
сигнала;
 Pulse Generator – генератор прямоугольных импульсов. Используем его для
выработки импульсов заполнения счетчика. Задаем только один параметр
блока – Period. При использовании десятиразрядного АЦП этот параметр
будет иметь значение время преобразования/210;
 Relational Operator – блок используется для сравнения уровней входного
сигнала и генератора “пилы”, формирующий логическую “1” пока сигнал
генератора не достиг уровня входного сигнала;
 Logical Operator – “логический ключ”, разрешающий подачу прямоуголных
импульсов на счетчик;
 Counter из библиотеки Signal Management / Switches and Counters – счетчик.
В качестве параметров задаем Counter size – User defined, а в поле Maximum
count value – задаем значение 210-1, соответствующее максимальному
значению десятиразрядного счетчика;
 Pulse Generator 1 – генератор сброса показаний счетчика, имеет частоту
равную частоте преобразования сигнала.

Этими блоками мы воспроизвели функциональную схему АЦП и получили


следующую модель:

>=
AND Clk
Sine Wave
Relational Up Cnt
Operator Logical
Operator Rst
Scope
Counter

Repeating Pulse
Pulse
Sequence Generator1
Generator

При запуске решения возникает ошибка. Она связана с тем, что на вход счетчика
поступает логический сигнал, в то время как свойствами блока предусмотрен целый
или вещественный тип. Дополним схему блоком автоматического преобразования типа
сигнала Data Type Conversion из библиотеки Signal Attributes.

>=
AND Convert Clk
Sine Wave
Relational Up Cnt
Operator Logical Data Type Rst
Operator Conversion Scope
Counter

Repeating Pulse
Pulse
Sequence Generator1
Generator
Теперь модель работает, однако время расчета очень велико, поскольку шаг
моделирования должен быть меньше времени преобразования сигнала, т.е. менее 50е-6
секунды. Результат моделирования выглядит следующим образом:
1200

1000

800

600

400

200

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Это связано с тем, что выходной сигнал воспринимает не только значение


счетчика в момент окончания преобразования, но и весь процесс нарастания выходной
величины. Для удаления регистрации процесса нарастания используем блок Sample and
Hold из библиотеки signal Processing BlockSet – Signal Operations.

>=
AND Convert Clk
Sine Wave
Relational Up Cnt S/H
In<L>
Operator Logical Data Type Rst
Operator Conversion Scope
Sample
Counter and Hold

Repeating Pulse
Pulse
Sequence Generator1
Generator

Результат моделирования имеет следующий вид:


1200

1000

800

600

400

200

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
В результате получен процесс, практически не отличающийся от входного
сигнала по форме, и только амплитуда сигнала напоминает о том, что это сигнал на
выходе десятиразрядного АЦП.
В matlab версий ниже 7 можно использовать блок Triggered Subsystem, который
дает аналогичный результат

>=
AND Convert Clk
Sine Wave
Relational Up Cnt In1 Out1
Operator Logical Data Type Rst
Operator Conversion Scope
Triggered
Counter Subsystem

Repeating Pulse
Pulse
Sequence Generator1
Generator
Таким образом, полноценная модель аналого-цифрового преобразователя
полностью подтверждает вывод о том, что при современном развитии аппаратной
части микропроцессоров влияние АЦП на точность работы мала. Однако на этапе
моделирования использование такой модели может позволить определить
минимальную разрядность и максимальное время преобразования сигнала, которые
обеспечат достаточную точность управления объектом.
Задание на лабораторную работу
Синусоидальный сигнал выдается в систему в цифровом виде, посредством АЦП.
Определить минимальную разрядность АЦП и максимальное время преобразования
сигнала обратной связи, обеспечивающие пульсации выходного сигнала не более
заданной величины.
Параметры сигнала:
Вариант Частота Амплитуда Точность Вариант Частота Амплитуда Точность
1 1 Гц 10 В 2% 11 1 Гц 300 В 0,1%
2 20 Гц 200 В 5 % 12 20 Гц 220 В 1%
3 100 Гц 400 В 0,5% 13 100 Гц 24 В 5%
4 500 Гц 0.5 В 0,1% 14 500 Гц 300 В 0,5%
5 750 Гц 300 В 1% 15 750 Гц 220 В 1%
6 1000 Гц 220 В 2% 16 1000 Гц 24 В 2%
7 300 Гц 24 В 5 % 17 300 Гц 400 В 0,5%
8 5 Гц 300 В 0,5% 18 5 Гц 0.5 В 0,1%
9 50 Гц 220 В 0,1% 19 50 Гц 10 В 2%
10 0.1 Гц 24 В 1% 20 0.1 Гц 200 В 5 %
Учебное издание

Методические указания

к лабораторным работам 10 - 18
по дисциплине

«ПАКЕТЫ ПРИКЛАДНЫХ ПРОГРАММ»

для студентов специальности 09.03.01


“ Информатика и вычислительная техника ”
всех форм обучения

Составитель:
Слепокуров Юрий Сергеевич

Компьютерный набор Ю.С. Слепокуров

Подписано в печать 00.00.2018 г. Формат 60˟84/16.


Бумага для множительных аппаратов.
Усл. печ. л. 0,0. Тираж 00 экз. Заказ № 00

Международный институт компьютерных технологий


б
394026, Воронеж, ул. Солнечная, 29

Оценить