Ю.С. Слепокуров
MATLAB 5. АНАЛИЗ ТЕХНИЧЕСКИХ СИСТЕМ Учебное пособие
2001 МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИ...
174 downloads
966 Views
3MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Ю.С. Слепокуров
MATLAB 5. АНАЛИЗ ТЕХНИЧЕСКИХ СИСТЕМ Учебное пособие
2001 МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ Воронежский государственный технический университет
Ю.С. Слепокуров
MATLAB 5. АНАЛИЗ ТЕХНИЧЕСКИХ СИСТЕМ Учебное пособие
2001
УДК 681.142.2 Слепокуров Ю.С. MATLAB 5. Анализ технических систем. Воронеж: Изд-во ВГТУ, 2001. 167 с. В учебном пособии изложены основные операторы системы инженерных и научных расчетов MATLAB, которые позволяют производить сложные математические и инженерные расчеты с получением результатов в графическом виде, а также операторы пакета Symbolic Toolbox, реализующие символьные вычисления. Приведено описание принципов работы с пакетом визуального моделирования SIMULINK, дано краткое описание библиотек стандартных блоков. Рассмотрен базовый набор операторов пакета Control System Toolbox, знание которых позволит произвести грамотный анализ динамических и частотных свойств технических систем любой сложности. Предназначено для студентов специальности 210300 «Роботы и робототехнические системы», изучающих курсы «Информатика», «Основы моделирования и САПР» и «Теория автоматического управления». Будет полезна студентам других специальностей, в программе обучения которых имеются подобные дисциплины. Ил. 45. Библиогр.: 6 назв. Научный редактор док. техн. наук, профессор А.И. Шиянов Рецензенты: кафедра электротехники воронежского государственного аграрного университета, зав. кафедрой канд. техн. наук В.В. Картавцев государственного аграрного университета; В. М. Попов Печатается по решению редакционно-издательского совета Воронежского государственного технического университета © Слепокуров Ю.С.., 2001 © Оформление. Издательство Воронежского государственного технического университета, 2001
ПРЕДИСЛОВИЕ Это учебное пособие предназначено для тех, кто занимается решением проблем и задач, связанных, прежде всего, с теорией автоматического управления. Язык, используемый в системе MATLAB, можно сравнить с языком BASIC по простоте его применения и принципу непосредственного исполнения (интерпретации). Ориентация MATLAB на работу с массивами делает его удобным и естественным инструментом обработки экспериментальных данных. Наличие системы SIMULINK, предназначенной для построения математических моделей объектов в виде структур, и специальных функций для анализа и синтеза этих моделей позволяет легко и просто использовать MATLAB в качестве лабораторного инструмента при изучении таких курсов, как теория автоматического управления, моделирование роботов и РТК, проектирование роботов и РТК и др. Разумеется, далеко не все возможности системы MATLAB описаны в данном пособии. То же следует сказать и о рассмотренных встроенных пакетах: SIMULINK, Control System Toolbox, Symbolic Toolbox. Это связано с тем, что MATLAB является системой, ориентированной на широкий круг научных задач, возникающих в физике, химии, и других прикладных сферах. Здесь же представлен тот круг операторов и функций, которые автор определил в качестве необходимого минимума для освоения системы MATLAB, надеясь, что это поможет студентам в решении широкого круга задач, возникающих при изучении ряда дисциплин, а также в ходе дипломного проектирования. Автор будет благодарен всем, кто выскажет свои замечания по содержанию пособия и пожелания по его дальнейшему расширению и совершенствованию.
ВВЕДЕНИЕ Система MATLAB разработана фирмой The MathWorks, Inc. ( США, г. Нейтик, шт. Массачусетс) и является интерактивной системой для выполнения инженерных и научных расчетов, ориентированной на работу с массивами данных. Система использует математический сопроцессор и допускает возможность обращения к программам, написанным на языках FORTRAN, C и C++. Система поддерживает выполнение операций с векторами, матрицами и массивами данных, алгебраическими полиномами, реализует решение нелинейных уравнений, задач оптимизации, интегрирование в квадратурах, решение дифференциальных и разностных уравнений, построение различных видов графиков, трехмерных поверхностей и линий уровня. В системе реализована удобная операционная среда, которая позволяет формулировать проблемы и получать решения в привычной для пользователя математической форме, не прибегая к рутинному программированию. Основным объектом системы MATLAB является прямоугольный числовой массив, допускающий комплексные элементы и ввод матриц без явного указания их размеров. Система позволяет решать многие вычислительные задачи за значительно более короткое время, чем то, которое потребовалось бы для написания соответствующих программ на языках программирования BASIC, PASCAL или С. Написанная на языке С система MATLAB – это в полной мере интегрированная система, которая включает графику, программируемые макроопределения, реализацию стандарта IEEE-арифметики, быстродействующий интерпретатор. Система MATLAB используется более чем в 70 ведущих институтах мира, в том числе, Стэндфордском, Калифорнийском, Кембриджском (Англия), Эйндховенском техническом университете (Нидерланды), университете Киото (Япония); Массачусетском, Калифорнийском, Хельсинкском технологических институтах; научно-исследовательских центрах – НАСА, а также в таких крупных промышленных компаниях, как Aerospace Corporation, Boeing Aerospace, General Dynamics Corporation, IBM Corporation, Lockheed, Siemens AG и др. В настоящее время существует две основных версии системы MATLAB – 5.2 и 5.3. Обе Версии ориентированы на рабочие станции и поддерживают в среде Windows операционные системы Windows 95, Windows 98 и Windows NT. Операционная среда системы MATLAB 5 − это множество интерфейсов, которые поддерживают связь этой системы с внешним миром. Это диалог с пользователем через командную строку или графический интерфейс, просмотр рабочей области и путей доступа, редактор и отладчик М-файлов, работа с файлами и оболочкой DOS, экспорт и импорт данных, интерактивный доступ к справочной информации, динамическое взаимодействие с внешними системами Microsoft Word. Excel Microsoft Word, Excel и др.
Реализуются эти интерфейсы через командное окно, инструментальную панель, системы просмотра рабочей области и путей доступа, редактор/отладчик М-файлов, специальные меню и т. п. Базовые программные средства системы MATLAB: Control System Toolbox. Набор алгоритмов MATLAB для моделирования, анализа и проектирования систем автоматического управления. Функции пакета включают наиболее традиционные методы передаточных функций и современные методы пространства состояний. С помощью пакета можно моделировать и анализировать как непрерывные, так и дискретные системы; Frequency Domain System Identification. Пакет предоставляет специализированные средства для идентификации линейных динамических систем по их временному или частотному отклику. Частотные методы направлены на идентификацию непрерывных систем, что является мощным дополнением к традиционной дискретной методике. Методы пакета могут быть применены к таким задачам, как моделирование электрических, механических и акустических систем; Fuzzy Logic Toolbox. Обладает простым и хорошо продуманным интерфейсом, позволяющим легко проектировать и диагностировать нечеткие модели. Обеспечивается поддержка современных методов нечеткой кластеризации и адаптивные нечеткие нейронные сети. Графические средства пакета позволяют интерактивно отслеживать особенности поведения системы; Higher-Order Spectral Analysis Toolbox. Пакет содержит специальные алгоритмы для анализа сигналов с использованием моментов высшего порядка. Предоставляет широкие возможности для анализа негауссовых сигналов; Image Processing Toolbox. Широкий спектр средств для цифровой обработки и анализа изображений; LMI Control Toolbox. Пакет обеспечивает интегрированную среду для постановки и решения задач линейного программирования; Model Predictive Control Toolbox. Полный набор средств для реализации стратегии предиктивного управления. Эта стратегия была разработана для решения практических задач управления сложными многоканальными процессами при наличии ограничений на переменные состояния и управления. Методы предиктивного управления используются в химической промышленности и для управления другими непрерывными процессами; µ-Analysis and Synthesis Toolbox. Пакет содержит функции для проектирования устойчивых систем управления. Использует оптимизацию в равномерной норме и сингулярный параметр µ;
NAG® Foundation Toolbox. Содержит более 240 функций, охватывающих оптимизацию, ОДУ и уравнения в частных производных, квадратуры и статистику; Neural Network Toolbox. Пакет для работы с нейронными сетями. Обеспечивает поддержку проектирования, обучения и моделирования множества известных сетевых парадигм, от базовых моделей персептрона до самых современных ассоциативных и самоорганизующихся сетей; Communications Toolbox. Полный набор возможностей для разработки, анализа и тестирования моделей цифровых и аналоговых систем и устройств связи и передачи информации. Пакет содержит более 100 функций и примерно 150 блоков SIMULINK для разработки и моделирования таких систем, как устройства радиосвязи, модемы и устройства для хранения информации; Optimization Toolbox. Пакет включает программы широко известных методов минимизации и максимизации линейных и нелинейных функций. Эти программы могут быть использованы для решения сложных задач оптимизации стоимости, надежности и качества для различных приложений; Partial Differential Equation Toolbox. Содержит средства для исследования и решения нестационарных дифференциальных уравнений второго порядка в частных производных. В пакете используется метод конечных элементов; Robust Control Toolbox. Пакет включает в себя средства для проектирования и анализа многопараметрических систем управления, устойчивость которых имеет существенное значение. Среди таких систем могут быть системы с модельными ошибками, динамика которых известна не полностью, или параметры которых могут изменяться в ходе моделирования. Алгоритмы пакета позволяют выполнять сложные вычисления, принимая во внимание изменения множества параметров; QFT Control Design Toolbox (Quantitative feedback theory). Пакет содержит функции для создания робастных систем с обратной связью. QFT – это инженерный метод, использующий частотное представление моделей для удовлетворения различных требований к качеству при наличии неопределенных характеристик у объекта. В основе метода лежит наблюдение, что обратная связь необходима в тех случаях, когда некоторые характеристики объекта неопределенны или на его вход подаются неизвестные возмущения; Signal Processing Toolbox. Пакет обеспечивает широкие возможности по созданию программ обработки сигналов для научных и технических приложений. В пакете используется разнообразная техника фильтрации и новейшие алгоритмы спектрального анализа;
Spline Toolbox. Используется для представления экспериментальных функций на больших интервалах, где аппроксимация единым полиномом невозможна; Symbolic Math Toolboxes. Пакет включает в себя вычислительное ядро системы Maple V Release 4 и позволяет пользоваться символьной математикой и вычислениями с плавающей точкой; System Identification Toolbox. Содержит инструменты для создания математических моделей динамических систем на основе наблюдаемых входных/выходных данных. Пакет снабжен графическим интерфейсом, помогающим организовать данные и создавать модели; SIMULINK. Это интерактивная среда для моделирования и анализа широкого класса динамических систем. Представляет пользователю графический интерфейс для конструирования моделей из стандартных блоков при помощи технологии “drag-and-drop”. Обширная библиотека блоков позволяет быстро моделировать различные системы без написания специальных программ; MATLAB Compiler. С помощью этого пакета можно генерировать оптимизированный С и С++ код для М-файлов. Транслируя код MATLAB на С и С++ компилятор существенно ускоряет работу приложения; MATLAB C Math Library. Библиотека предоставляет пользователю набор объектных модулей MATLAB для выполнения наиболее употребительных математических алгоритмов для численных расчетов и процедур для анализа данных. Пользователь может применять эту библиотеку совместно с MATLAB Compiler для создания процедур MATLAB, работающих в каких-либо внешних приложениях; MATLAB C++ Math Library. Эта библиотека позволяет вставлять мощные подпрограммы численных расчетов MATLAB в приложения, написанный на С++. Предназначена для создания автономных приложений, которые требуют использования мощных математических функций MATLAB; Excel Link. Программное средство для создания интерфейса связи с популярными табличными процессорами класса Excel 5.0 и выше, созданными фирмой Microsoft Inc. для офисных комплексов Microsoft Office. Обеспечивается простая связь между MATLAB и Excel, двухсторонний обмен данными, просмотр, редактирование и обработка данных из среды MATLAB в Excel, подготовка Excel-приложений и др.
1. КОМАНДЫ БАЗОВОЙ СИСТЕМЫ 1.1. Командное окно системы MATLAB После запуска программы MATLAB открывается командное окно. Инструментальная панель командного окна системы МАТ1АВ позволяет обеспечить простой доступ к операциям над М-файлами (рис. 1.1).
Рис. 1.1 Эти операции включают: создание нового М-файла (New File); открытие существующего М-файла (Open File); удаление фрагмента (Cut); копирование фрагмента (Copy); вставку фрагмента (Paste); отмену последней выполненной операции (Undo); просмотр рабочей области (Workspace Browser); просмотр путей доступа (Path Browser); создание новой модели Simulink текущую помощь (Help). 1.2. Управление переменными и рабочей средой
who, whos
Вывод списков текущих переменных
Рабочая область системы MATLAB - это область памяти, в которой размещены переменные системы. Содержимое этой области можно просмотреть из командной строки с помощью команд who и whos. Команда who выводит только имена переменных, а команда whos - информацию о размерах массивов и типе переменной, а также, в отдельной строке, информацию об общем количестве элементов в рабочей области и объеме используемой памяти. Команды who global и whos global выводят списки глобальных переменных рабочей области. Рассмотрим в качестве примера пять массивов различного типа:
А - трехмерный массив чисел удвоенной точности; В - массив разреженной структуры; С - массив ячеек; S – массив символов; patient - массив записей. whos Name Size Bytes Class A double array 4×3×2 192 В 212 sparse array 4×4 С cell array 4×3×2 2400 S 128 char array 4×16 patient 1×2 В40 struct array Grand total is 194 elements using 3772 bytes Специальное средство просмотра Workspace Browser обеспечивает представление команды whos в виде графического интерфейса.
save, load
Загрузка и сохранение рабочей области
Команды save и load позволяют в любой момент времени сохранить содержимое рабочей области или загрузить новые данные в процессе сеанса работы, С помощью этих команд можно также осуществлять экспорт и импорт ASCII-фаилов. Сохранение переменных рабочей области. Команда save позволяет сохранить содержимое рабочей области в двоичном МАТ-файле, который можно в дальнейшем вызвать командой load. Команда save также доступна в качестве опции Save Workspace меню File. Спецификация формата файла. Для того чтобы управлять форматами файлов, следует в команде save в дополнение к имени файла и списку переменных следующие флаги: флаг -mat -ascii -ascii -double -ascii -double -tabs -v4 -append
Пояснение Двоичный МАТ-файл (по умолчанию) ASCII-формат (8 цифр) ASCII-формат (16 цифр) Формат с разделителями и метками табуляции Формат версии MATLAB 4 Добавить данные к существующему МАТ-файлу
При использовании флага v4 можно сохранить только те данные, которые совместимы с данными, используемыми в версии MATLAB 4; это означает, что
сохранить такие типы данных, как массивы записей, ячеек, многомерные массивы или объекты, нельзя. Когда содержимое рабочей области сохраняется в ASCIl-формате, то рекомендуется единовременно сохранять только одну переменную. Если сохраняется более одной переменной, то система MATLAB создаст файл ASCII-файл, который нельзя будет в дальнейшем загрузить в MATLAB. Загрузка рабочей области. Команда load позволяет загрузить МАТфайл, который был ранее сохранен с помощью команды save. При загрузке МАТ-файла новые значения одноименных переменных замещают старые. Если МАТ-файл имеет расширение, отличающееся от -mat, то необходимо использовать флаг -mat; в противном случае MATLAB будет считать форматом файла ASCII-формат. Загрузка файлов данных в ASCIl-формате. Команда load позволяет выполнять импорт файлов данных в ASCIl-формате; она преобразовывает содержимое файла в переменную с именем файла, только без расширения. Например, применение команды load tides.dat создает в рабочей области системы MATLAB переменную с именем tides. Если исходный файл в ASCIIформате имеет m строк с n значениями в каждой строке, то результатом будет массив чисел размера m×n.
clear
Освобождение области памяти
Синтаксис: clear − удаляет все переменные из рабочей области; clear Х − удаляет переменную или функцию с именем Х из рабочей области. Если Х глобальная переменная, то команда удаляет переменную Х из текущей рабочей области, но оставляет ее доступной для любой функции, где эта переменная объявлена глобальной; clear function − удаляет из рабочей области все используемые М-функции; clear all − удаляет переменные, функции и группы МЕХ-файлов; clear global − удаляет все глобальные переменные.
раск
Дефрагментация рабочей области памяти
Команда pack выполняет сборку “мусора”, то есть сохраняет все переменные на диске, очищает память и затем вновь загружает переменные с диска. Необходимость использования этой команды возникает при продолжительной работе в системе, когда в результате фрагментации памяти затрудняется работа с переменными большой длины.
clc
Очистка командного окна
Команда clc очищает командное окно и возвращает курсор в левый верхний угол экрана. 1.3. Импорт и экспорт данных Существует много приемов для перемещения данных между системой MATLAB и другими приложениями. В большинстве случаев при работе с данными системы MATLAB можно просто использовать команды чтения и записи файлов. Для более сложных наборов данных можно создать собственные программы на языке С. Импортирование данных в систему MATLAB. Существует несколько способов для передачи данных из других приложений в систему MATLAB. Выбор способа зависит от объема и формата данных. Ввод данных в виде списка. Если количество данных невелико, то их можно просто напечатал», помещая в квадратные скобки. Этот метод неудобен при большом количестве данных, поскольку их невозможно редактировать. Формирование данных в М-файле. Используя текстовый редактор, можно сформировать М-файл, в котором данные представлены как список элементов. По существу, это тот же первый способ, но он имеет то преимущество, что позволяет с помощью редактора корректировать данные. Достаточно после исправления перезапустить М-файл, чтобы ввести исправленные данные. Загрузка данных из ASCII-файла. ASCII-файлы накапливают данные в 7-разрядном коде без контроля по четности. Каждая строка содержит одинаковое количество значений, разделенных пробелами, и завершается символом возврата каретки. Эти файлы можно редактировать, используя обычный текстовый редактор. Их можно читать непосредственно в системе MATLAB, используя функцию load. При этом создается переменная, имя которой совпадает с именем файла. Можно воспользоваться функций dimread, чтобы указать другой тип разделителя. Чтение данных с использованием функций ввода/вывода. Применение функций ввода/вывода, а также функций fopen и fread, полезно при загрузке файлов данных из других приложений, использующих специальные форматы данных. Использование специальных средств для чтения файлов. Для чтения файлов, записанных в специальных форматах, и системе MATLAB имеются следующие специализированные функции: Функция Назначение dimread Чтение ASCII-файлов whiread Чтение электронных таблиц в формате WK1 imread Чтение изображения из графического файла wavread Чтение звукового файла с расширением .wav Экспортирование данных из системы MАТLАВ. Существует несколько способов для передачи данных из системы MATLAB в другие приложения.
Использование команды diary. При работе с массивами небольших размеров можно применять команду diary, чтобы создать файл дневника, который включает команды MATLAB, используемые в течение сеанса работы, а также позволяет просмотреть на экране необходимые данные. Записи дневника могут быть полезны для вложения в документы или отчеты. В дальнейшем можно применять текстовый редактор для редактирования дневника. Сохранение данных в формате ASCII. Команда save с опцией -ascii позволяет записать данные в этом формате, причем, используя команду dimwrite, можно задать другой тип разделителя. Использование специальных средств для записи файлов. Для записи файлов в специальных форматах, определяемых приложениями, в системе MATLAB имеются следующие специализированные функции: Функция dimwrile wk1write imwrite auwrite
Назначение
Запись данных в ASCII-файл Запись данных в электронную таблицу а формате WK1 Запись изображения в графический файл Запись данных в звуковой файл с расширением .au (формат фирмы SUN Microsystems) wavwrite Запись данных в звуковой файл с расширением .wav (формат фирмы Microsoft) 1.4. Операторы, константы, служебные переменные
Язык MATLAB – это язык операторов. Операторы, вводимые пользователем в командной строке, исполняются системой MATLAB в режиме интерпретации. Операторы имеют две формы записи: с явным присваиванием: переменная = выражение; с неявным присваиванием: выражение. Операторы состоят из специальных символов, имен функций и переменных, а также числовых констант и могут оканчиваться запятой или точкой с запятой, которые управляют выводом результата на экран. Для изменения стандартного порядка выполнения операций используются круглые скобки (квадратные скобки используются для задания элементов массива переменных). Результат вычисления выражения присваивается заданной переменной в левой части от знака равенства для дальнейшего использования и, если после выражения не стоит точка с запятой, выводится на экран. При записи нескольких операторов в одной строке следует использовать разделители.
При использовании операторов с неявным присваиванием система MATLAB автоматически создает переменную с именем ans и присваивает ей значение результата. Переменная ans сохраняет значение результата выполнения только последнего оператора с неявным присваиванием. Длина буфера командной строки ограничена 256 символами. Если оператор настолько сложен, что полностью не помещается на одной строке, то следует ввести несколько точек (не менее двух), нажать клавишу ENTER и продолжить ввод оператора в следующей строке. Вычисления в системе MATLAB ведутся в поле вещественных и комплексных чисел с двойной точностью. Операторы системы MATLAB делятся на 3 категории: арифметические операторы позволяют конструировать арифметические выражения и выполнять числовые вычисления; операторы отношения - позволяют сравнивать числовые операнды; логические операторы – позволяют строить логические выражения. Логические операторы имеют самый низкий приоритет относительно операторов отношения и арифметических операторов.
+-*/\^‘
Арифметические операторы
При работе с массивом чисел установлены следующие уровни приоритета среди арифметических операций: уровень 1: Поэлементное транспонирование (.’), поэлементное возведение в степень (.^), эрмитово сопряженное транспонирование матрицы (‘), возведение матрицы в степень (^); уровень 2: Унарное сложение (+), унарное вычитание (-); уровень 3: Умножение массивов (.*), правое деление (./), левое деление массивов (.\), умножение матриц (*), решение систем линейных уравнений - операция (/), операция (\); уровень 4: сложение (+), вычитание (-); уровень 5: оператор формирования массивов (:). Внутри каждого уровня операторы имеют равный приоритет и вычисляются в порядке следования слева направо. Заданный по умолчанию порядок следования может быть изменен с помощью круглых скобок. Арифметические операторы системы MATLAB работают, как правило, с массивами одинаковых размеров. Для векторов и прямоугольных массивов оба операнда должны быть одинакового размера, за исключением единственного случая, когда один из них - скаляр. Если один из операндов скалярный, а другой нет. в системе MATLAB принято, что скаляр расширяется до размеров
второго операнда и заданная операция применяется к каждому элементу. Такая операция называется расширением скаляра.
< <= > >= ~= = =
Операторы отношения
В системе MATLAB определено 6 следующих операторов отношения: < <= > >= == ~=
меньше; меньше иди равно; больше; больше или равно; равно тождественно; не равно.
Операторы отношения выполняют поэлементное сравнение двух массивов равных размерностей. Для векторов и прямоугольных массивов оба операнда должны быть одинакового размера, за исключением случая, когда один из них скаляр. В этом случае MATLAB сравнивает скаляр с .каждым элементом другого операнда. Позиции, где это соотношение истинно, получают значение 1, где ложно - 0. Операторы отношения, как правило, применяются для изменения последовательности выполнения операторов программы. Поэтому они чаще всего используются в теле операторов if, for, while, switch. Операторы отношения всегда выполняются поэлементно. Операции сравнения <, <=, >, >= используют для сравнения только действительной части комплексных чисел; операции = =, ~= осуществляют сравнение как действительных, так и мнимых частей.
& | ~
Логические операции
В состав логических операторов системы MATLAB входят следующие операторы: & И; | ИЛИ; ~ НЕ. Логические операторы реализуют поэлементное сравнение массивов одинаковых размерностей. Для векторов и прямоугольных массивов оба операнда должны быть одинакового размера, за исключением случая, когда один из них скаляр. В последнем случае MATLAB сравнивает скаляр с каждым элементом другого операнда. Позиции, где это соотношение истинно, получают значение 1, где ложно - 0. Каждому логическому оператору соответствует некоторый набор условий, которые определяют результат логического выражения:
Логическое выражение с оператором AND (&) является истинным, если оба операнда истинны. Если элементами логического выражения являются числа, то выражение истинно, если оба операнда отличны от нуля. Логическое выражение с оператором OR (|) является истинным, если один из операндов или оба операнда логически истинны. Выражение ложно, только если оба операнда логически ложны. Если элементами логического выражения являются числа, то выражение ложно, если оба операнда равны нулю. Логическое выражение с оператором NOT (~) строит отрицание. Результат логически ложен, если операнд истинен, и истинен, если операнд ложен. Если элементами логического выражения являются числа, то любой операнд, отличный от нуля, становится нулем, и любой нулевой операнд становится единицей.
xor, all, any, isnan, isinf
Логические функции
В дополнение к логическим операторам в состав системы MATLAB включен ряд логических функций: хоr(а, b) − реализует операцию ИСКЛЮЧИТЕЛЬНОЕ ИЛИ. Выражение, содержащее ИСКЛЮЧИТЕЛЬНОЕ ИЛИ истинно, если один из операндов имеет значение TRUE, а другой - FALSE. Для числовых выражений функция возвращает 1, если один из операндов отличен от нуля, а другой – 0; all − возвращает 1, если все элементы вектора истинны или отличны от нуля; any − возвращает 1, если хотя бы один из элементов аргумента отличен от нуля; иначе возвращается 0. В случае обработки массивов функция any является столбцовоориентированной; isnan и isinf − возвращают 1 если аргументом функции являются переменные, имеющие значения соответственно в NaN и Inf; isfinite − истинна только для величин, которые не имеют значений inf или NaN (т.е. истинна для всех числовых значений аргумента). Допустимо использование функций И, ИЛИ и НЕ в явном виде : and, or, not. Аргументами логических операторов могут быть числа и строки, при этом за 1 принимается любое числовое значение, отличное от 0. Полный список логических функций системы MATLAB содержится в каталоге ops.
[] () = ‘ . , ; : % !
Специальные символы
[]
Квадратные скобки
()
Круглые скобки
=
Знак присваивания
‘
Транспонировани Транспонирование, сопровождаемое е матриц комплексным сопряжением для комплексных матриц Разделитель Десятичная точка; поэлементное выполнение операций над точка массивом данных Переход по дереву каталогов на один уровень вверх Признак продолжения строки Разделитель – Указание индексов элемента вектора, запятая матрицы, массива; отделение операторов языка MATLAB Разделитель – Отделение строк матриц или массивов; подавление вывода на экран результатов точка с запятой вычислений Разделитель – Заголовок цикла for; двоеточие формирование векторов, выделение строк, столбцов подблоков массива Указатель Указатель логического конца строки. Следующий за ним текст игнорируется (является комментарием) Указатель Является указателем ввода команды DOS
. .. … , ; : % !
Формирование векторов и матриц; указание последовательности выходных параметров при обращении к функциям, возвращающим более одного параметра Указание порядка выполнения операций в арифметических выражениях; указание индексов элемента вектора, матрицы, массива; указание последовательности входных параметров функции Знак присваивания в арифметических выражениях
i или j
Мнимая единица
Константам i и j первоначально присваивается значение, равное sqrt(-1). Они используются для ввода комплексных чисел. Числа 3+2i, 3+2*i, 3+2j представляют одно и тоже комплексное число.
inf
Бесконечность
Inf – специальная переменная, позволяющая фиксировать переполнение разрядной сетки ЭВМ. Этот механизм очень редко предоставляется пользователю для работы, однако в системе MATLAB это обеспечено благодаря возможностям арифметического сопроцессора. Например, при выполнении деления на нуль машина выдаст сообщение Warning: Divide by zero ans = Inf.
NaN
Нечисловое значение
NaN – специальная переменная, принятая в стандарте IEEE-арифметики, которая позволяет фиксировать результат, не представимый в виде числа. Следующие операции имеют результат в виде переменной NaN: умножение вида 0*Inf; деление вида 0/0 и Inf/Inf; сложение и вычитание бесконечностей, например (+Inf) – (-Inf); вычисление функций остатка rem(x, y) для y = 0 или x = Inf; любые арифметические операции с переменной NaN.
pi
Число π (3.1415926535897…) Константа, рассчитываемая по одной из формул: pi = 4*atan(1) = imag(log(-1)) = 3.1415926535897…
eps
Машинная точность
Переменная eps определяет относительную точность операций с плавающей точкой, которая часто используется для оценки сходимости итерационных методов. Машинная точность eps – это наименьшее число, для которого на данной ЭВМ выполняется соотношение 1.0 + eps > 1.0. Стандартное значение этой переменной составляет 2.220446e-016. Пользователь имеет право назначить этой специальной переменной любое значение, включая 0.
realmax, realmin
Наименьшее и наибольшее положительные числа с плавающей точкой
realmax – наибольшее число с плавающей точкой для данного компьютера; любое большее значение соответствует переменной Inf. realmin – наименьшее нормализованное положительное число с плавающей точкой для данного компьютера. Стандартные значения этих констант соответственно равны: Realmax = 1.797693134862316е+308; Realmin = 2.225073858507202е-308.
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 5 100 100 100 7 6 4 100 100
100 8 100 1
Функция вида [i, j] = find(x) позволяет получить индексы ненулевых элементов прямоугольного массива. Функция вида [i, j. s] = find(x) возвращает, кроме того, и их значения в виде вектора s.
1. 5. Элементарные математические функции Элементарные математические функции, пожалуй, наиболее известный класс функций системы MATLAB. Поэтому, не останавливаясь подробно на их описании, представим перечень имеющихся функций. sin sinh asin asinh cos cosh acos acosh tan tanh atan atan2 atanh sec sech asec asech csc csch acsc acsch cot coth acot acoth log log10 log2 pow2 sqrt abs angle conjugate imag real fix floor
синус гиперболический синус арксинус гиперболический арксинус косинус гиперболический косинус арккосинус гиперболический арккосинус тангенс гиперболический тангенс арктангенс арктангенс вещественных частей двух векторов гиперболический арктангенс секанс гиперболический секанс арксеканс гиперболический арксеканс косеканс гиперболический косеканс арккосеканс гиперболический арккосеканс котангенс гиперболический котангенс арккотангенс гиперболический арккотангенс натуральный логарифм логарифм по основанию 10 логарифм по основанию 2 2 в степени аргумента функции корень квадратный модуль аргумента (в том числе и комплексного) значение фазы комплексного аргумента комлексно-сопряженное значение комплексного аргумента мнимая часть комплексного аргумента действительная часть комплексного аргумента округление аргумента в сторону “0” округление аргумента в сторону − ∞
ceil round mod rem sign
округление аргумента в сторону + ∞ округление аргумента до ближайшего целого значения остаток от деления “знаковый” остаток от деления знак аргумента
1.6. Ввод и преобразование матричных переменных Поскольку MATLAB – матрично-ориентированная система, то необходимо отметить, как она выполняет основные операции над векторами и матрицами. Прежде всего необходимо отметить, что вектор рассматривается как вырожденная в одну строку или один столбец матрица. Обычная переменная – это матрица размером 1×1. Например, если задано Х = 1, то это значит, что Х есть вектор с единственным элементом, имеющим значение 1. Если надо задать вектор из трех элементов, то их значения надо перечислить в квадратных скобках, разделяя пробелами: N = [1 2 3]. Задание матрицы требует указания различных строк. Для различения строк используется знак “ ; ” (точка с запятой): M = [1 2 3; 4 5 6; 7 8 9]. Матрицу можно ввести и следующим образом: F = [1 2 3 4 5 6 7 8 9]. Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые доступные системе функции. Для указания отдельного элемента вектора или матрицы используются выражения вида V(i) или M(i, j). Матрицы можно расширять, используя матрицы малых размеров как элементы матрицы больших размеров: R = [10 11 12]; Y = [F; R] Y= 1 2 3 4 5 6 7 8 9 10 11 12 Для добавления новой страницы того же размера можно воспользоваться следующей командой:
» Y(:,:,2)=[14 15 16;17 18 19;20 21 22;23 24 25] Y(:,:,1) = 1 2 3 4 5 6 7 8 9 10 11 12 Y(:,:,2) = 14 15 16 17 18 19 20 21 22 23 24 25 Для удаления строк, столбцов или вообще размерности массива необходимо присвоить выбранному элементу значение пустого вектора [ ]. Например, для удаления первой страницы трехмерного массива Y можно воспользоваться командой »Y(:,:,1)=[] Y= 14 17 20 23
15 16 18 19 21 22 24 25 Возможно задание векторов и матриц с комплексными переменными. Помимо поэлементного ввода векторов и матриц возможна генерация векторов и матриц специального типа. Например, вектор с целочисленными элементами можно задать в виде: X = 1: 5;. Знак двоеточие указывает, что элементы вектора будут принимать значения 1, 2, 3, 4, 5. Можно задать вектор с другим, в том числе и нецелочисленным шагом приращения: X = 0 : 0.25 : 2;. Начальное, шаг и конечное значение элементов можно задавать с помощью арифметических выражений. При работе с матрицами и векторами можно использовать двоеточие для выделения определенной последовательности элементов и создания новых векторов или матриц: А = [1 2 3; 4 5 6]; B = A(:) B= 1 2
3 4 5 6 A(:) = 10 : 15 A= 10 12 14 11 13 15 В этих примерах создан новый вектор В и изменена матрица А. Следующие примеры иллюстрируют операции вырезки из матрицы: А =[1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15; 16 17 18 19 20] A= 1 6 11 16
2 7 12 17
3 8 13 18
4 9 14 19
A (1 : 3, 3) ans = 3 8 13 A(2 : 4, 2 : 5) ans = 7 12 17
8 13 18
9 14 19
10 15 20
5 10 15 20
Транспонирование вектора означает, что строка элементов становится столбцом: V = [1 2 3] V= 12 3 V’ ans = 1 2 3 Для создания многомерных массивов удобно использовать следующие функции: ones (n1, n2, … , nn) − создание массива с единичными элементами; zeros (n1, n2, … , nn) − создание массива с нулевыми элементами;
Хорошим примером на применение матричных операций является решение системы линейных уравнений. Пусть требуется решить систему уравнений: X + 2Y = 11 2X + 3Y = 18 Введем матрицу коэффициентов А и вектор правой части системы уравнений В: А = [1 2; 2 3] ans = 1 2 2 3 B = [11; 18] ans = 11 18 A\B ans = 3 4. 1.7. Управление последовательностью выполнения операторов Существует 4 основных оператора управления последовательностью исполнения инструкций: оператор условия if в сочетании с операторами else и elseif выполняет группу инструкций в соответствии с некоторыми логическими условиями; оператор переключения switch в сочетании с операторами case и otherwise выполняет различные группы инструкций в зависимости от значения некоторого логического условия; оператор условия while выполняет группу инструкций неопределенное число раз в соответствии с некоторым логическим условием завершения; оператор цикла for выполняет группу инструкции фиксированное число раз. Все операторы управления включают оператор end, чтобы указать конец блока, в котором действует этот оператор управления.
if …else … elseif … end Синтаксис: if логическое выражение инструкции end
Оператор условия if
логическое выражение инструкции else инструкции end
if
логическое
выражение инструкции elseif логическое выражение инструкции 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.8. Полиномы и операции над ними Полиномы (многочлены) задаются в среде MATLAB в виде вектора, хранящего коэффициенты от an до a0 : Р = [an … a2 a1 a0].
polyval
Вычисление полинома
Синтаксис: y = polyval(p, s) Y = polyval(p, S) y = polyval(p, s) − вычисляет значение полинома, вектор значений коэффициентов которого p = [an … a2 a1 a0], в точке s. Y = polyval(p, S) вычисляет значение полинома для каждого элемента одномерного или двумерного массива S.
conv
Умножение полиномов
Синтаксис: c = conv(a, b) Если заданы полиномы a и b степеней m и n соответственно, то их произведение – это полином с степени m+n. Пример: Найдем произведение полиномов x3 + 2x2 + 3x + 4 и 10x2 + 20x + 30. Для этого сформируем векторы a = [1 2 3 4] и b = [10 20 30] и вычислим c = conv(a, b) с = 10 40 100 160 170 120.
deconv Синтаксис: [q, r] = deconv(c, a)
Деление полиномов
Функция [q, r] = deconv(c, a) реализует деление полинома с на полином a; частное от деления возвращается в виде вектора q, а остаток – в виде вектора r, так что выполняется соотношение c = conv(q, a) + r.
polyder
Вычисление производных
Синтаксис: dp = polyder(p) dp = polyder(a, b) [q, p] = polyder(b, a) dp = polyder(p) − возвращает производную полинома dp(x) / dx. dp = polyder(a, b) − возвращает производную от произведения полиномов a(x) × b(x). [q, p] = polyder(b, a) − возвращает производную от отношения полиномов b(x) / a(x) в виде отношения полиномов q(x) / p(x). Пример: вычислим производную полинома p(x) = 3x2 + 6x + 1. P = [3 6 1]; dp = polyder(p) dp = 6 6
roots
Вычисление корней полинома
Синтаксис: r = roots(p) Функция r = roots(p) вычисляет вектор-столбец корней полинома p. Пример: Вычислим корни полинома p(x) = x3 + 6x2 +12x + 18. p = [1 6 12 18]; r = roots(p) r= -4.1544 -0.9228 + 1.8658i -0.9228 - 1.8658i.
poly
Вычисление характеристического полинома
Синтаксис: p = poly(A) p = poly( r) p = poly(A) − вычисляет вектор-строку коэффициентов характеристического полинома матрицы А. p = poly( r) − вычисляет вектор строку коэффициентов полинома по значениям вектора-столбеца его корней. Рассмотрим пример действий функции над матрицей А.
A = [-5/3 -1 -2/3; -5/6 1/4 11/12; p = poly(A) p = 1.0000 3.0000 5.0000 7.0000 r = roots(p) r= -2.1795 -0.4102 + 1.7445i -0.4102 - 1.7445i p = poly(r) p = 1.0000 3.0000 5.0000 7.0000.
polyfit
1/6 -17/4 -19/12];
Аппроксимация данных полиномом
Синтаксис: p = polyfit(x, y, n) Функция p = polyfit(x, y, n) находит коэффициенты полинома p(x) степени n, который аппроксимирует функцию y(x) в смысле метода наименьших квадратов. Выходом является строка p длины n +1, содержащая коэффициенты аппроксимирующего полинома. Пример: » x = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]; » y = [6 6.3 6.7 6.5 6.2 6 6.2 6.5 6.7 6.3 6]; » p = polyfit(x,y,5) p= 0.0000 -33.2168 66.4336 -42.3834 9.1667 5.9406 Ниже приводится краткое описание ряда функций системы MATLAB (все возможные формы синтаксиса можно посмотреть в справочной системе), которые могут оказаться полезными при обработке массивов экспериментальных данных. sum(X) prod(X) sort(x)
Суммирование элементов массива. В случает двумерного массива − это вектор-строка, содержащая суммы элементов каждого столбца Аналогична предыдущей функции, но вместо суммы возвращает произведение Упорядочение элементов массива по возрастанию. В случае двумерного массива происходит упорядочивание элементов каждого столбца. Функция может также возвратить массив индексов, позволяющий восстановить структуру
max(x)
min(x) median(x) mean(x) std(x) cov(x) corrcoef(x) diff(x,n) spline(x,y,x1)
исходного массива Определение наибольшего элемента массива. В случае двумерного массива − это вектор-строка, содержащая максимальные элементы каждого столбца. Для комплексных элементов определение максимума происходит по условию max(abs(x)). Если массив содержит хотя бы один элемент типа NaN, то результатом операции тоже будет NaN Аналогична предыдущей функции, но вместо максимального возвращает минимальный элемент массива Определение срединного значения (медианы) элементов массива. Определение среднего арифметического значения элементов массива. Для двумерного массива mean(mean(x)) есть математическое ожидание элементов массива Определение стандартных отклонений элементов массива Определение ковариационной матрицы элементов массива (т.е. определение дисперсии элементов массива) Определение коэффициентов корреляции элементов массива Вычисление конечных разностей порядка n для элементов массива. В случае двумерного массива берутся разности столбцов Интерполяция функции одной переменной кубическим сплайном. x1 − новый вектор аргументов функции
Пример использования функции spline: x = [ 0 1 2 3 4 5 6 7 8 9 10 ]; % задан вектор аргумента функции % задаем вектор значений функции y = [ 0 0.1 0.22 0.35 0.58 0.76 0.95 1.24 1.01 0.87 0.98 ]; % определяем новый вектор функции, с меньшим значением шага x1 = 0 : 0.05 : 10; % вычисляем вектор значения функции по новым точкам [ y1] = spline(x, y, x1);
1.9. ГРАФИЧЕСКИЕ СРЕДСТВА СИСТЕМЫ MATLAB 1.9.1. Графики двумерных функций
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 -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. Пример: » % График экспоненциальной функции в логарифмическом масштабе » x=logspace(-1,3); » loglog(x,exp(x)./x,'k'); » grid on
300
10
250
10
200
10
150
10
100
10
50
10
0
10
-1
10
0
10
1
10
2
10
3
10
Рис. 1.3
semilogx, semilogy
Графики функций в полулогарифмическом масштабе
В некоторых случаях предпочтителен полулогарифмический масштаб графиков, когда по одной оси задается логарифмический масштаб, а по другой – линейный. semilogx(…) – строит график функции в логарифмическом масштабе (основание 10) по оси X и линейным по оси Y. semilogy(…) – строит график функции в логарифмическом масштабе по оси Y и линейным по оси X. Синтаксис команды аналогичен синтаксису команды plot.
hist
Построение графика в виде гистограммы
Классическая гистограмма характеризует число попаданий значений элементов вектора Y в М интервалов с представлением этих чисел в виде столбиковой диаграммы. Получение данных для гистограммы выполняется функцией hist, имеющей синтаксис: N = hist(Y) – возвращает вектор числа попаданий для 10 интервалов. Если Y – матрица, то выдаются данные по числу попаданий в ее столбцы; N = hist(Y,M) – возвращает число попаданий для элементов вектора Y с центральными отчетами, заданными элементами вектора X; [N,X] = hist(…) – возвращает числа попаданий в интервалы и данные о центрах интервалов;
hist(…) – с синтаксисом аналогичным приведенному выше, строит график гистограммы. Пример: Построим гистограмму для 1000 случайных чисел и выведем вектор с данными и числах их попаданий в интервалы, заданные вектором X. » % Построение гистограммы для 1000 случайных чисел » x=-3:0.2:3; » y=randn(1000,1); » hist(y,x); » h=hist(y,x) h= Columns 1 through 12 0 0 3 7 8 9 11 23 33 43 57 55 Columns 13 through 24 70 62 83 87 93 68 70 65 41 35 27 21 Columns 25 through 31 12 5 6 3 2 1 0 100 90 80 70 60 50 40 30 20 10 0 -4
-3
-2
-1
0
1
2
3
4
Рис. 1.4
stairs
Построение лестничного графика функции
Лестничные графики представляют собой ступеньки, с огибающей, представленной функцией y(x). Такие графики используются, например, для отображения процессов квантования функции y(x), представленной рядом своих отсчетов. При этом в промежутках между отсчетами значения функции считаются постоянными и равными величине последнего отсчета. Синтаксис функции: stairs(Y) – строит лестничный график по данным вектора Y;
stairs(X,Y) – строит лестничный график по данным вектора Y с координатами х переходов от ступеньки к ступеньке заданными значениями элементов вектора X (они должны идти в возрастающем порядке); stairs(…,S) – аналогична по действию вышеописанным командам, но строит график линиями, стиль которых задается строками S (см. оператор plot). Пример: » % Лестничный график функции x^2 » x=0:0.25:10; » stairs(x,x.^2); 100 90 80 70 60 50 40 30 20 10 0
0
1
2
3
4
5
6
7
8
9
10
Рис. 1.5
polar
Построение графика в полярной системе координат
В полярной системе координат любая точка представляется как конец радиус-вектора, исходящего из начала системы координат, имеющего длину RHO и угол THETA (обычно меняется от 0 до 2π). Синтаксис команды: polar(theta,rho) – строит график в полярной системе координат, представляющий собой положение конца радиус-вектора; polar(theta,rho,S) – аналогична предыдущей команде, но позволяет задавать стиль построения аналогично оператору plot. Пример: » % График функции sin(5*t) в полярной системе координат
» t=0:pi/50:2*pi; » polar(t,sin(5*t)) 90
1
120
60 0.8 0.6 30
150 0.4 0.2 180
0
210
330
240
300 270
Рис. 1.6
compass
Построение векторов
Иногда желательно построение ряда радиус-векторов в их обычном виде, то есть в виде стрелок, исходящих из начала координат и имеющих угол и длину, которые определяются действительной и мнимой частями комплексных чисел, представляющих данные векторы. Синтаксис: compass(U,V) – сроит графики радиус-векторов с компонентами (U,V), представляющими действительную и мнимую части каждого из них; compass(Z) – эквивалентна compass(real(Z),imag(Z)); compass(U,V,S) – аналогичны представленным выше командам, но позволяет задать спецификацию линий построения аналогично команде plot; H=compass(…) – возвращает значения длин радиус-векторов. Пример: » % Построение радиус-векторов для вектора Z с комплексными » % элементами » Z=[-1+2i,-2-3i,2+3i,5+2i]; » compass(Z)
90
5.3852 60
120 4.3081 3.2311
30
150 2.1541 1.077 180
0
210
330
240
300 270
Рис. 1.7
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.
Пример: » % Построение контурного графика объекта peaks » z=peaks(27); » contour(z,15) 25
20
15
10
5
5
10
15
20
25
Рис. 1.8
Движение точки по плоскости
comet Синтаксис: comet(Y) comet(X, Y) comet(X, Y, p)
Для отображения движения точки по траектории используется функция comet. При этом движущаяся точка напоминает ядро кометы с хвостом. Функции comet(Y) и comet(X,Y) отображают движение “кометы” по траектории, заданной вектором Y и векторами X и Y соответственно. comet(X,Y,p) − аналогична предшествующим, но позволяет задавать длину хвоста кометы как p ∗ length(Y ) . По умолчанию значение p = 0,1. На черно-белом рисунке “хвост кометы” заметить трудно, поскольку он представляет собой отрезок линии с цветом, отличающимся от цвета линии основной части графика. 1.9.2. Построение графиков 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
Ис п о л ь з о в а н и е фу н к ц и и plot3 б е з meshgrid 20 10 0 4
2
0
-2
-4
-4
-2
0
2
4
Ис п о л ь з о в а н и е фу н к ц и и plot3 п о с л е meshgrid 20 10 0 4
2
0
-2
-4
-4
-2
0
2
4
Рис. 1.9
mesh
Сеточные 3D-графики с функциональной окраской
Наиболее представительными и наглядными являются сеточные графики трехмерных поверхностей с заданной или функциональной окраской. Синтаксис: mesh(X,Y,Z) – выводит в графическое окно сетчатую поверхность Z(X,Y) с функциональной окраской, при которой цвет задается высотой поверхности. Возможна также форма mesh(Z); meshc(…) – по синтаксису аналогична предыдущим, но строит график поверхности, объединенный с проекциями линий равного уровня (графика типа contour); meshz(…) – аналогичный синтаксис, но строит поверхность в виде столбиков. Пример: » [x,y]=meshgrid([-3:0.1:3]); » z=x.^2+y.^2; » subplot(2,1,1),mesh(x,y,z) » subplot(2,1,2),meshc(x,y,z)
Рис. 1.10
surf
Затененные сеточные 3D-графики
Синтаксис: surf(X, Y, Z, C) − вывод на экран сетчатой поверхности для значений массива Z, определенных на множестве значений массивов X и Y. Цвет массива определяется массивом C; surf(Z, C) − использует сетку, которая определяется одномерными массивами х = 1: n и y = 1: m; surf(X, Y, Z) и surf(Z) используют в качестве массива цвета C = Z, то есть цвет в этом случае пропорционален высоте поверхности; surf – возвращает свойства объекта surface. Благодаря функциональной окраске график поверхности гораздо более выразителен, чем при построении поверхности функцией mesh, причем даже в том случае, когда цветной график печатается в черно-белом виде (в этом случае лучше использовать функцию colormap(gray), выполняющую окраску фигуры в тонах серого цвета).
1.9.3. Вспомогательные графические функции
Активизация графического окна
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 − по вертикали, а р − номер позиции, куда будет выводиться очередной график. Эта же команда используется для перехода от одного подокна к другому. Пример: » x=-1:0.1:1; » y1=sin(x); » subplot(211),plot(x,y1) » y2=log(abs(y1)); Warning: Log of zero. » subplot(212),plot(x,y2) 1 0.5 0 -0.5 -1 -1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0 -0.5 -1 -1.5 -2 -2.5 -1
Рис. 1.11
Увеличение масштабов графика
zoom
Синтаксис: zoom on (off) − включает (выключает) режим масштабирования активного графика. Удерживая ЛКМ вы можете выделить интересующую Вас область графика, которая будет увеличена затем до размеров текущего графического окна; zoom out − возвращает график в исходное положение. 1.9.4. Надписи и пояснения к графикам
Установка титульной надписи
title Синтаксис: title('<текст>')
Команда title('<текст>') размещает текст над 2D- и 3D-графиком.
xlabel, ylabel, zlabel
Установка осевых надписей
Синтаксис: xlabel('<текст>') ylabel('<текст>') zlabel ('<текст>') xlabel('<текст>') − помещает текст для двумерного графика вдоль оси х, для трехмерного графика - вдоль оси х либо под графиком. ylabel('<текст>') − помещает текст для двумерного графика вдоль оси у, для трехмерного графика - вдоль оси у либо под графиком. zlabel ('<текст>') − помещает текст вдоль оси z трехмерного графика. Повторное использование команды приводит к замене старого текста новым.
Маркировка линий равного уровня
clabel Синтаксис: clabel(C) clabel(C, v) clabel(C, 'manual')
clabel(C) − добавляет метки к линиям уровня в случайно выбранных позициях. clabel(C, v) − маркирует линии уровня контура, заданные в векторе v. clabel(C, 'manual') − маркирует линии уровней в позициях, указываемых с помощью мыши. Нажатие клавиши Return или правой кнопки мыши завершает маркировку. Если мышь недоступна, то можно использовать клавишу пробела для перехода между линиями уровней и “клавиши-стрелки” для перемещения перекрестия. Пример: » [X,Y]=meshgrid([-3:0.1:3]); » Z=sin(X)./(X.^2+Y.^2+0.3); » C=contour(X,Y,Z,10); » colormap(gray) » clabel(C) 3
2 0.238 1 -0.396 0
-0.555 -0.713 0.0792
-0.238
0.555
-1
0.396
0.0792 -2 -0.0792 -3 -3
-2
-1
0
1
2
3
Рис. 1.12
text
Ввод надписи в любое место графика
Синтаксис: text(x, у, '<текст>') text(x, y, z, '<текст>') text(x, у, '<текст>') − помещает в заданной точке (х, у) двумерного графика начало текста, указанного в качестве третьего аргумента. Если х и у одномерные массивы, заданный текст помещается во все позиции, определяемые координатами [x(i) y(i)]. text(x, у, z, '<текст>') − выводит текст на трехмерный график. Приведем примеры написания команд без показа их графической реализации. Создать графическое окно и написать символ 'х' в трех точках с координатами (1, 1), (5, 10), (10, 20): plot([1 5 10], [1 10 20], 'х') Написать, начиная с позиции (5, 10), 'Action point': text(5, 10, 'Action point') Написать, в позициях (2, 10), (7, 16) 'Нет активных точек': text([2 7], [10 16], ‘Нет активных точек’)
gtext
Ввод текста на график с помощью мыши
Cинтаксис: gtext('<текст>') Команда gtext('<текст>') высвечивает в активном графическом окне перекрестие, перемещение которого позволяет указать место ввода заданного текста; по завершении позиционирования нажатие кнопки мыши или любой клавиши вводит заданный текст. Пример. Разместим на графике функции у = sin(x)/x маркер "Скорость": » x=1e-6:0.05:10; » plot(x,sin(x)./x) » grid » gtext('Скорость')
legend
Вывод пояснения
Синтаксис: legend('<текст1>', '<текст2> ', ‘<текст3>', ...) legend('<wi', '<текст\>', '<тип линии2.>', '<текст2>', .,.) legend(h,...) legend(M) legend(h, M) legend off legend(..., n) legend('<текст1>', '<текст2> ', ‘<текст3>', ...) − добавляет к текущему графику пояснение в виде указанных текстовых строк. legend('<wi', '<текст\>', '<тип линии2.>', '<текст2>', .,.) − позволяет специфицировать тип линии, которая выносится в пояснение, так, как это делается в команде plot. legend(h. ...) − добавляет пояснение к графику с дескриптором h. Команды legend(M) и legend(h, M), где М - массив строк, также допустимы для формирования пояснения. Следует помнить, что строки массива М должны иметь одинаковую длину. legend off − удаляет пояснение с текущего графика. legend(..., n) − устанавливает предельное количество позиций для размещения пояснения. Если оказывается, что в области графика места недостаточно, график перестраивается и пояснение размещается вне пределов графика. Если n = -1, то пояснение размещается вне области графика. Если n = 0, то пояснение размещается в области графика, если места для этого достаточно. Для перемещения пояснения следует нажать левую кнопку мыши, находясь в этой области, а затем переместить пояснение в нужную позицию. Замечание: Для того чтобы избежать пересечения пояснения с линиями графика или нанесенной сеткой, необходимо текущему графическому объекту axes присвоить дескриптор пояснения: hi = legend(....) axes(hl) print -dbitmap
colorbar Синтаксис: colorbar('vert') colorbar('horiz') colorbar(h)
Вывод шкалы палитры
colorbar colorbar('vert') − добавляет к текущему графику вертикальную шкалу палитры. colorbar('horiz') − добавляет к текущему графику горизонтальную шкалу палитры. colorbar(h) − добавляет к графику с дескриптором h шкалу палитры. Размещение шкалы реализуется автоматически в зависимости от соотношения ширины и высоты графика. Команда colorbar без аргументов размещает на текущем графике новую вертикальную шкалу палитры или обновляет прежнюю. 1.10. ПРОГРАММИРОВАНИЕ И ОЛАДКА Система MATLAB обычно работает в режиме интерпретации команд и операторов: они вводятся в ходе сеансов в командной строке, а MATLAB выполняет их немедленную обработку и выдает вычисленный результат. Однако в MATLAB есть возможность обработки заранее подготовленной последовательности команд и операторов, записанных в виде файла (эти файлы имеют расширение *.m). М-файлы, содержащие команды и операторы MATLAB, разделяются на файлы-сценарии и процедуры-функции. Сценарий – это внешний файл, содержащий последовательность команд, операторов и функций системы MATLAB. После ввода имени такого файла начинается последовательная интерпретация его операторов. Замечание: имена файлов-сценариев не разрешается использовать в качестве операндов в выражениях или в качестве аргументов функций.
function
Заголовок процедуры-функции
Синтаксис: function[<список выходных переменных>] = <имя функции>(<список входных переменных>). Если первая строка М-файла начинается с определения function[<список выходных переменных>] = <имя функции>(<список входных переменных>), то этот файл представляет собой М-функцию. Эти файлы расширяют возможности системы благодаря добавлению новых функций, самостоятельно написанных пользователем на языке MATLAB. Стандартная структура М-функции должна быть следующей:
Первая строка объявляет имя функции, а также ее входные и выходные аргументы. Без такой строки этот файл был бы М-файлом сценария; После объявления имени функции должны быть записаны строки комментариев, содержащие справочную информацию о данной функции и поясняющие ее назначение и используемые параметры. Для этого служит символ %; Переменные в теле функции - это локальные переменные, в отличие от переменных Script-файлов сценариев, которые являются глобальными. М-функции используются так же, как обычные встроенные функции системы MATLAB. Имя М-функции можно использовать при записи арифметических выражений. Возможность добавления к системе MATLAB новых функций обеспечивает ей важное свойство расширяемости. Новые функции могут использовать как встроенные функции системы, так и функции, ранее написанные пользователем. Новые функции добавляются к словарю системы MATLAB и становятся доступными наряду со встроенными функциями. Собственно именно это и определяет свойство расширяемости. Эти функции оформляются в виде текстовых файлов с расширением .m. Функция в системе MATLAB не имеет никаких отличительных признаков, и при обращении к ней MATLAB просто ищет файл с соответствующим именем, просматривая все пути доступа, определенные переменной MATLAB PATH. Когда файл найден, он проходит процедуру компиляции, размещается в оперативной памяти и только после этого начинает выполняться. В этом также отличие функции от Script-файла, который выполняется только в режиме интерпретации. Для удаления откомпилированной функции из памяти используется команда clear <имя функции>. Если при выполнении функции включен режим echo, то функция тоже будет выполняться в режиме интерпретации и на терминал будет выводиться результат выполнения каждого оператора. Пример: Типовое оформление процедуры-функции в системе MATLAB: function w = rmovel(v) % RMOVEL удаляет из вектора v совпадающие элементы. % Вызов функции: % w == rmovel(v) % Используемые функции: % MATLAB: length, find % ППП SNAE: нет % Входные переменные: % v - исходный вектор. % Выходные переменные: % w - вектор, не содержащий одинаковых элементов.
w = [ ]; while length(v) > 0, w = [w; v(1)]; I = find(abs(v - v(I)) < 1e-6); v(l) =[];I=[]; end Для того чтобы прочитать комментарий к функции, следует воспользоваться командой helр<имя М-файла>. Пример: Отклик системы на команду help rmovel. % RMOVEL удаляет из вектора v совпадающие элементы. % Вызов функции: % w = rmovel(v) % Используемые функции: % MATLAB: length, find % ППП SNAE: нет % Входные переменные: % v - исходный вектор. % Выходные переменные: % w - вектор, не содержащий одинаковых элементов.
Интерпретация текстовых срок
eval Синтаксис: eval (' < выражение>') х = eval('< выражение>')
Функция eval(t) означает, что текст, содержащийся в символьной переменной t = ‘< выражение>’, будет восприниматься как команда, оператор или часть выражения. х = eval(t) − присваивает результат вычислений переменной х. Пример: Следующий фрагмент программы показывает, каким образом с помощью команды load можно загрузить 10 последовательно пронумерованных файлов с именами mydata.i: fname = 'mydata'; for 1=1:10 eval(['load ', fname.int2str(i)]) end Здесь int2str - функция для преобразования числового значения в строковое, записанная в файле int2str.m.
Пример: Образовать последовательность магических матриц размера от 1 до 12 с именами Ml, M2, ..., М12. for n= 1:12 eval(['M'num2str(n)'=magic(n)']) end
feval
Вычисление функции
Синтаксис: feval('<имя_фyнкцuu>', х1, ..., хn) [у 1,.... yk] = feval('<имя_функции>’, х1, ..., хn) Функция feval('<имя_фyнкцuu>', х1, ..., хn) передает аргументы (х1, .... хn) вызываемой функции. Функция [у 1,.... yk] = feval('<имя_функции>’, х1, ..., хn) возвращает множество выходных переменных (у1, ..., yk). Обычно функция feval применяется для вычисления функций, которые являются внешними, а их значение требуется перевычислять на каждом шаге в теле другой процедуры, например при интегрировании систем ОДУ или минимизации функции. Пример: Интегрирование дифференциального уравнения Ван дер Поля. Функция вычисления правой части уравнения Ван дер Поля оформляется в виде внешней функции вида function xdot = vdpol(t, x) xdot=[x(1) . * (1 - x(2) .^ 2) - x(2); x(1)] Для интегрирования системы ОДУ методом Рунге - Кутта предназначена функция ode23, в теле которой присутствуют следующие операторы, которые используют функцию vdpol, передаваемую в качестве входного аргумента tpfun процедуры ode23: s1 = feval(ypfun, t, у); s1 = s1(:); s2 = feval(ypfun, t + h, у + h * s1); s2 = s2(:); s3 = feval(ypfun, t + h/2, у + h * (s1+s2)/4); s3 = s3(:): Тогда для интегрирования уравнения Ван дер Поля требуется следующий вызов функции ode23: t0 = 0; tf = 20; % Задание интервала времени интегрирования хО = [0 0.25]'; % Задание начальных условий [t, x] = ode23('vdpol', t0, tf, хО);
global
Определение глобальных переменных
Синтаксис: global имя1 имя 2... Функция global имя1 имя2 имяЗ определяет переменные с именами имя1, имя2, имяЗ как глобальные. При использовании глобальных переменных следует соблюдать осторожность, поскольку их значения могут измениться при выполнении некоторой М-функции. Как правило, каждая М-функция использует локальные переменные, которые изолированы от переменных других функций и переменных Мсценария. Однако если несколько функций и головная программа объявляют некоторую переменную глобальной, то в этом случае все модули используют одну и ту же переменную, которая должна иметь опцию global. Обычно для имен локальных переменных используют длинные названия и заглавные буквы.
nargin, nargout
Определение количества аргументов функции
Синтаксис: n = nargin n = nargout Функции nargin и nargout позволяют определить количество входных и выходных переменных функции в процессе ее выполнения. Пример: В приведенном фрагменте процедуры fplot показано, как можно учесть необязательные входные и выходные переменные: function [хО, уО] = fplot(fnamre, lims, npts, angi, subdiv) % FPLOT Построение графика функции % FPLOT(fnamre, lims, npts, angi, subdiv) % Первые два аргумента являются обязательными; % остальные - необязательные. % FPLOT(...) строит график; % [х, у] = FPLOT(...) возвращает массивы значений аргумента и функции if nargin < 5, subdiv = 20; end if nargin < 4, angi = 10; end if nargin < 3, npts = 25; end if nargout = 0 plot(x, y) else x0 = x;
y0 = y; end
Ввод информации пользователя
input Синтаксис: x = input(‘<приглашение>’) x = input(‘<приглашение>’, ‘s’)
x = input(‘<приглашение>’) − выводит на экран строку с приглашением и ожидает ввода выражения, допустимого в MATLAB (арифметическое выражение или имя встроенной функции). Если функция имеет несколько входных параметров, то выходной переменной x присваивается только первое значение. x = input(‘<приглашение>’, ‘s’) − возвращает строку, которая введена пользователем.
Приостановка выполнения М-файла
pause Синтаксис: pause pause(n)
Функция pause приводит к паузе в работе системы и ожиданию нажатия любой клавиши для продолжения. pause(n) − приостанавливает работу системы на n секунд.
2. SIMULINK - ИНСТРУМЕНТ ВИЗУАЛЬНОГО МОДЕЛИРОВАНИЯ 2. 1. Общая характеристика. Демонстрация возможностей Разработка моделей средствами SIMULINK (в дальнейшем S-моделей) основана на использовании технологии Drag-and-Drop (Перетащи и Оставь). В качестве «кирпичиков» для построения S-модели используются модули (или блоки), хранящиеся в библиотеке SIMULINK. SIMULINK хорош тем, что, с одной стороны, обеспечивает пользователю доступ ко всем основным возможностям пакета MATLAB, а с другой − является достаточно самостоятельной его компонентой, в том смысле, что при работе с ним не обязательно иметь навыки в использовании других инструментов, входящих в состав пакета.
Блоки, включаемые в создаваемую модель, могут быть связаны друг с другом, как по информации, так и по управлению. Тип связи зависит от типа блока и логики работы модели. Данные, которыми обмениваются блоки, могут быть скалярными величинами, векторами или матрицами произвольной размерности. Любая S-модель может иметь иерархическую структуру, то есть состоять из моделей более низкого уровня, причем число уровней иерархии практически не ограничено. Наряду с другими параметрами моделирования пользователь может задавать способ изменения модельного времени (с постоянным или переменным шагом), а также условия окончания моделирования. В ходе моделирования имеется возможность наблюдать за процессами, происходящими в системе. Для этого используются специальные «смотровые окна», входящие в состав библиотеки SIMULINK. Интересующие пользователя характеристики системы могут быть представлены как в числовой, так и в графической форме. Кроме того, существует возможность включения в состав модели средств анимации. Еще одно важное достоинство SIM ULINK заключается в том, что он является открытой системой: состав библиотеки может быть пополнен пользователем за счет разработки собственных блоков. Запуск SIMULINK можно произвести либо нажав соответствующую кнопку на панели меню командного окна, либо выбрав команду New Model в разделе File главного меню. При запуске SIMULINK открываются два окна: пустое окно untitled (заготовка для создания новой S-модели); окно Library: simulink, содержащее перечень основных разделов библиотеки SIMULINK. Оба окна имеют сходную структуру и содержат строку меню, панель инструментов, строки состояния (только MATLAB 5. 2) и рабочее поле. Меню содержит следующие разделы: File — команды работы с mdl-файлами, Edit — команды редактирования блок-диаграммы и опции для работы с библиотекой, View — команды изменения формата окна (показать/убрать панель инструментов и строку состояния); Simulation — команды управления моделированием, Format — команды редактирования формата (т. е. внешнего облика) блоков диаграммы и блок-диаграммы в целом. На панель инструментов выведены следующие команды меню (рис. 2. 1):
1
2
3
4
5
6
7
8
9
10
11
Рис. 2.1 где
1 — открыть новое (пустое) окно блок-диаграммы; 2 — открыть существующий mdl-файл; 3 — сохранить mdl-файл на диске; 4 — вывод на печать блок-диаграммы; 5... 7 — команды редактирования блок-диаграммы (вырезать, копировать, вставить); 8 — отменить предыдущую операцию редактирования; 9 — восстановить предыдущую операцию редактирования; 10 — запуск модели на исполнение (команда Start); после запуска модели на изображении кнопки выводится символ || и ей соответствует уже команда Pause (приостановить моделирование); 11 — закончить моделирование (команда Stop); кнопка становится доступной по истечении интервала моделирования и после выполнения команды Pause. Если в состав рабочей конфигурации MATLAB включено приложение Real-Time Workshop, то меню дополняется разделом Tools, содержащим средства работы с ним. Для версий MATLAB 5. 0 и 5. 1 единственным отличием окна библиотеки от окна блок-диаграммы является то, что в первом недоступен раздел меню Simulation. В MATLAB 5. 2 существует еще одно различие: в нижней части окна блок-диаграммы имеется строка состояния модели. Она содержит следующие поля (слева направо): текстовое поле состояния SIMULINK; может иметь значение Ready (Готов) или Running (Выполнение); кроме того, при «нажатой» кнопке панели инструментов в этом поле выводится ее назначение; индикатор степени завершенности сеанса моделирования («включается» при запуске модели); поле текущего значения модельного времени (выводится также только после запуска модели); используемый алгоритм расчета состояний модели. Применение команд меню, не выведенных на панель инструментов, будет рассмотрено немного позже. Сейчас остановимся на описании основных возможностей SIMULINK.
Что же представляет собой S-модель? Чтобы составить о ней первое, пока весьма общее, впечатление, воспользуемся одним из примеров, включенных авторами MATLAB в раздел Simple Models (Простые модели). Выберите этот раздел в левом списке окна MATLAB Demos, как следует из комментария, появляющегося при этом в окне справа, примеры из данного раздела помогут уяснить основные концепции SIMULINK, и если вы не были ранее с ним знакомы, начинать нужно именно отсюда. В списке примеров выберите модель Tracking а bouncing ball, позволяющую получить траекторию прыгающего мяча «Нажмите» кнопку с надписью Run Tracking a bouncing. На экране появятся два окна. Первое из них содержит блок-диаграмму модели с комментариями (рис. 2.2), другое представляет собой пример одного из «смотровых окон», обеспечивающих наблюдение за поведением моделируемой системы Это окно называется Scope и по виду напоминает экран электронного измерительного прибора.
Рис. 2.2 До начала моделирования на нем ничего нет, кроме измерительной шкалы и кнопок панели управления. С точки зрения структуры S-модели такое «смотровое окно» – один из блоков диаграммы. Как управлять его параметрами, будет сказано немного позже. Вернемся к окну, содержащему блок-диаграмму модели. Она представляет собой набор блоков, соединенных между собой линиями связи. Направление движения информационных и управляющих сигналов на диаграмме обозначено стрелками. Любая линия связи может иметь
произвольное число ответвлений, начало каждого из которых обозначается точкой. Число входов и выходов блока определяется его типом и значениями параметров настройки блока. Для обеспечения наглядности диаграммы входящие в нее блоки не только различаются графическим представлением, но и снабжаются (при необходимости) индивидуальными именами, которые выбираются пользователем. На выбор имени не накладывается никаких ограничений, оно может представлять собой даже целую фразу. Все блоки, входящие в блок-диаграмму, можно условно разделить на две группы: функциональные блоки и «смотровые окна». В состав рассматриваемой S-модели входят два «смотровых окна» типа Scope. Одно из них уже упоминалось выше. Оно называется Bouncing Ball Display (Демонстрация прыгающего мяча) и открывается автоматически при открытии файла модели. Второе «смотровое окно» представлено на диаграмме блоком Velocity Scope (Индикатор скорости). Чтобы его открыть, нужно дважды щелкнуть ЛКМ на изображении блока. До начала моделирования это окно, так же, как и первое, пусто. Остальные блоки модели являются функциональными. Двойной щелчок ЛКМ на любом из них приводит к тому, что открывается окно настройки параметров блока. Пока будем считать, что значения параметров, заданные разработчиками модели, нас устраивают. Следующий этап знакомства с S-моделью состоит в попытке провести с ней модельный эксперимент (то есть заставить ее работать). Предварительно расположите все три окна модели (два окна Scope и блок-диаграмму) на экране так, чтобы они не перекрывали друг друга (при необходимости можно изменить размер каждого из них). Сделайте активным окно с блок-диаграммой и запустите модель с помощью кнопки Start, расположенной на панели инструментов окна. После начала моделирования траектория движения прыгающего мяча отображается в «смотровом окне» Bouncing Ball, а изменение его скорости - в окне Velocity Scope. Не дожидаясь, пока мяч перестанет «прыгать», выполните команду Pause («нажав» соответствующую кнопку на панели инструментов). При этом моделирование приостанавливается (мяч «зависает» в окне). Во время паузы на исполнение может быть запущена другая модель или выполнены какие-либо действия в командном окне MATLAB. При повторном «нажатии» все той же кнопки (теперь она соответствует команде Continue – продолжить) мяч продолжит движение. Модель закончит работу, когда мяч остановится (его скорость будет равна нулю). В рассматриваемом примере условием окончания моделирования является наступление определенного события - остановка мяча. Но условием окончания модельного эксперимента может служить также истечение
заданного интервала моделирования. SIMULINK позволяет использовать и такую возможность. Давайте попробуем ею воспользоваться. При заданных параметрах модели (упругости мяча и начальной скорости полета) мяч перестает прыгать через 20 с. Этот отрезок времени совпадает в исходной модели с интервалом моделирования, длительность которого отображается на горизонтальной шкале окон Scope. Изменим параметры движения мяча, оставив прежним интервал моделирования. Найдите на блок-диаграмме элемент в форме треугольника с именем Elasticity. Он позволяет задавать значение коэффициента упругости мяча. Текущее значение этого коэффициента, равное - 0.8, выводится внутри изображения блока. Очевидно, чем более упругий мяч нам попадется, тем дольше он будет прыгать. В данной модели увеличению упругости мяча соответствует увеличение абсолютного значения коэффициента Elasticity. Замените -0.8 на -0.9. Для этого щелкните дважды ЛКМ на изображении блока. В открывающемся окне настроек произведите соответствующие изменения (рис. 2.3).
Рис. 2.3 «Нажмите» последовательно кнопки Apply (Применить) и Close (Закрыть). Окно настроек закроется, новое значение коэффициента будет выведено на изображении блока. Запустите модель на исполнение командой Start. Для наблюдения за мячом опять воспользуемся окнами Scope. По истечении 20 с мяч еще полон энергии (кинетической), но... Время моделирования истекло, и работа модели остановлена. Это подтверждает и короткий звуковой сигнал, издаваемый компьютером. На этом первое знакомство с S-моделью можно закончить и перейти к более детальному описанию возможностей SIMULINK. Закройте окно с блок-диаграммой модели (без сохранения внесенных изменений). При этом «смотровые окна» закрываются автоматически. Окно MATLAB Demo также закройте, оставив на экране окно Library: Simulink, содержащее перечень основных разделов библиотеки.
2. 2. Библиотека модулей (блоков) Библиотека блоков SIMULINK представляет собой набор визуальных объектов, используя которые можно собирать, как из кубиков, произвольную конструкцию. Для любого блока можно получать требуемое число копий и использовать каждую из них автономно. Более того, практически для всех блоков существует возможность индивидуальной настройки: пользователь может изменить как внутренние параметры блоков (например, количество входов), так и внешнее оформление (размер, цвет, имя и т. д.). На порядок соединения блоков друг с другом также не накладывается никаких ограничений. Конечно, при связывании блоков необходимо соблюдать определенные правила, о которых будет сказано чуть позже, однако они обусловлены в основном логикой работы самой модели, а не специальными требованиями SIMULINK. Для удобства работы пользователя библиотека блоков разбита на семь разделов. Шесть из них являются базовыми и не могут изменяться пользователем (за исключением внешнего оформления): Sources (Источники), Sinks (Получатели), Discrete (Дискретные элементы), Linear (Линейные элементы), Nonlinear (Нелинейные элементы), Connections (Соединения). Седьмой раздел - Blocksets&Toolboxes (Наборы блоков и инструменты) содержит блоки, относящиеся к компонентам MATLAB, включенным пользователем в рабочую конфигурацию пакета (рис. 2.4.). При этом для каждой компоненты создается свой подраздел библиотеки. При минимальной рабочей конфигурации в разделе Blocksets&Toolboxes имеется только один подраздел SIMULINK Extras (Дополнение к SIMULINK). Этот подраздел, в свою очередь, разбит на шесть частей, три из которых являются дополнением к одноименным основным разделам библиотеки, а три других имеют самостоятельное значение. Это наборы блоков Transformations (блоки пересчета координат и шкал температуры), Flip-Flops (блоки, соответствующие основным типам триггеров) и Linearization (содержит единственный блок, реализующий функцию линейной аппроксимации). Чтобы открыть интересующий раздел библиотеки, достаточно дважды щелкнуть на нем ЛКМ. Каждый блок, входящий в библиотеку SIMULINK, имеет по крайней мере один параметр настройки. Задавая требуемое значение параметра (или выбирая его из предлагаемого меню), пользователь имеет возможность скорректировать функцию, реализуемую данным блоком. Чтобы открыть окно настройки параметров, нужно дважды щелкнуть ЛКМ на изображении блока.
Однако возможность изменять значения параметров появляется только после того, как блок будет помещен в окно блок-диаграммы. LTI CommTbx library
Controls Toolbox
DSP
DSP Blockset
Fixed-Point Blockset
SIMULINK Fuzzy
SF
NCD MPC Blocks
System ID Blocks
NCD Blockset Neural Network Power System Blockset Blockset
Simulink Extras
Stateflow
Рис. 2.4 Окна настройки параметров всех библиотечных блоков имеют идентичную структуру и содержат краткую характеристику блока, поля ввода (или выбора) значений параметров блока и 4 кнопки: Apply – применить; Revert – вернуть предыдущее значение параметров; Help – вызов файла помощи в формате html; Close – закрыть окно настроек. Измененные значения параметров вступают в силу после «нажатия» кнопки Apply. Чтобы запустить модель на исполнение с новыми параметрами, закрывать окно настроек не обязательно. Вернемся к основным разделам библиотеки SIMULINK. Как уже было сказано, их шесть. 2.2.1. Раздел Sources (Источники) В окне Library: Simulink найдите раздел Sources и откройте его, дважды щелкнув на его изображении ЛКМ. Блоки, входящие в этот раздел, предназначены для формирования сигналов, обеспечивающих управление работой S-модели в целом или отдельных ее частей. Все блоки-источники имеют по одному выходу и не имеют входов (рис. 2.5). Замечание. Терминология, используемая авторами SIMULINK для описания блоков этого и других разделов библиотеки, говорит о том, что в основном имеются в виду электрические сигналы. Тем не менее, физическая интерпретация понятия «сигнал» в каждом конкретном случае различна и определяется в первую очередь физической природой моделируемой системы.
1 Constant Итак, в качестве источников сигналов Signal Step Generator (входных величин) могут использоваться следующие блоки: Constant − формирует постоянную Ramp Sine Wave Repeating Sequence величину (скаляр, вектор или матрицу); Signal Generator − создает непрерывный сигнал произвольной формы; Discrete Pulse Pulse Chirp Signal Generator Generator Step – генерирует единичный 12:34 дискретный сигнал с заданными параметрами; Clock Digital Clock Ramp – создает линейно возрастающий (убывающий) сигнал; untitled.mat [T,U] Sine Wave – генератор гармонических From File From колебаний; Workspace Discrete Pulse Generator – генератор дискретных импульсных сигналов; Uniform Random Band-Limited Chirp Signal – генератор Random Number White Noise Number гармонических колебаний переменной частоты; Рис. 2.5 Clock – источник непрерывного временного сигнала; Digital clock – формирует дискретный временной сигнал; Random Number – источник дискретного сигнала, амплитуда которого является случайной величиной, распределенной по нормальному закону;
Uniform Random Number – источник дискретного сигнала, амплитуда которого является равномерно распределенной случайной величиной; Band-Limited White Noise – генератор «белого шума» с ограниченной полосой. Следующие два блока из раздела “Источники” отличаются от перечисленных тем, что обеспечивают использование в модели различных числовых данных, полученных ранее как с помощью SIMULINK, так и другими средствами MATLAB. Первый из них – From File – предназначен для ввода в S-модель данных, хранящихся в МАТ-файле. Второй – From Workspace – обеспечивает ввод в модель данных непосредственно из рабочей области MATLAB. Структура данных в МАТ-файле представляет собой многомерный массив с переменным числом строк, которое определяется числом регистрируемых переменных. Элементы первой строки содержат последовательные значения модельного времени, элементы в других строках – соответствующие им значения переменных.
Как и другие библиотечные блоки, блоки – «источники» могут настраиваться пользователем (за исключением блока Clock, работа которого основана на использовании аппаратного таймера компьютера). Рассмотрим особенности настройки тех блоков, которые понадобятся нам в дальнейшем при разработке собственных S-моделей. Блок Step. Он обеспечивает формирование единичного управляющего сигнала, который может использоваться в любой точке модели. Блок имеет 3 параметра настойки (рис. 2.6): Step time (Шаг времени) – определяет длительность сигнала, исходное значение параметра равно 1. Initial value (Начальное значение) – задает значение амплитуды сигнала в начальный момент времени, исходное значение – 0. Final value (Конечное значение) – задает значение амплитуды сигнала по истечении шага моделирования, исходное значение этого параметра равно 1.
Рис. 2.6 Чтобы увидеть, что представляет собой сигнал, создаваемый блоком Step, и как на него влияют значения указанных параметров, воспользуемся уже знакомым нам окном Scope. Последовательность действий для достижения поставленной цели такова. 1. В разделе File командного окна MATLAB выберите последовательность команд New –> Model. Откроется (или станет активным) пустое окно для создания новой блок-диаграммы. 2. В разделе библиотеки Источники (он открыт) найдите блок Step, нажмите ЛКМ и, не отпуская ее, перетащите контур блока на свободное поле окна untitled. Отпустите ЛКМ. В окне появится блок Step – первый блок будущей диаграммы. 3. В окне библиотеки SIMULINK откройте раздел Sinks (Получатели), дважды щелкнув на его изображении ЛКМ. Найдите в нем блок Scope и, нажав
ЛКМ, перетащите его контур на свободное поле окна untitled. Отпустите ЛКМ. В окне появится блок Scope. 4. Для удобного соединения блоков расположите их так, чтобы вход блока Scope находился напротив выхода блока Step (на любом расстоянии). 5. Подведите курсор мыши к выходу блока Step. Курсор примет форму крестика. Нажмите ЛКМ и, не отпуская ее, переместите курсор к входу блока Scope. Как только крестик станет двойным, отпустите кнопку мыши. Между блоками образуется линия связи со стрелкой, указывающей направление передачи сигнала (рис. 2.7).
Step
Scope
Рис. 2.7 6. Откройте окно Scope, дважды щелкнув на нем ЛКМ. Теперь можно «оживить» полученную блок-диаграмму, состоящую из двух элементов. Для этого, как и при наблюдении за «прыгающим мячом», нужно выполнить команду Start. Сформированный сигнал отображается в окне Scope (рис. 2.8). Из рисунка видно, что при исходных значениях параметров блока Step величину Step time можно интерпретировать как период задержки сигнала.
Рис. 2.8 Замените значение параметра Initial value на «1», а параметра Final value – на «О» и повторите моделирование. Форма сигнала изменилась (рис. 2.9). Теперь величина Step time определяет длительность управляющего сигнала. Именно такой подход к использованию блока Step оказывается более удобным при разработке многих S-моделей.
Рис. 2.9 Необходимо отметить, что значения всех трех параметров блока могут задаваться не только в форме констант, но и в виде вычисляемых выражений, в том числе содержащих функции. Блок Discrete Pulse Generator. Отыщите его в разделе Источники и с помощью двойного щелчка откройте окно настроек блока. Оно позволяет изменять значения пяти параметров (рис. 2.10): амплитуды сигнала (Amplitude); величины периода сигнала (Period), ширины импульса (Pulse width), величины задержки сигнала (Phase delay), шаг изменения модельного времени (Sample time).
Рис. 2.10 Значения параметров 2... 4 должны задаваться как целое число шагов модельного времени (number of samples). Поэтому выбор значений параметров блока целесообразно начинать с выбора величины Sample time. Размер шага можно указать как в форме константы, так и в форме вычисляемого выражения.
Если вычисленное значение является дробным, оно округляется до целого. Аналогично может быть задано и значение амплитуды, но в случае дробной величины округление не производится. Блок Random Number обеспечивает формирование сигналов, амплитуда которых является случайной величиной, распределенной по нормальному закону с заданными параметрами. Блок имеет четыре параметра настройки. Первые два – Mean и Variance – являются параметрами нормального закона (среднее и дисперсия), третий – Initial seed – задает начальное значение для инициализации генератора последовательности случайных чисел. При фиксированном значении этого параметра генератор всегда вырабатывает одну и ту же последовательность СЧ. Четвертый параметр (Sample time) используется так же, как и в рассмотренных ранее блоках. Блок Uniform Random Number обеспечивает формирование сигналов, амплитуда которых является случайной величиной, распределенной равномерно в заданном интервале. В блоке имеются такие же параметры настройки Initial feed и Sample time, как и в Random Number. Еще два параметра (Minimum и Maximum) задают диапазон распределения СВ. Блок Digital Clock. Этот блок имеет единственный параметр настройки – величину шага изменения модельного времени (Sample time). Величина шага задается таким же образом, как и в блоке Discrete Pulse Generator. Если величина шага задана выражением, то оно вычисляется только однажды, и полученное значение используется на всем интервале моделирования. Особенность блока Digital Clock состоит в том, что он не только формирует величину шага, но и вычисляет новое значение модельного времени, которое используется для проверки условия окончания моделирования. Очередное значение модельного времени вычисляется как сумма предыдущего значения и величины шага моделирования. Блок From File имеет в качестве параметра настройки имя МАТ-файла, из которого будут считываться требуемые данные. Если указывается только имя файла, то поиск файла производится в открытой папке. При необходимости можно указать полный путь доступа к файлу. После закрытия окна настроек имя файла выводится на изображении блока. Немного забегая вперед отметим, что в разделе библиотеки Получатели имеется блок То File, который выполняет запись результатов моделирования в МАТ-файл. Блок From Workspace, как было сказано ранее, обеспечивает использование в S-модели данных, хранящихся в рабочей области (собственной оперативной памяти) MATLAB. Блок имеет один составной параметр настройки, который представляет собой упорядоченный список используемых данных, заключенный в квадратные скобки (рис. 2. 11).
Рис. 2.11 Список должен содержать не менее двух элементов, первым из которых является вектор значений модельного времени с именем tout. Остальные элементы списка представляют собой векторы значений вводимых из рабочей области величин. Длина каждого из этих векторов должна быть равна длине вектора tout. Как правило, в качестве элементов списка данных используются величины, помещенные в рабочую область MATLAB с помощью блока То Workspace, входящего в раздел библиотеки Sinks (Получатели). 2.2.2. Раздел Sinks (Получатели) Напомним, что раздел библиотеки Sinks мы уже открывали, чтобы «достать» из него блок Scope. Блоки, собранные в этом разделе, достаточно существенно различаются по функциональному предназначению (рис. 2.12). Scope XY Graph Условно их можно разделить на три вида: 0 1) блоки, используемые при моделировании в Display качестве «смотровых окон». К ним относятся: блок Scope, который уже упоминался untitled.mat simout выше; To File To Workspace блок XYGraph, обеспечивающий создание STOP двумерных графиков в прямоугольной системе Stop Simulation координат; блок Display, предназначенный для Рис. 2.12 отображения численных значений величин; 2) блоки, обеспечивающие сохранение промежуточных и/или выходных результатов моделирования: блок То File; блок То Workspace; 3) блок управления моделированием – Stop Simulation, который позволяет прервать моделирование при выполнении тех или иных условий.
Блок срабатывает в том случае, если на его вход поступает ненулевой сигнал и не имеет параметров настройки. Блок Scope. Напомним, что этот блок позволяет в процессе моделирования наблюдать динамику изменения интересующих исследователя характеристик системы. Создаваемое с его помощью «смотровое окно» напоминает экран измерительного прибора. Открыть окно Scope можно только после того, как блок помещен на поле блок-диаграммы (щелкнув дважды на его изображении ЛКМ). Размер и пропорции окна можно изменять произвольно, используя курсор мыши. По оси ординат шкалы измерений откладываются значения наблюдаемой величины, по оси абсцисс – значения модельного времени. По умолчанию для оси ординат используется диапазон [-5; 5], а для оси модельного времени - [0; 10]. Блок-диаграмма может быть построена таким образом, чтобы на вход блока Scope поступала векторная величина. В этом случае для каждого элемента вектора в окне строится отдельная кривая, отражающая динамику его изменения. Выводимые кривые различаются цветом, который устанавливается автоматически. Одновременно в окне Scope может отображаться до 30 кривых. Для управления параметрами окна Scope в нем имеется панель меню, содержащая семь кнопок (рис. 2.13): 1
2
3
4
5
6
7
Рис. 2.13 где 1 – изменение масштаба осей графика; 2 – изменение масштаба по оси абсцисс; 3 – изменение масштаба по оси ординат; 4 – автоматическая установка оптимального масштаба осей; 5 – сохранение установленного масштаба осей; 6 – вызов диалогового окна настройки параметров блока Scope; 7 – печать содержимого окна Scope. Кнопки 1... 3 являются альтернативными, т. е. в каждый момент времени может быть «нажата» только одна из них. Для изменения масштаба по выбранной оси координат необходимо: «нажать» соответствующую кнопку изменения масштаба; подвести курсор мыши к тому участку графика, который должен быть отображен в новом масштабе; нажать (один раз!) ЛКМ. Первое нажатие ЛКМ приводит к четырехкратному увеличению масштаба, каждое последующее дает увеличение масштаба в два раза.
При «нажатии» кнопки 6 открывается окно Properties: Scope, содержащее две вкладки: Axes (оси), позволяющая устанавливать параметры осей графика; Setting (установки), предназначенная для ввода значений дополнительных параметров блока Scope. В нижней части окна расположены кнопки, аналогичные кнопкам окон настройки параметров других библиотечных блоков: Apply (Применить); Revert (Вернуть исходные значения); Help (Вызов помощи в формате HTML); Close (Закрыть окно). На вкладке Axes имеются поле Default limits (Диапазоны осей) и флажок Hide tick label (Скрыть обозначение осей). В поле Default limits устанавливаются верхняя ( Y max) и нижняя (Y min) границы оси ординат, а также наибольшее отображаемое значение модельного времени на оси абсцисс (Time range). Относительно оси времени необходимо сделать дополнительное пояснение. Если величина заданного интервала моделирования не превышает значение Time range (и, следовательно, весь процесс «умещается» в окне Scope), то под графиком в строке Time offset: выводится 0. Если же интервал моделирования превышает значение Time range, то в окне отображается только отрезок времени, равный Тм-п (Time range), где Tм – длительность интервала моделирования, n – целое число. При этом в строке Time offset выводится величина «скрытого» интервала времени (длиной n x (Time range)). Например, если значение Time range равно 7, а длительность интервала моделирования составляет 16 единиц времени, то в окне Scope будет выведен график моделируемого процесса за последние 2 единицы времени, а строка под графиком будет иметь вид: Time offset: 14. Флажок Hide tick label позволяет изменить форму вывода графика в окне Scope. Если он установлен, то оси графика не отображаются, и график занимает всю рабочую область окна. Чтобы установленные значения параметров вступили в силу, необходимо «нажать» кнопку Apply, расположенную в нижней части окна Properties. На вкладке Setting имеются следующие поля: 1. Поле General обеспечивает выбор дискретности измерения отображаемых величин (характеристик системы и модельного времени). Установка дискретности измерения характеристик системы и времени выполняется раздельно. Выбор производится с помощью выпадающего меню, содержащего два пункта: 2. Decimation – установка дискретности измерения характеристик системы; 3. Sample time – установка дискретности измерения модельного времени. Для ввода требуемых значений используется строка редактирования, расположенная справа от меню.
По умолчанию для измеряемых характеристик дискретность равна 1, а для модельного времени – нулю. Это означает, что значение наблюдаемой характеристики измеряется на каждом шаге моделирования, а модельное время считается непрерывным. Если параметр Decimation установить равным, например, 3, то значение исследуемой характеристики будет определяться только 1 раз в течение трех шагов моделирования. Параметр Decimation может принимать только целочисленные значения. Дискретность измерения модельного времени – это фактически величина шага моделирования. По умолчанию она равна 0, 02. Для дискретных систем величина шага может быть задана либо в виде положительной константы, либо в форме вычисляемого выражения. Дискретность изменения модельного времени определяет момент окончания вывода данных в окно Scope: если очередной интервал заканчивается за пределами окна, то данные для него не выводятся. Замечание. Параметр Sample time имеется практически во всех библиотечных блоках SIMULINK. Для каждого блока значение этого параметра устанавливается индивидуально. Если блок реализует некоторую функцию, то параметр Sample time определяет дискретность вычислений. Поэтому для корректной работы модели необходимо согласовывать установку параметра для взаимосвязанных блоков. 2. Поле Data history позволяет задавать максимальный объем и способ хранения отображаемых в окне данных. Объем сохраняемых данных (Limit rows to last) вводится в строке редактирования. Способ хранения указывается с помощью флажка Save data to workspace: если он установлен, то отображаемые в окне Scope данные сохраняются в рабочей области MATLAB в виде матрицы, аналогичной по структуре МАТ-файлу. Имя матрицы указывается в строке редактирования (по умолчанию – ScopeData) 3. Флажок Floating Scope предназначен для изменения способа использования блока Scope в блок-диаграмме. При установленном флажке Scope отображается как блок без входа, и если он был связан по входу с другими блоками, то эти связи «обрываются». Блок XYGraph. Этот блок также относится к «смотровым окнам». Он представляет собой упрощенный вариант блока Scope и обеспечивает построение графиков зависимостей произвольных величин, фигурирующих в модели. Блок имеет два входа, первый из которых предназначен для ввода аргумента, второй – для ввода значений функции этого аргумента. На рис. 2.14 показан внешний вид окна XYGraph, содержащего график функции sqrt (t), где t – текущее значение модельного времени. Окно XYGraph открывается автоматически при запуске модели. Оно имеет собственное меню, содержащее 4 раздела: • раздел File включает стандартные команды работы с файлами, а также опции вывода графиков на печать;
• раздел Edit содержит единственную доступную команду – Copy Figure, которая позволяет копировать содержимое окна XYGraph в буфер обмена; • содержание разделов Window и Help совпадает с содержанием одноименных разделов меню командного окна MATLAB.
Рис. 2.14 Блок XYGraph имеет следующие параметры настройки: диапазоны осей графика (X-min, Х-тах - для оси абсцисс и Y-min, Ymax - для оси ординат); шаг модельного времени (Sample time), по умолчанию его значение равно -1. Это означает, что величина шага совпадает с установленной для модели в целом (либо со значением одноименного параметра предшествующего блока). Блок Display. Oн предназначен для вывода на экран численных значений величин, фигурирующих в модели. Блок имеет 4 параметра настройки. Первый – Format – задает формат вывода; формат выбирается с помощью выпадающего меню, содержащего 5 пунктов: short, long, short_e, long_e, bank. Предлагаемые форматы вывода аналогичны форматам, используемым в командном окне MATLAB. Следующие два параметра используются так же, как и одноименные параметры блока Scope: Decimation – определяет периодичность вывода значений в окне Display; Переключатель Floating display позволяет указывать способ использования блока Display в блок-диаграмме; Поле Sample Time задает величину шага модельного времени, т. е. дискретность вывода данных в окно Display. Блок Display может использоваться для вывода как скалярных, так и векторных данных. Если отображаемая величина является вектором, то
исходный формат блока изменяется автоматически. Об изменении формата говорит маленький черный треугольник, появляющийся в нижнем правом углу блока. Для каждого элемента вектора создается свое мини-окно, но чтобы они стали видимы, необходимо «растянуть» изображение блока. Для этого следует выделить блок, подвести курсор мыши к одному из его углов (курсор при этом примет форму двойной стрелки), нажать ЛКМ, и, не отпуская ее, растянуть изображение блока. После того как ЛКМ будет отпущена, на экране появятся дополнительные окна с выведенными в них значениями элементов вектора. Если хотя бы один элемент вектора остался «за кадром», на изображении блока Display по-прежнему присутствует черный треугольник. В этом случае операцию «растягивания» блока следует повторить. Убедитесь в возможностях блока Display самостоятельно, используя в качестве источника сигнала блок Constant. Последовательность действий при этом должна быть почти такой же, как при знакомстве с блоком Scope: откройте раздел библиотеки Sources (Источники) и перенесите из него на свободное поле новой S-модели блок Constant; из раздела Sinks (Получатели) «перетащите» изображение блока Display и поместите его рядом с Constant; перемещая курсор от выхода Constant к выходу Display, соедините их между собой; выполните команду Start. После завершения работы «модели» в окне Display появится цифра «1». Чтобы получить изображение элементов вектора, откройте окно настроек блока Constant и введите в качестве нового значения любую последовательность чисел, заключенную в квадратные скобки (числа должны быть разделены пробелами или запятыми). После «нажатия» кнопки Apply (применить) опять выберите команду Start. После завершения работы модели на изображении блока Display появится упоминавшийся выше черный треугольничек. «Растяните» блок и убедитесь, что значения вектора Constant выведены правильно (рис. 2.15).
Рис. 2.15 Блок То File. Как уже было сказано, этот блок используется в паре с блоком From File из раздела Sources. Он обеспечивает запись в МАТ-файл данных, полученных в ходе моделирования. Блок имеет следующие параметры настройки (рис. 2.16):
Рис. 2.16 File в который будут записываться данные (может быть указан полный путь доступа к файлу, по умолчанию – untitled. mat); имя файла выводится на изображении блока в блок-диаграмме; Variable name – имя переменной, по которому можно обращаться к данным, записанным в файле (для того, например, чтобы просмотреть или изменить их в командном окне MATLAB); по умолчанию используется стандартное имя ans; Decimation – дискретность записи данных в файл; при Decimation=1 запись производится на каждом шаге моделирования; параметр может принимать только целочисленные значения; Sample Time – величина шага моделирования для данного блока. Блок То Workspace. Он также имеет «пару» из раздела Sources — блок From Workspace и предназначен для сохранения данных, полученных в процессе моделирования, в рабочей области MATLAB. Данные сохраняются в виде матрицы, структура которой отличается от структуры данных в МАТфайле тем, что: значения сохраняемых величин расположены по строкам, а не по столбцам; не регистрируются значения модельного времени (значение модельного времени регистрируется специальной переменной tout, при установке соответствующего флага в параметрах моделирования). Блок имеет 4 параметра настройки: Variable name − имя, под которым данные сохраняются в рабочей области (по умолчанию − Simout); Maximum number of rows (Максимальное количество строк) − предельно допустимое число шагов моделирования, для которого регистрируются данные
(по умолчанию задается константой inf, то есть регистрируются на всем интервале моделирования); Decimation − дискретность регистрации данных; Sample time − величина шага (дискретность изменения) модельного времени. Два последних параметра имеют тот же смысл, что и одноименные параметры блока To File. 2.2.3. Раздел Discrete (Дискретные элементы) В этот раздел входят блоки, с помощью которых в модели может быть описано поведение дискретных систем. Напомним, что различают два основных типа таких систем: системы с дискретным временем и системы с дискретными состояниями. Блоки, входящие в рассматриваемый раздел библиотеки SIMULINK, обеспечивают моделирование как тех, так и других. Раздел содержит 8 блоков (рис. 2 17): 1. Unit Delay − блок задержки сигнала; 2. Discrete-Time Integrator − дискретный сумматор (счетчик) времен; 3. Zero-Order Hold − экстраполятор нулевого порядка; 4. First-Order Hold − экстраполятор первого порядка; 5. Discrete State-Space − блок формирования состояния системы. Блоки, обеспечивающие Z-преобразование входного сигнала; 6. Discrete Filter; 7. Discrete Transfer Fcn; 8. Discrete Zero-Pole.
Рис. 2.17
С точки зрения иллюстрации технологии имитационного моделирования интерес представляют первые два блока из рассматриваемого раздела. Познакомимся с ними поближе.
Блок Unit Delay обеспечивает задержку входного сигнала на заданное число периодов (шагов модельного времени). Параметрами настройки для этого блока являются: 1. Начальное значение сигнала (Initial condition) — значение амплитуды сигнала в момент активизации блока; оно может быть задано либо в виде числовой константы, либо в виде вычисляемого выражения. 2. Величина задержки (Sample time) − определяет число шагов модельного времени, в течение которого сохраняется значение сигнала,
поступившего на вход блока; как и первый параметр, может задаваться в любой форме, но значение параметра должно быть положительным. Блок Discrete-Time Integrator выполняет суммирование интервалов времени между поступлениями входного сигнала. Блок может быть использован для управления логикой работы отдельных компонентов ИМ или модели в целом. В частности, суммарная длительность работы некоторой подсистемы может служить условием «досрочного» окончания моделирования. Блок имеет следующие параметры настройки (рис. 2.18): используемый метод интегрирования (Integrator method); с помощью выпадающего меню пользователь может выбрать один из трех методов: прямой метод Эйлера; обратный метод Эйлера; метод трапеций; подключение дополнительного управляющего сигнала (External reset); использование внешней установки начального значения входного сигнала (Initial condition source). Выбор значений двух последних параметров также производится с помощью «выпадающих» меню. Параметр External reset может принимать следующие значения: none − дополнительный управляющий сигнал не используется; РИС. 2.18 rising - для управления используется возрастающий сигнал; falling − для управления используется ниспадающий сигнал; either − на работу блока влияет любое изменение амплитуды управляющего сигнала. Параметр Initial condition source принимает одно из двух значений: internal − используется собственная установка начального значения сумматора; external − установка начального значения производится извне. Если выбранные пользователем значения двух рассматриваемых параметров предполагают наличие дополнительных входных сигналов, то на графическом изображении блока появляются дополнительные входные порты (после нажатия кнопки Apply в окне настроек блока);
начальное состояние сумматора (Initial condition); значение вводится в строке редактирования либо как числовая константа, либо в виде вычисляемого выражения; флажок Limit output (Ограничение выходного значения сумматора) определяет, будут ли использоваться следующие ниже 4 параметра настройки; верхнее предельное значение времени ( Upper saturation limit); по умолчанию − не ограничено (inf); нижнее предельное значение времени (Lower saturation limit); по умолчанию параметр имеет значение -inf; флажок показать порт насыщения (Show saturation port); флажок показать порт состояния (Show state port). Параметры 5... 9 используются следующим образом. Если флажок Limit output установлен, то при переходе значения сумматора через верхний или нижний предел на дополнительных выходах блока (saturation port и state port) формируется единичный сигнал. Чтобы этот сигнал можно было использовать для управления работой Sмодели, флажки Show saturation port и Show state port должны быть включены (при этом на графическом изображении блока появляются обозначения портов). Особенность порта state port состоит в том, что снимаемый с него сигнал может быть использован только для прерывания алгебраического цикла или для согласования состояния подсистем модели. 2.2.4. Раздел Linear (Линейные элементы) Раздел содержит блоки, которые можно условно разделить на две группы: блоки, непосредственно предназначенные для описания линейных непрерывных систем, и блоки общего назначения, которые могут быть использованы в модели любой системы (рис. 2.19). К первой группе относятся: 1. Gain − «линейный усилитель» (умножитель). 2. Transfer Fcn − «передаточное звено». 3. State-Space − блок формирования состояния системы. 4. Zero-Pole. 5. Derivative − блок вычисления производной входного сигнала по времени (du/dt). 6. Dot Product − блок вычисления свертки (скалярного произведения) двух входных сигналов. 7. Matrix Gain − матричный усилитель (умножитель) входного сигнала. Во вторую группу входят три блока: 1. Integrator − сумматор непрерывного времени. 2. Sum − блок суммирования входных сигналов.
3. Slider Gain − блок изменения коэффициента усиления. В соответствии с общей концепцией книги более подробно будут рассмотрены блоки, относящиеся ко второй группе. Блок Integrator производит вычисление «времени существования» входного сигнала, и, подобно блоку Discrete-Time Integrator, может быть использован для определения временных характеристик моделируемой системы (или отдельных ее подсистем). Параметры настройки блока полностью идентичны параметрам настройки блока DiscreteTime Integrator, рассмотренным ранее. Некоторое отличие имеет лишь последний из них: вместо дискретности суммирования в данном случае требуется указать точность вычислений (Absolute tolerance). Блок Sum может использоваться в двух режимах: • сложения входных сигналов (в том числе с разными знаками); Рис. 2.19 • суммирования элементов вектора, поступающего на вход блока. Для управления режимами работы блока используется один параметр − List of signs (Список знаков). Значения этого параметра могут задаваться тремя способами: в виде последовательности знаков “+” и “-”; при этом число знаков определяет число входов блока, а сам знак − полярность входного сигнала; в виде целой положительной константы (больше 1); ее значение равно числу входов блока, а все входы считаются положительными; в виде символа “1”, который указывает на использование блока во втором режиме. Блок Slider Gain является одним из элементов взаимодействия пользователя с моделью в процессе моделирования. В активном состоянии блок представляет собой диалоговое окно, обеспечивающее установку значения некоторого параметра модели с помощью «ползункового» регулятора (рис. 2.20). Блок Slider Gain становится активным после того, как будет помещен в окно блок-диаграммы создаваемой модели. Чтобы открыть окно с регулятором, необходимо дважды щелкнуть на изображении блока ЛКМ. Окно Slider Gain имеет три поля ввода: для указания нижнего уровня параметра (Low), верхнего уровня (High) и текущего значения.
Рис. 2.20 2.2.5. Раздел Nonlinear (Нелинейные элементы) По составу элементов это самый большой и, пожалуй, наиболее полезный для имитационного моделирования раздел библиотеки SIMULINK. Он содержит 30 блоков, которые условно можно разделить по назначению на несколько групп (рис. 2.21). Первую группу образуют блоки, реализующие элементарные математические функции: 1. Блок Abs − формирует абсолютное значение входного сигнала (этот блок не имеет параметров настройки); 2. Блок Trigonometric Function обеспечивает преобразование входного сигнала с помощью одной из тригонометрических функций; выбор требуемой функции производится в окне настройки параметров блока с помощью «выпадающего» меню (оно становится доступным только после перемещения блока в поле блокдиаграммы); 3. Блок Math Function позволяет Рис. 2.21 использовать для преобразования входного сигнала элементарные нетригонометрические функции (вычисление экспоненты, натурального и десятичного логарифмов, возведение в степень, извлечение квадратного корня и т. д.). Нужная функция выбирается с помощью «выпадающего» меню; 4. Блок Rounding Function содержит различные функции округления значения амплитуды входного сигнала; выбор конкретного метода округления выполняется также с помощью «выпадающего» меню;
5. Блок MinMax обеспечивает поиск минимального или максимального элемента входного вектора. Цель поиска задается в окне настроек блока. Второй параметр настройки − число входов блока. Для блоков 2... 5 имя выбранной функции выводится на графическом изображении блока; 6. Блок Fcn − это универсальный «вычислительный» блок; в качестве параметра настройки блока можно ввести любое вычисляемое выражение, аргументом которого является значение входного сигнала; особенность этого блока состоит в том, что аргумент выражения должен быть указан явно. Для обозначения входного сигнала используется символ и. Если входной сигнал является вектором, то для операций, выполняемых над отдельными его элементами, аргумент также должен быть задан явно. Например, сложение двух элементов входного сигнала должно быть записано в таком виде: u (1)+ u (2); Замечание. Вычисляемое выражение должно давать только скалярное значение. Это ограничение снимается при использовании блока MATLAB Fcn. 7. Блок MATLAB Fcn позволяет применить к входному сигналу любую подпрограмму обработки, реализованную в виде М-файла. Это может быть как библиотечная функция пакета MATLAB, так и подпрограмма, созданная разработчиком S-модели. В первом случае использование блока MATLAB Fcn аналогично использованию блока Fcn. Вычисляемое выражение вводится в окне настроек блока в строке MATLAB function. Если оно содержит только обращение к библиотечной функции, то ее аргумент можно явно не указывать. Например, для вычисления квадратного корня входного значения достаточно ввести имя функции sqrt. Другой, более существенной, особенностью блока MATLAB Fcn является наличие второго параметра настройки − Output width (Ширина выходного сигнала). Это означает, что результатом работы блока может быть не только скаляр, но и вектор. Число его элементов должно быть равно значению параметра Output width; 8. Блок Product позволяет выполнять умножение или деление нескольких входных сигналов (величин). В качестве параметров настройки могут указываться число входов блока и вид выполняемой операции. Задание значений этих параметров аналогично настройке блока Sum из раздела Линейные элементы. В качестве знака операции умножения используется символ «*», а для указания операции деления − символ «/». Если в качестве значения параметра настройки блока ввести «1», то будет вычисляться произведение элементов входного вектора (в этом случае на изображении блока выводится символ Р). Вторую группу образуют блоки, обеспечивающие логическую обработку входного сигнала. Наиболее важными и полезными из них являются следующие: 1. Блок Logical Operator содержит набор основных логических операций: AND (операция логического умножения «И»), OR (логическое сложение
«ИЛИ»), NAND («И-НЕ»), NOR («ИЛИ-НЕ»), XOR (сложение по модулю 2), NOT (операция логического отрицания). Выбор требуемой функции выполняется с помощью «выпадающего» меню; имя функции отображается на иконке блока. Другим параметром настройки блока является число аргументов логической операции, то есть число входных портов блока (Number of input ports). Его значение вводится в строке редактирования и должно быть натуральным числом. Максимально допустимое число входов блока практически не ограничено; 2. Блок Relational Operator реализует операции отношения над двумя входными сигналами: >, <, >, <, = =(тождественно), != (не равно). Конкретная операция выбирается при настройке параметров блока посредством «выпадающего» меню. Знак операции выводится на изображении блока; 3. Блок Combinatorial Logic обеспечивает преобразование входного сигнала в соответствии с заданной таблицей истинности. По своим функциональным возможностям это очень мощный блок. С его помощью можно описать на уровне «вход-выход» логику работы любого устройства или системы. Единственное ограничение заключается в том, что входные данные и результат должны быть представимы в форме булевых величин. Напомним, что булева величина принимает только два значения:«1» («истина») или «0» («ложь»). На самом деле это очень «мягкое» ограничение, так как любое действие, утверждение или результат можно оценить по двухбалльной шкале: если действие произошло (или если некоторое утверждение нам нравится) − ставим ему «1», если же нет − оно получает оценку «0». Например, включение настольной лампы можно описать с помощью законов физики, а можно − с помощью булевых величин: «нажал выключатель» («1») − «лампа зажглась» («1»); «не нажал выключатель» («0») − «лампа не зажглась» («0»); или «нажал выключатель» («1») − «лампа не зажглась» («0»). Последний вариант возможен, если лампа неисправна. При таком подходе описываемое устройство рассматривается как «черный ящик», который при поступлении входного сигнала формирует некоторый выходной сигнал. В кибернетике для описания и исследования работы «черных ящиков» создана специальная теория − теория автоматов. Теперь, возвращаясь к блоку Combinatorial Logic, можно сказать, что он представляет собой обобщенную модель конечного детерминированного автомата. Для такого автомата заранее известны все возможные значения выходного сигнала, и набор их ограничен. Причем каждое выходное значение однозначно соответствует определенному входному воздействию. На вход блока может подаваться как скалярный, так и векторный сигнал. Скаляр в данном случае интерпретируется как одна булева величина, а вектор −
как их совокупность. При этом любое ненулевое значение входного сигнала соответствует значению «истина». Блок имеет единственный параметр настройки — Truth table (таблица истинности), который представляет собой список возможных выходных значений автомата. При задании таблицы истинности необходимо соблюдать два основных правила: число строк таблицы должно быть равно 2n, где п − число элементов (размерность) входного сигнала; входы таблицы считаются заданными. Например, если на вход блока Combinatorial Logic подается векторный сигнал с п=2, то параметр Truth table представляет собой список из четырех элементов, например такой: [0;1;0;1]. Сформированный выходной сигнал может быть или выведен в какоелибо «смотровое окно», или передан на другие блоки S-модели. Следующие четыре блока можно рассматривать как вариант модификации блока Combinatorial Logic для непрерывного входного сигнала. Dead Zone (Мертвая зона) − заменяет значение входного сигнала, лежащее в заданном диапазоне, нулем; Look-up Table (Таблица поиска) − выполняет линейную интерполяцию входного сигнала в соответствии с заданной табличной функцией. Look-up Table(2D) − производит линейную интерполяцию двумерного входного сигнала; Hit Crossing (Обнаружено пересечение) − позволяет идентифицировать момент времени, когда входной сигнал «пересекает» некоторое значение: при появлении такой ситуации на выходе блока формируется единичный сигнал. Блок Hit Crossing во многих случаях оказывается весьма удобным средством управления логикой работы S-модели, поэтому остановимся на нем немного подробнее. Блок имеет три параметра настройки: Hit crossing offset − определяет значение, «пересечение» которого необходимо идентифицировать; Hit crossing direction позволяет указать направление «пересечения», которое интересует разработчика модели; значение этого параметра выбирается с помощью «выпадающего» меню, которое содержит три пункта: rising (возрастание), falling (убывание), either (в обоих направлениях); Show output port (показать выходной порт) − флажок, с помощью которого можно выбрать формат использования блока. При одновременном выполнении условий, задаваемых параметрами Hit crossing offset и Hit crossing direction, на выходе блока формируется единичный импульс. Его длительность определяется значением параметра Sample time блока, предшествующего в модели блоку Hit crossing. Если этот параметр
отсутствует, то единичный сигнал на выходе блока Hit crossing существует до его следующего срабатывания. В третью группу можно объединить блоки, реализующие функцию задержки входного сигнала. Таких блоков в разделе Nonlinear три: Memory (Память); Transport Delay (Задержка передачи) Variable Transport Delay (Изменяемая задержка передачи). Блок Memory является наиболее «слабым» из них по своим возможностям. Он выполняет задержку входного сигнала только на один шаг модельного времени. Блок имеет два параметра настройки: Initial condition (Начальное состояние) — задает значение амплитуды входного сигнала на момент инициализации блока; в большинстве случаев целесообразно принимать это значение равным нулю; флажок Inherit sample time (наследование шага времени) позволяет выбрать величину шага, на который будет производиться задержка сигнала: если флажок снят, то используется минимальный шаг, равный 0.1 единицы модельного времени; если флажок установлен, то величина шага определяется значением Sample time блока, предшествующего блоку Memory. Блок Transport Delay обеспечивает задержку сигнала на заданное количество шагов модельного времени; причем необязательно целое. Настройка блока производится с помощью трех параметров: Time delay (Время задержки) − количество шагов модельного времени, на которое задерживается сигнал; может вводиться либо в числовой форме, либо в форме вычисляемого выражения; Initial input (Начальный ввод) − значение амплитуды входного сигнала в момент инициализации блока (по умолчанию равно 0); Initial buffer size (Начальный размер буфера) − объем памяти (в байтах), выделяемой в рабочей области MATLAB для хранения параметров задержанного сигнала; значение параметра должно быть кратно 8 (по умолчанию − 1024). Блок Variable Transport Delay позволяет задавать управляемую извне величину задержки. С этой целью блок имеет дополнительный вход. Подаваемый на него сигнал определяет длительность задержки информационного сигнала, поступающего на основной вход блока. Данный блок, как и предыдущий, имеет 3 параметра настройки: Maximum delay (Максимальная задержка), Initial input и Buffer size. Назначение двух последних параметров идентично назначению одноименных параметров блока Transport delay. Параметр Maximum delay определяет наибольшую допустимую величину задержки информационного сигнала. Если величина задержки, определяемая
управляющим сигналом, превышает этот порог, то она принудительно устанавливается равной параметру Maximum delay. Его значение измеряется числом шагов модельного времени, может иметь дробное значение и вводиться либо в числовой форме, либо в форме вычисляемого выражения. Четвертую группу образуют «блоки-переключатели», то есть блоки, управляющие направлением передачи сигнала. Таких блоков четыре: Switch (Переключатель); Manual Switch (Ручной переключатель); Multiport Switch (Многовходовый переключатель) Relay (Реле). Блок Switch имеет три входа: два информационных (1-й и 3-й) и один управляющий (2-й). Логика работы блока состоит в следующем. Если амплитуда сигнала, поступающего на 2-й вход, не меньше заданного порогового значения то на выход блока передается сигнал с 1-го входа, в противном случае - сигнал с 3-го входа. Блок имеет единственный параметр настройки - (Порог) Он может задаваться либо как числовая константа, либо как вычисляемое выражение. Периодичность срабатывания блока Switch определяется значением параметра Sample time блока, подсоединенного к его управляющему входу. На рис. 2.22 показан пример использования блока Switch (значение параметра Threshold равно 5).
Рис. 2.22 Необходимо иметь в виду, что при изменении направления передачи сигнала положение «перемычки» на иконке блока не изменяется. Блок Manual Switch не имеет параметров настройки и позволяет «вручную» выбирать один из двух входных портов, сигнал с которого будет передаваться на выход блока. Для перемещения «перемычки», соединяющей выходной порт блока Manual Switch с входным, необходимо дважды щелкнуть ЛКМ на изображении блока (предварительно, конечно, блок должен быть помещен в поле блок-диаграммы разрабатываемой модели). Блок Multiport Switch обеспечивает передачу на выход сигнала, поступающего на один из информационных входов. Номер коммутируемого входа равен значению сигнала, подаваемого на управляющий вход блока. Если это значение является дробным числом, то оно округляется до целого по
стандартным арифметическим правилам. Исключение составляют 2 случая: если значение управляющего сигнала меньше 1, то оно считается равным 1; если значение управляющего сигнала превышает число информационных входов, то оно принимается равным наибольшему номеру (входы нумеруются сверху вниз). Блок имеет один параметр настройки − Number of inputs (Число входов), который устанавливает число информационных входов. Значение параметра может вводиться в форме числовой константы или в форме вычисляемого выражения. Блок-диаграмма, поясняющая работу блока, приведена на рис. 2.23.
Рис. 2.23 Блок Relay работает по аналогии с обычным реле: если входной сигнал превышает некоторое пороговое значение, то на выходе блока формируется «разрешающий» сигнал. Блок имеет 4 параметра настройки: Switch on point (Точка включения) − задает пороговое значение, при превышении которого происходит «включение» реле; Switch off point (Точка выключения) − задает уровень сигнала, при котором реле «выключается»; Output when on (Выход при включенном состоянии) − определяет значение амплитуды «разрешающего» сигнала; Output when off (Выход при выключенном состоянии) − уровень сигнала на выходе реле, когда оно находится в состоянии «выключено». Значения всех параметров блока могут вводиться либо в форме числовых констант, либо в форме вычисляемых выражений. Остальные блоки раздела традиционно используются при моделировании систем автоматического регулирования и не требуют дополнительных пояснений.
2.2.6. Раздел Connections (Соединительные узлы) Большинство блоков данного раздела предназначено для разработки Sмоделей, содержащих модели более низкого уровня (подсистемы). Состав блоков раздела показан на рис. 2.24. Технология создания и использования подсистем будет описана ниже, поэтому пока ограничимся только краткой характеристикой блоков, относящихся к этой группе. 1. Блоки In (Входной порт) и Out (Выходной порт) обеспечивают «линейную» связь между подсистемами модели по информации. 2. Блоки Goto Tag Visibility (Признак видимости), From (принять) и Goto (передать) используются совместно и предназначены для обмена данными между различными компонентами S-модели с учетом доступности (видимости) этих данных. 3. Блоки Data Store Memory (Память данных),'Data Store Read (чтение данных) и Data Store Write (Запись данных) также используются совместно и обеспечивают не только передачу данных, но и их хранение на интервале моделирования. 4. Блоки Enable (Разрешить) и Trigger (в данном случае уместен буквальный перевод этого слова − защелка) предназначены для логического управления работой подсистем S-модели. 5. Блок Subsystem (Подсистема) представляет собой «заготовку» для создания подсистемы. Подсистема − это достаточно самостоятельная S-модель более низкого уровня, которая, в свою очередь, может содержать подсистемы произвольного уровня вложенности. Наряду с перечисленными выше, раздел Connections содержит еще несколько элементов, которые имеют самостоятельное значение и могут оказаться весьма полезными при создании многих практических приложений. Блок Mux − выполняет объединение входных величин в один линейный вектор. При Рис. 2.24 этом входные величины могут быть как скалярными, так и векторными. Размерность результирующего вектора равна суммарному количеству элементов, поступающих на входные порты блока. Например, если на 1-й вход блока подается матрица размером 2Х2, содержащая четыре элемента:[[1,4],[6,7]], на
2-й и 3-й входы − константы 2 и 3 соответственно, то выходной вектор будет выглядеть так: [146723]. Блок Mux имеет один параметр настройки − Number of inputs (Число входов). Блок Demux (Разделитель) выполняет функции, противоположные функциям блока Mux: разделяет входной вектор на заданное число компонентов. Данный блок также имеет единственный параметр настройки, который называется Number of outputs (Число выходов). Поскольку соотношение между размерностью входного вектора и числом выходов блока может быть различным, то размерность компонентов выходного вектора разработчику модели необходимо определять заранее самому. При этом следует учитывать следующие особенности работы блока Demux. Если размерность входного вектора (М) равна значению параметра Number of outputs, т. е. числу выходов блока (N), то на всех выходах блока формируются скалярные величины − входной вектор просто распадается на отдельные элементы. Если размерность входного вектора превышает число выходов блока (M>N), то на первых (n-1)-ом выходах формируются векторы, размерность которых равна целой части отношения M/N, а размерность вектора на последнем выходе равна остатку от деления. Если M
Elements (Элементы) − список номеров элементов входного вектора, подлежащих отбору; luput port width (Размерность входного порта) − размерность входного вектора, который может быть «просеян» с помощью данного блока; значение этого параметра обязательно должно совпадать с числом элементов входного вектора. Если на вход блока подается матрица, то в списке Elements используется сквозная нумерация элементов, причем индекс изменяется построчно. Например, если на вход блока поступает матрица размером 3×4, то ее элементы будут иметь номера с 1-го по 12-й, причем номера 1...3 будут принадлежать элементам первой строки, номера 4..6 − элементам 2-й строки и т. д. На рис. 2.25 показана работа блока Selector, выполняющего «просеивание» входного массива, содержащего две строки (в первой − три элемента, во второй − два). На выход блока, в соответствии с его параметрами настройки (рис. 2.26), передаются только два элемента − первый и четвертый. Существенным достоинством блока является то, что значения его параметров настройки отображаются в графическом виде на иконке блока.
Рис. 2.25
Рис. 2.26 Блок Merge (Слияние) выполняет объединение поступающих на его входы сигналов в один. Блок имеет два параметра настройки: Number of inputs (Количество входов), определяющий число входных сигналов, которое может быть подано на входы блока; для корректной работы
блока все входные сигналы должны иметь одинаковую размерность (хотя при несоблюдении этого правила сообщение об ошибке не выдается); Initial output (Инициализация выхода) − задает сигнал, на основе которого должно выполняться объединение; если значение параметра не задано, то на выход блока просто выдается один из входных сигналов.
2.2.7. Дополнительные разделы библиотеки (Blocksets & Toolboxes) Еще раз отметим, что раздел Blocksets &Toolboxes является единственным разделом, содержимое которого изменяется в зависимости от установленной на вашем компьютере конфигурации пакета MATLAB. Если из инструментальных средств пакета в рабочую конфигурацию включен только SIMULINK, то данный раздел содержит единственный подраздел − Simulink Extras (Дополнения к Simulink). Этот подраздел, в свою очередь, разбит на шесть частей: Additional Sinks (Дополнение к разделу Sinks) − включает дополнительные графические «смотровые окна»; четыре из них обеспечивают визуализацию спектрального анализа сигналов, другие два − отображение корреляционных характеристик сигналов. Для использования двух последних блоков требуется включить в состав конфигурации пакета инструментальные средства обработки сигналов (Signal Processing Toolbox); Additional Linear (Дополнение к разделу Linear) − блоки, входящие в эту часть библиотеки, предназначены для расчета характеристик линейных систем автоматического управления; Transformations (Преобразования) − содержит блоки, выполняющие различные преобразования числовых величин: координат − из прямоугольной системы в полярную либо сферическую и обратно; температуры − из шкалы Фаренгейта в шкалу Цельсия и обратно; углов − из градусов в радианы и обратно. Flip Flop (Триггеры) − содержит блоки, моделирующие работу основных типов триггеров: D-триггер; S-R-триггер; J-K-триггер. Кроме того, в эту часть библиотеки включен блок Clock (Часы), генерирующий дискретный временной сигнал. Параметром настройки этого блока является величина периода сигнала; Linearization (Линеаризация) − раздел содержит единственный блок, позволяющий вычислить производную входного сигнала по времени.
На этом мы завершим знакомство с базовой библиотекой блоков SIMULINK. В заключение еще раз отметим, что основная цель приведенного краткого обзора разделов библиотеки − дать читателю представление о потенциальных возможностях SIMULINK как инструмента визуального моделирования. 2.3. Меню пользователя Если создается новая S-модель (как в нашем случае), то в первую очередь необходимо открыть новое (пустое) окно блок-диаграммы. Это можно сделать либо из командного окна MATLAB, либо из окна Library: Simulink, выбрав из меню последовательно команды File —> New —> Model. Новое окно блокдиаграммы имеет по умолчанию имя untitled (‘безымянное'), которое может быть изменено при записи файла модели на диск. Меню окна блок-диаграммы (в дальнейшем для краткости будем называть его меню пользователя) содержит четыре основных раздела: File, Edit, Simulation и Format. 2.3.1. Раздел File В него входят следующие пункты. New − создание нового окна блок-диаграммы; команда имеет два варианта: Model (открыть окно для создания S-модели) и Library (открыть окно для создания нового раздела библиотеки SIMULINK). Open − открыть mdl-файл; при выборе данного пункта открывается стандартное диалоговое окно файловой системы Windows, с помощью которого можно найти и открыть требуемый файл, имеющий расширение mdl. Close − закрыть окно блок-диаграммы (и соответствующий mdl-файл); если в блок-диаграмму вносились изменения, которые не были сохранены в файле на диске, то перед закрытием окна MATLAB запрашивает подтверждение на закрытие файла. Save − сохранить (записать на диск) mdl-файл; если данный файл записывается впервые, то при выборе этой команды открывается диалоговое окно, с помощью которого пользователь может выбрать новое имя файла (вместо untitled) и каталог, в котором будет производиться запись; если же файл уже записывался на диск ранее, то при выполнении команды Save он будет сохранен под прежним именем и в том же каталоге (при этом диалоговое окно не открывается). Save as... − сохранить как... (переписать) − команда позволяет сохранить файл под новым именем или в другом каталоге; при ее выполнении открывается диалоговое окно файловой системы Windows. Замечание: при выполнении команд Save as... и Save (при первой записи) mdl-файл при необходимости может быть сохранен в формате М- или МАТфайла. Этим разработчику предоставляется возможность корректировать текст программы модели с помощью встроенного отладчика MATLAB.
Show Browser − вызов специального средства просмотра структуры Sмодели (броузера). Основное назначение этого средства − отображение в текстовой форме иерархической структуры модели. Его полезно использовать в том случае, если S-модель содержит подсистемы, относящиеся к различным уровням вложенности. При запуске броузера открывается его диалоговое окно. Окно содержит два списка и элементы управления. В левом списке выводятся имена подсистем, входящих в состав S-модели. Список может быть выстроен либо в соответствии с иерархией подсистем, либо в алфавитном порядке. Выбор способа упорядочения выполняется с помощью команды Display раздела Options меню броузера. Для повышения наглядности при выводе списка подсистем используются специальные символы: «+» − подсистема содержит подсистемы более низкого уровня, которые не выведены в списке; чтобы «развернуть» список, необходимо дважды щелкнуть ЛКМ на строке, помеченной символом «+». После этого имена вложенных подсистем появятся в списке, а символ «+» будет заменен символом «-»; [М] − признак «маскированной» подсистемы; это означает, что непосредственно из блок-диаграммы содержимое такой подсистемы просмотреть нельзя; [L] − признак того, что подсистема взята из библиотеки и не подлежит редактированию из окна блок-диаграммы; [О] − соответствующая подсистема представляет собой информационное (справочное) окно; [S] − признак подсистемы типа State/low chart (Диаграмма состояний). разрабатываются с помощью специального Такие подсистемы инструментального средства MATLAB − Stateflow. Если маскированная подсистема является в то же время и библиотечной, то ее имени предшествует символ [ML]. В правой части окна броузера выводится список блоков, входящих в состав подсистемы, выделенной в левом списке. Если какой-либо блок является подсистемой следующего уровня вложенности, то возле его имени также могут присутствовать пояснительные символы из числа рассмотренных выше (кроме знака +). Двойной щелчок ЛКМ на имени блока в правом списке приводит к открытию окна настроек данного блока (т. е. это действие аналогично двойному щелчку ЛКМ на иконке блока в блок-диаграмме). Тот же результат дает и нажатие кнопки Open System, расположенной ниже, Тип выбранного блока отображается под правым списком в строке Block Type. Информация о типе блока оказывается полезной в том случае, если разработчик S-модели использовал для обозначения блока в диаграмме «нестандартное» имя.
Кроме упомянутой выше кнопки Open System, диалоговое окно броузера содержит еще ряд элементов управления: флажок Look Under [M]ask Dialog, который позволяет изменять статус маскированных подсистем: если он установлен, то такая подсистема считается обычным блоком, «заглянуть» в нее невозможно, и ее имя выводится только в списке блоков (в правой части окна), если снят, то имя подсистемы выводится в левом списке (с символом [М]), а ее состав отображается в правом списке; флажок Expand [L]ibrary Links (Связи с расширением библиотеки) позволяет изменять статус подсистем, которые взяты из расширенной библиотеки (т. е. из библиотеки пользователя); используется он так же, как флажок Look Under [M]ask Dialog; кнопка Look Into System (Взгляд внутрь системы) доступна только в том случае, если в правом списке выбрана маскированная подсистема (т. е. подсистема с признаком [М] или [ML]); при «нажатии» кнопки открывается окно блок-диаграммы выбранной подсистемы. Каждому из четырех рассмотренных элементов управления соответствует одноименная команда (опция) из раздела Options меню броузера (Open System, Look into system, Look Under [M}ask Dialog, Expand [L]ibrary Links). В этом разделе имеется еще одна команда, не упоминавшаяся ранее − Expand All (Развернуть все); она позволяет просмотреть полную иерархию Sмодели. При ее выполнении для подсистем, помеченных в левом списке символом «+», выводятся имена вложенных подсистем всех уровней. В нижней части окна броузера расположены три дополнительные «сервисные» кнопки: Help − вывод справки по броузеру (открывается соответствующий раздел встроенной справочной системы пакета MATLAB); Print − вывод на печать информации о модели; команда выполняется так же, как одноименная команда из раздела File; особенности ее использования будут рассмотрены ниже. Close − закрытие окна броузера. Пункт Print меню раздела File позволяет выводить на печать блокдиаграмму модели и некоторую дополнительную информацию по ней. При выполнении этой команды открывается диалоговое окно, обеспечивающее настройку параметров печати. Окно состоит из двух основных полей: Printers и Options. Первое поле содержит стандартные параметры настройки принтера из среды Windows (тип принтера, логическое имя порта вывода и т. д.). Поле Options является специфическим именно для вывода информации об S-модели. На нем расположены следующие элементы управления: переключатели уровня иерархии, с помощью которых можно выбрать перечень компонентов S-модели (подсистем), которые будут распечатаны в виде блок-диаграммы; возможны следующие варианты:
Current system − печать только активного (текущего) окна блокдиаграммы; Current system and above − печать текущего окна и всех подсистем более высокого уровня, в состав которых входит выбранная подсистема; Current system and below − печать выбранной подсистемы и блокдиаграмм всех входящих в нее подсистем; All systems − печать блок-диаграмм всех подсистем, входящих в состав Sмодели. флажок Include Print Log (Добавить печать реестра) позволяет вывести на печать в текстовой форме список блоков и подсистем, входящих в состав модели; флажок Look Under Mask Dialog обеспечивает разрешение/запрет печати блок-диаграмм маскированных подсистем; флажок Expand Unique Library Links (Раскрыть связи с личной библиотекой) позволяет разрешить/запретить печать блок-диаграмм подсистем из личной (дополнительной) библиотеки пользователя; при этом для библиотечных блоков (подсистем) блок-диаграмма печатается лишь однажды, сколько бы раз они ни встречались в модели. Два последних флажка становятся доступными только в том случае, если выбраны уровни иерархии печати Current system and below или All systems. Print setup — обеспечивает настройку параметров вывода на печать с помощью стандартного окна Windows. 2.3.2. Раздел меню пользователя Edit В данном разделе содержатся команды, обеспечивающие редактирование (изменение) структуры модели. Некоторые из них являются традиционными для Windows-приложений командами редактирования, другие относятся к специфическим командам работы с S-моделью. В раздел Edit входят следующие пункты: Undo − отменить предыдущую команду редактирования; в некоторых случаях команда Undo может конкретизироваться; например, после добавления в блок-диаграмму линии связи между блоками она называется Undo Add Line (Отменить добавление линии); если нельзя отменить предыдущее действие, то команда Undo заменяется сообщением Can't Undo. Redo − отменить выполнение команды Undo; эта команда также может видоизменяться − либо конкретизироваться (например, Redo Add Line), либо сообщать о невозможности отмены (Can't Redo); Cut − вырезать (забрать в буфер обмена) один или несколько блоков; соответствующие блоки должны быть выделены; чтобы выделить группу блоков, необходимо поместить курсор мыши рядом с одним из них и нажать ЛКМ, при этом курсор примет форму крестика; не отпуская кнопку, протащите
курсор в сторону блоков, подлежащих выделению; за курсором' потянется пунктирный прямоугольник, ограничивающий выделяемую область; после того, как в него попадут нужные блоки, отпустите ЛКМ; выделенные блоки, а также линии связи между ними будут помечены по углам черными прямоугольничками; Copy − копировать один или несколько блоков; копируемые блоки должны быть предварительно выделены; данная команда используется совместно с командой Paste. Paste − вставить копируемый или удаленный в буфер обмена участок Sмодели; перед выполнением этой команды необходимо предварительно щелкнуть ЛКМ в том месте окна блок-диаграммы, куда требуется произвести вставку (этой точке будет соответствовать верхний левый угол вставляемой области). Замечание: команды Cut, Copy и Paste окна блок-диаграммы работают через собственный буфер обмена MATLAB, поэтому вставка копируемой или вырезанной области может выполняться многократно, пока не обновится содержимое буфера обмена; при этом вставку можно выполнять не только в пределах одного окна, но и в любую открытую блок-диаграмму; вместе с тем, передача содержимого собственного буфера MATLAB в другие приложения невозможна; для этого должны использоваться другие средства, которые будут рассмотрены немного позже. Clear − очистить (удалить) выделенную область; (область в буфере обмена не сохраняется, но может быть восстановлена с помощью команды Undo); Select All − выделить все элементы блок-диаграммы; Copy Model − запись блок-диаграммы модели в буфер обмена Windows (Clipboard) для передачи в другие Windows-приложения (в качестве графического объекта); по умолчанию блок-диаграмма сохраняется в формате WMF (Windows Metafile), формат может быть изменен из командного окна MATLAB (раздел меню File, пункт Preferences). Create Subsystem − создать подсистему; по этой команде выделенная часть S-модели (один или несколько блоков) «сворачиваются» в подсистему и заменяются в блок-диаграмме одним блоком − Subsystem; применение данной команды требует определенной осторожности, поскольку отменить результат невозможно (команда Undo в этом случае бессильна); Mask Subsystem − вызов редактора «маски» подсистемы; команда доступна, если в блок-диаграмме выделена подсистема (блок типа Subsystem); технология создания маскированных подсистем подробно рассматривается в следующем разделе; если выделенная подсистема уже имеет «маску», т. е. является маскированной, то команда Mask Subsystem принимает вид Edit Mask;
Look Under Mask (Заглянуть под маску) − команда открывает окно блокдиаграммы маскированной подсистемы; доступна только в том случае, если выделенный блок является маскированной подсистемой; Go To Library Link (Перейти к связанной библиотеке) − команда открывает раздел библиотеки, к которому относится выделенный блок; доступна только в том случае, если блок взят из библиотеки пользователя или из раздела Simulink Extras; Break Library Link (Разорвать связь с библиотекой) − команда позволяет сделать библиотечный блок «самостоятельным», не связанным с библиотекой, что обеспечивает возможность его редактирования; данная команда работает для тех же разделов библиотеки, что и предыдущая; Unlock Library (Открыть библиотеку) − команда доступна только в окне раздела библиотеки (Library:); после ее выполнения становится возможным редактирование соответствующего раздела, при этом на месте команды выводится признак Library Unlocked (Библиотека открыта), который сохраняется до закрытия окна редактируемого раздела; Update Diagram − обновить блок-диаграмму; команду необходимо использовать в следующих случаях: после изменения (редактирования) библиотечных блоков, копии которых используются в модели; после добавления в конфигурацию MATLAB нового раздела библиотеки, блоки из которого используются в открытой модели; после изменения параметров одного или нескольких блоков модели из командного окна MATLAB; после изменения S-функции, используемой в модели (при добавлении или удалении входных и/или выходных портов соответствующего блока). 2.3.3. Раздел меню пользователя Simulation Данный раздел содержит команды управления сеансом моделирования. Раздел Simulation доступен только из окна блок-диаграммы модели или подсистемы и заблокирован в окне библиотеки (Library). В его состав входят следующие команды. Start − запуск модели на исполнение; при запуске модели команда Start заменяется командой Stop, которая позволяет завершить моделирование досрочно (то есть либо до истечения заданного интервала моделирования, либо до реализации предусмотренных условий окончания сеанса моделирования); Pause − приостановить сеанс моделирования; команда становится доступной после запуска модели на исполнение; при прерывании моделирования с помощью команды Pause она заменяется альтернативной командой — Continue (Продолжить);
Parameters... − по данной команде открывается диалоговое окно настроек параметров моделирования. Окно содержит три вкладки: Solver (Установка параметров расчета модели); Workspace I/0 (Установка параметров обмена данными с рабочей областью MATLAB); Diagnostics (Выбор уровня диагностики). На вкладке Solver могут быть произведены следующие установки: Simulation time (Интервал моделирования) − его величина задается посредством указания начального (Start time) и конечного (Stop time) значений модельного времени; Solver options − выбор метода реализации (расчета) модели; речь идет о том, что имея структуру исследуемой системы в виде блок-диаграммы, разработчик может в ходе моделирования выбирать метод отображения динамики системы. С помощью двух выпадающих меню система может быть реализована в следующих формах: с дискретными состояниями и дискретным временем перехода из одного состояния в другое; с дискретными состояниями и непрерывным временем переходов; с непрерывными состояниями и дискретным временем переходов; с непрерывными состояниями и непрерывным временем переходов. Первое меню − Type − позволяет выбрать способ изменения модельного времени; оно содержит два пункта: Variable-step (Моделирование с переменным шагом); Fixed-step (Моделирование с фиксированным шагом). Как правило, Variable-step используется для моделирования непрерывных систем, a Fixed-step − дискретных. Второе меню, расположенное справа, позволяет выбрать метод расчета нового состояния системы. Первый пункт меню (discrete) обеспечивает расчет дискретных состояний системы (и для непрерывного, и для дискретного времени переходов из состояния в состояние). Остальные 5 пунктов меню обеспечивают выбор метода расчета нового состояния для непрерывных систем. Эти методы различны для непрерывного времени (Variable-step) и для дискретного времени (Fixed-step), но основаны на единой методике − решении обыкновенных дифференциальных уравнений (ODE). Подробное описание каждого из методов расчета состояний системы приведено во встроенной справочной системе MATLAB (раздел matlab\funfun). Под окном меню Type находится строка редактирования, название которой изменяется в зависимости от выбранного способа изменения модельного времени. Для Fixed-step она называется Fixed-step size и позволяет указывать величину шага моделирования.
При выборе Variable-step данная строка получает имя Мах step size (Максимальная величина шага) и, соответственно, содержит предельное допустимое значение шага моделирования. По умолчанию величина шага моделирования для обоих способов изменения модельного времени устанавливается системой автоматически (auto) в соответствии с параметрами настройки блоков модели; требуемая величина шага может быть введена вместо значения auto либо в форме числовой константы, либо в виде вычисляемого выражения. При моделировании непрерывных систем с использованием переменного шага (Variable step) необходимо указать точность вычислений: относительную (Relative tolerance) и абсолютную (Absolute tolerance). По умолчанию они равны соответственно 1-10-3 и 1-10-6. Кроме того, для указанного класса систем можно задать начальное значение шага моделирования (в поле Initial step size). При моделировании с переменным шагом можно задавать опции вывода (Options output) выходных параметров моделируемой системы; соответствующие настройки выполняются с помощью двух элементов интерфейса: выпадающего меню и строки редактирования. Меню, расположенное слева, содержит три пункта, особенности использования которых поясняются ниже. Refine output (Улучшенный вывод) − при выборе этой опции можно изменять дискретность регистрации модельного времени и параметров модели (тех величин, которые сохраняются в рабочей области MATLAB с помощью блока То Workspace). Установка дискретности выполняется в строке редактирования Refine/actor, расположенной справа; по умолчанию значение Refine factor равно 1; это означает, что регистрация производится с шагом ∆t M = 1 (то есть для каждого очередного значения модельного времени: 0, 1, 2, 3 и т. д.); это наибольший возможный шаг регистрации. Значение Refine factor можно интерпретировать как относительную частоту регистрации: если, например Refine factor равен 2, это означает, что ∆t M = l/2, если Refine factor равен 3, то ∆t M = l/3 и т. д.; параметр Refine factor может быть только целым положительным числом. Второй пункт меню − Produce additional output (создать дополнительный вывод) − обеспечивает дополнительную регистрацию параметров модели в заданные моменты времени; их значения вводятся в строке редактирования (в этом случае она называется Output times) в виде списка, заключенного в квадратные скобки; при использовании дополнительных моментов регистрации базовый шаг регистрации ( ∆t M ) равен 1. Значения времени в списке Output times могут быть дробными числами и иметь любую точность. Третий пункт меню −Produce specified output only (формировать только заданный вывод) − устанавливает вывод параметров модели только в заданные моменты времени, которые указываются в списке Output times. Вкладка Workspace I/O содержит элементы управления вводом и выводом модельной информации в рабочую область MATLAB.
Элементы управления вводом/выводом разбиты на 4 поля: Load from workspace (Загрузить из рабочей области); Save to workspace (Записать в рабочую область); States (Состояние); Save options (Опции записи). Первое поле содержит флажок Input и строку ввода; при поставленном флажке можно ввести список параметров модели, которые будут считываться из рабочей области MATLAB; к списку предъявляются те же требования, что и при использовании блока From Workspace. Поле Save to workspace содержит три флажка и связанные с ними строки ввода: Time − позволяет указать имя вектора, в котором будут сохраняться регистрируемые моменты модельного времени (по умолчанию вектор имеет имя tout); States − при установленном флажке в матрице xout сохраняется текущее состояние моделируемой системы. Оно описывается совокупностью значений сигналов на выходах блоков, формирующих (вычисляющих) текущее состояние системы; при моделировании дискретных систем такими блоками являются, в частности, все блоки раздела Discrete. SIMULINR автоматически определяет число указанных блоков в модели и на основании этого формирует матрицу xout. Число столбцов в матрице равно числу регистрируемых параметров текущего состояния системы, а число строк − числу актов регистрации; при желании разработчик может изменить имя матрицы; Output − флажок записи в рабочую область − определяет возможность регистрации дополнительных параметров модели в ходе моделирования; если флажок установлен, то в соответствующей строке ввода необходимо указать имя регистрируемого параметра; в модели должен присутствовать блок То Workspace, обеспечивающий запись значений данного параметра в рабочую область MATLAB. Поле States содержит два флажка, совмещенных со строками ввода: Load initial (загрузить начальное значение) − при установленном флажке имеется возможность задать начальное значение параметров, характеризующих состояние моделируемой системы; указанные параметры считываются при запуске модели из вектора-строки xInitial. Число элементов этой строки (то есть число параметров состояния) должно быть равно числу столбцов (числу регистрируемых параметров) в матрице xout; значения элементов строки xInitial можно ввести в командном окне MATLAB следующим образом: xInitial = [1,2, 0.15]; в данном примере предполагается, что состояние системы описывается тремя параметрами, первый из них в момент запуска модели примет значение, равное 1, второй − равное 2, третий − равное 0.15; при необходимости имя xInitial, используемое по умолчанию, может быть изменено;
Save final (Записать конечное состояние) − при установленном флажке в рабочей области MATLAB сохраняются только последние значения параметров состояния системы; они записываются в вектор-строку xFinal, которую можно либо вывести в командном окне MATLAB, либо использовать в качестве описания исходного состояния системы для последующих сеансов моделирования; имя xFinal также может быть изменено разработчиком модели; Поле Save options (опции записи) позволяет задать ограничения на число строк матрицы xout (Limit rows to last), а также дополнительно указать необходимость «прореживания» (Decimation) регистрируемых состояний системы. Имеется в виду следующее. Если значение опции Decimation равно 1, то регистрация производится для всех моментов времени, заданных в поле Output options на вкладке Solver, если Decimation = 2, то регистрируется только каждое второе состояние системы, при Decimation = 3 − только каждое третье состояние и т. д. В связи с этим необходимо подчеркнуть, что параметры, задаваемые в поле Output options на вкладке Solver и параметры, задаваемые в поле Save options на вкладке Workspace I/O, взаимосвязаны. Объем регистрируемой информации определяется выбранным сочетанием значений указанных параметров. Например, если в поле Output options указано, что состояние системы должно регистрироваться в моменты времени [1,5,9,11, 25], а в поле Save options заданы: Limit rows to last: 4; Decimation: 2, то в матрице xout будут записаны состояния системы в моменты времени t = 5 и t = 11. Вкладка Diagnostics позволяет изменять номенклатуру диагностических сообщений, выводимых SIMULINKOM в командном окне MATLAB. Указанные действия выполняются с помощью списка событий (Events), требующих реакции SIMULINK, и элементов управления. Переключатели в поле Action (Действие) становятся доступными, если в списке Events выбрано одно из событий. С помощью данных переключателей можно указать один из видов реакции на событие: None − игнорировать; Warning − выдать предупреждение; Error − выдать сообщение об ошибке. В поле Debugging (Отладка) можно дополнительно установить опцию порядок проверки согласованности компонент модели (Consistency checking) и идентификацию пересечения сигналом нулевого уровня (Disable zero crossing detection).
2.3.4. Раздел меню Format В данном разделе меню пользователя собраны команды, позволяющие изменить внешнее представление (оформление) блок-диаграммы. Rotate block − повернуть блок на 90° вокруг своей центральной оси (команда имеет клавиатурное сокращение Ctrl+R); Flip name − изменить положение имени блока (над или под блоком); Hide (Show) name − команда, включающая и выключающая отображение имени блока; Flip block − повернуть блок вокруг вертикальной оси на 180° (команда имеет клавиатурное сокращение Ctrl+F); Show (Hide) drop shadow − показать (скрыть) “тень” от блока; Hide (Show) port labels − скрыть (показать) имена портов ввода/вывода на блоках подсистем; Sample time colors − включение “подсветки” линий связи и блоков, работа которых зависит от величины шага модельного времени (при выполнении данной команды соответствующие линии связи и сами блоки выделяются на блок диаграмме красным цветом); Port Data Types − команда, включающая отображение типа передаваемых данных на выходах блоков; Foreground Color − выбор цвета контура и символов на иконке выделенного блока (группы блоков); Background Color − выбор цвета фона иконки выделенного блока (группы блоков); Screen Color − выбор цвета фона блок-диаграммы; Wide vector lines − линии связи, по которым передаются векторные величины, выводятся более “жирными”; Line Widths − для всех линий связи выводится в цифровой форме “ширина” передаваемого сигнала (то есть число элементов соответствующего вектора), для скалярных сигналов “ширина” равна 1. На рис. 2.27 показан результат применения двух последних опций.
Рис. 2.27
2.4. Использование подсистем Для упрощения создания сложных моделей разработчики SIMULINK создали механизм подсистем. Он основан в первую очередь на использовании блока Subsystem, входящего в раздел библиотеки Connections. С его помощью любая сложная система может быть представлена как совокупность взаимодействующих компонентов, внутренняя структура которых при необходимости может быть скрыта. Основными достоинствами механизма подсистем являются: 1. Повышение наглядности блок-диаграмм моделей сложных систем; 2. Возможность использования механизма синхронизации параллельно функционирующих подсистем; 3. Повышение технологичности разработки и модификации S-моделей; 4. Возможность включения в блок-диаграмму собственной «встроенной» справочной системы, в том числе содержащей демонстрационные средства. Знакомство с технологией использования подсистем начнем с обсуждения способов их создания. Таких способов два: с помощью команды Create Subsystem (Создать подсистему), входящей в раздел Edit меню пользователя; путем копирования блока Subsystem из раздела библиотеки Connections в окно блок-диаграммы. Замечание: разумеется, для создания копии или нового варианта существующей подсистемы могут быть использованы стандартные средства копирования, применимые к любому блоку S-модели. Но пока речь идет о создании новой, «пустой» подсистемы. Команда Create Subsystem применяется к группе блоков или ко всей блок-диаграмме, находящейся в активном окне S-модели. Чтобы команда стала доступна, соответствующие блоки должны быть выделены (если в подсистему «сворачивается» вся блок-диаграмма, то удобнее воспользоваться командой Select all – выделить все). Недостатком команды Create Subsystem, как уже отмечалось, является то, что ее действие нельзя отменить. Это требует определенной осторожности при ее использовании. Применение данной команды продемонстрируем для блок-диаграммы, изображенной на рис. 2.28. Выделите на диаграмме 3 блока: сумматор Sum1, передаточную функцию Transfer Fnc1 и интегратор. После этого откройте раздел Edit меню пользователя и выберите команду Create Subsystem. Блок-диаграмма примет вид, показанный на рис. 2.29. Замечание: для того, чтобы команда Create Subsystem была доступна, блоки должны выделяться единым прямоугольным блоком. При попытке исключить или добавить что-нибудь к выделению команда становится недоступной. Особое внимание при выделении блоков следует обратить на
включение в область линий связи. Попробуйте поэкспериментировать с областью выделения блоков и посмотрите, какие при этом будут результаты.
Рис. 2.28 Из рисунка видно, что иконка блока Subsystem существенно отличается от иконки его библиотечного варианта.
Рис. 2.29 На иконке, появившейся в блок-диаграмме, обозначены два входных (In1 и Iп2) порта подсистемы и один выходной (Out1). Именно на них будет сосредоточено основное наше внимание в ближайшее время. Давайте заглянем «вовнутрь» созданной подсистемы. Для этого нужно установить курсор мыши на ее иконку и дважды щелкнуть ЛКМ. Блок-диаграмма, содержащаяся в открывшемся окне (рис. 2.30), вероятно, несколько отличается от того, что вы ожидали увидеть. Новое заключается в том, что наряду с тремя основными блоками, подсистема теперь содержит три дополнительных – In1, In2 и Out1. Именно их присутствие в составе подсистемы и повлияло на изменение ее иконки.
Рис. 2.30 Блоки In и Out входят в раздел библиотеки Connections и предназначены в первую очередь для обеспечения связи подсистемы с «внешним миром». Как следует из названия, блоки типа In выполняют прием входных сигналов, поступающих в подсистему, а блоки типа Out – выдачу результатов ее работы
на другие блоки (в том числе и подсистемы) модели, либо их сохранение в рабочей области MATLAB. Количество блоков In и Out, включаемых в состав подсистемы, не ограничено и определяется только логикой работы создаваемой модели. Эти блоки, как и блоки других типов, могут иметь в диаграмме произвольные имена, назначаемые разработчиком в соответствии с их содержательным смыслом. Эти имена выводятся на иконке подсистемы вместо стандартных обозначений In и Out, что, естественно, значительно повышает наглядность блок-диаграммы. Чтобы убедиться в этом, замените в окне подсистемы обозначение выходного порта Out именем Г1 и закройте окно. Внесенные изменения сразу же отображаются на иконке подсистемы. При создании подсистемы на основе копирования библиотечного блока Subsystem целесообразно придерживаться следующей последовательности действий. Шаг 1. Отбуксируйте копию блока Subsystem в окно редактируемой (основной) блок-диаграммы. Шаг 2. Откройте пустое окно диаграммы подсистемы (двойной щелчок ЛКМ на иконке блока) и разместить его на экране так, чтобы оно не перекрывалось окном основной блок-диаграммы. Шаг 3. Способ реализации данного шага зависит от того, какие блоки должны войти в подсистему: если это часть основной блок-диаграммы, то ее можно перенести в окно подсистемы с помощью команд редактирования Cut и Paste, если же создается новая блок-диаграмма, то на данном шаге выполняются те же действия, что и при создании любой другой блокдиаграммы. Для определенности будем считать, что мы создаем подсистему, аналогичную полученной с помощью команды Create Subsystem, но с другими параметрами блоков. С этой целью в модели работы накопителей необходимо выделить и «вырезать» (с помощью команды Cut или используя клавиши +<X>) три нужных на блока, а также соединяющие их линии связи; после этого следует сделать активным окно подсистемы и вставить в него перемещаемый фрагмент (с помощью команды Paste или используя клавиши +). Шаг 4. Подсоедините к входам блоки In, а к выходу − блок Out (их можно отбуксировать из раздела Connections или скопировать из ранее созданной подсистемы). Измените необходимые значения параметров. Шаг 5. Закройте окно новой подсистемы (теперь она стала похожа на свою предшественницу). Несколько слов об окне блок-диаграммы подсистемы. Внешне оно ничем не отличается от окна основной модели и его меню содержит те же разделы. Однако область действия команд меню распространяется на всю S-модель, в которую входит данная подсистема. В частности, команда Save из раздела File обеспечивает запись на диск всей блок-диаграммы модели, включая подсистему, а команда Start запускает на исполнение основную модель.
Исключение составляют только некоторые команды из раздела Format (например, команда изменения цвета заливки окна − Screen color). После этих не очень существенных замечаний вернемся к блокам In и Out. Вернемся для того, чтобы пояснить весьма большое значение этих не очень примечательных блоков. Необходимо отметить, что блоки In и Out могут использоваться и непосредственно в блок-диаграмме самого верхнего уровня. В этом случае они обеспечивают взаимосвязь S-модели с рабочей областью MATLAB. Начнем с блока In. Он имеет 3 параметра настройки: Port number определяет порядковый номер входного порта; по умолчанию его значение устанавливается SIMULINK для каждого нового блока In автоматически в возрастающем порядке; при необходимости номер блока может использоваться для согласования с соответствующим блоком Out; Port width (Ширина порта) устанавливает размерность входного сигнала, который может подаваться на данный порт; значение -1 обеспечивает автоматическую настройку порта на размерность входного сигнала; Sample time (Образец времени) определяет дискретность времени, с которой блок In будет «реагировать» на изменение входного сигнала; при значении этого параметра, равном -1, дискретность определяется одноименным параметром предшествующего блока. Если блок In включен в состав блок-диаграммы самого верхнего уровня, то с его помощью можно передавать в модель данные, находящиеся в рабочей области MATLAB. Для этого необходимо в окне установки параметров моделирования Parameters... на вкладке Workspace I/O установить флажок Load Workspace. Имена векторов времени и считываемых данных должны совпадать с теми именами, под которыми они записаны в рабочей области (по умолчанию − tout и уout соответственно). Блок Out также имеет окно настройки, содержащее три параметра: Port number − порядковый номер выходного порта; используется таким же образом, как и одноименный параметр блок In; Output when disabled (Значение на выходе при запрещенном состоянии) − имеет смысл в том случае, если данный блок входит в состав управляемой подсистемы; его значение устанавливается с помощью выпадающего меню, содержащего два пункта: held (сохранение) − на выход выдается сигнал, сформированный при последнем срабатывании подсистемы; reset (восстанавливать) − на выход поступает сигнал, соответствующий исходному (начальному) состоянию подсистемы; Initial output − начальное значение выходного сигнала; может быть задано в виде числового значения (скалярного или векторного), либо в виде вычисляемого выражения. Если блок Out входит в блок-диаграмму самого верхнего уровня, то с его помощью можно сохранять в рабочей области MATLAB значение
поступающего на него сигнала. Для этого на вкладке Workspacel/0 окна Parameters должен быть установлен флажок Output. По умолчанию данные сохраняются под именем yout, которое может быть изменено пользователем. Если в диаграмме верхнего уровня имеется более одного блока Out, то переменная yout является матрицей, в которой каждый столбец соответствует блоку Out с таким же порядковым номером. Используя переменные tout и yout, можно получить график изменения выходной характеристики yout во времени. Для этого в командном окне MATLAB достаточно ввести команду plot(tout, yout). Тем не менее блоки In и Out представляют собой самое слабое средство взаимосвязи подсистемы с другими компонентами модели, поскольку связывают подсистему по информации только с ее ближайшими «соседями». Значительно более широкие возможности по обмену данными между компонентами модели представляют блоки Goto, From и Goto Tag Visibility, также входящие в раздел Connections. Блок Goto, название которого в данном случае можно перевести как «передать», является основным среди них, поскольку определяет имя и область видимости передаваемых данных. Для тех читателей, которые знакомы с программированием на одном из универсальных языков, термин «область видимости» в пояснениях не нуждается. Для остальных же уточним, что область видимости переменной (или каких-либо данных) определяет те компоненты модели, в которых эта переменная доступна для использования. Имя передаваемых данных и область их видимости указывается разработчиком модели с помощью окна настройки параметров блока Goto. Таких параметров два: Tag (признак) − имя передаваемых данных; Tag visibility (признак видимости). Значение первого параметра вводится в строке редактирования вручную и представляет собой любую последовательность латинских букв, цифр и символов «подчеркивания», причем на первой позиции обязательно должна стоять буква. Длина имени практически не ограничена, но SIMULINK различает только первые 32 (по правилам языка С). Значение второго параметра устанавливается с помощью «выпадающего» меню, которое содержит три пункта: local − переменная является локальной; это означает, что область ее видимости ограничено той подсистемой, в которой находится данный блок Goto; scoped − область видимости переменной распространяется дополнительно на все подсистемы более низких уровней иерархии, входящие в состав данной подсистемы;
global − переменная является глобальной; это означает, что она доступна в любой компоненте (подсистеме) S-модели. Установленные параметры отображаются на иконке блока: имя передаваемой переменной выводится либо в квадратных скобках (при локальной области видимости), либо в фигурных (для области видимости scoped), либо вообще без скобок (при глобальной области видимости). Блок From (название можно перевести как «принять») обеспечивает прием данных от соответствующего блока Goto. Соответствие определяется по имени переменной, которое является единственным параметром настройки этого блока. Имя переменной, как и для блока Goto, выводится на иконке. Блок From может быть связан только с одним блоком Goto. Зато последний может передавать значение переменной на произвольное число блоков From. Блок Goto Tag Visibility необходимо включать в состав подсистемы только в том случае, если для передаваемых данных установлена область видимости scoped. Этот блок не имеет ни входных, ни выходных портов и не участвует в преобразовании данных. В модели он играет роль, аналогичную роли предупреждающего дорожного знака. Его единственным параметром настройки является имя передаваемой переменной, которое выводится на иконке блока. Те, кто занимался программированием, знают, что каждая переменная в программе характеризуется не только областью видимости, но и временем жизни. Некоторые переменные «живут» на протяжении всего времени выполнения программы, другие «появляются на свет» только при запуске какой-либо подпрограммы и «умирают» при завершении ее работы. С этой точки зрения блоки S-модели можно рассматривать как подпрограммы, а обрабатываемые в них данные (сигналы) остаются «живы» до тех пор, пока переходят от одного блока к другому. Другими словами, время жизни сигнала в S-модели определяется длиной той цепочки блоков, по которой он распространяется. Это утверждение справедливо и для тех данных, которые передаются с помощью блоков Goto и From. Но в составе SIMULINK есть блоки, которые способны «продлить жизнь» любому сигналу (переменной) до окончания сеанса моделирования независимо от того, в каких еще блоках он используется. Это блоки Data Store Memory, Data Store Read, Data Store Write. Они используются только все вместе, поскольку отсутствие в модели любого из них делает ненужным присутствие двух других. Но наиболее важную роль играет блок Data Store Memory, поскольку он определяет имя, формат и область видимости сохраняемых данных. Блок имеет два параметра настройки: Data Store name (имя сохраняемых данных), Initial value (начальное значение). Правила для записи имени сохраняемых данных те же, что и для записи имени переменной в блоке Goto.
С помощью параметра Initial value задается не только начальное значение, но и формат сохраняемых данных. Например, если его значение установлено так: [[2 4]; [37]], то это означает, что сохраняемая переменная представляет собой массив размерностью 2х2. Этот формат должен обязательно учитываться при использовании блоков Data Store Write и Data Store Read. Область видимости сохраняемой переменной определяется тем, где расположен блок Data Store Memory. Если он помещен в блок-диаграмме самого верхнего уровня, то сохраняемые данные доступны в любой компоненте S-модели. Если же блок Data Store Memory находится внутри одной из подсистем, то область видимости сохраняемых данных ограничивается этой подсистемой и входящими в нее подсистемами более низких уровней иерархии (если таковые имеются). Окна настройки параметров блоков Data Store Read и Data Store Write идентичны и содержат по два параметра: Data Store Name (имя сохраняемых данных) − его значение должно совпадать с именем, указанным в блоке Data Store Memory; Sample time − величина шага моделирования для данного блока. SIMULINK разрешает создавать в модели любое число экземпляров блоков Data Store Read и Data Store Write, относящихся к одному и тому же блоку Data Store Memory. Однако при этом он не контролирует согласованность записи и считывания сохраняемых данных в различных точках блок-диаграммы. Ответственность за такое согласование возлагается на разработчика модели. Следует заметить, что недостаточно внимательное отношение к этому вопросу может привести к неожиданным и весьма неприятным последствиям. 2.5. Маскирование подсистем Маскированная подсистема (Masked Subsystem) − это такая подсистема, структуру которой нельзя увидеть непосредственно из блок-диаграммы; кроме того, она имеет собственное диалоговое окно настройки параметров и, как правило, собственную иконку. Другими словами, маскированная подсистема − это аналог библиотечного блока SIMULINK. Механизм использования маскированных систем обладает следующими достоинствами: значительно расширяет интерактивные возможности пользователя по управлению параметрами S-модели; позволяет создавать более понятный интерфейс за счет введения необходимых комментариев как к подсистеме в целом, так и к отдельным параметрам;
обеспечивает повышение наглядности блок-диаграммы; повышает защищенность S-модели от неумышленной модификации (а в некоторых случаях − и от умышленной). Создание маскированной подсистемы предполагает выполнение следующих действий: описание параметров подсистемы; определение способов изменения параметров; создание необходимых комментариев; создание собственной иконки подсистемы. Все эти действия выполняются с помощью Редактора Маски (Mask Editor). Для запуска Редактора Маски необходимо выбрать в меню пользователя (раздел Edit) команду Mask Subsystem. Предварительно в блокдиаграмме S-модели должна быть выделена та подсистема, для которой вы собираетесь создать маску. При запуске Редактора Маски открывается диалоговое окно, содержащее три вкладки: Icon, Initialization, Documentation. Первая из них предназначена для создания иконки подсистемы, вторая обеспечивает создание диалогового окна настройки параметров подсистемы, а третья позволяет добавлять в диалоговое окно подсистемы необходимые комментарии. В нижней части окна Редактора Маски расположены пять кнопок, которые являются общими для всех трех вкладок: Apply позволяет применить к маскируемой подсистеме опции, заданные на всех трех закладках; Revert обеспечивает восстановление тех значений параметров маски, которые были установлены на момент открытия Редактора; Unmask позволяет «демаскировать» подсистему; при этом окно Редактора закрывается; параметры «снятой» маски запоминаются SIMULINK и могут быть восстановлены с помощью команды Mask Subsystem из раздела меню пользователя Edit (соответствующая подсистема должна быть выделена); после закрытия S-модели информация о маске теряется; Help открывает раздел документации в формате .html, описывающий технологию маскирования подсистем; Close работает так же, как и кнопка Apply, но дополнительно закрывает окно Редактора Маски. Теперь рассмотрим подробно те средства, которые предоставляет в распоряжение пользователя Редактор Маски. Начнем с закладки Initialization (рис.2.31).
Рис. 2.31 Она содержит следующие элементы: 1. Строка редактирования Mask type (Тип маски) − предназначена для указания типа (названия) создаваемой маскированной подсистемы (аналог типа блока из библиотеки − Constant, Sum и т. д.); допускается использовать русскоязычные названия. 2. Окно, содержащее список параметров настройки подсистемы; Для работы со списком служат расположенные слева от него четыре кнопки: Add − добавить элемент списка; Delete − удалить элемент списка; Up − поднять элемент списка на одну строку вверх; Dawn − опустить элемент на одну строку вниз. Для использования последних трех кнопок необходимо предварительно выделить строку в списке, щелкнув на ней ЛКМ; расположение параметров в списке определяет их положение в диалоговом окне настройки. Список может содержать не более 14 параметров. 3. Средства описания характеристик параметров подсистемы:
строка редактирование Prompt (подсказка, пояснение); служит для ввода названия параметра (например, «Коэффициент усиления», «Первое слагаемое» и т. д.); допускается использовать русскоязычные названия, хотя в списке элементов они отображаются некорректно (требуется дополнительная настройка системных шрифтов); строка редактирования Variable (Переменная) предназначена для ввода имени переменной, в которой будет храниться значение соответствующего параметра; имя переменной может состоять только из латинских букв и цифр; в остальном выбор имени может быть произвольным; выпадающее меню Control type (Тип управления) позволяет устанавливать способ ввода значения для каждого параметра: Edit − с помощью строки редактирования; Checkbox − с помощью переключателя; Popup − с помощью выпадающего меню; выпадающее меню Assignment (Назначение) − предназначено для указания типа параметра: Evaluate − вычисляемый (т. е. имеющий численное значение); Literal − символьный (воспринимается SIMULINK как строка символов). 4. Строка редактирования Popup strings (Строки выпадающего меню) служит для ввода пунктов выпадающего меню, используемого для выбора значений соответствующего параметра; становится доступной, когда этот параметр выбран в списке; вводимые в этой строке пункты меню должны быть разделены вертикальной чертой. 5. Область ввода Initialization commands (Команды инициализации), предназначенная для ввода списка команд инициализации маски. Команды инициализации оперируют с переменными, находящимися в рабочей области маскированной подсистемы (Mask Workspace). Они представляют собой обычные команды MATLAB и могут содержать Мфункции и операторы MATLAB. Другими словами, поле Initialization commands можно считать аналогом командного окна MATLAB, область действия которого ограничена рабочей областью маскированной подсистемы. SIMULINK может выполнять команды инициализации в следующих случаях: при открытии окна блок-диаграммы модели; при запуске модели на исполнение; при обновлении блок-диаграммы (по команде Update diagram) при вращении блока маскированной подсистемы (с целью перерисовки иконки); для автоматического изменения иконки, зависящей от параметров блока.
Поясним технологию создания собственного окна настройки параметров на примере подсистемы, изображенной на рис. 2.32 (справа показана блокдиаграмма, в состав которой она включена).
Рис. 2.32 С ее помощью выполняются следующие действия: входной сигнал сравнивается с некоторым пороговым значением (посредством блока Hit crossing), и если порог превышен, то на выход подсистемы выдается число, которое задается константой Коэффициент. Начнем с того, что выберем общее имя для подсистем такого типа, например «Умножитель». Введите его в строке Mask type и «нажмите» кнопку Apply. Следующим шагом в создании маски является описание параметров настройки подсистемы. Пусть таким параметром будет значение порога, задаваемого в блоке Hit Crossing. Для его описания необходимо: 1. «Нажать» кнопку Add (чтобы внести первый элемент в список параметров); 2. В поле Prompt ввести «Порог» (пояснение к параметру; после нажатия клавиши <Enter> оно отображается в списке параметров); 3. В поле Variable ввести произвольное имя переменной, в которой будет храниться значение данного параметра, например porog; чтобы внести его в список параметров, следует еще раз нажать клавишу <Enter>. 4. В поле Control type оставить значение Edit (оно уже установлено по умолчанию в списке параметров). 5. В поле Assignment также оставить установленное по умолчанию значение Evaluate. После «нажатия» кнопки Apply можно вновь открыть диалоговое окно подсистемы. Теперь оно выглядит несколько «солиднее» (рис. 2.33). Диалоговое окно позволяет ввести значение параметра Порог, однако если это сделать и запустить модель, SIMULINK выдаст сообщение об ошибке. Дело в том, что он пока «не знает», каким образом параметр Порог связан с соответствующим параметром блока Hit Crossing (и связан ли вообще). Для установления такой связи как раз и используется имя переменной porog, относящейся к параметру Порог.
Рис. 2.33 Связь между параметрами маскированной подсистемы и параметрами блоков, входящих в ее состав, реализуется через упоминавшуюся уже рабочую область подсистемы (Mask Workspace). Таким образом, чтобы увязать параметр Порог с параметром настройки блока Hit Crossing, необходимо ввести в поле параметра Hit Crossing offset имя переменной porog. Чтобы изменить значение параметра блока, входящего в маскированную подсистему, требуется «заглянуть ей под маску» (т. е. открыть окно блокдиаграммы подсистемы). Это можно сделать с помощью команды Look Under Mask из раздела Edit меню пользователя. Несколько слов о том, что собой представляет рабочая область маскированной подсистемы. Mask Workspace − это локальная рабочая область исполняемой подсистемы. Она создается SIMULINK в следующих случаях: если маска подсистемы содержит команды инициализации; если при описании маски заданы параметры настройки подсистемы (как в нашем примере). Переменные, содержащиеся в рабочей области маскированной подсистемы, доступны всем блокам, входящим в ее состав. Другими словами, при создании маски можно определять параметры, которые должны иметь одинаковое значение для всех блоков, входящих в состав маскированной подсистемы (например, дискретность шага моделирования). Продолжим создание маски для подсистемы «Умножитель» и опишем второй параметр, выполнив следующие действия: «нажать» кнопку Add для добавления второй строки в список параметров; в поле Prompt ввести Коэффициент; в поле Variable указать имя переменной, например k. Значения полей Control type и Assignment следует оставить без изменения. После «нажатия» кнопки Apply можно открыть скорректированное окно настройки параметров подсистемы «Умножитель». Чтобы изменить взаимное расположение полей «Коэффициент» и «Порог», следует поменять местами соответствующие строки в списке параметров окна Редактора Маски (с помощью кнопок Up или Down).
Параметр Коэффициент, как и параметр Порог, необходимо связать с соответствующим блоком подсистемы (блоком Коэффициент). Чтобы создать связь, требуется ввести в окне настройки этого блока имя переменной k. Вкладка Icon содержит средства создания индивидуальной иконки для маскируемой подсистемы: 1. Строка редактирования Mask type, дублирующая одноименную строку на закладке Initialization. 2. Поле ввода Drawing commands (Команды рисования), предназначенное для ввода команд, создающих графическое изображение на иконке. 3. Выпадающее меню Icon frame, которое позволяет устанавливать способ вывода прямоугольной рамки иконки: Visible − рамка выводится, Invisible − рамка не выводится (Невидима). 4. Выпадающее меню Icon transparance, устанавливающее «прозрачность» нового образа иконки: Opaque − изображение, выводимое на иконке, скрывает стандартный «образ»; Transparent − новая иконка является «прозрачной», т. е. и новое, и стандартное изображения выводятся одновременно; например, если маскируемая подсистема имеет входной и выходной порты, то их названия (In и Out) будут «просвечивать» через новое изображение. 5. Выпадающее меню Icon rotation определяет, будет ли поворачиваться изображение на иконке при повороте блока подсистемы: Rotates − изображение выводится с учетом поворота блока; Fixed − изображение не корректируется. 6. Выпадающее меню Drawing coordinates позволяет выбрать систему координат для вывода изображения на иконке: Autoscale − автоматическая установка масштаба осей; при использовании данной опции размер иконки изменяется пропорционально изменению размеров контура блока; Normalized − для вывода иконки устанавливается постоянный масштаб; при этом нижний левый угол рамки иконки (контура блока) имеет координаты (0, 0), а правый верхний угол − координаты (1, 1); соответственно при выводе графика на иконке значения координат х и у должны находиться в пределах [0,1]; при изменении размеров блока размер иконки изменяется автоматически; Pixel − значения координат х и у для выводимого графика должны быть указаны в пикселах; при изменении размеров блока иконка не масштабируется; чтобы обеспечить ее автоматическое масштабирование, необходимо в командах «рисования» указывать дополнительные параметры: текущую высоту и ширину блока (height и width).
Теперь подробнее о том, какие именно Команды рисования могут быть введены в поле Drawing Commands. Для вывода текста на иконке может использоваться одна из трех команд: disp( 'текст') − вывод указанного текста в центре иконки; text(x,y, 'текст') − вывод текста, начиная с позиции, задаваемой координатами x и y; fprintf ( 'текст') − вывод форматированного текста по центру иконки. Во всех трех командах выводимый текст может быть указан не непосредственно, а через имя переменной, в которой хранятся символьные данные. Например, команда disp может быть использована для вывода в иконке слова 'Подсистема' двумя способами: disp('Подсистема'), disp(variable), где variable − имя переменной, в которую предварительно был записан выводимый текст; эта переменная должна храниться в Mask Workspace, a ее значение может быть задано в поле Initialization commands (на закладке Initialization), например так: variable = 'Подсистема'. Если выводимый в иконке текст должен быть размещен в виде нескольких строк, то конец каждой строки обозначается символом табуляции (\п). Например, чтобы вывести надпись «Маскированная подсистема» на двух строках, команда disp должна выглядеть следующим образом: disp('Маскированная\nподсистема'). Для вывода графиков на иконке могут быть использованы стандартные средства MATLAB, т. е. библиотечные функции рисования графиков. Наиболее универсальной из них является функция plot, которая в простейшем случае имеет формат plot(x, у), где х и у − векторы, содержащие равное число элементов. При создании иконки аргументы функции должны храниться в рабочей области подсистемы, а их значения могут быть заданы в поле Initialization Commands, например так: x = [0 1 2 3]; y = [1 4 1 4]. Если на иконке требуется отобразить вид функции, выполняющей преобразование входного сигнала (реализуемой с помощью данной подсистемы), то для этого используется функция dpoly с соответствующими параметрами. SIMULINK позволяет также создавать иконки с изображениями, нарисованными «вручную». Такая иконка создается с помощью специального графического редактора. Для его запуска необходимо в командном окне MATLAB ввести команду iconedit. Если данная команда вводится без параметров, то MATLAB запрашивает дополнительную информацию: название окна блок-диаграммы, в котором находится редактируемый блок (Name of block window) и имя блока, под которым он используется в диаграмме (Name of block).
Замечание. Для корректной работы редактора iconedit редактируемый *.mdl-файл обязательно должен находиться в активной директории; соответствующая настройка производится с помощью опции Set Path из командного окна MATLAB. При запуске редактора iconedit открывается окно, содержащее координатную сетку и визир, перемещаемый с помощью «мыши». Нажатие ЛКМ приводит к появлению точки в выбранной позиции. Очередная точка соединяется с предыдущей прямой линией. При работе с редактором iconedit используются следующие команды, вводимые с клавиатуры: d − удаление последней точки; п − создание новой точки, не связанной с предыдущей; q − выход из редактора с автоматическим обновлением иконки блока. После закрытия окна iconedit в поле Drawing Commands выводится команда plot с параметрами, соответствующими созданному изображению. При необходимости ее можно скопировать в буфер обмена Clipboard и использовать для создания аналогичного изображения на какой-либо другой иконке. Вкладка Documentation Редактора Маски содержит три области ввода: Mask type, дублирующее одноименные поля двух других закладок редактора; Block description, предназначенное для ввода пояснения к маскируемой подсистеме (это пояснение будет отображаться в окне настройки параметров подсистемы); форматирование текста в этом поле выполняется автоматически; Block help, обеспечивающее ввод информации, которая впоследствии будет доступна при «нажатии» кнопки Help в окне настройки параметров подсистемы; эта информация сохраняется в формате html, включается SIMULINK в состав его справочной системы и может быть просмотрена, например, с помощью Internet Explorer. Созданная маска может быть впоследствии изменена с помощью того же Редактора Маски. Его вызов в этом случае производится по команде Edit Mask, заменяющей для маскированной подсистемы команду Mask Subsystem. Наличие в составе SIMULINK механизма маскирования делает его, как сейчас принято говорить, «открытой системой», т. е. доступной для доработки и расширения самими пользователями в соответствии с их потребностями. Именно этот механизм лежит в основе создания пользователями SIMULINK собственных библиотек блоков.
3. РАБОТА С ПАКЕТОМ CONTROL SYSTEM TOOLBOX 3.1. Линейные стационарные объекты (lti-объекты) Для описания непрерывных и дискретных динамических моделей систем управления с постоянными параметрами при моделировании электромеханических систем используют реализацию математического описания элементов в виде передаточных функций (tf-форму). При реализации такой математической модели на ЭВМ передаточная функция записывается в виде отношения многочленов, которые задаются в виде векторов-строк, составленных из их коэффициентов: N1 s m + N 2 s m−1 + ... + N m s + N m+1 H (s ) = , m <= n . D1s n + D2 s n−1 + ... + Dn s + Dn+1 Вместе с тем известны другие формы представления математических моделей: представление модели нулями, полюсами и обобщенным коэффициентом передачи (zpk-форма) (s − z1 )(s − z 2 )...(s − z m ) H (s ) = K m <= n, , (s − p1 )(s − p 2 )...(s − p n ) а также в форме пространства состояний в виде системы дифференциальных или разностных (в случае построения модели дискретной системы) уравнений dx dt = Ax + Bu , . y = Cx + Du Все вышеназванные формы представления моделей реализованы в пакете прикладных программ Control System Toolbox, входящим в состав системы инженерных расчетов MATLAB. В пакете реализованы: полный набор средств для анализа MIMO и SISO линейных систем; временные характеристики: передаточная и переходная функция, реакция на произвольное воздействие; частотные характеристики: диаграммы Боде, Николса, Найквиста и др.; разработка обратных связей; проектирование LQR и LQE регуляторов; характеристики объекта: управляемость, наблюдаемость, понижение порядка моделей; поддержка систем с запаздыванием. Недостатком предыдущих версий системы MATLAB было отсутствие возможности получения частотных характеристик моделей, построенных в подсистеме SIMULINK. Пакет Control System Toolbox устраняет этот недостаток, так как включает в себя функции извлекающие данные, необходимые для расчета характеристик объекта, из структурных моделей подсистемы SIMULINK.
В пакете Control System Toolbox введен новый класс объектов − ltiобъекты − линейные системы с постоянными параметрами, которые могут быть заданы в одной из вышеназванных форм. Команда P = tf([1 2], [1 1 10]) создает объект Р подкласса tf с передаточной функцией P(s ) = (s + 2) / s 2 + s + 10 , который содержит коэффициенты числителя и знаменателя передаточной функции. Аналогичным образом могут быть получены объекты подклассов zpk и ss. При совместном использовании объектов различных подклассов в одной операции результат будет: объектом подкласса ss, если по крайней мере один операнд принадлежит подклассу ss; объектом подкласса zpk, если отсутствуют операнды подкласса ss и по крайней мере один из операндов принадлежит подклассу zpk; объектом подкласса tf, если все операнды относятся к подклассу tf. Исходя их вышеизложенного следует, что операторы tf, zpk и ss могут быть использованы как для получения соответствующей формы представления lti-объекта, так и для преобразования объекта из одной формы в другую. Например, оператор sys = zpk(sys) преобразует объект sys в подкласс zpk независимо от его предыдущей формы. Следует иметь ввиду, что преобразование моделей является неоднозначной операцией и может привести к неверному результату моделирования.
(
)
3.2. Извлечение информации об lti-объектах Для извлечения параметров объекта из его представления используются следующие операторы: [num , den, Ts ] = tfdata (sys ) ; [z, p, k , Ts ] = zpkdata(sys ) ; [a, b, c, d , d , Ts ] = ssdata (sys ) . Выходные аргументы num и den оператора tfdata и z, р оператора zpkdata всегда являются массивами ячеек. Они имеют число строк, равное числу выходов, и число столбцов, равное числу входов, а их элементы hij определяют передаточную функцию от j-го входа к i-му выходу. Например, оператор » H=[tf([1 -1],[1 2 10]), tf(1, [1 0])] формирует передаточную функцию многомерной системы с одним выходом и двумя входами: Transfer function from input 1 to output: s-1 -------------s^2 + 2 s + 10
Transfer function from input 2 to output: 1 s » Чтобы получить (извлечь) данные о числителе и знаменателе системы sys следует применить оператор » [num,den,Ts]=tfdata(H) num = [1x3 double] [1x2 double] den = [1x3 double] [1x2 double] Ts = 0. Для непосредственного получения цифровых значений следует прменить форму » H.den{1} ans = 1 2 10 » H.den{2} ans = 1 0. Аналогично работают операторы zpkdata и ssdata. В процессе работы с lti-объектом может понадобиться изменить его структуру или некоторые цифровые параметры. Это можно выполнить либо создав объект заново командами tf, zpk или ss, либо присвоением отдельным элементам структуры объекта других значений. Следующий пример показывает, как можно изменить знаменатель передаточной функции системы H от входа 1 к выходу: » H.den{1}(2)=5 Transfer function from input 1 to output: s-1 -------------s^2 + 5 s + 10 Transfer function from input 2 to output: 1 s ».
3.3. Родовые свойства lti-объекта Рассмотрим свойства, которые являются общими для всех трех подклассов lti-объектов. Свойство InputName OutputName Ts Td Userdata
Описание Названия входов Названия выходов Период дискретности Запаздывание на входе Дополнительные данные
Тип данных Массив ячеек Массив ячеек Скаляр Вектор Произвольные
Свойства InputName и OutputName предназначены для того, чтобы описать назначение входов и выходов системы; для их представления используются массивы ячеек, содержащих строки символов вида: 'мощность', 'скорость'; 'угол атаки' и т. п. Свойство объекта Ts хранит информацию о периоде дискретности модели, измеряемом в секундах; значения 0 и -1 используются соответственно для непрерывных моделей и дискретных моделей с неспецифицированным периодом дискретности. Свойство запаздывания на входе Td доступно только для непрерывных систем, его представление - вектор запаздываний для каждого входного канала, измеренных в секундах; по умолчанию используется нулевое значение (отсутствие запаздывания). Свойство Userdata может содержать числовые данные о модели, описываемые произвольными типами данных. По умолчанию это поле является пустым. Отметим некоторые особенности используемых свойств lti-объектов. Свойство Variable для объектов подклассов tf и zpk задает способ отображения переменной при выводе передаточных функций на экран. По умолчанию такими переменными являются 's' (переменная преобразования Лапласа) для непрерывных систем и 'z' (переменная Z-преобразования) для дискретных систем. Альтернативными значениями переменной могут быть 'р' для 's' и 'q' или 'z -1 для z. Отметим, что команда tf дает тот же результат, что и команда flit, когда свойство Variable имеет значение 'z -1' или 'q'. Матрица при производных Е по умолчанию равна пустой матрице [ ]. Свойство StateName позволяет присвоить имена переменным состояния. При работе с ППП Control System Toolbox перечень свойств lti-объекта может быть просмотрен с помощью команд set(ss), set(tf), set(zpk).
3.4. Чтение и установка значений Каждое свойство lti-объекта задается парой аргументов {свойство (PropertyName), значение (Property Value)}: PropertyName - строка, определяющая название свойства; она может быть собственно именем свойства или его сокращением, достаточным для идентификации имени. Например, сокращение 'user' достаточно для определения свойства Userdata; PropertyValue - значение, приписываемое свойству; этот формат также поддерживается функциями tf, zpk и ss. Поэтому значения свойств системы можно определить с помощью команды get: PropertyValue = get(sys, PropertyName), где строка PropertyName - либо полное название свойства, либо некоторое сокращение с числом символов, достаточным для однозначной идентификации этого свойства. Пример: Последовательность операторов » H=tf(100,[1 5 100],'input','Напряжение','notes','Электрическая цепь') set(h,'output','Toк') get(h, 'notes') выводит на экран следующую информацию Transfer function from input "Напряжение" to output: 100 --------------s^2 + 5 s + 100 ans = 'Электрическая цепь'
Для вывода на экран всех свойств, следует использовать команду get(h)
num = {[0 0 100]} den = {[1 5 100]} Variable = 's' Ts = 0 Td = 0 InputName = {'Напряжение'} OutputName = {'Ток'} Notes = {'Электрическая цепь'} UserData = [] Существует три способа для установки значений свойств lti-объекта: при создании lti-объектов с помощью команд tf, zpk или ss; изменение значений свойств существующей lti-модели с помощью команды set; присваивание значений элементам структуры. Первый способ установки значений заключается в том, чтобы расширить список входных переменных этих функций парами {свойство, значение}. Пример: Сформировать одномерную стационарную систему в tf-форме с входной переменной 'тяга', выходной переменной 'скорость' и с использованием в качестве символа переменной передаточной функции 'р'. » sys=tf(1,[1 10],'input','Тяга','output','Скорость','variable','p') Transfer function from input "Тяга" to output "Скорость": 1 -----p + 10 Второй способ состоит в том, чтобы сначала сформировать модель, а затем изменять отдельные ее свойства.
Пример: Сформировать одномерную стационарную систему в tf-форме. » h=tf(1,[1 10]) Transfer function: 1 -----s + 10 Ввести обозначение входной переменной 'тяга' и выходной переменной 'скорость', а также заменить символ 's' на 'р'. » set(h,'input','Тяга','output','Скорость','variable','p') »h Transfer function from input "Тяга" to output "Скорость": 1 -----p + 10 В случае многомерной системы для назначения имен каждому входу и выходу следует использовать массивы ячеек, составленные из символов. Если какие-либо названия следует оставить не присвоенными, то вместо них надо указать пустую строку. По команде set(sys) можно вывести на экран все свойства для lti-модели sуs. Предупреждение: Переустановка значения периода дискретности, например с нулевого на ненулевое значение, характерное для дискретных систем, не влечет за собой построения дискретной модели. Для перехода от непрерывной модели к дискретной и обратно следует использовать функции c2d и d2c. Третий способ установки значений свойств - это присваивание значений элементам структуры. Используемые в ППП Control System Toolbox Iti-объекты с точки зрения типа данных являются массивами записей (структурами) языка MATLAB, которые снабжены дополнительным флагом, указывающим, что они являются lti-объектами. Пример: Рассмотрим одномерную стационарную систему в tf-форме и выявим ее структуру. » sys=tf(2,[0.1 1]) Transfer function:
2 --------0.1 s + 1 » namefields=fieldnames(sys) namefields = 'num' 'den' 'Variable' 'lti'. Для получения значений полей следует использовать следующие операторы: » sys.num ans = [1x2 double] » sys.num{1} ans = 0 2 » sys.den{1} ans = 0.1000 1.0000 » sys.var ans = s Имена полей массива записей (структуры) являются именами свойств, поэтому можно назначать или изменять значения свойств, присваивая значения элементам структуры: PropertyValue = sys.PropertyName % получить значение свойства sys.PropertyName = PropertyValue % установить значение свойства Эти операторы присваивания эквивалентны следующим операторам с использованием функций get и set: PropertyValue = get(sys,'PropertyName') set(sys,'PropertyName',PropertyValue). В отличие от использования стандартных структур системы MATLAB в ППП Control System Toolbox не надо указывать полное имя поля структуры и различать строчные и прописные буквы. Пример: Вводя операторы и используя сокращения для имени поля » h = tf(1,[1 0],'inputname','u','variable','p'); % h(p)=1/p; h.inp получим ans = 'u'
Этот результат эквивалентен обращению в форме h.InputName. Все допустимые форматы операторов, используемые для работы с массивами записей (структурами), распространяются на объекты класса Iti. Пример: Следующие операторы позволяют изменять числитель передаточной функции: » h=tf(1,[1 0],'inputname','u','variable','p') Transfer function from input "u" to output: 1 p » h.num{1}=[1 2] Transfer function from input "u" to output:
p+2 ----p » h.num{1}(1)=3 Transfer function from input "u" to output:
3p+2 ------p » h.num{1}(2)=5 Transfer function from input "u" to output:
3p+5 -------
p 3.5. Функции создания и преобразования lti-моделей
ss
Содание ss модели
Синтаксис: sys = ss(a, b, c, d) sys = ss(a, b, c, d, Ts) Функция sys = ss(a, b, c, d) формирует непрерывную ss-модель, описываемую четверкой векторов пространства состояний системы. Вторая форма оператора формирует дискретную модель с периодом дискретности Ts. Все формы операторов могут быть дополнены парами свойство/значение (Property/Value). Если Вы забыли какие-либо свойства lti-моделей, можно воспользоваться командой ltiprops, которая даст необходимую подсказку.
tf
Содание tf модели
Синтаксис: sys = tf(num, den) sys = tf(num, den, Ts) Команда по своим свойствам и порядку действия аналогична вышеописанной, за исключением того, что в результате выполнения команды формируется объект подкласса tf.
zpk
Содание zpk модели
Синтаксис: sys = zpk(z, p, k) sys = zpk(z, p, k, Ts) Формирование объекта подкласса zpk. При этом: z и p являются массивами ячеек размера Ny×Nu , где элементы z{i, j} и p{i, j} содержат нули и полюсы передаточной функции по входу j и выходу i; k − двумерный массив обобщенных коэффициентов передачи.
ssdata
Извлечение данных о ss модели
Синтаксис: [А, В, С, D] = ssdata(sys) [А. В, С, D, Ts, Td] = sdata(sys) Функция [А, В, С, D] = ssdata(sys) возвращает значения четырех матриц {А, В, С, D } для lti-объекта с дескриптором sys. Если lti-объект не является моделью подкласса ss, то в первую очередь он преобразуется в ss-модель.
Функция [А, В, С, D, Ts, Td] = ssdata(sys) позволяет извлечь информацию о четверке матриц {А, В, С, D } для lti-объекта с дескриптором sys, a также о значениях периода дискретности Ts и запаздываниях на входах Td. Для непрерывных моделей Ts = 0, а каждый элемент вектора Td соответствует одному входу. Для дискретных моделей вектор Td является пустым. Другие свойства lti-объекта с дескриптором sys доступны по команде get или при прямом обращении к элементам массива записей.
tfdata
Извлечение данных о tf модели
Синтаксис: [num, den] = tfdata(sys) [num, den, Ts, Td] = tfdata(sys) [num. den] = tfdata(sys, V)
Функция [num, den] = tfdata(sys) возвращает матричную передаточную функцию для lti-объекта с дескриптором sys в виде описания массивов числителей и знаменателей. Массивы числителей num и знаменателей den являются массивами ячеек с числом строк, равным числу выходов, и числом столбцов, равным числу входов, а их индексы (i, j) определяют передаточную функцию от входа j до выхода i. Если lti-объект не является моделью подкласса tf, то в первую очередь он преобразуется в tf-модель. Функция [num, den, Ts, Td] = tfdata(sys) также возвращает значения периода дискретности Ts и запаздывания на входах Td. Для непрерывных моделей Ts = 0, а каждый элемент вектора Td соответствует одному входу. Для дискретных моделей вектор Td является пустым. Для одномерных систем функция [num, den] = tfdata(sys, V) возвращает числитель и знаменатель в виде числовых значений векторов-строк, а не в виде описания размерностей массива ячеек. Другие свойства lti-объекта с дескриптором sys доступны по команде get или при прямом обращении к элементам массива записей.
zpkdata
Извлечение данных о zpk модели
Синтаксис: [z, p. k] = zpkdata(sys) [z, р, k, Ts, Td] = zpkdata(sys) [z. p, k] = zpkdata(sys, V) Функция [z, p, k] = zpkdata(sys) возвращает нули, полюсы и обобщенные коэффициенты передачи для каждого канала М-объекта с дескриптором sys.
Массивы ячеек z, p имеют число строк, равное числу выходов, и число столбцов, равное числу входов; их индексы (i, j) задают элементы массива ячеек, которые содержат нули, полюсы и обобщенный коэффициент передачи для передаточной функции от входа j до выхода i. Если lti-объект не является моделью подкласса zpk, то в первую очередь он преобразуется в zpk-модель. Функция [z, p, k, Ts, Td] = zpkdata(sys) также возвращает значения периода дискретности Ts и запаздывания на входах Td. Для непрерывных моделей Ts = 0, а каждый элемент вектора Td соответствует одному входу. Для дискретных моделей вектор Td является пустым. Для одномерных систем функция [z, p, k] = zpkdata(sys, V) возвращает нули и полюсы знаменателя в виде числовых значений векторов-столбцов, а не в виде описания размерностей массива ячеек. 3.6. Преобразование lti-моделей c2d d2c d2d ss tf zpk
c2d
Построение дискретной модели непрерывной системы Построение непрерывной модели дискретной системы Изменение периода дискретности и запаздывания по входам Преобразование моделей в ss-форму Преобразование моделей в tf-форму Преобразование моделей в zpk-форму
Построение дискретной модели непрерывной системы Синтаксис: SysD = c2d(SysC, Ts) SysD = c2d(SysC, Ts, 'метод') SysD = c2d(SysC, Ts, 'PREWARP', We) [SysD, G] = c2d(SysC, Ts, 'FOH')
Функция SysD = c2d(SysC, Ts) реализует построение дискретной моде-' ли SysD непрерывной системы SysC с периодом дискретности Ts и с использованием экстраполятора нулевого порядка по умолчанию. Функция SysD = c2d(SysC, Ts, 'метод') реализует построение дискретной модели SysD непрерывной системы SysC с периодом дискретности Ts и с использованием одного из ниже перечисленных методов экстраполяции: Метод экстраполяции Описание метода ZOH Экстраполятор нулевого порядка FOH Экстраполятор первого порядка TUSTIN Билинейная аппроксимация Тастина PREWARP Аппроксимация Тастина с коррекцией
MATCHED
Метод соответствия нулей и полюсов
Функция SysD = c2d(SysC, Ts, 'PREWARP', We) реализует построение дискретной модели SysD непрерывной системы SysC с периодом дискретности Ts и с использованием аппроксимации Тастина с коррекцией, параметр We задает частоту, на которой выполняется согласование частотных характеристик непрерывной и дискретной моделей. Эта функция применима только для одномерных моделей. Функция [SysD, G] = c2d(SysC, Ts, 'FOH') реализует построение дискретной модели SysD непрерывной системы SysC с периодом дискретности Ts и с использованием экстраполятора первого порядка. Выходная матрица G позволяет для модели SysC, заданной в подклассе ss, с вектором начальных условий х0, вычислить эквивалентное начальное состояние по формуле x0-G*u(l,:). Пример: построить дискретную модель с экстраполятором первого порядка и периодом дискретности 0,1 с для непрерывной системы с запаздыванием по входу 0,35 с. » H=tf([1 -1], [1 4 5],'InputDelay',0.35) Transfer function: s-1 exp(-0.35*s) * ------------s^2 + 4 s + 5 » Hd=c2d(H,0.1,'foh') Transfer function: 0.0115 z^3 + 0.0456 z^2 - 0.0562 z - 0.009104 z^(-3) * --------------------------------------------------------z^3 - 1.629 z^2 + 0.6703 z Sampling time: 0.1
d2c
Построение непрерывной модели дискретной системы Синтаксис: SysC = d2c(SysD, Ts) SysC = d2c(SysD, Ts, 'метод')
Первый вариант функции реализует построение непрерывной модели SysC дискретной системы SysD при условии, что модель дискретной системы соответствует экстраполятору нулевого порядка. Второй – использует один из методов экстраполяции, указанных в описании предыдущей функции. Ограничения: Аппроксимация Тастина не определена для систем с полюсами z = -1 и плохо обусловлена для систем с полюсами, близкими к z = -1. Восстановление непрерывной модели с экстраполяцией ‘ZOH’ не применимо к дискретным моделям с нулевыми полюсами. Кроме того, этот
метод приводит к росту порядка непрерывной модели, если исходная дискретная система имеет отрицательные действительные полюсы. Это связано с тем, что функция логарифма от матрицы отображает отрицательные действительные полюсы в комплексные.
d2d
Изменение периода дискретности и учет запаздыания
Синтаксис: sys = d2d(sys, Ts) sys = d2d(sys, [ ], Nd) Первая функция формирует дискретную модель системы sys с новым периодом дискретности Ts. При этом предполагается, что дискретной модели соответствует экстраполятор нулевого порядка и соответствующее преобразование равносильно такой последовательности преобразований: sys1 = = c2d (d2c (sys), Ts). Вторая функция формирует дискретную модель с запаздыванием по входам, которые задаются вектором целочисленных множителей Nd, так что вектор запаздываний по входам равен Nd*Ts. Если запаздывание по всем входам одинаково, то оно может быть задано одним числом Nd. 3.7. Переопределение базисных функций
plus, minus
Сложение и вычитание lti-моделей
Синтаксис: sys = plus(sys1, sys2) sys = minus(sys1, sys2) Функция sys = plus(sys1, sys2) выполняет операцию сложения двух объектов; она переопределена для моделей подкласса ss, tf, zpk и соответствует параллельному соединению lti-объектов. Функция sys = minus(sys1, sys2) предназначена для вычитания двух объектов и соответствует параллельному соединению lti-объектов, для одного из которых знак изменяется на противоположный.
mtimes
Умножение lti-моделей
Синтаксис: sys = mtimes(sys1, sys2) Функция sys = mtimes(sys1, sys2) предназначена для умножения двух объектов и соответствует последовательному соединению lti-объектов.
ctranspose , transpose
Транспонирование lti-моделей
Синтаксис: sys1 = ctranspose(sys) sys1 = transpose(sys) Функция sys1 = ctranspose(sys) предназначена для построения сопряженных моделей для lti-объектов. ss-модели: для непрерывных моделей, заданных четверкой {A, B, C, D}, функция ctranspose возвращает четверку {-A’, -C’, B’, D’}; для дискретных моделей, заданных четверкой {A, B, C, D}, функция ctranspose возвращает четверку {AA, AA*C’’, -B’*AA, D’-B’*AAC’’}, где AA = inv(A’). tf и zpk модели: для непрерывных моделей с передаточной функцией H(s) функция ctranspose возвращает передаточную функцию H(-s)’; для дискретных моделей с передаточной функцией H(z) функция ctranspose возвращает передаточную функцию H(z -1)’. Функция sys1 = transpose(sys) предназначена для транспонирования ltiобъектов. ss-модели: для непрерывных и дискретных моделей, заданных четверками {A, B, C, D}, функция transpose возвращает четверки {A .’, C .’, B .’, D .’}; tf и zpk модели: для непрерывных моделей с передаточной функцией H(s) функция transpose возвращает передаточную функцию H(s).’; для дискретных моделей с передаточной функцией H(z) функция transpose возвращает передаточную функцию H(z).’.
inv
Инверсия lti-моделей
Синтаксис: isys = inv(sys) Функция isys = inv(sys) выполняет инверсию входа и выхода системы так, что линейное соответствие вида y = G (s ) u преобразуется в соответствие вида
u = H (s ) y , где H (s ) = G (s ) . Эта операция определена только для систем с одинаковым числом входов и выходов и обратимой матрицей D. Пример: −1
Рассмотрим систему с двумя входами и двумя выходами, которая описывается матричной передаточной функцией 1 1 H (s ) = s + 1 0 1 и построим ее инверсную модель. » H=[1 tf(1,[1 1]);0 1] Transfer function from input 1 to output... #1: 1 #2: 0 Transfer function from input 2 to output... 1 #1: ----s+1 #2: 1 » Hi=inv(H) Transfer function from input 1 to output... #1: 1 #2: 0 Transfer function from input 2 to output... -1 #1: ----s+1 #2: 1 Ограничения: не следует применять функцию inv к моделям с обратными связями.
mrdivide, mldivide
Транспонирование lti-моделей
Синтаксис: sys = mrdivide(sys1, sys2) sys = mldivide(sys1, sys2) Функция sys = mrdivide(sys1, sys2) выполняет операцию левого деления, что соответствует построению модели вида sys1 * inv(sys 2 ) . Функция sys = mldivide(sys1, sys2) предназначена для построения модели вида inv(sis1) * sys 2 .
3.8. Соединение lti-моделей
parallel
Параллельное соединение lti-моделей
Синтаксис: sys = parallel(sys1, sys2) sys = parallel(sys1, sys2, inp1, inp2, out1, out2) Функция sys = parallel(sys1, sys2) реализует параллельное соединение двух lti-моделей. sys1 u
y
sys2
sys Обе модели должны быть непрерывными или дискретными с одинаковыми периодами дискретности. Допустимо использование безинерционных моделей, описываемых матрицами статических коэффициентов передачи. Эта функция эквивалентна операции сложения ltiмоделей sys = sys1 + sys 2 . Функция sys = parallel(sys1, sys2, inp1, inp2, out1, out2) позволяет реализовать более общую форму параллельного соединения двух lti-моделей. v1 u v2
sys1
sys2 sys
z1 y z2
Векторы inp1 и inp2 определяют, какие номера входов системы sys1 и какие номера входов системы sys2 соединяются. Аналогично векторы out1 и out2 определяют, какие номера выходов систем sys1 и sys2 суммируются. Результирующая модель sys имеет входом вектор [v1; u; v2] и выходом вектор [z1; y; z2].
series
Последовательное соединение lti-моделей
Синтаксис: sys = series(sys1, sys2) sys = series(sys1, sys2, outputs1, inputs2) Функция sys = series(sys1, sys2) реализует последовательное соединение двух lti-моделей и эквивалентна операции умножения sys = sys2 * sys1. sys1
u
sys2
y
sys При использовании функции действуют те же ограничения, что и в предыдущем случае. Функция sys = series(sys1, sys2, outputs1, inputs2) позволяет реализовать более общую форму последовательного соединения двух lti-моделей. Векторы outputs1 и inputs2 указывают, какие номера выходов системы sus1 к каким номерам входов системы sys2 должны быть подсоединены. Полученная модель sys имеет входом вектор u и выходом вектор y. v1 sys1 u
sys2
y1
y
z1
sys
Пример: рассмотрим две модели – ss-модель sys1 c пятью входами и четырьмя выходами и ss-модель sys2 с двумя входами и тремя выходами. Выполним последовательное соединение этих моделей, когда выходы 2 и 4 модели sys1 присоединяются к входам 1 и 2 модели sys2. » outputs1=[2 4]; » inputs2=[1 2]; » sys=series(sys1,sys2,outputs1,inputs2)
feedback
Соединение lti-моделей обратной связью
Синтаксис: sys = feedback(sys1, sys2) sys = feedback(sys1, sys2, feedin, feedout, sign) Функция sys = feedback(sys1, sys2) возвращает lti-модель с дескриптором sys, соответствующую соединению lti-моделей sys1 и sys2 в контур с отрицательной обратной связью. u −
sys1 sys2
y
Замкнутая модель имеет вход u и выход y. Обе модели должны быть непрерывными или дискретными с одинаковыми периодами дискретности. Правила приоритета определяют подкласс результирующей модели. Функция feedback(sys1, sys2) эквивалентна функции feedback(sys1, sys2, -1). Чтобы замкнуть систему положительной обратной связью следует использовать функцию feedback(sys1, sys2, +1). Функция sys = feedback(sys1, sys2, feedin, feedout) позволяет реализовать более общую форму соединения с обратной связью. Вектор feedin содержит индексы входного вектора модели sys1 и определяет, какие ее входы включаются в контур с обратной связью. Вектор feedout определяет, какие входы системы sys1 используются для организации обратной связи. Результирующая модель имеет те же входы и выходы, что и система sys1 с сохранением их порядка. По умолчанию предполагается, что контур замыкается отрицательной обратной связью. Ограничения: соединение с обратной связью не должно содержать алгебраических петель. Для ss-моделей в пространстве состояний это условие заключается в том, что матрицы прямой передачи входа D1 и D2 таковы, что матрица I + D1D2 для контура с отрицательной обратной связью и матрица I – D1D2 для контура с положительной обратной связью являются невырожденными.
star
Соединение lti-моделей звездой
Синтаксис: sys = star(sys1, sys2) sys = star(sys1, sys2, nu, ny) Функция sys = star(sys1, sys2, nu, ny) формирует соединение звездой для двух моделей sys1 и sys2.
v1
v2
sys1 u
y
y
u
sys2 sys
z1 y z2
Обратная связь соединяет первые nu выходов системы sys2 с последними nu входами системы sys1 (сигналы u) и последние ny выходов системы sys1 с
первыми ny входами системы sys2 (сигналы y). Полученная система sys отображает вектор входа [v1; v2] на вектор выхода [z1; z2]. Функция sys = star(sys1, sys2) возвращает lti-модель с дескриптором sys, которой может соответствовать одно из двух соединений: v1
z1
sys1
sys1 y
u
y sys2
append
u sys2
v1
z2
Объединение lti-моделей
Синтаксис: sys = append(sys1, sys2, …, sysN) Функция sys = append(sys1, sys2, …, sysN) объединяет входы и выходы lti-моделей и формирует агрегатированную модель без перекрестных связей. Для tf-моделей с передаточными функциями H1(s), H2(s), …, HN(s) результирующая модель характеризуется передаточной функцией в виде диагональной блочной матрицы H (s ) = diag [H 1 (s ), H 2 (s ), …, H N (s )] .
connect
Построение lti-модели на основе структурной схемы
Синтаксис: sysc = connect(sys, Q, inputs, outputs) На практике сложные динамические системы часто описываются структурными схемами, состоящими из большого количества элементов. В этом случае даже для систем умеренной сложности построить ss-модель в пространстве состояний по ее структурной схеме бывает затруднительно. Использование функции connect существенно облегчает эту задачу. Входные аргументы Q, inputs и outputs имеют следующее назначение: матрица связей Q предназначена для описания связей блоков на структурной схеме. Каждая строка этой матрицы соответствует одному входу системы sys; первый элемент строки – это номер входа, последующие элементы указывают номера выходов, которые алгебраически суммируются по этому входу; отрицательные элементы обозначают суммирование со знаком минус. Например, если на вход 7 поступают сигналы с выходов 2, 15 и 6, причем сигнал с выхода 15 имеет отрицательный знак, то соответствующая строка матрицы связей Q имеет вид [7 2 –15 6]. Теперь с помощью функции connect может быть построена модель в пространстве состояний с учетом перекрестных связей и с теми же входами и выходами, которые имела модель sys;
векторы inputs и outputs определяют, какие входы и выходы агрегатированной системы являются внешними. Например, если внешними являются входы 1, 2, 15 и выходы 2, 7 системы sys, то аргументы inputs и outputs должны иметь вид inputs = [1 2 15]; outputs = [2 7]. Поскольку при вводе большого объема данных достаточно просто допустить ошибку, следует выполнить проверку сформированной модели. Для этого можно предложить несколько рекомендаций: следует убедиться, что полюсы модели sys соответствуют полюсам отдельных блоков; убедиться, что полюс и статические коэффициенты передачи результирующей системы являются приемлемыми; построить переходные функции и частотные характеристики для системы sysc и сравнить их с ожидаемыми. Если методика работы со структурными схемами является преобладающей, то лучше формировать модель в системе Simulink, как мощным инструментом построения моделей динамических систем. 3.9. Получение lti-объекта из системы Simulink Для того, чтобы получить lti-объект из системы Simulink, следует сформировать модель, в которой не будет источников и приемников сигналов. 1 In1
1 0.01s2 +0.5s+1 Transfer Fcn Gain 5
1 1 0.5s+1 Transfer Fcn1
Out1 2 Out2
Входы и выходы системы отмечаются блоками in и out. Далее необходимо получить параметры пространства состояний системы (предполагаем, что система собрана в окне системы Simulink с именем untitled): » [a, b, c, d] = linmod('untitled');. Полученная матрица позволяет получить модель системы в пространстве состояний: » sys=ss(a, b, c, d) a= x1 x2 x3 x1 -50 -600 0 x2 1 0 0 x3 0 100 -2 b= u1
x1 x2 x3
1 0 0
y1 y2
x1 0 0
y1 y2
u1 0 0
c= x2 100 0
x3 0 2
d=
Continuous-time model. Полученная модель может быть использована также, как и любая другая, сформированная командами подсистемы Control System Toolbox. Можно получить ее в виде tf-модели: » systf=tf(sys) Transfer function from input to output... 100 #1: ---------------s^2 + 50 s + 600 200 #2: --------------------------s^3 + 52 s^2 + 700 s + 1200. Внимание! Так как модель первоначально преобразуется в форму пространства состояний, не допускается включение в модель в явном виде элементов, передаточные функции которых носят дифференциальный характер (степень числителя больше степени знаменателя). 3.10. Операторы и функции для анализа систем
pole, eig
Расчет полюсов lti-модели
Синтаксис: p = pole(sys) poles = eig(sys) Функция р = pole(sys) вычисляет полюсы р одномерной или многомерной lti-модели sys.
Для ss-моделей в явной форме Коши полюсами являются собственные значения задачи Аr = λr, для ss-моделей в неявной форме Коши - обобщенные собственные значения задачи Аг = λВг. Для одномерных tf и zpk моделей полюсами являются корни знаменателя передаточной функции. Для многомерных tf и zpk моделей полюсы определяются как множество полюсов для каждого канала входа-выхода. В процессе вычислений могут возникнуть трудности при определении точного порядка многомерной передаточной функции и выявлении избыточных полюсов. При применении функции pole tf'и zpk модели преобразуются в ss-модели и, хотя при этом по некоторым каналам входа-выхода формируются минимальные реализации, в целом функция pole не гарантирует минимальной реализации, за исключением случаев, когда многомерная система имеет единственный вход или единственный выход. Функция poles = eig(sys) вычисляет полюсы lti-модели sys и реализована как переопределяемый метод для lti-объектов. Ограничения: при использовании функций pole и eig процедура вычисления кратных полюсов (собственных значений) оказывается численно неустойчивой. Это выражается в том, что собственному значению λ кратности m, как правило, соответствует кластер близких собственных значений, расположенных на окружности с центром λ и радиусом порядка eps1/m. Для анализа и расчета систем с кратными собственными значениями рекомендуется использовать матрицы в канонической форме Жордана.
damp
Расчет собственных частот и коэф-та демпфирования
Синтаксис: [Wn, Z] = damp(sys) [Wn, Z, P] = damp(sys) Функция damp предназначена для расчета собственных частот и коэффициентов демпфирования, соответствующих полюсам lti-модели sys. Если функция вызывается без выходных аргументов, то на экран выводится таблица, содержащая собственные значения в порядке возрастания их модуля и соответствующие им собственные частоты и коэффициенты демпфирования. Функция [Wn, Z] = damp(sys) возвращает векторы-столбцы Wn и Z, содержащие собственные частоты и коэффициенты демпфирования lti-модели sys. Для дискретных систем с полюсами z и периодом дискретности Ts рассчитываются эквивалентные полюсы непрерывной модели, исходя из соотношения z = exp(sTs). Оба вектора Wn и Z пустые, если период дискретности не указан.
Функция [Wn, Z, Р] = damp(sys) дополнительно возвращает вектор Р, содержащий полюсы lti-модели sys, которые соответствуют применению функции Р = pole(sys). Пример: Вычислить и вывести на экран собственные значения, собственные частоты и коэффициенты демпфирования непрерывной системы со следующей передаточной функцией: » H=tf([2 5 1],[1 2 17 10 5]) Transfer function: 2 s^2 + 5 s + 1 --------------------------------------s^4 + 2 s^3 + 17 s^2 + 10 s + 5 » damp(H) Eigenvalue -3.02e-001 + 4.74e-001i -3.02e-001 - 4.74e-001i -6.98e-001 + 3.92e+000i -6.98e-001 - 3.92e+000i
dcgain
Damping 5.37e-001 5.37e-001 1.75e-001 1.75e-001
Freq. (rad/s) 5.62e-001 5.62e-001 3.98e+000 3.98e+000
Расчет коэффициента передачи
Синтаксис: k = dcgain(sys) Функция k = dcgain(sys) вычисляет коэффициент передачи k для ltiмодели sys. Непрерывные системы Для tf-моделей коэффициент передачи вычисляется как значение передаточной функции при s = 0. Для ss-моделей с матрицами А, В, С, D этот коэффициент определяется из соотношения k = D – СА-1В. Дискретные системы Для tf-моделей коэффициент передачи вычисляется как значение дискретной передаточной функции при z = 1. Для ss-моделей с матрицами А, В, С, D этот коэффициент определяется из соотношения k = С(I - А)-1В + D. Коэффициент передачи для 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 sgrid(z, wn)
Построение сеток постоянного уровня
zgrid 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 » subplot(1, 2, 2),zgrid
20
1
10
0.5
0
0
-10
-0.5
-20 -20
bode
-15
-10
-5
0
-1 -1
-0.5
0
0.5
1
Построение логарифмических частотных характеристик
Синтаксис: bode(sys) bode(sys, w) bode(sys1, sys2, …, sysN) bode(sys1, sys2, …, sysN, w) bode(sys1, ‘<тип линии1>’, …, sysN, ‘<тип линииN>’) [mag, phase, w] = bode(sys) Группа команд и функций 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-моделей на одном
графике. Все модели должны иметь одинаковое количество входов и выходов, среди них могут быть как непрерывные, так и дискретные. Команда bode(sysl, '<тип_линии1>',..., sysN, '< тип_линииN>') позволяет задать цвет, тип и маркеры линий для характеристик каждой модели. Функции [mag, phase, w] == bode(sys), [mag, phase] = bode(sys, w) выполняют расчет амплитудных и фазовых частотных характеристик. Выходные аргументы mag и phase являются трехмерными массивами, последняя размерность которых - частота. Единицу измерения амплитудной характеристики можно преобразовать в децибелы (дБ) следующим образом: magdb = 20*logl0(mag); единица измерения фазы - град, единица измерения частоты - рад/с. Аргументы: Выходные аргументы mag и phase являются трехмерными массивами размера Nu × Ny × length(w): для одномерных моделей массивы mag(1, 1, k) и phase(1, 1, k) определяют значения амплитудной и фазовой характеристик на частотах w(k); для многомерных моделей массивы mag(i, j, k) и phase(i, j, k) определяют значения амплитудной и фазовой частотных характеристик для передаточных функций Нij от j-гo входа до i-гo выхода на частотах w(k). Пример: Построить логарифмические частотные характеристики для непрерывной 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:')
Для непрерывных моделей функция bode рассчитывает частотные характеристики для значений переменной передаточной функции s = jω на мнимой оси. Рассматриваются только положительные значения ω. Для ssмоделей частотная характеристика рассчитывается по формуле −1 C ( jωI − A) B + D . При расчетах матрицу A целесообразно привести к форме Хессенберга для экономии машинного времени и повышения точности результата. Для дискретных моделей частотная характеристика равна передаточной функции при значении ее переменной на окружности единичного радиуса z = e jωTs . Из-за периодичности частотной характеристики дискретной модели она рассчитывается только от нуля до частоты ω = π / Ts (частота Найквиста), т.е. для верхней половины единичной окружности. Если период дискретности Ts не определен, он принимается по умолчанию равным единице. Предупреждение: если lti-модель имеет полюс на мнимой оси в случае непрерывной модели или на окружности единичного радиуса в случае дискретной модели, а вектор w содержит частоту, соответствующую этой точке, то амплитудная характеристика на этой частоте равна бесконечности, и в этом случае выдается предупреждающее сообщение (Singularity in freq. response due to jw-axis or unit circle pole).
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 град, то возвращаются наименьшие значения соответствующих запасов устойчивости. Функция [Gm, Pm, Wcg, Wcp] = margin(mag, phase, w) возвращает значения запасов устойчивости, вычисленных по значениям массива точек (mag, phase, w), где mag - амплитуда, phase - фаза и w - частота. В этом случае при определении запасов устойчивости необходимо выполнить интерполяцию для определения соответствующих точек пересечения, что приводит к потере точности вычислений. Пример: Рассчитать запасы устойчивости по фазе и модулю, если задана следующая дискретная передаточная функция разомкнутой системы: » 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)
impulse
Импульсная переходная функция
Синтаксис: impulse(sys) impulse(sys, t) impulse(sys1, sys2,..., sysN) impulse(sys1, sys2, ...,sysN, t) impulse(sys1, 'PlotStylel',..., sysN, PlotStyleN') impulse(sys1, 'PlotStylel',..., sysN, 'PlotStyleN', t) [y, t, x] = impulse(sys) [y, t, x] = impulse(sys, 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. Все модели должны иметь одинаковое число входов и выходов Команды impulse(sysl, 'PlotStylel', ..., sysN, 'PlotStyleN'), impulse(sysl, 'PlotStylel', ..., sysN, 'PlotStyleN', t) позволяют разметить импульсные переходные функции для нескольких lti-моделей sysl,..., sysN на одном графике различными стилями. Функции [у, t, х] = impulse(sys), [у, t, x] = impulse(sys, t) вычисляют импульсные переходные функции для вектора выходов у, вектор моментов времени t, значения переменных состояния х. Графики при этом не строятся. Для одномерных моделей массив у имеет следующие размеры: число строк равно длине вектора t, а число столбцов - числу выходов. Аналогично массив х имеет число строк, равное длине вектора t, и число столбцов, равное количеству переменных состояния. Для многомерных моделей со многими входами переходные функции для каждого канала размещаются в трехмерном массиве у размера (длина вектора 1)×(число выходов)×(число входов). При этом значение у(:, :, j) соответствует переходной функции по j-му входу. Аналогично трехмерный массив х имеет размер (длина вектора 1)×(число переменных состояния)×(число входов). Пример: Построить импульсную переходную функцию для модели 2-го порядка в пространстве состояний
x1 − 0.5572 − 0.7814 x1 − 0.5572 − 1 u1 x = 0.7814 x + 0 0 2 u 2 2 2 x y = [1.9691 6.4493] 1 x2 » a=[-0.5572 -0.7814; 0.7814 0]; » b=[1 -1; 0 2]; » c=[1.9691 6.4493]; » sys=ss(a,b,c,0); » impulse(sys)
Левый график соответствует импульсной переходной функции для первого входа, а правый – для второго входа. Можно сохранить значения импульсной переходной функции в виде массива [y, t] = impulse(sys). Ограничения: импульсная переходная функция непрерывной системы с нулевой матрицей D равна бесконечности при t = 0. Функция impulse игнорирует этот разрыв и возвращает при t = 0 значение Cb.
step
Переходная функция Синтаксис:
step(sys) step(sys, t) step(sys1, sys2,..., sysN) step(sys1, sys2,..., sysN, t) step(sys1, 'PlotStytel',..., sysN, 'PlotStyleN') step(sys1, 'PlotStylel',..., sysN, 'PlotStyleN', t) [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. Все модели должны иметь одинаковое число входов и выходов. Команды step(sysl, 'PlotStylel', ..., sysN, 'PlotStyleN'), step(sysl, 'PlotStylel', ..., sysN, 'PlotStyleN', t) позволяют разметить переходные функции для нескольких lti-моделей sysl,..., sysN на одном графике различными стилями. Функции [у, t, х] = step(sys), [у, t, x] = step(sys, t) вычисляют переходные функции для вектора выходов у, вектор моментов времени t, значения переменных состояния х. Графики при этом не строятся. Для одномерных моделей массив у имеет следующие размеры: число строк равно длине вектора t, а число столбцов - числу выходов. Аналогично массив х имеет число строк, равное длине вектора t, и число столбцов, равное количеству переменных состояния. Для многомерных моделей со многими входами переходные функции для каждого канала размещаются в трехмерном массиве у размера (длина вектора 1)×(число выходов)×(число входов). При этом значение у(:, :, j) соответствует переходной функции по j-му входу. Аналогично трехмерный массив х имеет размер (длина вектора 1)×(число переменных состояния)×(число входов).
Пример: построить переходную функцию для 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 используется как значение периода дискретности.
Ниже приводится краткое описание ряда дополнительных функций пакета Control System Toolbox, которые могут оказаться полезными для исследования динамических моделей систем автоматического управления. Синтаксис и правила применения этих функций можно изучить самостоятельно.
size tzero dsort esort evalfr frqresp norm
nichols ngid nyquist sigma
Определение размерностей lti-модели Вычисление передаточных нулей lti-модели Сортировка полюсов дискретной lti-модели Сортировка полюсов непрерывной lti-модели Вычисление передаточной функции для заданного (в том числе и комплексного) значения аргумента (частоты) Вычисление частотных характеристик в точках действительных значений частоты Вычисление норм (для непрерывной системы H(s) – квадратный корень из среднего значения квадрата импульсной переходной функции системы) lti-модели Построение амплитудно-фазового годографа Никольса. При наложении на годограф Никольса диаграммы Никольса можно проанализировать свойства как разомкнутой, так и замкнутой модели Построение диаграммы Никольса Построение годографа Найквиста в координатах Re(H) – Im(H) Построение частотной характеристики сингулярных чисел ltiмодели. Для одномерных систем частотные характеристики сингулярных чисел являются аналогом логарифмических частотных характеристик
3.11. Средства графического интерфейса пользователя для анализа ltiсистем Для просмотра результатов анализа, расчета или проектирования Itiсистем в состав ППП Control System Toolbox включено специальное средство просмотра LTI-Viewer, реализованное на основе графического интерфейса пользователя GUI. Для вызова средства просмотра LTI-Viewer надо ввести команду ltiview и на экране терминала появится рабочее поле средства LTI-View,
1
2
11 3
4
10
5 6
7
8
9
где 1 - линейка меню для доступа к дополнительным средства управления; 2 - рабочее пространство для построения графиков; 3 - список lti-объектов в рабочей среде системы MATLAB; 4 - кнопки переключения между рабочими средами системы MATLAB и средства просмотра LT Viewer; 5 - линейка состояния; 6 - список lti-объектов в рабочей среде LT Viewer; 7 - селектор выбора пар вход-выход; 8 - радиокнопки для изменения конфигурации графика; 9 - дополнительные опции графика; 10 - меню возможных графиков; 11 - кнопки изменения масштаба. Средство просмотра LTI-Viewer работает с собственной рабочей средой которая формируется независимо от рабочей среды системы MATLAB. Для обмена данными между рабочими средами системы MATLAB и LTIViewer предназначено окно просмотра (области 3, 6).
Слева в этом окне показаны все lti-модели, размещенные в рабочей среде системы MATLAB; справа показаны LTI-модели, отобранные для работы в среде LTI-Viewer. Следует отметить, что при добавлении lti-объектов в рабочую среду системы MATLAB окно просмотра автоматически не обновляется. Для обновления окна просмотра следует использовать кнопку Refresh (обновить). Поскольку LTI-Viewer может работать только с lti-объектами, размещенными в собственной рабочей среде, необходимо с помощью кнопки Select переместить требуемые lti-объекты в рабочую среду LTI-Viewer и тогда они отобразятся в окне просмотра Selected (выбранные модели). Всякий раз, когда lti-объект вводится в окно Selected, LTI-Viewer автоматически строит график, указанный в меню Plot Type, и выводит соответствующие ему опции в область Plot Options. После построения графиков lti-объекты в окне Selected отмечаются знаком +. Первоначальным состоянием любого lti-объекта, помещенного в окно Selected, является “график включен”. Если нет необходимости просматривать график, связанный с тем или другим lti-объектом, то можно переключить этот объект в состояние “график выключен”, используя индикатор Plot. Для этого необходимо выполнить следующие операции: выделить имя модели в окне Selected, график для которой следует исключить; выключить отметку в индикаторе Plot. Исключение метки в индикаторе переводит график в состояние “выключен” и исключает его из окна показа до тех пор, пока в индикаторе не будет вновь выставлена метка “включен”. Для удаления lti-объекта из области Selected необходимо воспользоваться кнопкой Delete, выделив имена тех моделей, которые следует исключить из рабочей среды LTI-Viewer.
4. ВЫПОЛНЕНИЕ СИМВОЛЬНЫХ ОПЕРАЦИЙ 4.1. Возможности пакета Symbolic Math Toolbox В систему MATLAB 5.2 входит обновленная версия 2.0 пакета расширения Symbolic Math Toolbox (в дальнейшем сокращенно Symbolic), которая базируется на ядре символьной математической системы Maple V R4, лидирующей в области автоматизации аналитических решений. С помощью команды » help symbolic
можно получить перечень входящих в пакет команд и функций. Он соответствует названиям заголовков этой главы. Для получения справки по любой команде или функции можно использовать команду » help sym/name.m где name − это имя соответствующей команды или функции, a name.m − имя Мфайла, задающего команду или функцию. Пакет Symbolic добавил системе MATLAB качественно новое свойство − возможность выполнения символьных вычислений и преобразований, которые ранее были доступны только в системах принципиально иного класса, относящихся к компьютерной алгебре. До введения этого пакета система MATLAB считалась наиболее мощной системой при решении математических задач и математического моделирования в численном виде. Теперь она, с учетом новых средств, становится в полной мере универсальной системой. Последняя реализация системы символьной математики Maple V R5 в своем ядре и в расширениях имеет около 2700 функций. Система MATLAB с пакетом Symbolic, включающим в себя чуть больше сотни символьных команд и функций, намного уступает Maple V по количеству таких команд и функций. Однако в данный пакет включены лишь наиболее важные и широко распространенные функции. Кроме того, есть специальная команда, которая дает доступ к ядру Maple V, что заметно расширяет круг используемых функций. Вряд ли можно считать существенным недостатком то, что в пакете Symbolic используется ядро из реализации Maple V R4 − оно более апробировано и надежно, чем ядро новейшей реализации R5 системы Maple V. Помимо типовых аналитических вычислений (таких как символьное дифференцирование и интегрирование, упрощение математических выражений, подстановка и так далее) пакет Symbolic позволяет реализовать арифметические операции с произвольной точностью. 4.2. Демонстрационные примеры работы с пакетом Symbolic Для ознакомления с пакетом Symbolic можно использовать следующие команды: symintro − начальное знакомство с Symbolic; symcalcdemo − демонстрация символьных вычислений; symlindemo − демонстрация применения пакета Symbolic в задачах линейной алгебры; symvpademo − демонстрация операций арифметики с произвольной точностью; symrotdemo − изучение вопросов вращения плоскости; symeqndemo − демонстрация решения уравнений в символьном виде. С каждым из этих примеров связан М-файл, запуск которого осуществляется с помощью одной из указанных команд. Текст пояснений в этих примерах приводится на английском языке. Для знакомства используется
просмотр в окне командного режима, а возможности графики практически не используются в силу специфики символьных вычислений. 4.3. Задание символьных переменных с помощью апострофов Поскольку переменные системы MATLAB по умолчанию не определены и традиционно задаются как векторные, матричные, числовые и так далее, то есть не имеющие отношения к символьной математике, для реализации символьных вычислений нужно прежде всего позаботиться о создании специальных символьных переменных. В простейшем случае их можно определить как строковые переменные, заключив имена в апострофы. Следующие примеры иллюстрируют действие этого приема: » sin(x)^2+cos(x)^2 ??? Undefined function or variable 'x'. » sin('x')^2+cos('x')^2 ans = 1 Итак, в первом случае MATLAB "возмутилась" нашей небрежностью и сообщила, что функция или переменная х не определена, и ни о каких вычислениях синуса и косинуса речи быть не может. Вместе с тем она подсказала, как надо сделать это определение − заключить имя переменной в апострофы, ибо таким образом система получает информацию о необходимости включить символьный режим вычислений. Поэтому во второй раз получен вполне осмысленный результат − сумма квадратов синуса и косинуса переменной 'х' выдана равной 1. Этот результат сразу выдает характерную особенность символьных вычислений: они возвращают результаты даже в том случае, когда переменные не определены. Правила выполняемых при этом преобразований заложены в ядре символьных операций, а в нашем случае − это ядро системы Maple V R4. Символьные переменные имеют много общего со строковыми, которые также задаются с использованием апострофа. Однако различия между ними все же имеются, и самое серьезное из них − это возможность эволюции символьных выражений, то есть их вычисления и преобразования с помощью специальных символьных функций. По этой причине мы отделяем символьные переменные, хранящие символьные выражения, от строковых переменных, хранящих не эволюционирующий текст. 4.4. Базовые символьные функции
sym
Создание символьных переменных а
Синтаксис: sym(A) sym('x') sym('x','real') S = sym(A) − возвращает символьный объект S класса 'sym' для входного параметра А. Если А − строка, то будет получена символьная строка или символьная переменная, а если А − это число (скаляр) или матрица, то будут получены их символьные представления. X = sym('x') − возвращает символьную переменную с именем 'х' и записывает результат в х. х = sym('x','real') − возвращает символьную переменную вещественного типа, так что conj(x) эквивалентно х. Возможны также следующие очевидные формы: alpha = sym('alpha') r = sym('Rho', 'real') х = sym('x', 'unreal') pi = sym('pi') delta=sym('1/10') Для преобразования чисел или матриц в символьную форму применяется функция sym в виде: S = sym(A,flag)
syms
Функция создания группы символьных объектов
Синтаксис: syms arg1 arg2 ... syms arg1 arg2 ... − создает группу символьных объектов, подобную выражениям arg1=sym(‘arg1’); arg2=sym(‘arg2’)… syms arg1 arg2 ... real и syms arg1 arg2 ... unreal − создают группы символьных объектов с вещественными (real) и не вещественными (unreal) значениями. Последнюю функцию можно использовать для отмены задания вещественности объектов. Имена параметров (аргументов) должны начинаться с буквы и содержать только буквы и цифры. Применение в них спецзнаков, например: +, -, *, ^ и подобных недопустимо, поскольку такие знаки воспринимаются как операторы - сигналы к действию.
findsym Синтаксис:
Функция создания списка символьных переменных
findsym(S) findsym(S,N) В математических выражениях могут использоваться как обычные, так и символьные переменные. Функция findsym позволяет выделить символьные переменные в составе выражения S: findsym(S) − возвращает в алфавитном порядке список всех символьных переменных выражения S. При отсутствии таковых возвращается пустая строка. findsym(S,N) − возвращает список N символьных переменных, ближайших к 'х' в порядке упорядочения по алфавиту. Примеры: » a=2; b=4; » findsym(a*x^2+b*y+z) ans = x, y, z » findsym(a+b+x+y+z, 2) ans = x,y Функция findsym позволяет упростить запись многих функций, поскольку она автоматически находит используемую в этих функциях символьную переменную.
pretty
Функция вывода символьных выражений
Синтаксис: pretty(S) pretty(S,n) К сожалению, в отличие от современных систем символьной математики (MathCAD, Maple V или Mathematical), MATLAB пока не способна выводить выражения и результаты их преобразований в естественной математической форме с использованием общепринятых спецзнаков для отображения интегралов, сумм, произведений и так далее. Этот недостаток, однако, часто оборачивается достоинством - запись выражений осуществляется в простом текстовом формате, облегчающем ввод выражений. Да и вывод символьных выражений в таком формате поддерживается практически всеми устройствами вывода. Тем не менее, некоторые ограниченные текстовым форматом возможности близкого к математическому виду вывода обеспечивает функция pretty:
pretty(S) − дает вывод выражения S в формате, приближенном к математическому. pretty(S, n) − аналогична предшествующей функции, но задает вывод в n позициях строки (по умолчанию n =79). Примеры: » pretty(x^2) 2 x » pretty(int(x^2, x)) 3 1/3 x » S=(1+x^2)/(y^2-z^2); » pretty(S) 2 1+x ------2 2 y -z Нетрудно заметить, что в выведенных выражениях используются надстрочные показатели степени и (в необходимых случаях) знаки деления в виде горизонтальной черты. Однако для простых констант (например, 1/3) попрежнему используется знак деления в виде наклонной черты.
diff
Функция вычисления производных
Синтаксис: diff(S,’v’) diff(S,sym(‘v’)) diff(S,n) diff(S,n,’v’) Для вычисления производных в символьном виде служит функция diff, записываемая в одном из вышеперечисленных форматов: diff(S,’v’) или diff(S,sym(‘v’)) − возвращают символьное значение первой (n = 1) производной от символьного выражения или массива выражений S по переменной v; diff(S,n) или diff(S,n,’v’) − возвращают n-ую (n – целое число) производную по переменой v.
int
Функция вычисления интегралов
Синтаксис: int(S) int(S, v) int(S, a, b) int(S, v, a, b) В практической работе часто возникает необходимость вычисления неопределенных и определенных интегралов вида b
I = ∫ f ( x )dx и I = ∫ f ( x )dx . a
Здесь: f(x) − подынтегральная функция независимой переменной х, а − нижний и b − верхний пределы интегрирования для определенного интеграла. int(S) − возвращает символьное значение неопределенного интеграла от символьного выражения или массива символьных выражений S по переменной, которая автоматически определяется функцией findsym. Если S - скаляр или матрица, то вычисляется интеграл по переменной 'x'. int(S,v) − возвращает неопределенный интеграл от S по переменной V. int(S,a,b) − возвращает определенный интеграл от S с пределами интегрирования от а до b, причем пределы интегрирования могут быть как символьными, так и числовыми. int(S,v,a,b) − возвращает определенный интеграл от S по переменной v с пределами от а до b. Примеры применения этой функции приводятся ниже: » int(sin(x)^3,x) ans = -1/3*sin(x)^2*cos(x)-2/3*cos(x) » int((x^2-2)/(x^3-1),x,1,2) ans = -inf » int((x^2-2)/(x^3-1),x,2,5) ans = -2/3*log(2)+2/3*log(31)+2/3*3^(1/2)*atan(11/3*3^(1/2))-2/3*log(7)−2/3*3^(1/2)*atan(5/3*3^(1/2))
limit
Функция вычисления пределов
Синтаксис: limit(F, x, a, ‘left [right]’) limit(F, a) limit(F) Вычисление пределов функций является одним из разделов математического анализа. Предел может быть конечным числом, положительной или отрицательной бесконечностью. Есть функции (например, разрывные в точке х = а), у которых нет предела в самой точке х = а, но есть предел при x → a + 0 или при x → x − 0 , где под 0 подразумевается очень малое число. limit(F, x, a, ‘left’) или limit(F, x, a, ‘right’) – возвращают предел в точке a слева или предел в точке справа. limit(F, a) – возвращает предел для независимой переменной, определяемой функцией findsym. limit(F) – возвращает предел при а = 0. Пример: » limit(2*sin(x)/x) ans = 2 » limit([sin(x)/x, (1+x)/(2+x)],x,0) ans = [ 1, 1/2]
expm
Вычисление матричного экспоненциала
Для вычисления матричного экспоненциала матрицы А используется функция ехрm(А). Рассмотрим пример ее применения: » syms t; » A=[1 0;0 -1] A= 1 0 0 -1 » expm(t*A) ans = [ exp(t), 0] [ 0, exp(-t)]
simplify
Функция упрощения выражений
Функция simplify(S) поэлементно упрощает символьные выражения массива S. Если упрощение невозможно, то возвращается исходное выражение. Примеры: » V=[sin(x)^2+cos(x)^2 log(a*b)] V= [ sin(x)^2+cos(x)^2,
log(a*b)]
» simplify(V) ans = [ 1, log(a*b)] Возможности проведения упрощений с помощью команды simplify в Symbolic не обладают возможностями системы Maple V в полной мере в связи с отсутствием опций, определяющих путь упрощения. Дополнительные возможности упрощения обеспечивает функция simple.
expand
Функция расширения выражений
Функция expand(S) расширяет выражения, входящие в массив S. Рациональные выражения она раскладывает на простые дроби, полиномы - на полиномиальные разложения и так далее. Функция работает со многими алгебраическими и тригонометрическими функциями. Ниже представлены примеры использования функции expand: » S=[(x+2)*(x+3)*(x+4) sin(2*x)]; » expand(S) ans = [ 9*x^2+26*x+24+x^3, 2*sin(x)*cos(x)] » expand(sin(a+b)) ans = sin(a)*cos(b)+cos(a)*sin(b)
factor
Разложение выражений на простые множители
Функция factor(S) разлагает поэлементно выражения вектора S на простые множители, а целые числа - на произведение простых чисел. Следующие примеры иллюстрируют применение функции: » factor (x^7-1) ans = (x-1)*(x^6+x^5+x^4+x^3+x^2+x+1) » factor(sym('123456789')) ans = (3)^2*(3803)*(3607)
collect
Комплектование по степеням
Функция collect(S, v) обеспечивает комплектование выражений в составе вектора или матрицы S по степеням переменной v. Пример применения: » S=[x^3*y^2+x^2*y+3*x*y^2 x^4*y-y*x^2]; » collect(S,x) ans = [ x^3*y^2+x^2*y+3*x*y^2,
x^4*y-x^2*y]
» collect(S,y) ans = [ (x^3+3*x)*y^2+x^2*y,
simple
(x^4-x^2)*y]
Упрощение выражений
Функция simple(S) выполняет различные упрощения для элементов массива S и выводит как промежуточные результаты, так и самый короткий конечный результат. В другой форме [R,HOW] = simple(S) промежуточные результаты не выводятся. Результаты упрощений содержатся в векторе R, а в строковом векторе HOW указывается выполняемое преобразование. Следующие примеры иллюстрируют работу функции: » [R,HOW]=simple(cos(x)^2+sin(x)^2) R= 1 HOW = combine
» [R,HOW]=simple(cos(x)+i*sin(x)) R= exp(i*x) HOW = convert(exp) » [R,HOW]=simple(cos(3*acos(x))) R= 4*x^3-3*x HOW = expand
numden
Приведение к рациональной форме
Функция [N,D] = numden(A) преобразует каждый элемент массива А в рациональную форму в виде отношения двух неприводимых полиномов с целочисленными коэффициентами. При этом N и D - числители и знаменатели каждого преобразованного элемента массива. Пример: » [n, d]=numden(x*y+y/x) n= y*(x^2+1) d= x
subs
Обеспечение подстановок
Одной из самых эффектных и часто используемых операций символьной математики является операция подстановки. Она реализуется функцией subs, имеющей ряд форм записи: subs(S) − заменяет в символьном выражении S все переменные их символьными значениями, которые берутся из вычисляемой функции или рабочей области системы MATLAB; subs(S,NEW) - заменяет все свободные символьные переменные в S из списка NEW; subs(S,OLD,NEW) - заменяет OLD на NEW в символьном выражении S. При одинаковых размерах массивов OLD и NEW замена идет поэлементно. Если S и OLD - скаляры, a NEW - числовой массив или массив ячеек, то скаляры расширяются до массива результатов; если подстановка subs(S, OLD ,NEW) не меняет S, то выполняется подстановка subs(S, NEW, OLD);
subs(S, OLD, NEW, 0) - исключает попытку обратной подстановки. Примеры: » subs(x-y,y,1) ans = x-1 » subs(sin(x)+cos(x),[x,y],[a,b]) ans = sin(a)+cos(a)
solve
Решение алгебраических уравнений
Для решения систем алгебраических уравнений и одиночных уравнений служит функция solve: solve(expr1,expr2,...,exprN,var1,var2,...varN) - возвращает значения переменных vari, при которых соблюдаются равенства, заданные выражениями expri. Если в выражениях не используются знаки равенства, то полагается expri = 0; solve(expr1,expr2,...,exprN) - аналогична предшествующей функции, но переменные, по которым ищется решение, определяются функцией findsym. При отсутствии аналитического решения и при числе неизвестных, равных числу уравнений, ищется только одно численное решение, а не все решения. Результат решения возможен в следующих формах: для одного уравнения и одной переменной решение возвращается в виде одномерного или многомерного массива ячеек; при одинаковом числе уравнений и переменных решение возвращается в упорядоченном по именам переменных виде; для систем с одним выходным аргументом решение возвращается в виде массива записей. Примеры: » solve(x^3-1,x) ans = [ 1] [ -1/2+1/2*i*3^(1/2)] [ -1/2-1/2*i*3^(1/2)] » solve(x^2+5*x+6,x) ans = [ -3] [ -2] » syms a b c » solve(a*x^2+b*x+c) ans =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] » s=solve('x+y=3','x*y^2=4',x,y) s= x: [3x1 sym] y: [3x1 sym] » s.x ans = [ 4] [ 1] [ 1] Обратите внимание на то, что для задания уравнений в явном виде используются строковые выражения, когда уравнения заключаются в апострофы. Рекомендуется использовать графики функций или графики левой и правой части уравнений для получения графической интерпретации решений. Это особенно полезно в том случае, если решение носит множественный характер, поскольку функция solve дает только одно решение.
dsolve
Решение дифференциальных уравнений
Для решения дифференциальных уравнений в форме Коши MATLAB имеет следующую функцию dsolve. dsolve('eqn1','eqn2', ...) − возвращает аналитическое решение системы дифференциальных уравнений с начальными условиями. Они задаются равенствами eqni (вначале задаются уравнения, затем начальные условия). По умолчанию независимой переменной считается переменная 't', обычно обозначающая время. Можно использовать и другую переменную, включив ее в конец списка параметров функции dsolve. Символ D обозначает производную по независимой переменной, то есть d dt , при этом D2 означает d 2 dt 2 и так далее. Имя независимой переменной не должно начинаться с буквы D. Начальные условия задаются в виде равенств 'у(а) = b' или 'Dy(a) = b', где у − независимая переменная, а и b − константы. Если число начальных условий меньше, чем число дифференциальных уравнений, то в решении будут присутствовать произвольные постоянные Cl, C2 и так далее. Правила вывода подобны приведенным выше для функции solve. Примеры применения функции dsolve: » dsolve('D2x=-2*x') ans = C1*sin(2^(1/2)*t)+C2*cos(2^(1/2)*t)
» dsolve('D2y=-2*x+y','y(0)=1','x') ans = 2*x+C1*sinh(x)+cosh(x)
finverse
Обращение функции
Часто возникает необходимость в задании функции, обратной по отношению к заданной функции f. Для этого в Symbolic имеется функция обращения finverse, которая задается в двух формах: g = finverse(f) - возвращает функцию, обратную f Считается, что f функция одной переменной, например 'х'. Тогда g(f(x)) = х; g=finverse(f, v) - возвращает функцию, обратную f, относительно заданной переменной v, так что g(f(v)) = v. Эта форма используется, если f функция ряда переменных. Примеры: » finverse(sinh(x)) ans = asinh(x) » finverse(exp(x)) ans = log(x)
compose
Суперпозиция функций
К числу часто встречаемых в символьной математике манипуляций с функциями относится суперпозиция функций, реализуемая функциями compose: compose(f,g) - возвращает f(g(y)), где f = f(x) и g = g(y). Независимые переменные х и у находятся с помощью функции findsym; compose(f,g,z) - возвращает f(g(z)), где f = f(x), g = g(y); compose(f,g,x,z) - возвращает f(g(z)) и при этом рассматривает х как независимую переменную х для функции f. Так, если f = cos(x/t), то compose(f,g,x,z) возвращает cos(g(z)/t), a compose(f,g,t,z) возвращает cos(x/g(z)); compose(f,g,x,y,z) - возвращает f(g(z)) и рассматривает х как независимую переменную для функции f и у - как независимую переменную для функции g. Для f = cos(x/t) и g=sin(y/u) compose(f,g,x,y,z) возвращает cos(sin(z/u)/t), a compose(f,g,x,u,z) возвращает cos(sin(y/z)/t).
Примеры: » f=1/(1+x^2); g=sin(y); h=x^t; p=exp(-y/u); » compose(f,g) ans = 1/(sin(y)^2+1) » compose(f,g,t) ans = 1/(sin(t)^2+1) » compose(h,g,x,z) ans = sin(z)^t » compose(h,g,t,z) ans = x^sin(z) » compose(h,p,t,u,z) ans = x^exp(-y/z)
ezplot
Построение графиков символьных функций
Чтобы избавить пользователя от возни с вполне возможным построением графиков функций с помощью стандартных средств (например, команды plot), в пакет Symbolic введены довольно удобные команды класса ezplot: ezplot(f) - строит график символьно заданной функции f(x) независимой переменной 'х'. Она определена в интервале [-2*pi, 2*pi]; ezplot(f, xmin, xmax) или ezplot(f, [xmin, xmax]) - делает то же, но позволяет задать диапазон изменения независимой переменной х от xmin до хmах; ezplot(f, [xmin xmax], fig) - обеспечивает спецификацию графика с помощью параметра fig. Команды класса ezplot позволяют строить графики функций, имеющих особенности более наглядно, чем функция plot. Примером такого рода является построение графика функции tan(x), имеющего разрывы:
ezplot('tan(x)',0,20);grid on tan(x) 6
4
2
0
-2
-4
-6 0
2
4
6
8
10 x
12
14
16
18
20
В заключение приведем краткое описание еще нескольких функций работы с символьными переменными, доступными в системе MATLAB digits vpa fourier ifourier laplace ilaplace ztrans iztrans poly2sym
Установка количества знаков результата вычислений Вычисление в арифметике с точностью, установленной оператором digits Прямое преобразование Фурье Обратное преобразование Фурье Прямое преобразование Лапласа Обратное преобразование Лапласа Z-преобразование Обратное z-преобразование Преобразование вектора коэффициентов полинома в символьный полином
sym2poly sinint cosint
Преобразование символьного полинома коэффициентов Вычисление интегрального синуса Вычисление интегрального косинуса
в
вектор
его
СПИСОК ЛИТЕРАТУРЫ 1. Дьяконов В.П. Справочник по применению системы РС MATLAB. −М.: Физматлит, 1993. − 112 с. 2. Потемкин В.Г. Система MATLAB. Справочное пособие. − М.: ДИАЛОГ-МИФИ, 1997. − 350 с. 3. Гультяев А.К. Имитационное моделирование в среде Windows. Практическое пособие. − СПб.: КОРОНА принт, 199. − 288 с. 4. Медведев В.С., Потемкин В.Г. Control System Toolbox. MATLAB 5 для студентов/ Под общ. Ред. к.т.н. В.Г. Потемкина. −: ДИАЛОГ-МИФИ, 1999. − 287 с. 5. Дьяконов В.П., Абраменкова И.В. MATLAB 5.0/5.3. Система символьной математики. −: Нолидж, 1999. − 640 с. 6. Мартынов Н.Н., Иванов А.П. MATLAB 5.х. Вычисления, визуализация, программирование. −М.: КУДИЦ-ОБРАЗ, 2000. − 336 с. ОГЛАВЛЕНИЕ Предисловие ………………………………………………………………….. Введение ……………………………………………………………………… 1. Команды базовой системы ………………………………………………... 1.1. Командное окно системы MATLAB ……………………………… 1.2. Управление переменными рабочей среды ……………………….. 1.3. Импорт и экспорт данных …………………………………………. 1.4. Операторы, константы, служебные переменные ………………… 1.5. Элементарные математические функции ………………………… 1.6. Ввод и преобразование матричных переменных ………………… 1.7. Управление последовательностью выполнения операторов ……. 1.8. Полиномы и операции над ними ………………………………….. 1.9. Графические средства системы MATLAB ……………………….. 1.9.1. Графики двумерных функций ……………………………… 1.9.2. Построение графиков 3D-поверхностей ………………….. 1.9.3. Вспомогательные графические функции …………………. 1.9.4. Надписи и пояснения к графикам …………………………. 1.10. Программирование и отладка ……………………………………. 2. SIMULINK − инструмент визуального моделирования …………………
3 4 8 8 8 11 12 19 20 23 27 31 31 39 42 44 48 54
2.1. Общая характеристика. Демонстрация возможностей ………….. 2.2. Библиотека модулей (блоков) …………………………………….. 2.2.1. Раздел Sources (Источники) ……………….……………….. 2.2.2. Раздел Sinks (Получатели) ………………………..………... 2.2.3. Раздел Discrete (Дискретные элементы) ………………….. 2.2.4. Раздел Linear (Линейные элементы) ………………………. 2.2.5. Раздел Nonlinear (Нелинейные элементы) ………………… 2.2.6. Раздел Connections (Соединительные узлы) ………………. 2.2.7. Дополнительные разделы библиотеки (Blocksets & Toolboxes) …….…………..…………………... 2.3. Меню пользователя …………………………….…..………………. 2.3.1. Раздел File ………………………………..………………….. 2.3.2. Раздел меню пользователя Edit ……………………..……... 2.3.3. Раздел меню пользователя Simulation ……………………... 2.3.4. Раздел меню Format ……………………………..…………. 2.4. Использование подсистем ……………………….………………... 2.5. Маскирование подсистем ………………………….……………… 3. Работа с пакетом Сontrol system toolbox ………………………………… 3.1. Линейные стационарные объекты (lti-объекты) ……………..….. 3.2. Извлечение информации об lti-объектах ……………..…………... 3.3. Родовые свойства lti-объекта ……………..……………………….. 3.4. Чтение и установка значений ………………………………..……. 3.5. Функции создания и преобразования lti-моделей ……………...… 3.6. Преобразование lti-моделей ……………………………..………… 3.7. Переопределение базисных функций ………………………..…… 3.8. Соединение lti-моделей ……………………..……………………... 3.9. Получение lti-объекта из системы Simulink …………………..….. 3.10. Операторы и функции для анализа систем …………..…………. 3.11. Средства графического интерфейса пользователя для анализа lti-систем …………………….………………………………….. 4. Выполнение символьных операций ………………..…………………….. 4.1. Возможности пакета Symbolic Math Toolbox …………………… 4.2. Демонстрационные примеры работы с пакетом Symbolic …..….. 4.3. Задание символьных переменных с помощью апострофов ..…… 4.4. Базовые символьные функции …………………………………….. Список литературы ………………..………………………………………….
54 59 60 66 73 75 77 84 87 88 88 91 93 97 99 105 114 114 115 117 118 121 124 126 128 133 134 147 150 150 150 151 152 165
Учебное издание Слепокуров Юрий Сергеевич MATLAB 5. АНАЛИЗ ТЕХНИЧЕСКИХ СИСТЕМ Компьютерный набор Ю.С. Слепокуров
Издательство Воронежского государственного технического университета 394026 Воронеж, Московский просп., 14