Text
                    Юрий Лазарев
МОДЕЛИРОВАНИЕ
ПРОЦЕССОВ И СИСТЕМ
в MATLAB
УЧЕБНЫЙ КУРС
Пакеты Signal Processing Tools, Control Toolbox
и Simulink с библиотеками Aerospace,
SimPowerSystems, SimMechanics
A

ББК 32.973.23я7 УДК 681.3(075) Л17 Лазарев Ю. Л17 Моделирование процессов и систем в MATLAB. Учебный курс. — СПб.: Питер; Киев: Издательская группа BHV, 2005 — 512 с.: ил. ISBN 5-469-00600-Х ISBN 966-552-144-6 Материал книги является учебным курсом по системе MATLAB. Читатель не только ознакомится с тем, как работать с этой системой в режиме калькулятора, но и изучит программирование в среде MATLAB, в том числе и объектно-ориентированное. Большая часть книги посвящена моделированию физических процессов и технических систем. Рассмотрены цифровая обработка сигналов, моделирование линейных стационарных систем, аэрокосмических объектов и электроэнергетических систем, а также моделирование машин и механизмов. В рамках этих тем подробно описаны пакеты Signal Processing Tools, Control Toolbox и Simulink c дополнительными библиотеками Aerospace, SimPowerSystcms, SimMechanics. Учебное пособие предназначено для студентов технических и естественно-научных специальностей, инженеров и научных работников. ББК 32.973.23я7 УДК 681.3(075) Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было фор- ме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 5-469-00600-Х ISBN 966-552-144-6 ©ЗАО Издательский дом «Питер», 2005 © Издательская группа BHV, Киев, 2004
Краткое содержание Предисловие...............................................9 Введение.................................................11 Урок 1. MATLAB как научный калькулятор...................13 Урок 2. Программирование в среде MATLAB..................82 Урок 3. MATLAB и другие приложения......................123 Урок 4. Объектно-ориентированное программирование.......137 Урок 5. Цифровая обработка сигналов.....................164 Урок 6. Исследование линейных стационарных систем.......234 Урок 7. Основы визуального моделирования динамических систем....277 Урок 8. Взаимодействие MATLAB с Simulink................348 Урок 9. Моделирование аэрокосмических объектов..........403 Урок 10. Моделирование электроэнергетических систем.....436 Урок 11. Моделирование машин и механизмов...............467 Алфавитный указатель....................................506
Содержание Предисловие...........................................................9 Введение.............................................................11 Урок 1. MATLAB как научный калькулятор...............................13 Командное окно.......................................................14 Операции с числами...................................................15 Ввод и вывод действительных чисел.................................15 Простейшие арифметические действия................................17 Вывод промежуточной информации....................................18 Математические функции............................................20 Ввод комплексных чисел............................................23 Элементарные действия с комплексными числами.........................24 • Использование функций комплексного аргумента......................24 Операции с векторами и матрицами.....................................26 Ввод значений векторов и матриц...................................26 Функции, формирующие векторы и матрицы............................28 Извлечение и вставка частей матриц................................32 Операции с векторами..............................................34 Поэлементное преобразование матриц................................37 Действия над матрицами............................................39 Матричные функции.................................................41 Функции прикладной численной математики..............................42 Операции с полиномами.............................................43 Обработка данных измерений........................................46 Функции линейной алгебры..........................................50 Аппроксимация и интерполяция данных...............................58 Векторная фильтрация и спектральный анализ........................61 Построение простейших графиков.......................................66 Процедура plot....................................................66 Специальные графики...............................................69 Дополнительные функции графического окна..........................73 Вывод графиков на печать..........................................74 Операторы управления вычислительным процессом........................74 Оператор условного перехода.......................................75 Оператор переключения.............................................76 Операторы цикла...................................................77 Команды общего назначения............................................79 Вопросы для самопроверки.............................................80
Содержание 5 Урок 2. Программирование в среде MATLAB.................................82 Функции функций.........................................................83 М-файлы.................................................................86 Особенности М-файлов.................................................86 Оформление М-файлов..................................................87 Создание простейших файлов-функций......................................88 Общие требования к построению текста программы.......................88 Типовое оформление процедуры-функции.................................91 Создание файлов-сценариев...............................................92 Основные особенности.................................................92 Ввод и вывод информации в диалоговом режиме..........................93 Организация повторения действий......................................96 Изменение данных в диалоговом режиме.................................96 Типовая структура файла-сценария.....................................99 Графическое оформление результатов.....................................100 Общие требования к представлению графической информации.............100 Разбивка графического окна на подокна...............................102 Вывод текста в графическое окно.....................................103 Создание функций от функций............................................106 Процедура feval.....................................................107 Примеры создания функций от функций.................................107 Программа моделирования движения маятника..............................112 Преобразование уравнения...........................................113/ М-файл процедуры вычисления правых частей уравнений.................113 Управляющий файл-сценарий...........................................114 Файл-сценарий заставки..............................................115 Файл меню...........................................................115 Файл ядра программы.................................................116 Отладка программы...................................................117 Проведение исследований.............................................118 Вопросы для самопроверки...............................................122 Урок 3. MATLAB и другие приложения.....................................123 Использование MATLAB при оформлении текстовых документов...............124 Создание М-книги....................................................124 Использование команд MATLAB в М-книге...............................124 Редактирование М-книги..............................................126 Преобразование документа Word в М-книгу.............................126 Особенности использования MATLAB в среде Word.......................126 Изменение параметров вывода результатов ............................127 Использование файлов данных в MATLAB...................................128 Открытие и закрытие файлов..........................................128 Запись и чтение бинарных файлов.....................................129 Запись и чтение текстовых файлов....................................131 Вопросы для самопроверки...............................................136
6 Содержание Урок 4. Объектно-ориентированное программирование.......................137 Основные классы объектов ...............................................138 Класс символьных строк char..........................................139 Класс записей struct.................................................142 Класс ячеек cell.....................................................144 Производные классы......................................................147 Класс inline.........................................................147 Классы пакета Control System Toolbox.................................150 Пример создания класса polynom..........................................154 Создание подкаталога @polynom........................................154 Конструктор класса...................................................154 Процедура символьного представления polynom-объекта......................................................156 Методы класса........................................................158 Вопросы для самопроверки................................................163 Урок 5. Цифровая обработка сигналов.....................................164 Проектирование фильтров в пакете Signal Processing Toolbox..............165 Формирование типовых процессов..........................................167 Одиночные импульсные процессы........................................167 Колебательные процессы...............................................169 Общие средства фильтрации...............................................173 Формирование случайных процессов........................................179 Спектральный и статистический анализ процессов..........................180 Основы спектрального и статистического анализа.......................181 Использование процедуры fft..........................................185 Фурье-изображение прямоугольного импульса............................185 Фурье-изображение полигармонического процесса........................187 Фурье-изображение случайного процесса................................189 Статистический анализ................................................190 Проектирование фильтров.................................................192 Формы представления фильтров.........................................192 Преобразование фильтров..............................................193 Аналоговые фильтры...................................................196 БИХ-фильтры..........................................................201 КИХ-фильтры..........................................................205 Графические и интерактивные средства пакета Signal......................212 Представление результатов в графической форме........................212 Интерактивная оболочка SPTool........................................221 Вопросы для самопроверки................................................233 Урок 6. Исследование линейных стационарных систем.......................234 Общая характеристика процедур пакета Control Toolbox....................235 Создание и преобразование LTI-моделей...................................239 SS-модель............................................................239 TF-модель............................................................244 Преобразование моделей...............................................246 Получение информации о модели...........................................255
Содержание 7 Анализ системы............................................................256 Интерактивный обозреватель LTI Viewer.....................................264 Окно LTI Viewer........................................................264 Настройка параметров LTI Viewer........................................267 Синтез системы............................................................272 Вопросы для самопроверки..................................................276 Урок 7. Основы визуального моделирования динамических систем......................................................277 Библиотека Simulink — ядро пакета Simulink................................278 Запуск и использование Simulink........................................278 Общая характеристика библиотеки блоков Simulink........................280 Раздел Sinks...........................................................281 Раздел Sources.........................................................291 Раздел Continuous......................................................303 Раздел Discrete........................................................305 Раздел Math Operations.................................................307 Раздел Discontinuities.................................................312 Раздел User Defined Functions..........................................314 Раздел Signals Routing.................................................315 Раздел Signals Attributes..............................................317 Раздел Ports & Subsystems..............................................318 Раздел Look-Up Tables..................................................320 Раздел Model Verification..............................................320 Раздел Model-Wide Utilities............................................321 Построение блок-схем......................................................321 Выделение объектов.....................................................321 Операции с блоками.....................................................322 Проведение соединительных линий........................................326 Метки сигналов.........................................................328 Создание подсистем.....................................................330 Сохранение и вывод на печать блок-схемы S-модели.......................331 Примеры создания S-моделей................................................331 Моделирование поведения физического маятника...........................331 Моделирование движения трех тел под действием сил гравитации...........338 Вопросы для самопроверки..................................................347 Урок 8. Взаимодействие MATLAB с Simulink..................................348 Объединение S-моделей с программами MATLAB................................349 Управление процессом моделирования в Simulink..........................350 Обнаружение пересечения нуля...........................................353 Обмен данными между средой MATLAB и S-моделью..........................356 Запуск процесса моделирования S-модели из среды MATLAB.................359 Создание S-блоков с использованием программ MATLAB.....................360 Примеры S-функций......................................................363 Запуск М-программ из S-модели..........................................370
8 Содержание Пользовательские библиотеки S-блоков......................................377 Создание библиотеки....................................................377 Создание окна настройки блока..........................................382 Примеры применения пользовательской библиотеки............................386 Ориентация космического аппарата.......................................386 Движение маятника под действием сил сухого трения......................393 Вопросы для самопроверки..................................................402 Урок 9. Моделирование аэрокосмических объектов............................403 Общая характеристика библиотеки Aerospace.................................404 Раздел Equations of Motion.............................................405 Раздел Environment.....................................................410 Раздел Propulsion......................................................411 Разделы Actuators и GNC................................................412 Раздел Transfomations..................................................415 Свободное угловое движение космического аппарата..........................416 Управляемое угловое движение космического аппарата........................421 Движение искусственного спутника Земли....................................429 Вопросы для самопроверки..................................................435 Урок 10. Моделирование электроэнергетических систем.......................436 Общая характеристика библиотеки SimPowerSystems...........................437 Раздел Electrical Sources..............................................438 Раздел Elements........................................................442 Раздел Connectors......................................................447 Раздел Power Electronics...............................................448 Раздел Machines........................................................449 Раздел Measurements....................................................452 Запуск асинхронного двигателя.............................................454 Трехфазный мостовой управляемый выпрямитель...............................459 Вопросы для самопроверки..................................................466 Урок 11. Моделирование машин и механизмов.................................467 Общая характеристика библиотеки Sim Mechanics.............................468 Раздел Bodies..........................................................469 Раздел Joints......................................................... 472 Раздел Sensors & Actuators.............................................479 Раздел Constraints & Drivers...........................................484 Раздел Utilities.......................................................485 Движение уравновешенного свободного гироскопа.............................486 Движение кривошипно-шатунного механизма...................................492 Движение маятника........................................................ 498 Вопросы для самопроверки..................................................505 Алфавитный указатель......................................................506
Предисловие В последние годы в научных и инженерно-технических кругах получила широкое распространение система MATLAB. Более того, в настоящее время она принята в качестве официального средства оформления инженерной документации и на- учных публикаций. В чем же причина ее популярности? Система MATLAB специально создана для проведения именно инженерных рас- четов: математический аппарат, который используется в ней, предельно прибли- жен к современному математическому аппарату инженера и ученого и опирается на вычисления, производимые с матрицами, векторами и комплексными числа- ми; графическое представление функциональных зависимостей здесь организо- вано в форме, которую требует именно инженерная документация. Язык программирования системы MATLAB весьма прост, он содержит лишь не- сколько десятков операторов; незначительное количество операторов здесь ком- пенсируется большим числом процедур и функций, содержание которых понят- но пользователю, имеющему соответствующую математическую и инженерную подготовку В отличие от большинства математических систем, MATLAB является открытой системой: практически все ее процедуры и функции доступны не только для исполь- зования, но и для модификации. Почти все вычислительные возможности системы можно применять в режиме чрезвычайно мощного научного калькулятора, а также составлять собственные программы, предназначенные для многоразового приме- нения; это делает MATLAB незаменимым средством проведения научных иссле- дований. По скорости выполнения задач MATLAB опережает многие другие по- добные системы. Все эти особенности делают ее весьма привлекательной для использования. Данная книга задумана как пособие для студентов высших технических учебных заведений и для студентов естественно-научных специальностей университетов. Кроме того, книга может служить введением в систему MATLAB для инженеров и научных работников. Учебный курс в основном ориентирован на русифициро- ванную версию MATLAB 6.5. Книга состоит из 11 уроков. Первые четыре урока могут быть использованы в ка- честве пособия по учебным дисциплинам «Моделирование процессов и систем»
10 Предисловие и «Математическое моделирование на ПК». Последующие уроки будут полезны студентам при курсовом и дипломном проектировании. В уроке 1, «MATLAB как научный калькулятор», читатель знакомится с возмож- ностями системы в режиме научного калькулятора. Здесь приводятся сведения об основных операторах, командах, функциях и процедурах системы В уроке 2, «Программирование в среде MATLAB», описаны правила и примеры составле- ния программ Кроме того, в нем представлены некоторые дополнительные про- цедуры, которые помогают рационально организовать вычислительный процесс. Урок 3, «MATLAB и другие приложения», содержит описание средств, позволяю- щих использовать возможности MATLAB при оформлении документов в тексто- вом редакторе Word. В этом уроке речь идет также о механизме формирования и чтения файлов данных в среде MATLAB. Важной частью описываемой систе- мы, которая позволяет приспосабливать ее к задачам пользователя, является воз- можность создания новых классов вычислительных объектов. Урок 4, «Объект- но-ориентированное программирование», знакомит читателя с понятием классов объектов в MATLAB и правилами создания новых классов объектов. В уроке 5, «Цифровая обработка сигналов», сосредоточены сведения об особенностях ис- пользования процедур цифровой обработки сигналов. Урок 6, «Исследование ли- нейных стационарных систем», содержит начальные сведения об особенностях работы с процедурами анализа и синтеза линейных стационарных систем автоматическо- го управления. В уроке 7, «Основы визуального моделирования динамических систем», речь идет о ядре пакета Simulink. Этот пакет предназначен для интерак- тивного (визуального) моделирования динамических систем во временной об- ласти. В уроке 8, «Взаимодействие MATLAB с Simulink», содержится более под- робная информация о важнейших средствах Simulink, позволяющих обеспечить эффективную работу в среде MATLAB. Наконец, уроки 9, «Моделирование аэро- космических объектов», 10, «Моделирование электроэнергетических систем», и 11, «Моделирование машин и механизмов», посвящены изучению основ использова- ния трех дополнительных библиотек пакета Simulink: Aerospace, SimPowerSystems, SimMechanics. Материал излагается таким образом, чтобы пользователь мог сразу применить полученные знания для проведения вычислений Книга содержит много приме- ров, которые поясняют и иллюстрируют применение процедур. г издательства Свои замечания, предложения, вопросы отправляйте по адресу электронной поч- ты comp@piter.com (издательство «Питер», компьютерная редакция) Мы будем рады узнать ваше мнение о книге! Коды программ, создание которых описано в этой книге, вы можете найти по ад- ресу http://www.piter.com/download Файлы распределены по папкам, названия ко- торых соответствуют номерам уроков Подробную информацию о книгах издательств «Питер» и «Издательская группа BHV» вы найдете на веб-сайтах http://www.piter.com и http://www.bhv.kiev.ua.
Введение Система MATLAB разработана специалистами компании MathWork Inc. (г. Ней- тик, штат Массачусетс, США). Хотя впервые эта система начала использоваться в конце 1970-х годов, широкое распространение она получила в конце 80-х, в осо- бенности после появления на рынке версии 4.0. Последние версии MATLAB — это системы, которые содержат множество процедур и функций, необходимых инженеру и научному работнику для осуществления сложных численных расче- тов, моделирования технических и физических систем и оформления результа- тов этих расчетов. MATLAB (сокращение от MATrix LABoratory — матричная лаборатория) представляет собой интерактивную систему, предназначенную для выполнения инженерных и научных расчетов и ориентированную на работу с мас- сивами данных. Система обеспечивает возможность обращения к программам, ко- торые написаны на языках FORTRAN, С и C++. Привлекательной особенностью системы MATLAB является наличие встроен- ной матричной и комплексной арифметики. Система поддерживает выполнение операций с векторами, матрицами и массивами данных, реализует сингулярное и спектральное разложение, расчет ранга и чисел обусловленности матриц, под- держивает работу с алгебраическими полиномами, решение нелинейных уравне- ний и задач оптимизации, интегрирование функций в квадратурах, численное ин- тегрирование дифференциальных и разностных уравнений, построение различных графиков, трехмерных поверхностей и линий уровня. Основной объект системы MATLAB — прямоугольный числовой массив (мат- рица), в котором допускается применение комплексных элементов. Использова- ние матриц не требует явного указания их размеров. Система MATLAB обеспечивает выполнение операций с векторами и матрицами даже в режиме непосредственных вычислений. Ею можно пользоваться как мощ- нейшим калькулятором, в котором наряду с обычными арифметическими и ал- гебраическими действиями могут использоваться такие сложные операции, как обращение матрицы, вычисление ее собственных значений и векторов, решение систем линейных алгебраических уравнений и много других. Характерной осо- бенностью системы является ее открытость, то есть возможность ее модифика- ции и адаптации к конкретным задачам пользователя. MATLAB предоставляет широкие возможности для работы с сигналами, для рас- чета и проектирования аналоговых и цифровых фильтров, включая построение
12 Введение их частотных, импульсных и переходных характеристик. Имеются в системе и средства выполнения спектрального анализа и синтеза, в частности реализации прямого и обратного преобразования Фурье. Благодаря этому ее довольно удоб- но использовать при проектировании электронных устройств. С системой MATLAB поставляются свыше ста подробно прокомментированных М-файлов, которые содержат демонстрационные примеры и определения новых операторов и функций. Наличие этих примеров и возможность работать в режиме непосредственных вычислений значительно облегчают изучение системы поль- зователями, заинтересованными в применении математических расчетов. Система MATLAB использует собственный М-язык, который сочетает в себе по- ложительные свойства различных известных языков программирования высокого уровня. С языком BASIC систему MATLAB роднит то, что она представляет собой интерпретатор (осуществляет пооператорное компилирование и выполнение про- граммы, не образуя отдельного исполняемого файла), М-язык имеет незначитель- ное количество операторов, в нем отсутствует необходимость объявлять типы и размеры переменных. От языка Pascal система MATLAB позаимствовала объектно- ориентированную направленность, то есть такое построение языка, которое обес- печивает образование новых типов вычислительных объектов на основе типов объектов, уже существующих в языке. Новые типы объектов (в MATLAB они называются классами) могут иметь собственные процедуры их преобразования (они определяют методы этого класса), причем новые процедуры могут быть вы- званы с помощью обычных знаков арифметических операций и некоторых специ- альных знаков, которые применяются в математике. Принципы сохранения значений переменных в MATLAB наиболее близки к тем, которые присущи языку FORTRAN, а именно: все переменные являются локальны- ми — действуют лишь в границах той программной единицы (процедуры, функ- ции или главной, управляющей программы), где им присвоены некоторые кон- кретные значения. При переходе к выполнению другой программной единицы, значения переменных предыдущей программной единицы либо теряются (в слу- чае, если выполненная программная единица представляет собой процедуру или функцию), либо становятся недосягаемыми (если выполненная программа явля- ется управляющей). В отличие от языков BASIC и Pascal, в языке MATLAB нет глобальных переменных, действие которых распространялось бы на все програм- мные единицы. Но при этом язык MATLAB обладает возможностью, которая от- сутствует в других языках. Интерпретатор MATLAB позволяет в одном и том же сеансе работы выполнять несколько самостоятельных программ, причем все пе- ременные, используемые в этих программах, являются для них общими и образу- ют единое рабочее пространство. Это дает возможность более рационально орга- низовывать сложные (громоздкие) вычисления по типу оверлейных структур. Вышеуказанные особенности системы MATLAB делают ее весьма гибкой и удоб- ной в использовании вычислительной системой.
УРОК MATLAB как научный калькулятор □ Командное окно □ Операции с числами □ Операции с векторами и матрицами □ Функции прикладной численной математики □ Построение простейших графиков □ Управление вычислительным процессом
14 Урок 1 • MATLAB как научный калькулятор Работать в среде MATLAB можно как в режиме калькулятора, так и в программ- ном режиме. При работе в первом из них вычисления осуществляются сразу по- сле набора очередного оператора или команды MATLAB; значения результатов вычисления мотут присваиваться некоторым переменным, либо результаты полу- чаются непосредственно, без использования операции присваивания (как в обыч- ных калькуляторах). Работа в программном режиме осуществляется путем вызова имени написанной на языке MATLAB программы, предварительно составленной и записанной на диске и содержащей все необходимые команды, которые обеспе- чивают ввод данных, организацию вычислений и вывод результатов на экран. В обоих режимах пользователю доступны практически все возможности систе- мы, в том числе вывод информации в графической форме. Программный режим позволяет сохранять разработанные вычислительные алгоритмы и, таким обра- зом, повторять вычисления при других входных данных. Систему MATLAB обоснованно относят к одному из наиболее мощных научных калькуляторов, которому доступны практически все численные средства реше- ния научных и инженерных задач, разработанные на настоящий момент. Исполь- зовать эти средства в командном режиме в большинстве случаев очень просто. Результат получают сразу непосредственно в командном окне в наглядной форме или в графическом виде в дополнительном графическом окне. Поэтому знаком- ство с системой MATLAB и освоение приемов работы в ее среде целесообразно начать с изучения возможностей системы именно в командном режиме. Командное окно После вызова программы MATLAB 6.5 на экране появляется окно MATLAB, пред- ставленное на рис. 1.1. В нем могут отображаться несколько окон. Главным из них является Окно команд, или так называемое командное окно среды MATLAB. После того как будут закрыты все окна среды MATLAB, кроме командного, по- следнее примет такой вид, как показано на рис. 1.2. В командном окне появляются символы команд, которые набираются пользователем с клавиатуры, отображают- ся результаты выполнения этих команд, текст исполняемой программы и инфор- мация об ошибках выполнения программы, распознанных системой. Признаком того, что программа MATLAB готова к восприятию и выполнению очередной команды, является наличие в последней строке командного окна знака приглашения (»), справа от которого расположен мигающий курсор. В верхней части окна (под заголовком) находится строка меню. Для того чтобы открыть какое-либо меню, следует установить на нем указатель мыши и нажать ее левую кнопку. Здесь отметим лишь, что для выхода из среды MATLAB доста- точно открыть меню Файл и выбрать в нем команду Выход из MATLAB, или просто закрыть командное окно, щелкнув мышью на кнопке закрытия окна (с изображе- нием крестика).
Операции с числами 15 Рис. 1.1. Окно MATLAB Рис. 1.2. Командное окно MatLAB Операции с числами Главными объектами MATLAB являются числа. Операции с ними лежат в осно- ве работы с этой системой. Поэтому вначале ознакомимся с основными правила- ми оперирования с числами. Ввод и вывод действительных чисел Ввод действительных чисел с клавиатуры осуществляется по общим правилам, принятым для языков программирования высокого уровня: О для отделения дробной части мантиссы числа используется десятичная точка (вместо запятой при обычной записи);
16 Урок 1 • MATLAB как научный калькулятор О десятичный показатель числа записывается целым числом после символа е; О между записью мантиссы числа и символом е (который отделяет мантиссу от показателя) не должно быть других символов, в том числе и символа пробела. Если, например, ввести в командном окне MATLAB строку 1.20357651е-17, то по- сле нажатия клавиши Enter в этом окне появится запись, показанная на рис. 1.3. Рис. 1.3. Ввод и вывод числа в командном окне MATLAB Видно, что число, отображенное на экране, не совпадает с введенным числом. Это обусловлено тем, что результат вычислений в MATLAB выводится в том виде (фор- мате), который определен предварительно установленным форматом представле- ния чисел. Этот формат может быть задан с помощью команды Файл ► Предпочте- ния. После ее вызова на экране появится одноименное диалоговое окно (рис. 1.4). Рис. 1.4. Диалоговое окно Предпочтения
Операции с числами 17 Раскрывающийся список в области Отображение текста этого окна имеет название Числовой формат. Он предназначен для установки и изменения формата представ- ления чисел, которые выводятся в командное окно в процессе расчетов. Выбирая вид представления чисел, можно обеспечить в дальнейшем их вывод в командное окно в нужной форме Форматы, доступные в MATLAB, приведены в табл. 1 1. Таблица 1.1. Форматы, используемые в MATLAB Формат Описание Short (default) Краткая запись в ф >рмате с фиксированн й запятой (применяется по умолчанию) Long Short E Long E Short G Long G Hex Bank Длинная запись в формате с фиксированной запятой Краткая запись в формате с плавающей запятой Длинная запись в формате с плавающей запятой Вторая форма краткой записи в формате с плавающей запятой Вторая форма длинной записи в формате с плавающей запятой Запись в виде шестнадцатеричного числа Запись до сотых долей Rational Записывается только знак числа Запись в виде рациональной дроби Как было отмечено, число, выведенное на экран, может выглядеть иначе, чем вво- димое число. Это обусловлено тем, что установленный по умолчанию формат представления чисел (Short Е) не позволяет вывести больше шести значащих цифр. На самом деле число внутри системы MATLAB сохраняется со всеми вве- денными цифрами. Если, например, выбрать формат Long Е, представление чис- ла будет содержать все цифры. Работая в системе MATLAB, следует помнить, что введенное значение и результа- ты всех вычислений сохраняются в памяти компьютера с относительной погреш ностью, составляющей около 2х10-16 (то есть с точными значениями в 15 десятич- ных разрядах). Диапазон представления модуля действительных чисел лежит в интервале между 10 08 и 1О+308. Простейшие арифметические действия Работая с MATLAB в режиме калькулятора, пользователь вводит с клавиатуры в командную строку последовательность чисел и знаков арифметических опера- ций, то есть обычное арифметическое выражение, например: (4.5)2*7.23 - 3.14*10.4 Если после ввода этого выражения нажать клавишу Enter, в командном окне под именем системной переменной ans будет выведен результат выполнения послед- него оператора (рис. 1.5).
18 Урок 1 • MATLAB как научный калькулятор Рис. 1.5. Результат вычисления выражения СОВЕТ В системе MATLAB несколько последних команд запоминаются. Повторный вызов этих команд в командном окне осуществляется путем нажатия клавиш Т и Ф. Используйте данную возможность для повторного обращения к на- бранной функции. В арифметических выражениях языка MATLAB применяются знаки операций, которые приведены в табл. 1.2. Таблица 1.2. Знаки операций, используемые в арифметических выражениях языка MatLAB Знак операции Выполняемое действие + Сложение * Вычитание Умножение / \ Л Деление слева направо Деление справа налево Возведение в степень Вывод промежуточной информации В общем случае вывод промежуточной информации в командное окно подчиня- ется таким правилам: О если запись оператора не заканчивается символом точки с запятой (;), резуль- тат действия этого оператора сразу же выводится в командное окно; О если оператор заканчивается символом «;», результат его действия не отобра- жается в командном окне; О если оператор не содержит знака присваивания (=), то есть является просто записью некоторой последовательности действий над числами и переменными, значение результата присваивается специальной системной переменной ans; О значение системной переменной ans можно использовать в последующих опе- раторах вычислений, путем указания ее имени; при этом нужно помнить, что значение этой переменной после выполнения очередного оператора, не содер- жащего знака присваивания, изменяется;
Операции с числами 19 О в общем случае для представления результата в командном окне применяется такая форма: <имя_переменной>=<рсзулыат>. Вычислим выражение (25 + 17) х 7. Это можно сделать таким образом. Сначала введите последовательность 25+17 и нажмите клавишу Enter. На экран будет выве- дено следующее: ans=42. Теперь запишите последовательность ans*7 и снова на- жмите клавишу Enter. Результат будет таким: ans=294 (рис. 1.6). Чтобы предотвратить вывод промежуточного результата (действия 25 + 7), дос- таточно после указанной последовательности набрать символ «;». В этом случае вы получите результат в таком виде, как показано на рис. 1.7. Рис. 1.7. Предотвращение вывода на экран При использовании MATLAB в качестве калькулятора для записи промежуточ- ных результатов в память компьютера можно применять имена переменных. С этой целью выполняется операция присваивания: <имя_переменной> = <выражение>[:] Имя переменной может содержать до 30 символов и не должно совпадать с име- нами функций, процедур и системных переменных MATLAB. При этом различа- ются прописные и строчные буквы, то есть имена amenu, Amenu, aMenu обозначают разные переменные. В системе MATLAB имеются зарезервированные именованные константы и пере- менные, которые можно использовать в математических выражениях (табл. 1.3).
20 Урок 1 • MATLAB как научный калькулятор Таблица 1.3. Имена зарезервированных констант и переменных MATLAB Имя Значение tj Мнимая единица (корень квадратный из -1) Pi Число тт (сохраняется в виде 3.141592653589793) inf NaN Обозначение машинной бесконечности Обозначение неопределенного результата (например, типа 0/0 или inf/inf) eps ans realmax и realmin Погрешность операций над числами с плавающей запятой Результат последней операции без знака присваивания Максимально и минимально возможные значения, которые могут быть использованы в системе Выражение, которое находится справа от знака присваивания, может быть чис- лом, арифметическим выражением, строкой символов (в этом случае символы нужно писать между двумя знаками апострофа) или символьным выражением. Если выражение не заканчивается символом «;», после нажатия клавиши Enter в командном окне отобразится результат выполнения, представленный следую- щим образом: <имя_переменной> = <результат> Например, если ввести в командном окне строку х=25+17, на экране появится за- пись, которую вы видите на рис. 1.8. Рис. 1.8. Присвоение значения переменной Математические функции В MATLAB для обращения к функции в большинстве случаев используется та- кая форма: <имя_результата> = <иня_функции>(<перечень_аргументов_или_их_значений>) В табл. 1.4 приводятся элементарные математические функции, применение ко- торых предусмотрено в языке MATLAB.
Операции с числами 21 Таблица 1.4. Элементарные математические функции, используемые в MATLAB Функция Описание Тригонометрические и гиперболические функции sin(Z) Синус числа? sinh(Z) Гиперболический синус asin(Z) Арксинус (в диапазоне от -л/2 до +л/2), выраженный в радианах asinh(Z) Обратный гиперболический синус cos(Z) Косинус cosh(Z) Гиперболический косинус acos(Z) Арккосинус (в диапазоне отО до л) acosh(Z) Обратный гиперболический косинус tan(Z) Тангенс tanh(Z) Гиперболический тангенс atan(Z) Арктангенс (в диапазоне от -л/2 до +л/2) atan2(X,Y) Четырехквадрантный арктангенс (угол в диапазоне (-л,+л] между горизонтальным правым лучом и лучом, проходящим через точку с координатами X и Y) atanh(Z) Обратный гиперболический тангенс sec(Z) Секанс sech(Z) Гиперболический секанс asec(Z) Арксеканс asech(Z) Обратный гиперболический секанс csc(Z) Косеканс csch(Z) Гиперболический косеканс acsc(Z) Арккосеканс acsch(Z) Обратный гиперболический косеканс cot(Z) Котангенс coth(Z) Гиперболический котангенс acot(Z) Арккотангенс acoth(Z) Обратный гиперболический котангенс Экспоненциальные функции exp(Z) Экспонента числа Z log(Z) Натуральный логарифм loglO(Z) Десятичный логарифм sqrt(Z) Квадратный корень из числа Z abs(Z) Модуль числа Z продолжение
22 Урок 1 • MATLAB как научный калькулятор Таблица 1.4 (продолжение) Функция Описание Целочисленные функции fix(Z) fLoor(Z) Округление до ближайшего целого в сторону 0 Округление до ближайшего целого в сторону отрицательной бесконечности ceil(Z) Округление до ближайшего целого в сторону положительной бесконечности round(Z) mod(X,Y) rem(X,Y) sign(Z) Обычное округление числа Z до ближайшего целого Целочисленное деление X на Y Вычисление остатка от деления X на Y Вычисление сигнум-функции числа Z (0 — при Z = 0; -1 — при Z < 0; 1 — при Z > 0) Кроме элементарных функций в языке MATLAB используется целый ряд специ- альных математических функций. В табл. 1.5 приведен перечень и краткое описа- ние этих функций. Правила вызова и применения той или иной функции можно узнать, если ввести в командном окне команду he 1 р и имя функции. Таблица 1.5. Специальные математические функции, используемые в языке MATLAB Функция Описание Функции преобразования координат cart2sph Преобразование декартовых координат в сферические cart2pol Преобразование декартовых координат в полярные pol2cart Преобразование полярных координат в декартовы sph2cart Преобразование сферических координат в декартовы Функции Бесселя besselj Функция Бесселя первого рода bessely Функция Бесселя второго рода besseli Модифицированная функция Бесселя первого рода besselk Модифицированная функция Бесселя второго рода Бета-функции beta Бета-функция betainc Усеченная бета-функция Betaln Логарифм бета-функции Гамма-функции gamma Гамма-функция gammainc Усеченная гамма-функция gammaln Логарифм гамма-функции
Операции с числами 23 Функция Описание Эллиптические функции и интегралы ellipj Эллиптические функции Якоби eLLipke Полный эллиптический интеграл expint Функция экспоненциального интеграла Функции ошибок erf Функция ошибок erfc Дополнительная функция ошибок erfcx Масштабированная дополнительная функция ошибок erfinv Обратная функция ошибок Другие функции gcd Наибольший общий делитель Lem Наименьшее общее кратное Legendre Обобщенная функция Лежандра Log? Логарифм по основанию 2 powZ Возведение числа 2 в указанную степень rat Представление числа в виде рациональной дроби rats Представление чисел в виде рациональной дроби Ввод комплексных чисел Язык системы MATLAB отличается от многих языков программирования высо- кого уровня тем, что в него встроена очень простая в использовании арифметика комплексных чисел. В большинстве элементарных математических функций допускается применение комплексных чисел в качестве аргументов, а результаты также формируются как комплексные числа. Эта особенность языка делает его очень удобным для инже- неров и научных работников. Для обозначения мнимой единицы в языке MATLAB зарезервированы два име- ни — 1 и j. Ввод с клавиатуры значения комплексного числа осуществляется путем записи в командное окно строки, имеющей вид: <имя_комплексной_переменной> = <значение_ДЧ> + 1[Л*<значение_МЧ> Здесь ДЧ — действительная часть комплексного числа, МЧ — мнимая часть. На рис. 1.9 показано, в каком виде система выводит комплексные числа на экран (и на печать).
24 Урок 1 • MATLAB как научный калькулятор Рис. 1.9. Ввод и отображение комплексных чисел Элементарные действия с комплексными числами Простейшие действия с комплексными числами — сложение, вычитание, умно- жение, деление и возведение в степень — задаются с помощью обычных знаков арифметических операций: /, \, Л. Примеры действий с комплексными числами приведены на рис. 1.10. Рис. 1.10. Действия с комплексными числами В представленном на рисунке фрагменте использована функция di sp (от слова «дисплей»), которая тоже выводит в командное окно результаты расчетов или текст. При этом численный результат, как видно, выводится уже без указания имени переменной или переменной ans. Использование функций комплексного аргумента Практически все элементарные математические функции, которые представлены в табл. 1.4, в качестве аргумента принимают комплексные значения и могут воз- вращать такие значения в виде результата. Так например, в MATLAB, в отличие
Операции с числами 25 от других языков программирования, функция sqrt вычисляет квадратный ко- рень из отрицательного аргумента, а функция abs при комплексном значении ар- гумента вычисляет модуль комплексного числа. В MATLAB есть несколько Дополнительных функций, рассчитанных только на применение комплексного аргумента; они представлены в табл. 1.6. На рис. 1.11 приведены примеры использования этих функций. Таблица 1.6. Функции комплексного аргумента, используемые в MATLAB Функция Описание reaL(Z) Выделяет действительную часть комплексного аргумента 1 imag(Z) Выделяет мнимую часть комплексного аргумента angle(Z) Вычисляет значение аргумента комплексного числа Z в диапазоне от -п до +7г (в радианах) conj(Z) Выдает число, комплексно сопряженное относительно Z » Рис. 1.11. Использование функции комплексного аргумента aisp(sqrt(-2)) 0 + 1.41421 disp(abs(x)) 2.2361 disp(exp(y)) -0.0325 - 0.03771 disp(sin(x)) 3.1658 + 1.95961 > disp(sqrt(x)J 1.2720 + 0.78621 disp(real(y)) -3 - disp (imag(x)) 2 disp (angle (y)) 2.2143 disp (conj (y)) -3.0000 - 4.00001 В MATLAB имеется специальная функция cplxpaiT(v), которая осуществляет сор- тировку заданного вектора v с комплексными элементами таким образом, что ком- плексно-сопряженные пары указанных элементов располагаются в векторе-ре- зультате в порядке возрастания их действительных частей, при этом элемент с отрицательной мнимой частью всегда располагается первым. Завершают пере- чень комплексно-сопряженных пар действительные элементы.
26 Урок 1 • MATLAB как научный калькулятор » v = [-1,-1 + 21.-5.4,51,-1-21.-51] v = -1.0000 -1.0000 + 2.00001 -5.0000 4.0000 0 + 5.00001 -1.0000 - 2.00001 0 - 5.00001 » <hsp(cplxpair(v)) -1.0000 - 2.00001 -1.0000 + 2.00001 0 - 5.00001 0 + 5.00001 -5.0000 -1.0000 4.0000 ПРИМЕЧАНИЕ Далее в примерах команды, которые набираются с клавиатуры, будут написа- ны полужирным шрифтом, а результат их выполнения — обычным шрифтом. Большинство функций MATLAB способны оперировать с комплексными числа- ми, это позволяет значительно упростить вычисление действительных значений, результат которых является комплексным (например, находить комплексные кор- ни квадратных уравнений). Операции с векторами и матрицами MATLAB является системой, которая предназначена для осуществления слож- ных операций с векторами, матрицами и полиномами. Под вектором в MATLAB по- нимается одномерный массив чисел, а под матрицей — двумерный массив. При этом по умолчанию принято, что любая заданная переменная представляет собой вектор или матрицу. Например, отдельное заданное число система воспринимает как матрицу размером 1x1, а вектор-строку, состоящую из п элементов, — как матрицу размером 1хп. Ввод значений векторов и матриц Начальные значения векторов можно вводить с клавиатуры поэлементно. Для этого в строке следует сначала указать имя вектора, потом поставить знак при- сваивания, далее — открывающую квадратную скобку, а за ней ввести заданные значения элементов вектора, разделенные пробелами или запятыми. Заканчивается строка закрывающей квадратной скобкой. Например, строка v=[1.2 -0.3 1.2е-5] задает вектор v, который состоит из трех элементов со значениями 1,2, -0,3 и 1,2е-5 (рис. 1.12): Рис. 1.12. Ввод вектора
Операции с векторами и матрицами 27 После ввода вектора система выводит его элементы на экран. В приведенном при- мере последний элемент представлен значением 0, поскольку в установленном по умолчанию формате Short отображается не более четырех цифр после десятич- ной точки. Длинный вектор можно вводить частями, которые потом следует объединять с помощью операции объединения векторов в строку: v=[vl v2] (рис. 1.13). Рис. 1.13. Объединение векторов Язык MATLAB предоставляет возможность сокращенного ввода вектора, значе- ния элементов которого составляют арифметическую прогрессию. Если обозна- чить начальное значение этой прогрессии (значение первого элемента вектора) как nz, конечное значение прогрессии (значение последнего элемента вектора) — как kz, а разность прогрессии (шаг) — как h, то вектор можно будет ввести с помо- щью короткой записи: v=nz:h:kz. Например, ввод строки v=0.1:0.3:1.4 даст ре- зультат, показанный на рис. 1.14. Если средний параметр (разность прогрессии) не указан, то он по умолчанию ра- вен 1. Например, ввод выражения » -2.1 : 5 приводит к формированию такого вектора: ans = -2.1000 -1.1000 -0.1000 0.9000 1.9000 2.9000 3.9000 4.9000 Рис. 1.14. Ввод вектора, представляющего собой арифметическую прогрессию
28 Урок 1 • MATLAB как научный калькулятор Мы показали, как вводятся векторы-строки. Вектор-столбец вводится аналогич- но, но значения элементов отделяются точкой с запятой. В MATLAB значения элементов матрицы вводятся в квадратных скобках, по стро- кам. При этом элементы строки матрицы разделяются пробелом или запятой, а строки отделяются одна от другой точкой с запятой (рис. 1.15). Рис. 1.15. Ввод матрицы Функции, формирующие векторы и матрицы В MATLAB имеется несколько встроенных функций, которые позволяют форми- ровать векторы и матрицы определенного вида. Описание этих функций и при- меры их применения приведены ниже. Функция zeros(M.N) создает матрицу размером тихи с нулевыми элементами » zeros(3,5) ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Функция ones(M.N) создает матрицу размером тихн с единичными элементами. » ones(3,5) ans = 11111 11111 11111 Функция eye(M.N) создает единичную матрицу размером тхп, то есть с единица- ми по главной диагонали и остальными нулевыми элементами. » еуе(3.5) ans = 1 0 0 0 0 0 10 0 0 0 0 10 0 Функция rand(M.N) создает матрицу размером тихи из случайных чисел, равно- мерно распределенных в диапазоне от 0 до 1. » rand(3,5) ans = 2.1896е-001 6.7930е-001 5.1942е-001 5.3462е-002 7.6982е-003
Операции с векторами и матрицами 29 4.7045е-002 9.3469е-001 8.3097е-001 5.2970е-001 3.8342е-001 6.7886е-001 3.8350е-001 3.4572е-002 6.7115е-001 6.6842е-002 Функция randn(M.N) создает матрицу размером mxn из случайных чисел, распре- деленных по нормальному (гауссову) закону с нулевым математическим ожида- нием и стандартным (среднеквадратичным) отклонением, равным 1. » randn(3.5) ans = 1.1650е+000 3.5161е-001 5.9060е-002 8.7167е-001 1.2460е+000 6.2684е-001 -6.9651е-001 1.7971е+000 -1.4462е+000 -б.3898е 001 7.5080е-002 1.6961е+000 2.6407е-001 -7.0117е-001 5.7735е-001 Функция hadamard(N) создает матрицу Адамара размером пхп. » hadamard(4) ans = 1111 1-1 1-1 1 1-1-1 1-1-1 1 Функция hilb(N) создает матрицу Гильберта размером ихп. » hilb(4) ans = 1.0000е+000 50000е-001 3.3333e-001 2.5000e-001 5.00006-001 3.3333e-001 2.5000e-001 2.0000e-001 3.3333e-001 2.5000e-001 2.0000e-001 1.6667e-001 2.5000e-001 2.0000e-001 1.6667e-001 1.4286e-001 Функция invhilb(N) создает обратную матрицу Гильберта размером ихп. » invhilb(4) ans = 16 -120 240 140 -120 1200 -2700 1680 240 2700 6480 -4200 -140 1680 -4200 2800 Функция pascal (N) создает матрицу Паскаля размером пхп. » pascal(5) ans = 1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 70 В языке MATLAB предусмотрено несколько функций, которые позволяют фор- мировать одну матрицу на основе другой (заданной) или на основе некоторого заданного вектора. К таким функциям принадлежат следующие.
30 Урок 1 • MATLAB как научный калькулятор Функция flip! г (А) формирует матрицу, переставляя столбцы известной матри- цы А относительно вертикальной оси, то есть меняя местами левую и правую сто- роны матрицы. 1 2 7 8 13 14 3 4 9 10 15 16 5 6 11 12 17 18 » fliplr(A) ans = 6 5 4 3 2 1 12 11 10 9 8 7 18 17 16 15 14 13 Функция fl i pud (А) переставляет строки заданной матрицы А относительно гори- зонтальной оси, то есть меняя местами верхнюю и нижнюю стороны матрицы. » flipud(A) ans = 13 14 15 16 17 18 7 8 9 10 11 12 1 2 3 4 5 6 Функция rot90 (А) формирует матрицу путем «поворота» заданной матрицы А на 90° против часовой стрелки. » rot90(A) ans = 6 12 18 5 11 17 4 10 16 3 9 15 2 8 14 1 7 13 Функция reshape(A.m.n) образует матрицу размером тихи, выбирая из столбцов элементы заданной матрицы А и распределяя их по п столбцам, каждый из кото- рых содержит т элементов. Число элементов матрицы А будет поэтому равняться произведению т на п. » reshape(А,2,9) ans = 1 13 8 3 15 10 5 17 12 7 2 14 9 4 16 11 6 18 Функция tri 1 (А) образует нижнюю треугольную матрицу на основе матрицы А пу- тем обнуления ее элементов выше главной диагонали. » tri 1(A) ans = 1 0 0 0 0 0 7 8 0 0 0 0 13 14 15 0 0 0
Операции с векторами и матрицами 31 Функция triu(A) образует верхнюю треугольную матрицу на основе матрицы А пу- тем обнуления ее элементов ниже главной диагонали. » triи(А) ans = 1 2 3 4 5 6 О 8 9 10 11 12 О 0 15 16 17 18 Функция hankel (v) образует квадратную матрицу Ганкеля, первый столбец кото- рой совпадает с заданным вектором V. » v = [-5 6 7 4] V = -5 6 7 4 » hankel(v) ans = -5 6 7 4 6 7 4 0 7 4 0 0 4 0 0 0 Функция diag(x) формирует или извлекает диагональ матрицы. Если х является вектором, то данная функция создает квадратную матрицу, у которой элементы вектора х размещены на главной диагонали. » diag(v) ans = -5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 4 Чтобы поместить элементы вектора на другую диагональ, при обращении к функ- ции необходимо указать еще один параметр — номер диагонали, выраженный це- лым числом (при этом диагонали отсчитываются начиная от главной по направ- лению вверх). » diag(v,-1) ans = „ 0 0 0 0 0 -5 0 0 0 0 0 6 0 0 0 0 0 7 0 0 0 0 0 4 0 Когда х является матрицей, функция diag(x) создает вектор-столбец, который со- стоит из элементов главной диагонали заданной матрицы х, например для матри- цы А, указанной перед примером применения функции fl 1 pl г. » diag(A) ans = 1 8 15
32 Урок 1 • MATLAB как научный калькулятор Если при этом указать дополнительно номер диагонали, то можно получить век- тор-столбец из элементов любой диагонали матрицы х, например: » diag(A,3) ans = 4 11 18 Функция zeros(l.N) формирует (создает) вектор-строку, а функция zeros(N.l) — вектор-столбец, состоящие из N нулевых элементов. Векторы, значения элементов которых являются случайными равномерно рас- пределенными, формируются таким образом: функция rand(l.n) создает вектор- строку, а функция rand(m.l) — вектор-столбец. Извлечение и вставка частей матриц Прежде всего отметим, что обращение к любому элементу заданной матрицы в MATLAB осуществляется путем указания (в скобках, через запятую) после име- ни матрицы двух целых положительных чисел, определяющих соответственно номер строки и столбца матрицы, на пересечении которых расположен этот эле- мент. Допустим, мы имеем такую матрицу А: » А = [1 2 3 4; 5 б 7 8; 9 10 11 12] А = 12 3 4 5 6 7 8 9 10 11 12 Получить значение элемента этой матрицы, расположенного на пересечении вто- рой строки с третьим столбцом, можно таким образом: » А(2,3) ans = 7 Если же нужно поместить на указанное место некоторое число, например л, вы- полните следующее: » А(2.3) = pi; А А = 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 3.1416 8.0000 9.0000 10.0000 11.0000 12.0000 Иногда требуется создать меньшую матрицу на основе большей, формируя ее пу- тем извлечения из последней матрицы элементов ее нескольких строк и столб- цов. Или, наоборот, вставить меньшую матрицу таким образом, чтобы она стала определенной частью матрицы большего размера. Эта операция в MATLAB вы- полняется с использованием символа двоеточия (:). Рассмотрим такие операции на примерах. Допустим, нужно создать вектор vl, состоящий из элементов третье- го столбца последней матрицы А. Сделаем следующее: » V1 = А(:,3) vl = 3.0000
Операции с векторами и матрицами 33 3.1416 11.0000 Чтобы создать вектор v2, состоящий из элементов второй строки матрицы А, по- ступим таким образом: » v2 = А(2,:) v2 = 5.0000 6.0000 3.1416 8.0000 Если нужно из матрицы А образовать матрицу В размером 2x2, которая состоит из элементов левого нижнего угла матрицы А, делают так: » В = А(2:3.1:2) В = 5 6 9 10 Аналогично можно вставить матрицу В в середину верхней части матрицы А: » А(1:2.2:3) = В А = 15 6 4 5 9 10 8 9 10 11 12 Как видно, здесь вместо указания номеров элементов матрицы можно задавать диапазон изменения этих номеров путем определения нижней и верхней границ, разделенных символом «:». Если верхней границей изменения номеров элементов матрицы является ее раз- мер в этом измерении, вместо него можно использовать служебное слово end. На- пример: » A(2:end,2:end) ans = 9 10 8 10 11 12 Эти операции удобно использовать для формирования матриц, большинство эле- ментов которых одинаковы, в частности так называемых разреженных матриц, состоящих в основном из нулей. Для примера рассмотрим формирование разре- женной матрицы размером 5x7 с единичными элементами в центре: » А = zeros(5,7); » В = ones(3.3); » А(2:4.3:5) = В А = 0 0 0 0 0 0 0 0 0 1110 0 0 0 1110 0 0 0 1110 0 0 0 0 0 0 0 0 «Растянуть» матрицу А в единый вектор v можно с помощью обычной записи v=A(:). При этом создается вектор-столбец с количеством элементов тихи, в котором 2 Зак. 957
34 Урок 1 • MATLAB как научный калькулятор столбцы заданной матрицы размещены один под другим в том же порядке, что и раньше: » А = [1 2 3: 4 5 б] А = 1 2 3 4 5 6 » V = А(:) v = 1 4 2 5 3 б Наконец, «расширить» матрицу, составив ее из отдельных заданных матриц («блоков»), тоже довольно просто. Если заданы несколько матриц-блоков с оди- наковым количеством строк, например Al, А2, ..., AN, то из них можно сформиро- вать единую матрицу А, располагая блоки горизонтально в одну линию таким об- разом: А=[А1.А2..AN]. Эту операцию называют горизонтальной конкатенацией (сцеплением) матриц. Вертикальная конкатенация матриц реализуется (при условии, что все составные блоки-матрицы имеют одинаковое количество столбцов) аналогично, путем при- менения для отделения блоков точки с запятой вместо запятой: А=[А1;А2;...; AN]. Приведем пример горизонтальной конкатенации: » Al = [1 2 3:4 5 б;7 В 9]; » А2 = [10:11:12]; » АЗ = [14 15:16 17:18 19]: » А = [А1.А2.АЗ] А = 1 2 3 10 14 15 4 5 б 11 16 17 7 8 9 12 18 19 Пример вертикальной конкатенации: » Bl = [1 2 3 4 5]; » В2 = [б 7 8 9 10:11 12 13 14 15]: » ВЗ = [17 1В 19 20 21]; » В = [В1:В2:ВЗ] В = 1 2 3 4 5 б 7 8 9 10 11 12 13 14 15 17 18 19 20 21 Операции с векторами Будем различать две группы действий над векторами: векторные действия — то есть такие, которые предусмотрены векторным исчислением в математике, и дей- ствия по преобразованию элементов — это те, что преобразуют элементы вектора, но не являются операциями, разрешенными в математике.
Операции с векторами и матрицами 35 Действия над векторами Сложение векторов. Как известно, суммироваться могут только векторы одного ти- па (те, которые являются либо векторами-строками, либо векторами-столбцами), имеющие одинаковую длину (одинаковое количество элементов). Если х и у — именно такие векторы, то их сумму, z, можно получить, введя команду v=x+y, на- пример: » х = [1 2 3] : у = [4 5 6]; » V = X + у v = 5 7 9 — Вычитание векторов. Это действие осуществляется аналогично, с помощью ариф- метического знака минус (-). Оно выполняется над векторами, имеющими оди- наковую структуру (v=x-y). » v = х - у v = -3 -3 -3 Транспонирование вектора. Осуществляется с применением знака апострофа ('), который записывается сразу после имени транспонируемого вектора. » х' ans = 1 2 3 Умножение вектора на число. Осуществляется в MATLAB с помощью арифме- тического знака умножения (*) таким образом: v=X*r или v=r*X, где г — некоторое действительное число. » v = 2 * х v = 2 4 6 Умножение двух векторов. Определено в математике только для векторов оди- накового размера (одинаковой длины) и лишь тогда, когда один из векторов-мно- жителей — строка, а второй — столбец. Иначе говоря, если векторы х и у являются строками, то математический смысл имеют лишь две формы умножения данных векторов: и=х' *у и v=x*y'. При этом в первом случае результатом будет квадратная матрица, а во втором — число. В MATLAB умножение векторов задается посред- ством символа «*», который записывается между множителями-векторами: » х = [1 2 3]; у = [4 5 6]; » V = х’*у V = 4 5 6 8 10 12 12 15 18 » v = х*у' v = 32 Векторное произведение двух векторов (для трехкомпонентных векторов). Для выполнения этой операции в MATLAB предусмотрена функция cross, которая
36 Урок 1 • MATLAB как научный калькулятор позволяет найти векторное произведение двух векторов. Если заданы два трех- компонентных вектора vl и v2, достаточно ввести команду cross(vl. v2). » Vl = [1 2 3]; v2 = [4 5 6]; » cross(vl,v2) ans = -3 6-3 Поэлементное преобразование векторов В языке MATLAB предусмотрено выполнение ряда операций, позволяющих пре- образовать заданный вектор в другой вектор, имеющий такой же размер и тип. Подобные операции, строго говоря, не является математическими. К таким опе- рациям относятся, в частности, все операции, осуществляемые с помощью эле- ментарных математических функций, имеющих один аргумент (см. табл. 1.4). В языке MATLAB запись вида y=sin(x), где х — некоторый известный вектор, приводит к формированию нового вектора у (имеющего тот же тип и размер, что и вектор-аргумент), элементы которого равны синусам соответствующих элемен- тов вектора-аргумента х. Приведем несколько примеров: » X = [-2.-1,0,1,2]; » у = sin (х) У = -0.9093 -0.8415 0 0 8415 0 9093 » 2 = tan(x) Z = 2.1850 -1.5574 0 1.5574 -2.1850 » V = ехр(х) V = 0.1353 0.3679 1 0000 2.7183 7.389 Кроме описанных операций в MATLAB предусмотрено несколько операций по- элементного преобразования. Они задаются с помощью обычных знаков арифме- тических операций и применяются к векторам одинакового типа и размера. Ре- зультатом их является вектор аналогичного типа и размера. О Добавление числа к каждому элементу (вычитание числа из каждого эле- мента) вектора. Осуществляется с помощью символа «+» («-»). О Поэлементное умножение векторов. Производится с помощью комбинации символов «.*», которые записываются между именами перемножаемых векто- ров. В результате получается вектор, каждый элемент которого является про- изведением соответствующих элементов векторов-«сомножителей». О Поэлементное деление векторов. Осуществляется с помощью комбинации символов «./». В результате получается вектор, каждый элемент которого яв- ляется частным от деления соответствующего элемента первого вектора на со- ответствующий элемент второго. О Поэлементное деление векторов в обратном направлении. Осуществляется с помощью комбинации символов «,\». В результате получают вектор, каждый элемент которого является частным от деления соответствующего элемента второго вектора на соответствующий элемент первого. О Поэлементное возведение в степень. Осуществляется с помощью комбина- ции символов «.л». В результате получается вектор, каждый элемент которого является соответствующим элементом первого вектора, возведенным в сте-
Операции с векторами и матрицами 3/ пень, величина которой равна значению соответствующего элемента второго вектора. Ниже приведены примеры выполнения этих операций. » х = [1.2.3.4.5]; у = [-2.1.4.0.5]; » disp(x + 2) 3 4 5 6 7 » disply - 3) -5 -2 1-3 2 » disp(x .* у) -2 2 12 0 25 » displx ./ у) Warning: Divide by zero -0.5000 2.0000 0.7500 Inf 1.0000 » disp(x ,\ y) -2.0000 0.5000 1.3333 0 1.0000 » disp(x.^y) 1 2 81 1 3125 Вышеуказанные операции позволяют очень просто вычислять сложные матема- тические функции (а затем строить их графики) без использования операторов цикла, то есть осуществлять построение графиков в режиме калькулятора. Для этого достаточно задать значение аргумента как арифметическую прогрессию, а потом записать нужную функцию, используя знаки поэлементного преобразо- вания векторов. Предположим, что нужно рассчитать значения функции у = ae_fccsinr при значе- ниях аргумента х от 0 до 10 с шагом 1. Вычисление массива значений этой функ- ции при указанных условиях можно осуществить с помощью всего лишь двух простых операторов. » а = 3; h = 0.5; х = 0 : 10: » у - а * exp(-h * х) .* sin(x) У “ Columns 1 through 7 0 1 5311 1 0035 0 0945 -0.3073 -0.2361 -0.0417 Columns 8 through 11 0.0595 0.0544 0.0137 -0.0110 1оэлементное преобразование матриц Для поэлементного преобразования матрицы пригодны все алгебраические функ- ции, приведенные в табл. 1.4. Они формируют матрицу того же размера, что и ис- ходная, у которой каждый элемент вычисляется как значение указанной функ- ции от соответствующего элемента заданной матрицы. Кроме этого, в MATLAB определены следующие операции. О Поэлементное умножение матриц одинакового размера. Задается комбина- цией символов «.*», записываемой между именами перемножаемых матриц. О Поэлементное деление. Осуществляется с помощью комбинации символов «./ » и <\». О Поэлементное возведение в степень. Осуществляется с помощью комбина- ции символов «.л». При выполнении этой операции каждый элемент первой
38 Урок 1 • MATLAB как научный калькулятор матрицы возводится в степень, значение которой равно значению соответст- вующего элемента второй матрицы. Приведем несколько примеров. » А - [1.2,3.4.5; -2. 3. 1. 4. 0] А - 1 2 3 4 5 -23140 »В- [1.3.5.-2,1; 1.8.-3.-1,2] В » -13 5-21 1 8-3-1 2 » sin(A) ans = 0.8415 0 9093 0.1411 -0.7568 -0.9589 -0.9093 0.1411 0.8415 -0.7568 0 » А .* В ans - -1 6 15 -8 5 - 2 24 -3 -4 0 » А ./ В ans - - 1.0000 0.6667 0.6000 -2.0000 5.0000 - 2.0000 0.3750 -0.3333 -4.0000 0 » А Л В Warning: Divide by zero ans - - 1 0000 1.5000 1.6667 -0.5000 0.2000 - 0.5000 2.6667 -3.0000 -0.2500 Inf » A .A В ans - l.Oe + 003 * 0.0010 0.0080 0.2430 0.0001 0.0050 ’• -0 0020 6.5610 0.0010 0.0002 0 О Прибавление к матрице числа. Является операцией, специфичной для языка MATLAB. Она записывается следующим образом: А+х, или х+А, где А — мат- рица, а х — числе]. Такой операции нет в математике. В MATLAB она эквива- лентна совокупности операций А+х*Е, где Е — обозначение матрицы (все эле- менты которой равны единице), имеющей такие же размеры, как и матрица А. Например: » А - [1 2 3 4 5; 6 7 8 9 11] А = 1 2 3 4 5 6 7 8 9 11 » А + 2 ans - 3 4 5 6 7 8 9 10 11 13 » 2 + А ans - 3 4 5 6 7 8 9 10 11 13
Операции с векторами и матрицами 39 Действия над матрицами Базовые действия над матрицами — сложение, вычитание, транспонирование, ум- ножение матрицы на число, умножение матрицы на матрицу, возведение матри- цы в целую степень — осуществляются в языке MATLAB с применением обыч- ных знаков арифметических операций. Задавая эти операции, важно помнить, при каких условиях их выполнение возможно: О при сложении или вычитании матрицы должны иметь одинаковые размеры; О при умножении матриц количество столбцов первой матрицы должно совпа- дать с количеством строк второй матрицы. Невыполнение данных условий вызовет появление в командном окне сообщения об ошибке. Приведем примеры сложения и вычитания: » А - [1 2 3 4 5: 6 7 8 9 11] А - 1 2 3 4 5 б 7 8 9 11 » В - [0 -1 -2 -3 -4: 5 б 7 В 9] В = О -1 -2 -3 -4 5 6 7 8 9 » А + В ans - 11111 1 13 15 17 20 » А - В ans - 1 3 5 7 9 11112 Примеры умножения на число: » 5*А ans - 5 10 15 20 25 30 35 40 45 55 » А*5 ans - 5 10 15 20 25 30 35 40 45 55 Примеры транспонирования матрицы: » А' ans - 1 б 2 7 3 8 4 9 5 11
40 Урок 1 • MATLAB как научный калькулятор Пример умножения матрицы на матрицу: » А'*В ans = 30 35 40 45 50 35 40 45 50 55 40 45 50 55 60 45 50 55 60 65 55 61 67 73 79 » С = А*В‘ С = -40 115 -94 299 Обращение матрицы. Эта операция осуществляется с помощью функции inv(A). Исходная матрица А должна быть квадратной, а ее определитель не должен рав- няться нулю. » inv(C) ans = -2.6000е-001 1.0000е-001 -8.1739e-002 3.4783e-002 Проверим правильность выполнения операции обращения, применив ее еще раз к полученному результату. » inv(ans) ans = -4.0000е+001 -9 4000е+001 1.1500е+002 2.9900е+002 Как видите, мы получили исходную матрицу С, следовательно, обращение матри- цы выполнено правильно. Возведение матрицы в целую степень. Осуществляется в MATLAB с использо- ванием символа «Л», например: Алп. При этом матрица должна быть квадратной, ап — целым (положительным или отрицательным) числом. Данное матричное действие эквивалентно умножению матрицы А на себя п раз (если и — положи- тельное число) или умножению обратной матрицы на себя (если п — отрицатель- ное число). » А'2 ans = 8 -3 -10 -5 10 16 -2 4 9 » АЧ-2) ans = 1.5385е-001 -7.6923е-002 3.0769е-001 7 6923е-002 3.0769е-001 -4.6154е-001 2.1328е-018 -1.5385е-001 3.8462е-001 Деление матриц. В языке MATLAB имеются две новые оригинальные функции деления матриц, которые не определены в математике. При этом вводятся поня- тия деление матриц слева направо и деление матриц справа налево. Первая опе- рация записывается с помощью символа «/»> а вторая — с помощью символа «\».
Операции с векторами и матрицами 41 Операция В/A эквивалентна операции B*inv(A), где функция Inv осуществляет обращение матрицы. Ее удобно использовать для решения матричного уравне- ния Х-А = В. Аналогично, операция А\В равносильна операции inv(A)*B, которая представляет собой решение матричного уравнения А-Х = В Рассмотрим задачу нахождения корней системы линейных алгебраических урав- нений X] +2x2 + 3*з = 14; 2хх ~xi -5*3 =-15; *1 ~х2 ~хз - ~4. В среде MATLAB это можно сделать таким образом: » А = [1 2 3; 2 -1 -5; 1 -1 -1] А = 1 2 3 2 -1 -5 1 -1 -1 » В - [14;-15;-4] В = 14 -15 -4 » х = А\В X = 1 Матричные функции Вычисление матричной экспоненты осуществляется с помощью функций expm, expml, ехрт2 и ехртЗ. Эти функции следует отличать от прежде рассмотренной функции ехр(А), формирующей матрицу, значение каждого элемента которой рав- няется е в степени, равной соответствующему элементу матрицы А. Функция expm является встроенной функцией MATLAB. Функция expml(А) реа- лизована как М-файл, который вычисляет матричную экспоненту путем исполь- зования разложения Паде матрицы А. Функция ехрт2(А) вычисляет матричную экспоненту посредством разложения Тейлора матрицы А, а функция ехртЗ(А) — с помощью спектрального разложения матрицы А. Приведем примеры примене- ния этих функций: » А = [1,2.3; 0. -1.5:7, -4.1] А = 12 3 0-15 7 -4 1 » ехрт(А) ans = 131.364В -9.5601 В0.66В5 97.8030 -7 1768 59.9309 123.0245 -В.В236 75.4773
42 Урок 1 • MATLAB как научный калькулятор » expml(A) ans - 131 3648 -9 5601 80 6685 97.8030 -7.1768 59.9309 123.0245 » ехрт2(А) ans - -8.8236 75.4773 131.3648 -9.5601 80 6685 97.8030 -7.1768 59.9309 123.0245 -8.8236 75.4773 » ехртЗ(А) ans - 1.0е+002 * 1.3136 + 0.00001 -0.0956 + О.ООООТ 0.8067 - 0.00001 0.9780 + 0.00001 -0.0718 - 0.00001 0.5993 - 0.00001 1.2302 + 0.00001 -0 0882 - 0.00001 0.7548 - 0.00001 Функция logm(A) осуществляет обратную операцию — логарифмирование матри- цы по натуральному основанию. А - 1 2 3 О 1 5 7 4 1 » В - ехртЗ(А) В - 1.0е+003 * 0.9378 0.7987 1.0643 0.9074 1.5182 1.2932 » logm(B) ans - 1 0000 2.0000 0.0000 1.0000 7 0000 4.0000 0 9547 1 0844 1.5459 3 0000 5.0000 1.0000 Функция sqrtm(A) вычисляет такую матрицу Y, что Y*Y = А. » Y sqrtm(A) Y - 0 7884 + 0 88061 0.8953 + 0.65081 1.2765 - 1 4092т » Y*Y ans - 1.0000 + 0.00001 0.0000 - 0.00001 7 0000 + 0 00001 0.6717 - 0 17951 0.8029 - 0 41801 0.7628 + 0.86201 0.9118 - 1.00661 1 0875 - 0 54491 1 3000 + 1 25251 2.0000 - 0.00001 3.0000 + 0.00001 1.0000 - 0.00001 5.0000 - 0.00001 4 0000 + 0 00001 1.0000 + 0 00001 Функции прикладной численной математики К преимуществам системы MATLAB относится то, что она содержит в своем со- ставе большое число функций и процедур, реализующих стандартные математи- ческие операции, используемые в прикладной (инженерной) математике. Сюда
Функции прикладной численной математики 43 можно отнести операции с полиномами, обработку данных измерений, функции линейной алгебры, аппроксимацию и интерполяцию данных, векторную фильтра- цию и спектральный анализ сигналов. Далее ознакомимся с важнейшими из них. Операции с полиномами В системе MATLAB предусмотрены некоторые дополнительные возможности опе- рирования с полиномами. Полином (многочлен) как функция определяется вы- ражением Р(х) = апхп +...+ а2х2 +aix + ao. В среде MATLAB полином задается и сохраняется в виде вектора, элементами которого являются коэффициенты полинома от ап до а0 в указанном порядке: Р = [а„ ... а2 at а0]. Ввод полинома в MATLAB осуществляется так же, как и ввод вектора длиной п+1, где п — порядок полинома. Умножение и деление полиномов. Произведением двух полиномов степеней пит, как известно, называют полином степени п + тп, коэффициенты которого оп- ределяют посредством простого перемножения этих двух полиномов. Фактически операция умножения двух полиномов сводится к построению расширенного век- тора коэффициентов по заданным векторам коэффициентов полиномов-сомно- жителей. Эту операцию в математике называют сверткой векторов (а сам вектор, получаемый в результате такой процедуры — вектором-сверткой двух векторов). В MATLAB ее осуществляет функция conv(pl,p2). Аналогично, функция deconv(pl.p2) выполняет деление полинома pl на полином р2, то есть обратную свертку векторов pl и р2. Она определяет коэффициенты по- линома, который является частным от деления pl на р2. » pl - [1.2.3]; р2 - [1.2.3.4.5.6]; » р - conv(pl.p2) р - 1 4 10 16 22 28 27 18 » deconv(p.pl) ans - 1 2 3 4 5 6 В общем случае деление двух полиномов приводит к получению двух полино- мов — полинома-результата (частного) и полинома-остатка. Чтобы получить оба полинома, следует задать команду [Q.R]-deconv(B,A). Тогда результат будет выдан в виде вектора Q с остатком в виде вектора R таким образом, что будет выполнено соотношение В - conv(A.Q) + R В системе MATLAB предусмотрена функция roots (р), позволяющая получить век- тор, элементы которого являются корнями заданного полинома р. Предположим, нужно найти корни полинома Р(х) = х5 + 8х4 + З1х3 + 80х2 +94x4-20.
44 Урок 1 • MATLAB как научный калькулятор Ниже показано, как можно это сделать. » р = [1.8.31.80.94,20]; » disp(roctsCp)J -1.0000 + 3.00001 -1.0000 - 3.00001 -3.7321 -2.0000 -0.2679 Обратная операция — построение вектора р коэффициентов полинома по задан- ному вектору его корней — осуществляется с помощью функции poly. Обращение к ней производится таким образом: p=poly(r), где г — заданный вектор значений корней, р — вычисленный вектор коэффициентов полинома. » р = [1.8.31.80.94.20] р = 1 8 31 80 94 20 » г = roots(p) г = -1.0000 + 3.00001 -1.0000 - 3.00001 -3.7321 -2.0000 -0.2679 » pl = polyfr) pl = 8.0000 31.0000 80.0000 94.0000 20.0000 Заметим, что получаемый вектор не содержит старшего коэффициента, который по умолчанию полагается равным 1. Эта же функция в случае, если ее аргументом является некоторая квадратная матрица А размером ихи строит вектор характеристического полинома этой мат- рицы. В результате обращения p=poly(A) формируется вектор р коэффициентов характеристического полинома р (s) = det(sE - А) = ptsn +...+pns + p„+i, где Е — обозначение единичной матрицы размером пхп. Рассмотрим пример: » А = [1 2 3: 5 6 0: -1 2 3] А = 1 2 3 5 6 0 -12 3 » р = poly(A) Р = 1.0000 -10.0000 20.0000 -36.0000 Для вычисления значения полинома по заданному значению его аргумента в про- грамме MATLAB предусмотрена функция polyval. Обращение к ней осуществля- ется в таком виде: y=polyval (р.х), где р - заданный вектор коэффициентов поли- нома, а х — заданное значение аргумента. » у = polyval(р.2) у = 936
Функции прикладной численной математики 45 Если в качестве аргумента полинома указана матрица X, то функция polyval (р.Х) вычисляет матрицу, каждый элемент которой является значением указанного по- линома при значении аргумента, равном соответствующему элементу матрицы X, например: р = 1 8 31 80 94 20 » X = [1 2 3; 0 -1 3; 2 2 -1] X - 12 3 0-13 2 2-1 » disp(polyvaKp.X)) 234 936 2750 20 -18 2750 936 936 -18 В этом случае функция вычисляет значение полинома для каждого элемента мат- рицы X, и поэтому исходная и конечная матрицы имеют одинаковый размер, то есть s1ze(Y)=s1ze(X). Вычисление производной полинома осуществляет функция polyder. Она создает вектор коэффициентов полинома, представляющего собой производную задан- ного полинома. Данная функция поддерживает три вида обращений. При использовании обращения dp=polyder(p) по заданному полиному р вычисля- ется вектор dp, элементы которого являются коэффициентами полинома-произ- водной от заданного полинома. » dp - polyder (р) dp - 5 32 93 160 94 Обращение вида dp=polyder(pl.p2) задает вычисление вектора dp, элементы кото- рого являются коэффициентами полинома-производной произведения полино- мов pl и р2. » pl - [1.8.31.80.94,20]; » р2 - [1.2.16]; » р = conv(pl,p2) р - 1 10 63 270 750 1488 1544 320 » dp - polyder(p) dp = 7 60 315 1080 2250 2976 1544 » dpi = polyder!pl,p2) dpi = 7 60 315 1080 2250 2976 1544 Используя обращение вида [q.p]=polyder(pl.p2), можно вычислить производную отношения р1/р2 полиномов pl и р2 и получить результат в виде отношения q/p полиномов q и р. I » pl - [1.8.31.80.94,20]; » р2 - [1.2.16]; » [q.p] “ polyder!pl,р2) q = 3 24 159 636 1554 2520 1464 р = 1 4 36 64 256 » z = deconv (q.p) z = 3 12 3
46 Урок 1 • MATLAB как научный калькулятор » у - deconv(pl.pZ) у - 1 6 3-22 » zl - polyder(y) zl - 3 12 3 Обработка данных измерений Система MATLAB обеспечивает дополнительные возможности для обработки дан- ных, представленных в векторной или матричной форме. Функции, которые реа- лизуют эти возможности, будем рассматривать на примере зависимости у(х) за- данной рядом точек: х 2 4 6 8 10 у 5,5 6,3 6,8 JJ 8,6 В командном окне MATLAB эту зависимость можно задать как матрицу xydata, содержащую две строки — значения х и значения у. » xydata - [2 4 6 8 10: 5.5 6.3 6.8 8 8.6] xydata - 2.0000 4.0000 6.0000 8.0000 10.0000 5.5000 6.3000 6.8000 8 0000 8.6000 Функция size(xydata) предназначена для определения числа строк и столбцов матрицы xydata. Она формирует вектор [п.р], содержащий эти величины. » size(xydata) ans - 2 5 Используя обращение вида » [n.p]-size(xydata) можно сохранить в памяти для дальнейшего применения данные о числе строк п и столбцов р этой матрицы. » п, р п - 2 р- 5 С помощью функции size можно установить длину и тип (строка или столбец) вектора. » v - xydatat:) v - 2.0000 5.5000 4.0000 6.3000 6 0000 6.8000 8.0000 8.0000 10.0000 8.6000
Функции прикладной численной математики 47 » п - size(v) п - 10 1 » V1 - V" vl - 2.0000 5.5000 4 0000 6 3000 6 0000 6 8000 8.0000 8.0000 10.0000 8 6000 » size(v’) ans - 1 10 Функция max(v), где v — некоторый вектор, выдает значение максимального эле- мента этого вектора. Аналогично, функция min(v) извлекает минимальный эле- мент вектора v. Функции mean(v) и std(v) определяют, соответственно, среднее значение и среднеквадратичное (стандартное) отклонение от него значений эле- ментов вектора v. Функция сортировки sort(v) формирует вектор, элементы которого расположе- ны в порядке возрастания их значений. Функция sum(v) вычисляет сумму эле- ментов вектора v, а функция prod(v) — произведение этих элементов. Функция cimsum(v) формирует вектор такого же типа и размера, у которого лю- бой элемент является суммой всех предшествующих элементов вектора v (вектор кумулятивной суммы). Функция cumprod(v) создает вектор, элементы которого являются произведением всех предшествующих элементов вектора v. Функция diff(v) создает вектор, размер которого на единицу меньше, чем размер вектора v; элементы созданного вектора рассчитываются как разность между со- седними элементами вектора v. Приведем примеры использования описанных функций: » v - [1, 0.1. 0.5. 0.1. 0.1. 0.4]; » disp(size(v)) 1 6 » disp(max(v)) 1 » disp(nrin(v)) 0.1000 » disp(mean(v)) 0.3667 » disp(std(v)) 0.3559 » disp(sorttv)) 0.1000 0.1000 0.1000 0.4000 0.5000 1.0000 » disp(sumfv)) 2.2000 » disp(prod(v)) 2 0000e-004 » disp(cumsum(v)) 1.0000 1.1000 1.6000 1.7000 1.8000 2.2000 » disp(cumprod(v)) 1.0000 0.1000 0.0500 0.0050 0 0005 0 0002 » disp(diff(v)) -0.9000 0.4000 -0.4000 0 0.3000
48 Урок 1 • MATLAB как научный калькулятор Если указать второй выходной параметр, то можно получить дополнительную информацию об индексе первого элемента, значение которого является макси- мальным или минимальным. » [М.п] = max(v) М = 1 п - 1 » [N.m] = nrin(v) N = 0.1000 m = 2 Интегрирование методом трапеций осуществляет функция trapz. Используя об- ращение вида trapz(x.y), можно вычислить площадь под графиком функцииу(х), в котором соседние точки, заданные векторами х и у, соединены отрезками пря- мых. Если вектор х не указан, по умолчанию принимается, что шаг интегрирова- ния равен 1 (то есть вектор х представляет собой вектор, состоящий из номеров элементов вектора у). Вычислим интеграл от функции у = sin(x) в диапазоне от 0 до л. Его точное зна- чение равно 2. Используем равномерную сетку аргумента, состоящую из 100 эле- ментов. Тогда вычисления сведутся к совокупности операций » X = (0 : 0.01 : 1)*р1; » у = sin(x); » disp(trapz(x.y)J 1.9998 Функции size, max, min, mean, std, sort, sum, prod, cumsum, cumprod, diff могут быть применены и к матрицам. Основным отличием использования в качестве аргу- ментов этих функций именно матриц является то, что соответствующие описан- ные выше операции выполняются не над строками матриц, а над каждым из столбцов заданной матрицы. То есть каждый столбец матрицы А рассматривается как переменная, а каждая строка — как отдельное наблюдение. Так, в результате применения функций max, min, mean, std получаются векторы-строки с количест- вом элементов, которое равно количеству столбцов заданной матрицы; каждый элемент содержит максимальное, минимальное, среднее или среднеквадратичное значение элементов соответствующего столбца заданной матрицы. Предположим, есть три величины уь уг и г/3, измеренные при некоторых пяти значениях аргумента (они не указаны). Данные измерений образуют три вектора, содержащих по пять элементов. » у1 = [5.5 6.3 6.8 8 8.6]; » у2 = [-1.2 0.5 -0.6 1 0.1]; » УЗ - [3.4 5.6 0 8.4 10.3]; Сформируем из них матрицу измерений так, чтобы векторы yl, у2 и уЗ образовали столбцы этой матрицы. » А - [ уГ ,у2’ ,у3‘] А = 5.5000 -1.2000 3.4000 6.3000 0.5000 5.6000 6.8000 -0.6000 0 8.0000 1.0000 8.4000 8.6000 0.1000 10.3000
Функции прикладной численной математики 49 Применив к данной матрице измерений описанные функции, получим: » size(А) ans = 5 3 » max(A) ans = 8.6000 » min(A) 1.0000 10.3000 ans = 5 5000 » mean(A) -1.2000 0 ans - 7.0400 -0.0400 5.5400 » std(A) ans - 1.2582 0.8735 4.0655 Если при обращении к функциям max и min указать второй выходной параметр, то он будет содержать информацию о номерах строк, где находятся в соответствую- щем столбце первые элементы с максимальным (или минимальным) значением. » [Н.п] = тах(А) М - 8 6000 1 0000 10.3000 п - 5 4 5 » [N.m] - min(A) N - 5 5000 -1 20 0 т = 1 1 3 Функция sort сортирует элементы любого столбца матрицы. Результатом явля- ется матрица такого же размера. Функции sum и prod формируют вектор-строку, каждый элемент которой являет- ся суммой или произведением элементов соответствующего столбца исходной матрицы. Функции cumsum и cumprod образуют матрицы такого же размера; элементы каждого столбца созданных матриц являются суммой или произведением элементов этого же столбца исходной матрицы, начиная с соответствующего элемента и выше. Наконец, функция di ff создает из заданной матрицы размером mxn матрицу раз- мером (т - 1)хп элементы которой являются разностью между элементами со- седних строк исходной матрицы. Применяя эти процедуры к рассматриваемой матрице измерений, получим: » sort(А) ans - 5.5000 -1.2000 0 6.3000 -0.6000 3.4000 6.8000 0.1000 5.6000 8 0000 0.5000 8 4000 8.6000 1.0000 10.3000 » sum(A) ans - 35.2000 -0.2000 27.7000 » prod(A) ans = 1.0e+004 * 1.6211 0 0000 0 » cumsum(A) ans - 5.5000 -1.2000 3.4000
50 Урок 1 • MATLAB как научный калькулятор 11.8000 -0 7000 9.0000 18.6000 -1.3000 9.0000 26.6000 -0.3000 17 4000 35.2000 -0.2000 27.7000 » cumprod(A) ans - 1 0е+004 i 0.0006 -0.0001 0.0003 0 0035 -0 0001 0.0019 0.0236 0.0000 0 0 1885 0.0000 0 1.6211 0.0000 0 » diff(A) ans = 0.8000 1.7000 2.2000 0.5000 -1.1000 -5 6000 1.2000 1.6000 8.4000 0.6000 -0 9000 1 9000 Опишем еще ряд функций, предоставляемых пользователю системой MATLAB. Функция cov(A) вычисляет матрицу ковариаций измерений. При этом получают симметричную квадратную матрицу с количеством строк и столбцов, равным ко- личеству измеренных величин, то есть количеству столбцов матрицы измерений. Например, при применении к принятой матрице измерений она дает такой ре- зультат: » cov(A) ans “ 1.5830 06845 36880 0.6845 0.7630 2.3145 3 6880 2.3145 16 5280 На диагонали матрицы ковариаций размещены значения дисперсий измеренных величин, а вне ее — значения взаимных корреляционных моментов этих величин. Функция corrcoeff(A) вычисляет матрицу коэффициентов корреляции. Элемен- ты матрицы S=corrcoef(А) связаны с элементами матрицы ковариаций C=cov(A) та- ким соотношением: S(k,l) = -=£^=. JC(k,k)C(J,r) Пример: » corrcoef(A) ans = 1.0000 0.6228 0.7210 0.6228 1.0000 0.6518 0.7210 0.6518 1.0000 Функции линейной алгебры Традиционно к линейной алгебре относят такие задачи, как обращение и псевдо- обращение матрицы, спектральное и сишулярное разложение матриц, вычисле- ние собственных значений и векторов, сингулярных чисел матриц, вычисление
Функции прикладной численной математики 51 функций от матриц. Рассмотрим некоторые основные функции MATLAB, отно- сящиеся к этой области. Функция cond(A) возвращает число обусловленности матрицы относительно опе- рации обращения, которое равняется отношению максимального сингулярного числа матрицы к минимальному. Функция norm(v.p) вычисляетр-норму вектора v по формуле sum(abs(v).Ap)*(l/p), где р — целое положительное число. Если аргумент р при обращении к функции не указан, вычисляется 2-норма (р = 2). Функция norm(A.p) вычисляет р-норму матрицы, где параметр р может прини- мать одно из следующих значений: 1.2, 'fro' или inf. Если аргумент р не указан, вычисляется 2-норма. При этом справедливы такие соотношения: norm(A.l) - max(sum(abs(A))); norm(A.inf) - max(sum(abs(A’))). norm(A.’fro') - sqrt(sum(diag(A'*A))); norm(A) - norm(A.2) - a„,x(A). Функция rcond(A) вычисляет величину, которая обратна значению числа обуслов- ленности матрицы А относительно 1-нормы. Если матрица А хорошо обусловлена, то возвращаемое функцией значение близко к 1. Если же она плохо обусловлена, оно близко к 0. Функция rank(А) вычисляет ранг матрицы, который определяется как количество сингулярных чисел матрицы, превышающие порог max(size(A))*nonn(A)*eps. Приведем примеры применения этих функций по отношению к матрице А: А - 1 2 3 О 1 5 7 4 1 Применение указанных функций приведет к таким результатам: » disp(cond(A)) 13.8032 > disp(norm(A,l)) 9 » disp(norm(A)) 8.6950 » dispCrcond(AJ) 0.0692 > disp(rank(A)) 3 Функция det(A) вычисляет определитель квадратной матрицы на основе треуголь- ного разложения методом исключения Гаусса. Функция trace(A) вычисляет след матрицы А, равный сумме ее диагональных элементов. Функция nul 1 (А) вычис- ляет ортонормированный базис нулъ-пространства матрицы А. Функция orth(A) возвращает ортонормированный базис матрицы А. Функция rref(A) формирует треугольную матрицу, используя метод исключения Гаусса с частичным выбором ведущего элемента. Приведем примеры: » disp(det(A)l 30
52 Урок 1 • MATLAB как научный калькулятор » disp(trace(A)) 3 » disp(null(A)) » disp(orth(A)) 0.3395 0.4082 -0.8474 0.2793 0.8165 0.5053 0.8982 -0.4082 0.1632 » disp(rref(A)) 1 0 0 0 1 о О 0 1 Функция R=chol (А) осуществляет разложение Холецкого для симметричных дей- ствительных и комплексных эрмитовых матриц. » А - [1 2 3; 2 15 8; 3 8 400] А > 1 2 3 2 15 8 3 8 400 » disp(chol(A)) 1.0000 2.0000 3.0000 0 3.3166 0.6030 0 0 19.7645 Функция [L.U]=lu(A) позволяет получить LU-разложение матрицы А в виде про- изведения нижней треугольной матрицы L (возможно, с перестановками) и верх- ней треугольной матрицы U, так что A=L*U. Если использовать обращение к этой функции вида [L.U.P]=lu(A), то она возвращает три составляющие — нижнюю треугольную матрицу L, верхнюю треугольную матрицу U и матрицу перестано- вок Р; при этом P*A=L*U. Приведем пример: А * 1 2 3 2 15 8 3 8 400 » disp(lu(A)) 3.0000 8.0000 400.0000 -0.6667 9.6667 -258.6667 -0.3333 0.0690 -148.1724 » [L.U.P] -= lu(A); » L L = 1.0000 0 0.6667 1.0000 0 0.3333 -0.0690 1.0000 » и и - 3.0000 8.0000 400.0000 0 9.6667 -258.6667 0 0 -148 1724 »р р = 0 0 1 0 1 0 1 0 0
Функции прикладной численной математики 53 Вы видите, что при использовании первого, упрощенного, варианта вызова функ- ция возвращает комбинацию матриц L и U. Обращение матрицы осуществляется с помощью функции inv(A). » dispfinvCA)) 1.3814 -0.1806 -0.0067 -0.1806 0.0910 -0.0005 -0.0067 -0.0005 0.0026 Функция Р=рт nv(A) находит матрицу, псевдообратную матрице А, которая имеет размеры матрицы А' и удовлетворяет условиям А*Р*А=А и Р*А*Р=Р. Например: А = 1 2 3 4 5 5 1 4 6 0 » Р = plnv(A) Р = -0.0423 0 0852 0.0704 -0 0480 0.0282 0.0372 0.0282 0.0628 0.1408 -0.0704 » А*Р*А 1 проверка 1-го условия ans = 1 0000 2 0000 3.0000 4 0000 5.0000 5 0000 -1 0000 4.0000 6 0000 0.0000 » Р*А*Р X проверка 2 го условия ans - -0.0423 0.0852 0.0704 -0.0480 0.0282 0.0372 0 0282 0 0628 0 1408 -0 0704 Для квадратных матриц эта операция равнозначна обычному обращению. Функция [Q.R,P]=qr(A) осуществляет разложение матрицы А на три составляю- щие — унитарную матрицу Q, верхнюю треугольную матрицу R с диагональными элементами, уменьшающимися по модулю, и матрицу перестановок Р; при этом А*Р = Q*R. Например: А = 1 2 3 4 5 5 1 4 6 0 » [Q.R.P] = qr(A) Q -0.5547 -0.8321 -0.8321 0 5547 R -7.2111 -2.7735 -4.9923 -4 7150 -0.2774 0 -4.1603 -0.2774 1.9415 -2.2188 Р = 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0
54 Урок 1 • MATLAB как научный калькулятор 1 0 0 0 0 0 10 0 0 Определение характеристического полинома матрицы А можно осуществить с по- мощью функции poly(А). Обращение к ней вида р=ро1у(А) дает возможность най- ти вектор-строку р коэффициентов характеристического полинома р (s) = det(sE - А) = pisn +.. .+pns +p„+i, / где E — обозначение единичной матрицы размером п*п Например: » А - [1 2 3; 5 6 0: -1 2 3] А = 1 2 3 5 6 0 - 12 3 » р = poly (А) Р - 1.0000 -10 0000 20.0000 -36.0000 Вычисление собственных значений и собственных векторов матрицы осуществ- ляет функция eig(A). Обычное обращение к ней позволяет получить вектор соб- ственных значений матрицы А, то есть корней характеристического полинома матрицы. Обращение к функции может иметь такой вид: [R.D]=eig(A). Тогда в результате получают диагональную матрицу D собственных значений и матрицу R правых собственных векторов, которые удовлетворяют условию A*R=R*D. Эти векторы нор- мированы так, что норма любого из них равна 1. Приведем пример: А “ 1 2 3 - 1 8 16 - 5 100 3 » disp(eig(A)) 1.2234 45 2658 -34.4893 » [R.D] - eig(A) R 0.9979 -0.0798 -0.0590 0 0492 -0.3915 -0.3530 0.0416 -0.9167 0.9338 D - 1.2234 0 0 0 45.2658 0 0 0 -34.4893 Сингулярное разложение матрицы осуществляет функция svd(A). Упрощенное обращение к ней позволяет получить сингулярные числа матрицы А. Более слож- ное обращение выглядит так: [U.S.V] - svd(A) Используя его, можно получить: матрицу U, которая состоит из ортонормирован- ных собственных векторов, отвечающих наибольшим собственным значениям
Функции прикладной численной математики 55 матрицы А*А'; матрицу V, состоящую из ортонормированных собственных векто- ров матрицы АТ*А; матрицу S, являющуюся диагональной матрицей, которая со- держит неотрицательные значения квадратных корней из собственных значений матрицы А'*А (их называют сингулярными числами). Эти матрицы удовлетворяют соотношению A=l)*S*V'. Рассмотрим пример: disp(svd(A)) 100.5617 15.9665 1.1896 [U.S.V] - svd(A) -0.0207 0.1806 -0.9833 -0.0869 0.9795 0.1817 -0.9960 -0.0892 0.0045 100.5617 0 0 0 15.9665 0 0 0 1.1896 0.0502 -0.0221 -0.9985 -0.9978 -0.0453 -0.0491 -0.0442 0.9987 -0.0243 Приведение матрицы к форме Хессенберга осуществляется с помощью функции hess(A). А = 1 2 3 -1 8 16 -5 100 3 » disp(hessCA)) 1 0000 -3.3340 -1.3728 5.0990 25.5000 96.5000 0 12.5000 -14 5000 Используя обращение [P.H]=hess(A), можно кроме матрицы Н в верхней форме Хессенберга получить унитарную матрицу преобразований Р, которая удовлетво- ряет таким условиям: А=Р*Н*Р и P'*P=eye(size(A)). Например: » [Р.Н] - hess(A) Р = 1.0000 0 0 0 -0.1961 -0.9806 0 -0.9806 0.1961 н = 1.0000 -3.3340 -1.3728 5.0990 25.5000 96.5000 0 12.5000 -14.5000 Функция schur(A) предназначена для приведения матрицы к форме Шура. При этом используется упрощенная форма обращения к данной процедуре. Комплекс- ная форма Шура представляет собой верхнюю треугольную матрицу с собствен- ными значениями на диагонали. В действительной форме Шура на диагонали со- храняются только действительные собственные значения, а комплексные значения
56 Урок 1 • MATLAB как научный калькулятор изображаются в виде блоков размером 2x2 частично занимающих нижнюю под- диагональ. Обращение [U.T]=schur(A) позволяет, кроме матрицы Шура Т, получить унитарную матрицу U, удовлетворяющую следующим условиям: A=U*H*U' и U'*U=eye(size(A)). Если начальная матрица А является действительной, то результатом будет дейст- вительная форма Шура, если же комплексной — результат выдается в виде ком- плексной формы Шура. Приведем пример: » disp(schur(A)) 1.2234 -6.0905 -4.4758 0 45.2658 84.0944 0 0.0000 -34 4893 » [U.T] = hess(A) и = 1.0000 0 0 -0.1961 -0 9806 0 -0.9806 0.1961 т = 1.0000 -3.3340 -1.3728 5.0990 25 5000 96.5000 0 12.5000 -14.5000 Функция [U.T]=rsf2csf(U.T) преобразует действительную квазитреугольную фор- му Шура в комплексную треугольную. » [U.T] = rsf2csf(U.T) U - -0.9934 -0.1147 0 -0.0449 0.3892 -0.9201 -0.1055 0.9140 0.3917 1.4091 -8.6427 10.2938 0 45.1689 -83 3695 0 -34.5780 Функция [AA.BB.Q,Z.V]=qz(A.B) приводит пару матриц А и В к обобщенной форме Шура. При этом АА и ВВ являются комплексными верхними треугольными матри- цами, Q, Z — матрицами приведения, а V — вектором обобщенных собственных век- торов. Для этих матриц соблюдаются такие условия: Q*A*Z=AA и Q*B*Z=BB. Обоб- щенные собственные значения могут быть найдены исходя из такого условия: A*V*diag(BB) - B*V*diag(AA). Необходимость в одновременном приведении пары матриц к форме Шура возни- кает в таких задачах линейной алгебры, как решение матричных уравнений Силь- вестра и Риккати, смешанных систем дифференциальных и линейных алгебраи- ческих уравнений. Рассмотрим в качестве примера систему обычных дифференциальных уравнений в неявной форме Коши с одним входом и и одним выходом у Q.x + Rx = bu; у = ex + du.
Функции прикладной численной математики 57 Пусть матрицы Q, R и векторы Ь, с и d равны соответственно: Q - 1.0000 0 0.1920 1.0000 R = 1.1190 -1.0000 36.4800 b = 1.5380 31.0960 0.1284 с - 0 d - -0.0723 Необходимо вычислить значения полюсов и нулей соответствующей передаточ- ной функции. Эта задача сводится к нахождению собственных значений X, которые удовлетво- ряют матричным уравнениям: Rr = -XQr; г. Решение первого уравнения позволяет вычислить полюсы передаточной функ- ции, а решение второго — нули. Ниже приведена последовательность операций, позволяющая произвести расчет полюсов: » [АА.ВВ] = qz(R.-Q) % Приведение матриц к форме Шура АА = 5.5039 + 2.79751 24.8121 - 2536461 0.0000 - 0.00001 5.5158 - 280361 ВВ = -0.6457 + 0.76221 -0.1337 + 0.13781 0 -0.6471 - 0.76381 » dlag(AA) ./ dlag(BB) % Расчет полюсов ans = -1.4245 - 6.01431 -1.4245 + 6.01431 Расчет нулей осуществляется таким образом: » А = [-R b % Формирование cd] % первой матрицы А = -1.11900 1.0000 0.1284 -36.4800 -1.5380 31.0960 0.6299 0 -0.0723 » В = [ -Q zeros(size(b)) % Формирование zeros(s1ze(c)) 0 ] % второй матрицы В = -1.0000 о о -0.1920 -1.0000 0 0 0 0 » [АА.ВВ] = qz(A.B) % Приведение матриц к форме Шура АА = 31.0963 -0.7169 -36.5109 0.0000 1.0647 0.9229
58 Урок 1 • MATLAB как научный калькулятор О 0.0000 0.5119 ВВ = 0 0 9860 -0 2574 О 0.0657 0.9964 О 0 -0.0354 » diag(AA) ./ diag(BB) X Вычисление нулей ans = Inf 16.2009 -14.4706 Вычисление собственных значений матричного полинома осуществляет функция polyeig. Обращение [R.d]=polyeig(AO,Al...АР) позволяет решить полную пробле- му собственных значений для матричного полинома степени р такого вида: (Ао + XAt + ... + Хр Ap)R =0. Входными аргументами этой функции являются р +1 квадратные матрицы А$, Aj,..., Ар порядка п, а выходными — матрица собственных векторов R размером цх(пхр) и вектор d собственных значений размером пхр Функция polyvalm предназначена для вычисления матричного полинома вида У(Х) = рпХ" + рп_1Xй-1 + ... +р2Х2 4-PiX + po по заданному значению матрицы X и вектора р = [р„, рп^, р0] коэффициентов полинома. Для этого достаточно использовать обращение вида Y=polyvalm(p.X). Например: р - 1 8 31 80 94 20 » X X - 12 3 0-13 2 2-1 » disp(polyvalm(p,X)) 2196 2214 2880 882 864 1116 1332 1332 1746 \ 2/^ПРИМЕЧАНИЕ Следует различать процедуры polyval и polyvalm. Первая вычисляет значе- । —А————— ние полинома для каждого из элементов матрицы аргумента, а вторая при вычислении полинома возводит в соответствующую степень всю матрицу ар- гумента. Функция subspace(A.B) вычисляет угол между двумя подпространствами, кото- рые «натянуты на столбцы» матриц А и В. Если аргументами являются не матри- цы, а векторы, то вычисляется угол между этими векторами. Аппроксимация и интерполяция данных Полиномиальная аппроксимация данных измерений, которые сформированы в ви- де некоторого вектора Y, при определенных значениях аргумента, образующих
Функции прикладной численной математики 59 вектор X такой же длины, как и вектор Y, осуществляется процедурой poly- fit(X.Y.n), где п — порядок аппроксимирующего полинома. Результатом дейст- вия этой процедуры является вектор длиной (и + 1) из коэффициентов аппрокси- мирующего полинома. Пусть массив значений аргумента имеет такой вид: X = [-0.45 -0.35 -0.25 -0.15 -0.05 0.05 0.15 0.25 0.35 0.45], а массив соответствующих значений измеренной величины: у = [-1.1 0.2 0.1 0.8 0.5 0.2 0.4 0.1 0.1 -6]. Тогда, применяя указанную функцию при разных значениях порядка аппрокси- мирующего полинома, получим: » х = -0.45 : 0.1 : 0.45: » у = [-1.1 0.2 0.1 » polyfit(x,y,l) 0.8 0.5 0.2 0.4 0.1 0.1 -0.6]: ans = 0.1393 » polyfit(x,y,2) 0.07 ans = -6.1364 0.13939 0.57625 » polyfit(x,y.3) ans - 7.4592 -6.1364 -0.95338 0.57625 » polyfit(x,y,4) ans = -35.548 7.4592 1.1509 -0.95338 0.40469 Это означает, что заданную зависимость можно аппроксимировать: О прямой у(х) = 0,13939г + 0,07; О параболой у(х) = -6,1364г2 + 0,13939г + 0,57625 О кубической параболой у(х) = 7,4592г3 - 6,1364г + 0,95338г + 0,57625 О параболой четвертой степени у(х) = -35,548г4 + 7,4592г3 - 1,1509г2 - 0,95338г + + 0,40469 Построим в одной области графики заданной дискретной функции и полученных при аппроксимации полиномов (рис. 1.16). AprjMew' Рис. 1.16. Результаты применения функции polyfit » х = -0.45 :*0.1 : 0.45: » у = [-1.1 0.2 0.1 0.8 0.5 0.2 0.4 0.1 0.1 -0.6];
60 Урок 1 • MATLAB как научный калькулятор » stem(x.y); hold on » Pl = polyfit(x.y.l); P2 = polyfit(x,y,2); P3 = polyfit(x,y.3): P4 = polyfit(x,y,4); » xl = -0.5 : 0.01 : 0.5; yl “ polyval(Pl.xl); y2 - polyval(P2.X1); » y3 - polyval (P3.xl); » y4 =« polyval (P4,xl); » plot(xl,yl.,xl,y2,':'.xl.y3,'.',xl,y4); » grid, set(gca, TontSize'. 12); » title('Полиномиальная аппроксимация'); » xlabel('Аргумент'); ylabel('Функция'); » legend('исходные'.'данные'. 'Аппроксимация'. 'линейная',‘квадратичная’,'кубическая', 'четвертой степени’,0) Функция spline(x.y,xi) осуществляет интерполяцию кубическими сплайнами. При использовании обращения yi=spline(x.y.xi) она интерполирует значение векто- ра у, заданного при значениях аргумента, представленных в векторе х, и выдает значение интерполирующей функции в виде вектора yl при значениях аргумента, заданных Виктором xi. В случае если вектор х не указан, по умолчанию принима- ется, что он имеет такую же длину, как вектор у, и любой его элемент равен номеру этого элемента. В качестве примера рассмотрим интерполяцию вектора: » х - -0.45 : 0.1 : 0.45; » у - [-1.1 0.2 0.1 0.8 0.5 0.2 0.4 0.1 0.1 -0.6]; » xl - -0.46:0.01:0.46; » у2 - spline(x.y.xl); » stem(x.y); hold on » plot (xl,y2.'.'). grid » set(gca. TontSize' .12), » title('Интерполяция процедурой SPLINE '); » xlabeK'Аргумент'); ylabel('Функция') Результаты приведены на рис. 1.17. Одномерную табличную интерполяцию осуществляет процедура interpl. В об- щем случае обращение к ней имеет такой вид: Yi=1nterpl(X. Y.Xi. '<нетод>'). В чет- вертом входном аргументе задается метод интерполяции (табл. 1.7). Таблица 1.7. Допустимые значения четвертого аргумента функции interpl Значение Метод интерполяции 'nearest' Ступенчатая 'linear1 Линейная 'cubic' Кубическая 'spline' Сплайновая Если метод не указан, по умолчанию осуществляется линейная интерполяция. Например (для того же вектора): » у - [-1.1 0.2 0.1 0.8 0.5 0.2 0.4 0.1 0.1 -0.6]: » xl - -0.46 : 0.01 : 0.46; » yl - interpl(x,y,xl); » у4 = interpl(x,у,xl,'nearest'); » у2 - 1nterpl(x,y.xl,'cubic'); » уЗ - interpKx.y.xl,'spline');
Функции прикладной численной математики 61 » plot (xl.yl,’ — ’,х1,у2,’.’,х1.у3.х1,у4,’:’), grid » set(gca, 'FontSize’,12), » 1egendl‘линейная’,’кубическая'.'сплайновая’.’ступенчатая’. 0): » title(’Интерполяция процедурой INTERP1'); » xlabelC Аргумент'); ylabel('Функция') Результаты приведены на рис. 1.18. Рис. 1.17. Интерполяция функцией spline Рис. 1.18. Интерполяция функцией interpl Векторная фильтрация и спектральный анализ В системе MATLAB есть несколько функций, предназначенных для проведения цифрового анализа данных наблюдений (измерений). Так, функция y=f 1 1 ter (b.а.х) обеспечивает формирование вектора у по заданным векторам Ь, а, х в соответст- вии с соотношением y(k) = fe(l) x(k) + b(2) x(k - 1) + ... + b(nh + 1) x(k - nb) - -a(2) y(k - 1) - a(3) y(k - 3) - ... - a(na +1) y(k - na) (1.1) Здесь вектор b имеет следующий состав: b = [А(1), Z>(2),..., b(nb + 1)]. Вектор а имеет такой состав: а = [1, а(2), а(3),.... а(па + 1)]. Соотношение (1.1) можно рассматривать как конечно-разностное уравнение фильтра с дискретной передаточной функцией в виде рациональной дроби, коэф- фициенты числителя которой образуют вектор Ь, а коэффициенты знаменате- ля — вектор а, на вход которого подается сигнал x(t), а на выходе формируется сигнал y(f). Тогда вектор у будет представлять собой значение исходного сигнала этого фильтра в дискретные моменты времени, соответствующие заданным зна- чениям входного сигнала x(t) (вектор х). Ниже приведен пример применения функции filter. » х = 0 : 0.1 : 1; » b = [1 2];
62 Урок 1 • MATLAB как научный калькулятор » а = [ 1 0.1 4]; » у - filter(b.a.x) У - 0 0.1000 0.3900 0.2610 -0.5861 0.3146 3.9129 0.2503 -13.4768 2.8466 56 4225 Функции fft (Fast Fourier Transformation) и ifft (Inverse Fast Fourier Transfor- mation) осуществляют преобразования заданного вектора, соответствующие дис- кретному прямому и обратному преобразованиям Фурье. Используя обращения к этим функциям видау=ТШх.п) и x=1fft(y,n), можно по- лучить вектор у (в первом случае) и вектор х (во втором случае) по формулам: j/(*) = £x(zn)e " ; (1.2) 1И=1 x(m) = -^y(k)e п (1.3) ”1=1 Здесь j — обозначение мнимой единицы, п — число элементов заданного вектора х (оно представляет также размер выходного вектора у). Сформируем входной сигнал в виде вектора, элементы которого равняются зна- чениям функции, являющейся суммой двух синусоид с частотами 5 и 12 Гц (рис. 1.19). » t - 0 : 0.001 : 2; » х - sin(2*pi*5*t) + cos(2*pi*12*t); » figure. plot(t, x); grid. » settgcf,'color','white'). setCgca.'FontName','Arial Cyr'.'FontSize'.16) » titlet'Входной процесс '): х1аЬе1('Врекя (c)'); ylabel('X(t)') Рис. 1.19. Бигармонический процесс Найдем Фурье-изображение этого сигнала и выведем графическое представле- ние модуля его Фурье-изображения. Результат отображен на рис. 1.20. » у = fft(x); а - abs(y): » plot(a): grid, settgca.'FontName','Arial Cyr'.'FontSize',16)
Функции прикладной численной математики 63 » title('Модуль Фурье-изображения ’): » xlabeK'Нойер элемента вектора'); ylabel('abs(F(X(t))') Теперь осуществим обратное преобразование с помощью функции 1 fft и резуль- тат также выведем в форме графика. » z - ifft(y); plot(t, z); » grid, set(gca,'FontName','Arial Cyr','FontSize',16) » title('Обратное Фурье-преобразование '); » xlabeK'Время (c)'); ylabel('Z(t)') На рис. 1.21 изображен результат. Нетрудно убедиться, что воспроизведенный процесс совпадает с исходным. Рис. 1.20. Модуль Фурье-изображения Рис. 1.21. Результат обратного преобразования Фурье Изучая формулу дискретного преобразования Фурье, можно заметить следующее. 1. Номер т отвечает моменту времени tn, в который измерен входной сигнал х(т), при этом ti = 0. 2. Номер k — это индекс значения частоты /*, которому отвечает найденный эле- мент y(k) дискретного преобразования Фурье. 3. Чтобы перейти от индексов к временной или частотной области, необходимо знать значение h дискрета (шага) времени, через который измерен входной сигнал x(t) и промежуток времени Т, на протяжении которого он измеряется; тогда шаг по частоте в Фурье-изображении определится соотношением ДГ=р (1-4) а диапазон изменения частоты — формулой (1.5) п Так, в анализируемом примере (Л = 0.001, Т = 2, п = 21) Df = 0.5; Т = 1000.
64 Урок 1 • MATLAB как научный калькулятор 4. Из пункта 2 следует, что индексу k = 1 отвечает нулевое значение частоты (/о = 0) Иначе говоря, первый элемент вектора г/(1) является значением Фу- рье-изображения при нулевой частоте, то есть просто суммой всех заданных значений вектора х, значит, вектор y(k) содержит значение Фурье-изображе- ния от частоты /о = 0 (которой отвечает k = 1) до максимальной частоты /max = F (которой отвечает k = п). Таким образом, Фурье-изображение опреде- ляется функцией fft только для положительных частот в диапазоне от 0 до F; это неудобно для построения графиков зависимости Фурье-изображения от частоты; более удобным и привычным представляется переход к вектору Фу- рье-изображения, определенному в диапазоне частот от -F/2 до F/2; частота Fn = F/2 получила название частоты Найквиста. 5. Как известно, функция е'* является периодической по z с периодом 2л; поэто- му информация о Фурье-изображении при отрицательных частотах располо- жена во второй половине вектора y(j£). Сформируем для анализируемого примера массив частот, исходя из вышесказан- ного: » f = 0 ; 0.5 : 1000 Выведем график с аргументом-частотой (рис. 1.22). » plot(f.a); grid. set(gca,'FontName'. Arial Cyr'.'FontSize’,16) » title('Модуль Фурье-изображения '); » xlabelCЧастота (Гц)'); ylabel('abs(F(X(t))') На этом графике непросто распознать те частоты (5 и 12 Гц), с которыми изменя- ется входной сигнал. Чтобы определить частотный спектр входного сигнала, нуж- но сначала преобразовать полученный вектор у Фурье-изображения с помощью функции fftshift. Функция fftshift (обращение к ней осуществляется таким образом: z=fftshift(y)) предназначена для формирования нового вектора г из заданного вектора у путем перестановки второй половины вектора у в первую половину вектора z. При этом вторая половина вектора z состоит из элементов первой половины вектора у. Более точно эту операцию можно задать р помощью приведенных ниже соотношений. z(l) = у(п/2 + 1);... z(k) = у(п/2 + k);... z(n/2) = у(п>, z(n/2 + 1) = г/(1);... z(n/2 + k) = y(k)\ ... z(ri) = y(ji/2). >> ^ПРИМЕЧАНИЕ Функцию fftshift удобно использовать для преобразования массива Фу- рье-изображения с целью построения его графика в частотной области. Тем не менее этот массив не может быть использован для обратного преобразо- вания Фурье. Применим данную функцию к предыдущему примеру (рис. 1.23). » fl = -500 : 0.5 : 500; X Перестройка вектора частот » v » fftshift(y); X Перестройка вектора Фурье-изображения » а = abs(v); X Нахождение нодуля » plot(fl(970 : 1030),а(970 : 1030)); grid, X Вывод графика
Функции прикладной численной математики 65 » set(gca.'FontName'.'Arial Cyr',’FontSize .16) » titleC'Модуль Фурье-изображения'); » xlabelC'Частота (Гц)'); ylabel('abs(F(X(t))') Модуль Фтсье- изображения 12001-----1--------.---------1—-----1-------- 1000 -----—i-----------------H-------H--------1 I eop ------1--------J.........L....—j‘--------- u 600 .......—j-------4---------!•------i--------j 400 ------j---------i--------l-------j......... 200 ------.........------------------j-------- °0 2QP ’400 600 600 101X1 ч<г г» ;ГЦ; Рис. 1.22. Модуль Фурье-изображения в частотной области Рис. 1.23. Преобразование Фурье-изображения функцией fftshift Из графика, представленного на рис. 1.23, уже становится очевидным, что в спек- тре входного сигнала есть две гармоники — с частотами 5 и 12 Гц. Однако по та- кому графику невозможно установить амплитуды этих гармоник. Для того чтобы исправить указанный недостаток, нужно вектор у Фурье-изображения разделить на число его элементов (N); в результате получим вектор комплексного спектра сигнала (рис. 1.24): » N = length(y); а = abs(v)/N; » plot(fl(970:1030).а(970:1030)): grid » set(gca.'FontName','Arial Cyr',’FontSize'.14.'Color','white'). » titleC'Модуль комплексного спектра'); » xlabelCЧастота (Гц)'); ylabel('abs(F(X(t))/N') Рис. 1.24. Комплексный амплитудный спектр сигнала При рассмотрении графика видно, что «амплитуды» всех составляющих гармо- ник равны 0,5. При этом нужно принять во внимание, что «амплитуды» распреде- лены между положительными и отрицательными частотами поровну, значит, они вдвое меньше действительной амплитуды соответствующей гармоники.
66 Урок 1 • MATLAB как научный калькулятор Построение простейших графиков Вывод результатов вычислений в наглядной графической форме является одной из важнейших процедур в инженерной и научной практике. MATLAB предостав- ляет для этого широкие возможности. Ознакомимся с некоторыми из средств по- строения графиков, предусмотренными системой. Процедура plot Вывод графиков в системе MATLAB — настолько простая и удобная операция, что ее можно использовать даже в режиме калькулятора. Основной функцией, обеспечивающей построение графиков на экране дисплея, является функция plot. Общая форма обращения к ней такова: plot(xl.yl.sl.x2.y2.s2....) Здесь xl, yl — заданные векторы, элементами которых являются массивы значе- ний аргумента (xl) и функции (yl), отвечающие первой кривой графика; х2, у2 — массивы значений аргумента и функции второй кривой и т. д. При этом предпо- лагается, что значения аргумента откладываются вдоль горизонтальной оси графи- ка, а значения функции — вдоль вертикальной оси. Переменные si, s2,... являются символьными (их указание не является обязательным). Любая из них может со- держать до трех специальных символов, определяющих соответственно: а) тип линии, которая соединяет отдельные точки графика; б) тип точки графика; в) цвет линии. Если переменные s не указаны, то типом линии по умолчанию является отрезок прямой, типом точки — пиксел, а цвет устанавливается в такой очередно- сти: синий, зеленый, красный, голубой, фиолетовый, желтый, черный, белый — в за- висимости от того, какая по очереди линия выводится на график. Например, об- ращение вида plot(xl,yl,x2.y2....) приведет к построению графика, в котором первая кривая будет линией, состоящей из отрезков прямых синего цвета, вторая кривая такого же типа — зеленой линией и т. д. Графики в MATLAB всегда выводятся в отдельное графическое окно, которое на- зывают фигурой. Допустим, нужно вывести график функции у = 3sin(x + л/3) для значений аргу- мента от -Зл до +3л с шагом л/100. Сначала сформируем массив значений аргу- мента х. » х - -3*р1 : pi/100 : 3*pi; Потом вычислим массив соответствующих значений функции: » у = 3*sin(x + pi/З): После этого построим график зависимости у(х). » plot(x.y) В результате на экране появится окно с графиком (рис. 1.25). Если вектор аргумента при обращении к функции pl ot не указан явно, то система по умолчанию принимает в качестве аргументов номера элементов вектора функ- ции. Например, после ввода команды plot (у) появится график, имеющий такой вид, как показано на рис. 1.26.
Построение простейших графиков 67 Графики, приведенные на рис. 1.25, 1.26, имеют следующие недостатки: О на них не нанесена сетка из координатных линий, что затрудняет чтение гра- фиков; О нет общей информации о кривой графика (заголовка); О неизвестно, какие величины отложены по осям графика. Рис. 1.25. Г рафик функции Рис. 1.26. Г рафик функции с указанием аргумента без указания аргумента Первый недостаток устраняется с помощью функции grid. Обратимся к этой функ- ции сразу после обращения к функции plot. » х - -3*pi : рт/1ОО : 3*р1: » у - 3*sin(x + pi/3): » plot(x.y), grid В этом случае график будет снабжен координатной сеткой (рис. 1.27). Рис. 1.27. Результат применения функции grid Ценной особенностью графиков, построенных в системе MATLAB, является то, что сетка координат всегда соответствует «целым» шагам изменения, поэтому графики являются «читабельными», то есть по графику можно отсчитывать зна- чение функции при любом заданном значении аргумента и наоборот.
68 Урок 1 • MATLAB как научный калькулятор Заголовок графика выводится с помощью процедуры title. Вызовем после обра- щения к процедуре plot процедуру title. » title('<TeKCT>') Над графиком появится текст, записанный между апострофами в скобках. При этом следует помнить, что текст всегда должен помещаться между апострофами. Аналогично можно вывести объяснения к графику, которые размещаются вдоль горизонтальной оси (функция xl abel) и вдоль вертикальной оси (функция yl abel). Наберем следующую совокупность операторов: » X - -3*pi : pi/100 : 3*р1; » у - 3*sin(x + рт/3): » plot(x.y). grid; » title ('Функция у » 3*sin(x + pi/3)*): » xlabel('x'): ylabel('y'): Поле фи1уры будет выглядеть так, как показано на рис. 1.28. Очевидно, что эта форма уже целиком удовлетворяет требованиям, предъявляемым к инженерным графикам. В среде MATLAB несложно выводить и графики функций, заданные параметри- чески. Например, нам необходимо построить график функции у(х), которая оп- ределена формулами: х = 4 е-0,05‘ sin t, у = 0,2 е-0,1 ‘ sin 2t. Выберем диапазон изменения параметра t от 0 до 50 с шагом 0,1 и наберем сово- купность операторов: » t - 0 : 0.1 : 50: » х - 4*exp(-0.05*t).*sin(t): » у = 0.2*exp(-0.1*t).*sin(2*t); » plot(x.y), grid, setlgcf,'color*,'white') » title ('Параметрическая функция x - 4*exp(-0.05t)*sin(t); у = 0.2*exp(-0.1t)*sin(2t)‘) В результате получим график, показанный на рис. 1.29. Рис. 1.28. Результат применения функций title, xlabel и ylabel Рис. 1.29. График параметрически заданной функции
Построение простейших графиков 69 Специальные графики Система MATLAB предоставляет очень удобную возможность — не указывать аргумент функции при построении ее графика. В таком случае в качестве аргумен- та система принимает номер элемента вектора, график которого строится. Благо- даря этому, например, можно построить «график вектора» (рис. 1.30): »х = [1 329684 6]; » plot (х), grid. title('График вектора X’) » ylabel('Значение элементов'), xlabel('Нойер элемента') Еще более наглядным является представление вектора в виде столбцовой диа- граммы с помощью функции bar (рис. 1.31): » Ьаг(х). Г1Ч1е('График вектора X') » xlabel('Номер элемента'), ylabel(’Значение элементов') Рис. 1.30. График вектора Рис. 1.31. Результат применения функции bar Если функция задана своими значениями при дискретных значениях аргумента и неизвестно, как она может изменяться в промежутках между значениями аргу- мента, удобнее представлять ее график в виде отдельных вертикальных линий для любого из заданных значений аргумента. Это можно сделать, применяя про- цедуру stem, обращение к которой аналогично обращению к процедуре plot: »х = [1 329684 6]; » stem(x.'k'), grid, set(gca,'FontSize',14); » titleC График вектора X') » ylabel('Значение элементов’), xlabeK'Номер элемента') На рис. 1.32 изображен полученный при этом график. Теперь рассмотрим построение графика функции в виде столбцовой диаграммы (рис. 1.33): » х = - 2.9 : 0.2 : 2.9; у = ехр(-х .* X) » bar(x.y). set(gca.’FontSize'.14) » title('Столбцовая диаграмма функции у = ехр(-хЛ2)‘) » xlabel ('Аргумент х'), ylabel ('Значение функции у')
70 Урок 1 • MATLAB как научный калькулятор Рис. 1.32. График, построенный Рис. 1.33. Столбцовая диаграмма с помощью функции stem функции Еще одной полезной функцией является hist (построение графика гистограммы заданного вектора). Стандартное обращение к ней имет вид: hist(y.x), где у — вектор, гистограмму которого нужно построить; х — вектор, элементы которого определяют интервалы изменения первого вектора (внутри них подсчитывается количество элементов вектора у). Эта функция осуществляет две операции: О подсчитывает количество элементов вектора у, значения которых попадают внутрь соответствующего диапазона, указанного вектором х; О строит столбцовую диаграмму подсчитанных чисел элементов вектора у как функцию диапазонов, указанных вектором х. В качестве примера рассмотрим построение гистограммы случайных величин, ко- торые формируются встроенной функцией randn. Общее количество элементов вектора этих случайных величин пусть будет равно 10 000. Построим гистограм- му для диапазона изменения этих величин от -2,9 до +2,9. Примем интервалы из- менения равные 0,1. Тогда график гистограммы можно построить с помощью со- вокупности таких операторов: » X - -2.9 : 0.1 ; 2.9; у - randn(lOOOO.l); » hist(y.x), set(gca,'fontsize',14); » ylabeU'Количество из 10000'). xlabelCАргумент'); » title('Гистограмма нормального распределения') Результат представлен на рис. 1.34. Видно, что встроенная функция randn доста- точно верно отображает нормальный гауссов закон распределения случайной ве- личины. Процедура comet(x .у) («комета») строит график зависимости у(х) постепенно в ви- де траектории кометы. При этом «изображающая» точка на графике имеет вид маленькой кометы, которая плавно перемещается от одной точки к другой. Напри- мер, введем такую совокупность операторов: » t - 0 : 0.1 : 50; » х - 4*exp(-0.05*t).*sin(t); » у - 0.2*exp(-0.1*t).*sin(2*t): » comet(x.y)
Построение простейших графиков 71 Рис. 1.34. Гистограмма функции randn Тогда график, приведенный на рис. 1.29, будет построен в виде траектории дви- жения кометы. Такие графики удобно использовать при анализе характера изме- нения траектории во времени. MATLAB имеет несколько функций, которые позволяют строить графики в лога- рифмическом масштабе. К примеру, функция logspace с обращением x=logspa- ce(dl.d2.n) формирует вектор-строку х, содержащую п равноотстоящих в лога- рифмическом масштабе друг от друга значений в диапазоне от 10Л до Ю'Я Функция loglog аналогична функции plot, но графики по обеим осям строятся в логарифмическом масштабе. Построение графиков, в которых используется логарифмический масштаб толь- ко по одной из координатных осей, осуществляется с помощью процедур semilogx и semi logy. Первая процедура строит графики с логарифмическим масштабом вдоль горизонтальной оси, вторая — вдоль вертикальной. Обращение к последним трем процедурам аналогично обращению к функции plot. В качестве примера рассмотрим построение графиков амплитудно-частотной и фазово-частотной характеристик звена, описываемого передаточной функцией: ™<Р> = 2-Р+—-~- pl + 4р + 100 Для этого нужно, во-первых, создать полином числителя передаточной функции Pc = [1 4] и полином знаменателя передаточной функции Pz = [1 4 100], во-вто- рых — определить корни этих двух полиномов: » Pl - [1 4]: Р2 - [1 4 100]; » roots(Pl) ans - -4 » roots(P2) ans - -2.0000e+000 +9.7980e+000i -2.0000e+000 -9 7980e+000i В-третьих, следует задать диапазон изменения частоты так, чтобы он охватывал все найденные корни. » ornO - 1е-2; отк = 1е2
72 Урок 1 • MATLAB как научный калькулятор Теперь нужно задать количество точек графика (например, п = 41) и сформиро- вать массив точек по частоте в логарифмическом масштабе. » ОМ » logspace(-2.2,41) Здесь значения -2 и +2 отвечают десятичным порядкам начального отО и конеч- ного omk значений частоты. Пользуясь функцией polyval, можно вычислить сначала вектор ch комплексных значений числителя частотной передаточной функции, отвечающих заданной пе- редаточной функции по Лапласу, если в качестве аргумента функции polyval ис- пользовать сформированный вектор частот ОМ, элементы которого умножены на мнимую единицу. Аналогично вычисляется комплекснозначный вектор zn знаме- нателя ЧПФ. Вектор значений АЧХ (амплитудно-частотной характеристики) можно найти, рас- считывая модули векторов числителя и знаменателя ЧПФ и поэлементно деля полученные векторы. Чтобы найти вектор значений ФЧХ (фазово-частотной ха- рактеристики), нужно разделить поэлементно комплекснозначные векторы числи- теля и знаменателя ЧПФ и определить вектор аргументов элементов полученно- го вектора. Для того чтобы фазу представить в градусах, полученные результаты следует умножить на 180 и разделить на п. Наконец, для построения графика АЧХ в логарифмическом масштабе, достаточ- но применить функцию loglog, а для построения ФЧХ удобнее воспользоваться функцией senrilogx. В целом последовательность действий может быть такой (результат представлен на рис. 1.35 и 1.36): » Р1 ° [1 4]; Р2 = [1 4 100]; ОМ » logspace(-2,2,40); р = 1*0М; » ch = polyval(Pl.р); zn polyval(Р2.р); » ACH = abs(ch)./abs(zn): FCH - angle(ch./zn)*180/pi; » loglog(OM,ACH): grid; set(gca,'FontSize'.14) » Ш1е('График амплитудно-частотной характеристики') » xlabel('Частота (рад/с)’); ylabel('Отношение амплитуд') » figure, senrilogx(0M.FCH); grid » title(’Фазово-частотная характеристика') » xlabel('Частота (рад/с)'), ylabel('Фаза (градусы)') Рис. 1.35. График амплитудно-частотной Рис. 1.36. График фазово-частотной характеристики характеристики
Построение простейших графиков 73 Дополнительные функции графического окна Обычно графики, получаемые с помощью процедур plot, loglog, semilogx и semi- logy, автоматически строятся в таких масштабах по осям, чтобы в поле графика поместились все его вычисленные точки, включая максимальные и минимальные значения аргумента и функции. Тем не менее в MATLAB имеется возможность устанавливать и другие режимы масштабирования. Это достигается за счет ис- пользования функции axis: О axis([xmin xmax ymin ушах]) — устанавливает жесткие границы поля графика в единицах величин, которые откладываются по осям; О ахтs( 'auto') — приводит масштабы по осям к их штатному значению (приня- тому по умолчанию); О axis('ij') — перемещает начало отсчета в левый верхний угол (матричная система координат); О axi s (' ху') — возвращает декартову систему координат с началом отсчета в ле- вом нижнем углу графика; О axis( 'square') — устанавливает одинаковый диапазон изменения переменных по осям графика; О axis( 'equal') — обеспечивает одинаковый масштаб по обеим осям графика. В одном графическом окне, но на отдельных графических полях, можно постро- ить несколько графиков, используя процедуру subpl ot. Обращение к этой проце- дуре должно предшествовать обращению к процедурам pl ot, 1 ogl og, semi 1 ogx и se- milogy и иметь такой вид: subplot(m.n.p). Здесь m указывает, на сколько частей разделяется графическое окно по вертикали, п, соответственно, — по горизонта- ли, а р является номером подокна, в котором будет строиться график. При этом подокна нумеруются слева направо построчно сверху вниз (так, как читается текст). Например, два предыдущих графика можно поместить в одно графическое окно следующим образом (результат представлен на рис. 1.37): » subplot(2,1.1); » loglog(OM,ACH,'k'); grid; » set(gca, 'FontSize',12) » title('Амплитудно-Частотная Характеристика'); » ylabeK'Амплитуда'), subplot(2.1,2); » semilogx(OM.FCH,'k'); grid » title('Фазо-Частотная Характеристика') » xlabelCЧастота (рад/с)'); у!аЬеК'Фаза (гр.)') Команда text(х.у, '<текст>') позволяет расположить указанный текст в поле гра- фика, при этом начало текста помещается в точку с координатами х и у. Значения указанных координат должны быть представлены в единицах величин, отклады- ваемых по осям графика, и находиться внутри диапазона изменения указанных величин. Часто такое представление бывает неудобным, поскольку для него не- обходимо знать этот диапазон, что не всегда возможно.
74 Урок 1 • MATLAB как научный калькулятор Счзо-Частотна я Х«₽»кг«₽исгига Рис. 1.37. Использование функции subplot Более удобно для размещения текста внутри поля графика использовать команду gtext( '<текст>'), в результате вызова которой в активном графическом окне по- является перекрестие; его перемещение с помощью мыши позволяет указать место начала вывода указанного текста. После этого посредством щелчка левой кноп- кой мыши или нажатия любой клавиши текст вводится в указанное место: » gtextCA Ч X’) » gtextCO Ч Х‘) Именно таким образом установлены соответствующие записи на поле графиков, представленных на рис. 1.37. Чтобы создать несколько графических окон, в каждом из которых расположены соответствующие графики, можно воспользоваться командой figure. Эта команда создает новое графическое окно, оставляя предыдущие. Наконец, для того чтобы несколько последовательно вычисленных графиков были изображены в графическом окне в одном стиле, можно использовать команду hold on, тогда каждый график будет строиться в том же предварительно открытом графическом окне, то есть каждая новая линия будет добавляться к ранее постро- енным. Команда hold off выключает режим сохранения графического окна, уста- новленного предшествующей командой. Вывод графиков на печать Чтобы вывести график из графического окна (фигуры) на печать, следует вос- пользоваться командами меню, расположенного в его верхней части. Выберите команду Файл ► Печать. Подготовьте принтер к работе и щелкните на кнопке ОК в окне печати — содержимое графического окна будет распечатано на отдельном листе бумаги. Операторы управления вычислительным процессом Вообще говоря, операторы управления необходимы главным образом для органи- зации вычислительного процесса, который записывается в виде некоторого текста
Операторы управления вычислительным процессом 75 программы на языке программирования высокого уровня. При этом к операто- рам управления вычислительным процессом обычно относят операторы безус- ловного перехода, операторы условных переходов (разветвления вычислительного процесса) и операторы организации циклических процессов. Тем не менее систе- ма MATLAB построена таким образом, что эти операторы могут быть использо- ваны и при работе в режиме калькулятора. В языке MATLAB отсутствует оператор безусловного перехода и, соответствен- но, нет понятия метки. Это обстоятельство затрудняет организацию перехода вычислительного процесса к любому предшествующему или последующему опе- ратору программы. Все операторы цикла и условного перехода построены в MATLAB в виде состав- ных операторов, которые начинаются служебным словом if, while, switch или for и заканчиваются служебным словом end. Операторы, расположенные между ни- ми, воспринимаются системой как части одного сложного оператора. Поэтому нажатие клавиши Enter при переходе к следующей строке не приводит в данном случае к выполнению указанных операторов. Выполнение операторов начинает- ся лишь тогда, когда введена «завершающая скобка» сложного оператора в виде слова end, а затем нажата клавиша Enter. Если несколько составных операторов такого типа вложены один в другой, вычисления начинаются лишь тогда, когда записан конец end внешнего составного оператора. Это обусловливает возмож- ность осуществления даже в режиме калькулятора довольно сложных вычисле- ний, состоящих из многих строк и операторов, если они охвачены составным опе- ратором. Оператор условного перехода В общем виде синтаксис оператора условного перехода таков: if «условие* «операторы!* else «операторы2> end Работает этот оператор следующим образом. Сначала производится проверка, вы- полняется ли указанное условие. Если результат проверки положителен, програм- ма выполняет совокупность операторов <операторы1>. В противном случае выпол- няется последовательность операторов <операторы2>. Сокращенная форма условного оператора имеет такой вид: if «условие* «операторы* end Действует оператор аналогично, за исключением того, что во втором случае вы- полняется оператор, следующий за ключевым словом end. Хорошо видны недос- татки этого оператора, наличие которых связано с отсутствием оператора безус- ловного перехода: все части программы, выполняемые в зависимости от условия, должны размещаться внутри операторных скобок i f и end.
76 Урок 1 • MATLAB как научный калькулятор В качестве условия используются выражения типа <имя_леременной1> <знак_операции сравнения» <имя_переменной2» В языке MATLAB могут выполняться различные операции сравнения: < (мень- ше), > (больше), <= (меньше или равно), >= (больше или равно), = (равно), ~= (не равно). Условие может быть составным, то есть состоять из нескольких простых усло- вий, объединенных знаками логических операций: О & — операция И (AND); О | — операция ИЛИ (OR); О — операция НЕТ (NOT). Логическая операция исключающее ИЛИ может быть реализована с помощью функции хог(А.В), где А и В — некоторые условия. Допустима еще одна конструкция оператора условного перехода: If <условие1> _ <операторы1> elseif <условие2> <операторы2> el seif <условиеЗ» <операторыЗ> else <операторы> end Оператор el sei f выполняется тогда, когда <условие1> не выполнено. При этом сна- чала проверяется <условие2>. Если оно выполнено, выполняются <операторы2>, в противном случае <операторы2> игнорируются и происходит переход к следую- щему оператору el self, то есть к проверке выполнения <условияЗ>. Аналогично, при его выполнении выполняются <операторыЗ>, в противном случае происходит переход к следующему оператору el seif. Если ни одно из условий в операторах el seif не выполнено, выполняются <операторы>, размещенные за оператором else. Таким образом может быть обеспечено разветвление программы в нескольких направлениях. Оператор переключения Оператор переключения имеет такой синтаксис. switch выражение. скаляр или строка символов» case <значение1> <операторы1> case <значение2> <операторы2> otherwise <операторы> end С его помощью можно реализовать разветвление вычислений в зависимости от значений некоторой переменной или выражения, сравнивая значение, полученное в результате вычисления выражения в строке switch, со значениями, указанными
Операторы управления вычислительным процессом 77 в строках со словом case. Соответствующая группа операторов case выполняется, если значение выражения совпадает со значением, указанным в соответствующей строке case. Если же значение выражения не совпадает ни с одним из значений в группах case, выполняются операторы, которые следуют за словом otherwi se. Операторы цикла В языке MATLAB есть две разновидности операторов цикла — условный и ариф- метический. Оператор цикла с предусловием имеет такой вид: while <условие> <операторы> end Операторы внутри цикла выполняются лишь в случае, если выполнено условие, записанное после слова whi 1 е. При этом среди операторов внутри цикла обяза- тельно должны быть такие, которые изменяют значение одной из переменных, указанных в условии цикла. Приведем пример вычисления значений синуса при 21 значении аргумента от 0,2 до 4 с шагом 0,2: » 1 = 1; » while i <= 20 х - 1/5; si = sin(x); disp([x.si]) i - I + 1; end 0.2000 0.1987 0.4000 0.3894 0.6000 0.5646 0.8000 0.7174 1.0000 0.8415 1.2000 0.9320 1.4000 0.9854 1.6000 0.9996 1.8000 0.9738 2.0000 0.9093 2.2000 0.8085 2.4000 0.6755 2.6000 0.5155 2.8000 0.3350 3.0000 0.1411 3.2000 -0.0584 3.4000 -0.2555 3.6000 -0.4425 3.8000 -0.6119 4.0000 -0.7568 Обратите внимание на то, какими средствами в указанном примере обеспечен вывод на экран значений нескольких переменных в одну строку. Для этого ис- пользуется оператор di sp. Но, в соответствии с правилами применения этого опе- ратора, в нем должен быть только один аргумент (текст, переменная или матрица). Чтобы обойти это препятствие, нужно несколько числовых переменных объеди- нить в один объект — вектор-строку, а последнее легко выполняется с помощью
78 Урок 1 • MATLAB как научный калькулятор обычной операции формирования вектора-строки из отдельных элементов xl, х2, х. Таким образом, с помощью оператора вида disp([xl.x2....х]) можно обеспечить вывод результатов вычислений как таблицы данных. Арифметический оператор цикла имеет такой вид: for <имя> - <НЗ> ; <Ш> : <КЗ> <операторы> end Здесь <иня> — это имя управляющей переменной цикла (счетчика цикла); <НЗ> — заданное начальное значение этой переменной; <Ш> — значение шага, с которым она должна изменяться; <КЗ> — конечное значение переменной цикла. В этом слу- чае операторы внутри цикла выполняются многократно (каждый раз при новом значении управляющей переменной) до тех пор, пока значение управляющей пе- ременной не выйдет за пределы интервала между <НЗ> и <КЗ>. Если параметр <Ш> не указан, по умолчанию его значение принимается равным 1. Чтобы досрочно выйти из цикла (например, при выполнении некоторого усло- вия) применяют оператор break. Когда программа сталкивается с этим операто- ром, выполнение цикла прекращается и начинает выполняться оператор, следую- щий за словом end цикла. Для примера используем предыдущую задачу: » а - 1 х » disp(a) х> for 1 - 1 : 20 х - 1/5: si - sin(x): disp([1,x,s1]) end sin(x) В результате получим: 1 X sin(x) 1.0000 0.2000 0 1987 2.0000 0.4000 0.3894 3.0000 0.6000 0.5646 4.0000 0.8000 0.7174 5.0000 1.0000 0 8415 6.0000 1.2000 0 9320 7.0000 1.4000 0.9854 8.0000 1.6000 0.9996 9.0000 1.8000 0.9738 10 0000 2.0000 0.9093 11.0000 2.2000 0.8085 12.0000 2.4000 0.6755 13.0000 2.6000 0.5155 14.0000 2.8000 0.3350 15.0000 3.0000 0.1411 16 0000 3.2000 -0 0584 17.0000 3.4000 -0.2555 18.0000 3.6000 -0.4425 19.0000 4.0000 -0.7568 Так можно обеспечить вывод информации в виде таблиц.
Команды общего назначения 79 Команды общего назначения Работа в среде MATLAB связана с необходимостью поиска и просмотра файлов, путей их расположения, управления переменными, командным окном и т. п. Эти функции осуществляют команды общего назначения, описание которых с раз- бивкой на группы приведено в табл. 1.8. Таблица 1.8. Команды общего назначения Команды Описание Управляющие команды и функции help Вывести на экран первые строки описания указанной программы или функции what Вывести на экран перечень имен М-, МАТ- и МЕХ-файлов в текущей папке type lookfor which demo path Вывести на экран текст указанного М-файла Найти программу (функцию) по указанному ключевому слову Вывести на экран полный путь к указанной функции или файлу Запустить программу демонстрации возможностей MATLAB Вывести на экран полный перечень путей поиска файлов MATLAB по умолчанию Команды управления переменными и рабочим пространством who whos load Вывести на экран перечень текущих переменных Представить перечень текущих переменных в расширенной форме Загрузить в рабочее пространство значения переменных из указанного файла на диске save Записать значения переменных рабочего пространства в указанный файл на диске clear pack size length disp Очистить память ПК от переменных и функций Уплотнить память рабочего пространства Определить размеры двумерного массива Определить длину одномерного массива Вывести на экран матрицу или текст Команды работы с файлами и операционной системой cd dir delete Заменить текущий каталог указанным каталогом Вывести на экран листинг указанной папки Уничтожить (стереть) указанный файл getenv ! Вывести значение параметров окружения (среды) Выполнить как команду операционной системы (применяется после указания команды операционной системы) Unix diary Выполнить как команду операционной системы и вывести результат Записать текст командного окна в дневник MATLAB продолжение &
80 Урок 1 • MATLAB как научный калькулятор Таблица 1.8 (продолжение) Команды Описание Команды управления командным окном cedit Установить командную строку редактора клавиш clc Очистить командное окно home Перевести курсор на начало страницы format Установить указанный формат вывода чисел на экран echo Установить или отменить режим зхопечати текста выполняемой программы more Установить режим постраничного вывода текста в командное окно Команды запуска MATLAB и выхода из MATLAB quit Выйти из MATLAB startup Запустить MATLAB через М-файл startup matlabrc Запустить главный стартовый М-файл Команды получения общей информации info subscribe whatsnew version Вывести информацию о системе MATLAB и о компании MathWorks, Inc. Зарегистрироваться по Internet в качестве пользователя MATLAB Вывести информацию о новых средствах, которые не вошли в документацию Вывести информацию об установленной версии MATLAB ver Вывести информацию о версиях всех программных продуктов, которые входят в поставленный комплект системы MATLAB Вопросы для самопроверки 1. Каким образом представляются действительные числа при вычислениях в сис- теме MATLAB? 2. Как можно изменить формат представления действительных чисел в команд- ном окне? 3. Каким образом объявляются переменные в языке MATLAB? 4. Как добиться того, чтобы результат действий, записанных в очередной строке: а) выводился в командное окно; б) не выводился на экран? 5. Какую роль играет системная переменная ans? 6. Как возвратить в командную строку ранее введенную команду? 7. Как ввести значения комплексного числа и в каком виде оно будет выведено на экран? к 8. Как в языке MATLAB обеспечить сложение, вычитание, умножение, деление и возведение в степень комплексных чисел? 9. Какие функции работы с комплексными числами предусмотрены в языке MATLAB?
Вопросы для самопроверки 81 10. Как вводятся векторы в языке MATLAB? С помощью каких функций можно формировать векторы? 11. Какие функции MATLAB позволяют преобразовать вектор поэлементно? 12. С помощью каких средств в MATLAB осуществляются основные операции с векторами? 13. Как вводятся матрицы в системе MATLAB? 14. Как сформировать матрицу, а) по заданным векторам ее строк; б) по заданным векторам ее столбцов; в) по заданным векторам ее диагоналей? 15. Какие функции MATLAB осуществляют поэлементное преобразование матриц? 16. Как осуществляются в MATLAB обычные матричные операции? 17. Как можно решить в MATLAB систему линейных алгебраических уравнений? 18. Какой объект в MATLAB называется полиномом? 19. Как осуществляется умножение и деление полиномов? 20. С помощью каких функций можно найти: а) корни заданного полинома; б) зна- чение полинома по известному значению аргумента? 21. Какие функции позволяют найти производную от полинома? 22. Как найти характеристический полином матрицы? 23. Какие функции MATLAB осуществляют вывод графиков на экран? 24. Какие функции позволяют обеспечить снабжение графика координатными линиями и надписями? 25. Как выводится график в виде столбцовой диаграммы? 26. Как можно построить гистограмму в MATLAB? 27. Можно ли построить несколько графиков в одной системе координат и в од- ном графическом окне? 28. Каким образом можно вывести несколько отдельных графиков в разных гра- фических окнах? 29. Как построить несколько отдельных графиков: а) в одном графическом окне; б) в разных графических полях? 30. Какие средства управления ходом вычислительного процесса предусмотрены в языке MATLAB? 31. Как можно организовать вычисления по циклу? 32. Как организовать вывод в командное окно MATLAB таблицы с результатами вычислений?
~Ж)К Программирование в среде MATLAB □ Функции функций □ Создание М-файлов □ Создание простейших файлов-функций □ Создание файлов-сценариев О Графическое оформление результатов О Создание функций от функций □ Пример создания сложной программы
Функции функций 83 Работа в режиме калькулятора в среде MATLAB, несмотря на предоставляемые этим режимом возможности, во многих отношениях неудобна. Вы не можете по- вторить предыдущие вычисления и действия при новых значениях исходных дан- ных без повторного набора соответствующих операторов. Нельзя возвратиться назад и повторить некоторые действия или по определенному условию перейти к выполнению другой последовательности операторов. Кроме того, при большом количестве операторов трудно отладить их работу из-за неминуемых ошибок при наборе команд. Поэтому вычисления с прерываниями, сложными переходами по определенным условиям, с часто повторяемыми однотипными действиями, кото- рые к тому же необходимо проводить при измененных исходных данных, требуют специального оформления в виде программ. Преимущество такого подхода оче- видно. Поскольку программы зафиксированы в виде записанных на диске фай- лов, становится возможным многократное обращение к одним и тем же операто- рам и к программе в целом. Это позволяет упростить отладку программы, сделать процесс вычислений более наглядным и прозрачным, что ведет к значительному уменьшению чисЛа ошибок при разработке программ. Вместе с тем появляется возможность автоматизировать в программах процесс изменения значений пер- воначальных параметров в диалоговом режиме. Функции функций Ряд важных универсальных процедур в MATLAB используют в качестве пере- менного параметра имя функции, с которой они оперируют. Поэтому при обраще- нии к этим процедурам необходимо указывать имя М-файла, содержащего текст другой процедуры (функции). Такие процедуры называют функциями функ- ций. Чтобы воспользоваться функцией функции, пользователь должен создать М-файл, в котором вычислялось бы значение нужной («внутренней») функции по известному значению ее аргумента. Приведем некоторые из стандартных функций от функций, предусмотренных в MATLAB. Вычисление интеграла методом квадратур осуществляется процедурой [Lent] - quad( '<иня_функции>‘ ,a.b) Здесь а и b — нижняя и верхняя границы изменения аргумента функции; I — полученное значение интеграла; ent — количество обращений к функции, пред- ставленной М-файлом с названием, указанным в строке символов <имя_функции>. Функция quad использует квадратурные формулы Ньютона-Котеса четвертого порядка. В аналогичной процедуре quad8 применяются более точные формулы 8-го порядка. Интегрирование обыкновенных дифференциальных уравнений осуществляют функции ode23 и ode45. Они могут применяться как для численного решения (ин- тегрирования) простых дифференциальных уравнений, так и для моделирования сложных динамических систем, то есть систем, поведение которых можно описать посредством совокупности обыкновенных дифференциальных уравнений (ОДУ).
84 Урок 2 • Программирование в среде MATLAB Известно, что любая система ОДУ может быть представлена как система уравне- ний 1-го порядка в форме Коши: at где у — вектор переменных состояния (фазовых переменных системы); t — аргу- мент (обычно время); f — нелинейная вектор-функция переменных состояния у и аргумента t. Обращение к процедурам численного интегрирования ОДУ выглядит следую- щим образом: [t.y] - ode23('<имя_функции>'.tspan.yO.options) [t.y] - ode45('<имя_функции>‘.tspan.yO.options) Используемые параметры имеют такой смысл: О <имя_функции> — строка символов, представляющая собой имя М-файла, в ко- тором вычисляется вектор-функция f(y,t), то есть правые части системы ОДУ; О уО — вектор начальных значений переменных состояния; О t — массив рассчитанных значений аргумента, отвечающих шагам интегриро- вания; О у — матрица проинтегрированных значений фазовых переменных, в которой каждый столбец соответствует одной из переменных состояния, а строка со- держит значения переменных состояния, отвечающие соответствующему ша- гу интегрирования; О tspan — вектор-строка [tO tfinal], содержащая два значения: tO — начальное значение аргумента и tfinal — конечное; О options — строка, состоящая из параметров, которые определяют значения до- пустимой относительной и абсолютной погрешности интегрирования. Параметр options можно не указывать. Тогда по умолчанию допустимая отно- сительная погрешность интегрирования принимается равной 1-10-3, абсолютная (по любой из переменных состояния) — 1-Ю-6. Если же эти значения не устраи- вают пользователя, нужно перед обращением к процедуре численного интегриро- вания установить с помощью процедуры odeset новые значения допустимых по- грешностей options - odeset('RelTor.le-4,'AbsTor.[le-4 le-4 le-5]) Параметр RelTol определяет относительную погрешность численного интегриро- вания по всем фазовым переменным одновременно, а параметр AbsTol является вектором-строкой, состоящей из значений абсолютных допустимых погрешно- стей численного интегрирования по каждой из фазовых переменных. Функция ode23 осуществляет интегрирование численным методом Рунге-Кутта 2-го порядка, а с помощью одноименного метода 3-го порядка она контролирует относительные и абсолютные погрешности интегрирования на каждом шаге и из- меняет величину шага интегрирования так, чтобы обеспечить заданные границы погрешностей интегрирования.
Функции функций 85 Для функции ode45 основным методом интегрирования является метод Рунге— Кутта 4-го порядка, а величина шага контролируется методом Рунге-Кутта 5-го порядка. . Вычисление минимумов и нулей функции осуществляется следующими функ- циями MATLAB: О fmin — отыскивает минимум функции одного аргумента; О fmins - отыскивает минимум функции нескольких аргументов; О fzero — отыскивает нули функции одного аргумента. Обращение к первой из указанных функций в общем случае имеет такой вид: Xnrin - fnrin('<имя_функции>'.Х1.Х2) Результатом этого обращения будет значение Xmin аргумента функции, которое отвечает локальному минимуму в интервале Х1<Х<Х2 функции, заданной М-фай- лом с указанным именем. В качестве примера рассмотрим нахождение значения числа л как значения локального минимума функции у = cos (х) на отрезке [3,4]: » Xmin - fmin('cos',3.4) Xmin - 3.1416e+000 Обращение ко второй процедуре должно иметь такую форму: Xmin = fmins('<иня_функции>',Х0) Здесь X является вектором аргументов, а ХО — начальным (исходным) значением этого вектора. Отыскивается ближайший локальный минимум функции, задан- ной М-файлом с указанным именем. Функция fmi ns находит вектор аргументов Xmin, отвечающий найденному локальному минимуму. Обращение к функции fzero должно выглядеть следующим образом: z - fzero(‘<иня_функции>'.xO.tol.trace) Здесь хО — начальное значение аргумента, в окрестности которого отыскивается действительный нуль функции, значение которой вычисляется в М-файле с за- данным именем; tol — заданная погрешность вычисления нуля; trace — параметр, указывающий на необходимость вывода на экран промежуточных результатов; z — значение аргумента, соответствующего нулю функции. График функции одной переменной можно построить с помощью процедуры fplot. Ее отличие от процедуры plot в том, что для построения графика функции нет необходимости в предшествующем вычислении значений функции и аргу- мента. Обращение к функции fplot имеет такой вид: fplot('<имя_функции>',[<интервал>].п) Здесь <интервал> — это вектор-строка, содержащая два числа, которые задают, соответственно, нижнюю и верхнюю границы изменения аргумента; <имя_функ- ции> — имя М-файла с текстом процедуры, вычисляющей значение функции по заданному значению ее аргумента; п — число частей, на которые желательно раз- бить указанный интервал. Если последнюю величину не задать, по умолчанию ин- тервал разбивается на 25 частей. И хотя количество частей (п) задано, количество
86 Урок 2 • Программирование в среде MATLAB значений вектора х может быть значительно большим за счет того, что функция fplot проводит вычисления с дополнительным ограничением, чтобы приращение угла наклона графика функции на каждом шаге не превышало 10”. Если же оно оказывается большим, осуществляется дробление шага изменения аргумента, но не более чем на 20 частей. Последние два числа (10 и 20) могут быть изменены пользователем, для этого при обращении следует добавить новые значения в за- головок процедуры в указанном порядке. График функции не отобразится на экране (в графическом окне), если обратить- ся к процедуре таким образом: [x.Y] - fplot('<имя_функции>'.[«интервал»],п) Вместо этого будет вычислен вектор х аргументов и вектор (или матрица) Y соот- ветствующих значений указанной функции. Чтобы затем построить график, не- обходимо использовать процедуру plot(x.Y). М-файлы Рассмотрим принципы и особенности написания программ и процедур, работаю- щих в среде MATLAB. Такие программы, представляющие собой код на языке MATLAB, хранятся в М-файлах. Особенности М-файлов В среде MATLAB программы создаются с помощью либо собственного встроен- ного редактора (начиная с версии MATLAB 5.0), либо внешнего текстового ре- дактора, который вызовется автоматически, если его предварительно установить посредством команды Файл ► Предпочтения командного окна MATLAB. Напри- мер, это может быть редактор Notepade среды Windows. Окно предварительно установленного редактора появляется на экране после активизации команды Файл ► Новый ► М-файл или выбора названия одного из существующих М-файлов при вызове в командном окне команды Файл ► Открыть. В первом случае окно тек- стового редактора будет пустым, во втором — в нем будет содержаться текст вы- званного М-файла. В обоих случаях окно текстового редактора готово для ввода нового текста или корректировки существующего. Есть две разновидности М-файлов — это так называемые файлы-сценарии (управ- ляющие программы) и файлы-функции (процедуры). И те, и другие должны иметь расширение имени файла .ш (оно автоматически устанавливается при сохране- нии файла на диске), то есть их нельзя различить по типу файла. В виде фай- лов-сценариев оформляют основные программы, управляющие от начала до кон- ца организацией всего вычислительного процесса, и отдельные части основных программ. Как файлы-функции оформляются отдельные процедуры и функции, то есть те части программы, которые рассчитаны на неоднократное использование файлами-сценариями или другими процедурами при измененных значениях ис- ходных параметров и не могут быть выполнены, если предварительно не задать значения переменных, называемых входными.
М-файлы 87 Главным отличием кода этих двух видов М-файлов является то, что файлы-функ- ции имеют первую строку (заголовок) вида function <ПКВ> = <имя_процедуры>(<ПВВ>) Здесь ПКВ — перечень выходных величин; ПВВ — перечень входных величин. Фай- лы-сценарии такой строки не имеют. Принципиальное же отличие состоит в различном восприятии системой имен пе- ременных в файлах этих двух видов. В файлах-функциях все имена переменных, находящиеся внутри файла, а также имена, указанные в заголовке (ПКВ и ПВВ), воспринимаются как локальные, то есть все значения этих переменных после завершения работы процедуры исчезают, и область оперативной памяти, которая была отведена под их запись, освобожда- ется для значений других переменных. В файлах-сценариях все используемые переменные образуют так называемое ра- бочее пространство (Work Space). Значения переменных сохраняются не только во время работы программы, но и на протяжении всего сеанса работы с системой, а значит, и при переходе от выполнения одного файла-сценария к выполнению другого. Иначе говоря, рабочее пространство является единым для всех файлов- сценариев, вызываемых в текущем сеансе работы с системой. Благодаря этому любой длинный файл-сценарий можно разбить на отдельные фрагменты, офор- мить каждый из них в виде отдельного файла-сценария, а в главном файле-сцена- рии вместо соответствующего фрагмента записать оператор вызова файла-сценария, представляющего данный фрагмент. Таким образом обеспечивается компактное и наглядное представление даже довольно сложной программы. За исключением указанных отличий файлы-функции и файлы-сценарии оформ- ляются одинаково. Оформление М-файлов В дальнейшем под М-файлом будем понимать любой файл (файл-функцию или файл-сценарий), записанный на языке MATLAB. Рассмотрим основные особенности оформления текста программы (М-файла) на языке MATLAB. О Обычно каждый оператор записывается в отдельной строке. Признаком конца оператора является символ возврата каретки и перехода на следующую строку (он не появляется в окне), который вводится в программу при нажатии клави- ши Enter. О Можно также размещать несколько операторов в одной строке. Тогда преды- дущий оператор этой строки должен заканчиваться точкой с запятой или за- пятой. О Можно длинный оператор записывать в несколько строк. При этом предыду- щая строка оператора должна заканчиваться тремя точками. О Если очередной оператор не заканчивается символом <;», результат его дей- ствия при выполнении программы будет выведен в командное окно. Чтобы
88 Урок 2 • Программирование в среде MATLAB предотвратить вывод на экран результатов действия оператора программы, за- пись этого оператора в тексте программы должна заканчиваться указанным символом (;). О Строка программы, начинающаяся знаком процента (%), не выполняется. Эта строка воспринимается как комментарий. Таким образом, для ввода коммен- тария в любое место текста программы достаточно начать строку коммента- рия с символа «%». О Строки комментария, предшествующие первому выполняемому оператору программы, то есть такому, который не является комментарием, воспринима- ются как описание программы. Именно эти строки выводятся в командное ок- но, если в нем набрана команда help <имя_файла>. О В программах на языке MATLAB отсутствует символ, обозначающий конец текста программы. В языке MATLAB переменные не описываются и не объявляются. Любое новое имя, появляющееся в тексте программы при ее выполнении, воспринимается сис- темой как имя матрицы. Размер этой матрицы устанавливается при предвари- тельном вводе значений ее элементов либо определяется действиями по установ- лению значений ее элементов, описанными в предшествующих операторах или процедуре. Эта особенность делает язык MATLAB очень простым в использова- нии. В этом языке невозможно применять матрицу или переменную, значения элементов которой предварительно не введены или не вычислены (а значит, не определены размеры этой матрицы). В подобном случае при выполнении про- граммы MATLAB появится сообщение об ошибке Переменная не определена. Имена переменных могут содержать лишь буквы латинского алфавита или циф- ры и должны начинаться с буквы. Общее число символов в имени может дости- гать 30. В именах допускается использование как прописных, так и строчных букв. Особенностью языка MATLAB является то, что строчные и прописные буквы в именах различаются. Например, символы а и А могут использоваться в одной программе для обозначения разных величин. 4 Создание простейших файлов-функций кг При написании собственных программ, а также при использовании стандартных функций от функций для решения своих задач, пользователь не сможет обойтись без создания собственных файлов-функций. Общие требования к построению текста программы Как было отмечено ранее, код процедуры, содержащийся в файле-функции дол- жен начинаться со строки заголовка function [<ПКВ>] = <иня_процедуры>(<ПВВ>) Если перечень конечных (выходных) величин (ПКВ) содержит только один объект (в общем случае — матрицу), то файл-функция представляет собой обычную
Создание простейших файлов-функций 89 функцию (одной или нескольких переменных). Фактически даже в этом простей- шем случае файл-функция уже является процедурой в обычном смысле в терми- нах других языков программирования, если выходная величина является векто- ром или матрицей. Первая строка в этом случае имеет такой вид: function <имя_перененной> - <иня_процедуры>(<ПВВ>) Если же в результате выполнения файла-функции должны быть определены (вы- числены) несколько объектов (матриц), то файл-функция представляет собой уже более сложный объект, который в программировании обычно называется проце- дурой (в языке Паскаль) или подпрограммой. Тогда общий вид первой строки становится таким: function [yl.y2,...,уп] = <иня процедуры>(<ПВВ>) То есть перечень выходных величин у1.у2.........уп должен быть представлен как вектор-строка с элементами yl, у2, ..., уп (все они могут быть матрицами). В простейшем случае заголовок функции с одной переменной приобретет сле- дующий вид: function у = func(x) Здесь func — имя функции (М-файла). В качестве примера рассмотрим процесс создания М-файла для функции у = f\(х) = rf3ctg х -Jsin4x -cos4x. Сначала следует выбрать в командном окне команду Файл ► Новый ► М-файл. На экране появится окно текстового редактора. В нем нужно набрать такой текст: function у = Fl(x.d) X Процедура, вычисляющая значение функции Ж у = (d^3)*ctg(x)*sqrt(sin(x)~4 - со$(х)ж4) * Обращение у = Fl(x.d). у - (d"3)*cot (x).*sqrt(sin(x).*4 - cos(x).*4): После этого нужно сохранить данный текст в файле под именем Fl.m — необходи- мый М-файл создан. Теперь можно пользоваться этой функцией при расчетах. Введем команду » у = Fl(l.O.l) Получим такой результат: у = 4. 1421е-004 Следует заметить, что аналогично можно получить вектор сразу всех значений указанной функции при разных значениях аргумента, если последние собрать в некоторый вектор. Сформируем вектор » zet = 0 : 0. 3 : 1. 8; Обратимся к той же процедуре: » my = Fl(zet,1)
90 Урок 2 • Программирование в среде MATLAB Получим следующее: Warning Divide by zero my - Columns 1 through 4 Na + InfiO + 2.93691 0 + 0.87991 0.3783 Columns 5 through 7 0.3339 0.0706 -0.2209 СОВЕТ Во избежание вывода на экран нежелательных промежуточных результатов, необходимо в тексте процедуры все вычислительные операторы завершать символом «;». Возможность использования сформированной процедуры как для отдельных чи- сел, так и для векторов и матриц обусловлена применением в записи соответствую- щего М-файла вместо обычных знаков арифметических действий их аналогов с предшествующей точкой. Как показывают приведенные примеры, имена переменных, указанные в заголов- ке файла-функции могут быть любыми (могут совпадать или не совпадать с име- нами, используемыми при обращении к файлу-функции), то есть носят формаль- ный характер. Важно, чтобы структура обращения полностью соответствовала структуре заголовка в записи текста М-файла и чтобы переменные в этом обра- щении имели тот же тип и размер, что и в заголовке М-файла. Чтобы получить информацию о созданной процедуре, достаточно набрать в ко- мандном окне команду hel р F1. В результате в нем появится следующее: Процедура, вычисляющая значение функции у = (d*3)*ctg(x)*sqrt(sin(x)^4 - cos(x)*4). Обращение у - Fl(x.d). Построим графики функций ух = 200sinx/x и г/2 “ л2. Для этого следует создать М-файл, который вычисляет значения функций. function у - myfun(x) % Вычисление двух функций X у(1) = 200 sin(x)./x. у(2) = х*2. y(:.l) = 200*sin(x)./x; у(:.2) = х "2; г Теперь построим графики функций » fplotCmyfun'. [-20 20], 50, 2), grid » settgca,'FontSize'.12): 11б1е(Трафик функции "HYFUbr") Результат приведен на рис. 2.1. Создадим файл-функцию, вычисляющую значение следующей функции: y(t) = + A3sin(A4f + k5). В этом случае удобно объединить совокупность коэффициентов А, в единый век- тор К: К - [kl k2 k3 к4 к5]
Создание простейших файлов-функций 91 и создать такой М-файл: function у = dvob(x.K) % Вычисление функции Ху- К(1) + К(2)*х + K(3)*sin(K(4)*x + К(5)). X где К - вектор, состоящий из пяти элементов % Используется для определения текущих значений X параметров движения объекта у - К(1) + К(2)*х + K(3)*sin(K(4)*x + К(5)). Тогда расчет значений этой функции можно осуществить таким образом: » К - ones(l,5): » t - 0:1:10; » fi - dvob(t.K) fi - 1 8415 2.9093 3 1411 3 2432 4.0411 5 7206 7.6570 В.9894 9 4560 10 0000 Типовое оформление процедуры-функции М-файл процедуры-функции рекомендуется оформлять по такому шаблону: function [«выход*] = «имя_функции>(«вход>) % «Краткое пояснение назначения процедуры> X Входные переменные % «Детальное пояснение, касающееся назначения, типа и размеров % каждой из переменных, приведенных в перечне «вход* X Выходные переменные X «Детальное пояснение, касающееся назначения, типа и размеров 1 каждой из переменных перечня «Выход> % и величин, используемых в процедуре как глобальные* % Использование других функций и процедур % «Раздел заполняется, если процедура содержит обращение X к другим процедурам, кроме встроенных* < Пустая строка >
92 Урок 2 • Программирование в среде MATLAB % Автор : «Сказывается автор процедуры, дата создания Я процедуры и организация, в которой создана программа* <Текст исполняемой части процедуры* Здесь <выход> — перечень выходных переменных процедуры; <вход> — перечень входных переменных, разделенных запятыми. ПРИМЕЧАНИЕ При использовании команды help <имя_процедуры> в командное окно вы- водятся строки комментария до первой пустой строки. Создание файлов-сценариев Файлы-сценарии являются основными исполняемыми программными единица- ми в MATLAB. С их помощью можно управлять вычислительным процессом. Основные особенности При создании файлов-сценариев необходимо принимать во внимание следующее. О Файлы-сценарии являются независимо (самостоятельно) исполняемыми бло- ками операторов и команд. О Все используемые переменные образуют так называемое рабочее пространст- во, которое является общим для всех исполняемых файлов-сценариев; из это- го следует, что при выполнении нескольких таких файлов имена переменных в них должны быть согласованы, поскольку конкретное имя обозначает в каж- дом из этих файлов один и тот же объект вычислений. О В файлах-сценариях отсутствует заголовок, то есть первая строка, имеющая определенный вид и назначение. О При обращении к файлам-сценариям не требуется указывать никаких имен переменных: все переменные формируются в результате выполнения про- граммы либо, будучи сформированными ранее, существуют в рабочем про- странстве. Необходимо отметить, что рабочее пространство файлов-сценариев недоступно для файлов-функций, которые используются в нем. В файлах-функциях невоз- можно, обходя заголовок файла-функции, использовать значения, которые приоб- ретают переменные в файле-сценарии (поскольку все переменные файла-функции являются локальными). Единственной возможностью сделать так, чтобы внутри файла-функции некоторая переменная рабочего пространства могла сохранить свое значение и имя, является специальное объявление этой переменной в фай- ле-сценарии в качестве глобальной с помощью служебного слова global. Кроме того, аналогичная запись должна содержаться и в тексте М-файла того файла- функции, который будет использовать значение соответствующей переменной файла-сценария. Перестроим файлы-функции, приведенные в предыдущем разделе: введем в них коэффициенты соответствующих функций как глобальные переменные.
Создание файлов-сценариев 93 function у = dvobal(x) X Вычисление функции Ху- К(1) + К(2)*х + K(3)*sin(K(4)*x + К(5)). X где К - глобальный вектор, состоящий из пяти элементов X Применяется для определения текущих значений X параметров движения объекта global К у = К(1) + К(2)*х + K(3)*s1n(K(4)*x + К(5)); Чтобы использовать файл-функцию dvobal в файле-сценарии, в последнем до об- ращения к этой функции должна быть записана строка gl obal К и определена век- тор-строка К, состоящая из пяти элементов. ПРИМЕЧАНИЕ Если в одной строке объявляются как глобальные несколько переменных, они должны быть разделены пробелами (а не запятыми!). Ввод и вывод информации в диалоговом режиме Для того чтобы обеспечить взаимодействие с пользователем в процессе выполне- ния М-файла, в системе MATLAB применяются команды: di sp, spri ntf, i nput, menu, keyboard, pause. Команда disp осуществляет вывод значений указанной переменной или вывод текста в командное окно. Обращение к ней имеет такой вид: б1зр(<переменная или текст, указанный между двумя апострофами*) Особенностью этой команды является то, что аргумент у нее может быть только один. Поэтому без помощи специальных средств нельзя осуществить вывод не- скольких переменных. Невозможно также объединить текст с числовыми значе- ниями некоторых переменных, что бывает необходимо для удобного представле- ния информации. Расскажем о способах устранения этого недостатка. Если нужно вывести значе- ния нескольких переменных в одну строку (например, при создании таблиц дан- ных), создается единый объект, содержащий все эти значения. Вы можете объе- динить соответствующие переменные в вектор, пользуясь операцией создания вектора- строки: х = [xl х2 ... xl] Т тогда для вывода значении нескольких переменных в одну строку можно будет использовать такую команду: disp([xl х2 ... xl]) Приведем пример: » xl = 1.24; х2 = -3. 45: хЗ = 5.76; х4 = -8.07; » disp([xl х2 хЗ х4]) 1.2400 -3 4500 5 7600 -8.0700
94 Урок 2 • Программирование в среде MATLAB Аналогично можно объединять несколько текстовых переменных, например: » xl ' psT ': х fi ': хЗ - ' teta х4 • ' wl '; » dispCExl х2 хЗ х4]) psi fi teta wl Гораздо сложнее объединить в одну строку текст и значения переменных. Труд- ности возникают из-за того, что текстовые и числовые переменные представляют собой данные разных типов. Одним из путей преодоления этого препятствия является перевод числового значения переменной в символьную (текстовую) форму. Такое преобразование можно осуществить с помощью функции num2str. Команда у - num2str(x) превратит числовое значение переменной х в строку символов. При этом форма представления определяется установленным форматом вывода чисел на экран. Например: » х - -9.30876е-15 х - -9.3088е-015 » у -= num2str(x) у - -9.309е-015 Пусть Т — текстовая переменная или некоторый текст, ах— числовая перемен- ная. Тогда вывод их в одной строке можно обеспечить обращением такого вида: disp([T num2str(x)]) Рассмотрим пример: » х - -9.3088е-015 » Т - 'Значение параметра равняется': » disp([T х]) Значение паранетра равняется » disp([T num2str(x)]) Значение параметра равняется -9.309е-015 Как видим, «механическое» объединение текстовой и числовой переменных не приводит к желаемому результату. Вторым средством, позволяющим объединить в одну строку текст и числовую пере- менную, является использование функции spri ntf. Обращаться к ней следует так: Y - sprintf('<текст1> Xg <текст2>'.Х) В результате формируется текстовая строка Y, состоящая из текста, указанного во фрагменте <текст1>, и значения числовой переменной X, представленной в соот- ветствии с форматом %g, причем текст, содержащийся во фрагменте <текст2>, рас- полагается после значения переменной X. Эту функцию можно использовать в ко- манде di sp в следующем виде: disp (sprintf('<текст> Xg'.X)) Пример: » disp(sprintf('Параметр! - Xg'.x)) Параметр! - -9.30876e-015
Создание файлов-сценариев 95 Ввод информации с клавиатуры в диалоговом режиме можно осуществить с по- мощью функции 1 nput. Обращение к ней вида: х = 1пр1Л('<приглаи!ение>') приводит к следующим действиям. Выполнение операторов программы прекра- щается, и компьютер переходит в режим ожидания. Когда закончен ввод с кла- виатуры (нажата клавиша Enter), введенная информация запоминается в програм- ме под именем х и выполнение программы продолжается. Удобным инструментом выбора одной из альтернатив будущих вычислительных действий является функция menu, которая создает текущее окно пользовательско- го меню. К функции menu нужно обращаться следующим образом: k = menu('Заголовок меню'.'Альтернатива!'.'Альтернатива2'.'Альтернатива п') Такое обращение приводит к появлению окна меню, изображенного на рис. 2.2. Выполнение программы временно приостанавливается, и система ожидает выбо- ра одной из кнопок меню с альтернативами. После правильного выбора исходно- му параметру к присваивается значение, соответствующее номеру альтернативы (1, 2 ,п). В общем случае число альтернатив может достигать 32. тядвигы Заголовок меню Альтернатива! Альтернатива? Альтернативен Рис. 2.2. Окно пользовательского меню Теперь, в зависимости от полученного значения этого параметра, можно органи- зовать разветвление вычислений, например процесс выбора параметра, значение которого нужно изменить. Команда pause приостанавливает выполнение программы до тех пор, пока пользо- ватель не нажмет любую клавишу клавиатуры. Если после названия команды указать в скобках некоторое положительное целое число п, то задержка выполне- ния программы составит п секунд. Если в тексте М-файла встречается команда keyboard, то в процессе работы про- граммы выполнение М-файла прекращается, и управление передается клавиату- ре. Этот режим сопровождается появлением в командном окне MATLAB нового вида приглашения к действиям: к> В таком режиме пользователь может осуществить любые действия, в том числе проверить или изменить данные. При этом ему доступны все команды и процеду- ры системы MATLAB. Для завершения работы в указанном режиме необходимо ввести команду return. Тогда система продолжит выполнение программы с опе- ратора, следующего за командой keyboard.
96 Урок 2 • Программирование в среде MATLAB Организация повторения действий Одной из важных задач при создании пользовательской программы является обес- печение возможности возврата к началу программы с тем, чтобы продолжить ее выполнение при новых значениях исходных данных. Допустим, основные операторы созданной программы расположены в файле-сце- нарии с именем ScrFil_yadro.m. Обеспечить возврат к началу выполнения этого фай- ла-сценария можно следующим образом: flag = 0; while flag == 0 ScrFil_yadro kon - 0: kon = input('Закончить работу - <3>. продолжить - <Enter>'): if kon = 3. flag = 3; end end В этом случае выполнение сценария ScrFil_yadro будет продолжаться до тех пор, пока из предложенных программой вариантов (Закончить работу - <3>. продол- жить - <Enter>) не будет выбран и введен с клавиатуры вариант 3. После этого цикл закончится и начнется выполнение следующих за ним операторов. Естествен- но, что переменная flag не должна изменять свое значение в файле ScrFil_yadro. В аналогичных целях можно также использовать механизм создания меню. В этом случае программа может выглядеть так: К = 1; while k -= 1 ScrFil_Yadro к = тепЩ'Что делать?'.'Продолжить работу’.'Закончить работу’); end В результате первого выполнения сценария ScrFil_yadro на экране появится окно меню, изображенное на рис. 2.3. После щелчка на кнопке Продолжить работу значе- ние к останется равным 1, цикл повторится; после щелчка на второй кнопке зна- чение к будет равно 2, цикл закончится и работа программы завершится. .• MENU Чтодалать ? Продолжить роботу Закончить работу Рис. 2.3. Меню, позволяющее управлять выполнением программы Изменение данных в диалоговом режиме Повторять действия, запрограммированные в ядре ScrFil_yadro, имеет смысл толь- ко в том случае, если в начале кода этого ядра обеспечено выполнение действий
Создание файлов-сценариев 97 по изменению некоторых из исходных величин. MATLAB содержит ряд удобных средств, позволяющих осуществлять изменение данных в диалоговом режиме с применением пользовательских окон меню. Организацию изменения данных в диалоговом режиме рассмотрим на примере использования пяти параметров, которые назовем Параметр!, Параметр2,..., Пара- метр5. Их обозначения как переменных в программе будут такими: xl, х2, ..., х5. Тогда меню выбора параметра для изменения его значения должно содержать шесть альтернатив: пять — для выбора одного из указанных параметров и одну - для предоставления возможности выхода из меню, если значения всех парамет- ров установлены. Поэтому вариант оформления такого меню может быть, например, следующим: k = menu(’Что изменить?’.’Параметр!’.'Параметр?'.’Параметр?’.’Параметра.‘Параметр?’ 'Ничего не менять') В результате на экране появится окно, представленное на рис. 2.4 слева. Недостаток такого оформления окна меню очевиден. Чтобы решить, значение ка- кого именно параметра следует изменить и каким образом это можно осущест- вить, пользователь должен иметь перед глазами не только перечень параметров, подлежащих изменению, но и их текущие значения. Поэтому на каждой кноп- ке меню следует разместить также информацию о текущем значении соответ- ствующего параметра. Это можно сделать, используя ранее упомянутую функ- цию spri ntf. xl - -1 89. х2 = 239 78. хЗ = -2.56е-3: х4 = 7.28е-15. х? = 1 023е-32: k = menu(' Что изменить’ '. ... sprintf(’Параметр! xl = Xg’. xl).... spri ntf ('Параметр? x2 = $g’.x2). sprintf(’ПаранетрЗ хЗ = Xg'. x3). sprintf(’Параметр4 x4 - Xg’. x4),... sprintfС Параметр? x? = Xg'. x?).... ’ Ничего не изменять ') Результат приведен на рис. 2.4 справа. Рис. 2.4. Примеры пользовательских меню
98 Урок 2 • Программирование в среде MATLAB Меню позволяет выбрать параметр, который нужно изменить, однако не обеспе- чивает самого изменения выбранного параметра. Это изменение должно быть осу- ществлено с помощью ввода нового значения с клавиатуры, скажем, так: х - inputCEsprintfC"Текущее значение х - Яд' .х)."Новое значение х = "]) Введем команды » х “ 3.02е-2: » х “ inputCtsprintfC"Текущее значение х - tg'.x)."Новое значение х “ "]) Тогда в командном окне появится такая запись: Текущее значение х - 0.0302 Новое значение х = Выполнение программы приостановится. Система будет ожидать ввода инфор- мации с клавиатуры. Если теперь набрать на клавиатуре 0.073 и нажать клавишу Enter, то в командном окне появится следующая запись: Текущее значение х - 0.0302 Новое значение х - 0.073 х - 0.0730 Чтобы предотвратить повторный вывод на экран введенного значения, необходи- мо строку с функцией 1 nput завершить символом «;». Теперь следует организовать выбор оператора, который соответствует изменяе- мому параметру. Для этого можно использовать оператор условного перехода, if к ~ 1 xl - inputC[sprintfC"Текущее значение xl - tg". xl)."Новое значение х1 = "]); elseif к = 2 х2 - inputCEsprintfC"Текущее значение х2 - Хд". х2)."Новое значение х2 - ’]); elseif к == 3 хЗ = input([sprintfC"Текущее значение хЗ - tg". хЗ)."Новое значение хЗ = "]): elseif к = 4 х4 - input([sprintf("Текущее значение х4 - Хд". х4)."Новое значение х4 - ']): elseif к = 5 х5 = inputС[sprintfC"Текущее значение х5 = Яд". х5)."Новое значение х5 = "]): end Для того чтобы можно было проконтролировать правильность ввода новых зна- чений, обеспечить возможность их корректировки и последовательного измене- ния всех желаемых параметров, нужно, чтобы после ввода нового значения любого параметра на экране вновь возникало то же меню, но уже с откорректированными значениями. При этом работа с меню должна завершиться только при условии выбора кнопки Ничего не изменять, соответствующей значению к, равному 6. Поэтому предыдущие операторы следует оформить в виде цикла. к-1: while к < 6 к - гоепиС'Что изменить?", ... sprintfCПараметр! xl - tg". xl).... sprintf('napaMeTp2 х2 - Xg". х2).... sprintfC"ПараметрЗ хЗ = fcg". хЗ).... sprintfC"Параметр4 х4 - Xg". х4).... sprintfC"Параметрб х5 - tg". х5).... "Ничего не изменять'):
Создание файлов-сценариев 99 if к = 1 xl - 1nput([sprintf(‘Текущее значение xl - Xg', xl),'Новое значение xl = ']); elseif k=-2 x2 - input([sprintf('Текущее значение x2 - Xg'. x2).'Новое значение x2 - ']); elseif k =- 3 x3 = input([sprintf('Текущее значение хЗ - Xg'. хЗ).'Новое значение хЗ - ']): elseif к == 4 х4 = input([sprintf(‘Текущее значение х4 - Хд'. х4).'Новое значение х4 = ']); elseif к == 5 х5 = input([sprintf('Текущее значение х5 = Хд'. х5).'Новое значение х5 - ']): end end Таким способом обеспечивается возможность удобного изменения значений па- раметров в диалоговом режиме. Если входных параметров, значение которых нужно изменять, довольно много, следует объединить их в компактные группы (желательно по какому-то общему свойству, отличающему определенную группу от других) и аналогичным образом обеспечить изменение в диалоговом режиме, используя отдельное меню для каж- дой группы. Очевидно, при этом необходимо предварительно обеспечить выбор одной из этих групп параметров посредством создания дополнительного меню. Типовая структура файла-сценария Если текст программы оформляется в виде файла-сценария, необходимо прини- мать во внимание следующее. О Весь процесс изменения параметров в диалоговом режиме удобно оформлять в виде отдельного файла-сценария, например, с именем ScrFil_Menu, где ScrFil — имя основного файла-сценария. О Поскольку уже в самом начале работы с программой в меню выбора изменяе- мого параметра должны сразу выводиться некоторые значения параметров, перед главным циклом программы, обеспечивающим возврат к началу вычис- лений, необходимо поместить часть программы, которая задает первоначаль- ные значения всех параметров. Кроме того, в начале работы программы можно вывести на экран краткую информацию о ее назначении, более детальную ин- формацию об исследуемой математической модели с указанием места в ней и содержания всех исходных параметров, а также исходные («вшитые») зна- чения всех параметров данной модели. Эти сведения желательно также офор- мить в виде отдельного файла, например с именем ScrFil_Zastavka. О При завершении работы программы обычно возникает потребность несколько упорядочить рабочее пространство, например очистить его от созданных гло- бальных переменных (оставаясь в рабочем пространстве, они препятствуют корректной работе другой программы, которая может иметь иные глобальные переменные или переменные с теми же именами, но отличающиеся по типу, смыслу и значению), закрыть открытые программой графические окна (фигу- ры) и т. д. Эту завершающую часть тоже можно оформить как отдельный файл-сценарий, например, назвав его ScrFiL_Kin.
100 Урок 2 • Программирование в среде MATLAB В целом типовая структура файла-сценария отдельной программы может быть представлена в таком виде: % «Обозначение файла-сценария (ScrF11.ni)> 1 «Текст комментария с описанием назначения программы» «Пустая строка» X Автор «Фамилия И. 0.. дата создания, организация» ScrFil_Zastavka к = тепиСЧто делать?’.'Продолжить работу'.'Закончить работу'); if k == 1 while к == 1 ScrFi1_Мепы ScrFilYadro к = тепиСЧто делать?'.'Продолжить работу'.'Закончить работу'); end end ScrFil_Kin Графическое оформление результатов Для наглядного представления результатов работы программы важно уметь пра- вильно оформлять их. Наиболее емкой формой отображения информации яв- ляется графическая. В системе MATLAB для этого имеется ряд эффективных средств. Общие требования к представлению графической информации Вычислительная программа, создаваемая инженером, в большинстве случаев пред- назначена для исследования поведения разрабатываемого устройства при разных условиях его эксплуатации и различных значениях его конструктивных парамет- ров или для расчета определенных параметров его поведения. Информация, по- лучаемая в результате выполнения вычислительной инженерной программы, как правило, имеет форму ряда чисел, каждое из которых отвечает определенному значению конкретного параметра (аргумента). Такую информацию удобнее всего обобщать и представлять в графической форме. Требования к оформлению инженерной графической информации отличаются от требований к обычным графикам в математике. Пользователь-инженер дол- жен иметь возможность принять такое решение о выборе значения некоторых конструктивных параметров, характеризующих исследуемый процесс или техни- ческое устройство, чтобы прогнозируемое поведение технического устройства удовлетворяло заданным условиям. Поэтому инженерные графики должны быть читабельными, то есть такими, чтобы с их помощью можно было легко отсчиты- вать значения функции при любых значениях аргумента (и наоборот) с относи- тельной погрешностью в несколько процентов. Это становится возможным, если координатная сетка графиков соответствует определенным целым числам како- го-либо десятичного разряда. Как уже раньше отмечалось, графики, построенные системой MATLAB, полностью отвечают этим требованиям.
Графическое оформление результатов 101 Кроме того, инженерную графическую информацию следует снабжать подроб- ным описанием, поясняющим, какой объект исследован и какая математическая модель для этого использована; должны быть приведены числовые значения па- раметров исследуемого объекта и математической модели. Не окажется лишним и указание имени программы, с помощью которой получена эта графическая ин- формация, а также наличие сведений об авторе программы и исследователе, что- бы пользователь мог найти источник справок о полученной информации. Задачей инженерной программы часто является сравнение нескольких функций, полученных при разных значениях конструктивных параметров либо параметров внешних воздействий. Такое сравнение удобнее и нагляднее проводить, если упо- мянутые функции представлены в виде графиков. При этом нужно принимать во внимание следующее. О Если нужно сравнивать графики функций одного аргумента, диапазоны изме- нения которых не слишком отличаются один от другого (не более чем на по- рядок), сравнение удобнее всего осуществлять по графикам данных функций, построенных в одном графическом поле (в общих координатных осях); в этом случае все графики следует выводить, используя функцию plot. О Если при тех же условиях диапазоны изменения функций значительно разли- чаются, можно предложить два подхода: • когда все сравниваемые функции представляют величины одинаковой фи- зической природы и принимают только положительные значения, графики следует выводить также в одно графическое поле, но в логарифмическом масштабе (то есть использовать процедуру semi 1 оду); • когда все функции представляют величины разной физической природы, но имеют общий аргумент, изменяющийся в одном диапазоне, графики нужно строить в одном графическом окне (фигуре), но в разных графиче- ских полях (пользуясь для этого несколькими отдельными обращениями к функции plot в разных подокнах графического окна, что обеспечивается применением процедуры subplot); при этом удобно размещать отдельные графики друг под другом таким образом, чтобы одинаковые значения аргу- мента во всех графиках располагались на одной вертикали. О Кроме упомянутых ранее записей, любое полностью оформленное графиче- ское окно (фигура) должно содержать такую дополнительную текстовую ин- формацию: • краткое сообщение об объекте исследования; • математическую модель, положенную в основу осуществленных в програм- ме вычислений с указанием имен параметров и переменных; • информацию об использованных значениях параметров; • информацию о полученных значениях некоторых вычисленных интеграль- ных параметров;
102 Урок 2 • Программирование в среде MATLAB • информацию об имени М-файла использованной программы, имени ис- полнителя работы и дате проведения вычислительного эксперимента; • информацию об авторе использованной программы и организации, где он работает. Чтобы выполнялось последнее требование, необходимо выделять в каждой фигу- ре (с помощью той же процедуры subplot) место для вывода указанной текстовой информации. Разбивка графического окна на подокна Как следует из сказанного выше, при создании законченного графического ин- женерного документа в системе MATLAB необходимо использовать функцию subplot (о ее применении рассказывалось в разделе «Дополнительные функции графического окна» урока 1). Рассмотрим, как выполняется разбивка графического окна на отдельные поля графиков и текстовое подокно. Допустим, требуется разбить все поле графиче- ского окна на три части так, чтобы в верхней трети окна находилось поле вывода текста, а в нижних двух третях — единое поле вывода графиков. Это можно осу- ществить так: О перед выводом текстовой информации в графическое окно следует воспользо- ваться командой subplot(3.1.1), с помощью которой графический экран будет разделен на три одинаковые части по вертикали (подокна) и для последующе- го вывода будет использована верхняя часть (рис. 2.5, а); О чтобы вывести графики в графическое окно, введите команду subplot(3.1.[2 3]), в результате выполнения которой графическое окно, как и ранее, разделится по вертикали на три подокна, но для вывода графической информации будет использовано пространство, занятое двумя нижними подокнами (обратите внимание, что подокна объединяются таким же образом, как элементы векто- ра в вектор-строку). Рассмотрим второй пример. Предположим, нам нужно создать четыре поля: три горизонтальных, в которых будут расположены графики один под другим, и одно вертикальное — для размещения текстовой информации: О разделите все пространство фигуры на 12 частей — три части по вертикали и четыре части по горизонтали; при этом подокна будут расположены так, как показано на рис. 2.5, б; О чтобы организовать вывод графиков в первое графическое подокно, восполь- зуйтесь командой subplot(3.4.[1 2 3]), которая объединит подокна spl, sp2 и sp3 в единое графическое подокно; О аналогично, выводу графиков во второе графическое подокно должно предше- ствовать обращение к команде subplot(3.4. [5 6 7]), а выводу графиков в третье графическое подокно — обращение к команде subplot(3.4.[9 10 11]); Наконец, к оформлению текста можно приступить после обращения, имеющего такой вид: subplot(3.4.[4 8 12]).
Графическое оформление результатов 103 Текстовое подокно subplotl Графическое подокно subplot2 subplot3 а гр sp1 афическое подокне sp2 1 sp3 Текстовое подокно sp4 Гр sp5 афическое подокне sp6 2 sp7 Графическое подокне 3 sp9 sp10 sp11 sp12 б Рис. 2.5. Различные схемы разбивки графического окна Еывод текста в графическое окно Если сформировать подокна, не осуществляя никаких операций по выводу гра- фиков или текста, то в окне фигуры появится изображение пустых подокон. На- пример, введем следующие команды: » subplot(3.4.[5 6 7]) » subplot(3.4.1:3) » subplot(3,4.9:ll) » subplot(3,4.[4 8 12]) В результате получим графическое окно, представленное на рис. 2.6. Вы видите, что в соответствующем подокне появилось изображение осей координат с обо- значением делений по осям. Начальный диапазон изменений координат по обеим осям подокна установлен по умолчанию от 0 до 1. Поле, предназначенное для вы- вода графиков, занимает не все пространство соответствующего подокна — оста- ется свободное место для вывода заголовка графика, надписей по осям коорди- нат и др. Для того чтобы вывести текст в одно из подокон, нужно сначала удалить из дан- ного подокна изображение осей координат и надписей на них. Это делается с по- мощью команды axis( 'off).
104 Урок 2 • Программирование в среде MATLAB Рис. 2.6. Результат действия функции subplot Если вы примените данную команду, выполнив предыдущие, в окне фигуры ис- чезнет изображение координатных осей последнего подокна (рис. 2.7) После это- го можно начинать вывод текста в него. Рис. 2.7. Результат выполнения команды axis('off') Основной функцией, обеспечивающей вывод текста в графическое окно, являет- ся функция text. Обращение к ней имеет следующий вид: h - text(x. у.’«текст»',’FontName’.'«название шрифта»’... ’FontSize’.«размер шрифта в пикселах»).
Графическое оформление результатов 105 Данная функция осуществляет вывод конкретного текста определенным шриф- том указанного размера, начало текста находится в точке подокна с координата- ми х и у соответствующего поля графика подокна. При этом координаты х и у измеряются в единицах величин, откладываемых вдоль соответствующих осей графика подокна. Как мы уже знаем, указанные координаты изменяются в диапа- зоне [0...1]. Поэтому чтобы вывод текста начинался в точке внутри поля графика, его координаты х и у должны находиться в этом диапазоне. Однако можно ис- пользовать и несколько более широкий диапазон, учитывая то, что поле подокна больше поля его графика. Рассмотрим пример текстового оформления на фрагменте программы. subplot(3.4.1;3); subplot(3.4.5:7); subplot(3.4.9:11); subplot(3.4.[4;8;12]): axi sC off'); Z Процедура вывода данных в текстовое поле графического окна D1 = [2 1 300 1 50]; D2 - [ 0.1 0.02 -0.03 0 1 4 -1.5 2 0.1 -0.15 0 0]: D5 = [0.001 0.01 15 16]; sprogram = 'vspl'; sname = 'Лазарев Ю.Ф.': hl = text(-0.2.1.’Исходные параметры:'.'FontSize'.12); hl = text(0.0.95.'Гиротахометров'.'FontSize'.10): hl = textCO.2.0.9.sprintfC'H = Zg '.D1C3)).'FontSize'.10); hl = text(-0.2.0.85.sprintfC'R = Zg ',D1C4)).'FontSize'.10); hl = textCO.6.0.85.sprintfC'C = Zg ',D1(5)).'FontSize'.10); hl = text(-0.2.0.8.sprintfC'JI = Zg ' .D1CD). 'FontSize' .10); hl = textCO.6.0.8.sprintfC'J2 - Zg '.D1C2)).'FontSize'.10): hl = textCO.0.75.'Внешних воздействий'.'FontSize'.10); hl = textC-0.2.0.7.sprintfC'pst0 = Zg ' ,D2C1)).’FontSize’.10); hl = textCO.6.0.7.sprintfCtetO = Zg ' ,D2(2)). 'FontSize' .10): hl = textCO.2.0.66.sprintfC'fitO = Zg '.D2C3)).'FontSize'.10); hl = textC-0.2.0.62.sprintfC'psm - Zg '.D2C4)),'FontSize'.10); hl = textCO.6.0.62.sprintfC'tern = Zg '.D2C5)).'FontSize'.10); hl = textC0.2,0.58.sprintfC'fini = Zg ' .D2C6)),'FontSize'.10); hl = text(-0.2.0.54.sprintfC'omps = Zg '.D2C7)).'FontSize'.10); hl = textCO.6.0.54.sprintfC'omte = '.D2C8)).'FontSize'.10); hl = textCO.2.0.5.sprintfC'omfi - Zg '.D2C9)).'FontSize'.10); hl = textC-0.2.0.46.sprintfCeps = Zg '.D2C10)).'FontSize'. 10); hl = textCO.6.0.46.sprintfC'ete - Zg '.02(11)).'FontSize'.10): hl = textCO.2.0.42.sprintfC‘efi = Zg ‘.D2C12)).'FontSize'.10); hl = textCO.0.35.’Интегрирования’,'FontSize’.10.’FontUnderline'.'on'); hl = textCO.0.3.sprintfC'h = Zg '.D5C1)).'FontSize'.10); hl = textCO,0.25,sprintfChpr = Zg ' ,D5(2)).'FontSize'.10); hl = textCO.0.2.sprintfC't - Жд '.D5C3)).'FontSize'.10); hl = textCO.0.15.sprintfC'tfinal = Zg ',D5(4)),'FontSize'.10); hl = text(-0.3.0.12.'------------------------------------------------------','FontSize'.10); tm = fix(clock); Tv = tm(4:6); hl = textC-O.2.0.08.['Программа ’sprogram],'FontSize'.10): hl = textCO.3.0.04.['Расчеты провел' sname].’FontSize'.10); hl = text(-0.3.0.[sprintf('Zg :'.Tv) ' ' date].'FontSize'.10); hl = textCO.3.-0.04.'------------------------------------------------------'.'FontSize'.10): hl = textCO.3.-0.08. ’Ukraine. KPI. cath. PSON'. 'FontSize' .10); Выполнение данного фрагмента приводит к появлению в окне фигуры изображе- ния, представленного на рис. 2.8.
106 Урок 2 » Программирование в среде MATLAB м is м 03 OJ OS- 06 G7 ~09 0Й : исходные параметры Гмрот**ометров - K«30G • Я >1 'С ®50 Л* “2 л2«1 Внеидакх тозд ейстемй рбЮ-ел шо=ох)2 % М 0.J 0.S 04 0S еь Г7 ;• С.5 ~сл; “1 м=-йоз p6fnc6 1ет = t firn* ♦... <w»ps =;!•£' otrde = 2 ©fftfi ~ 0Д fepB “. -0,15; . >te“ p. eW Интегрирования •h *0,031 hpr«OtJi 1 = 15 lfinel = 16 Программа vgp1 расчеты яр»еед:Л»8₽ер Ю Ф- -16.. 5 38:O!Waft-20d4 ДЛг*пе< KH eMh/PSON Рис. 2.8. Пример текстового оформления графического окна Создание функций от функций Для функций определенного типа некоторые алгоритмы являются общими. По- этому для их программной реализации, единой для всех функций этого типа, не- обходимо применять алгоритм вычисления конкретной функции. Он может быть зафиксирован в виде конкретного файла-функции. Чтобы более общий алгоритм мог использовать любую функцию, имя последней должно быть некоторой пере- менной, принимающей определенное значение (текстового имени файла-функ- ции) только при обращении к основному алгоритму. Такие функции уже рассматривались нами ранее, в разделе «Функции функций». К ним принадлежат процедуры: О вычислений интеграла от функции, которые требуют указания имени М-фай- ла, содержащего вычисления значения подынтегральной функции; О численного интегрирования дифференциальных уравнений, использование которых требует указания имени М-файла, содержащего вычисления правых частей уравнений в форме Коши; О алгоритмов численного определения корней нелинейных алгебраических урав- нений (нулей функций), где необходимо указывать имя файла функции, нуль которой отыскивается; О алгоритмов поиска минимума функции, которую, в свою очередь, надо зада- вать соответствующим М-файлом и т. п.
Создание функций от функций 107 На практике довольно часто возникает необходимость создавать подобные собст- венные процедуры. MATLAB предоставляет такие возможности. Процедура feval В MATLAB любая функция (процедура), например с именем FUN1, может быть выполнена не только с помощью обычного обращения: [У1.У2.yk] = FUNl(xl.x2.хп) Ее также можно выполнить посредством специальной процедуры feval: [yl.y2.yk] = fevalCFUNr.xl.x2.хп) В этой процедуре имя функции FUN1 является уже одной из входных перемен- ных — текстовой (и поэтому помещается между двумя апострофами). Преимуществом второго варианта вызова функции является то, что в этом случае не меняется форма обращения к ней при изменении ее имени, например на FUN2. Такой вызов позволяет унифицировать обращение ко всем функциям определен- ного вида, то есть таким, которые имеют одинаковое число входных и выходных параметров соответствующего типа. При этом имя функции (а значит, и сама функция) может быть произвольным и может изменяться при повторных обра- щениях. Поскольку при вызове функции с помощью процедуры feval имя функции рас- сматривается в качестве одного из входных параметров процедуры, то оно (имя функции) используется как переменная. Поэтому можно оформлять в М-файле обращение к данной функции, не зная еще ее имени. Примеры создания функций от функций Рассмотрим на примерах особенности создания собственных функций от функций. Процедура для метода Рунге-Кутта 4-го порядка численного интегрирования ОДУ Допустим, что задана система обыкновенных дифференциальных уравнений (ОДУ) в форме Коши: 4=z(y>^ at где у — вектор переменных состояния системы; t — аргумент (время); Z - вектор заданных (в общем случае нелинейных) функций, которые, собственно, и опреде- ляют конкретную систему ОДУ. Если значение вектора у в момент времени t известно, то общая формула, по ко- торой может быть найден вектор yout значений переменных состояния системы в момент времени tout = t + h (где h — шаг интегрирования), имеет такой вид: yout - У + A F(y,t).
108 Урок 2 • Программирование в среде MATLAB Функция F(y,t), связанная с вектором Z, может принимать разный вид в зави- симости от выбранного метода численного интегрирования. Для метода Рунге- Кутта 4-го порядка выберем следующую ее форму: F = (kj + 3k2 + 3k3 + k4)/8, где k, = Z(y,t); k2 = Z(y + Ak(/3, t + A/3); k3 = Z(y + Ak2 - Zzkj/3, t + 2Л/3); k4 = Z(y + Ak3 - Лк2 - Лк(, t + h). Создадим М-файл процедуры, осуществляющей эти вычисления; назовем его гко43: function [tout.yout] = rko43(Zpfun.h.t,y) Ш043 Интегрирование ОДУ методом Рунге-Кутта 4 го порядка, % правые части которых заданы процедурой Zpfun « Входные переменные % Zpfun - строка символов, которая содержит имя процедуры вычисления правых частей ОДУ % Обращение: z = fun(t.y). где Zpfun = 'fun'; X t - текущий момент времени: % у - вектор текущих значений переменных состояния; X z - вычисленные значения производных z(1) = dy(1)/dt % h - шаг интегрирования: X t - предыдущий момент времени. X у - предыдущее значение вектора переменных состояния X Выходные переменные 2 tout - новый момент времени: X yout - вычисленное значение вектора у через шаг X Расчет промежуточных значений производных kl = feval(Zpfun.t.y): k2 = feval(Zpfun.t + h/3.y + h/3*kl); k3 = feval(Zpfun.t + 2*h/3.y + h*k2 - h/3*kl); k4 = fevaKZpfun.t + h.y + h*(k3 + kl - k2)). X Расчет новых значений вектора переменных состояния tout = t + h: yout = у + h*(kl + 3*k2 + 3*k3 + k4)/B; X Конец процедуры RK043 Обратите внимание на такие обстоятельства: О обращение к процедуре вычисления правых частей не конкретизировано; имя этой процедуры является одной из входных переменных процедуры интегри- рования и должно быть конкретизировано лишь при вызове последней; О промежуточные переменные к являются векторами-строками (как и перемен- ные у и z, вычисляемые в процедуре правых частей). Процедура вычисления правых частей ОДУ маятника Рассмотрим процесс создания процедуры вычисления правых частей ОДУ на при- мере уравнения движения маятника, точка подвеса которого поступательно пере- мещается со временем по гармоническому закону: J<p + 7?(p + Z72g/(l + пту sm(tot + Еу ))sin<p sin(tot + cx)cos<p,
Создание функций от функций 109 где: J — момент инерции маятника; R — коэффициент демпфирования; mgl — коэф- фициент жесткости; пту — амплитуда виброперегрузки точки подвеса маятника в вертикальном направлении; — амплитуда виброперегрузки в горизонталь- ном направлении; ф — угол отклонения маятника от вертикали; а> — частота коле- баний точки подвеса; £х, еу, — начальные фазы колебаний точки подвеса в гори- зонтальном и вертикальном направлениях. Чтобы составить М-файл процедуры вычисления правых частей заданной систе- мы ОДУ, прежде всего надо привести исходную систему ОДУ к форме Коши. Для этого введем обозначения: = Ф ; Уг = Ф • Тогда исходное уравнение движения маятника можно представить в виде совокуп- ности двух дифференциальных уравнений 1-го порядка: = {-mglnmx sin (w t + ex )cos (y} )- Ry2 - mgl[i + nmy sin (rot + £y ) sin^/j )}/J. at Сравнивая полученную систему с общей формой уравнений Коши, можно сде- лать вывод, что Z1 =1/2.’ z2 = {-mgl п™ + Ex )COS (i/i ) - Ry2 - mgl[1 + nmy sin(wt + ev )]sin(yi)}/J. Вычисление именно этих двух функций должно выполняться в процедуре вы- числения правых частей. Назовем будущую процедуру FMO. Выходной перемен- ной в ней будет вектор z=[zl.z2], а входными переменными — момент времени t и вектор у=[у1.у2]. Определенную сложность представляет то, что постоянные ко- эффициенты, находящиеся в правых частях, нельзя передать в процедуру через ее заголовок. Поэтому объединим эти коэффициенты в вектор K=[J.R.mgl .nmy, nmx.om.ey.ex] и отнесем этот вектор к категории глобальных: global К. Тогда М-файл будет иметь следующий вид: function z = FMO(t.y); Ж Процедура правых частей уравнения физического маятника X Осуществляет расчет вектора "z" производных X от вектора "у" переменных состояния по формулам: * z(l) = у(2): X z(2) = (-mgl*nmx*sin(om*t + ex)*cos(y(D) - R*y(2)-... t mgl*(l + nmy*sin(om*t + ey))*sin(y(l)))/J It Коэффициенты передаются в процедуру через глобальный вектор % К = [J.R.mgl.nmy.nmx.om.ey.ex] global К z(l) = у(2); z(2) - (-K(3)*K(5)*sin(K(6)*t + K(8))*cos(y(D) - K(2)*y(2) - K(3)*(l + K(4)*sin(K(6)*t + K(7)))*sin(y(l)))/K(l): t Конец процедуры FMO
110 Урок 2 * Программирование в среде MATLAB При использовании этой процедуры следует помнить, что в тексте программы предварительно должен быть объявлен глобальный вектор К с помощью служеб- ного слова global, а потом определены все восемь его элементов. Данную процедуру можно несколько усложнить, сгруппировав вычисления всех внешних моментов сил, кроме момента сил тяготения, и оформив их как отдель- ную процедуру. Для этого сначала преобразуем исходное уравнение, записывая его в таком виде: <р" + sintp = 5(т, <р, <р'), где штрих обозначает производную по безразмерному времени т = coot, а 5(т,<р,<р') — некоторую заданную функцию безразмерного времени, угла пово- рота маятника и его безразмерной скорости В рассматриваемом случае эта функция приобретает такой вид: S(t, <р, <р') = -2 £ ф'-Еппи sin(vt + ех )cos ф + sin(vT + Еу )ЗШф], причем безразмерные величины и v определяются следующими выражениями: х R о 4 = —;..... , v = —. “о Такая безразмерная форма представления уравнений является предпочтитель- ной, поскольку позволяет сократить количество параметров (в нашем случае вме- сто трех размерных параметров J,Rn mgl остался один — Q, а также получить ре- шение уравнения в более общей форме. Вынесение вычисления моментов внешних действий в отдельную процедуру по- зволяет также сделать процедуру вычисления правых частей уравнения маятни- ка более общей, если обращение к процедуре вычисления моментов тоже осуще- ствлять через функцию feval. Создадим процедуру MomFml, которая будет вычислять моменты сил, действую- щих на маятник: function m - MomFMl(t.y) % Вычисление моментов сил. действующих на физический маятник % Осуществляет расчет момента ”т“ сил 1 по формуле: % т = -2*dz*y(2) - (nmx*sin(nu*t + ex)*cos(y(D) +... % + nmy*sin(nu*t + ey)*sin(y(D) % Коэффициенты передаются в процедуру через глобальный вектор % КМ1 - [dz.nmy.nmx.пи.еу.ех] global КМ1 m - -2*КМ1(1)*у(2) - (KMl(3)*sin(KMl(4)*t + KMl(6))*cos(y(l)) +...
Создание функций от функций 111 KMl(2)*sin(KMl(4)*t + KMl(5))*Sin(y(l))); X Конец процедуры MomFMl Теперь следует перестроить процедуру правых частей. Назовем этот вариант FM1: function z - FM1(mpfun,t.y) X Процедура правых частей уравнения физического маятника X Осуществляет расчет вектора "z" производных % векторов "у" переменных состояния по формулам: X z(l) = у(2): X z(2) = -sin(y(l)) + S(t.y) % Входные параметры: X mpfun - имя процедуры S(t.y); X mpfun = 'S’: X t - текущий момент времени; X у - текущее значение вектора переменных состояния % Выходные параметры: X z - вектор значений производных от переменных состояния z(l) = у(2); z(2) - -sin(y(D) + feval(mpfun.t.y): X Конец процедуры FM1 Поскольку вид обращения к процедуре вычисления правых частей изменился (добавлена новая входная переменная — имя процедуры вычисления моментов), необходимо перестроить также процедуру численного метода. Назовем ее RK043m: function [tout.yout] = rko43m(Zpfun.Mpfun.h.t.y) XRK043m Интегрирование ОДУ методом Рунге-Кутта 4-го порядка. X правые части которых заданы процедурами Zpfun и Mpfun X Входные параметры: X Zpfun - строка символов, которая содержит имя процедуры X вычисления правых частей ОДУ Ж Обращение: z = fun(Mpfun.t.y). X где Zpfun - ’fun'. X Mpfun - строка с именем процедуры, к которой X обращается процедура fun; X t - текущий момент времени; X у - вектор текущих значений переменных состояния; X z - вычисленные значения производных z(i) - dy(i)/dt; X h - шаг интегрирования; X t - предыдущий момент времени: X у - предыдущее значение вектора переменных состояния: % Выходные параметры: X tout - новый момент времени; X yout - новое значение вектора переменных состояния через шаг интегрирования X Расчет промежуточных значений производных kl - fevaKZpfun.Mpfun.t.y); k2 - feval(Zpfun.Mpfun.t + h/3.y + h/3*kl); k3 = feval(Zpfun.Mpfun.t + 2*h/3.y + h*k2 - h/3*kl); k4 - feval(Zpfun.Mpfun.t+h.y + h*(k3 + kl - k2)): X Расчет новых значений вектора переменных состояния tout = t + h; yout - у + h*(kl + 3*k2 + 3*k3 + k4)/8; X Конец процедуры RK043m Такая форма представления процедуры вычисления правых частей дифференци- альных уравнений неудобна. Во-первых, процедуру вида FM1 нельзя использовать при -интегрировании процедурами MATLAB ode23 и ode45 (последние требуют,
112 Урок 2 » Программирование в среде MATLAB чтобы в процедуре вычисления правых частей уравнения было только два вход- ных параметра, а в процедуре FM1 их три). Во-вторых, такая форма вызовет необ- ходимость создания новых М-файлов методов численного интегрирования. Этого можно избежать, представив имя дополнительной функции Mpfun как гло- бальную переменную. Тогда процедура вычисления правых частей уравнения мо- жет быть записана так: function z = FM2(t у): X Процедура правых частей уравнения физического маятника X Осуществляет расчет вектора "z" X производных вектора "у" переменных состояния по формулам: X z(l) = у(2): % z(2) = -sin(y(D) + S(t.y) X Входные параметры X mpfun - имя процедуры S(t.y) - глобальная переменная X mpfun = 'S': X t - текущий момент времени; X у - текущее значение вектора переменных состояния: X Выходные параметры X z - вектор значений производных от переменных состояния global MPFUN Z(l) = у(2): Z(2) = -sin(y(D) + feval(MPFUN.t.y); X Конец процедуры FM2 Теперь процедура FM2 имеет только два входных параметра, передаваемых через заголовок, и может быть использована любой процедурой численного метода ин- тегрирования, включая процедуры ode23 и ode45. Необходимо лишь помнить, что в основной программе переменной MPFUN надо присвоить некоторое символьное значение (имя функции, которая будет использована в процедуре вычисления правых частей уравнения), и эта переменная должна быть объявлена как глобаль- ная. Например, если будет использована ранее созданная процедура MomFunl, в фай- ле-сценарии должны присутствовать такие строки: global MPFUN MPFUN = MomFml'; Программа моделирования движения маятника Ранее были рассмотрены проблемы, с которыми приходится сталкиваться во вре- мя создания сложных программ, и средства их преодоления. Теперь на основе полученных знаний попробуем составить и испытать в работе одну из довольно сложных комплексных программ. Создадим программу, которая позволила бы моделировать движение физическо- го маятника с вибрирующей точкой подвеса путем численного интегрирования дифференциального уравнения этого движения. Дифференциальное уравнение движения маятника для этой задачи можно при- нять таким: J<p + Rip + mgl(l+ пту sin(tot + ))sin«p = sin(<at+ ex )cos <p,
Программа моделирования движения маятника 113 где J — момент инерции маятника; R — коэффициент демпфирования; mgl — коэф- фициент жесткости; пту — амплитуда виброперегрузки точки подвеса маятника в вертикальном направлении; — амплитуда виброперегрузки в горизонталь- ном направлении; <р — угол отклонения маятника от вертикали; го — частота коле- баний точки подвеса; гу — начальные фазы колебаний точки подвеса в горизон- тальном и вертикальном направлениях. Нужно создать такую программу, которая позволяла бы вычислять закон измене- ния угла отклонения маятника от вертикали во времени при произвольных, уста- навливаемых пользователем значениях всех вышеуказанных параметров маятни- ка и поступательного движения основания, а также при произвольных начальных условиях. Вычисления будем осуществлять путем численного интегрирования с помощью стандартной процедуры ode45. Преобразование уравнения Для подготовки дифференциальных уравнений к численному интегрированию прежде всего необходимо привести эти уравнения к нормальной форме Коши. Желательно также представить их в безразмерной форме. Для представленного уравнения это было сделано в предыдущем разделе. М-файл процедуры вычисления правых частей уравнений Следующим шагом подготовки программы является написание и запись на диск текста процедуры вычисления правых частей полученной системы ОДУ в форме Коши. Эта процедура была создана в предыдущем разделе и в окончательном ва- рианте она имеет такой вид: Файл FMZ.m* function z - FM2(t.y); % Процедура правых частей уравнения физического маятника 1 Осуществляет расчет вектора "z" производных вектора X "у" переменных состояния по формулам. « z(l) = у(2); % z(2) = -sin(y(D) + S(t.y) X Входные параметры: I t - текущий момент времени; % у - текущее значение вектора переменных состояния; % MPFUN - имя процедуры S(t.y) - глобальная переменная X MPFUN = 'S’; X Выходные параметры: % z - вектор значений производных от переменных состояния global MPFUN z(l) = у(2); z(2) = -sin(yd)) + feval(MPFUN.t.y); z - z’; % Конец процедуры FM2 * Исходные тексты всех описываемых в книге программ можно загрузить с веб-сервера издательства
114 Урок 2 • Программирование в среде MATLAB 2>^ПРИМЕЧАНИЕ Обратите внимание на небольшое, но существенное отличие данной проце- дуры от аналогичной процедуры, приведенной в предыдущем разделе, — на- личие в конце процедуры операции транспонирования вектора производных. Это обусловлено тем, что процедура ode45 требует, чтобы вектор производ- ных обязательно был представлен в виде столбца. В качестве дополнительной процедуры, используемой в процедуре FM2, выберем ранее созданную процедуру MomFMl, которую запишем в файл MomFMl. Файл MomFMl.m function m = MomFMl(t.y); % Вычисление Моментов Сил. действующих на физический маятник X Осуществляет расчет момента "т“ сил X по формуле: % т =-2*dz*y(2) - (nmx*sin(nu*t + ex)*cos(y(D) +... X + nmy*sin(nu*t + ey)*sin(y(l)). % Коэффициенты передаются в процедуру через X глобальный вектор КМ1 = [dz.nmy.nmx.пи.еу.ех] global КМ1 m = -2*КМ1(1)*у(2) - KMl(3)*sin(KMl(4)*t + KMl(6))*cos(y(D) -... KMl(2)*sin(KMl(4)*t + KMl(5))*sin(y(D). % Конец процедуры MomFMl Очевидно, что в вызывающем файле-сценарии надо предусмотреть объявление имени дополнительного файла MomFMl как глобальной переменной MPFUN, а также обеспечить объявление глобальной переменной по имени КМ1 и определение зна- чений этого числового массива из пяти элементов. Управляющий файл-сценарий Главный файл создадим в соответствии с рекомендациями, приведенными в пре- дыдущем разделе. Файл FizMayatn2.m % FizMayatn2 % Управляющая программа исследования движения физического маятника £ установленного на поступательно вибрирующем основании FizMayatn2_Zastavka k - menu('Что делать? '. 'Продолжить работу'. 'Закончить работу'); if k — 1, while к -» 1 FizMayatn2_Menu FizMayatn2_Yadro к =гоепи('Что делать? ’. 'Продолжить работу’. Закончить работу'); end end clear global clear X Конец FizMayatn2 Как видим, программа лишь вызывает три дополнительных файла-сценария — FizMayatn2_Zastavka, FizMayatn2_Menu и FizMayatn2_Yadro. Поэтому нужно еще соз- дать эти М-файлы.
Программа моделирования движения маятника 115 Файл-сценарий заставки Мы уже отмечали, что файл-сценарий заставки должен содержать операторы вы- вода на экран информации об основных особенностях математической модели, реализованной в программе, и операторы ввода исходных значений параметров этой модели. Ниже приведен текст М-файла FizMayatn2_Zastavka. Файл FizMayatn2_Zastavka.m X FizMayatn2_Zastavka X Часть (вывод заставки на экран) программы FizMayatn2 X Ввод "вшитых" значений sprogram = 'FizMaytn2.M'. sname Лазарев Ю.Ф.'; КМ1 - [0 0 0 0 0 0]; MPFUN - 'MomFml': global КМ1 MPFUN tfinal = 2*pi*5; fiO - pi/180; fitO - 0; clc disp(['3To программа, осуществляющая интегрирование уравнения';... 'Физического Маятника при поступательной вибрации точки подвеса’;... 'в форме';... ' fi" + sin(fi) - -2*dz*fi" - ';... ' - nmy*sin(nu*t + ey)*sin(fi) - nmx*sin(nu*t + ex)*cos(fi)';... 'где fi - угол отклонения маятника от вертикали. ';... dz - относительный коэффициент затухания. ';... ' пи - относительная частота вибрации точки подвеса. ';... ' гиду, nmx - амплитуды виброперегрузки в вертикальном ';... ' и горизонтальном направлениях соответственно. ';... ' еу.ех - начальные фазы колебаний в вертикальном ';... ' и горизонтальном направлениях соответственно, ';... ' КМ1 = [dz.nmy.nmx.пи.еу.ех] - матрица коэффициентов']) X Конец FizMayatn2_Zastavka В этом файле осуществляется присваивание исходных («вшитых») значений всем параметрам заданного дифференциального уравнения, а также параметрам чис- ленного интегрирования — начальным условиям движения маятника и длитель- ности процесса интегрирования. Часть этих параметров объединяется в единый глобальный вектор КМ1. Одновременно переменной MPFUN, которая будет исполь- зоваться при интегрировании, присваивается значение ' MomFml'. Файл меню Содержимое файла меню FizMayatn2_Menu приведено ниже. Файл FizMayatn2_Menu.m X FizMayatn2_Menu X Часть (осуществляющая диалоговое изменение данных) X программы F1zMayatn2 к - 1; while к < 10 disp(' ') disp('Сейчас установлено') disp([sprintf('Начальный угол (градусы) - Xg', fi0*180/pi)....
116 Урок 2 • Программирование в среде MATLAB sprintf('Начальная скорость = Яд'. fitO)]) disp(sprintf('Число периодов = Яд'. tfinal/2/pi)) KM1 Я KM1 - [dz.nmy.nmx.nu.ey.ex] k = menu('Что изменять? ', ... sprintf('Относительный коэффициент затухания - Яд'. КМК1)),... sprintf('Перегрузка (вертикаль) = Яд'. KMK2)).... sprintf('Перегрузка (горизонталь) = Яд'. KMK3)).... sprintf('Относительная частота = Яд'. КМК4)).... sprintf('Фаза (вертикаль) = Яд'. КМК5)).... sprintfCOaaa (горизонталь) =Яд'. КМК6)).... sprintfCНачальный угол (градусы) = Яд'. fi0*180/pi).... sprintf('Начальная скорость = Яд'. fitO).... sprintf('Количество периодов - Яд', tfinal/2/pi).... 'Ничего не изменять'); dispC ') if к < 7 КМ1(к) = input(['Сейчас КМ1(‘,num2str(k).sprintf(') = Яд'.... КМ1(к)).' Введите новое значение = ']); elseif к == 7. fiO - input([sprintf('Сейчас fiO - Яд градусов'.... fiO*lBO/pi).' Введите новое значение - ']): fiO = fiO*pi/lBO; elseif к == В. fitO = input([sprintf('Сейчас fitO = Яд'. fitO).... ' Введите новое значение = ']); elseif к == 9. tfinal - 1nput([sprintf('Сейчас количество периодов = Яд', tfinal/2/pi),' Введите новое значение - ']); tfinal = tfinal*2*pi; end end Я FizMayatn2_Menu Файл осуществляет организацию диалогового ввода — изменения значений пара- метров физического маятника, движения основания и параметров численного ин- тегрирования в соответствии со схемой, описанной в предыдущем разделе. Файл ядра программы Основные действия по организации процесса численного интегрирования и вы- воду графиков сосредоточены в файле FizMayatn2_Yadro. Файл FizMayatn2_Yadro.m Я FizMayatn2_Yadro Я Часть (осуществляющая основные вычисления) Я программы FizMayatn2 ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ Я 1. Подготовка начальных условий X--------------------------------- t - 0; tf = tfinal; у0 = [fiO fitO]: options = odeset('RelTol'.le-B.’AbsTol'.[le-10 le-10]); X--------------------------------- ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ Я 2. Организация цикла интегрирования X---------------------------------- [t.y] - ode45('FM2'.[0 tf].yO.options);
Программа моделирования движения маятника 117 ч-------------------------------- ттитятттшти 1 3. Вывод графиков subplot(2.1.2); plot(t/2/pi,у(:,l)*lB0/pi); grid. title!'Отклонение от вертикали'.'FontSize'.14): xlabeK'Время (в периодах малых собственных колебаний)’,'FontSize'.12); у1аЬе1('Угол в градусах'.'FontSize'.12): subplot(2.4,l 2); plot(y(:,l)*lB0/pi.у!:.2)); grid: title!'Фазовый портрет'.'FontSize'.14); х1аЬе1('Угол в градусах'.'FontSize'.12); уТаЬеК'Угл. скорость (б/р)'.'FontSize'.12). %-------------------------------- % Вывод текстовой информации в графическое окно subplot(2.4.3 4); axis!'off'); hl - text(0.1.1.'Движение физического маятника’.... 'FontSize'. 14. 'Fontweight'. 'Bold'): hl - text(0.4. 1,’b соответствии с уравнением'.'FontSize'.12). hl = text(0.0 9,‘fi" + 2*dz*fi" + [1 + nmy*sin(nu*t + ey)]*sin(fi) -'. 'FontSize'.14); hl - text(0.55.0.8.' - -nmx*sin(nu*t + ex)*cos(fi)‘.'FontSize',14); hl - text(0.0 7.'при следующих значениях параметров '.'FontSize'.12); hl - text(0 45.0.6.sprintf('dz = Sg',KM1(1)).'FontSize'.12); hl - text(0.0.5,sprintf('nmy - Xg',KM1(2)).'FontSize'.12); hl - text(0.7.0.5,sprintf('nmx = Xg'.КМКЗ)).'FontSize'.12); hl « text(0.0.4.sprintf('ey - tg град. ’.KMl(5)*lB0/pi). 'FontSize'. 12); hl = text(0.7.0 4.sprintf('ex - tg град.'.... KMl(6)*lB0/pi).'FontSize'.12): hl - text(0.45.0.3.sprintf('nu - Xg',KM1(4)).'FontSize'.12); hl = text(0.0 2.'и начальных условий;'.'FontSize'.12). hl = text(0.0.1.[sprintf('fi(0) = Xg град.',fi0*180/pi).... 'градусов‘'FontSize'.12); hl = text(0.7,0.1.sprintf('fi"(0) = Xg'.fitO).'FontSize'.12); hl - text(0.0 05.);---------------------------------------------'); hl - text(0.-0 2.);---------------------------------------------'); hl = text(-0.05,-0.05.[‘Программа'.sprogram]); hl - text(0.55,-0.05.'Автор - Лазарев Ю.Ф., каф. ПСОН'); hl = text(0.-0.15.[ Выполнил'.sname]). tm = fix(clock); Tv = tm(4:5); hl = text(0.65.-0.15.[sprintf('fcg;'.Tv).' ’.date]); % Конец файла FizMayatn2_Yadro Как видим, основные операции разделены на три основные группы - ввод на- чальных условий, организация цикла интегрирования и организация оформле- ния графического окна вывода. Отладка программы Отладка программы заключается в запуске главного М-файла FizMayatn2, провер- ке правильности функционирования всех частей программы, внесении коррек- тив в тексты используемых М-файлов до тех пор, пока все запрограммированные действия не будут удовлетворять заданным требованиям. Сюда же входят и дей- ствия по проверке «адекватности», то есть соответствия получаемых программой
118 Урок 2 • Программирование в среде MATLAB результатов отдельным априорно известным случаям поведения исследуемой сис- темы. Очевидно, для такой проверки нужно подобрать несколько совокупностей значений параметров системы, при которых ее поведение является известным из предыдущих теоретических или экспериментальных исследований. Если полу- ченные программой результаты полностью согласуются с известными, програм- ма считается адекватной принятой математической модели. В приведенном тексте программы «вшитые» начальные значения параметров от- вечают свободному движению маятника при отсутствии трения. При таких усло- виях движение маятника представляет собой незатухающие колебания относи- тельно вертикали. Поэтому, если программа работает верно, на графиках должны наблюдаться именно такие колебания маятника. Результат работы созданной про- граммы при этих условиях представлен на рис. 2.9. Как видно, в этом отношении программа является адекватной принятой математической модели. Движение физического маятника в соответствии с уравнением fi" + 2*dz’fi' + [1 +nmy’sin(nu*t+ey)]*sin(fi) = = - nmx*sin(nu*t+ex)*cos(fi) при таких значениях параметров. dz= О nmy= 0 nmx-О еу= 0 ех= О пи - О и начальных условиях: fi(0) = 1799 градусов= О Программа FiiMay1n2 m Автор - Лазарев Ю Ф . гаф ПСОН Превоя Лаэарм Ю.Ф 10: 12: 2Э-Аид-2004 Рис. 2.9. Свободные колебания маятника с большим размахом Проведение исследований Созданная программа теперь может быть использована для моделирования и иссле- дования разнообразных нелинейных эффектов, которые наблюдаются у физическо- го маятника при поступательной вибрации точки его подвеса. На рис. 2.10-2.14 продемонстрированы некоторые возможности созданной программы. На рис. 2.10 показаны параметрические колебания маятника, которые могут воз- никать при вибрации точки подвеса в вертикальном направлении. Как видите, в этом случае амплитуда колебаний маятника относительно вертикали сначала увеличивается, а потом становится постоянной, причем частота постоянных ко- лебаний вдвое меньше частоты вибрации основания и составляет примерно 1,15.
Программа моделирования движения маятника 119 Движение физического маятника в соответствии с уравнением fi" + 2*dz‘fi" + [1+nmy"sin(nu*t+ey)]*sin(fi) = = - nmx*sin(nu,t+ex)*cos(fi) при таких значениях параметров. dz = 01 nmy= 1 nmx = 0 оу- 0 ех= 0 nu= 2.3 и начальных условиях fi(0) = 1 градусов fi'(O)-Q Программа FizMaytn2 m Автор - Лазарев Ю Ф.. кэф ПСОН Провал Лазарев Ю.Ф. 10. 16: 20-Aug-2OO4 Рис. 2.10. Параметрические колебания маятника при вертикальной вибрации Выпрямительный эффект маятника показан на рис. 2.11. В этом случае одновре- менная вибрация основания в вертикальном и горизонтальном направлениях при- водит к отклонению среднего положения маятника от вертикали на угол около -5°. Движение физического маятника в соответствии с уравнением fi" + 2*dz*fi’ + [1 +nmy*sin(nu’t+ey)]"sin(fi) = - - nmx*sin(nu't+ex)*cos(fi) при таких значениях параметров: dz= 01 nmy= 2 nmx= 2 еу= 0 ex- о пи= 5 и начальных условиях: fi(0) - 0 градусов h'(0) = О Программа FizMay1n2 ш Автор - Лазарев Ю.Ф . каф. ПСОН Провел Лазарев Ю.Ф. 10 21 29-Аид-2004 Рис. 2.11. Отклонение среднего положения маятника от вертикали На рис. 2.12 представлены стационарные колебания маятника относительно верхнего положения равновесия, которые могут наблюдаться при интенсивной
120 Урок 2 • Программирование в среде MATLAB вертикальной вибрации. Эти колебания при наличии трения затухают, как пока- зано на рис. 2.13, и маятник «застывает» в верхнем положении. Движений физического маятника е соответствии с уравнением fi" + 2’dz*fi’ + (1 -Himy*sin(nu*t+ey)]*sin(fi) = = - nmx*sin(nu’t+ex)*cos(fi) при таких значениях параметров dz= о пту = 10 птх= 0 еу= О ех- О пи= 5 и начальных условиях П(0) - 170 градусов fi'(O) = 0 Программа FizMayiiQ т Автор - Лазарев Ю Ф . каф ПСОН Провал Лазарев Ю Ф 10:24: 28-Аид-2004 Рис. 2.12. Устойчивые колебания маятника относительно верхнего положения Движение физического маятника в соответствии с уравнением fi" + 2’dz*fi’ + [1 +fimy’sin(nu*t+ey)]*sin(fi) = = - nmx’sin(nu‘t+ex)*cos(fi) при таких значениях параметров dz = 01 nmy = 10 nmx= О еу= 0 ех= О пи= 5 и начальных условиях: й(0) =170 градусов fi'(O) = О Программа FizMaylrQ m Автор - Лазарев Ю Ф , каф ПСОИ Провел Лазарев Ю Ф 10.26: 28-Аид-2004 Рис. 2.13. Затухание колебаний маятника относительно верхнего положения Наконец, продемонстрируем возможность существования значительных откло- нений среднего положения маятника от вертикали при строго горизонтальной
Программа моделирования движения маятника 121 вибрации основания (явления, пока не описанного теоретически). Как видно на рис. 2.14, это отклонение составляет более 40° при принятых значениях парамет- ров вибрации, причем направление отклонения зависит от начальных условий движения маятника. Движение физического маятника в соответствии с уравнением fi" + 2*dz*fi' + [1+nmy*sin(nu*t+ey)Psin(fi) = = - nmx*sin(nu*t+ex)*cos(fi) при таких значениях параметров <Ь= 0.1 пгпу- 0 еу= 0 ПГПХ= 10 ех= О пи= 6 и начальных условиях fi(0) - 0 градусов fi(0)-0 Отклонение от вертикали Программа F zMaytn? m Провел Лазарев ЮФ Автор - Лазарев Ю.Ф . каф. ПСОН 28- Aug-2004 Время (в периодах малых собственных колебаний) Фазовый портрет % 0 10 20 30 40 50 Б0 70 Угол в градусах Движение физического маятника в соответствии с уравнением fi" + 2*dz*fi‘ + [1+nmy*sin(nu*t+ey)]*sin(fi) = = - nmx’sin(nu‘t+ex)'cos(fi) при таких значениях параметров: dz= 0.1 nmy= 0 птх= 10 еу= 0 ех= 0 пи = 6 и начальных условиях fi(0) - 0 градусов- 2 Программа FizMaytn2 m Автор - Лазарев Ю Ф... каф. ПСОН Провел Лазарев Ю.Ф. 10 32. 28-Aug-2004 Рис. 2.14. Отклонение среднего положения маятника от вертикали при различных начальных условиях
122 Урок 2 • Программирование в среде MATLAB Вопросы для самопроверки 1. Что представляют собой функции функций в MATLAB? 2. Какие стандартные (встроенные) функции предусмотрены в MATLAB? 3. Для чего создаются программы в среде MATLAB? 4. Какие виды файлов программ существуют в MATLAB? 5. Чем отличаются файлы-сценарии от файлов-функций? Какова сфера их при- менения? 6. Перечислите правила написания текстов программ на языке MATLAB. 7. Как создается М-файл процедуры или функции? 8. Какие процедуры обеспечения диалогового режима ввода-вывода информа- ции предусмотрены в MATLAB? 9. Какими средствами можно обеспечить вывод текстовой информации в графи- ческое окно (фигуру) MATLAB? 10. Каково назначение процедуры feval? 11. Какие средства существуют в MATLAB для обеспечения численного интегри- рования систем дифференциальных уравнений? 12. Какими средствами в MATLAB можно осуществить повторное вычисление большого фрагмента программы?
УРОК MATLAB и другие приложения □ Использование MATLAB при оформлении текстовых документов □ Использование в MATLAB файлов данных
124 Урок 3 • MATLAB и другие приложения Важным свойством среды MATLAB является возможность ее интеграции с дру- гими приложениями, например с текстовым редактором Word. Файлы данных, которые созданы в различных программах, также могут быть использованы в сре- де MATLAB. Далее мы рассмотрим способы применения этих возможностей. Использование MATLAB при оформлении текстовых документов Одним из свойств системы MATLAB является возможность создания текстовых документов в среде редактора Word с одновременным проведением в нем вычис- лений с помощью данной системы и фиксированием результатов вычислений (в том числе в виде графиков) в тексте документа Word. Благодаря этому можно непосредственно в указанном редакторе Word создавать научные и инженерные текстовые документы, содержащие сложные расчеты и графики. Средством, позволяющим создавать такие документы, является пакет Notebook, входящий в систему MATLAB. Этот пакет связывается с редактором Word по- средством специального шаблона Word, который входит в комплект поставки MATLAB. Данный шаблон, имеющий имя M-book.dot, должен быть предваритель- но скопирован в папку с шаблонами Word. Создание М-книги Документы Word, которые созданы с использованием MATLAB, обычно называ- ют М-книгами. Для того чтобы приступить к написанию новой М-книги, выпол- ните следующие действия. 1. Запустите редактор Word. 2. Выберите в окне редактора Word команду Файл ► Создать. 3. В появившемся на экране диалоговом окне выберите шаблон M-book. В результате указанных действий будет запущена система MATLAB, и вид глав- ного меню редактора Word несколько изменится, в нем появится новое меню — Notebook (рис. 3.1). Это и будет свидетельствовать о том, что к Word присоедине- на система MATLAB. Использование команд MATLAB в М-книге Написание М-книги связано с набором текста, операторов и команд MATLAB. Ввод текста осуществляется по обычным правилам редактора Word. Для того чтобы ввести и выполнить команду MATLAB в окне редактора Word, необходи- мо сделать следующее. 1. Напишите текст команды в виде отдельной строки (после набора строки с ко- мандой не нажимайте клавишу Enter — курсор должен остаться в этой строке). 2. Выберите команду Define Input Cell (Определить как входную ячейку) в меню Notebook или нажмите клавиши Alt+D. Вид строки команды после этого изме- нится — символы команды приобретут темно-зеленый цвет, а текст будет за- ключен в квадратные скобки темно-серого цвета.
Использование MATLAB при оформлении текстовых документов 125 3. Выберите команду Evaluate Cell (Вычислить ячейку) в меню Notebook или вос- пользуйтесь комбинацией клавиш Ctrl+Enter. Сразу после текста команды должны появиться результаты ее выполнения системой MATLAB (они выво- дятся синим цветом и заключаются в квадратные скобки). Рис. 3.1. Меню Notebook в окне редактора Word Приведем пример. Допустим, вы набрали в Word строку А “ [1 2 3: 4 5 6; 7 8 9] В результате нажатия клавиш Alt+D эта строка приобретет такой вид: [А = [1 2 3: 4 5 6: 7 8 9]] Затем после нажатия клавиш Ctrl+Enter в следующих строках появится результат: [А = 1 2 3 4 5 6 7 8 9 ] Если нужно выполнить несколько команд MATLAB одну за другой, наберите их в несколько строк в соответствии с правилам написания текста программ. Выде- лите строки, как это делается при копировании части текста в Word, и повторите вышеуказанные действия. Например: t - 0 : pi/10 : 2*р1: [X.Y.Z] - cylinder(4*cos(t) + 1): mesh(X.Y.Z) В результате появится трехмерный график (рис. 3.2). Чтобы оставить в тексте документа введенные команды и выведенные результа- ты, следует поместить указатель мыши в одну из строк во фрагменте с выполнен- ными командами, а затем выбрать в меню Notebook команду Undefine Cells (Отме- нить определение входных ячеек) или нажать клавиши Alt+U. Вы увидите, что все
126 Урок 3 • MATLAB и другие приложения символы как введенных команд, так и результатов их выполнения приобретут обычный для текста Word стиль, цвет и размеры, а квадратные скобки исчезнут. Рис. 3.2. График MATLAB, который появится в тексте Редактирование М-книги Чтобы откорректировать М-книгу или внести в нее какие-либо дополнения, нуж- но выполнить одно из следующих действий: О войти в редактор Word и посредством команды Файл ► Открыть открыть файл требуемой М-книги; О в меню Файл программы Word выбрать файл с М-книгой из списка последних использовавшихся документов; О в окне проводника Windows дважды щелкнуть мышью на имени документа М-книги. Редактор Word откроет документ, используя шаблон M-book, запустит систему MATLAB, если она не была до этого активной, и добавит меню Notebook в окно редактора Word. Преобразование документа Word в М-книгу Чтобы превратить ранее созданный документ Word в М-книгу, необходимо сде- лать следующее: 1. Создать в редакторе Word новую (пока пустую) М-книгу. 2. Вызвать из меню редактора Word команду Вставка ► Файл. 3. Выбрать в появившемся диалоговом окне Вставка файла файл, который нужно превратить в М-книгу, и нажать клавишу Enter. Особенности использования MATLAB в среде Word При написании М-книг можно применять все возможности системы MATLAB, доступные в режиме калькулятора (непосредственных вычислений). Однако сле- дует помнить, что нельзя пользоваться файлами-сценариями, то есть готовыми
Использование MATLAB при оформлении текстовых документов 127 М-программами, а также процедурами и функциями, доступными лишь при ра- боте с файлами-сценариями (например, процедурами создания меню и т. п.). Указанное ограничение удастся обойти, если вы воспользуетесь командой Bring MATLAB to Front (Вывести MATLAB на передний план) меню Notebook. В этом слу- чае командное окно MATLAB расположится поверх других окон, и в нем можно будет осуществлять любые операции MATLAB. Естественно, результаты выпол- нения операций не будут автоматически записываться в текст М-книги. Они бу- дут появляться, как обычно, в соответствующих окнах MATLAB. Вы можете пе- ренести текст и изображения в М-книгу с помощью тех же операций, которые используются при перенесении объектов из одного окна в другое. Изменение параметров вывода результатов В меню Notebook есть команда Notebook Options (Параметры Notebook), которая позволяет устанавливать некоторые параметры оформления результатов в М-кни- ге по усмотрению пользователя. Если эту команду активизировать, на экране поя- вится одноименное диалоговое окно, представленное на рис. 3.3. Рис. 3.3. Диалоговое окно Notebook Options Данное окно позволяет устанавливать такие параметры: О формат вывода чисел в Word — в раскрывающийся список в области Numeric Format (Формат чисел); О плотность вывода строк — переключатели Loose (Редко) и Compact (Плотно), находящиеся в области Numeric Format (Формат чисел); О размеры выведенных в окно Word изображений — область Figure Options (Па- раметры изображения); О возможность вывода изображений, получаемых при работе MATLAB, в текст М-книги — флажок Embed Figures in M-book (Встраивать изображения в М-книгу); О возможность использования при выводе изображений в М-книту 16 или 256 цве- тов — флажок Use 16-Color Figures (Использовать 16-цветные изображения). После щелчка на кнопке ОК эти установки вступят в силу.
128 Урок 3 • MATLAB и другие приложения Использование файлов данных в MATLAB Система MATLAB располагает набором специальных функций для работы с фай- лами различных форматов и типов, например с файлами программ, написанных на языке С, или с МАТ-файлами, представляющими собой запись состояния ра- бочего пространства MATLAB. Часто возникает потребность в использовании данных не из МАТ-файла и не на- бранных с клавиатуры, а из уже сформированного файла, запись которого произ- водилась самыми разными способами и программными средствами. Вам может также понадобиться сохранить результаты вычислений в файлах заранее огово- ренного формата, предназначенных для использования в составе иных програм- мных средств. Такие задачи решаются путем использования файлов данных, типы которых являются общими для всех программных средств. Это могут быть би- нарные либо текстовые файлы. Бинарные файлы предназначены для хранения произвольных данных в виде по- тока байтов. Основные операции, выполняемые с такими файлами, — это запись и считывание заданного количества байтов информации. В отличие от бинарных, текстовые файлы содержат записи, трактуемые как символы в определенной ко- дировке, включая набор управляющих символов: возврата каретки, перевода стро- ки, конца файла. Открытие и закрытие файлов Независимо от типа файла данных перед началом работы его нужно открыть по- средством специальной функции fopen: <идентификатор_файла> = fopen('<имя_файла>'.'<флаг>') Здесь <идентификатор_файла> — имя указателя на файл, которое будет использо- ваться при осуществлении операций чтения-записи; <имя_файла> — имя файла, под которым он записан (или будет записан) на внешний носитель; <флаг> — пара- метр, называемый флагом открытия файла и несущий информацию о способе работы с файлом. Флаг может принимать следующие символьные значения: О г — только для чтения; О w — только для записи (предыдущее содержимое теряется и создается новый файл); О w+ — удаление содержимого существующего файла или создание нового файла и открытие его для записи и чтения; О г+ — чтение и запись одновременно; О а — добавление в конец файла; О а+ — создание и открытие нового файла или открытие существующего файла для записи, чтения и добавления записи в конец файла.
Использование файлов данных в MATLAB 129 К указанным символам следует добавить символ Ь, предназначенный для открытия файла в бинарном режиме, и символ t — для открытия файла в текстовом режиме. Если файл данных больше не используется для чтения или записи, его следует закрыть, используя функцию fclose: Тс1О5е(<идентификатор_файла>) Запись и чтение бинарных файлов Запись информации в бинарный файл осуществляется посредством функции fwri - te, а чтение информации из бинарного файла — посредством функции fread: Тиг1Ге(<идентификатор_файла>. A.'precision') Здесь А — числовой вектор (или матрица), элементы которого необходимо запи- сать в файл, 'precision' — символьный параметр, указывающий, сколько памяти отводится под запись отдельного числа. В MATLAB для записи вещественных чисел, под которую отводится 8 байт (или 64 бита), используется тип doubl е. По- этому при записи таких данных в бинарный файл нужно указать в качестве пара- метра 'precision' текстовую строку 'float64‘. Следует заметить, что считывание значений элементов некоторой матрицы про- исходит по столбцам, то есть сначала считываются элементы первого столбца матрицы, затем — второго и т. д. В таком же порядке располагаются записывае- мые элементы в бинарном файле. Рассмотрим пример записи значений элементов вектора х размером 1x5 и квад- ратной матрицы у размером 3x2. » X = 1:5 » х = 1 2 3 4 5 » у = [6 7:8 9:10 11] У = 6 7 8 9 10 11 в бинарный файл tst_dat.bin: Fl = fopenCtst_dat.bin'.'wb'): fwrite(Fl,x.'float64'): fwrite(Fl.y.'float64'); fclose(Fl); Теперь осуществим чтение данных из записанного файла. Для этого откроем файл с флагом rb и применим функцию fread, предназначенную для чтения информа- ции из бинарного файла. Обращение к ней осуществляется в такой форме: [A.count] = Ггеаб(<идентификатор_файла>. [т.п].'precision') Здесь А — имя числовой матрицы, элементы которой принимают считанные из файла значения, m — число строк этой матрицы, п — число ее столбцов, count — ко- личество действительно считанных элементов из файла данных, 'precision' — символьный параметр, указывающий, сколько памяти отводится под запись в мат- рице А отдельного числа. Для записи в MATLAB данных из бинарного файла
130 Урок 3 • MATLAB и другие приложения следует указать в качестве параметра 'precision' текстовую строку 'float64‘. Параметр <идентификатор_файла> является символьной строкой, содержащей имя бинарного файла, из которого считывается информация. При считывании информации из бинарного файла нужно иметь в виду следую- щие особенности: О считывание начинается с того места бинарного файла, где находится указатель; О при первом считывании только что открытого файла данных указатель распо- ложен в самом начале бинарного файла, перед первым его элементом; О после очередного считывания с помощью функции fread указатель перемещает- ся по файлу данных и устанавливается после последнего считанного элемента. Приведем несколько примеров. В записанном нами файле tst_dat.bin содержится 11 чисел типа double. Сначала считаем его в единственный вектор длиной 15 эле- ментов: » F2 » fopen('tst_dat.bin’.'rb'); » [Vl.cl] - fread(F2,[1.15].'float64') » fclose(F2): Получаем: Vl - 1 2 3 4 5 6 8 10 7 9 11 cl - 11 Как видим, реально было считано 11 элементов. Порядок их расположения в за- писанном файле данных ясен из полученного вектора VI. Можно убедиться, что элементы исходной матрицы у были считаны при записи по столбцам. Теперь считаем эти данные в вектор и в матрицу тех же размеров, которые были использованы при записи: » F2 - fopen('tst_dat.bin'.'rb'): » [XI.с2] - fread(F2.[l,5],'float64') » [Yl.c3] - fread(F2.[3.2].'float64') » fclose(F2): Xl = 1 2 3 4 5 c2 = 5 Y1 = 6 7 8 9 10 11 c3 = 6 Результат считывания полностью совпадает с исходными данными. Наконец, попробуем считать матрицу у в матрицу Y2, имеющую заведомо боль- шие размеры (4x3): » F2 » fopen('tst_dat.bin'.'rb'); » [Х2.с4] - fread(F2.[1.5].'float64') » [Y2.c5] = fread(F2,[4.3],'float64') » fclose(F2): X2 = 1 2 3 4 5 c4 = 5
Использование файлов данных в MATLAB 131 Y2 - б 9 8 11 10 0 7 0 с5 - 6 Результат показывает, что заполнение новых матриц, последовательно считывае- мыми элементами бинарного файла, осуществляется по столбцам. Недостающие элементы матриц заполняются нулями. ПРИМЕЧАНИЕ Правильное считывание данных из бинарного файла возможно только при ус- ловии, что заранее известно, в каком формате записаны данные в этот файл. Например, если считать данные в формате Float32, то получим следующее: » F2 - fopen(’tst_dat.bin’,'гЬ'): » [X2.C4] - fread(F2.[l,5],'float32') » [Y2.c5] - fread(F2.[4.3],'float32') » fclose(F2); Х2 - 0 1.8750 0 2.0000 0 с4 5 Y2 2.1250 2 3125 2.5000 0 0 0 2.2500 2.3750 2.5625 0 0 0 с5 12 Такой результат ни в коей мере не отражает записанные исходные данные. Запись и чтение текстовых файлов Текстовые файлы данных отличаются от бинарных прежде всего тем, что инфор- мация в них содержится в виде закодированных текстовых символов, то есть в символьном виде. Отсюда и название этих файлов. В число записываемых сим- волов входят и управляющие символы, такие как символы окончания строки, пе- ревода каретки, абзаца и др. Поэтому в текстовые файлы записываются те дан- ные, которые образуют сформированный текстовый фрагмент. Текстовые файлы пригодны и для записи чисел, представленных в виде симво- лов. В этой книге уже шла речь о символьном представлении чисел в MATLAB, когда мы рассказывали, как производится вывод чисел в командное окно. Напом- ним, что в MATLAB существуют такие форматы символьного представления чи- сел: Short, Short Е, Short G, Long, Long E, Long G, Hex, Bank, Plus и Rational. Остановимся прежде всего на записи и чтении числовых данных. Запись данных в текстовый файл осуществляется с помощью функции fprintf. Обращаться к ней следует таким образом: fprintf('<имя_файла>'.'строка_управляюших_символов'.<ПЗВ>) Здесь <имя_файла> — имя файла, в который записываются данные; <ПЗВ> — пере- чень записываемых величин (они должны быть заданы (определены) до откры- тия файла, предназначенного для записи). Строка управляющих символов (она
132 Урок 3 MATLAB и другие приложения должна быть помещена между апострофами) содержит информацию о том, в ка- ком формате будут записываться данные, указанные в <ПЗВ>. Она может содер- жать помимо управляющих обычные символы. В этом случае символы будут по- мещены между записываемыми данными. К управляющим символам относятся следующие: О ЯТ — спецификатор, означающий, что очередная переменная, подлежащая за- писи в файл, будет представлена как действительное число в формате с фикси- рованной десятичной точкой (между символами % и f могут быть записаны два целых числа и разделяющая их точка; первое число задает количество символов для записи числа, второе — количество символов после десятичной точки); О Яд — спецификатор, осуществляющий запись числа в формате с плавающей десятичной точкой; О Яб — спецификатор, который осуществляет запись очередной символьной пе- ременной; О управляющие последовательности символов, имеющие следующие значения: • \п — конец строки, перевести каретку на следующую строку; • \t — вставить горизонтальную табуляцию; • \г — перевести каретку на начало строки; • \Ь — возвратиться на один символ; • \f — перейти к новой странице; • \" или '' — поставить знак апострофа; • ЯЯ — поставить знак процента. Приведем несколько примеров. Рассмотрим вначале запись вектора. Сформиру- ем вектор из четырех элементов. » V - Epi. 1.457е-17, -0.312567. 5.089е4] V = 3 1416е+000 1.4570е-017 -3 1257е-001 5 0890е+004 Запишем этот вектор в текстовый файл в формате с фиксированной десятичной точкой. FT = fopenCTextl txt'.'w') fprintfCFT. 'ЯС .V); fclose(FT) Результат записи теперь можно просмотреть, вызвав файл Textl.txt с помощью текстового редактора Блокнот (рис. 3.4). Рис. 3.4. Компоненты вектора в текстовом файле Textl.txt Как видим, все числа записаны подряд, без разделения, причем второе число пред- ставлено как 0.
Использование файлов данных в MATLAB 133 Теперь вставим по три пробела между числами. FT = fopen('Text2.txt’.,w'): fprintf(FT. 'К ’.V): fclose(FT): В результате получим файл Text2.txt в таком виде, как показано на рис. 3.5. Рис. 3.5. Компоненты вектора разделены пробелами Тот же вектор запишем в файл Text3.txt, пользуясь спецификатором Хд. FT = fopen(’Text3.txt’.'w’); fprintf(FT.’«g ’.V); fclose(FT); На рис. 3.6 показан результат. В отличие от предыдущих записей в формате с фик- сированной точкой, в данном случае второй элемент вектора отображен верно. Поэтому применение спецификатора Хд при записи чисел в текстовый файл все- гда является предпочтительным. Рис. 3.6. Компоненты числового вектора в формате с плавающей точкой Перейдем к записи в текстовый файл числовой матрицы. Сформируем матрицу: » А = [1 -1.04е-28 7.8е45: -8.1234е-6 6.089 pi; 6 -1098 35] А = 1 -1.04е-028 7.8е+045 -8.1234е-006 6.089 3.1416 6 -1098 35 Запишем ее в текстовый файл Text4.txt: * FT = fopen(’Text4.txt’.‘w’); fprintf(FT.'Sg ’.A): fclose(FT); Элементы матрицы в этом случае записываются в одну строку последовательно по столбцам (рис. 3.7).
134 Урок 3 • MATLAB и другие приложения Рис. 3.7. Представление числовой матрицы в формате с плавающей точкой Чтение данных из текстового файла может быть осуществлено с помощью одной из трех функций: fgetl, fgets или fscanf. При обращении к функции fgetl вида str - fgetl(fid) создается строка, состоящая из символов текстового файла данных с идентифи- катором fid, при этом символ конца строки удаляется. Если обратиться к функ- ции fgets следующим образом: str = fgets(fid). то в результате будет сформирована строка, состоящая из символов текстового файла данных с идентификатором fid, при этом символ конца строки сохраняет- ся. Функцию fscanf вызовем в таком виде: str = fscanf(fid.format.size) Она осуществляет считывание из файла того количества данных, которое указа- но в параметре size, преобразует данные из символьного в иной формат (напри- мер, числовой) в соответствии с параметром format и присваивает полученные значения элементам матрицы А. Параметр size, задаваемый в виде [т.п], где т и п — целые положительные числа, определяет соответственно количество строк и столбцов формируемой матрицы А. Параметр format должен быть строкой сим- волов (а значит, должен быть помещен между апострофами). В число этих симво- лов могут входить обычные символы, спецификаторы и управляющие последова- тельности символов, аналогичные упомянутым при описании функции fprintf. Отличие заключается лишь в том, что теперь эти спецификаторы указывают ко- личество символов, считываемых из файла, формат, в котором они считываются, и тип данных, в который преобразуются считанные символы (тип элементов мат- рицы А). Наиболее удобной для считывания числовых данных является функция fscanf — единственная из функций считывания, формирующая числовые данные непосред- ственно в формате MATLAB. Рассмотрим на примерах, как осуществляется воспроизведение записанных в файл данных при разных способах чтения. Прежде всего произведем чтение файла Textl.txt с использованием функции fscanf. Напомним, что запись в этот файл производилась без разделителей между числами. Такой же формат применим и для чтения данных. » FT - fopen('Textl.txt1.’г’); » Vnov - fscanf(FT. ЧТ .[1.4]); » fclose(FT) » Vnov Vnov “ 3 1416 -0.31257 0 0
Использование файлов данных в MATLAB 135 В результате получаем вектор, в котором неверно отображено не только второе число (чего следовало ожидать, так как оно не записалось в текстовый файл (см. рис. 3.4)), но и четвертое, которое было правильно записано в файл. Картина меняется, если при записи между отдельными числами ставится какой- либо разделительный символ. Например, при записи вектора в файл Text2.txt та- ким символом был пробел. Прочитаем вектор из этого файла, используя тот же разделитель. » FT = fopenCText2.txt'.'г'); » Vlnov = fscanf(FT.'Xf ',[1.4]); » fclose(FT): » Vlnov Vlnov - 3.1416 0 -0.31257 50890 Теперь четвертый элемент также считан верно. Запись в файл Text3.txt была осуществлена в формате д, и все числа в нем отраже- ны без искажений. Считаем данные из этого файла в том же формате с тем же разделителем между числами. » FT = fopenCText3.txt','г'): » V2nov = fscanf(FT,'Xg '.[1,4]); » fclose(FT): » V2nov V2nov - 3.1416 1.457e-017 -0.31257 50890 Получается результат, в котором все числа отображены верно. Считаем матрицу А из файла Text4.txt в том же формате, в котором она была запи- сана в этот файл. » FT = fopen('Text4.txt'.'r'): » Anov = fscanf(FT.'Xg '.[3.3]): » fclose(FT); » Anov Anov - 1 -1.04e-028 7.8e+045 -8.1234e-006 6.089 3.1416 6 -1098 35 В результате получаем матрицу В, которая полностью совпадает с исходной мат- рицей А. Следует отметить, что при записи и чтении числовых массивов в текстовых фай- лах целесообразно использовать спецификатор Яд и функцию fscanf. Это позволит избежать возможных искажений чисел. Необходимо также отделять одно число от другого каким-либо разделительным символом. При чтении числовых массивов нужно применять те же разделительные символы, что были применены в функции fprintf при их записи в файл.
136 Урок 3 • MATLAB и другие приложения Вопросы для самопроверки 1. Какие команды операционной среды можно выполнить в командном окне MATLAB? 2. Что представляет собой М-книга? 3. Как, находясь в текстовом редакторе Word, можно осуществлять расчеты и строить графики, используя MATLAB? 4. Какие типы файлов данных вы можете назвать и чем они отличаются друг от друга? 5. Какие средства используются в MATLAB для записи информации в бинарные файлы данных и чтения информации из них? 6. Какие средства предусмотрены в MATLAB для записи информации в тексто- вые файлы данных и чтения информации из них? 7. Каковы преимущества и недостатки использования бинарных и текстовых файлов данных для хранения и считывания информации?
) УРОК Объектно- ориентированное программирование □ Основные классы объектов □ Производные классы □ Пример создания класса □ Создание методов класса
138 Урок 4 • Объектно-ориентированное программирование К числу основных достижений современных языков программирования высоко- го уровня относится наличие в них средств объектно-ориентированного програм- мирования (ООП). Под этим обычно понимают возможность пользователя опре- делять (задавать) классы вычислительных объектов, их свойства и операции по их преобразованию. Создание собственных классов объектов и методов опериро- вания с ними значительно увеличивает возможности использования вычисли- тельной техники, упрощает программирование и делает его более удобным, про- зрачным и эффективным. В системе MATLAB имеются достаточно простые средства, позволяющие решать задачи объектно-ориентированного программирования. К этим средствам относит- ся возможность создания новых классов вычислительных объектов и программ (методов) оперирования с ними. Основные классы объектов Классом в MATLAB принято называть определенную форму представления вы- числительных объектов в оперативной памяти в совокупности с правилами (проце- дурами) их преобразования. Класс определяет тип переменной, а правила — опе- рации и функции, которые могут быть применены к этому типу. В свою очередь тип определяет объем памяти, отводимой для записи переменной в памяти, и струк- туру размещения данных в этом объеме. Операции и функции, которые могут быть применены к конкретному типу переменных, образуют методы класса. В системе MATLAB определены шесть встроенных классов вычислительных объектов: О double — числовые массивы и матрицы действительных или комплексных чи- сел с плавающей точкой в формате двойной точности; О sparse — двумерные действительные или комплексные разреженные матрицы; О char — массивы символов; О struct — массивы записей (структуры); О cel 1 — массивы ячеек; О ui nt8 — массивы 8-битовых целых чисел без знаков. Класс double определяет наиболее распространенный тип переменных в системе MATLAB, с которыми оперирует большинство функций и процедур. Класс char определяет переменные, представляющие собой совокупность символов (каждый символ занимает в памяти 16 бит), которую часто называют строкой. Класс sparse определяет тип переменных, являющихся разреженными матрицами двойной точ- ности. Разреженную структуру применяют для хранения матриц с небольшим количеством ненулевых элементов, что позволяет использовать лишь незначи- тельную часть памяти, необходимой для хранения полной матрицы. Разреженные матрицы требуют применения специальных методов для решения задач. Пере- менные класса cel 1 (ячейки) являются совокупностью массивов других классов (в том числе и класса cell). Массивы ячеек позволяют объединить связанные данные (возможно, разных типов и размеров) в единую структуру. Объекты клас- са struct имеют несколько составляющих, называемых полями, каждое из которых
Основные классы объектов 139 носит собственное имя. Поля сами могут содержать массивы. Подобно массивам ячеек массивы записей объединяют связанные данные и информацию о них, од- нако способ обращения к элементам структуры (полям) принципиально иной — имя поля указывается через точку после имени структуры. Наконец, класс ui nt8 позволяет сохранять целые числа от 0 до 255 в 1/8 части памяти, необходимой для хранения чисел двойной точности. Никакие математические операции для этого класса данных не определены. Каждому классу соответствуют собственные функции и операторы обработки, то есть методы. Приведем некоторые из них: О array (класс, который является родительским для всех встроенных классов объектов-массивов) — определение размеров (si ze), длины (1 ength), размерно- сти (ndims), объединение массивов ([а Ь]), транспонирование (transpose), мно- гомерная индексация (subindex), переопределение (reshape) и перестановка (permute) измерений многомерного массива; О char (строки символов) — строковые функции (strcmp, lower), автоматическое преобразование в тип doubl е; О cell — индексация с использованием фигурных скобок {el......еп} и разделе- нием элементов списка запятыми; О double — поиск (find), обработка комплексных чисел (real, imag), формирова- ние векторов, выделение строк, столбцов, подблоков массива, расширение скаляра, арифметические и логические операции, математические функции, функции от матриц; О struct — доступ к содержимому поля (.field) (разделитель элементов спи- ска — запятая); О uint8 — единственный метод — операция сохранения (чаще всего использует- ся в пакете Image Processing Toolbox). Класс символьных строк char При вводе с клавиатуры строки символов располагаются между двумя апостро- фами. Например, вводя совокупность символов ' Это', получим в командном окне ans = Это Точно так же с помощью знака присваивания производится определение пере- менных типа char. » stl - ’Это"; st? - ’строка': st3 - 'символов.*; » stl.st2.st3 stl = Это st2 = строка st3 - символов. Объединение нескольких строк в одну (сцепление, или конкатенацию) можно осу- ществить с помощью обычной операции объединения векторов в строку. » [stl st2 st3] ans = Это строка символов.
140 Урок 4 • Объектно-ориентированное программирование Существует еще одна возможность достичь той же цели — использование проце- дуры strcat(sl.s2......sn), которая производит сцепление (конкатенацию) задан- ных строк si, s2,sn в единую строку в порядке их указания в списке аргументов. » st = strcat(stl.st2.st3) st = Это строка символов. Объединить строки символов в несколько отдельных, но соединенных в единую конструкцию, строк (вертикальная конкатенация) можно, применяя процедуру strvcat. » stv = strvcat(stl.st2,st3) stv = Это строка символов. Заметим, что для такого сцепления символьных строк нельзя применять опера- цию вертикального сцепления (символ «;»), используемую для построения мат- рицы из отдельных строк, так как количество элементов (символов) объединяе- мых символьных строк может быть различным. Например: » [stl; St2; St3] ??? All rows in the bracketed expression must have the same number of columns Символьная строка представляет собой массив (точнее, вектор-строку), элемен- тами которого являются отдельные символы, включая символы пробелов. Поэто- му информацию о любом символе в строке можно получить, указав номер этого символа от начала строки (при этом, конечно, надо учитывать и символы пробе- лов). Например: » st(3) ans = т » St(3 : 12) ans = то строка Совокупность вертикально сцепленных строк образует двумерный массив (мат- рицу) символов. Поэтому выполнение команды » ss = stv(2,3 : end) приводит к такому результату: ss = строка Функция strrepCsl. s2. S3) формирует строку из строки si путем замены всех ее фрагментов, которые совпадают со строкой s2, на строку S3. » st = [stl st2 st3] st = Это строка символов » у = strrepCst.'o',’a') у = Эта страка симвалав » х = strrepCst.'а'.'о') х = Это строке символов.
Основные классы объектов 141 Функция upper(st) переводит все символы строки st в верхний регистр. » xl “ upper(st) xl = ЭТО СТРОКА СИМВОЛОВ Аналогично, функция lower (st) переводит все символы в нижний регистр. » х2 = lower(xl) х2 = это строка символов Процедура findstr(st.stl) выдает номер элемента строки st, с которого начина- ется первое вхождение строки stl, если она есть в строке st: » findstr(st.'рок') ans = 9 Как ранее отмечалось, довольно часто возникает необходимость вставить в стро- ку символов числовое значение одного или нескольких параметров, что связано с переводом числовой переменной в строку символов определенного вида. Это можно сделать с помощью процедуры num2str. Входным аргументом процедуры является числовая переменная (класса double). Процедура формирует представле- ние значения указанной числовой переменной в виде символьной строки. Формат представления определяется значением, установленным в поле Числовой формат. В качестве примера рассмотрим формирование текстовой строки с включением значения переменной: » х = pi; » disp(['Значение перененной"х"равно'. num2str(x)J) Значение переменной 'х' равно 3.1416 Аналогичным образом с помощью процедуры mat2str(A) можно получить значе- ние матрицы А в виде символьной строки. » А = [1.2.3: 4 5 6: 7 8 9]: » disp(mat2str(A)) [1 2 3;4 5 6:7 8 9] Переход от символьного представления числа к числовому осуществляется про- цедурой str2num. » stx = num2str(x) stx = 3 1416 » у - str2num(stx) у = 3.1416 » у + 5 ans = В.1416 » z « stx + 5 z = 56 51 54 57 54 59 Последний результат получен вследствие того, что строка символов stx при вклю- чении ее в арифметическую операцию автоматически перестраивается в класс doubl е, то есть все составляющие ее символы заменяются целыми числами, равны- ми коду соответствующего символа. После этого сложение полученного числово- го вектора с числом 5 происходит по обычным правилам, то есть 5 суммируется с каждым из кодов символов. Проверим это, учитывая, что с помощью процедуры
142 Урок 4 • Объектно-ориентированное программирование double (str) можно получить числовое представление строки символов str в виде кодов входящих в нее символов: » double(stx) ans = 51 46 49 52 49 54 Сравнивая полученный результат с предыдущим, можно убедиться в справедли- вости сказанного. Функция str2mat(stl,st2.st3) действует аналогично функции strvcat(stl.st2,st3), то есть образует символьную матрицу, располагая строки stl, st2,..., stn одну под другой. х> Z - str2mat(stl,st2,st3) Z = Это строка символов Класс записей struct Массивы записей — это тип массивов в системе MATLAB, в котором разрешается располагать в виде записей разнородные данные (то есть данные разных клас- сов). Отличительной особенностью таких массивов является наличие в них име- нованных полей. Массивы записей в MATLAB не объявляются. Отдельные экземпляры этого клас- са создаются автоматически в процессе присвоения конкретных значений полям записи. Обращение к любому полю с именем field осуществляется так: <имя переменной-записи>.field Например, выполнение команды » PG81.fam - 'Аврутова' PG81 = fam ’Аврутова' приводит к автоматическому формированию переменной PG81 класса struct с един- ственным полем fam, значением которого является символьная строка Аврутова. Таким же образом к этой переменной можно добавлять другие поля. х> PG81.imya » ’Марина’: PG81.bat ’Степановна': » PG81 PG81 = fam 'Аврутова' imya. 'Марина' bat: 'Степановна' В результате получим ту же переменную-запись, но уже с тремя полями. Чтобы создать массив переменных, имеющих те же поля и то же имя PG81, достаточно до- бавлять при обращении к этому имени, как к элементу массива, номер записи в скобках. » PG81(2).fam = 'Березнюк'; » PG81(2).imya » 'Алексей'; PG81(2). bat 'Иванович'; » PG81(3).fam - 'Попель':
Основные классы объектов 143 » PG81(3).imya = 'Богдан1; PG81(3).bat = 'Тимофеевич1; » PG81 PG81 - 1x3 struct array with fields: fam imya bat Как видим, в этом случае содержимое полей уже не выводится на экран. Отобра- жается лишь информация о структуре массива, его размерах и именах полей. Для получения информации об именах полей записи можно использовать функ- цию fieldnames. » fieldnames(PG81) ans = ‘fam1 'imya1 'bat' Задать переменную-запись можно также с помощью функпии struct по такой схеме: <иня_записи> = struct(‘<имя_поля1>‘. <значение1>. '<иня_поля2>'. <значение2>. ...). Например, выполнение команды » PG72 = struct!1 fam'.'Сергеев1.'imya'.'Сергей1, 'bat1.'Сергеевич','god'. 1981) приведет к формированию следующей переменной-записи: PG72 = fam: 'Сергеев' imya: 'Сергей' bat 'Сергеевич' god: 1981 Используя индексацию, можно легко определить значение любого поля или эле- мента структуры. Таким же образом можно присвоить значение любому полю или элементу структуры. Если к одному из элементов массива записей (структуры) добавляется значение нового поля, это поле автоматически появляется во всех остальных элементах массива, но значение поля у других элементов остается пустым. Например: » PG81.fam = 'Аврутова' ; » PG81.1mya = 'Марина1; PG81.bat = 'Степановна'; » PG81(2).fam = 'Березник' ; » PG81(2).imya » 'Алексей1; PG81(2).bat = ‘Иванович1; » PG81(3).fam = 'Попель1 ; » PG81(3).imya = ‘Богдан1; PG81(3).bat = ’Тимофеевич1; » PG81(3).god = 1982 PG81 = 1x3 struct array with fields: fam imya bat god
144 Урок 4 • Объектно-ориентированное программирование » PG81(2).god ans - [] Чтобы удалить некоторое поле из всех элементов массива записей, нужно ис- пользовать процедуру rmfield по такой схеме: S=rmf1eld(S.' имя поля'), где S — имя массива записей, который корректируется. Рассмотрим пример: » PG81 = rmfield(PG81.'bat') PG81 - 1x3 struct array with fields fam imya god Класс struct, как видим, имеет небольшое число методов, что делает его непо- средственное использование при расчетах довольно проблематичным. Однако на применении объектов именно этого класса основана возможность создавать но- вые классы объектов (см. далее). Поэтому наличие данного класса очень важно для расширения возможностей системы MATLAB. Класс ячеек cell Массив ячеек состоит из элементов, которые могут содержать массивы любого типа, в том числе и массив ячеек. Он позволяет хранить массивы с элементами разных типов, имеющие разное количество измерений. Например, одна из ячеек может содержать матрицу действительных чисел, вторая — массив символьных строк, третья — вектор комплексных чисел. MATLAB позволяет строить массивы ячеек любых размеров, имеющие любую структуру, в том числе и многомерные. Создание массива ячеек Создать массив ячеек можно с помощью операторов присваивания и посредством функции cell, причем перед использованием этой функции необходимо сформи- ровать пустой массив, а потом присвоить значения отдельным ячейкам. Применение операторов присваивания Существует два способа присвоения значений отдельным ячейкам: индексация ячеек и индексация содержимого. Первый способ заключается в следующем. При присваивании значений отдельным элементам массива ячеек индексы ячейки, на- ходящиеся слева от знака присваивания, размещают в скобках, используя стан- дартные обозначения для массива. Значение, присваиваемое ячейке, которое нахо- дится справа от знака присваивания, помещают в фигурные скобки. Для примера рассмотрим создание массива С ячеек размером 2x2. Определим каждый элемент массива, то есть каждую из ячеек, таким образом: » С(1,1) = {'Иванов И. Ю.'}; » С(1.2) = {[1 2 3; 4 5 6; 7 8 9]}; » С(2,1) = {5-31}: » С(2,2) - {-pl : p-i/5 : pl} С - ' Иванов И. Ю.1 [3x3 double] [5.0000 - 3.00001] [lxll double]
Основные классы объектов 145 При использовании второго способа элемент массива ячеек, находящийся слева от знака присваивания, указывается в фигурных скобках, а содержимое соответ- ствующей ячейки, находящееся справа — без скобок. » С{1,1} = 'Иванов И.Ю. » С{1,2) = [1 2 3; 4 5 6: 7 8 9]: » С{2.1) = 5-31: » С{2.2} = -pi : pi/5 : pl С = ' Иванов И. Ю.1 [3x3 double] [5.0000 - 3.00001] [lxll double] Как видно из примеров, в системе MATLAB массив ячеек выводится в сокращен- ной форме. Чтобы отобразить содержимое ячеек, нужно применять функцию cell di sp. » celldisp(C) C{1.1} - Иванов И.Ю. С{2.1} = 5.0000 - 3.00001 С{1.2} = 1 2 3 4 5 6 7 8 9 С{2.2} = Columns 1 through 3 -3.1416 -2.5133 -1.8850 Columns 4 through 6 -1.2566 -0.6283 0 Columns 7 through 9 0.6283 1.2566 1.8850 Columns 10 through 11 2.5133 3.1416 Для вывода на экран структуры массива ячеек в виде графического изображения предназначена функция cell plot (рис. 4.1): » cellplot(C) Рис. 4.1. Результат действия функции cellplot
146 Урок 4 • Объектно-ориентированное программирование Фигурные скобки являются конструктором массива ячеек, аналогично тому как квадратные скобки — конструктором числового массива. Это позволяет приве- денный выше массив С ячеек построить таким образом: » С = { Иванов И. Ю.', [1 2 3: 4 5 6: 7 8 9]: 5-3i ,-pi :pi/5:pi} С= ' Иванов И. Ю.‘ [3x3 double] [5.0000 - 3.00001] [1x11 double] Применение функции cell Функция cel 1 позволяет создать шаблон массива ячеек путем заполнения его пус- тыми ячейками. Создадим, например, пустой массив ячеек размером 2x3: » А = cell(2,3) А = [] [] [] [] [] [] Заполним одну из ячеек с использованием оператора присваивания: » А(2.2) = {0 : pi/10 : 2*pi} А = [] [] [] [] [1x21 double] [] Извлечение данных из массива ячеек Сформировать новые массивы, используя данные из массива ячеек, можно путем применения фигурных и круглых скобок. Извлечение содержимого отдельных ячеек производится посредством указания индексов нужной ячейки в фигурных скобках. » В = С{1.2} В = 1 2 3 4 5 6 7 В 9 » st = С{1,1) st = Иванов И. Ю. Извлечение содержимого отдельных элементов определенной ячейки производит- ся путем дополнительного указания в скобках индексов элемента массива, нахо- дящегося в нужной ячейке. » х = С{1.2}(2.3) х = 6 » У = С{1,1}(1:5) у = Иван Указывая круглые скобки, можно извлекать из массива ячеек другой массив яче- ек, составляющий часть первого. » D » А(2.2:3) D - [1x21 double] [] Массивы ячеек используются для объединения массивов данных разных типов, имеющих разные размеры. Удобнее применять массивы ячеек вместо массивов записей (структур) в следующих случаях: О когда нужен доступ одновременно к нескольким полям; О при необходимости доступа к подмножествам данных в виде списка переменных;
Производные классы 147 О если число полей не определено; О когда нужно извлекать поля из структуры. Если необходимо установить, к какому классу принадлежит тот или иной вычис- лительный объект, к имени этого объекта следует применить процедуру class: » х = pl; » class(x) ans = double » st = 'Письмо': » class(st) ans = char » s = class(num2str(x)) s = char Производные классы Рассмотренные ранее классы объектов построены таким образом, что на их основе пользователь имеет возможность создавать новые собственные классы объектов. В самой системе MATLAB по этому принципу создан и используется встроенный класс inline, который предоставляет простой способ определения встроенных функций для применения в программах вычисления интегралов, решения диффе- ренциальных уравнений и расчета минимумов и нулей функций. Пакет символь- ных вычислений Symbolic Math Toolbox базируется на классе объектов sym, кото- рый позволяет выполнять операции с символьными переменными и матрицами. Пакет Control System Toolbox использует класс объектов 1 ti и три его дочерних подкласса — tf, zpk, ss, которые поддерживают алгоритмы анализа и синтеза ли- нейных стационарных систем автоматического управления. В языке MATLAB отсутствует необходимость и возможность предварительного объявления типа или класса переменных, которые будут использованы. То же са- мое относится и к объектам любых создаваемых классов. Объекты класса создаются в виде структур (записей), то есть относятся к потом- кам (наследникам) класса struct. Поля структуры и операции с полями являются доступными только внутри методов данного класса. Все М-файлы, определяющие методы объектов определенного класса, должны размещаться в специальном каталоге, который называется каталогом класса. Имя этого каталога состоит из знака @ (коммерческое «эт») и имени класса: @<имя_клас- са>. Каталог класса должен быть подкаталогом одного из каталогов, описанных в путях доступа системы MATLAB, но не самим таким каталогом. Каталог класса обязательно должен содержать М-файл носящий имя, совпадающее с именем клас- са. Такой файл называют конструктором класса — он создает объекты этого класса, используя данные в виде массива записей (структуры) и приписывая им метку класса. Класс inline В MATLAB определен класс inline. Он предназначен для описания функций в том виде, который соответствует их математическому описанию: F(x,Pl,P2,...).
148 Урок 4 » Объектно-ориентированное программирование Такое представление позволяет вычислять функцию при заданных значениях ар- гумента х и параметров Pl, Р2,... путем обращения к ней в естественной форме, на- пример: F(0.6.-0.5.3). Классу inline соответствует подкаталог ©INLINE каталога TOOLBOX/MATLAB/FUNFUN. В нем содержатся следующие М-файлы: О конструктор inline; О методы класса argnames, disp, formula, nargin, vectorize, cat, display, horzcat, nargout, vertcat, char, feval, subsref. Конструктор inline. Эта процедура создает inline-объект, то есть функцию, задан- ную в символьном виде, что позволяет обращаться к ней как к обычному мате- матическому объекту. Существует несколько форм обращения к процедуре. Об- ращение вида F = inlinet'<математическое_выражение>') позволяет получить символьное представление заданного математического выра- жения как функции. Аргумент функции определяется автоматически путем поиска в составе выражения символа, отличного от i и j. Если такой символ не найден, в качестве аргумента применяется символ х. При наличии в выражении несколь- ких символов, как аргумент используется символ, расположенный в алфавите бли- же всего к х, в первую очередь — один из следующих за ним в алфавите. » FUN1 = inlineCam*sin(om*t + eps) ') FUN1 = Inline function: FUNltt) = am*sin(om*t + eps) При обращении к конструктору таким образом: F=inline('<математическое_выраже- ние>'. 'имяГ . 'имя2'. ...) формируется функция, имеющая заданные в параметрах 'имяГ, 'имя2', ... обозначения аргументов. » FUN2 - inline('cos(alfa)*cos(beta) + in(alfa)*sin(beta)*cos(gamma)'. 'alfa'. 'beta', 'gamma') FUN2 = Inline function: FUN2(alfa.beta.gamma) = costalfa)*cos(beta) + sin(alfa)*sin(beta)*cos(gamma) Наконец, при обращении вида F=inline( '«математическое выражение»' .п) создается функция, которая имеет один аргумент хи п параметров с заданными именами Р-1, Р2,..., Рп. То есть в выражении, кроме некоторых заданных чисел, должны содер- жаться только аргумент х и параметры Pl, Р2,..., Рп. Например: » Fun3 - inlineCPl + Р2*х + P3*x*2',3) Fun3 = Inline function: Fun3(x.Pl.P2.P3) = Pl + P2*x + P3*x2 Получение формулы функции. Это можно сделать с помощью любой из двух процедур класса inline — char(F) или formula(F). Обе процедуры производят пре- образование inline-объекта в символьный массив — строку, содержащую запись формулы функции. » si = char(FUN2) si = cos(alfa)*cos(beta) + sin(alfa)*sin(beta)*cos(gamma)
Производные классы 149 » s2 = formula(FUN2) s2 = cos(alfa)*cos(beta) + sin(alfa)*sin(beta)*cos(gamma) » s3 = formula(Fun3) s3 = Pl + P2*x + P3*xA2 Вывод на экран. Процедуры disp(F) и display(F) осуществляют вывод на экран заданного объекта inline (F). » disp(Fun3) Inline function: Fun3(x.Pl.P2.P3) = Pl + P2*x + P3*x*2 » display(Fun3) Fun3 = Inline function: Fun3(x.Pl.P2.P3) = Pl + P2*x + P3*x2 Формы вывода этих процедур отличаются незначительно. Основное их различие состоит в том, что процедура display работает и при неявном обращении, то есть если имя процедуры не указывается, в командной строке записано лишь имя in- line-объекта. » Fun3 Fun3 = Inline function: Fun3(x.Pl.P2.P3) = Pl + P2*x + P3*x2 Получение имен аргументов inline-объекта. Это действие осуществляется по- средством процедуры argnames(F). » argnames(FUN1) ans = 't‘ » argnames(FUN2) ans = 'alfa 'beta' ' gsnims » argnames(Fun3) ans = 'x' 'Pl' •P2' P3' Векторизация функций. Часто бывает необходимо преобразовать выражение функции, которая записана для аргументов-чисел, с тем чтобы вычисление мож- но было осуществлять и тогда, когда аргументами являются векторы. Для этого в исходном выражении функции надо вставить символ точки перед каждым зна- ком арифметической операции. Это делается с помощью процедуры vectorize. Если аргументом данной процедуры является символьное выражение, процедура формирует другое символьное выражение с указанными изменениями. В случае, когда аргументом является inline-объект, процедура создает новый объект этого класса, в формуле которого произведены такие изменения. Приведем примеры. » s = char(Fun3) s = Pl + Р2*х + Р3*х*2 » sv = vectorize(s) sv = Pl + Р2.*х + РЗ.*х.А2
150 Урок 4 • Объектно-ориентированное программирование » Fun3v - vectorize(Fun3) Fun3v = Inline function: Fun3v(x.Pl.P2.P3) = Pl + P2.*x + P3.*x. 2 Вычисление inline-объекта. Чтобы вычислить значения функции, представлен- ной как inline-объект, по заданным значениям аргументов и параметров, доста- точно после имени inline-объекта указать в скобках значения аргументов и пара- метров функции. » V - 0 : 0.2 : 1 » F3 - Fun3v(v, 2. 3. 4) v = 0 0.2000 0.4000 0.6000 0.8000 1.0000 F3 = 2.0000 2 7600 3 8400 5 2400 6.9600 9.0000 Вычисление значения функции, заданной М-файлом. Для программирования сложных вычислительных алгоритмов наиболее важной процедурой класса i nl 1 пе является функция feval. С ее помощью можно производить вычисления по общим для функций определенной структуры алгоритмам. В данном случае алгоритмы удобно строить общими для всего класса таких функций, при этом конкретный вид функции будет определяться отдельной процедурой в виде М-функции. Имя М-файла должно быть в структуре общего алгоритма одной из переменных, что- бы, изменяя его конкретное значение, можно было применять алгоритм для лю- бых функций той же структуры. В таком случае говорят, что функция является внешней (external) по отношению к алгоритму. Таким образом, процедура feval позволяет использовать внешние функции при программировании в среде MATLAB. Общий вид обращения к процедуре и при- меры ее использования приведены в разделе «Процедура feval» урока 2. Классы пакета Control System Toolbox Пакет прикладных программ (ППП) Control System Toolbox (сокращенно — Cont- rol) сосредоточен в подкаталоге CONTROL каталога TOOLBOX системы MATLAB. Ос- новными вычислительными объектами этого ППП являются следующие. О Родительский объект (класс) LTI — (Linear Time-Invariant System — линейные, инвариантные во времени системы); в литературе, написанной на русском языке, за этими системами закрепилось название линейных стационарных сис- тем (ЛСС); О Дочерние объекты (классы), то есть производные от класса LTI, которые соот- ветствуют трем разным представлениям ЛСС: TF-объект (Transfer Function — передаточная функция), ZPK-объект (Zero-Pole-Gain — нули-полюсы-коэф- фициент передачи) и SS-объект (State Space — пространство состояния). Объект LTI, как наиболее общий, содержит информацию, не зависящую от кон- кретного представления и типа ЛСС (непрерывное или дискретное). Дочерние объекты определяются конкретной формой представления ЛСС, то есть зависят от модели представления. Объект класса TF характеризуется векторами коэффи- циентов полиномов числителя и знаменателя рациональной передаточной функ- ции. Объект класса ZPK характеризуется векторами, которые содержат значения
Производные классы 151 нулей, полюсов передаточной функции системы и коэффициента передачи систе- мы. Наконец, объект класса SS определяется четырьмя матрицами, описывающи- ми динамическую систему в пространстве состояний. В табл. 4.1 представлены основные атрибуты этих классов и их содержимое; при- няты такие обозначения: NU, NY и NX — число входов (вектор и), выходов (век- тор у) и переменных состояния (вектор х) ЛСС соответственно; ОМ (SISO) — одномерная система (имеет один вход и один выход); ММ (MIMO) — многомер- ная система (имеет несколько входов и выходов). Таблица 4.1. Атрибуты (поля) LTI-объектов Атрибут Описание Специфические атрибуты передаточных функций (TF-объектов) Num Числитель. Вектор-строка — для ОМ-систем; массив ячеек из векторов-строк размером NYxNU — для ММ-систем. Например: {[10] 1; 3 [1 2 3]} Den Знаменатель. Вектор-строка — для ОМ-систем; массив ячеек из векторов-строк размером NYxNU — для ММ-систем. Например, запись tf({— 5; [1 -5 б]}, {[1 -1]; [110]}) определяет систему с одним входом и двумя выходами: [-5/(s-1)] [(s2 - 5s + 6)/(s2 + s)J Variable Имя (тип) переменной (из перечня). Возможные варианты: s, р, z, zA(-l) или q. По умолчанию принимается s (для непрерывных переменных) и z (для дискретных). Имя переменной влияет на отображение и создает дискретную ПФ для дискретных сигналов Специфические атрибуты ZPK-объектов Z Нули. Вектор-строка — для ОМ-систем; массив ячеек из векторов-строк размером NYxNU — для ММ-систем Р Полюсы. Вектор-строка — для ОМ-систем; массив ячеек из векторов-строк размером NYxNU — для ММ-систем К Коэффициенты передачи. Число — для ОМ-систем; матрица размером NYxNU — для ММ-систем Variable Имя (тип) переменной (из перечня). То же, что и для TF-объектов (см. выше) Специфические атрибуты SS-объектов (моделей пространства состояния) а, Ь, с, d Матрицы А, В, С, D, соответствующие уравнениям в пространстве состояния: Edx/dt = Ах + Ви; у = Сх + Du Е Матрица Е для систем пространства состояния. По умолчанию Е = eye(size(A)). StateName Имя переменной состояния (необязательное). Массив ячеек из строк размером ИХх1(используйте символы'' для состояний без имени). Например: {'position'/velocity'} Атрибуты, общие для всех LTI-моделей Ts Дискрет по времени (в секундах). Положительный скаляр (период дискретизации): Ts = -1 — для дискретных систем с неустановленной частотой дискретизации; Ts = 0 — для непрерывных систем продолжение &
152 Урок 4 • Объектно-ориентированное программирование Таблица 4.1 (продолжение) Атрибут Описание Td Задержки входов (в секундах). Вектор времени задержек входов размером IxNU. Установление Td как скаляра определяет единую задержку для всех входов. Используется только для непрерывных систем. Используйте D2D для установки задержек в дискретных системах. Td - [] — для дискретных систем InputName Имена входов. Строка — для систем с одним входом. Массив ячеек из строк размером NUxl — для систем с несколькими входами (используйте символы ‘1 для переменных без имени). Например: 'torque' или {'thrust'; 'aileron deflection'} OutputName Имена выходов. Строка — для систем с одним выходом. Массив ячеек из строк размером NYxl — для систем с несколькими выходами (используйте символы'' для переменных без имени). Например: 'power' или {'speed1; 'angle of attack'} Notes Заметки. Любая строка или массив ячеек из строк символов. Например: 'Эта модель создана в течение 2000 года' Userdata Дополнительная информация или данные. Используется любой из типов MATLAB Приведем перечень методов класса LTI: augstate damp get kalman margin parallel set tzero balneal display gram kalmd modred pzmap sigma uplus bode dssdata impulse Iqgreg nichols quickset ss2ss zpkdata canon eig inherit Iqry norm reg ssdata connect estim initial Isim nyqui st rlocfi nd step covar evalfr isct Iti obsv r locus tfdata ctrb fgrid 1 SSI so Iticheck pade series trange Конструктором LTI-объектов является файл Lti.m в подкаталоге @LTI. Он создает только шаблон LTI-объекта по некоторым его параметрам. Ниже приведен текст шаблона. function sys = Iti(p.m.T) XLTI Конструктор LTI-объекта X SYS = LTI(P.M) создает LTI-объект размером pxm X SYS = LTI(P.M.T) создает LTI-объект размером pxm с дискретом времени T Я По умолчанию система непрерывна, а имена входа/выхода являются X векторами ячеек с пустыми строками пт - nargin; error!nargchk(1.3.nl)) if isaCp.'lti") X Дублирование LTI-объекта sys = p; return elseif nl = ЗИ-0,
Производные классы 153 sys.Ts “ Т; sys.Td “ []: else sys.Ts = 0; sys.Td - zeros(l.m); end estr = {''}; sys.InputName = estr(ones(m.l).l); sys.OutputName = estr(ones(p.l).l): sys.Notes = {}; sys.UserData - []; sys.Version =10; sys - class(sys.'lti'); % Конец @1ti/1ti. m Как видно из приведенного описания, непосредственное применение конструкто- ра Iti позволяет задать только количество входов и выходов ЛСС, а также вели- чину дискрета времени. Остальные атрибуты LTI-объекта могут быть определены только с использованием других процедур: имена входов и выходов, некоторые вспомогательные данные — посредством процедуры set; конкретные числовые характеристики ЛСС — с помощью одного из конструкторов дочерних классов. Рассмотрим пример создания LTI-объекта для непрерывной ОМ-системы. » sys = Iti(1.1) Iti object Убедимся, что созданный LTI-объект имеет указанные параметры — воспользу- емся процедурой get (sys) для получения значений атрибутов этого объекта. » get(sys) Ts = 0 Td = 0 InputName - {''} OutputName = {''} Notes ” {} UserData - [] Как видите, большинство полей созданного LTI-объекта пусты, только два из них равны нулю. Кроме того, из описания конструктора следует, что обращение к нему не предусматривает возможности установки значений таких полей LTI-объекта, как InputName, OutputName, Notes и UserData. Последнее можно сделать, лишь исполь- зуя специальную функцию set, обращаясь к ней таким образом: зе1(<имя_1Т1-объекта>. '<имя_поля>'. <значение>). Рассмотрим это на примере установки значений некоторых из указанных полей в уже сформированном LTI-объекте sys. » set(sys.'InputName'.'Угол','OutputName','Напряжение','Notes'.'Гиротахометр') Проконтролируем результат. » get(sys) Ts = 0 Td - 0 InputName - {'Угол'}
154 Урок 4 • Объектно-ориентированное программирование OutputName = {'Напряжение'} Notes = {'Гиротахометр'} UserData - [] Подробнее с методами пакета Control и их использованием можно ознакомиться в главе 6. Пример создания класса polynom Создание нового класса рассмотрим на примере класса многочленов. Назовем его polynom. Объектом этого класса будет полином, то есть функция одной перемен- ной (например, х). р(х) = ап*хАп + ... + а2*хЛ2 + а1*х + аО Очевидно, полином как функцию можно полностью определить целым положи- тельным числом п, задающим наибольший показатель степени аргумента, коэф- фициент при котором не равен нулю (ап не равно нулю), и вектором его коэффи- циентов, имеющим длину п+1. с = [ап ... а2 al аО] Создание подкаталога @polynom Для создания подкаталога вызовите из командного окна команду Файл ► Открыть, в появившемся окне перейдите к папке Toolbox\Matlab\Polyfun и воспользуйтесь кнопкой создания новой папки в этом окне, чтобы открыть папку по имени ©PO- LYNOM. Перейдя в нее, вы будете готовы к созданию М-файлов нового класса. Конструктор класса Первый шаг при создании нового класса объектов — создание конструктора, ро- lynom-объекта, то есть М-файла, который образует новый polynom-объект по не- которым заданным числовым данным. Для этого прежде необходимо установить структуру polynom-объекта в виде записи. Из характеристики полинома как мате- матического объекта следует, что можно выбрать представление polynom-объекта в виде записи, которая состоит из двух полей: On — целое число, задающее порядок полинома; О с — вектор коэффициентов полинома, имеющий длину п+1. Очевидно, входным аргументом polynom-объекта должен быть заданный вектор его коэффициентов. В процедуре конструктора нужно предусмотреть такие операции: О создание структуры (записи) р с полями р. п и р. с; О преобразование этой структуры в polynom-объект. Последнее осуществляется посредством специальной функции cl ass: р - classCp.'<имя класа>')
Пример создания класса polynom 155 Ниже приведен возможный текст М-файла polynom. m. function р = polynom(v.cs); X POLYNOM - конструктор polynom-обьектов X Под polynom-обьектом понимается объект языка MATLAB, который является записью с двумя полями: % .с - вектор-строка, содержащая коэффициенты полинома, расположенные в порядке X уменьшения степени аргумента: Я .п - число, равное порядку полинома X р = POLYNOM(v) формирует polynom-обьект "р" по заданному вектору "V. X который состоит из значений коэффициентов будущего полинома. X в порядке уменьшения степени аргумента X р - POLYNOM(v.cs) формирует polynom-обьект "р" по заданному вектору "v" корней полинома X и значению "cs" его старшего коэффициента if nargin = 0 X Эта часть р.с = []: X создает пустой полином-объект, р.п -0; X если отсутствуют аргументы р = class(p.'polynom'): elseif isa(v.'polynom') % Эта часть создает дубликат. р = v X если аргумент является polynom-обьектом elseif nargin = 2 1 Эта часть работает, если в обращении X есть два аргумента.то есть задан вектор корней полинома if cs = 0 X Если старший коэффициент равен нулю. cs = 1: X его следует заменить единицей: end k = length(v); % Определение длины заданного вектора коэффициентов for i = 1 : k vs(i.:) = [1 -v(i)]; end p.n = k; 1 Определение порядка полинома р.с = cs*vs(l,:); 1 Формирование for n = 2 : k X вектора р.с = conv(p.c,vs(n,:)): % коэффициентов end % полинома else p = class(p.'polynom'); % Присвоение метки polynom-обьекта 1 Эта часть работает, если аргумент один. X то есть задан вектор коэффициентов k - length(v); п = к: т-1: end while v(m) == 0 % Этот цикл сокращает длину входного вектора X (уменьшает порядок полинома) в случае. % если первые элементы вектора n - n - 1; m = m + 1; end % равны нулю p.n - n - 1; X Тут присваиваются значения полям р.с = v(k - n + 1: end); X записи будущего polynom-обьекта P = class(p.'polynom'); X Присвоение метки polynom-обьекту X Завершение конструктора POLYNOM Система MATLAB позволяет вызывать конструктор без аргументов. В этом слу- чае конструктор может образовать шаблон объекта с пустыми полями. Возможно также, что конструктор будет вызываться с входным аргументом, который уже является полином-объекгом. Тогда конструктор должен создать дубликат вход- ного аргумента. Функция isa проверяет принадлежность входного аргумента к ука- занному классу. Если аргумент существует и является единственным, он перестраивается таким образом, что становится вектором-строкой и присваивается полю .с результата.
156 Урок 4 • Объектно-ориентированное программирование При наличии двух аргументов первый из них является вектором корней полино- ма, а второй — значением старшего коэффициента полинома. Поскольку в этом случае порядок полинома обязательно должен быть равен числу корней, старший коэффициент не может быть равным нулю. Поэтому, если второй аргумент оши- бочно введен равным нулю, он исправляется на единицу Функция class использу- ется для присвоения результату метки, которая определяет его как polynom-объект. Процедура символьного представления polynom-объекта Следующим шагом в формировании класса polynom целесообразно сделать созда- ние М-файла, который должен образовывать символьное представление заданного polynom-объекта. Такое представление позволит проверять правильность форми- рования polynom-объектов и контролировать правильность действий создавае- мых методов класса polynom, а также получать наглядные результаты преобразо- ваний полиномов в программах. Создадим этот М-файл в подкаталоге @POLYNOM и назовем его char. Единствен- ным аргументом процедуры char является заданный polynom-объект р, а выход- ной величиной — массив символов s, являющийся символьным представлением полинома. Ниже приведен вариант такого М-файла, формирующий символьную строку вида <значение_ап>*хАп + ... + <значение_а2>*хА2 + <значение_а1>*х + ... + <значение_аО> с изъятием членов, коэффициенты при которых равны нулю. function s = char(p) X POLYNOM/CHAR формирует символьное представление полинома с - р.с; if al1(с = 0) S - 'О’; else d - р.п; п ~ d + 1. s = []: for k - 1 п а - c(k). if а -= 0; if isempty(s) & a == 1 s = [s ’x*’ int2str(d)]; end if - isempty(s) if a > 0 s - [s ' + el se s - [s ’ - ']; a = -a; end end if a — l|d == 0 s = [s num2str(a)J: if d > 0
Пример создания класса polynom 157 s - [s end end if d >= 2 s = [s 'x" int2str(d)]: elseif d “ 1 s - [s 'x']: end end d = d - 1: end end % Завершение POLYNOM/CHAR Для того чтобы эта символьная строка выводилась на экран, нужно создать еще один М-файл с именем display.m в том же подкаталоге @POLYNOM. Метод display автоматически вызывается каждый раз, когда исполняемый опера- тор не заканчивается точкой с запятой. Для многих классов метод di spl ay просто выводит на экран имя переменной, а затем использует преобразователь char, что- бы вывести на экран символьное изображение объекта. Для рассматриваемого случая он может иметь такой вид: function display(p) X POLYNOM/DISPLAY вывод на экран polinom-обьекта dispC): disp([' ’.inputname(l).' - ',char(p),': dispC): X Завершение POLYNOM/DISPLAY Проверим эффективность работы трех созданных М-файлов на простом примере. Сформируем вектор коэффициентов полинома » V = [0 0 0 -1 2 3 4 0 0 -6 -5 -7] V - 0 0 0 -1 2 3 4 0 0 -6 -5 -7 Создадим на его основе polynom-объект и сразу выведем его символьное изобра- жение на экран. Для этого достаточно не поставить символ «;» после обращения к функции polynom. » Poll = polynom(V) Poll = -1*хЛ8 + 2*xA7 + 3*хЛ6 + 4*хЛ5 - 6*хЛ2 - 5*х - 7; Создадим теперь polynom-объект по заданным его корням и значению старшего коэффициента. » Ро12 = polynom([l 2 3 4 5],-5) Pol 2 = -5*хА5 + 75*хА4 - 425*хЛ3 + 1125*хЛ2 - 1370*х + 600: Проверим корни созданного полинома, используя процедуру roots (см. далее). » roots(Po!2) ans = 5.0000 4.0000 3.0000 2.0000 1.0000 Как свидетельствует результат, все созданные М-файлы работают нормально.
158 Урок 4 • Объектно-ориентированное программирование Методы класса В системе MATLAB существует возможность создавать процедуры, которые метут быть выполнены не только стандартным путем (посредством обращения к имени процедуры), но и более простым способом — с использованием знаков арифмети- ческих действий, операций сравнения, скобок и т. п. Так, в предыдущем разделе мы имели возможность убедиться, что процедура di spl ay выполняется не только при явном обращении вида dlsplay(x), но и неявно, если некоторый оператор формирует величину х, а после этого оператора отсутствует символ <;». Поэтому если в любом новом классе объектов присутствует М-файл с именем display, он будет выполняться во всех случаях, когда очередной оператор, создающий объект этого класса, не заканчивается точкой с запятой. Приведем перечень имен таких М-файлов, предусмотренных системой MATLAB, с указанием оператора их неявного вызова (табл. 4.2). Таблица 4.2. Операторные функции Оператор вызова Имя М-файла Условное название Особенности применения + а upLus(a) Добавление знака «+» Один аргумент. Результат относится к тому же классу, что и аргумент - а uminus(a) Добавление знака «-» Один аргумент. Результат относится к тому же классу, что и аргумент а + Ь plus(a,b) Сложение Два аргумента. Результат относится к тому же классу, что и аргументы а - Ь minus(a,b) Вычитание Два аргумента. Результат относится к тому же классу, что и аргументы а*Ь mtimes(a,b) Умножение Два аргумента. Результат относится к тому же классу, что и аргументы а/Ь mrdivide(a,b) Правое деление Два аргумента. Результат относится к тому же классу, что и аргументы а\Ь mldivide(a,b) Левое деление Два аргумента. Результат относится к тому же классу, что и аргументы АЛЬ mpower(a,b) Степень Два аргумента. Результат относится к тому же классу, что и аргументы а.*Ь times(a,b) Умножение поэлементное Два аргумента. Результат относится к тому же классу, что и аргументы а./Ь rdivide(a,b) Правое деление поэлементное Два аргумента. Результат относится к тому же классу, что и аргументы а.\Ь Ldivide(a,b) Левое деление поэлементное Два аргумента. Результат относится к тому же классу, что и аргументы а.лЬ power(a,b) Степень поэлементная Два аргумента. Результат относится к тому же классу, что и аргументы а<Ь lt(a,b) Меньше Два аргумента. Результат — логическая величина
Пример создания класса polynom 159 Оператор вызова Имя М-файла Условное название Особенности применения а>Ь gt(a,b) Больше Два аргумента. Результат — логическая величина а<- b le(a,b) Меньше Два аргумента. Результат — логическая а>- Ь ge(a,b) или равно Больше величина Два аргумента. Результат— логическая а--Ь eq(a,b) или равно Равно величина Два аргумента. Результат— логическая А' ctranspose(a) Транспонирование величина Один аргумент. Результат относится а.' transpose(a) Транспонирование к тому же классу, что и аргумент Один аргумент. Результат — относится а: d: Ь colon(a,d,b) Формирование к тому же классу, что и аргумент Два или три аргумента. а: Ь colon(a,b) вектора Результат-вектор относится к тому же Вывести display(a) Вывод на экран классу, что и аргументы Один аргумент. Результат — в командном окне [ab] horzcat(a,b,...) Объединение изображение на экране символьного представления аргумента Два или более аргументов. Результат — [а;Ь] vertcat(a,b,...) в строку Объединение вектор-строка из аргументов Два или более аргументов. Результат — a(sl,...,sn) subsref(a,s) в столбец Индексная ссылка вектор-столбец из аргументов a(sl,...sn) - b subsasgn(a,s>b) Индексное b(a) subsindex(a,b) выражение Индекс подмассива Перечисленные в таблице процедуры в MATLAB могут быть переопределены под теми же именами во всех новообразованных подкаталогах классов. После этого обычные операторы арифметических действий и операций сравнения могут при- меняться и при оперировании объектами новых классов. Смысл этих операций бу- дет определяться содержимым соответствующих М-файлов в подкаталогах классов. Исходя из вышесказанного можно сделать вывод, что М-файлов с названиями, приведенными в табл. 4.2, может быть много. MATLAB различает их по типу ар- гументов, указанных в перечне входных параметров. Создадим, например, операцию (метод) сложения полиномов, используя опера- торную процедуру plus. Текст соответствующего М-файла для подкаталога ©PO- LYNOM приведен ниже. function г = plus(p.q) X POLYNOM/PLUS Сложение полиномов г = р + q р = polynom(p); q = polynom(q):
160 Урок 4 • Объектно-ориентированное программирование k = q.n - р.п; г = polynom([zeros(l.k) р. с] + [zeros(l.-k) q.c]); X Завершение POLYNOM/PLUS Сначала процедура переводит оба аргумента в класс polynom. Это нужно для того, чтобы метод работал и тогда, когда один из аргументов задан как вектор, или когда в качестве аргумента используется выражение типа р+г, где р — polynom-объект, аг — число. Затем процедура дополняет нулями векторы коэффициентов поли- номов-слагаемых, если в этом возникает необходимость (при неодинаковых по- рядках полиномов). Фактически сложение сводится к сложению этих исправлен- ных векторов коэффициентов. Заключительной операцией является создание по полученному вектору полинома суммы нового polynom-объекта с помощью кон- структора полиномов. Проиллюстрируем работу этого метода на примере. Вве- дем вектор коэффициентов первого полинома: » VI = [ 2 -3 0 6]; и создадим из него полином-объект: » Pl = polynom(Vl) Pl = 2*хЛ3 - 3*хЛ2 + б Образуем таким же образом второй полином: » V2 = [2 0 0 9 0 0 -3 +5]: » Р2 = polynom(V2) Р2 = 2*хЛ7 + 9*хЛ4 - 3*х + 5 Сложим эти полиномы: » Р1 + Р2 В результате получим: ans = 2*х~7 + 9*х"4 + 2*хЛ3 - 3*хЛ2 - 3*х + 11 Аналогичные результаты получаются и в случае, если один из аргументов «оши- бочно» представлен вектором: » Р1 < V2 ans = 2*хЛ7 + 9*хА4 + 2*хА3 - 3*хА2 - 3*х + 11 » VI + Р2 ans = 2*х~7 + 9*х"4 + 2*хЛ3 - 3*хЛ2 - 3*х + 11 Однако если оба аргумента представлены векторами, система сразу же отреаги- рует на это, обнаружив ошибку: » VI + V2 ??? Error using => + Matrix dimensions must agree В этом случае система уже использует не М-файл plus.m из подкаталога ©POLY- NOM, а аналогичную встроенную процедуру для векторов. Эта процедура осуще- ствляет сложение векторов лишь при условии, что длина их одинакова. Поэтому и возникает ошибка.
Пример создания класса polynom 161 Аналогичной является процедура вычитания polynom-объектов: function г = mlnus(p.q) X POLYNOM/MINUS Вычитание полиномов г = р - q р - polynom(p); q - polynom(q); k = q.n - р n. r = polynom([zeros(l.k) pc]- [zeros(l.-k) q c]); X Завершение POLYNOM/MINUS Проверим работу этой процедуры на примере: » Pl - Р2 ans = -2*хЛ7 - 9*х"4 + 2*хА3 - 3*х"2 + 3*х + 1. Создадим еще несколько методов класса polynom. О double — по заданному полиному определяет вектор его коэффициентов и по- рядок: function [v.n] = double(p) X POLYNOM/DOUBLE - преобразование polynom-объекта в вектор его коэффициентов X v - DOUBLE(p) превратит полином-объект "р" в вектор "v". X содержащий коэффициенты полинома, расположенные в порядке уменьшения ? степени аргумента X Обращение [v.n] = OOUBLE(p) позволяет получить также 2 значение "п" порядка этого полинома. V = р с: п = р п, X Завершение POLYNON/OOUBLE О diff — создает polynom-объект, являющийся производной от заданного поли- нома: function q = dlff(p) X POLYNOM/OIFF формирует polynom-производную “q" X от заданного полинома "р" р = polynom(p); d = р п; q = polynomfp.cd d).*(d : -1 : D); X Завершение POLYNOM/DIFF О mtlmes — создает polynom-объект, являющийся произведением двух заданных полиномов: function г - mtimes(p.q) Я POLYNOM/MTIMES Произведение полиномов: г = p*q р = (р): q = polynom(q); г = polynom(conv(p.c.q.c)); X Завершение POLYNOM/MTIMES О mrdi vi de — создает два polynom-объекта, один из которых является частным от деления первого из указанных полиномов на второй, а второй — остатком та- кого деления: function rez = mrdivide(p.q) Ж POLYNOM/MRDIVIDE Деление полиномов г = p/q р = polynom(p); q = polynom(q); [rr.ro] = deconv(p.c.q.c);
162 Урок 4 * Объектно-ориентированное программирование rez{l) - polynom(rr); rez(2} - polynom(ro); X Завершение POLYNOM/MRDIVIDE О roots — создает вектор корней заданного полинома: function г = roots(p) X POLYNOM/ROOTS вычисляет вектор корней полинома "р" р = polynom(p); г - roots(p.c); X Завершение POLYNOM/ROOTS О polyval — вычисляет вектор значений заданного полинома по заданному век- тору значений его аргумента: function у - polyval(p.x) X POLYNOM/POLYVAL вычисляет значение полинома ”р" X по заданному значению аргумента “х" р = polynom(p); У - 0: for а - р.с у = у.*х + а; end X Завершение POLYNOM/POLYVAL О plot — строит график зависимости значений заданного полинома в диапазоне значений его аргумента, который содержит все его корни: function plot(p) X POLYNOM/PLOT - построение графика полинома ”р" р = polynom(p); г = max(abs(roots(p.c))); х = (-1.1:0.01:1.1)*г; у = polyvaKp с.х); plot(x.y). grid. title(char(p)). xlabelC'X’); X Завершение POLYNOM/PLOT О rdivide(p.xr) осуществляет деление полинома р на число хг: function г = rdivide(p.xr) X POLYNOM/RDIVIDE - правое деление полинома на число X г = р/хг р = polynom(p). г.с = р.с/хг; г = polynom(r.c); X Завершение POLYNOM/RDIVIDE Проверим действие некоторых из созданных методов: » Pol - polynom([l 2 3 4 5]) Pol = х‘4 + 2*хА3 + 3*х*2 + 4*х + 5: » v = roots(Pol) v = 0.2878 + 1.41611 0.2878 - 1.41611 -1.2878 + 0.85791 -1.2878 - 0.85791 » plot(Pol) Результат представлен на рис. 4.2.
Вопросы для самопроверки 163 Рис. 4.2. Результат выполнения процедуры plot для polynom-объекта Чтобы получить перечень всех созданных методов класса, следует воспользоваться командой methods <имя_класса>. Например: » methods polynom Methods for class polynom: char display minus mtimes plus polyval roots diff double mrdivide plot polynom rdivide Теперь мы имеем удобный вычислительный аппарат для работы с полиномами. Развивая его дальше, можно создать новый класс более сложных объектов — класс рациональных передаточных функций, которые являются конструкцией в виде дроби, числителем и знаменателем которой являются полиномы. Для этого класса также можно определить важные для инженера операции сложения передаточ- ных функций (которое соответствует параллельному соединению звеньев с за- данными передаточными функциями), умножения (ему соответствует последова- тельное соединение звеньев) и многие другие, отвечающие определенным типам соединений звеньев. На такой основе создан, к примеру, класс tf (Transfer Fun- ction), используемый в пакете Control. Вопросы для самопроверки 1. Что следует понимать в MATLAB под классом вычислительных объектов и под методами класса? 2. Какие классы вычислительных объектов составляют основу MATLAB? 3. Какие производные классы используются в MATLAB? 4. Каким образом можно создать в MATLAB новые классы вычислительных объектов? 5. Для каких целей можно использовать классы Inline, cell, struct, char? 6. Как создать собственный класс вычислительных объектов? 7. Как создать методы собственного класса вычислительных объектов? 8. Каким образом можно обеспечить' использование знаков арифметических операций для выполнения действий над объектами создаваемого класса?
УРОК Цифровая обработка сигналов □ Проектирование фильтров в пакете Signal Processing Toolbox □ Формирование типовых процессов □ Общие средства фильтрации □ Формирование случайных процессов □ Процедуры спектрального (частотного) и статистического анализа □ Проектирование фильтров □ Графические и интерактивные средства
Проектирование фильтров в пакете Signal Processing Toolbox 165 Цифровая обработка сигналов традиционно включает в себя создание средств численного преобразования массива значений заданного (измеренного в дискрет- ные моменты времени) процесса изменения некоторой непрерывной физической величины с целью извлечения из него полезной информации о другой физиче- ской величине, содержащейся в измеренном сигнале. в пакете ignal Processing Toolbox Общая схема образования измеряемого сигнала и процесса его преобразования в целях получения информации о полезной величине представлена на рис. 5.1. Полезный сигнал Первичный прворазователь Шум ПП Измеряемая величина^-- Измеритель Шум измерителя Измеренная величина Дискретный преобразователь Шум дискретизации Массив измерений Фильтр Обработанная информация Рис. 5.1. Схема измерения и преобразования сигнала Полезная физическая величина, то есть величина, несущая в себе необходимую информацию, редко обладает физической формой, подлежащей непосредствен- ному измерению. Обычно она является лишь составляющей (стороной, частью, чертой) некоторой другой физической величины, которая может быть непосред- ственно измерена. Связь между этими двумя величинами обозначим введением звена, которое назовем первичным преобразователем (ПП). Закон преобразова- ния должен быть известен заранее, иначе восстановить информационную состав- ляющую в дальнейшем будет невозможно. ПП обычно обусловливает появление зависимости сигнала, который может быть измерен, от некоторых других физиче- ских величин. Поэтому его выходная величина содержит кроме полезной инфор- мационной составляющей, вредные составляющие или черты, искажающие полезную информацию. И хотя зависимость выхода ПП от вредных величин также извест- на, вследствие возможного неконтролируемого изменения последних со време- нем бывает трудно спрогнозировать их влияние на искажение полезной состав- ляющей. Назовем вносимую ПП вредную составляющую шумом ПП.
166 Урок 5 * Цифровая обработка сигналов Пусть полученная таким образом непосредственно измеряемая величина опреде- ляется с помощью некоторого измерителя. Любой реальный измеритель вносит собственные искажения в измеряемую величину и дополнительные зависимости от некоторых других физических величин, не являющихся объектом измерения. Назовем эти искажения шумами измерителя. Не ограничивая общности, будем полагать, что выходной величиной измерителя является электрический сигнал (измеренная величина), который в дальнейшем можно довольно просто преобра- зовывать посредством электрических устройств. Перед тем как подвергнуться цифровой обработке, измеренная величина должна быть преобразована в дискретную форму при помощи специального устройства, которое содержит экстраполятор и аналого-цифровой преобразователь (АЦП). Первый фиксирует текущее значение измеренной величины в отдельные момен- ты времени через определенный постоянный промежуток времени, называемый дискретом времени. Второй переводит это значение в цифровую форму, которая позволяет в дальнейшем осуществлять преобразования с помощью цифровых ком- пьютеров. Хотя оба устройства могут вносить собственные искажения в выходной (дискретный) сигнал, ими обычно пренебрегают, так как в большинстве случаев эти дополнительные искажения значительно меньше шумов ПП и измерителя. Чтобы на основе полученного сигнала получить полезный сигнал, нужно рассчи- тать и создать устройство (программу для компьютера), осуществляющее такие преобразования входного дискретного во времени сигнала, которые позволят на его выходе минимизировать (в некотором смысле) искажения, внесенные шума- ми ПП и измерителя. Это устройство называют фильтром. В общем случае создание (проектирование) фильтра является задачей неопреде- ленной. Ее можно конкретизировать лишь на основе предварительно получен- ных знаний о закономерности образования измеряемой величины (модели ПП), о модели образования измеренной величины из измеряемой (модели измерителя) и характеристиках изменения во времени вредных физических величин, влияю- щих на образование измеряемой и измеренной величин, а также закономерностей их влияния на искажение полезной информации. Поскольку модели ПП и измерителя метут быть весьма разнообразными, тради- ционно задачу фильтрации решают только для некоторых наиболее распростра- ненных на практике видов таких моделей, чаще всего — для линейных. В общем случае процесс создания фильтра включает следующие этапы. О На основе априорной информации о моделях ПП и измерителя и о характери- стиках шумов, а также о задачах, решаемых с помощью фильтра, выбирается определенный тип фильтра из известных, теория проектирования которых разработана. О На основе конкретных числовых данных рассчитываются числовые характе- ристики выбранного типа фильтра (создается конкретный фильтр). О Проверяется эффективность выполнения разработанным фильтром постав- ленной перед ним задачи. Для этого необходимо сымитировать на ЭВМ дис- кретный сигнал, содержащий полезную (информационную) составляющую
Формирование типовых процессов 167 с наложенными на нее предусмотренными шумами ПП и измерителя, «про- пустить» его через построенный фильтр и сравнить полученный на выходе сигнал с известной (в данном случае) полезной его составляющей; разность ме- жду ними будет характеризовать погрешности измерения на выходе фильтра. О Поскольку в реальных условиях некоторые характеристики шумов могут от- личаться от принятых при проектировании (создании фильтра), не лишними будут испытания эффективности работы фильтра в условиях, более прибли- женных к реальным, нежели принятые при проектировании. Пакет Signal Processing Toolbox (в дальнейшем сокращенно Signal) предназначен для осуществления операций, проводимых на трех последних этапах. Он позво- ляет проектировать цифровые и аналоговые фильтры (рассчитывать конкретные числовые характеристики) по требуемым амплитудно-частотным и фазово-час- тотным их характеристикам, формировать последовательности типовых времен- ных сигналов и обрабатывать их спроектированными фильтрами. В пакет входят процедуры, осуществляющие преобразования Фурье, Гильберта, а также статисти- ческий анализ. Пакет применяется для расчета корреляционных функций, спек- тральной плотности мощности сигнала, оценки параметров фильтров по изме- ренным отсчетам входной и выходной последовательностей. Формирование типовых процессов Неизбежным этапом моделирования процессов фильтрации является имитация (генерирование) сигналов заданной формы. Пакет Signal предоставляет широкие возможности для формирования сигналов различных видов. В этом разделе мы ознакомимся с некоторыми из таких возможностей. Одиночные импульсные процессы В пакете Signal предусмотрено несколько процедур, образующих последователь- ности данных, представляющие некоторые одиночные импульсные процессы ти- повых форм. Процедура rectpul s обеспечивает формирование одиночного импульса прямо- угольной формы. Обращение вида у = rectpuls(t.w) позволяет образовать вектор у значений сигнала такого импульса единичной ам- плитуды, имеющий ширину w, центрированный относительно t, равного 0, по за- данному вектору t моментов времени. Если ширина импульса не указана, ее значе- ние по умолчанию принимается равным единице. На рис. 5.2. приведен результат генерирования процесса, состоящего из трех последовательных прямоугольных импульсов разной высоты и ширины, по такой совокупности команд: t - 0 : 0.01 : 10; у = 0.75*rectpuls(t - 3. 2) + 0.5*rectpuls(t - 8. 0.4) +... 1.35*rectpuls(t - 5. 0.8);
168 Урок 5 • Цифровая обработка сигналов plot(t.y).grid. setCgca.'FontSize'.12) titleC'Пример применения процедуры RECTPULS') х1аЬе1('Время (с)'), ylabel('Выходной процесс YCt)’) Формирование импульса треугольной формы единичной амплитуды можно осу- ществить с помощью процедуры tri puls: у = tripuls(t.w.s) Аргументы у, t и w имеют тот же смысл. Аргумент s (-!<$<!) определяет наклон треугольника. Если $ = 0, или аргумент не указан, треугольный импульс имеет симметричную форму. Приведем пример (результат представлен на рис. 5.3): t = 0 : 0.01 : 10; у = 0.75*tripuls(t - 1. 0.5) + 0.5*tripuls(t - 5, 0.5. -1) +... 1.35*tripuls(t - 3. 0.8. 1); plot(t.y). grid. setCgca.'FontSize'.12) titleC'Пример применения процедуры TRIPULS') xlabelC'Время (c)'). ylabel('Выходной процесс Y(t)') Рис. 5.2. График процесса, сгенерированного Рис. 5.3. График процесса, сгенерированного функцией rectpuls функцией tripuls Для формирования импульса, являющегося синусоидой, модулированной функ- цией Гаусса, используется процедура gauspuls. При обращении к ней у = gauspuls(t.fc.bw) создается вектор значений указанного сигнала с единичной амплитудой, с сину- соидой, изменяющейся с частотой fc (Гц), и с шириной полосы частот сигнала bw. В том случае, когда два последних аргумента не указаны, они по умолчанию при- нимают значения 1000 и 0,5 Гц соответственно. Приведем пример создания оди- ночного гауссова импульса (результат приведен на рис. 5.4): t = 0 : 0.01 : 10: у = 0.75*gauspuls(t - 3.1.0.5); plot(t.y).grid. setCgca.'FontSize'.12) titleC'Пример применения процедуры GAUSPULS') хТаЬеН'Время (с)'), ylabel('Выходной процесс YCt)')
Формирование типовых процессов 169 Наконец, рассмотрим процедуру sine, формирующую вектор значений функции sinc(t), которая определяется следующими формулами: 1 при 7=0, sinc(t) = sin(n7) _ —-—- при t*0. nt Эта функция является обратным преобразованием Фурье прямоугольного им- пульса шириной 2 л и высотой 1: Л Приведем пример ее применения (результат представлен на рис. 5.5): t = 0 : 0.01 : 50: yl = 0.7*sinc(pi*(t - 5)/5); plot(t.yl). grid. set(gca.‘FontSize’.12) titlef’Функция SINC Y(t) - 0.7*SINC(pi*(t - 25)/5)') х1аЬе1(’Время (c)'). ylabeH'Выходной процесс Y(t)') Рис. 5.4. График процесса, сгенерированного функцией gauspuls Рис. 5.5. Результат применения функции sine Колебательные процессы Формирование колебаний, представляющих собой сумму конечного числа гармо- нических составляющих (так называемых полигармонических колебаний) можно осуществить с помощью обычных процедур sin(x) и cos(x). Рассмотрим пример (результат приведен на рис. 5.6): t = 0 : 0.01 : 50: yl = 7*sin(pi*t/5); plot(t.yl).grid.set(gca.’FontSize'.12) titleC Гармонические колебания Y(t) =0.7* SIN(pi*t/5) ’) х1аЬе1('Время (c)'). ylabel('Выходной процесс Y(t)')
170 Урок 5 • Цифровая обработка сигналов Рис. 5.6. График синусоидального процесса Процесс, являющийся последовательностью прямоугольных импульсов с перио- дом 2л для заданной в векторе t последовательности отсчетов времени, «гене- рируется» с помощью функции square. Обращаться к ней следует в таком виде: у - square(t.duty) Здесь артумент duty определяет длительность положительной полуволны в про- центах от периода волны. Например (результат приведен на рис. 5.7): у - 0.7*square(pi*t/5.40) plot(t.y). grid. setCgca.'FontSize'.12) titleC'Прямоугольные волны YCt) - 0.7*SQUARE(pi*t/5.40)') xlabeK'Время (c)'). ylabelC'Выходной процесс Y(t)') Аналогично, генерирование пилообразных и треугольных колебаний осуществляет- ся с помощью функции sawtooth. При обращении к ней вида y=sawtooth(t.width) в векторе у формируются значения сигнала, представляющего собой пилообраз- ные волны с периодом 2л в моменты времени, которые задаются вектором t. При этом параметр width определяет часть периода, когда сигнал увеличивается. Рас- смотрим пример применения этой процедуры (результат приведен на рис. 5.8): у - 0.7*sawtooth(pi*t/5.0.5): plot(t.y), grid.setCgca.'FontSize'.12) titleC'Треугольные волны YCt) - 0.7* SAWTOOTH(pi*t/5.0.5)‘) xlabel('Время (c)'), ylabelC'Выходной процесс YCt)') Процедура pul stran позволяет формировать колебания, являющиеся последова- тельностью прямоугольных, треугольных либо гауссовых импульсов. Обращение к ней имеет такой вид: у - pulstran(t.d.'func'.pl.p2....) Здесь d — вектор значений тех моментов времени, где должны быть центры соот- ветствующих импульсов; func — параметр, определяющий форму импульсов; он может иметь одно из следующих значений: rectpul s (для прямоугольного импуль- са), tri puls (для треугольного импульса) gauspuls (для гауссова импульса); pl, р2,... — параметры импульса, необходимые для определения этого импульса.
Формирование типовых процессов 171 Рис. 5.8. Результат применения функции sawtooth Рис. 5.7. Результат применения функции square Ниже приведены три примера применения процедуры pulstran для разных форм импульсов-составляющих. О Для последовательности треугольных импульсов (рис. 5.9): t = 0 : 0.01 : 50: d - СО : 50/5 : 50]'; у = 0 7*pulstran(t. d 'tripuls'.5); plot(t.y). grid.set(gca.'FontSize'.12) titleC 'Y(t) = 0.7*PULSTRAN(t.d. "tripuls" .5)’ xlabelC'Время (c)‘). ylabelC'Выходной процесс YCt)') О Для последовательности прямоугольных импульсов (рис. 5.10): t - 0 : 0.01 : 50: d = СО : 50/5 : 50]'; у - 0 75*pulstran(t.d.'rectpuls'.3). plot(t.y). gnd,setCgca. 'FontSize' .12) title('YCt) = 0.75*PULSTRAN(t.d. "rectpuls".3)') xlabelC'Время (c)'). ylabel('Выходной процесс Y(t)') Рис. 5.9. Результат применения функции Рис. 5.10. Результат применения функции O.7*pulstran(td,'tripuls',5) 0.75*putstran(td,'rectpuls',3)
172 Урок 5 • Цифровая обработка сигналов О Для последовательности гауссовых импульсов (рис. 5.11): t = 0 : 0.01 : 50; d = [0 : 50/5 : 50]'; у = 0.7*pulstranCt.d.’gaiispuls'.1.0.5): plotct.y). grid.setCgca.'FontSize'.12) title('YCt) = 0.7*PULSTRANCt.d. "gauspuls" ,1.0.5)’) xlabelC'Время (c)’). ylabelС'Выходной процесс Y(t)') Рассмотрим теперь процедуру chi гр, формирующую косинусоиду, частота кото- рой линейно изменяется со временем. Общая форма обращения к этой процедуре такая: у = chirp(t.FO.tl.Fl) Здесь F0 — значение частоты (в герцах) при t, равном 0; tl — некоторое заданное значение момента времени; F1 — значение частоты (в герцах) изменения косину- соиды в момент времени tl. Если три последних аргумента не указаны, то по умолчанию им присваиваются такие значения: F0, равное 0; tl, равное 1; F1, рав- ное 100. Например: t = 0 : 0.001 : 1; у = 0.75*chirp(t): plotCt.y). grid. setCgca.'FontSize'.12) titleC'Пример процедуры CHIRP') xlabelC'Время (c)'). ylabelC'Выходной процесс YCt)') Результат представлен на рис. 5.12. Рис. 5.11. Результат применения функции Рис. 5.12. Результат применения 0.7*pulstran(td,'gauspuls',l,0.5) функции chirp Процедура di ric формирует массив значений функции Дирихле, определяемой со- отношениями: jiCn-i) diric(t) = sin(nt/2) nsin(t/2) при t = 2nk, k =0,± 1,±2,... при других значениях t Функция Дирихле является периодической. При нечетных значениях п период равен 2п, при четных — 4п. Максимальное ее значение равно 1, минимальное-1.
Общие средства фильтрации 173 Параметр п должен быть целым положительным числом. Обращаться к функции следует таким образом: у = diric(t.n) Ниже приведены операторы, которые иллюстрируют использование процедуры di И с и выводят графики функции Дирихле для и = 3, п = 4ип = 5 (рис. 5.13): t = 0 : 0 01 : 50; yl = О 7*diric(pi*t/5.3); plot(t.yl). grid.set(gca.’FontSize’.12) title(’Функция Дирихле Y(t) - 0.7* DIRIC(pi*t/5.3)') xlabeK'Время (c)’). ylabel(‘Выходной процесс Y(t)’) в Рис. 5.13. Функция Дирихле: а — при п = 3; б— при п = 4; в — при п - 5 Общие средства фильтрации Рассмотрим основы линейной фильтрации на примере линейного стационарного фильтра, который в непрерывном времени описывается дифференциальным урав- нением второго порядка: у + 2^aQy + с^у = Ах, (5.1)
174 Урок 5 • Цифровая обработка сигналов где х — заданный процесс, подаваемый на вход этого фильтра второго порядка; у — процесс, получаемый на выходе фильтра; <оо — частота собственных колеба- ний фильтра; £ — относительный коэффициент затухания этого фильтра. Передаточная функция фильтра имеет такой вид: = ------2’ -Т(^) S +2^Ш()5 + ©о (5 2) Для контроля и графического представления передаточной функции любого ли- нейного динамического звена удобно использовать процедуру freqs. В общем слу- чае обращаться к ней следует таким образом: h - freqs(b.a.w) При этом процедура создает вектор h комплексных значений частотной характе- ристики W(Ja) звена по передаточной функции W(^), заданной векторами коэф- фициентов ее числителя b и знаменателя а, а также по заданному вектору w часто- ты со. Если аргумент w не указан, процедура автоматически выбирает 200 отсчетов частоты, для которых вычисляется частотная характеристика. ^ПРИМЕЧАНИЕ Если не указана выходная величина, то есть обращение имеет вид freqs(b,a,w), процедура выводит в текущее графическое окно два графика — АЧХ и ФЧХ. Приведем пример. Пусть для передаточной функции (5.2) выбраны такие значе- ния параметров: А = 1; С, = 0,05; То = 2 л/со0 = 1. Вычислим значения коэффициентов числителя и знаменателя и выведем графи- ки АЧХ и ФЧХ (рис. 5.14). ТО - 1: dz - 0.05: omO - 2*pi/T0; А - 1; al(l) = 1; al(2) - 2*dz*om0. al(3) = om0^2; bld) - A; freqs(bl.al). title!'А Ч X и ФЧХ фильтра') Рис. 5.14. Результат работы процедуры FREQS Допустим, что заданный процесс x(t) представлен в виде отдельных его значений в лискпетные моменты воемени, которые разделены одинаковыми промежутками
Общие средства фильтрации 175 (дискретом времени) Т$. Обозначим через х(А) значение процесса в момент вре- мени t = kTs, где k — номер измерения от начала процесса. Запишем уравнение (5.1) через конечные разности процессов хи у, учитывая, что конечно-разностным эквивалентом производной у является конечная разность Аг/(Л) Ts Ts а эквивалентом производной второго порядка у является конечная разность вто- рого порядка А2у(&) _ Ау(^)-Ду(^-1) _у(^)-2у(^-1)+у(^-2) ’7"'2 »т’2 is is is Тогда разностное уравнение (l + 2^07i +^T^y{k)-2^ + ^Ts}y{k-V)+y(k-‘2.-) = ATlx{k) (5.3) является дискретным аналогом дифференциального уравнения (5.1). Применяя к полученному уравнению Z-преобразование, получим: y(z)[a0 + otz-1 + a2z~2] = AT2x(z), (5.4) где <20 = 1 + 2^<В()75 + > Oi = —2(1 + ^OqT^); (5.5) a2 = 1- Дискретная передаточная функция фильтра определяется из уравнения (5.4): 2 G(z) = ^ =----------(5-6) Qq + a^z + ci-2^ Таким образом, цифровым аналогом ранее введенного колебательного звена яв- ляется цифровой фильтр с коэффициентами числителя и знаменателя, рассчи- танными по формулам (5.4) и (5.5): ТО =1; dz - 0.05; Ts = 0.01: omO = 2*р1/Т0; А = 1; oms = omO*Ts. ad) = 1 + 2*dz*oms + oms*2; a(2) = -2*(1 + dz*oms): a(3) = 1: bd) = A*Ts*Ts*(2*dz*om0*2); Для того чтобы получить частотную дискретную характеристику G(e7“) по дис- кретной передаточной функции G (z), которая задана векторами значений ее чис- лителя Ъ и знаменателя а, удобно использовать процедуру freqz, обращение к ко- торой аналогично обращению к процедуре freqs. Результат приведен на рис. 5.15. freqz(b.a) tltleCA Ч X и Ф Ч X дискретного фильтра')
176 Урок 5 • Цифровая обработка сигналов Рис. 5.15. Результат действия процедуры freqz В системе MATLAB фильтрация, то есть преобразование заданного сигнала с по- мощью линейного фильтра, описываемого дискретной передаточной функцией G(z) = = b° + blZ—+-+b™z— t (5.7) x(z) a0 4-ajZ 1 +... + a„z n осуществляется процедурой filter при обращении к ней вида: у = filter(b.a.x) Здесь х — заданный вектор значений входного сигнала; у — вектор значений вы- ходного сигнала фильтра, получаемого вследствие фильтрации; b - вектор коэф- фициентов числителя дискретной передаточной функции (5.7) фильтра; а — век- тор коэффициентов знаменателя этой функции. В качестве примера рассмотрим такую задачу. Пусть требуется получить доста- точно верную информацию о некотором «полезном» сигнале, имеющем синусои- дальную форму с известным периодом Т1=1 и амплитудой А1=0.75 Сформируем этот сигнал как вектор его значений в дискретные моменты времени с дискретом Ts=0.001 (рис. 5.16): TS = 0 001; t = 0 : Ts : 20. Al = 0.75; Tl - 1; Yp = Al*sin(2*pi*t/Tl); plot(t(10002:end).Yp(10002:end)).grid. setCgca,'FontSize'.12) titleC'«Полезный процесс»'); xlabelC‘Время (с) ); ylabel('YpCt)') Допустим, что вследствие прохождения через ПП (первичный преобразователь) к полезному сигналу добавился шум ПП в виде более высокочастотной синусои- ды с периодом Т2=0.2 и амплитудой А2=5, а в результате измерения к нему еще до- бавился белый гауссов шум измерителя с интенсивностью Ash=5. В итоге создался такой измеренный сигнал x(t) (рис. 5.17): Т2 = 0.2; А2 = 10. eps = pi/4; Ash = 5: X = Al *sin(2*pi*t./Tl) + A2 *s1n(2*pi.*t./T2 + eps) + Ash*randn(l.length(t)); setCgca.'FontSize'.12). titleC'Входной процесс'); х1аЬе1('Время (c)'); ylabelС'X(t)')
Общие средства фильтрации 177 Обработать измеренные данные х требуется таким образом, чтобы полезный про- цесс был восстановлен по ним как можно точнее. Поскольку частота полезного сигнала заранее известна, его восстановление мож- но осуществить с помощью резонансного фильтра отмеченного выше вида. При этом необходимо создать такой фильтр, чтобы период его собственных колеба- ний Tf был равен периоду колебаний полезного сигнала (Tf=Tl). Для того чтобы после прохождения через такой фильтр амплитуда восстановленного сигнала сов- падала с амплитудой полезного сигнала, нужно входной сигнал фильтра умно- жить на постоянную величину 2£а>о (так как при резонансе амплитуда выходного сигнала «уменьшается» именно во столько раз по сравнению с амплитудой вход- ного сигнала). Сформируем фильтр, описанный выше: Т1 - 1; Tf - Tl. dz - 0.05; omO = 2*pi/Tf; А - 1. oms = omO*Ts. a(l) = 1 + 2*dz*oms + oms^2: a(2) = - 2*(1 + dz*oms); a(3) = 1; b(l) - A*Ts*Ts*(2*dz*om0^2); и «пропустим» сформированный процесс через него: у = filter(b.а.х); plot(t(10002:end). у(10002:end).t(10002:end). Yp(10002:end)) grid. setCgca.’FontSize'.12) titleC'Процесс на выходе фильтра (Tf = 1; dz = 0.05)'); xlabelC'Время (c)'). ylabel('YCt)') legendC’восстановленный’.'исходный'.0) В результате получаем восстановленный процесс (рис. 5.18). Для сравнения на этом же графике изображен восстанавливаемый процесс. Как видим, созданный фильтр довольно хорошо воспроизводит полезный сигнал. Однако более точному восстановлению препятствуют два обстоятельства. Во-первых, процесс на выходе фильтра устанавливается только спустя некоторое время вследствие того, что сам фильтр как динамическое звено имел нулевые на- чальные условия (рис. 5.19): у = filter(b.a.x); plotCt.y.’.'.t.Yp), grid. setCgca.'FontSize'.12) titleC'Процесс на выходе фильтра (Tf - 1; dz = 0.05)’);
178 Урок 5 • Цифровая обработка сигналов xlabelC'Время (с)'): ylabelC'YCt)') legendC'восстановленный'.'исходный',0) Рис. 5.18. Результат фильтрации Рис. 5.19. Переходной процесс фильтра функцией filter Во-вторых, в установившемся режиме наблюдается значительный сдвиг (л/2) фаз между восстанавливаемым и восстановленным процессами; это тоже понятно, так как при резонансе сдвиг фаз между входным и выходным процессами достигает именно такой величины. Чтобы избежать фазовых искажений полезного сигнала при его восстановлении, можно воспользоваться процедурой двойной фильтрации — filtfilt. Обращение к ней имеет такой же вид, как и обращение к процедуре fiIter. В отличие от по- следней процедура fi Itfi It осуществляет обработку вектора х в два приема: сна- чала в прямом направлении, а затем в обратном. Результат применения этой про- цедуры в рассматриваемом случае приведен на рис. 5.20. Y = filtfilt(b.a.x); plotCt.y.'.',t.Yp),grid. setCgca.'FontSize'.12) titleC'Применение процедуры FILTFILT'); х1аЬе1('Вреня CO'); ylabel('Y(t)') 1едепЬС'восстановленный'.'исходный'.0) Г^ймяадтодацеджыPITF4.T Рис. 5.20. Результат применения процедуры filtfilt
Формирование случайных процессов 179 Формирование случайных процессов Сформировать случайный процесс с заданной корреляционной функцией можно, если вначале сформировать нормально распределенный (по гауссову закону) слу- чайный процесс, а затем «пропустить» его через некоторое динамическое звено (формирующий фильтр). На выходе получается нормально распределенный слу- чайный процесс с корреляционной функцией, вид которой определяется типом формирующего фильтра как динамического звена. Гауссов случайный процесс в MATLAB образуется при помощи процедуры randn. Для этого достаточно задать дискрет времени Ts, образовать с этим шагом массив (вектор) t моментов времени в нужном диапазоне, а затем сформировать по ука- занной процедуре вектор-столбец xl длиной, равной длине вектора t, например: Ts = 0.01; t = 0 : Ts : 20; xl = randn(1.1ength(t)); Построим график полученного процесса: plot(t.xl).grid.set(gca.'FontSize'.12) title('Входной процесс - белый шум Гаусса (Ts = 0.01)'); xlabeK'Время (с)'): ylabel('Xl(t)') Процесс с дискретом времени Ts, равным 0,01 с представлен на рис. 5.21, а. Для другого значения дискрета времени (Ts=0.001), повторяя аналогичные опера- ции, получим процесс xl(t), изображенный на рис. 5.21, б. Рис. 5.21. Нормально распределенный случайный процесс: а — при Ts - 0.01 с; б — при Ts - 0.001 с Создадим дискретный фильтр второго порядка с частотой собственных колеба- ний со0 = 2 л рад/с = 1 Гц и относительным коэффициентом затухания С, = 0,05 по формулам (5.5) коэффициентов: omO = 2*pi; dz = 0.05; А - 1: oms = omO*Ts: а(1) = 1 + 2*dz*oms + oms~2: a(2)= - 2*(1 + dz*oms); a(3) = 1: b(l) = A*2*dz*oms~2:
180 Урок 5 • Цифровая обработка сигналов Пропустим образованный процесс xl(t) через созданный фильтр. Для этого обра- тимся к функции filter так: yl = filter(b.a.xl); Построим график процесса yl(t) на выходе фильтра. Результат представлен на рис. 5.22, а. plot(t.yl).grid, setCgca.’FontSize’.12) titleC'Процесс на выходе фильтра СТО = 1; dz = 0.05. Ts = 0.01)'); xlabel С’Время СО'): ylabel С ’ YlCt) ’) Аналогичные операции произведем с процессом x2(t). В результате получим про- цесс y2(t), приведенный на рис. 5.22, б. Ts - 0.001; omO = 2*pi; dz = 0.05; A = 1; oms = om0*Ts: ad) = 1 + 2*dz*oms + oms'2; aC2) = -2*C1 + dz*oms): aC3) = 1: bCl) - A*2*dz*oms*2; y2 = filterCb.a.x2); t = 0 : Ts : 20: plotct.y2).grid. setCgca.’FontSize'.12) titleC'Процесс на выходе фильтра СТО = 1; dz = 0.05; Ts = 0.001)’); xlabelС’Час Сс)'): ylabelС’Y2Ct)’) Время (с) а б Рис. 5.22. Случайный процесс на выходе динамического фильтра: а — при Ts - 0.01 с; б — при Ts - 0.001 с Как видим, на выходе формирующего фильтра действительно образуется случай- ный колебательный процесс с преобладающей частотой 1 Гц. пектральный и статистический анализ процессов Целью спектрального анализа сигналов является определение гармонического спектра этих сигналов, то есть частот гармонических составляющих сигнала (час- тотного спектра), амплитуд этих гармонических составляющих (амплитудного спектра) и их начальных фаз (фазового спектра). Под статическим анализом про- цессов обычно понимают нахождение такой характеристики их связи как взаимная
Спектральный и статистический анализ процессов 181 корреляционная функция двух процессов, а также связанной с ней частотной ха- рактеристики — взаимной спектральной плотности этих процессов. Основы спектрального и статистического анализа В основе спектрального анализа лежит теория Фурье о возможности разложения любого периодического процесса с периодом Т = 2т^со = 1/f (где со— круговая час- тота периодического процесса, а/— его частота в герцах) в бесконечный счетный ряд отдельных гармонических составляющих. Напомним некоторые положения теории спектрального анализа. Прежде всего, любой периодический процесс с периодом Т может быть представ- лен в виде комплексного ряда Фурье: x(t)= ^X^m)^2™'* = £x*(ni)e>(’"B)‘, (5-8) m=-oo m=-oo причем комплексные числа X* (m), которые называют комплексными амплитуда- ми гармонических составляющих, вычисляются по формулам: Таким образом, частотный спектр периодического колебания состоит из частот, кратных основной (базовой) частоте /, то есть частот fm=mf (т = 0, 1, 2,...), (5.10) Действительные и мнимые части комплексных амплитуд X* (rri) образуют соот- ветственно действительный и мнимый спектры периодического колебания. Если комплексную амплитуду (5.9) представить в экспоненциальной форме Х\т) = ^-е}'9", (5.11) то величина ат будет представлять собой амплитуду гармонической составляю- щей с частотой fm = mf, a <pm — начальную фазу этой гармоники, имеющей фор- му косинусоиды, то есть исходный процесс можно также записать в виде x(t) = а0 + ^ат cos(2nmft + <рт ), (5.12) т=1 который, собственно, и называют рядом Фурье. Для действительных процессов справедливы следующие соотношения: ReX(-m) = ReX(m); ImX(-m) = -ImX(m), (5.13) то есть действительная часть спектра является четной функцией частоты, а мни- мая часть спектра — нечетной функцией частоты. Разложения (5.12) и (5.8) позволяют рассматривать совокупность комплексных амплитуд (5.9) как изображение периодического процесса в частотной области.
182 Урок 5 • Цифровая обработка сигналов Желание распространить такой подход на произвольные процессы, в том числе и непериодические, привело к введению понятия Фуръе-изображения в соответ- ствии со следующим выражением: Нс X(J) = (514) Этот интеграл несмотря на его внешнее сходство с выражением (5.9) для ком- плексных коэффициентов ряда Фурье довольно существенно отличается от них. Во-первых, если физическая размерность комплексной амплитуды совпадает с раз- мерностью самой физической величины х(£), то размерность Фурье-изображе- ния равна размерности xi t), умноженной на размерность времени Во-вторых, интеграл (5.14) существует (является сходящимся к конечной вели- чине) только для двухсторонне затухающих процессов (то есть таких, которые стремятся к нулю как при t -> +<ю, так и при t -> -со). Отсюда следует, что его нельзя применять к так называемым стационарным колебаниям. Обратное преобразование Фурье-изображения в исходный процесс x(t) в этом случае определяется интегралом -ю> x(t) = \X{f)^fy,df, (5.15) который представляет собой некоторый аналог комплексного ряда Фурье (5.1) Указанное серьезное противоречие несколько сглаживается при численных рас- четах, так как в этом случае можно иметь дело только с процессами ограниченной длительности, причем сам процесс в определенном диапазоне времени должен быть задан своими значениями в ограниченном числе точек. В этом случае интегрирование заменяется суммированием, и вместо вычисления интеграла (5.14) ограничиваются вычислением суммы X[(i-l)A/] = AzJx[(m-l)At]e'?2”<i’,)(”"l)V". (5.16) m=l Тут, по сравнению с интегралом (5.14), осуществлены такие замены: О непрерывный интеграл приближенно заменен ограниченной суммой площа- дей прямоугольников, одна из сторон которых равна дискрету времени АЛ с которым представлены значения процесса, а вторая — текущему значению процесса в соответствующий момент времени; О непрерывное время t заменено дискретными его значениями (т- 1)А£, где т — номер точки от начала процесса; О непрерывная частота/заменена дискретными ее значениями (k - 1)А/, где k — номер значения частоты, а дискрет частоты А/ = \JT, где Т — промежуток вре- мени, на котором задан процесс; О дифференциал dt заменен ограниченным приращением времени АЛ
Спектральный и статистический анализ процессов 183 Если обозначить дискрет времени ЛГ через Ts, ввести обозначения х(т) = х[(т- 1)Л£], Х(*)=Х[(*-1)Д/], а также учесть то, что число п точек, в которых задан процесс, равно то соотношение (5.15) можно представить в более удобной форме: Х(М = Т/£х(т)е * (5.18) Как было отмечено в разделе «Векторная фильтрация и спектральный анализ» урока 1 (формулы (1-2) и (1.3)), процедуры MATLAB fft и Ifft осуществляют вычисления в соответствии с формулами. y(k) = Yx(m)e n ; (5.19) m-1 1 И I)(* I) *(m)=-Z^)e " (5-2°) nk=1 соответственно. Сравнивая формулы (5 18) и (5 19), можно сделать вывод, что процедура fft находит дискретное Фурье-изображение заданного дискретного во времени процесса x(t) деленное на дискрет времени: ^)-7’ (5-21) Осуществляя аналогичную операцию дискретизации соотношения (5 9) для ком плексной амплитуды X (£) получим . . Ts А ->&(* l)(m 1) 1 « -7—(А-1)(т-1) V(k) x\k)=^^c п =-£>(т)е " =—• <5-22) * т=1 Пт=1 п Из этого следует, что комплексный спектр разложения стационарного процесса равен деленному на число измерений результату применения процедуры fft к за- данному вектору измеренного процесса. Если же принять во внимание, что для большинства стационарных колебатсль ных процессов именно частотный, амплитудный и фазовый спектры не зависят от длительностИ- Г конкретной реализации и выбранного дискрета времени^ то надо также сделать вывод, что для спектрального анализа стационарных пронес сов наиболее целесообразно применять процедуру fft, и затем возвращаемый ею результат делить на число точек измерений. Перейдем к определению спектральной плотности мощности (СПМ), или, сокра- щенно, просто спектральной плотности (СП). Это понятие определяется как
184 Урок 5 • Цифровая обработка сигналов Фурье-изображение корреляционной функции /?12(т)и применяется в основном для двух одновременно протекающих стационарных процессов хх(£) и x2(t). Вза- имная корреляционная функция (ВКФ) двух таких процессов определяется со- отношением: Я12СО = hm fxi(£)x2(£ + т)dt, (5.23) Г"*°° * -Т/2 То есть ВКФ является средним во времени значением произведения первой функ- ции на сдвинутую относительно нее на время задержки т вторую функцию. Итак, взаимная спектральная плотность (ВСП) двух стационарных процессов мо- жет быть определена так: •Но 512(/) = |/г12(т)е-><2”/)’А. (5.24) При числовых расчетах, когда оба процесса Х\ (t) и х2(£) заданы на определенном ограниченном промежутке времени Т своими значениями в некоторых п точках, разделенных дискретом времени Ts, формулу (5.23) можно трансформировать в такую: 1 П-/ Д2(/)=-Ц$’ж)(т)х!(и+/-1), / = 12,..., ^2, (5.25) «-'т-1 или в несколько более простое соотношение 9 п 2 7?12(Z) = -Yx1(m)x2(m+Z-1), / = Х2,..., п/2, (5.26) «т=1 а вместо формулы (5.24) использовать п/2 -7^(Л-1)(/-1) Si2(k) = TsXRM^ п , k = l2,...,n/2. (5.27) 1=1 Если теперь подставить (5.26) в формулу (5.27) и изменить в ней порядок сумми- рования, то можно прийти к такому соотношению между ВСП и результатами преобразований процедурой fft заданных измеренных значений процессов: Г? 1 Si2<b) = Ts!-y2<k) yi(k), * = 1,2,..., n/2, (5.28) In J где черта сверху означает комплексное сопряжение соответствующей величины. С учетом формул (5.21) и (5.22) выражение (5.28) можно представить также в виде 5,2(4) = Х2'(А)Х1(4). (5.29) Из этого следует, что ВСП двух процессов при любом значении частоты равна произведению значения комплексного спектра второго процесса на комплексно- сопряженное значение Фурье изображения первого процесса на той же частоте. Формулы (5.21), (5 22) и (5.28) являются основой для вычислений в системе MATLAB соответственно Фурье-изображения процесса, его комплексного спек- тра и ВСП двух процессов.
Спектральный и статистический анализ процессов 185 Использование процедуры fft Чтобы применить процедуру fft для преобразования процесса, представленного во временной области, в его представление в частотной области, нужно, как было отмечено в разделе «Векторная фильтрация и спектральный анализ» урока 1, сде- лать следующее: О по заданному значению дискрета времени Js рассчитать величину Fmax диапа- зона частот (в герцах) по формуле Fmax=l/Ts; О по заданной длительности указанного процесса Т рассчитать дискрет частоты df по формуле О по полученным данным сформировать вектор значений частот, в которых бу- дет вычислено Фурье-изображение; последнее проще (но не правильнее) сде- лать таким образом fl=O:df:Fmax. В результате применения процедуры fft будет получено представление процесса в частотной области. Обратная процедура, 1 fft, если ее применить к результатам первого преобразования, позволяет восстановить исходный процесс во времен- ной области. Однако процедура fft не дает непосредственно Фурье-изображения процесса. Для того чтобы получить Фурье-изображение, нужно дополнительно произвести та- кие операции: О к результатам действия процедуры fft применить процедуру fftshift, которая меняет местами первую и вторую половины полученного вектора; О перестроить вектор частот по алгоритму f=-Fmax/2:df£Fniax/2’ Фурье-изображение прямоугольного импульса Сформируем процесс, состоящий из одиночного прямоугольного импульса. За- дадим дискрет времени Ts=0.01, длительность процесса Т=100, амплитуду импуль- са А=0.75 и его ширину w=0.5: Результат показан на рис. 5.23. Ts - 0.01: Т = 100: А = 0.75: w = 0.5: t = 0 : Ts : Т; у = A*rectpuls(t.w): plot(t(l:100). у(1:100)), grid. set(gca.'FontSize'.12) title('Процесс из одиночного прямоугольного импульса'): xlabeK'Время (с)'): ylabeK'Y(t)') Применим к вектору у процедуру fft и построим график зависимости модуля ре- зультата от частоты. При этом графики в частотной области удобнее выводить с помощью процедуры stem (рис. 5.24): X = fft(y): df - 1/Т: Fmax - 1/Ts; f = 0 : df : Fmax; a - abs(x): stem(f.a). grid. set(gca.'FontSize',12). title('Модуль FFT-преобразования прямоугольного импульса'): xlabel('Частота (Гц)’); ylabel('Модуль') 7
186 Урок 5 • Цифровая обработка сигналов Рис. 5.23. Одиночный прямоугольный импульс Рис. 5.24. Модуль FFT преобразования прямоугольного импульса Теперь построим график модуля Фурье-изображения процесса: Хр = fftshift(x); fl =-Fmax/2 : df : Fmax/2; a = abs(xp); stem(fl.a). grid. setCgca.'FontSize'.12). titleC'Модуль Фурье-изображения прямоугольного импульса'); xlabelC'Частота (Гц)'); ylabel('Модуль') Получим результат, приведенный на рис. 5.25. В заключение построим графики действительной и мнимой частей Фурье-изо- бражения прямоугольного импульса. Они представлены на рис. 5.26. dch = real(xp); meh - imag(xp); plotCfl.dch,'.'.fl.mch), grid. setCgca.’FontSize',12), titleC'Фурье-изображение прямоугольного импульса '); ylabel('Действие, и Мнимая части'), xlabel('Частота (Гц)'); legendC'Действительная'.'Мнимая'.0) Рис. 5.25. Модуль Фурье-изображения прямоугольного импульса Рис. 5.26. Действительная и мнимая части Фурье-изображения прямоугольного импульса
Спектральный и статистический анализ процессов 187 Фурье-изображение полигармонического процесса Рассмотрим пример трехчастотных гармонических колебаний — с частотой 1/л, 1, 3 Гц и амплитудами соответственно 0,6; 0,3; 0,7: y(t) = 0,6 cos (2t) + 0,3sin(2jr t) + 0,7 cos (6л t + 7^4). Найдем Фурье-изображение этого процесса и выведем графики самого процесса, модуля его Фурье-изображения, а также действительную и мнимую части. Гра- фик процесса показан на рис. 5.27. Ts = 0.01; Т = 100; t = 0 : Ts : Т; Y = 0.6*cos(2*t) + 0.3*sin(2*pi*t) + 0 7*cos(6*pi*t + pi/4); plot(t.Y), grid, set(gca.'FontSize'.12). titleC'Трехчастотный полигармонический процесс'); xlabel(’Время (c)’); ylabel('Y(t)') Рис. 5.27. График трехчастотного полигармонического процесса Находим модуль Фурье-изображения этого процесса: df ° 1/Т; Fmax ° 1/Ts; dovg = length(t); f ° -Fmax/2 : df : Fmax/2; X = fft(Y); Xp = fftshift(X); A » abs(Xp): si = dovg/2 - 400; s2 ° dovg/2 + 400; stem(f(sl:s2). A(sl:s2)). grid, set(gca.'FontSize'.12). title('Модуль Фурье-изображения полигармонического процесса'); xlabel('Частота (Гц)'); ylabel('Модуль') Результат представлен на рис. 5.28, а. Если изменить дискрет времени на Ts=0.02, получим результат, показанный на рис. 5.28, б Как видно, результат Фурье-преобразования в значительной степени зависит от величины дискрета времени и мало что говорит об амплитудах гармонических составляющих. Это обусловлено различием между определениями Фурье-изо- бражения и комплексного спектра. Поэтому для незатухающих (установивших- ся, стационарных) колебаний любого вида намного удобнее находить не Фурье- изображение, а его величину, деленную на число точек в реализации. В предыду- щей части программы это эквивалентно замене оператора X=fft(Y) на оператор X=fft(Y)/dovg, где dovg — длина вектора t.
188 Урок 5 • Цифровая обработка сигналов а б Рис. 5.28. Модуль Фурье-изображения полигармонического процесса: а — при Ts = 0.01 с; б — при Ts = 0.02 с В результате получается комплексный спектр (рис. 5.29), полностью соответст- вующий коэффициентам комплексного ряда Фурье. Выделим действительную и мнимую части комплексного спектра: dch = real(Xp) meh = imag(Xp); si = dovg/2 - 400; s2 = dovg/2 + 400; subplot(2.1.1), plot(f(si;s2). dch(sl;s2)), grid. set(gca.'FontSize'.12). title('Комплексный спектр полигармонических колебаний'); ylabeK'Действит. часть'); subplot(2.1.2) . plot(f(sl;s2). mch(sl:s2)). grid. set(gca,'FontSize',12). xlabeK'Частота (Гц)'); ylabeK'Мнимая часть') По полученным графикам (рис. 5.30) можно судить не только о частотах и ам- плитудах, но и о начальных фазах отдельных гармонических составляющих. Модуль спектре лог^армонического прей <есса Рис. 5.29. Модуль спектра полигармонического процесса Рис. 5 30. Комплексный спектр полигармонических колебаний
Спектральный и статистический анализ процессов 189 Фурье-изображение случайного процесса В заключение рассмотрим Фурье-преобразование случайного стационарного про- цесса, сформированного ранее (см. рис. 5.22, а). Аналогично тому, как это было описано в разделе «Формирование случайных процессов», сформируем процесс в виде белого гауссова шума с шагом во времени 0,01 и длительностью 100 с, соз- дадим формирующий фильтр, «пропустим» через него белый шум и выведем ре- зультат (рис. 5.31): Ts = 0.01; Т = 100; t = 0 ; Ts : Т; xl = randnd, length(t)); ornO = 2*pi; dz = 0.05; A = 1; oms = omO*Ts; a(l) - 1 + 2*dz*oms + oms*2; a(2) = -2*(1 + dz*oms); a(3) = 1; b(l) = A*2*dz*oms*2; yl = fllter(b.a.xl); plot(t,yl),grid,set(gca.'FontSize',12) title('Процесс на выходе фильтра (Т = 1; dz = 0.05. Ts = 0.01)'); xlabel('Время (c)'); ylabel('Yl(t)') Рис. 5.31. Случайный нормальный процесс (преобладающая частота — 1 Гц) Вычислим Фурье-изображение (ФИ) для процесса-шума с учетом замечания, сде- ланного для установившихся процессов, и построим графики модуля ФИ и СПМ (рис. 5.32): X Формирование массива частот df = 1/Т; Fmax - 1/Ts; f = -Fmax/2 ; df : Fmax/2; dovg - length(f); % Расчет скорректированных массивов Фурье-изображений Ful - fft(xl)/dovg; Fu2 = fft(yl)/dovg; Fulp - fftshift(Ful);Fu2p - fftshift(Fu2); X Формирование массивов модулей ФИ Al = abs(Fulp), A2 = abs(Fu2p); X Вычисление спектральных плотностей мощности S1 = Fulp.*conj(Fulp)*dovg; S2 = Fu2p.*conj(Fu2p)*dovg; % Вывод графиков белого шума subplot(2.1.1); stem(f,Al),grid,
190 Урок 5 • Цифровая обработка сигналов setCgca.'FontSize'.12) titleC'Модуль ФИ гауссова белого шума'): subplot(2.1.2): stemCf.SD.grid, setCgca.'FontSize'.12) titleC'Спектральная плотность мощности'); xlabelC'Частота (Гц)') Рассматривая рис. 5.32, можно убедиться, что спектральная плотность практиче- ски одинакова по величине во всем диапазоне частот, чем и обусловлено назва- ние процесса (белый шум). Аналогичную процедуру выполним с «профильтрованным» процессом (рис. 5 33): X Вывод графиков профильтрованного процесса cl = fixCdovg/2)-200. с2 = fix(dovg/2) + 200. length(f) subplot(2,1.1): stemCfCcl : c2). A2(cl : c2)),grid. setCgca.'FontSize',12) titleC'Модуль ФИ случайного стационарного процесса'): subplot(2,l,2): stemCfCcl : с2). S2(cl : c2)).grid. setCgca.'FontSize'.12) titleC'Спектральная плотность мощности'); xlabelC'Частота (Гц)') Рис. 5.32. Модуль ФИ и СПМ белого шума Рис. 5.33. Модуль ФИ и СПМ нормального случайного процесса Проводя эти вычисления с новой длительностью процесса (Т = 20 с), можно убе- диться что величины ФИ и СПМ при этом практически не изменяются Статистический анализ В предыдущем разделе уже были определены СП случайного процесса на основе установленной связи СП с Фурье-изображением. Однако в Signal Processing Tool- box предусмотрена отдельная процедура psd, позволяющая при обращении к ней вида [S.f]=psd(x,nfft,Fmax) сразу находить СП сигнала. Здесь х - вектор заданных значений процесса; nfft — число элементов вектора х, которые обрабатываются процедурой fft; Fmax=l/Ts — значение частоты дискретизации сигнала; S — вектор
Спектральный и статистический анализ процессов 191 значений СП сигнала; f — вектор значений частот, которым соответствуют най- денные значения СП. В общем случае длина последних двух векторов равна nfft/2. Приведем пример использования процедуры psd для нахождения СП предыду- щего случайного процесса с преобладающей частотой 1 Гц (рис. 5.34, изображе- ние слева): [C.f] = psd(yl.dovg.Fmax); stem(f(l:200). C(l:200)). grid, set(gca.'FontSize'.12) titleC Спектральная плотность мощности'): xlabeK'Частота (Гц)') Если ту же процедуру вызвать без указания выходных величин, то результатом ее выполнения станет вывод графика СП от частоты. Например, обращение вида psd(yl.dovg.Fmax) приведет к построению в графическом окне (фигуре) графика, показанного на рис. 5.34 справа. При этом значения СП будут откладываться в логарифмическом масштабе в децибелах. Рис. 5.34. СПМ, полученные с помощью процедуры psd Группа функций хсогг вычисляет оценку взаимной корреляционной функции (ВКФ) двух последовательностей х и у. Обращение вида с=хсогг(х,у) позволяет вычислить и сформировать вектор с длиной 2п-1 значений ВКФ век- торов х и у длиной п. Обращение вида с=хсогг(х) позволяет вычислить АКФ (ав- токорреляционную функцию) последовательности, заданной в векторе х. Вычислим АКФ для случайного процесса, сформированного ранее: R - xcorr(yl); tau - -10 + Ts : Ts : 10: It = length(tau); sir - round(length(R )/2) - lt/2; s2r - round(length(R)/2) + lt/2 - 1:
192 Урок 5 • Цифровая обработка сигналов plot(tau.R(slr:s2r)). grid. setCgca.'FontSize',12) titleC'АКФ случайного процесса'), xlabel('Запаздывание (с)') На рис. 5.35 представлен результат применения процедуры хсогг. Рис. 5.35. Корреляцонная функция случайного процесса, полученная с помощью процедуры хсогг Проектирование фильтров Спроектировать фильтр — значит определить его параметры как динамического звена. Вычисление этих параметров является сложной задачей; обычно оно про- исходит путем выбора некоторого аналога из числа фильтров известных типов и последующего такого расчета параметров аналога, который бы обеспечил тре- буемые качества фильтра. Формы представления фильтров Фильтр как звено системы автоматического управления может быть представлен и полностью описан в нескольких эквивалентных формах О В форме рациональной передаточной функции (tf-представление) Если зве- но является непрерывным (аналоговым), то оно описывается непрерывной передаточной функцией ц,(.) _ _ *0)^ + +...+ b(m+1) (530) a(s) a(Y)sn + a(2)s”-1 +...+a(n+1) ’ а если фильтр является дискретным, он может быть представлен дискретной передаточной функцией вида w(z) = *<2) _Ьт + Ь(?)г-' +... + Ь(т+1)г-т , 31) U a(z) a(l) + a(2)z~1 +...+а(п+l)z~n ’ в обоих случаях для определения звена достаточно задать два вектора коэф- фициентов: b — для числителя и а — для знаменателя передаточной функции.
Проектирование фильтров 193 О В виде разложения передаточной функции на простые дроби. Если корни этой функции являются простыми, разложение имеет следующий вид (для дис- кретной передаточной функции): b(z) = r(l) + + г(п) + a(z) 1-р(1)г~' \-p(n)z~l (5.32) +&(!)+ &(2)z-1 +...+ k(m-n + l)z-<m-”>; в этой форме звено описывается тремя векторами: вектором-столбцом г выче- тов передаточной функции, вектором-столбцом р полюсов и вектором-стро- кой k коэффициентов целой части дробно-рациональной функции. О В каскадной форме (sos-представление), когда передаточная функция звена представлена в виде произведения передаточных функций не выше второго порядка: Я(г) = П н^) =П — + — _'i+ — .2! (5.33) Л=1 Л=1 aQk + a^z + (fykZ параметры каскадного представления задаются в виде матрицы sos, содержа- щей вещественные коэффициенты: ^01 ^11 ^21 °01 Gil °21 SOS = ^01 ^22 fl02 °12 °22 (5.34) /0L t>2L a0L alL a2L. О В пространстве состояний {ss-представление), то есть с помощью уравнений звена в форме х = Ах + Bw; у =Сх + Dw; (5.35) в этой форме звено задается совокупностью четырех матриц — А, В, С и D. О Путем определения вектора z нулей передаточной функции, вектора р ее по- люсов и коэффициента k передачи звена (гр-представление): W(s) = k ~-2ФП5.~ 2• t5 ~2. (5.36) [s-p(l)][s-p(2)]. ..[5-р(п)] О Как решетчатое late-представление. В этом случае решетчатый фильтр задает- ся вектором k коэффициентов знаменателя решетчатого дискретного фильтра и вектором v коэффициентов его числителя. Коэффициенты k решетчатого представления некоторого полинома с коэффициентами, представленными вектором а, определяются по этому вектору с помощью рекурсивного алгорит- ма Левинсона. Преобразование фильтров Пакет Signal содержит ряд процедур, позволяющих преобразовать звено (фильтр) из одной формы в другую.
194 Урок 5 • Цифровая обработка сигналов Преобразование к tf-форме Преобразование фильтра к tf-форме выполняется следующими процедурами. Процедура zp2tf осуществляет вычисление векторов коэффициентов числителя (Ь) и знаменателя (а) передаточной функции в форме (5.30) по известным векто- рам ее нулей (z), ее полюсов (р) и коэффициенту усиления звена (к). Обращение к процедуре имеет такой вид: [b.a] = zp2tf(z.p.k) Во многомерном звене величина z является матрицей, число столбцов которой должно быть равно числу выходов. Вектор-столбец к содержит коэффициенты усиления по всем выходам звена. В векторе а выдаются вычисленные коэффици- енты знаменателя, а матрица b содержит коэффициенты числителей. При этом каждая строка матрицы соответствует коэффициентам числителя для отдельной выходной величины. Процедура ss2tf преобразует описание звена (системы) из пространства состоя- ний в форму передаточной функции. Обращение к ней вида [b.a] = ss2tf(A.B.C.D.io) позволяет найти коэффициенты числителя (Ь) и знаменателя (а) передаточных функций системы по всем выходным величинам и по входу с номером 1 и, если за- даны матрицы А, В, С и D описания системы в виде (5.35). Процедура sos2tf позволяет найти передаточную функцию звена по заданным параметрам каскадной формы. Для этого надо обратиться к процедуре таким об- разом: [b.a] = sos2tf(sos), где sos — заданная матрица каскадной формы (5.34). С помощью процедуры latc2tf можно вычислить коэффициенты числителя и зна- менателя передаточной функции (5.31) по коэффициентам числителя и знамена- теля решетчатого фильтра. При этом обращение к ней должно осуществляться в одной из следующих форм: [b.a] = latc2tf(k.v) [b.a] - latc2tf(k,'iir') b = latc2tf(k.'fir') b = latc2tf(k) Первая форма используется, если заданы коэффициенты решетчатого представ- ления и числителя (v) и знаменателя (к) БИХ-фильтра (фильтра с бесконечной импульсной характеристикой), вторая — если решетчатый БИХ-фильтр имеет только полюсы. Третья и четвертая формы применяются для вычисления коэф- фициентов передаточной функции решетчатого КИХ-фильтра (фильтра с конеч- ной импульсной характеристикой). Нахождение коэффициентов передаточной функции по коэффициентам разло- жения ее на простые дроби (5.32) осуществляется посредством функции residue и residuez. Первая применяется для непрерывной передаточной функции вида (5.30), вторая — для дискретной передаточной функции (5.31). При обращении [b.a] = residue(r.p.k) [b.a] - residuez(r.p.k)
Проектирование фильтров 195 вычисляются коэффициенты числителя и знаменателя передаточной функции по заданным векторам ее разложения (г — вычетов, р — полюсов) и коэффициен- там целой части (к). С помощью перечисленных процедур осуществляется разложение заданной пе- редаточной функции на простые дроби. При этом обращение к ним должно быть таким: [г.р.k] = residue(b.a) [г.р.к] = residuez(b.a) Переход от tf-формы к другим формам Чтобы осуществить переход к другим формам, следует воспользоваться рассмот- ренными ниже процедурами. Вычисление нулей, полюсов и коэффициентов усиления звена с заданной пе- редаточной функцией можно произвести, применяя процедуру tf2zp, обращаясь к ней таким образом: [z.p.k] = tf2zp(b,a) При этом вектор z будет содержать значения нулей передаточной функции с ко- эффициентами числителя b и знаменателя а, вектор р — значения полюсов, а па- раметр к будет равен коэффициенту усиления звена. Нахождение матриц А, В, С и D, описывающих звено с заданной передаточной функ- цией в виде совокупности дифференциальных уравнений в форме Коши (5.35), осуществимо с помощью процедуры tf2ss. При обращении к ней вида [A.B.C,D]=tf2ss(b.a) получим искомые матрицы в указанном порядке. Здесь b и а — соответственно векторы коэффициентов числителя и знаменателя передаточной функции. Вычисление коэффициентов решетчатого фильтра по заданной дискретной пере- даточной функции можно осуществить с помощью процедуры tf21 ate, обращаясь к ней таким образом: [k.v] - tf21atc(b.a) [k.v] = tf21atc(l,a) k = tf21atc(l,a) k = tf21atc(b) Первое обращение позволяет вычислить коэффициенты знаменателя (к) и чис- лителя (v) решетчатого БИХ-фильтра (модель авторегрессии скользящего сред- него). Обращение во второй форме дает возможность определить вектор коэф- фициентов знаменателя (к) и скалярный коэффициент (v), когда БИХ-фильтр имеет лишь полюсы (не имеет нулей). При обращении в третьей форме определя- ются только коэффициенты знаменателя решетчатого фильтра. Наконец, четвер- тая форма предназначена для нахождения вектора к коэффициентов решетчатого КИХ-фильтра (задаваемого только вектором b коэффициентов числителя пере- даточной функции). Кроме описанных выше, можно выполнить ряд других преобразований фильтров.
196 Урок 5 • Цифровая обработка сигнал эв Вычисление коэффициентов решетчатого представления по коэффициентам по- линома можно осуществить, используя функцию poly2rc. Обращение вида k = poly2rc(a) позволяет найти коэффициенты решетчатого представления к по коэффициен- там а заданного полинома. Вектор а должен содержать только вещественные эле- менты, и должно выполняться условие а ф 0. Размер вектора к на единицу меньше размера вектора а коэффициентов полинома. По коэффициентам решетчатого пред- ставления очень просто определить, находятся ли все полюсы внутри единичного круга Для этого достаточно убедиться, что все элементы вектора к по абсолют- ной величине не превышают единицы. Обратная задача вычисления коэффициентов полинома по коэффициентам ре- шетчатого представления решается путем применения функции rc2poly: а = rc2poly(k) Процедура pasos2ss при обращении к ней вида [A,B,C.D]=sos2ss(sos) определяет матрицы (5 35) А, В, С и D, описывающие звено в пространстве состоянии, по задан- ной матрице sos каскадной формы (5.34). Элементы матрицы sos должны быть вещественными. Обратный переход осуществляется с помощью функции ss2sos при обращении к ней вида S0S=ss2sos(A,B,C,D). Функция sos2zp дает возможность определить (5.36) векторы нулей (z), полюсов (р) и коэффициент усиления звена (к), заданного каскадной формой передаточ- ной функции, то есть матрицей sos (5.34). Обратиться к ней следует так: [z.p.k] = sos2zp(S0S) Обратный переход осуществляется с помощью функции zp2sos при обращении к ней вида SOS = zp2sos(z,p,k). Нахождение нулей (z), полюсов (р) и коэффициента усиления звена (к) по его описанию в пространстве состояний можно произвести, если обратиться к проце- дуре ss2zp таким образом: [z.p.k] = ss2zp (A.B.C.D.Iu) Здесь I u — номер входа, по которому производится поиск передаточной функции. Обратное преобразование осуществляется процедурой zp2ss: [A.B.C.D] = zp2ss(z.p k) Аналоговые фильтры Чтобы обеспечить частотно-зависимое изменение определенной последователь- ности данных (сигнала), используются фильтры. В простейшем случае при раз- работке фильтра низких частот целью является построение такого звена, которое обеспечило бы отсутствие амплитудных искажений входного сигнала в области частот от 0 до некоторой заданной частоты и эффективное подавление гармони- ческих компонент с более высокими частотами.
Проектирование фильтров 197 Аналоговый фильтр может быть представлен непрерывной передаточной функцией: 7(s)=M(s) ° ад ад’ (5.37) где K(s)hX(s) — изображения по Лапласу соответственно выходного и входного сигналов фильтра, a M(s) и N(s) — полиномы от s соответственно в числителе и знаменателе передаточной функции. В качестве основных характеристик фильтра обычно принимают: О характеристику затухания А(ф), которая является величиной, обратной мо- дулю частотной передаточной функции W(s), и измеряется в децибелах: A(co) = 2Olg(|W(»r1 ) = 101gZ(co2); (5.38) О фазовую характеристику S(co) 8(<o) = arg(H(»); (5.39) О характеристику групповой задержки т x = _J8(co) (5.40) б(й Функцию Z(s2) = [ff(s)ff(-s)]’1 (5.41) называют функцией затухания. Нетрудно понять, что если являются нулями передаточной функции W(s), а Pi ~ ее полюсами, то нулями функции затухания будут +pit а полюсами — ±z,-. Идеальный фильтр низких частот (ФНЧ) пропускает только низкочастотные со- ставляющие. Его характеристика затухания имеет такой вид, как показано на рис. 5.36, а. Диапазон частот от 0 до со с называется полосой пропускания, осталь- ной частотный диапазон — полосой задерживания. Граница между этими полоса- ми (сос) называется частотой среза. Аналогично, идеальные фильтры высоких частот (ФВЧ), полосовой и режекторный, можно определить как фильтры, имею- щие характеристики затухания, показанные на рис. 5.36, б-г. Реальный ФНЧ отличается от идеального следующим: О затухание в полосе пропускания не равно нулю; О затухание в полосе задерживания не равно бесконечности; О переход от полосы пропускания к полосе задерживания происходит постепен- но (не скачкообразно). Характеристика затухания реальных фильтров приведена на рис. 5.37. Приняты следующие обозначения: О ар — граничная частота полосы пропускания; О — граничная частота полосы задерживания;
198 Урок 5 • Цифровая обработка сигналов О Rp — максимальное подавление в полосе пропускания; О Rs— минимальное подавление в полосе задерживания. Я(со) Я(со) Я(со) Рис. 5.36. Характеристики затухания идеальных фильтров: а — ФНЧ; б — ФВЧ; в — полосовой; г — режекторный
Проектирование фильтров 199 Частота среза сос в этом случае является условной границей между полосами пропускания и задерживания, которая определяется либо по уровню подавления 3 дБ, либо как -Jajpas в эллиптических фильтрах. Аппроксимацией фильтра называют реализуемую передаточную функцию, у ко- торой график характеристики затухания Л(со)как функция от частоты приближа- ется к одной из идеальных характеристик (см. рис. 5.36). Такая передаточная функция характеризует устойчивое физически реализуемое звено и должна удов- летворять следующим условиям: О она должна быть рациональной функцией от s с вещественными коэффициен- тами; О ее полюсы должны лежать в левой полуплоскости s-плоскости; О степень полинома числителя должна быть меньше или равна степени полино- ма знаменателя. В пакете Signal предусмотрен ряд процедур, осуществляющих расчет аналоговых аппроксимаций фильтров низких частот. Процедуры buttord, cheblord, cheb2ord и el lipord, образующие первую группу, ис- пользуются для определения минимального порядка и частоты среза аналогового или цифрового фильтра по заданным требуемым характеристикам фильтра: О Wp — граничная частота пропускания; О Ws — граничная частота задерживания; О Rp — максимально допустимое подавление в полосе пропускания (в децибелах); О Rs — минимально допустимое подавление в полосе задерживания (в децибелах). Все эти процедуры предназначены для вычисления соответствующей аппрокси- мации ФНЧ, ФВЧ, полосовых и режекторных фильтров минимального порядка Функция buttord определяет порядок п и частоту среза Wn для аппроксимации в виде аналогового фильтра Баттерворта при обращении к ней таким образом: [n.Wn] - buttord(Wp.Ws.Rp,Rs,*s') При этом значения частот, Wp и Ws, должны быть заданы в радианах в секунду, а значение частоты среза, Wn, также получается в радианах в секунду Для ФВЧ ве- личина Wp должна превышать величину Ws. Для полосовых и режекторных фильт- ров параметры Wp и Ws должны быть двухэлементными векторами, определяющи- ми граничные частоты полос, причем первой должна стоять меньшая частота. В этом случае параметр Wn, вычисляемый процедурой, представляет собой двух- элементный вектор-строку. Аналогично используются процедуры cheblord, cheb2ord, el lipord, которые опре- деляют порядок аналоговых фильтров Чебышева 1-го и 2-го типов и эллиптиче- ского фильтра соответственно. Вторая группа процедур позволяет определить векторы нулей (z), полюсов (р) и коэффициент усиления (к) основных аппроксимаций линейных фильтров задан- ного порядка п. К таким процедурам относятся besselap, buttap, cheblap, cheb2ap и el 11 pap. Все они создают ФНЧ с частотой среза, равной 1 рад/с.
200 Урок 5 • Цифровая обработка сигналов Процедура besselap при обращении к ней вида [z,p,k]=besselap(n) вычисляет ну- ли и полюсы аналогового фильтра Бесселя, процедура buttap при аналогичном обращении к ней «создает» аналоговый фильтр Баттерворта. Аналоговый прототип фильтра Чебышева нижних частот 1-го типа, имеющий пуль- сации в полосе пропускания не более Rp децибел, «создается» процедурой cheblap: [z.p.k] = cheblap(n.Rp) ФНЧ Чебышева 2-го типа, имеющий величину подавления в полосе задержива- ния не менее Rs децибел, «создается» процедурой cheb2ap: [z.p.k] = cheb2ap(n,Rs) Процедура ellipap при обращении к ней вида [z.p.k] = elllpap(n.Rp.Rs) дает возможность найти нули и полюсы эллиптического ФНЧ, обеспечивающего пульсации в полосе пропускания не более Rp децибел и подавление в полосе за- держивания не менее Rs децибел. Третью группу образуют процедуры, которые позволяют, используя параметры рассчитанного ФНЧ известной аппроксимации с частотой среза, равной 1, полу- чить ФНЧ, ФВЧ, полосовой или режекторный фильтр с заданной частотой среза В эту группу входят процедуры 1 р21 р, 1 p2hp, 1 p2bp и 1 p2bs, образующие соответст- венно ФНЧ, ФВЧ, полосовой фильтр и режекторный фильтр. Формы обращения к процедуре 1 р21 р следующие: [bt.at] = lp21p(b.a,Wo) [At.Bt.Ct.Dt] = lp21p(A.B.C.D.Wo) Первая форма применяется при определении исходного ФНЧ (с частотой среза 1 рад/с) в виде коэффициентов числителя а и знаменателя Ь. В этом случае Wo оз- начает желаемую частоту среза получаемого ФНЧ Результатом являются вы- численные значения векторов коэффициентов числителя и знаменателя полу- ченного ФНЧ — соответственно at и bt. Вторая форма применяется при определении исходного ФНЧ в пространстве со- стояний. Результат получается также в форме матриц пространства состоянии Применение процедуры 1 p2hp формирования ФВЧ полностью аналогично. Для обращения к процедуре 1 р2Ьр используются две формы: [bt.at] - lp2bp(b,a,Wo,Bw) [At.Bt.Ct.Dt] = lp2bp(A.B.C.D.Wo.Bw) Здесь смысл параметра Wo несколько иной — это центральная частота полосы пропускания, a Bw означает ширину полосы пропускания. В остальном особенно- сти использования процедуры и смысл обозначений сохраняются прежними. Применение функции 1 p2bs для проектирования фильтров режекторного типа полностью аналогично, за исключением того, что параметр Wo в этом случае явля- ется центром полосы задерживания, а параметр Bw — ее шириной.
Проектирование фильтров 201 Следующую, четвертую, группу образуют процедуры полной разработки фильт- ров указанных аппроксимаций по заданным порядку и по частоте среза Wc. Сюда входят процедуры besself, butter, chebyl, cheby2 и el lip. Общим для них является следующее. О С помощью этих процедур можно проектировать ФНЧ, ФВЧ, полосовые и ре- жекторные фильтры соответствующей аппроксимации. Если параметр Wc яв- ляется скаляром и после него не указывается параметр 'high', то проектирует- ся ФНЧ с частотой среза Wc; если же этот параметр в обращении указан, то в результате создается ФВЧ, если параметр Wc задан как вектор из двух вели- чин, то результатом вычислений являются параметры полосового фильтра с полосой пропускания Wi < со < W2, где Wi — первый элемент данного вектора, a W2— второй элемент, наконец, если дополнительно к этому в конце списка входных параметров указан параметр 'stop', то рассчитываются параметры ре- жекторного фильтра с полосой задерживания, указанной элементами вектора Wc. О Результаты расчета фильтра могут иметь три формы в зависимости от того, какое количество параметров указано при обращении к процедуре в качестве выходных, например: [b.a] = besselfCn.Wc.'ftype') [z.p.k] = besself(n.Wc,'ftype') [A.B.C.D] = besself(n.Wc.'ftype') О Если заданы два выходных параметра, то им будут присвоены значения коэф- фициентов числителя и знаменателя передаточной функции фильтра; при ука- зании трех параметров на выходе они примут значения векторов нулей, полю- сов и коэффициента усиления фильтра; если указано четыре выхода, то ими становятся значения матриц пространства состояний проектируемого фильтра. О Почти все указанные процедуры могут применяться для проектирования как аналоговых, так и цифровых фильтров. Чтобы с их помощью «создать» анало- говый фильтр необходимо в число входных параметров процедуры последним включить специальный параметр (’s’); исключение составляет фильтр Бессе- ля, аналога которого в цифровой форме не существует. БИХ-фильтры Конечной задачей проектирования линейного цифрового фильтра будем считать расчет значений элементов векторов числителя (Ь) и знаменателя (а) его дис- кретной передаточной функции G(z), записанной в виде (5.7): G(z) = = b°jLbiZ 1 +-+bnz~m x(z) а0 + a^z 1 +...+ anz 1 Если эти два вектора известны, осуществление самой фильтрации, как было ска- зано ранее, происходит с применением процедуры f 11 ter, аргументами которой являются векторы.
202 Урок 5 • Цифровая обработка сигналов Напомним, что представленная дискретная передаточная функция описывает в сжатой форме такое конечно-разностное уравнение фильтра: aQy(k) + a^yik -1) + a2y(k -2) +... + any(k -n}= (5.42) = box(k) + bix(k -1) +... + bmx(k - m). Если n = 0, фильтр называют нерекурсивным, а число m — порядком фильтра Та- кой фильтр имеет конечную импульсную характеристику, поэтому его также на- зывают КИХ-фильтром. Если п > 0 фильтр называется рекурсивным. Его порядком при этом называют большее из чисел т и п. В этом случае импульсная характеристика фильтра явля- ется бесконечной и его называют также БИХ-фильтром. Такие фильтры пред- ставляют собой некоторые аналоги динамических звеньев. Одним из средств проектирования БИХ-фильтров, предусмотренных в пакете Signal, является разработка соответствующего аналогового прототипа, то есть на- хождение передаточной функции непрерывного фильтра, и последующий пере- ход к цифровому фильтру путем нахождения цифрового аналога непрерывного звена. Последнее можно осуществить с помощью билинейного преобразования s-плоскости в z-плоскость. Билинейное преобразование выполняется в соответст- вии с выражением H(z) = H(s)| z-i, (5.43) Z+1 где fs — частота дискретизации сигнала. При этом ось jco преобразуется в единич- ную окружность на z-плоскости. В пакете Signal билинейное преобразование осуществляется с помощью процеду- ры bilinear, обращение к которой имеет три формы: [bd.ad] = bi 1 inear(b.a.Fs,Fp) [zd.pd.kd] = bilinear(z p.k.Fs.Fp) [Ad.Bd.Cd.Dd] = bilinear(A.B.C.D.Fs.Fp) Во всех трех случаях параметры, характеризующие аналоговый прототип фильт- ра, преобразуются в аналогичные параметры, описывающие дискретный БИХ- фильтр Вид и число входных параметров определяют вид и число выходных. Па- раметр Fs задает частоту дискретизации в герцах. Параметр Fp не обязателен. Он определяет частоту в герцах, для которой значения АЧХ до и после выполнения преобразования должны совпадать, то есть задает так называемые предыскажения. Обращение в первой форме позволяет определить коэффициенты полиномов чис- лителя и знаменателя дискретной передаточной функции фильтра вида (5 31) по заданным коэффициентам полиномов числителя и знаменателя непрерывной пе- редаточной функции вида (5.30). Обращение во второй форме дает возможность вычислить нули, полюсы и коэффициент усиления дискретного фильтра по за- данным аналогичным параметрам аналогового прототипа. И наконец, с помощью третьей формы определяется матрица дискретного пространства состояний фильт- ра по известным матрицам непрерывного пространства состояний. Второй способ построения цифрового фильтра по его аналоговому прототипу за- ключается в таком преобразовании параметров аналогового фильтра в параметры
Проектирование фильтров 203 дискретного фильтра, при котором импульсная характеристика последнего сов- падала бы с импульсной характеристикой аналогового фильтра в дискретные мо- менты времени. В MATLAB это осуществляется посредством процедуры impinvar: [bz.az] = impinvar(b.a.Fs) Здесь b и а — заданные векторы коэффициентов числителя и знаменателя переда- точной функции аналогового прототипа фильтра, bz и az — вычисляемые коэффи- циенты числителя и знаменателя дискретной передаточной функции дискретно- го фильтра, Fs — заданная частота дискретизации сигнала в герцах. Если параметр Fs при обращении не указан, то по умолчанию он принимается равным 1 Гц. Третий способ формирования дискретных фильтров — использование ранее рас- смотренных процедур формирования фильтров butter, chebyl, cheby2 и el lip. Если при обращении к этим процедурам не указывать в конце списка входных пара- метров параметра ’ s', то результатом работы этих процедур будут параметры имен- но цифровых фильтров. Основное отличие применения этих функций для разработки цифровых фильт- ров заключается в том, что все частоты в векторе Wc задаются по отношению к час- тоте Найквиста. Частотой Найквиста называют половину частоты дискретиза- ции сигнала. Поскольку диапазон частот изменения дискретного сигнала всегда меньше часто- ты дискретизации, все частотные характеристики дискретных фильтров опреде- ляются только в диапазоне от 0 до частоты Найквиста Поэтому все задаваемые в векторе Wc граничные частоты должны быть меньше единицы. Существуют еще две процедуры расчета БИХ-фильтров. Процедура maxflat производит расчет обобщенного цифрового фильтра Баттер- ворта. Формы обращения к ней таковы: [b.a] - maxflat(nb.na.Wc) [b.a] = maxflat(nb,'sym'.Wc) [b.a.bl.b2] = maxflat(nb.na.Wc) [b.a] = maxfl at(nb.na.Wc.'design_flag‘) Первое обращение позволяет вычислить коэффициенты числителя (Ь) и знаме- нателя (а) дискретной передаточной функции H(z) цифрового ФНЧ Баттерворта с частотой среза Wc, порядок числителя которой равен nb, а порядок знаменате- ля — па. При обращении второго вида вычисляются коэффициенты цифрового симмет- ричного КИХ-фильтра Баттерворта. В этом случае параметр па принимается рав- ным 0, а параметр nb должен быть четным. Если использовать третье обращение к процедуре, то есть указать в качестве вы- ходных четыре величины, дополнительные параметры Ы и Ь2 дадут коэффициен- ты двух полиномов, произведение которых является полиномом числителя b ис- комой дискретной передаточной функции, причем все нули полинома Ы равны -1, а полином Ь2 содержит все остальные нули полинома Ь. Добавление в список входных параметров процедуры параметра 'design_flag' по- зволяет изменять характер выводимой на экран информации. Если значение этого
204 Урок 5 • Цифровая обработка сигналов параметра равно1 trace', на экране отображаются параметры, используемые в про- цессе проектирования: » nb = 10: па = 2: w = 0.6; » [b.a.bl.b2] » maxfl at(nb,па,w,'trace') Table: L М N wo_min/pi wo_max/pi Columns 1 through 4 10 0 2 0 9 1 2 0.23938 8 2 2 0.32591 7 3 2 0.3991 6 4 2 0.46688 5 5 2 0.53312 4 6 2 0.6009 3 7 2 0.67409 2 8 2 0.76062 Column 5 0.23938 0.32591 0.3991M 0.46688 0.53312 0.6009 0.67409 0.76062 1 b = 0.11478 0.50222 0.81309 0.54459 0.070336 -0.052259 0.0040606 0.0050236 -0.0022396 0.00042191 -3.2299e-005 a = 1 0.46247 0.53752 bl = 1 5 10 10 5 1 b2 = 0.11478 -0.071679 0.023681 -0.0048336 0.0005834 -3.2299е-005 Если же этому параметру задать значение 'plots', то на экран будут выведены графики амплитудной характеристики, группового времени замедления, а также графическое изображение нулей и полюсов (рис. 5.38): » [b,a,bl,b2] = maxflat(nb,na,w,’plots') b = 0.11478 0.50222 0.81309 0.54459 0.070336 -0.052259 0.0040606 0.0050236 -0.0022396 0.00042191 • -3.2299e-005 a = 1 0.46247 0.53752 bl = 1 5 10 10 5 1 b2 = 0.11478 -0.071679 0.023681 -0.0048336 0.0005834 -3.2299e-005 Расчет БИХ-фильтра по заданной амплитудно-частотной характеристике Расчет коэффициентов БИХ-фильтра производится процедурой yulewalk. В ре- зультате набора в командном окне MATLAB строки [b.a] = yulewalk(n.f.m)
Проектирование фильтров 205 будут вычислены коэффициенты числителя b и знаменателя а дискретной переда- точной функции БИХ-фильтра порядка п, АЧХ которого задана векторами час- тоты в нормированных значениях (f) и соответствующих значений отношений амплитуд выхода и входа (т). Первый элемент вектора f должен быть равен нулю, а последний — единице. Все остальные элементы должны быть расположены в не- убывающем порядке Частоты при которых происходит скачок АЧХ, указывают- ся дважды — с разными значениями соответствующих им отношении амплитуд. Приведем пример расчета ФНЧ 8-го порядка и построим желаемую АЧХ и АЧХ полученного фильтра. Результат приведен на рис. 5.39. f = [ 0 0.5 0.5 1]; m = [1 1 0 0]; [b.a] = yulewalk(8,f.m): [h.w] = freqz(b,a. 128); plot(f.m. w/pi.abs(h)). set(gca,'FontSize'.12) grid. title('Пример применения процедуры YULEWALK') xlabeK'Нормализованная частота'). ylabeK'A Ч X') Рис. 5.38. Результат выполнения процедуры Рис. 5.39. Пример применения процедуры maxflat(nb,na,w,'plots') yulewalk КИХ-фильтры В отличие от БИХ-фильтров, которые характеризуются двумя векторами b и а ко- эффициентов числителя и знаменателя дискретной передаточной функции, КИХ- фильтры описываются только одним вектором Ь. Знаменатель их дискретной пе- редаточной функции тождественно равен единице. Группа функций firl предназначена для расчета коэффициентов b цифрового КИХ-фильтра с линейной фазой методом взвешивания с использованием окна. Общий вид обращения к этой процедуре имеет вид b = firKn.Wn, 'ftype' .window) Процедура вычисляет вектор длиной п+1 коэффициентов b КИХ-фильтра с нор- мализованной частотой среза Wn. Параметр 1 ftype' задает желаемый тип фильтра (ФНЧ, ФВЧ, полосовой или ре- жекторныи). Он может отсутствовать — и тогда по умолчанию рассчитывают- ся параметры ФНЧ с частотой среза Wn, если последняя задана как скаляр, или
206 Урок 5 • Цифровая обработка сигналов полосовой фильтр с полосой пропускания от W1 до W2, если параметр Wn задан в ви- де вектора из двух элементов [Wl W2] — или принимать одно из четырех значении: 'high', ’ stop*, 1 DC- Г или ' DC-0 ‘. В первом случае синтезируется ФВЧ с частотой среза Wn, во втором — режекторный фильтр (при этом параметр Wn должен быть вектором из двух элементов, значения которых определяют границы полосы за- держивания по отношению к частоте Найквиста). В третьем случае рассчитывают- ся параметры многополосового фильтра, первая полоса которого является поло- сой пропускания, а в четвертом — тоже многополосовый фильтр, первая полоса которого является полосой задерживания. При расчете режекторных фильтров и ФВЧ порядок фильтра следует назначать четным числом. Параметр window позволяет задавать координаты окна сглаживания в векторе-столб- це window длиной п + 1. Если этот параметр не указан, то по умолчанию будет ис- пользовано окно Хемминга. Для вычисления координат окон различного типа в MATLAB предусмотрены сле- дующие функции, все они создают вектор-столбец, состоящий из п элементов оп- ределенных окон: О bartlett(n) — окна Бартлетта; О blackman(n) — окна Блекмана; О boxcar(п) — прямоугольного окна; О chebwin(n, г) — окна Чебышева, где г — желаемый уровень допустимых пульса- ций в полосе задерживания (в децибелах); О hamming(n) —окна Хэмминга; О hanning(n) — окна Хэннинга; О kaizer(n.beta) — окна Кайзера, где параметр beta определяет затухание боко- вых лепестков преобразования Фурье окна; О triang(n) - треугольного окна. Приведем пример. Произведем расчет полосового КИХ-фильтра 24-го порядка с полосой пропускания 0,35 со/со„ 0,65: Результат показан на рис 5.40. b = firl(48.[0 35 0.65]); freqzCb,1,512) setCgca.'FontSize',12) titleC'Результат применения процедуры FIR1‘) Группа процедур fi г2 служит для расчета коэффициентов цифрового КИХ-фильт- ра с произвольной амплитудно-частотной характеристикой, задаваемой вектора- ми f и m частот и соответствующих желаемых значений АЧХ. Общий вид обраще- ния к процедуре таков: b = fir2(n,f.m,npt.lap,window) Вектор f должен содержать значения нормализованной частоты в неубывающем порядке от 0 до 1. Вектор m должен быть той же длины, что и вектор f, и содер- жать желаемые значения АЧХ на соответствующих частотах.
Проектирование фильтров 207 Параметр npt позволяет задать число точек, по которым выполняется интерполя- ция АЧХ. Параметр lap определяет размер (число точек) области около точек скачкообразного изменения АЧХ, в которой выполняется сглаживание Если эти параметры не указаны, то по умолчанию npt принимается равным 512, a lap — равным 25 Рассчитаем двухполосный фильтр 30-го порядка: f = [0 0.2 0.2 0.6 0.6 0.8 0.8 1]; m =[ 1 1 0 0 0.5 0.5 0 0]: b = fir2(30.f.m): [h.w] = freqz(b.1.512); plot(f.m.w/pi.abs(h)), grid, set(gca.’FontSize'.12) title(’A4X КИХ-фильтра (процедура FIR2)') xlabelC Нормализованная частота'), ylabel('А Ч X') На рис. 5.41 приведены желаемая АЧХ и АЧХ, полученная в результате расчета. Рис. 5.40. Результат применения процедуры firl Рис. 5.41. АЧХ КИХ-фильтра (процедура fir2) Процедура fi rcl также рассчитывает многополосный фильтр, но иначе — с помо- щью заданной кусочно-постоянной АЧХ. Формат обращения к ней таков: b = fircls(n,f.amp.up,lo.'design_flag‘) Здесь f, как и ранее, — вектор значений нормализованных частот (от 0 до 1), опре- деляющих границы полос фильтра. Вектор amp определяет кусочно-постоянную желаемую АЧХ фильтра, количество его элементов равно числу полос фильтра и, следовательно, на единицу меньше числа элементов вектора f. Векторы up и 1о определяют соответственно верхние и нижние допустимые отклонения АЧХ спро- ектированного фильтра от желаемой АЧХ для каждой из полос. Размер этих век- торов совпадает с размером вектора amp. Параметр 'design_flag' может принимать три значения: О trace — чтобы обеспечить вывод результатов в виде текстовой таблицы; О plots — чтобы графически отобразить АЧХ, групповую задержку, нули и по- люсы; О both — для отображения результатов как в текстовой, так и в графической форме
208 Урок 5 • Цифровая обработка сигналов Приведем пример разработки ранее рассмотренного двухполосного фильтра: N = 30; f = [0 0.2 0.6 0.8 1]; amp = [1 0 0.5 0]; р = [1.02 0.02 0.51 0.02]; 1о = [0.98 -0.02 0.49 -0.02 ]; b = fircls(n.f.amp,up.lo.'both') Результат представлен ниже и на рис. 5.42. Bound Violation = 0.0755112846369 Bound Violation - 0.0116144793011 Bound Violation = 0.0004154355279 Bound Violation = 0.0000905996658 Bound Violation = 0.0000214272508 Bound Violation = 0.0000009624286 Bound Violation = 0.0000002393147 Bound Violation = 0.0000000596813 Bound Violation - 0.0000000146532 Bound Violation = 0.0000000036610 b = \ -7.4344е-005 -0.0030717 0.022633 0.010051 0.0059551 0.001063 -0.010522 -0.023061 -0.062583 0 0089569 -6.0306е-005 -0.014469 0.17747 0.11938 0.12718 0.3023 0.12718 0.11938 0.17747 -0.014469 -6.0306е-005 0.0089569 -0.062583 -0.023061 -0.010522 0.001063 0.0059551 0.010051 0.022633 -0.0030717 -7.4344е-005 Для сравнения с результатами работы процедуры f 1 г2 построим график полу- ченной АЧХ, аналогичный графику, приведенному на рис. 5.41: [h.w] = freqz(b,1,512); plotCw/pi.abs(h)). grid. setCgca.'FontSize'.12) title('A4X КИХ-фильтра (процедура FIRCLS)') xlabeK'Нормализованная частота'). ylabeK'А Ч X') Результат представлен на рис, 5.43. Рис. 5.42. Результат применения процедуры fircls Рис. 5.43. АЧХ КИХ-фильтра (процедура fircls)
Проектирование фильтров 209 Процедура firclsl предназначена для расчета параметров КИХ-фильтров мето- дом наименьших квадратов с учетом допусков на отклонения АЧХ. Предусмотре- ны следующие виды обращения к этой процедуре: b = firclsl(n.Wo.dp.ds) b = firclsHn.Wo.dp.ds.'high') b = firclsl(n.Wo.dp.ds.Wt) b = firclsKn.Wo.dp.ds.Wt.'high') b = firclsl(n,Wo.dp.ds.Wp,Ws.k) b = firclsKn.Wo.dp.ds.Wp.Ws.k.'high') b = firclsHn.Wo.dp.ds......'design_flag‘) Параметр Wo представляет собой нормализованную частоту среза; dp — определяет максимально допустимое отклонение АЧХ рассчитанного фильтра от единицы в полосе пропускания, a ds — максимальное отклонение АЧХ рассчитанного фильтра от нуля в полосе задерживания. Наличие параметра ‘high’ указывает, что рассчитываются параметры ФВЧ. Если этот флажок отсутствует, рассчиты- вается ФНЧ. Параметр Wt позволяет задать частоту Wt, выше которой (если Wt больше Wo) или ниже которой (если Wt меньше Wo) гарантируется выполнение тре- бований к АЧХ синтезируемого фильтра. Параметры Wp, Ws и к задают соответ- ственно граничную частоту пропускания, храничную частоту задерживания и отно- шение ошибки в полосе пропускания к ошибке в полосе задерживания. Параметр 'design flag' имеет тот же смысл и принимает те же значения, что и в предыду- щей процедуре. Группа процедур remez осуществляет расчет коэффициентов цифрового КИХ-фильтра с линейной ФЧХ по алгоритму Паркса- МакКлелла, в котором использован об- менный алгоритм Ремеза и метод аппроксимации Чебышева. При этом миними- зируется максимальное отклонение АЧХ спроектированного фильтра от желаемой АЧХ. Приведем наиболее полный вид обращения к процедуре: b = remez(n.f,a.W.'ftype') Вектор f должен состоять из последовательных, записанных в возрастающем поряд- ке пар нормализованных (от 0 до 1) частот, определяющих соответственно нижнюю и верхнюю границы диапазона полосы проххускания или задерживания. Вектор а должен содержать желаемые значения АЧХ на частотах, определяемых соответ- ствующими элементами вехсгора f. Желаемая АЧХ в полосе частот от f(k) до f(k+1) при нечетном значении к представляет собой отрезок прямой от точки f(k), а (к) до точки f(k+1), a(k+1). В диапазонах от f(к) до f(к+1) при четном значении к зна- чение желаемой АЧХ не определено (а значит, при проектировании фильтра АЧХ в этих диапазонах она может принимать любое значение). Следует заметить, что значение f( 1) должно всегда быть равным нулю. Векторы f и а должны иметь оди- наковую длину, причем общее количество элементов каждого вектора должно быть четным числом. Вектор W задает значения коэффициентов веса каждой из полос АЧХ, заданных парами частот вектора f. Эти коэффициенты используются при аппроксимации АЧХ и определяют достигаемое при аппроксимации соотношение между реаль- ным и желаемым значением АЧХ в каждом из диапазонов. Число элементов век- тора W равно половине числа элементов вектора f.
210 Урок 5 • Цифровая обработка сигналов Параметр ’ ftype ’ может принимать одно из двух значении: О ' hl 1 bert' — в этом случае процедура проектирует фильтры с нечетной симмет- рией и линейной фазой; О 'differentiator1 — синтезируется фильтр с использованием специальных ме- тодов взвешивания; при этом для ошибок задаются веса, пропорциональные 1 /f; поэтому ошибки аппроксимации на низких частотах меньше, чем на высо- ких; для дифференциаторов, АЧХ которых пропорциональна частоте, мини- мизируется максимальная относительная ошибка. Ниже приводится пример проектирования полосового фильтра 17-го порядка: Результат приведен на рис. 5.44. f = [О 0.3 0.4 0.6 0.7 1]; а = [0 0 1 1 0 0]: b = remez(17.f.a): [h. w] = freqzCb.1.512): plot(f,a.w/pi,abs(h)), grid, setCgca.'FontSize'.12) title('A4X КИХ-фильтра (процедура REMEZ)’) xlabelCНормализованная частота'), ylabel(’А Ч X') Рис. 5.44. АЧХ НИХ фильтра (процедура remez) Особенностью процедуры cremez является то, что исходные данные по желаемой форме АЧХ фильтра задаются в виде функции, условно обозначенной как fresp. Формы обращения к этой процедуре приведены ниже: b = cremezCn.f.’fresp’) b = cremezCn.f,'fresp'.w) b = cremezCn.f.{'fresp'.pl.p2...,}.w) b = cremezCn.f.a.w) b = cremezC...,'sym') b = cremezC....'debug') b = cremezC....'skip_stage2‘) [b.delta.opt] = cremezC...) Параметры n и f имеют тот же смысл, и требования к их представлению такие же, как и при использовании процедуры remez. В отличие от последней вектор значе- нии желаемой АЧХ, соответствующих заданным значениям вектора f, определя- ется путем обращения к функции fresp.
Проектирование фильтров 211 Функция fresp может принимать одно из следующих значений. О lowpass, highpass, bandpass, bandstop (ФНЧ, ФВЧ, полосовой и режекторный фильтры) — рассчитываются параметры фильтра указанного типа; если для функции fresp не заданы дополнительные параметры (обращения к процедуре первого и второго видов), то групповое время замедления (ГВЗ) принимается равным п/2; при обращении к процедуре в третьей форме, где в качестве допол- нительного параметра функции fresp указан один параметр pl=d, ГВЗ = п/2 + d. О multiband (многополосовой фильтр) — синтезируется фильтр, заданный век- тором а желаемой АЧХ при значениях частот, определенных вектором f; при этом вектор а указывается в качестве первого дополнительного параметра функции multiband (третья форма обращения); если, кроме этого вектора, не указаны другие дополнительные параметры, то ГВЗ принимается равным п/2, если же указан еще один дополнительный параметр p2=d, то ГВЗ - п/2 + d; О differentiator (дифференциатор) — рассчитываются коэффициенты диффе- ренцирующего фильтра с линейной фазой; при обращении к этой функции в качестве дополнительного параметра необходимо указать частоту дискрети- зации, Fs; по умолчанию Fs равно единице; О hilbfllt (фильтр Гильберта) — вычисляются коэффициенты фильтра Гиль- берта с линейной фазой. Обращение к процедуре четвертого вида эквивалентно обращению b = cremez(n,f.{'multiband',a}, w) Параметр ' sym‘ позволяет задать тип симметрии импульсной характергилпики (ИХ) фильтра. Он может принимать следующие значения: О попе — в этом случае ИХ может быть произвольной; это значение параметра используется по умолчанию, если при определении желаемой АЧХ задаются отрицательные значения частот; О even — АЧХ должна быть вещественной с четной симметрией; такое значение параметра используется по умолчанию при проектировании ФНЧ, ФВЧ, по- лосовых и режекторных фильтров; О odd — АЧХ должна быть вещественной с нечетной симметрией; такое значение по умолчанию используется при проектировании фильтров Гильберта и диф- ференциаторов; О real — АЧХ должна иметь сопряженную симметрию. Использование флага ' sk1p_stage2' (см. седьмой вид обращения к процедуре) по- зволяет не выполнять второй этап алгоритма оптимизации, который рассчитыва- ет коэффициенты фильтра в тех случаях, когда этого нельзя сделать с помощью алгоритма Ремеза. При исключении второго этапа время расчетов сокращается, но точность расчетов может снизиться. По умолчанию выполняются оба этапа оптимизации. Параметр ' debug' (см шестой вид вызова процедуры) определяет вид выводимых на экран результатов расчета фильтра и может принимать сле- дующие значения: 'trace', 'plots', 'both' или 'off'. По умолчанию используется значение 'off' (то есть на экран не выводится информация).
212 Урок 5 • Цифровая обработка сигналов Использование дополнительного выходного параметра delta (см. восьмой вид об- ращения к процедуре) дает возможность применять в последующих операциях значение максимальной амплитуды пульсаций АЧХ. Выходной параметр opt содержит набор дополнительных характеристик: О opt.grid — вектор отсчетов частоты, использованных при оптимизации; О opt. Н — вектор значений АЧХ, соответствующих значениям элементов в век- торе opt. grid; О opt.error — вектор значений ошибок на частотах вектора opt.grid; О opt.fextr — вектор, содержащий частоты с экстремальными ошибками АЧХ. На рис. 5.45 изображен результат применения процедуры cremez для расчета па- раметров полосового КИХ-фильтра 30-го порядка: b = cremez(30.[0 0.5 0.6 0.8 0.9 1].'bandpass'); freqz(b.1.512) set(gca,'FontSize'.12). title(’A4X КИХ-фильтра (процедура CREMEZ)') Рис. 5.45. Результат применения процедуры cremez Графические и интерактивные средства пакета Signal Пакет Signal располагает целым рядом средств графического представления об- рабатываемых сигналов, параметров обработки сигналов и параметров фильтров. Далее рассматриваются основные из них. Представление результатов в графической форме Некоторые графические средства пакета Signal уже упоминались ранее. К ним относятся, прежде всего, процедуры freqs и freqz. Применение первой процедуры без выходных параметров приводит к построению в графическом окне (фигуре) графиков АЧХ и ФЧХ аналогового звена по заданным векторам коэффициентов числителя и знаменателя передаточной функции по Лапласу. Применяя без выходных параметров вторую процедуру, в графическом окне можно построить характеристики цифрового фильтра (звена) по коэффициентам его дискретной
Графические и интерактивные средства пакета Signal 213 передаточной функции Напомним, что общая форма вызова этих функций при выводе графиков такова: freqs(b.a.n) freqz(b.a) При этом b и а представляют собой векторы коэффициентов числителя и знамена- теля передаточной функции, а п задает число отсчетов в строящихся АЧХ и ФЧХ. Пример использования процедуры freqs приведен на рис. 5 14, а процедуры freqz — на рис. 5.15. Обе процедуры строят АЧХ в логарифмическом масштабе, причем вторая — в децибелах; в первом случае частоты откладываются в радианах в се- кунду и в логарифмическом масштабе, а во втором — в виде отношения к частоте Найквиста, в равномерном масштабе и в диапазоне от 0 до 1; форма оформления графиков довольно жесткая и не предусматривает возможности изменения раз- меров графиков, надписей по осям и вывода заголовка. Некоторые процедуры расчета фильтров, такие как f 1 rcl s, fi rcl si, cremez и maxfl at, предусматривают вывод соответствующих графических изображений некоторых параметров спроектированного фильтра если в качестве последнего входного па- раметра при обращении к процедуре указан флаг 'plot'. Так, функция maxfl at в этом случае выводит три графические зависимости О АЧХ в пределах частот от нуля до частоты Найквиста в равномерном масштабе; О карту расположения нулей и полюсов в комплексной z-плоскости; О частотный график групповой задержки фильтра Например, обращение [b.a,bl,b2]-maxflat(10.2.0.6,'plots') приводит к появле- нию в графическом окне изображения, показанного на рис. 5.46. Рис. 5.46. Графическое окно функции maxflat При вызове функции f 1 rcl s с этим флагом на график выводятся фрагменты АЧХ с максимальными отклонениями от требуемой АЧХ (рис. 5.47): п - 30. f = [0 0.2 0.6 0.8 1]; amp =[10 0.5 0]; up = [1.02 0.02 0.51 0.02]; lo = [0.98 -0.02 0.49 -0.02 ]; fircls(n,f.amp.up,lo,’plots');
214 Урок 5 • Цифровая обработка сигналов Аналогичные графики строятся и при вызове функции firclsl. Отличие состоит лишь в том, что во втором случае графики не снабжены текстом (рис 5 48): firclsKn, 0.5,0.01,0.01, 'plots'): Рис. 5.47. Графическое окно функции fircls Рис. 5.48. Графическое окно функции firclsl Процедура cremez(30,[0 0.5 0.6 0.8 0.9 1].’bandpass'.‘plots*) выводит следую- щие графики (в одном графическом окне): АЧХ, ФЧХ, погрешности по амплиту- де от частоты и погрешности по фазе от частоты. Это показано на рис. 5.49. 20 normalized frequency Error magnitude OG392 4*0 Рис. 5.49. Графическое окно функции cremez В пакете Signal имеются еще три важные графические процедуры: grpdelay, impz и zplane. Первая строит график группового времени задержки (ГВЗ) от частоты, вторая позволяет получить импульсную характеристику заданного фильтра, а третья отображает на комплексной z-плоскости положение нулей и полюсов фильтра. В качестве примера рассмотрим применение этих процедур к БИХ-фильтру, соз- данному процедурой maxflat: [b.a] = maxflat(10.2.0.6): grpdelay(b.a,128) Результат применения функции grpdelay приведен на рис. 5.50.
Графические и интерактивные средства пакета Signal 215 Применяя процедуру Impz к тому же фильтру при обращении к ней вида Impz(b.a), получим график импульсной дискретной характеристики фильтра, изображен- ный на рис. 5 51. Рис. 5.50. Результат применения процедуры grpdelay Рис. 5.51. Результат применения процедуры impz Использование процедуры zpl апе(b. а) для этого фильтра приводит к построению графика, показанного на рис. 5.52. Рис. 5.52. Результат применения процедуры zplane Рассмотрим применение некоторых графических функций на примере двух кор- релированных случайных процессов. Для этого вначале сформируем эти процессы: Ts ° 0.01; Т - 100; X Определение параметров процесса t = 0 : Ts : Т; xl = randnCl.length(t)): X Формирование белого шума X Расчет параметров формирующего фильтра omO = 2*pi; dz = 0.05; А = 1; oms - om0*Ts; а(1) = 1 +2*dz*oms + onisA2; а(2) - -2*(1 + dz*oms); а(3) = 1; b(l) = A*oms*2; % Формирование «профильтрованного» процесса yl = filter(b.a.xl); % Построение графика процесса subplot(3.1.1). plotCt.yl)-. rid. setCgca.'FontSize',12) titleC'Процесс на выходе фильтра СТО = 1; dz = 0.05, Ts = 0.01)'): ylabel('Yl(t)'); % Расчет параметров первого звена
216 Урок 5 * Цифровая обработка сигналов omO = 2*pi*0.20; dz = 0.05; А = 1; oms = omO*Ts; aid) = 1 + 2*dz*oms + oms*2; al(2) = -2*(1 + dz*oms); al(3) = 1; bld) = A*oms*2; % Формирование «первого» процесса x = filter(bl.al.yl); % Построение графика первого процесса subplot(3.1,2), plot(t.x).grid. setCgca.'FontSize'.12) title('Первый случайный процесс (TO = 5; dz = 0.05. Ts = 0.01)'): ylabelC'X(t)’); X Расчет параметров второго звена omO = 2*pi*0.5; dz = 0.05; A = 1; oms = om0*Ts; a2(l) = 1 + 2*dz*oms + oms*2; a2(2) = -2*d+dz*oms): a2(3) = 1; b2d) = A*oms*2; X Формирование «второго» процесса у = filter(b2.a2,yl); % Построение графика второго процесса subplot(3.1.3). plot(t.y).grid. setCgca.'FontSize'.12) titleC'Второй случайный процесс (ТО = 2; dz = 0.05. Ts = 0.01)'): xlabelC'Время (c)'); ylabel('YCt)') Графики порождающего процесса и двух процессов, производных от него, приве- дены на рис. 5.53. Рис. 5.53. Графики случайных процессов с различными преобладающими частотами Представление графика длинного процесса в виде совокупности нескольких фраг- ментов меньшей длины можно осуществить с помощью процедуры strips при об- ращении к ней вида: stripsCx.sd,Fs.scale), где х — вектор значений выводимой на график функции, sd — параметр, задающий длину одного фрагмента в секундах, Fs — значение частоты дискретизации, scale — масштаб по вертикальной оси. В качестве примера выведем график порождающего случайного процесса, разби- вая его на отдельные фрагменты по 20 с каждый и задавая диапазон изменения значения функции в каждом фрагменте от -2 до 2: stripsCyl.20.100. 2),grid setCgca,'FontSize',12) titleC'Применение процедуры STRIPS для вывода Yl(t)'); xlabelCВремя, с') На рис. 5.54 представлен результат.
Графические и интерактивные средства пакета Signal 217 Рис. 5.54. Применение процедуры strips для вывода графиков Теперь познакомимся с графическими процедурами статистической обработки процессов. Ранее (см. раздел «Статистический анализ») мы рассмотрели приме- нение функции psd, которая если не указывать выходных параметров, выводит в графическое окно график спектральной плотности мощности (см. рис. 5 34, изо- бражение справа). Аналогичный график зависимости модуля взаимной спектраль- ной плотности двух сигналов от частоты строит процедура csd, если обратиться к ней таким образом: csdCx.y.nfft.Fs), где х и у — заданные последовательности отсчетов двух сигналов, nfft — число отсчетов, по которым определяется взаим- ная спектральная плотность, Fs — частота дискретизации этих сигналов. Применим функцию psd к случайному сигналу X(t), а процедуру csd используем для нахождения взаимной спектральной плотности сигналов X(t) и Y(t). Резуль- таты приведены соответственно на рис 5.55 и 5.56. [Sx.f] = psd(x,10000.100); plotCf(1:100). SxClzlOO)). grid, setCgca.'FontSize'.12) titleC'Применение процедурь PSD к процессу XCt)'); ylabel('Спектральная плотность'); xlabelC'Частота. Гц') Рис. 5.55. Применение процедуры psd к процессу X(t)
218 Урок 5 • Цифровая обработка сигналов [Sxy.f] = csd(x.y.lOOOO.lOO); plot(f(l:100). abs(Sxy(1:100))). grid. set(gca.'FontSize'.12) title('Применение процедуры CSD к процессам X(t) и Y(t)'); ylabeK'Модуль взаимной С IT): xlabeK'Частота. Гц') Рис. 5.56. Применение процедуры csd к процессам X(t) и Y(t) Процедура cohere при обращении вида cohere(x.y.nfft.Fs) вычисляет и выводит график от частоты квадрата модуля функции когерентности сигналов X(t) и Y(t), вычисленного по nfft точкам заданным с частотой дискретизации Fs. Применяя эту процедуру к сформированным случайным процессам, получим картину, пред- ставленную на рис. 5.57. Рис. 5.57. Применение функции cohere к процессам X(t) и Y(t)
Графические и интерактивные средства пакета Signal 219 Ознакомимся с процедурой spectrum, которая выполняет спектральный анализ двух процессов, X(t) и Y(t). При обращении к ней вида Р = spectrum(x.y) вычисляется матрица Р, состоящая из восьми столбцов. Р = [Рхх. Руу. Рху. Тху, Сху. Рххс. Руус. Рхус] Здесь Рхх — вектор-столбец, содержащий оценку СПМ процесса X; Руу — вектор- столбец, содержащий оценку СПМ процесса Y; Рху — вектор взаимной спектраль- ной плотности процессов X и Y; Тху — комплексная передаточная функция Тху= =Рху./Рхх; Сху — функция когерентности Cxy=((abs(Pxy)).*2)./(Рхх.*Руу); Рххс, Руус, Раус — векторы, содержащие доверительные интервалы для оценок Рхх, Руу и Рху. При обращении к функции без выходных параметров: spectrumCx у) результатом ее работы будет поочередный вывод в одно графическое окно таких графиков. О Сначала появится график зависимости СПМ первого сигнала от нормализо- ванной частоты (рис. 5.58, с); на графике отобразятся три кривые: кривая оценки осредненного значения СПМ на фиксированной частоте, кривая с до- бавлением доверительного интервала на этой частоте и кривая с вычитанием доверительного интервала. О После нажатия клавиши Enter прежние кривые исчезнут и на том же поле поя- вятся три аналогичные кривые (рис. 5.58, б) для второго процесса, Y(t). Рис. 5.58. Оценки осредненного значения СПМ: а — процесса X(t); б — процесса Y(t) О Следующее нажатие клавиши Enter приведет к появлению кривой зависимо- сти модуля «передаточной функции» взаимной спектральной плотности ука- занных процессов от частоты (рис. 5.59, слева). О Очередное нажатие клавиши Enter приведет к появлению графика зависимо- сти аргумента «передаточной функции» ВСП от частоты (рис. 5.59, справа). О Последнее нажатие клавиши Enter вызовет появление в поле графика функ- ции когерентности (рис. 5.60).
220 Урок 5 • Цифровая обработка сигналов Рис. 5.59. Модуль (слева) и аргумент (справа) «передаточной функции» взаимной спектральной плотности Рис. 5.60. Функция когерентности Для построения спектрограммы процесса в MATLAB предусмотрена процедура specgram. Спектрограммой называется графическое изображение зависимости ам- плитуды вычисленного в окне дискретного преобразования Фурье от момента времени, определяющего положение этого окна. Обращение к процедуре specgram напоминает обращение к процедуре psd: specgram(x.nfft.Fs) Здесь х — вектор процесса, спектрограмма которого вычисляется; nfft — количе- ство точек этого процесса, участвующих в вычислениях; Fs — частота дискретиза- ции процесса. Применим для примера эту процедуру к ранее сформированному процессу X(t): specgram(x,10000,100) В результате получим в графическом окне картину, приведенную на рис. 5 61. Процедура tfe оценивает параметры АЧХ передаточной функции звена, на вход которого подан процесс, обозначенный первым вектором в обращении к процедуре,
Графические и интерактивные средства пакета Signal 221 а на выходе получен процесс, обозначенный вторым вектором. Чтобы получить график АЧХ, следует обратиться к ней таким образом: tfe(x.y.nfft.Fs) Здесь х — вектор значений входного процесса, у — вектор значений выходного процесса, nfft — количество обрабатываемых точек (элементов указанных векто- ров), Fs — частота дискретизации. Применим процедуру к ранее сформированным процессам X(t) и Y(t): tfe(x.y.10000.100) Получим график, представленный на рис. 5.62. Рис. 5.61. Спектрограмма процесса X(t) Рис. 5.62. Применение процедуры tfe Интерактивная оболочка SPTool Графическая интерактивная оболочка пакета Signal включает: О средство поиска и просмотра сигналов (Signal Browser), О проектировщик фильтров (Filter Designer); О средство просмотра характеристик фильтров (Filter Viewer); О средство просмотра спектра (Spectrum Viewer). Оболочка активизируется путем ввода в командном окне MATLAB команды sptool. В результате на экране появляется окно SPTool (рис. 5.63). Как видим, это окно содержит три списка: Signals (Сигналы), Filters (Фильтры) и Spectra (Спектры) Под каждым из них имеются кнопки с названиями команд, которые можно применять к объектам списков. Под списком Signals (Сигналы) находится единственная кнопка View (Просмотр), это означает, что объекты (сигналы), имена которых содержатся в данном списке, могут быть только просмотрены. К списку Filters (Фильтры) относятся четыре кнопки. View (Просмотр), New (Создать), Edit (Правка), Apply (Применить) Они позволяют просматривать, создавать и редактировать фильтры, а также применять их к одному или нескольким объектам, выделенным в списке Signals (Сигналы).
222 Урок 5 • Цифровая обработка сигналов Под списком Spectra (Спектры) располагаются кнопки View (Просмотр), Create (Создать), Update (Обновить), с помощью которых можно просматривать, созда- вать и обновлять (создавать заново под тем же именем) спектры сигналов. Рис. 5.63. Окно SPTool В указанных списках обычно размещаются имена (идентификаторы) перемен- ных или процедур, входящих в открытый в sptool-файл, имеющий расширение .spt (имя этого файла отображается в заголовке окна). При первом обращении к окну SPTool его заголовок содержит имя файла startup.spt, все три списка окна — пустые; доступной является только кнопка New Design (Соз- дать). Таким образом, после вхождения в оболочку SPTool допустимой является только операция создания нового фильтра. Чтобы сделать доступными осталь- ные кнопки, необходимо откуда-то импортировать данные о каких-то сигналах. Такие данные должны быть сформированы средствами, не относящимися к обо- лочке SPTool (например, являться результатом выполнения некоторой програм- мы MATLAB или результатом моделирования в среде Simulink), и записаны как некоторые переменные либо в рабочем пространстве (Workspace), либо на диске в файле с расширением .mat. Импорт сигналов Обрабатывать сигналы в SPTool можно лишь после того, как они сформированы с помощью определенной программы MATLAB, а полученные векторы значений данных этих сигналов импортированы в среду SPTool Для этого в окне SPTool выберите команду File ► Import (Файл ► Импорт), после чего появится диалоговое окно Import to SPTool (Импорт в SPTool), представленное на рис. 5.64. В области Source (Источник) данного окна по умолчанию установлен переключа- тель From Workspace (Из рабочего пространства). Это означает, что окно настроено на импорт сигналов из рабочего пространства MATLAB. Поэтому все имена переменных рабочего пространства представлены в списке Workspace Contents (Со- держимое рабочего пространства). В начале сеанса работы данный список пуст.
Графические и интерактивные средства пакета Signal 223 Рис. 5. 64. Окно Import to SPTooL Допустим, что мы сгенерировали случайные процессы X(t),Y(t)nYl(t)B соответ- ствии с программой, приведенной в разделе «Графические средства». В результа- те в рабочем пространстве MATLAB появились векторы х, у и yl, каждый из ко- торых содержит по 10 000 элементов. Импортируем их в среду SPTool После этого в списке Workspace Contents (Содержимое рабочего пространства) появятся име- на всех переменных рабочего пространства MATLAB (см рис. 5.64). Выбрав в этом списке необходимую переменную, нужно щелкнуть на кнопке со стрелкой, указывающей на поле Data. В результате в этом поле должно появиться имя выбранной переменной. Затем в поле Sampling Frequency (Частота дискрети- зации) следует записать желаемое значение частоты дискретизации. Фактически этим параметром задается временной промежуток Ts между отдельными значе- ниями выбранного вектора процесса. В поле Name (Имя) нужно ввести имя, под которым данный вектор будет храниться в среде SPTool. На рис. 5.65 виден ре- зультат выбора переменной yl, которая будет записана в SPTool под тем же име- нем с частотой дискретизации 100 Гц (то есть с дискретом времени 0,01 с). Рис. 5.65. Импорт в SPTool сигнала Y1
224 Урок 5 • Цифровая обработка сигналов Выполнив описанную подготовительную работу, следует щелкнуть на кнопке ОК, и импорт сигнала в среду SPTool будет произведен. После этого окно IMPORT Sptool исчезнет и окно SPTool изменит свой вид (рис. 5.66): в списке Signals (Сигналы) появится имя вектора сигнала, станут доступными кнопка View (Вид) под этим списком, а также кнопка Create (Создать), относящаяся к списку Spectra (Спек- тры). Это означает, что появилась возможность находить спектральные характе- ристики импортированного сигнала Рис. 5.66. Окно SPTool после импорта сигнала Y1 Повторяя описанные выше действия можно перенести в среду SPTool и другие сигналы (х и у). Если векторы процессов записаны в МАТ-файл, то для их импорта необходимо после вызова окна Import to SPTool (Импорт в SPTool) выбрать в нем переключа- тель From Disk (Из диска). В результате станут доступными поле ввода MAT-file Na- me (Имя МАТ-файла) и кнопка Browse (Поиск) (рис. 5.67). Рис. 5.67. Окно Import to SPTool с активным переключателем From Disk
Графические и интерактивные средства пакета Signal 225 Введя в указанное поле имя необходимого МАТ-файла с записью процесса или отыскав МАТ-файл с помощью кнопки Browse (Поиск), мы получим в списке File Contents (Содержимое файла) его содержимое. Последующие действия аналогич- ны ранее рассмотренным. Просмотр сигналов После импорта вектора сигнала можно воспользоваться средствами его просмотра. Для этого достаточно выделить в списке Signals (Сигналы) необходимый сигнал и щелкнуть на кнопке View (Просмотр), расположенной ниже списка. В результа- те должно появиться окно Signal Browser (Браузер сигналов). Выбрав в списке Signals (Сигналы) окна SPTool сигнал yl, получим окно, изображенное на рис 5.68. Рис. 5.68. Окно Signal Browser На рис. 5.69 отображены все три процесса. Как видим, выше графика указываются имена сигналов, изображенных на графике, размерность соответствующих векторов и частота дискретизации. Центральную часть окна занимает изображение кривых зависимости выделенных процессов от времени. Там же расположены две верти- кальные линии (маркеры), передвигая которые в горизонтальном направлении с помощью мыши, можно определить координаты двух любых точек представ- ленной кривой при установленных маркерами значениях аргумента. Результаты этих отсчетов приводятся в нижней части окна Там же обычно приводятся значе- ния разности аргументов и разности координат этих двух точек. Под заголовком окна расположена строка меню. Меню File (Файл) включает ко- манды, предназначенные для подготовки и вывода на принтер содержимого окна. Команды меню Markers (Маркеры) показаны на рис. 5.70
226 Урок 5 • Цифровая обработка сигналов Рис. 5.69. Отображение трех процессов в окне Signal Browser Рис. 5.70. Меню Markers Первая команда этого меню позволяет включать (отключать) маркеры на изобра- жении процессов. Остальные команды доступны при включенных маркерах. По- сле установки флажка рядом с командой Vertical (По вертикали) отображаются лишь аргументы точек пересечения маркеров с графиком процесса. Если активна команда Horizontal (По горизонтали), создаются горизонтальные линии маркеров, что позволяет отсчитывать только их вертикальные координаты. Команда Track (Отслеживать) возвращает предыдущий режим работы с маркерами. Использова- ние команды Slope (Наклон) приводит к появлению на графике еще одной прямой,
Графические и интерактивные средства пакета Signal 227 соединяющей точки пересечения графика сигнала с маркерными линиями. При этом внизу экрана выводится значение тангенса угла наклона этой прямой к оси абсцисс. Вызов команды Peaks (Максимумы) приводит к тому, что линии марке- ров могут быть установлены только в точках максимальных значений сигнала При этом внизу окна появляются значения этих максимумов и их аргументов. Аналогично, с помощью команды Valleys (Минимумы) определяются точки мини- мумов сигнала. Наконец, команда Export (Экспорт) позволяет записать изобра- женную в окне маркерную структуру в виде массива с указанным именем в рабо- чее пространство MATLAB. Ниже строки меню находится панель инструментов. С помощью инструментов, расположенных на этой панели, можно произвести действия, предусмотренные меню File (Файл), Markers (Маркеры), Windows (Окна), а также выполнить следую- щие операции: О изменить цвета кривых, изображаемых в окне графиков; О изменить масштабы изображения по обеим осям графика; О выделить для увеличенного изображения отдельную область графика. Создание спектров сигналов После ввода в окно SPTool сигналов можно найти оценки их спектральных свойств. Для этого достаточно в списке Signals (Сигналы) окна SPTool отметить (выде- лить) тот сигнал оценку спектральной плотности которого вы хотите получить, и вызвать команду Create (Создать), относящуюся к списку Spectra (Спектры). При этом на экране появится окно Spectrum Viewer (Просмотр спектра), показанное на рис. 5.71. Рис. 5.71. Окно Specrum Viewer
228 Урок 5 • Цифровая обработка сигналов Новое окно напоминает окно Signal Browser (Браузер сигналов) Панели инстру- ментов этих окон практически одинаковы. Область отображения спектра в окне Spectrum Viewer (Просмотр спектра) в начале сеанса работы является пустой, а сле- ва от нее располагается область, в которой можно выбрать метод нахождения спектральной характеристики сигнала, установить количество его обрабатывае- мых точек, а также количество точек и тип окна сглаживания. В раскрывающемся списке Method (Метод) можно выбрать метод вычисления спектра. Burg, FFT, MEM, МТМ, MUSIC, Welch или YuleAR. Выбор типа окна, используе- мого при вычислении спектра, осуществляется с помощью списка Window (Окно). Он содержит следующие элементы: bartlett, blackman, boxcar, chebwin, hamming, ban- ning, kaiser, triang. Чтобы начать вычисления, после выбора метода следует щелкнуть на кнопке Apply (Применить), расположенной в правом нижнем углу области. Например, выде- лим для обработки процесс X, вызовем команду Create (Создать) и выберем метод FFT. После щелчка на кнопке Apply (Применить) в окне Spectrum Viewer (Просмотр спектра) в области отображения спектра появится спектр сигнала X (t), показан- ный на рис. 5.72. Рис. 5.72. Спектр сигнала X(t) Проектирование фильтра Если в окне SPTool выбрать команду New (Новый), на экране появится окно Filter Designer (Проектировщик фильтра), представленное на рис 5 73 Это окно позволяет произвести расчет коэффициентов нового фильтра и затем записать их в объект-фильтр. В окне можно устанавливать и изменять следую- щие параметры будущего фильтра. О Прототип рассчитываемого фильтра (список Algorithm) — предоставляются такие альтернативы: • Equiripple FIR (КИХ-фильтр с равноотстоящими разрывами); • Least Square FIR (КИХ-фильтр наименьших квадратов);
Графические и интерактивные средства пакета Signal 229 • Kaizer Window FIR (КИХ-фильтр с окном Кайзера); • Butterwhorth IIR (БИХ-фильтр Баттерворта); • Chebyschev Туре 1IIR (БИХ-фильтр Чебышева 1-го типа); • Chebyschev Туре 2 IIR (БИХ-фильтр Чебышева 2-го типа); • Elliptic IIR (Эллиптический БИХ-фильтр). Рис. 5.73. Окно Filter Designer О Тип фильтра (список Туре) — предоставляется возможность выбора следую- щих типов: • Lowpass — фильтр нижних частот; • High pass — фильтр верхних частот; • Bandpass — полосовой фильтр; • Bandstop — режекторный фильтр. О Параметры полосы пропускания (область Passband) — здесь можно устано- вить, например, для фильтра нижних частот, граничную частоту полосы про- пускания (Fp) и максимально допустимое значение (в децибелах) подавления амплитуд внутри полосы пропускания (Rp). О Параметры полосы задерживания (область Stopband) — здесь можно устано- вить, например, для фильтра нижних частот, граничную частоту полосы за- держивания (Fs) и минимально допустимое значение (в децибелах) подавле- ния амплитуд внутри полосы задерживания (Rs). Количество устанавливаемых параметров и их смысл автоматически изменяются при переходе к фильтру другого типа.
230 Урок 5 • Цифровая обработка сигналов Например, установив алгоритм фильтра Баттерворта нижних частот с граничными частотами полосы пропускания 0,5 Гц и полосы задерживания 0,7 Гц (рис. 5.74) и щелкнув на кнопке Apply (Применить), получим параметры такого фильтра и запишем их в объект f i 1 tl. Рис. 5.74. Проект фильтра низких частот Баттерворта Просмотр свойств фильтра После создания фильтра можно просмотреть графики различных характеристик спроектированного и записанного фильтра. Для этого достаточно выделить имя фильтра, свойства которого нужно посмотреть, в списке Filters (Фильтры) окна SPTool, а затем щелкнуть на кнопке View (Просмотр), соответствующей этому списку. Например, для только что созданного фильтра flltl на экране отобразится окно Filter Viewer (Просмотр фильтра), показанное на рис. 5.75. Как видим, в окне выведены графики АЧХ и ФЧХ фильтра. Окно Filter Viewer (Просмотр фильтра) предоставляет следующие средства про- смотра фильтров. О Возможность одновременного вывода на экран любого сочетания таких гра- фиков АЧХ, ФЧХ, частотной зависимости ГВЗ, графического представления расположения нулей и полюсов дискретной передаточной функции в z-плос- кости, графика временного отклика фильтра на импульсное единичное воз- действие и графика отклика на ступенчатое единичное воздействие; для этого надо установить флажки на графиках соответствующих видов в области Plots (Графики) окна.
Графические и интерактивные средства пакета Signal 231 О Возможность изменить вид шкалы как по оси частот, так и по оси амплитуд, установить диапазон представления графиков по частоте и изменить единицы представления фазового сдвига (области Plot и Frequency Axis). Рис. 5.75. Окно Filter Viewer Пример одновременного вывода всех доступных графиков показан на рис. 5.76. Рис. 5.76. Возможные виды графиков в окне Filter Viewer
232 Урок 5 • Цифровая обработка сигналов Применение разработанного фильтра Использовать в среде SPTool разработанный фильтр чрезвычайно просто. Для этого следует в списке Signals (Сигналы) окна SPTool выделить имя сигнала, кото- рый нужно преобразовать с помощью фильтра, а в списке Filters (Фильтры) — имя фильтра, с помощью которого надо преобразовать этот сигнал, и активизиро- вать команду Apply (Применить). В результате в списке Signals (Сигналы) поя- вится имя нового сигнала, начинающееся с сочетания символов sig, за которым следует порядковый номер. Полученный сигнал можно просмотреть, как это было описано ранее, используя команду V ew (Просмотр). Например, применяя только что разработанный фильтр flltl к сигналу X(t), получим процесс, изображенный на рис. 5.77. Рис. 5.77. Результат прохождения сигнала X(t) через фильтр Filtl Спектральные характеристики полученного процесса можно изучить, используя команды, относящиеся к списку Spectra (Спектр). Повторное использование результатов SPTool При завершении сеанса работы в среде SPTool система запрашивает, нужно ли записать полученные результаты на диск. В случае положительного ответа она сохраняет все данные в файле с расширением .spt. Кроме того, в меню File (Файл) окна SPTool предусмотрены команды записи в файл — Save Session (Сохранить сеанс) и Save Session As (Сохранить сеанс как). При повторном запуске среды SPTool можно применить сохраненные результаты с помощью команды Open Session (От- крыть сеанс) и выбора одного из записанных SPT-файлов.
Вопросы для самопроверки 233 Вопросы для самопроверки 1. Что входит в понятие цифровой обработки сигналов? 2. Какие задачи можно решить с помощью пакета Signal? 3. Что такое фильтрация сигналов, какими средствами она обеспечивается? 4. Дайте определение фильтра высоких частот, полосового фильтра и режектор- ного фильтра. 5. Что такое БИХ- и КИХ-фильтры? 6. Какими средствами в пакете Signal обеспечивается проектирование фильтров? 7. Какие интерактивные средства предусмотрены в пакете S gnal? 8. Какими средствами генерирования процессов обладает пакет Signal? 9. Как в пакете Signal обеспечить генерирование и анализ случайных процессов9
УРОК Исследование линейных стационарных систем □ Общая характеристика процедур пакета Control Toolbox □ Создание и преобразование СП-моделей □ Получение информации о модели □ Анализ системы □ Интерактивный обозреватель Ltiview □ Синтез системы
Общая характеристика процедур пакета Control Toolbox 235 В теории автоматического управления сложился чрезвычайно удобный и прак- тичный математический аппарат, позволяющий эффективно исследовать поведе- ние линейных стационарных систем автоматического управления. Линейными стационарными системами (в дальнейшем — ЛСС) принято назы- вать такие системы, поведение которых вполне удовлетворительно описывается обыкновенными линейными дифференциальными уравнениями с постоянными коэффициентами. Математическая теория таких систем довольно хорошо разра- ботана, то есть полные решения соответствующих дифференциальных уравнений можно найти практически для любого вида внешних воздействии и возмущений. Для исследования подобных систем особенно эффективен так называемый частот- ный подход, при котором анализируются их свойства в зависимости от частоты внешнего воздействия, гармонически изменяющегося во времени. Соответствую- щие частотные характеристики системы (амплитудная и фазовая) в этом случае отражают и временные ее свойства при произвольном изменении воздействий во времени. Поэтому для анализа ЛСС используются передаточные функции, частотные пере- даточные функции, амплитудно-частотные и фазово-частотные характеристики, а также такие методы представления систем, как пространство состояния и др. Хотя указанные методы и характеристики разработаны и наиболее эффективны для проведения анализа и синтеза систем автоматического управления, они мо- гут быть с успехом применены при исследовании любых динамических систем, описываемых линейными уравнениями с постоянными коэффициентами Пакет Control Toolbox предназначен для исследования линейных стационарных систем с помощью методов автоматического управления. Общая характеристика процедур пакета Control Toolbox Основные особенности использования данного пакета описаны в разделе «Классы пакета Control System Toolbox» урока 4 Ниже приведен перечень основных проце- дур пакета, сгруппированных по их функциональному назначению. Таблица 6.1. Основные процедуры пакета Control Toolbox Процедура Назначение Формирование LTI-объектов SS Создание модели пространства состояния zpk Создание модели нули-полюсы-коэффициенты передачи tf Создание модели передаточной функции dss Специфицирование описателя модели пространства состояния flit Специфицирование цифрового фильтра set Установка (модификация) атрибутов LTI-модели Itiprops Получение детальной справки об атрибутах LTI-моделеи продолжение А
236 Урок б • Исследование линейных стационарных систем Таблица 6.1 (продолжение) Процедура Назначение Извлечение данных ssdata Извлечение матриц пространства состояния zpkdata Извлечение данных о нулях, полюсах, коэффициенте передачи tfdata Извлечение числителя (числителей) и знаменателя (знаменателей) передаточной функции dssdata Получение информации о версии описателя ssdata get Получение информации о значениях свойств LTI-модели Информация об отдельных характеристиках модели class Получение данных о типе модели ('ss', 'zpk' или ’tf) size Получение данных о размерах матриц входа и выхода isempty Проверка является ли LTI-модель пустой isct Проверка, является ли модель непрерывной isdt Проверка, является ли модель дискретной isproper Проверка, является ли модель правильной issiso Проверка, имеет ли модель один вход и один выход isa Проверка, является ли LTI объект моделью заданного типа Преобразование вида модели ss В модель пространства состояния zpk В модель нули-полюсы-коэффициент передачи tf В модель передаточной функции c2d Переход из непрерывного времени в дискретное dZc Переход из дискретного времени в непрерывное d2d Переопределение дискретной системы или добавление задержек входных воздействий «Арифметические» операции +, - Сложение и вычитание LTI-систем (параллельное соединение) ★ Умножение LTI-систем (последовательное соединение) inv Обращение LTI-системы \ Левое деление sysl\sys2; равносильно inv(sysl)*sys2 / Правое деление sysl/sys2; равносильно sysl*inv(sys2) 1 Перетранспонирование 1 Транспонирование карты входа-выхода [ ] Горизонтальное объединение LTI-систем Вертикальное объединение LTI-систем Характеристики динамической системы pole, eig Определение полюсов системы tzero Определение нулей системы pzmap Составление карты нулей-полюсов
Общая характеристика процедур пакета Control Toolbox 237 Процедура Назначение degain Нахождение коэффициента передачи при нулевой (низкой) частоте norm Определение нормы LTI-системы covar Вычисление ковариации отклика на белый шум damp Определение частоты собственных колебаний и демпфирования по полюсам системы esort Сортировка полюсов непрерывной системы по их действительным частям dsort Сортировка полюсов дискретной системы по их модулям pade Аппроксимация Паде задержек во времени Модели пространства состояния rss, drss Генерирование случайных моделей пространства состояния ss2ss Преобразование переменных состояния canon Каноническая форма пространства состояния ctrb, obsv Матрицы управляемости и наблюдаемости gram Определители Грамма (управляемости и наблюдаемости) ssbal Диагональная балансировка матриц пространства состояния balreal Балансировка входа-выхода на основе определителя Грамма modred Редукция состояния модели minreal Минимальная реализация и сокращение нулей и полюсов augstate Увеличение выхода за счет присоединения состояний Отклик во времени step Определение отклика на единичный скачок impulse Определение отклика на единичный импульс initial Определение отклика на заданные начальные условия состояния Isim Определение отклика при произвольных входных воздействиях Itiview Анализ откликов с помощью графического интерфейса gensig Генерирование периодических сигналов для LSIM stepfun Генерирование единичного скачка Частотный отклик bode Построение диаграммы Боде частотного отклика (АЧХ и ФЧХ) sigma Построение частотного графика сингулярных значений nyquist Построение диаграммы Найквиста nichols Построение диаграммы Николса Itiview Анализ откликов с помощью графического интерфейса evalfr Расчет частотного отклика на заданной частоте freqresp Нахождение частотного отклика над сеткой частот margin Определение запасов по фазе и амплитуде продолжение &
238 Урок б • Исследование линейных стационарных систем & Таблица 6.1 (продолжение) Процедура Назначение Объединение систем append Объединение LTI-систем путем объединения входов и выходов parallel Обобщенное параллельное соединение (см. также +) series Обобщенное последовательное соединение (см. также *) feedback Соединение двух систем в виде обратной связи star Соединение звездой Редхеффера connect Получение ss-модели из описания блок-схемы Процедуры классической графики rlocus Построение диаграммы Эванса (размещения корней) rlocfind Интерактивное определение звена путем указания расположения корней acker Размещение полюсов ОМ системы place Размещение полюсов ММ системы estim Создание оценивателя по заданному коэффициенту передачи оценивателя reg Создание регулятора по заданной матрице обратной связи и коэффициентам оценивателя Проектирование LOG Iqr, dlqr Создание линейно-квадратичного регулятора (LQR) обратной связи Iqry Создание LQR с выходным взвешиванием Iqrd Создание дискретного LQR для непрерывной системы kalman Создание фильтра Калмана kalmd Создание дискретного фильтра Калмана для непрерывной системы Iqgreg Формирование LQG регулятора по LQ-коэффициентам и фильтру Калмана Матричные уравнения lyap Решение непрерывных уравнений Ляпунова dlyap Решение дискретных уравнений Ляпунова care Решение непрерывных алгебраических уравнений Риккати dare Решение дискретных алгебраических уравнений Риккати Демонстрационные программы ctrldemo Введение в Control System Toolbox jetdemo Классическое проектирование САУ углом рыскания diskdemo Цифровое проектирование контроллера привода жесткого диска milldemo Одномерная и многомерная системы управления прокатным станом с помощью LQG-регулятора kalmdemo Проектирование и моделирование фильтра Калмана Далее процедуры пакета описываются более подробно.
Создание и преобразование LTI-моделей 239 Создание и преобразование LTI-моделей LTI-модели можно создавать в виде SS-, TF- и ZPK-объектов. Для этого исполь- зуются соответственно процедуры-конструкторы ss, tf и zpk. Создание LTI-моде- ли рассмотрим на примере модели трехстепенного астатического гироскопа. Урав- нения движения такого гироскопа можно представить в следующем виде: d + Хр = n(ty, p-Xa=/(t). Здесь п (t) и Z(t) — моменты сил, которые действуют на гироскоп по осям подвеса; аир — углы поворота гироскопа в пространстве; X — частота собственных (нутаци- онных) колебаний гироскопа. SS-модель Чтобы создать SS-модель, необходимо, прежде всего, привести дифференциаль- ные уравнения движения динамической системы к виду Коши: ~ = Ах + Ви, ’ dt (6-2) у = Cx + Du. Здесь и — вектор входных переменных; у — вектор выходных переменных; х - вектор переменных состояния системы. Из этого следует, что перед формирова- нием SS-модели необходимо: О определить, какие величины будут задаваться как явные функции времени, то есть какие величины составят вектор и входных переменных; О определить, какие величины будут образовывать вектор у выходных перемен- ных (то есть будут определяться путем решения системы заданных дифферен- циальных уравнений); О установить, какие величины будут составлять вектор х переменных состояния системы (их число должно совпадать с порядком системы заданных диффе- ренциальных уравнений); О привести заданную систему дифференциальных уравнений, с помощью вве- денных переменных состояния, к нормальной форме Коши, то есть к системе дифференциальных уравнений первого порядка, разрешенных относительно производных. Будем полагать, что моменты сил являются «входами» гироскопа, а углы поворо- та гироскопа — «выходами». Тогда система «гироскоп» будет иметь два входа(п(£) и /(г)) и два выхода (а и 0). В качестве переменных состояния примем выходные переменные и их первые производные по времени: Xi = a; х2 = Р; х3 = а; х4 = р. (6.3)
240 Урок б • Исследование линейных стационарных систем Тогда уравнения гироскопа в форме Коши приобретут такой вид: Х1 = х3; ±2 = х4; х3 = -Хх4 + n(t); (6 4) х4 = Х%3 + /(£). Теперь нужно образовать матрицы А, В, С и D в соответствии с формой (6.2) представления системы в пространстве состояния. В рассматриваемом случае в ка- честве выходного вектора у примем: y = Mf> (6 5) а в качестве входного вектора — вектор моментов сил: u = [n(t), /(О]т. (6.6) Если предположить, что X = [х1,х2,х3,х4]т, (6 7) то значения указанных матриц должны быть такими: 0 0 10] ГО 0’ А 0 0 0 1 «00 0 0 0 -X 10 0 0 X 0 J 0 1 (6.8) „ П 0 0 01 ГО 01 с == 0 10 0’ 00 Введем эти матрицы в командном окне MATLAB, принимая X = 10: » Lambda =10; » А = zeros(4.4): А(1.3) = 1; А(2,4) = 1; АОЛ) = -lambda; А(4,3) = lambda; А =0 0 1-0 0 0 0 1 0 0 0-10 0 0 10 о » В = zeros(4,2); ВОД) = 1; В(4,2) = 1 В = о о о о 1 о 0 1 » С = zeros(2,2), С = [diag([l 1]) С] С = 10 0 0 0 10 0
Создание и преобразование LTI-^делей 241 Теперь можно приступить к созданию LTI-объекта по имени GYRO, используя мо- дель в пространстве состояния: » GYROss = ss(A.B.C.O) а = xl х2 хЗ х4 xl 0 0 1 О х2 0 0 0 1 хЗ 0 0 0 -10 х4 0 0 10 0 Ь = ul и2 xl 0 0 х2 0 0 хЗ 1 0 х4 0 1 с = xl х2 хЗ х4 yl 1 О О О у2 0 1 О О d = ul u2 У1 О О у2 О О Continuous-time model Как видно, модель сформирована правильно. Можно начать некоторые ее преобра- зования. Прежде всего найдем передаточные функции созданной системы. Оче- видно, их должно быть четыре (у нас два выхода и два входа). Для этого приме- ним процедуру преобразования tf: » GYROtf = tf(GYROss) Transfer function from input 1 to output... s - 8.882e-016 # 1: ------------ sA3 + 100 s 10 # 2: --------- sA3 + 100 s Transfer function from input 2 to output... -10 # 1: --------- sA3 + 100 s s - 8.882e-016 # 2: ------------ s*3 + 100 s
242 Урок б • Исследование линейных стационарных систем Теперь преобразуем введенную SS-модель в ZPK-модель, используя для этого процедуру zpk: » GYROzp = zpk(GYROss) Zero/pole/gain from Input 1 to output... # 1- ------------- s (s~2 + 100) 10 # 2: ------------- s (s*2 + 100) Zero/pole/gain from input 2 to output... -10 # 1: ------------- s (s*2 + 100) #2: s (s*2 + 100) Ввиду того, что первая SS-модель (GYROss) была создана непосредственно проце- дурой-конструктором по заданным числовым данным, а последующие модели (GYROtf и Gyrozp) — путем преобразования уже готовой модели, будем называть модель, созданную конструктором, основной, а остальные — вспомогательными. Отметим, что SS-модель в MATLAB можно создать и на основе системы диффе- ренциальных уравнений первого порядка, не разрешенных относительно произ- водных, то есть когда система описывается совокупностью уравнений вида: Е— = Ах +Ви; dt у =Cx + Du, (6-9) где Е — произвольная квадратная матрица размером nxn, ап — порядок заданной системы дифференциальных уравнений. Для этого следует использовать уже не конструктор ss, а специальную процедуру dss, отличие которой от предыдущей состоит лишь в том, что она требует указания не четырех, а пяти матриц, причем последней должна быть матрица Е В качестве примера рассмотрим уравнения того же гироскопа в виде \/2р-Я<х=1(0. (6.10) Вводя те же переменные (см (6.3), (6.5), (6.6), (6 7)), получим систему уравне- ний, соответствующую (6.9), где матрицы А и Е будут иметь вид: А = О О О О О О О О 1 О О Н О 1 -Н О 1 о о о о 1 о о Jl J1J (6 11) ; Е = о о о о о
243 Создание и преобразование ЕП-моделей ----------------------------------- Остальные матрицы — В, С и D — будут прежними (6.8). Введем новые матрицы при таких значениях параметров: Н = 10, = 2, J2 = 3. » Н = 10: Л = 2; J2 = 3; » А = zeros(4): А(1,3) = 1: А(2,4) = 1: А(3,4) = -Н: А(4,3) = Н А = 0 0 10 0 0 0 1 0 0 0-10 0 0 10 о » Е = еуе(4); Е(З.З) = Л; Е(4.4) - 2 Е = 10 0 0 0 10 0 0 0 2 0 0 0 0 3 Теперь зададим SS-модель, пользуясь процедурой dss: » Gyross = dss(A.B,C,O,E) а = xl x2 x3 x4 xl 0 0 1 0 x2 0 0 0 1 x3 0 0 0 -10 x4 0 0 10 0 = ul u2 xl 0 0 x2 0 0 x3 1 0 x4 0 1 я xl x2 x3 x4 yl 1 0 0 0 У2 0 1 0 0 * ul u2 yl 0 0 У2 0 0 = xl x2 x3 x4 xl 1 0 0 0 x2 0 1 0 0 x3 0 0 2 0 x4 0 0 0 3 Continuous-time model. Continuous-time system
244 Урок б • Исследование линейных стационарных систем J Как и ранее, создадим на этой основе вспомогательные TF- и ZPK-модели: » Gyrotf = tf(Gyross) Transfer function from input 1 to output... 0.5 s - l.lle-016 # 1; -------------- sA3 + 16.67 s 1.667 # 2: ------------- sA3 + 16.67 s Transfer function from input 2 to output.. -1.667 # 1; ------------- sA3 + 16.67 s 0.3333 s + 1.48e-016 # 2: ------------------- sA3 + 16.67 s » Gyrozp = zpk(Gyross) Zero/pole/gain from input 1 to output... 0.5 s # 1: ------------- s(sA2 + 16.67) 1.6667 # 2: ------------- s(sA2 + 16.67) Zero/pole/gain from input 2 to output... -1.6667 # 1: ------------- s(sA2 + 16.67) 0.33333 s # 2: ------------- s(sA2 + 16.67) TF-модель В предыдущих примерах за основу была принята SS-модель. Но в качестве основ- ной можно выбрать и любую из двух других моделей. Примем, к примеру, в каче- стве основной модель в передаточных функциях. Система, описываемая уравнениями (6.10), если принять те же, что и ранее, вход- ные и выходные величины, имеет четыре передаточных функции, которые обра- зуют матрицу передаточных функций размером 2x2. Каждый из столбцов этой матрицы содержит передаточные функции, соответствующие некоторой входной величине по всем выходным величинам. Определенная строка матрицы, наоборот, содержит передаточные функции какой-то одной выходной величины по всем входам системы. В целом матрица передаточных функций в рассматриваемом слу- чае может быть представлена в следующем виде: W(s) = Xl(5) W12(S)‘ _W2i(5) W22(S).'
Создание и преобразование LTI-моделей 245 В соответствии с уравнениями (6 10) значения элементов этой матрицы такие: Wit(s) = J2 J1J2S2+H2 Wl2(s) = - н s(jij2S2+H2)’ Н s(jij2S2+H2)' W22(s) = Ji JiJ2s2+H2 (6.12) W2i(s) = Чтобы ввести эти передаточные функции и создать на их основе TF-модель, нужно вначале создать два массива ячеек — массив ячеек размером 2x2 из векторов ко- эффициентов всех числителей передаточных функций и массив ячеек такого же размера из векторов коэффициентов знаменателей передаточных функций. Для рассматриваемого случая это можно сделать следующим образом. Сначала создадим вектор коэффициентов общей части знаменателей: V2„, =[Л,Л,о,я2], затем — вектор дополнительного множителя в некоторых знаменателях: V = [1, 0]. Далее создадим вектор коэффициентов второго знаменателя путем свертки двух векторов (это соответствует перемножению полиномов): Vzn2 = conv(V2nl, V). Сформируем массив den ячеек знаменателей по следующей схеме: for kl = 1:4 for k2 = 1:2 den(kl.k2) = {Vznl}; end end den(l,2) = {Vzn2}: den(2,l) = {Vzn2}. Переходя к определению массива ячеек пот числителя, можно записать его таким образом nom={J2, -Н; Н, Л}. Теперь можно сформировать TF-модель, используя установленные матрицы яче- ек числителей и знаменателей: » Vznl = [J1*J2,0.1-Г2] Vznl = 6 0 100 » V - [1, 0] V = 1 о » Vzn2 = conv(Vznl.V) Vzn2 = 6 0 100 0 » for kl = 1:2 for k2 = 1:2 den(kl.k2) » {Vznl}.
246 » Урок б * Исследование линейных стационарных систем end end » den(l,2) - {Vzn2}: den(2.1) = {Vzn2} den = [1x3 double] [1x4 double] [1x4 double] [1x3 double] » nom = {J2,-H;H.J1} nom = [ 3] [-10] [10] [ 2] » gyrotf = tf(nom.den) Transfer function from input 1 to output . 3 #1: ----------- 6 sA2 + 100 10 #2: ----------- 6 sA3 + 100 s Transfer function from input 2 to output... -10 #i: ----------- 6 sA3 + 100 s 2 #2: ----------- 6 sA2 + 100 Преобразование моделей Часто возникает необходимость перехода от одной формы представления ЛСС к другой Это можно сделать с помощью специальных функции. При преобразованиях LTI-модели нужно учитывать следующее. О Три формы представления LTI-объектов не являются эквивалентными при численных расчетах, в частности, точность вычислений с передаточными функциями высокого порядка часто недостаточна; старайтесь работать по пре- имуществу со сбалансированными моделями пространства состояния и ис- пользовать передаточные функции только для отображения на экране или для интерпретации (расшифровки) результатов. О Преобразование в формат передаточных функций может сопровождаться по- терями точности; в результате полюсы передаточной функции могут заметно отличаться от полюсов заданной ZPK-модели или модели пространства со- стояния (для проверки наберите help roots). О Преобразование в формат пространства состояния не является однозначно оп- ределенным, если мы имеем дело с одномерной системой, и не гарантирует соз- дание минимальной конфигурации, если система многомерная; так, заданная в пространстве состояния модель sys при преобразовании ss(tf(sys)) может сформировать модель с другими матрицами пространства состояния или даже
Создание и преобразование^.Т1-моделей 247 с другим числом переменных состояния во втором случае; таким образом, следу- ет по возможности избегать преобразований моделей из одной формы в другую. Проиллюстрируем это на примере. Преобразуем созданную основную TF-модель gyrotf в SS-модель gyross: » Gyross = ss(gyrotf) a = xl x2 x3 x4 xl 0 -4.167 0 0 x2 4 0 0 0 x3 0 0 0 -4.167 x4 0 0 4 0 x5 0 0 0 4 x6 0 0 0 0 x7 0 0 0 0 x8 0 0 0 0 x9 0 0 0 0 xlO 0 0 0 0 x5 x6 x7 x8 xl 0 0 0 0 x2 0 0 0 0 x3 0 0 0 0 x4 0 0 0 0 x5 0 0 0 0 x6 0 0 -4.167 0 x7 0 4 0 0 x8 0 0 4 0 x9 0 0 0 0 xlO 0 0 0 0 x9 xlO xl 0 0 x2 0 0 x3 0 0 x4 0 0 x5 0 0 x6 0 0 x7 0 0 x8 0 0 x9 0 -4.167 xlO 4 0 b = ul u2 xl 0.25 0 x2 0 0 x3 0 25 0 x4 0 0 x5 0 0 x6 0 0.25 x7 0 0 x8 0 0 x9 0 0.25 XlO 0 0
248 Урок б * Исследование линейных стационарных систем с = xl х2 хЗ yl 0 0.5 0 у2 0 0 0 х4 х5 хб yl О О О у2 0 0.4167 О х7 х8 х9 yl 0 -0.4167 О у2 О О О Х10 У1 О у2 0.3333 d = ul u2 yl о о у2 О О Continuous-time model Как видите, мы получили систему, совсем не похожую на ранее введенную SS-мо- дель (6.11), хотя обе они описывают одну и ту же ЛСС. Новая модель отличается от предыдущей не только иными значениями элементов основных матриц, но и, что необычно и непонятно, числом переменных состояния. Согласно теории число пе- ременных состояния должно соответствовать порядку выбранной системы диффе- ренциальных уравнений. Поэтому в системе (6.10), имеющей четвертый порядок, должно быть четыре переменных состояния. В последнем случае число перемен- ных состояния возросло до десяти. Резюмируя сказанное выше, отметим, что к процедурам создания LTI-моделей относятся следующие. Oss — создает модель пространства состояния по заданным матрицам А, В, С, D уравнений состояния системы; О dss — создает аналогичную модель по описанию пространства состояния более общего вида, когда уравнения переменных состояния не разрешены относи- тельно производных; О tf — создает модель по заданным передаточным функциям системы; О zpk — создает модель по заданным нулям, полюсам и коэффициентам переда- чи системы; О flit — создает модель по дискретным передаточным функциям, записанным в форме полиномов от z-1; О set — присваивает значения некоторым другим полям LTI-объекта (таким, как названия входов и выходов, название системы и т. п.). Указанные процедуры позволяют создавать как непрерывные модели, так и дис- кретные. В последнем случае к числу входных параметров процедуры следует
Создание и преобразование Ш-моделей 249 добавить в конце значение параметра Ts — шага дискретизации, а вводимые зна- чения коэффициентов уже должны задавать параметры дискретных передаточ- ных функций (для функций tf и zpk), либо матрицы конечно-разностных урав- нении пространства состояния — при использовании процедур ss и dss. Если применяется процедура f 11t, должны задаваться векторы коэффициентов числи- теля и знаменателя дискретной передаточной функции, представленной в виде отношения полиномов от z-1. Приведем несколько примеров » kzvl = tf([l 4],[1 2 100]) Transfer function: s + 4 s*2 + 2 s + 100 » kzv2 = tf([l 4],[1 2 1003,0.01) Transfer function: z + 4 zA2 + 2 z + 100 Sampling time: 0.01 » kzv3 = tf([l 4],[1 2 100].'Variable','z~-Г) Transfer function: 1 + 4 z*-l 1 + 2 zA-l + 100 z*-2 Sampling time: unspecified » kzv4 = filt([l 4].[1 2 100]) Transfer function: 1 + 4 z*-l 1 + 2 z*-l + 100 z*-2 Sampling time: unspecified Как следует из примеров, процедура fiIt полностью аналогична процедуре tf, только в конец списка входных параметров добавлена запись 'Variable'. 'z*-l'. Процедуры ss, dss, tf и zpk применяются также для преобразования моделей из одних указанных выше форм в другие. С помощью первой и второй процедур мо- дель преобразуют в пространство состояния, с помощью третьей — в передаточ- ную функцию, четвертой — в модель нули-полюсы-коэффициент передачи Модель, заданную как непрерывная система, можно перевести в дискретную фор- му, воспользовавшись процедурой c2d: » sysd = c2d(sys.Ts.method) Здесь sys — исходная непрерывная заданная модель; sysd — получаемый в резуль- тате работы процедуры дискретный аналог исходной системы; Ts — задаваемое значение шага дискретизации; method — параметр, определяющий метод дискре- тизации. Последний параметр может принимать одно из следующих значений. О ' zoh' — соответствует применению экстраполятора нулевого порядка. Внутри интервала дискретизации сигналы аппроксимируются постоянной величи ной, равной значению сигнала в начале интервала дискретизации
250 Урок б • Исследование линейных стационарных систем О ' foh1 — соответствует применению экстраполятора первого порядка. Внутри интервала дискретизации сигналы аппроксимируются отрезками прямых, про- ходящих через концы кривой сигнала в интервале дискретизации. О ' tustln' — билинейная аппроксимация Тастина внутри интервала дискрети- зации. О 'prevarp' — та же аппроксимация Тастина, для которой задана частота преды- скривления. О ' matched' — метод согласования нуля и полюса Ниже приведены примеры преобразования различными методами введенного ра- нее непрерывного колебательного звена kzvl в дискретные звенья: » KZVdl = c2d(kzvl,0.01) Transfer function: 0.01008 z - 0.009687 zA2 - 1.97 z + 0 9802 Sampling time: 0.01 » KZVd2 = c2d(kzvl.0.01.’zoh) Transfer function: 0.01008 z - 0.009687 zA2 - 1.97 z + 0.9802 Sampling time: 0.01 » KZVd3 - c2d(kzvl.0.01,'foh') Transfer function: 0.005029 zA2 + 0.0002308 z - 0.004864 zA2 - 1.97 z + 0.9802 Sampling time: 0.01 » KZVd4 = c2d(kzvl.0.01.’tustin’) Transfer function: 0.005037 zA2 + 0.0001975 z - 0.00484 zA2 - 1.97 z + 0.9802 Sampling time: 0.01 » KZVd5 c2d(kzvl,0.01,'prewarp'.50) Transfer function: 0.005145 zA2 + 0.000206 z - 0.004939 zA2 - 1.97 z + 0.9798 Sampling time: 0 01 » KZVd6 - c2d(kzvl.0.01,'matched’) Transfer function: 0.01009 z - 0.009696 zA2 - 1 97 z + 0 9802 Sampling time: 0.01
Создание и преобразование LTI-моделей 251 Процедура d2c осуществляет обратную операцию — переводит систему из дис- кретной формы в непрерывную, например: » kl = d2c(KZVdl) Transfer function: s + 4 sA2 + 2 s + 100 » k2 = d2c(KZVd4.’tustin’) Transfer function: s + 4 SA2 + 2 s + 100 Как можно убедиться, указанные операции являются взаимно обратными. Процедура d2d позволяет переопределить дискретную систему, меняя шаг дис- кретизации: sysl = d2d(sys.Ts) либо вводя групповые задержки Nd (количество шагов дискретизации, целое число) sysl = d2d(sys.[].Nd) Приведем примеры. Вначале изменим шаг дискретизации (параметр Ts устано- вим равным 0,1) для системы KZVdl: » kdl =»d2d(KZVdl.0.1) Transfer function: 0.09352 z - 0.06018 zA2 - 0.9854 z + 0.8187 Sampling time: 0.1 Затем введем задержку по входу, установив параметр Ts равным 3 » kd2 = d2d(kdl.[],3) Transfer function: 0.09352 z - 0.06018 zA5 - 0.9854 zA4 + 0.8187 zA3 Sampling time: 0.1 Для создания модели нужно предварительно либо привести уравнения системы к форме уравнений пространства состояний, либо найти передаточные функции системы. В общем случае это довольно сложная и трудоемкая задача. В то же вре- мя реальные системы автоматического управления (САУ) состоят из соединенных между собой отдельных блоков (динамических звеньев), уравнения поведения которых обычно достаточно просты. Поэтому в практике проектирования САУ принято использовать структурные методы, когда САУ задается как определен- ная схема соединения отдельных элементарных динамических звеньев и факти- чески одно или несколько из этих звеньев проектируются таким образом, чтобы обеспечить заданное качество системы. Тем самым с помощью MATLAB обеспе- чивается возможность «набирать» программно «схему» САУ путем предваритель- ного ввода моделей звеньев, составляющих САУ, и последующего «соединения»
252 Урок 6 * Исследование линейных стационарных систем этих звеньев в цельную структуру. Ниже приводятся процедуры, рассчитываю- щие характеристики соединений отдельных звеньев. О plus (minus) — осуществляет параллельное соединение указанных в обраще- нии звеньев, то есть определяет характеристики модели системы, состоящей из параллельно соединенных звеньев; вызов этих процедур может быть осу- ществлен не только обычным способом — путем указания имени процедуры и перечисления (в скобках после имени) идентификаторов соединяемых звеньев, но и просто путем объединения идентификаторов звеньев с символа- ми «+» (при суммировании выходных сигналов звеньев) или «-» (при вычи- тании выходных сигналов). О parallel — осуществляет ту же процедуру параллельного соединения звеньев, но может использоваться и для многомерных систем для выполнения парал- лельного соединения лишь по некоторым входам и выходам. О mtlmes (или символ «*» между именами звеньев) — последовательно соединяет звенья, имена которых указаны; применяется для одномерных систем. О series — осуществляет последовательное частичное соединение многомерных систем О feedback — соединяет два звена, когда второе указанное звено составляет цепь отрицательной обратной связи для первого звена. О append — выполняет формальное объединение не связанных между собой сис- тем (добавляет входы и выходы второй системы к выходам и входам первой). О connect — соединяет входы и выходы многомерной системы, созданной проце- дурой append путем формального объединения; схема соединений задается матрицей Q соединений, которая указывается как один из входных параметров процедуры. О Inv — рассчитывает САУ, обратную указанной, то есть такую, у которой входы стали выходами, а выходы — входами. О vertcat — производит вертикальную конкатенацию (сцепление) систем (звень- ев), то есть такое объединение, когда их входы становятся общими, а выходы остаются независимыми; для выполнения подобного объединения необходимо, чтобы число входов объединяемых систем было одинаковым — тогда число входов результирующей системы останется таким же, как и каждой из объеди- няемых систем, а число выходов будет равно сумме выходов последних. О horzcat — осуществляет горизонтальную конкатенацию систем, при котором выходы становятся общими, а входы добавляются Проиллюстрируем применение некоторых из этих процедур. Создадим модель уг- лового движения торпеды вокруг вертикали, имеющую вид двух последовательно соединенных звеньев Первое звено (апериодическое) характеризует влияние мо- мента внешних сил относительно вертикали на угловую скорость торпеды: » Torsk - tf(25,[100 50]) Transfer function: 25 100 s + 50
Создание и преобразование LTI-моделей 253 Второе звено (интегрирующее) описывает переход от угловой скорости к углу поворота торпеды вокруг вертикали: » SkUg = tf(l,[l 0]) Transfer function: 1 s Последовательное соединение этих звеньев можно осуществить двумя способа- ми — посредством процедуры series: » Tori = series(Torsk.SkUg) Transfer function: 25 100 s*2 + 50 s либо с помощью операции «умножения» моделей: » Tor = Torsk*Skllg Transfer function: 25 100 s*2 + 50 s Теперь сформируем цепь управления, входом которой является угол рыскания торпеды, а выходом — накладываемый на торпеду момент, обусловленный поворо- том рулей направления. Будем предполагать, что цепь управления состоит из двух параллельно соединенных частей. Одна из них, чувствительным элементом кото- рой является гироскоп направления, представляет собой обычное усилительное (статическое) звено: » GN = tf(2,l) Transfer function: 2 Вторую часть, управляемую гиротахометром, можно представить как дифферен- циально-колебательное звено. » GT = tf([100 03.[1 10 100]) Transfer function: 100 s sA2 + 10 s + 100 Параллельное соединение этих двух контуров управления можно осуществить тоже двумя путями — используя процедуру parallel: » Izml = parallel(GN,GT) Transfer function: 2 s*2 + 120 s + 200 s*2 + 10 s + 100 либо применяя операцию «сложения» моделей: » Izm = GN + GT Transfer function: 2 sA2 + 120 s + 200 s*2 + 10 s + 100
254 Урок б * Исследование линейных стационарных систем Теперь сформируем модель всей системы автоматического управления угловым движением торпеды, рассматривая цепь управления как цепь отрицательной об- ратной связи для торпеды и пользуясь для объединения прямой и обратной цепи процедурой feedback: » sys = feedback(Tor.Izm) Transfer function: 25 s~2 + 250 s + 2500 100 s~4 + 1050 s*3 + 10550 s*2 + 8000 s + 5000 Следует отметить, что проще и удобнее всего создавать (точнее, складывать из отдельных блоков) сложные системы с помощью интерактивной системы Simu- link, которая рассматривается в уроке 7. После того как система будет сформирована, с помощью процедуры set можно ввести некоторые символьные описания системы. В частности, присвоить на- звания входам и выходам, привести краткий комментарий к самой системе, на- пример: » set(sys,'InputName','Момент сил'.’OutputName',‘Угол рыскания') » set(sys,'Notes','Угловое движение торпеды') » get(sys) num = {[0 0 25 250 2.5е+003]} den = {[100 1.05е+003 1.06е+004 8е+003 5е+003]} Variable = 's’ Ts ° 0 InputName - {’Момент сил'} OutputName = {'Угол рыскания'} Notes « {'Угловое движение торпеды'} UserData = [] В заключение приведем примеры использования процедур конкатенации: » sysvspl = horzcat(Torsk.SkUg) Transfer function from input 1 to output. 25 100 s + 50 Transfer function from input 2 to output: 1 s » sysvsp2 vertcat(Torsk.SkUg) Transfer function from input to output... 25 #1: ------------ 100 s + 50 1 #2: - s
Получениеинформации о модели 255 Получение информации о модели Чтобы получить отдельные характеристики (матрицы и векторы, описывающие пространство состояния, коэффициенты числителя и знаменателя передаточной функции и т. п.) созданной модели, можно использовать одну из следующих про- цедур: tfdata — для получения векторов числителя и знаменателя передаточной функции системы, ssdata — значений матриц уравнений пространства состояния, zpkdata — векторов значений полюсов и нулей системы. Например: » [nom,den] = tfdata(sys, V) пот = 0 0 25 250 2500 den = 100 1050 10550 8000 5000 » sssys = ss(sys); » [A.B.G.D] = ssdata(sssys) A = -10.5 -6.5938 -0.625 -0.048828 16 0 0 0 0 8 0 0 0 0 8 0 В = 0.25 0 0 0 С = 0 0.0625 0.078125 0.097656 D = 0 » [z.p.k] = zpkdata(sys,'v‘) z “ -5 + 8.66031 -5 - 8.66031 P = - 4.8653 + 8.59241 - 4 8653 - 8 59241 - 0.38466 + 0.604031 - 0.38466 - 0.604031 k - 0.25 Процедура get дает возможность получить полную характеристику модели, вклю- чая имена входов и выходов, примечания, значения шага дискретизации и т. п. Например: » get(sys) num: {[0 0 25 250 2 5е+003]} den: {[100 1.05е+003 1.06е+004 8е+003 5е+003]} Variable: 's' Ts: 0 ioDelay: 0 InputDelay: 0
256 Урок б * Исследование линейных стационарных систем OutputDelay: О InputName: {'Момент сил'} OutputName: {'Угол рыскания'} InputGroup: {0x2 cell} OutputGroup: {0x2 cell} Notes: {'Угловое движение торпеды'} UserData: [] Continuous-time system » get(sssys) а [4x4 double] b [4x1 double] с [0 0.0625 0.0781 0.0977] d 0 е [] StateName {4x1 cell} Ts 0 i oDelay 0 InputDelay 0 OutputDelay 0 InputName {'Момент сил'} OutputName {'Угол рыскания'} InputGroup {0x2 cell} OutputGroup {0x2 cell} Notes {'Угловое движение торпеды'} UserData [] О числе входов и выходов системы можно узнать, обратившись к процедуре si ze: » size(sys) Transfer function with 1 input(s) and 1 output(s) » size(ssys) State-space model with 1 input(s), 1 output(s). and 4 state(s) Анализ системы Пакет Control предоставляет широкий набор процедур, осуществляющих анализ САУ с различных точек зрения и, прежде всего, определение откликов системы на внешние воздействия как во временной, так и в частотной областях. Для нахождения временных откликов системы на некоторые внешние воздейст- вия предусмотрены такие функции: О impulse — определение отклика системы на единичное импульсное входное воздействие; О step — определение реакции системы на единичный скачок входного воздей- ствия, О initial — определение собственного движения системы при произвольных на- чальных условиях; О 1 sim — определение реакции системы на входное воздействие произвольной формы, задаваемое в виде вектора его значений во времени.
Анализ системы 257 Рассмотрим использование этих процедур па примере движения торпеды, пара- метры которой как САУ приведены ранее. Применяя процедуру step, обратив- шись к ней таким образом: Step(sys) .grid, можно получить график, представтен- ный на рис. 6.1. Использование процедуры impulse при обращении к ней вида Impulse(sys).grid приведет к появлению в графическом окне графика, изображенного рис. 6.2. Рис. 6.2. Отклик системы sys на единичное импульсное воздействие
258 Урок 6 • Исследование линейных стационарных систем Чтобы применить процедуру initial, необходимо в число входных параметров включить, во-первых, полный вектор всех начальных условий по переменным со- стояния, а во-вторых — момент времени окончания процесса интегрирования. Например: initial(sssys.СО 0 0 1].20).grid В результате получим в графическом окне изображение, показанное на рис. 6.3. Рис. 6.3. Переходный процесс в системе sssys при заданных начальных условиях Для применения процедуры 1 sim необходимо предварительно задать вектор t зна- чений времени, в которых будут заданы значения входного воздействия, а затем соответствующий вектор и значений входной величины в указанные моменты вре- мени: t = 0:0 01:40; u » sin(t); lsim(sssys.и.t):grld Результат изображен на рис. 6.4. Одна кривая на графике представляет входное воздействие, а другая — реакцию на него системы Приведенная ниже группа процедур отображает в частотной области реакцию системы на внешние гармонические воздействия. К таким процедурам относятся следующие: О bode — строит графики АЧХ и ФЧХ (диаграмму Боде) указанной системы; О nyquist — строит в комплексной плоскости график АФХ (амплитудно-фазо- вая характеристика) системы в полярных координатах; О nichols — строит карту Николса системы, то есть график АФХ разомкнутой системы в декартовых координатах;
Анализ системы 259 О sigma — строит графики зависимости от частоты сингулярных значений систе- мы (обычно совпадает с АЧХ системы); О margi п — строит диаграмму Боде и указывает запасы по амплитуде и по фазе. Рис. 6.4. Реакция системы sssys на заданное воздействие Приведем примеры. Результат использования процедуры bode при обращении к ней вида Bode(sys) .grid представлен на рис. 6.5. Рис. 6.5. Диаграммы Боде (АЧХ и ФЧХ) системы sys
260 Урок б • Исследование линейных стационарных систем Обращение вида Nyquist(sys);grid к процедуре nyquist приведет к появлению диа- граммы, показанной на рис. 6.6. Рис. 6.6. Диаграмма Найквиста системы sys Изображение, представленное на рис. 6.7, — это результат использования проце- дуры nichols при обращении к пей вида Nichols(sys) ;grid. Ntchojs Chart firom: Момент сия Та, Угол pbiptitin.R Оре.М.оор Phase deg Рис. 6.7. Карта Николса разомкнутой системы sys
Анализ системы 261 Частотная зависимость, представленная на рис. 6.8, — это результат использова- ния процедуры sigma при обращении к ней вида Sigma(sys) .grid. Рис. 6.8. Частотная зависимость сингулярных чисел системы SYS На рис. 6.9 приведен результат использования процедуры margin при обращении к ней вида margin(sssys) :grid. Рис. 6.9. АЧХ и ФЧХ системы SYS с указанием запасов по амплитуде и по фазе Теперь рассмотрим процедуры, вычисляющие отдельные характеристики и пока- зывающие расположение полюсов и пулей системы. К ним можно отнести проце- дуры, выполняющие следующие операции: О pole — расчет полюсов системы;
262 Урок б • Исследование линейных стационарных систем О zpkdata — расчет полюсов, нулей и коэффициента передачи системы; О gram — вычисление граммианов системы: матрицы управляемости (при этом в качестве последнего входного параметра процедуры следует указать пара- метр 'с') и матрицы наблюдаемости (с указанием параметра ‘о’); О damp — вычисление собственных значений (Eigenvalue) матрицы состояния системы и, на их основе, значений собственных частот (Frequency) незатухаю- щих колебаний системы и относительных коэффициентов демпфирования (Damping); О pzmap — построение на комплексной плоскости карты расположения нулей и полюсов системы; О rl ocus — расчет и вывод в виде графиков траектории движения корней поли- нома на комплексной плоскости Н (s) = D (s) + k N (s) = 0, где D ($) — знамена- тель передаточной функции, N (s) — числитель этой функции; положительное вещественное число k изменяется от 0 до бесконечности. Далее приводятся примеры применения процедур и результаты (рис. 6.10,6.11): » pole(sys) ans = -4.8653 + 8.59241 -4.8653 - 8.59241 -0.3847 + 0.60401 -0.3847 - 0.60401 » sysz = zpk(sys) Zero/pole/gain from Input "Момент сил” to output "Угол рыскания": 0.25 (s*2 + 10s + 100) (s*2 + 0.7693s + 0 5128) (sA2 + 9.731s + 97.5) » [z.p.k] = zpkdata(sysz.'v') z = -5.0000 + 8.66031 -5.0000 - 8.66031 P = -4.8653 + 8.59241 -4.8653 - 8.59241 -0.3847 + 0.60401 -0.3847 - 0.60401 k = 0.2500 » Wc = gram(sssys.'c') Wc = 0.0032245 1.3753e-016 -0.0041717 -1.5179e-015 1.3753e-016 -0.0041717 0.0083434 -1.4832e-016 -1.4832e-016 0.070084 -0.070084 -7 7542e-016 -1.5179e-015 -0.070084 -7.7542e-016 8.7807 » Wo - gram(sssys,’o’) Wo - 1.3335 0.8751 1.0938 0.0977 0.8751 0 5770 0.7210 0.0682 1.0938 0.7210 0.9011 0 0851 0.0977 0 0682 0.0851 0.0134
Анализ системы 263 » pzmap(sys),grid Рис. 6.10. Изображение нулей и полюсов системы sys » damp(sys) Eigenvalue -3.85e-001 -3.85e-001 -4.87e+000 -4.87e+000 + 6.04e-001i - 6.04e-001i + 8.59e+000i - 8.59e+000i Damping 5.37e-001 5.37e-001 4.93e-001 4.93e-001 Freq, (rad/s) 7.16e-001 7.16e-001 9.87e+000 9.87e+000 » rlocus(sys).grid Рис. 6.11. Траектории полюсов системы sys при изменении коэффициента передачи
264 Урок 6 • Исследование линейных стационарных систем Интерактивный обозреватель LTI Viewer После ввода в командном окне MATLAB команды Itiview на экране появляется окно LTI Viewer (Обозреватель LTI-объектов) В этом окне можно «строить» в ин- терактивном режиме практически все вышеприведенные графики, причем одно- временно для нескольких систем. Окно LTI Viewer Большую часть окна LTI Viewer (Обозреватель LTI-объектов), представленного на рис 6 12, занимает область, в которой строятся разнообразные графики. При нер- вом обращении к обозревателю эта область пуста. LTI Vwyjer Рис. 6.12. Окно LTI Viewer Работу с обозревателем следует начинать с загрузки в его среду тех LTI-объсктов, которые нужно анализировать. Для этого необходимо воспользоваться командой File ► Import (Файл ► Импорт). В результате на экране появится диалоговое окно Import System Data (Импорт данных системы), показанное на рис 6 13. Загрузить LTI-объекты можно из рабочею пространства (переключатель Workspa- ce) или из МАТ-файла (переключатель MAT-file). В списке Systems in Workspace (Системы в рабочем пространстве) выделите (по очереди) LTI-объекты Тог и sssys, представляющие соответственно неуправляемое и управляемое движение торпе- ды по углу рыскания, и щелкните на кнопке ОК. Диалоговое окно Import System Data (Импорт данных системы) закроется, а в окне LTI Viewer (Обозреватель
Интерактивный обозреватель LTI Viewer 265 LTI-объектов) появятся две кривые, отражающие движение торпеды под дейст- вием единичного момента сил (рис. 6.14) Рис. 6.13. Диалоговое окно Import System Data Рис. 6.14. Окно LTI Viewer с графиками систем Тог и sssys Меню File (Файл) (см. рис. 6.12) содержит команды, позволяющие выполнить та- кие действия: О New Viewer — открыть новый обозреватель; О Export — вывести объекты из обозревателя (в рабочее пространство); О Toolbox Preferences — установить (изменить) настройки вывода графиков;
266 Урок 6 • Исследование линейных стационарных систем О Page Setup — установить настройки расположения графиков на листе бумаги; О Print — вывести графики на принтер; О Print to Figure — вывести графики в окно фигуры; О Close — закрыть обозреватель. Меню Edit (Правка) (см. рис. 6.14) окна LTI Viewer содержит команды, позволяю- щие выполнить следующие действия: О Plot Configurations — задать вид графиков, выводимых в графическое окно LTI Viewer, и их количество; О Refresh Systems — обновить LTI-объекты; О Delete Systems — удалить LTI-объекты; О Line Styles — задать стили линий на графиках; О Viewer Preferences — задать параметры графиков Загрузив LTI-объекты, необходимо определить количество и вид графиков, выво- димых в окно LTI Viewer (Обозреватель LTI-объектов) Для этого нужно вызвать ко- манду Edit ► Plot Configurations (Правка ► Конфигурации графиков). На экране поя- вится диалоговое окно Plot Configurations (Конфигурации графиков) (рис. 6.15). Рис. 6.15. Диалоговое окно Plot Configurations В области Select of response plot configuration (Выбор конфигурации графиков от- клика системы) этого диалогового окна, установив соответствующий переключа- тель, можно задать вывод в окно LTI Viewer (Обозреватель LTI-объектов) от одного до шести графиков. При этом каждый из них размещается в отдельном графиче- ском поле (подокне). По умолчанию установлен вывод одного графика — реак- ции системы на единичный скачок. Тип выводимого в конкретном подокне графика устанавливается в области Res- ponse type (Тип отклика). Она содержит шесть раскрывающихся списков, кото- рые пронумерованы цифрами от 1 до 6 (по количеству графиков). Тип графика задается путем выбора в списке соответствующего значения (см. рис. 6.15). Воз- можны девять вариантов графиков: О Step — отклик системы на единичное ступенчатое воздействие; О Impulse — отклик на единичное импульсное воздействие;
Интерактивный обозреватель LTI Viewer 267 О Bode — АЧХ и ФЧХ системы; О Bode Magnitude — АЧХ системы; О Nyquist — диаграмма Найквиста; О Nichols — карта Николса; О Singular Value — зависимость сингулярных значений системы от частоты; О Pole/Zero — расположение нулей и полюсов системы; О I/O Pole/Zero — такой же, как и предыдущий. Задайте вывод в окно LTI Viewer (Обозреватель LTI-объектов) четырех графиков следующих типов: первый — Bode Magnitude, второй — Impulse, третий - Pole/Zero и четвертый — Step. Щелкнув в диалоговом окне Plot Configurations (Конфигура- ции графиков) на кнопке ОК, вы получите в окне LTI Viewer (Обозреватель LTI- объектов) изображение, представленное на рис. 6.16. Real Axis Time (sec) Рис. 6.16. Графики систем Тог и sssys, выведенные в окно LTI Viewer Настройка параметров LTI Viewer Другие параметры работы обозревателя LTI объектов устанавливаются с помо- щью команды Edit ► Viewer Preferences (Правка ► Настройки обозревателя). После ее вызова на экране появится диалоговое окно LTI Viewer Preferences (Настройки обозревателя LTI-объектов) с четырьмя вкладками (рис. 6.17). Вкладка Units (Единицы измерения) используется для установки единиц изме- рения, в которых будут откладываться величины по осям графиков Как видно на рис. 6.17, по умолчанию принимаются следующие единицы измерения: для
268 Урок б • Исследование линейных стационарных систем частоты — радианы в секунду (используется логарифмическая шкала); для ам- плитуды — децибелы; для фазы — градусы. С помощью списков можно изменить единицы измерения частоты на герцы, амплитуды — на абсолютные единицы, фазы — на радианы, а шкалу по частоте сделать равномерной. Рис. 6.17. Вкладка Units диалогового окна LTI Viewer Preferences С помощью вкладки Style (Стиль), показанной на рис. 6 18, можно установить сетку координатных линий па графиках, размер (кегль) и начертание (жирное, курсивное) символов, используемых для представления заголовка, надписей и де- лений на осях координат, названий входа и выхода системы, а также цвет фона. Рис. 6.18. Вкладка Style диалогового окна LTI Viewer Preferences Установите разметку графиков, увеличьте размеры символов в заголовках гра- фиков до кегля 12, а надписей по осям координат до кегля 10. Кроме того, сделай- те жирный шрифт в заголовках курсивным (см. рис. 6 18)
Интерактивный обозреватель LTI Viewer 269 Если вы щелкнете на кнопке ОК, то получите изображение, представленное на рис. 6.19. Рис. 6.19. Графики систем Тог и sssys с измененными параметрами графики Рассмотрим вкладку Characteristics (Характеристики) диалогового окна LTI Viewer Preferences (Настройки обозреватетя LTI-объектов), показанную на рис. 6 20 Рис. 6.20. Вкладка Characteristics диалогового окна LTI Viewer Preferences Время установления переходного процесса определяется по уровню 2 %, а время возрастания — по промежутку времени от момента, когда значение процесса рав- но 10 %, до момента, когда оно достигает 90 % установившегося значения.
270 Урок 6 • Исследование линейных стационарных систем Первые три характеристики (численные) могут быть изменены пользователем по своему усмотрению Если флажок Unwrap phase (Разворачивать фазу) сброшен, то фаза может на графиках претерпевать разрывы на ±2л радиан при переходе через ±л, что не соответствует особенностям реальной непрерывной системы. Когда этот флажок установлен, разрывы фазы будут устранены. Вкладка Parameters (Параметры) диалогового окна LTI Viewer Preferences (Настрой- ки обозревателя LTI объектов) представлена на рис. 6 21. Используя ее, можно задать диапазоны изменения времени и частоты по своему усмотрению. Рис. 6.21. Вкладка Parameters диалогового окна LTI Viewer Preferences Цвет и тип линий, которыми будут представлены графики в окне LTI Viewer (Обо- зреватель LTI-объектов), задается с помощью команды Edit ► Line Styles (Правка ► Стиль линии). После ее вызова появляется диалоговое окно Line Styles (Стили ли- ний), показанное на рис. 6.22. Установка стилей линий производится таким образом. Сначала в области Distin- guish by (Отмечать) выбирают параметр линии (цвет, маркер или стиль), который будет использоваться для того, чтобы обеспечить визуальное различие графиков. После этого в соответствующем списке в нижней части окна выделяют значение данного свойства для первой LTI-системы и, щелкнув на кнопке со стрелкой, пе- ремещают его в верхнюю позицию. Точно так же устанавливают в следующую позицию значение этого свойства, принимаемое для второй системы и т. д. Так, на рис. 6.22 показано, что для линии двух систем задан синий цвет и разный стиль. Линии первой LTI-системы (sssys) будут сплошными, а второй (Тог) - штриховыми. Результат такой установки отражен на рис. 6.23. Для вывода содержимого графического окна LTI Viewer (Обозреватель LTI-объек- тов) на печать можно использовать команду File ► Print to Figure (Файл ► Печать в окно фигуры), с помощью которой график предварительно выводится в графи- ческое окно фигуры. Затем содержимое фигуры по обычным правилам может быть либо перенесено в окно документа текстового редактора, либо выведено на
Интерактивный обозреватель LTI Viewer 271 принтер. Именно таким способом были получены графики, которые показаны на рис. 6.19 и 6.23. Рис. 6.22. Диалоговое окно Line Styles Рис. 6.23. Графики систем Тог и sssys с измененными параметрами линий
272 Урок б • Исследование линейных стационарных систем Синтез системы Под синтезом САУ обычно понимают процесс разработки (проектирования, рас- чета параметров) одного из ее звеньев, которое обеспечивает заданное качество системы. Пакет Control содержит несколько процедур, осуществляющих проек- тирование звеньев, использование которых в контуре системы управления делает САУ оптимальной в некотором, вполне определенном смысле. Например, процедура Iqr осуществляет проектирование линей по-квадратичного оптимального регулятора для систем непрерывного времени При обращении к ней вида [K.S,E]=lqr(A.B.Q,R,N) она рассчитывает такое оптимальное статическое матричное звено К, при использовании которого в цепи отрицательной обратной связи в пространстве состояния и=-Кх (6 13) минимизируется функционал J=j(x Qx + u*Ru + 2x Nu)j£, о (6.14) если объект регулирования описывается уравнениями состояния — = Ах + Ви. dt (6.15) Если последняя матрица N при обращении к процедуре не указана, то она по умол- чанию принимается нулевой. Одновременно вычисляется решение S алгебраиче- ских уравнений Риккати SA +A S-(SB + N)R-1 (В' S + NT) + Q = 0 (6.16) и находятся собственные значения Е замкнутой системы Е = cig (А-ВК). (6.17) Применяя эту процедуру к ранее введенной САУ движением торпеды, получим. » [A.B.C.D] = ssdata(sssys) t » Q = еуе(4) » R = 1 » [K.S.E] = Iqr(A.B.Q.R) К = 0.4417 0.2773 0.5719 0.2926 S “ 0.8834 0.5546 1.1438 0.5852 0.5546 0.4497 0.7989 0.4353 1.1438 0.7989 1.9896 1.0933 0.5852 0.4353 1.0933 1.7924 E “ -4 8886 + 8.60161 -4.8886 - 8.60161 -0.4718 + 0.61951 -0.4718 - 0.61951
Синтез системы 273 Процедура 1 qry также применяется для систем «непрерывного времени», однако она имеет два отличия. Во-первых, проектируемая обратная связь по состоянию рассчитывается как дополнительная по отношению к существующим связям (а не как заменяющая все уже существующие) и охватывающая только регулируемый объект. Во вторых, минимизируется функционал не по вектору состояния, а по выходной величине (величинам) системы ос J = f(y Qy + U Ru + 2у' Nu) dt. (6.18) О В этом случае входным параметром процедуры явтястся сама ss-модель системы в форме с/х — = Ах 4-Bu, y=Cx+Du, (6.19) а вызываться процедура должна таким образом: [K,S.E]=lqry(sys,Q.R.N), где sys — имя LTI-модели оптимизируемой САУ. Та же процедура может быть применена для дискретной системы (модели), уравнения состояния которой заданы в виде конечно-разностных уравнений x[n + 1] = Ах[и] + Bu[w], y[nj = Cx[n] + Du[n] (6 20) при этом минимизируется функционал J = Ё<У["]ТОуН+ «[«Р Ru[n] + 2y[n]TNu) . (6.21) Н=1 Применив процедуру к рассматриваемой системе, получим следующее » Q = 1: R = 1: » [K.S.E] = LQRY(sssys Q.R) К ~ 0.30016 0.19769 0.24705 0.023054 S - 1.2007 0.79074 0.98822 0.092214 0.79074 0.52333 0.65394 0.064612 0.98822 0.65394 0.81717 0.080638 0.092214 0.064612 0.08 638 0 012994 Е • -4.8653 + 8.59241 -4 8653 - 8.59241 -0.42218 + 0.628571 -0.42218 - 0.628571 Процедура Iqrd позволяет спроектировать дискретный оптимальный линейно- квадратичный регулятор, минимизирующий непрерывный функционал (6.14). Обращение к процедуре [K.S.E]=lqrd(A.B.Q,R.N.Ts), где Ts — заданный период дискретизации, приводит к расчету матрицы К статического звена (6.13) обрат- ной связи но вектору состояния системы При этом модель системы должна быть задана в конечно-разностной форме (6 20) Проектирование оптимального линейного дискретного регулятора для дискретной системы с использованием дискретного функционала (6 21) можно осуществить, используя процедуру dlqr, например, таким образом: [K,S,E]=dlqr(A.B.Q,R.N.Ts).
274 Урок 6 • Исследование линейных стационарных систем Уравнения состояния системы должны быть предварительно приведены к конеч- но-разностной форме (6.20). Матрица S в этом случае представляет собой реше- ние уравнения Риккати в виде ATSA - S-(ATSB + N) (R + BTSB) (BT SA + NT) + Q = 0 (6.22) Процедура kalman осуществляет расчет (проектирование) фильтра Калмана для непрерывных или дискретных систем автоматического управления. Обращение к процедуре имеет такой вид: [KEST.L.P]=kalman(SYS.Qn,Rn,Nn), где SYS — имя модели системы. Для непрерывной системы dx — = Ах + Bu + Gw (уравнение состояния) (6.23) dt у = Сх + Du + Hw + v (уравнение измерения) (6.24) с известными входами и, шумовым процессом w, шумом измерения v и шумами ковариаций E{wwT} = Q„, E{wT} = R„, E{wvT} = N„ (6.25) фильтр KEST имеет вход [и; у] и генерирует оптимальные оценки уе и хе соответ- ственно величин у и х путем решения уравнений: z/y —- = Ахе +Bu + L(y-Cxe -Du); (6.26) dt ye=Cxe+Du. (6.27) При этом LTI-модель системы SYS должна содержать данные в виде (A,[BG],C, [DH]). Фильтр Калмана KEST является непрерывным если SYS представлена как непрерывная система, и дискретным — в противном случае. Процедура вычисля- ет также матрицу L коэффициентов усиления фильтра и матрицу Р ковариаций ошибок оценивания состояния. Для непрерывной системы и при Н = 0 матрица Р рассчитывается как решение уравнения Риккати АР + РАТ -(РСТ +GN) R’1 (СР +NTGT) + GQGT =0. (6.28) Если система SYS задана конечно-разностными уравнениями х[п + 1] = Ax[n] + Bu[n] + Gwjn] (уравнение состояния) (6.29) у [и] - Сх[п] + Du[n] + Hw[n] + v[n] (уравнение измерения), (6.30) то обращение вида [KEST.L.P.M,Z]=kalnian(SYS.Qn.Rn,Nn) позволяет спроектировать дискретный фильтр Калмана для заданной дискретной системы по заданным мат- рицам ковариаций E{wwT} = Q,,, E{wT} = R„, E{wv } = N„. Фильтр Калмана в соответствии с разностными уравнениями х[л + 1|п] = Ах[л|и - 1] + Ви[и] + L(y[n] - Cx[n|n - 1] - Du[n]), y[n|n] = Cx[n|n] + Du[n], (6.31) х[л|л] = x[n|n - 1] + M(y[n] - Cx[n|n - 1] - Du[n])
Синтез системы 275 генерирует оптимальные оценки у[л|п] выхода и х[ии] — переменных состояния, используя значения u[n] входа системы и у[п] — измеренного выхода. Помимо фильтра KEST программа выдает матрицы L оптимальных коэффициен- тов усиления фильтра и М — обновителя, а также матрицы ковариаций ошибок оценки вектора состояния Р = Е{(х - х[н|н - 1]) (х - х[к|и - 1])г} (решение уравнении Риккати) Z = Е{(х - х[п|п]) (х - х[п|н])т} (апостериорная оценка) При обращении к процедуре kalmd вида [KEST,L,P,M,Z]=kalmd(SYS.Qn,Rn.Ts) создает- ся дискретный фильтр (оцениватель) Калмана KEST для непрерывной системы, описываемой уравнениями (6.11) и (6.12) при Н = 0 и таких параметрах шумов E{w} = = E{v} = 0, E{ww } = Qn, E{vvr) = R,„ E{wvT} = 0. Кроме параметров оцени- вателя процедура вычисляет и выдает ранее описанные матрицы L, М, Р и Z. Задача построения (формирования) оптимального регулятора решается в MATLAB с помощью процедуры Iqgreg. Если обратиться к этой процедуре следующим об- разом: RLQG=lqgreg(KEST. К), то она создает в матрице RLQG регулятор, соединяя пред- варительно спроектированный фильтр Калмана KEST со статическим звеном оп- тимальной обратной связи по вектору состояния, спроектированным процедурой (D)LQR или LQRY. Регулятор RLQG, входом которого является выход у системы, гене- рирует сигнал и = -Кхе, причем хе является оценкой Калмана вектора состояния, основанной на измерениях у. Этот регулятор должен быть подсоединен к исход- ной системе как положительная обратная связь. Вышеописанные процедуры используют некоторые «вспомогательные» процеду- ры, которые, однако, имеют также самостоятельное значение и могут использо- ваться при синтезе САУ. К таким процедурам можно отнести следующие: О estim — формирует оцениватель но заданной матрице коэффициентов переда- чи оценивателя по выходам и вектору состояния; О саге — находит решение непрерывных алгебраических уравнений Риккати; О dare — находит решение дискретных алгебраических уравнении Риккати; О 1уар — наводит решение непрерывных уравнений Ляпунова; О dlyap — находит решение дискретных уравнений Ляпунова. При обращении к процедуре estim вида EST=est1m(SYS.L) формируется оценива- тель EST по заданной матрице L для выходов и вектора состояния системы, задан- ной SS-моделью ее SYS, если все входы системы SYS являются стохастическими, а все выходы — измеряемыми. Для непрерывной системы вида (6.19), где и — сто- хастические величины, создаваемый оцениватель генерирует оценки уе и хе соот- ветственно выходов и вектора состояния: б/х = (Ае - LC)xe + Ly; уе=Схе at Подобным образом процедура применяется и для дискретных систем.
276 Урок б • Исследование линейных стационарных систем При обращении к процедуре саге вида [X. L, G, RR]=care(А, В. Q, R, S. Е) она выдает ре- шение X алгебраического уравнения Риккати: АТХЕ + ЕТХА - (ЕТХВ + S) R 1 (ВТХЕ + ST) + Q = О или, что эквивалентно, FTXE + ETXF 1 - ETXBR ВХЕ + Q - SR 1ST = 0, где F = A - BR ’ST Если при обращении к процедуре пропущены входные параметры R, S и Е, то по умолчанию им присваиваются такие значения: R-I, S = 0hE = I(I— единичная матрица). Кроме того, процедура вычисляет: матрицу коэффициентов усиления G = R-1(BTXE + ST); вектор L собственных значений замкнутой системы (то есть eig (А - BG, Е)); норму RR Фробениуса матрицы относительных остатков. Процедура [X.L,G.RR]=dare(A.B,Q,R,S,E) вычисляет решение уравнения Риккати для дискретного времени ЕТХЕ = АТХА - (АТХВ + S) (ВТХВ + R) 1 (АТХВ + S)T + Q или, что эквивалентно (если R не вырождена), ЕТХЕ = FTXF - FTXB (ВТХВ + R) *BTXF + Q - SR ’ST, где F = A - BR *ST. В этом случае G = (BTXB + R)1 (BTXA + ST). Рассмотрим теперь процедуру lyap. Обращение к ней вида Х=1уар(А.С) позволяет найти решение X матричного уравнения Ляпунова АХ + ХАТ = -С, а обращение вида Х=1уар(А.В.С) — решение общей формы матричного уравнения Ляпунова (называемого также уравнением Сильвестра): % АХ + ХВ = -С. Аналогично, процедура dlyap при обращении к ней вида X=dlyap(A,Q) позволяет решить дискретное уравнение Ляпунова АХАТ - X + Q = 0. Вопросы для самопроверки 1. Что такое линейная стационарная система? 2. Какие задачи можно решить с помощью пакета Control? 3. Какой класс объектов составляет основу пакета Control? 4. Какими способами и средствами обеспечивается ввод информации об ЛСС? 5. Как преобразовать LTI-объект из одной формы его представления в другую? 6. Какими средствами в пакете Control обеспечивается анализ системы? 7. Какие интерактивные средства предусмотрены в пакете Control? 8. Какими средствами синтеза систем обладает пакет Control? 9. Как обеспечить получение информации о системе?
1}УРОК Основы визуального моделирования динамических систем □ Библиотека Simulink — ядро пакета Simulink □ Построение блок-схем □ Моделирование поведения физического маятника □ Моделирование движения трех тел под действием сил гравитации □ Вопросы для самопроверки
278 Урок 7 • Основы визуального моделирования динамических систем Одной из наиболее привлекательных особенностей системы MATLAB является наличие в ней наглядного и эффективного средства составления программных моделей — пакета визуального программирования Simulink. Пакет Simulink позволяет осуществлять исследование (моделирование во времени) поведения динамических линейных и нелинейных систем, причем составление «программы» и ввод характеристик систем можно производить в диалоговом ре- жиме, путем сборки на экране схемы соединений элементарных (стандартных или пользовательских) звеньев. В результате такой сборки получается модель систе- мы (в дальнейшем будем называть ее S-моделью), которая сохраняется в файле с расширением .mdL Такой процесс составления вычислительных программ при- нято называть визуальным программированием. Создание моделей в пакете Simulink основывается на использовании технологии Drag-and-Drop. В качестве «кирпичиков» при построении S-модели применяют- ся визуальные блоки (модули), которые сохраняются в библиотеках Simulink S-модель может иметь иерархическую структуру, то есть состоять из моделей бо- лее низкого уровня, причем количество уровней иерархии практически не огра- ничено. В процессе моделирования есть возможность наблюдать за процессами, которые происходят в системе Для этого используются специальные блоки («об- зорные окна»), входящие в состав библиотеки Simulink. Библиотека может быть пополнена пользователем за счет разработки собственных блоков. Simulink — ядро пакета Simulink В основе блок-схем S-моделей лежат элементарные блоки, позволяющие связать блок-схему со средой MATLAB и обеспечить функционирование в ней S-модели как программы. Эти блоки размещены в главной библиотеке пакета Simulink, ко- торая имеет то же название. Запуск и использование Simulink Начать работу с пакетом Simulink можно из командного окна MATLAB, щелкнув для этого на соответствующей кнопке панели инструментов. В результате на эк- ране должно появиться окно Simulink Library Browser (Браузер библиотек Simu- link) (рис. 7.1). В левой половине окна браузера приведен перечень библиотек, включенных в со- став Simulink, а в правой — перечень разделов соответствующей библиотеки либо изображения блоков соответствующего раздела. Ядром пакета Simulink является библиотека Simulink, указанная в первой строке браузера. Остальные библиотеки пакета по необходимости включаются в состав общей библиотеки в соответствии с предпочтениями пользователя. Чтобы озна- комиться с составом какой-либо из библиотек следует дважды щелкнуть на ее имени. Библиотеку можно открыть и в отдельном окне. Для этого следует щелч- ком правой кнопки мыши на имени библиотеки вызвать контекстное меню и вы- брать команду открытия.
Библиотека Simulink — ядро пакета Simulink 279 Рис. 7.1. Окно Simulink Library Browser Чтобы начать сборку блок-схемы моделируемой системы, необходимо в команд- ном окне MATLAB вызвать команду Файл ► Новый ► Модель После этого на экране появится новое (пустое) окно untitled, в котором и будет осуществляться сборка S-модели (MDL-файла) (рис. 7.2). Рис. 7. 2. Окно, в котором осуществляется сборка блока
280 Урок 7 • Основы визуального моделирования динамических систем Окно имеет строку меню, панель инструментов и рабочее поле. Меню File (Файл) содержит команды, предназначенные для работы с MDL-фаилами; меню Edit (Прав- ка) — команды редактирования блок-схемы; меню View (Вид) — команды изменения внешнего вида окна; меню Simulation (Моделирование) — команды управления процессом моделирования; меню Format (Формат) — команды редактирования формата (то есть команды, позволяющие изменить внешний вид отдельных блоков и блок-схемы в целом). Меню Tools (Инструменты) включает некоторые допол- нительные сервисные средства, предназначенные для работы с S-моделью Сборка блок-схемы S-модели заключается в том, что графические изображения выбранных блоков с помощью мыши перетягиваются из окна раздела библиоте- ки в окно блок-схемы, а затем выходы одних блоков в окне блок-схемы соединя- ются со входами других блоков (также с помощью мыши). Соединение блоков выполняется следующим образом: указатель мыши подводят к определенному выходу нужного блока (при этом указатель должен приобрести форму крестика), нажимают левую кнопку и, не отпуская ее, перемещают указатель к нужному вхо- ду другого блока, а потом отпускают кнопку. Если соединение осуществлено вер- но, на входе последнего блока появится изображение черной стрелки. Любая блок-схема моделируемой системы должна включать в себя один или не- сколько блоков-источников, генерирующих сигналы, которые, собственно, и вы- зывают «движение» моделируемой системы, и один или несколько блоков-при- емников, которые позволяют получить информацию о выходных сигналах этой системы (увидеть результаты моделирования). Общая характеристика библиотеки блоков Simulink Библиотека блоков Simulink — это набор визуальных объектов, при использова- нии которых, соединяя отдельные модули между собой линиями связей, можно составлять функциональную блок-схему любого устройства. Если с помощью контекстного меню вызвать библиотеку Simulink, на экране поя- вится окно Library: simulink, в котором представлены графические обозначения раз- делов этой библиотеки (рис. 7.3). Рис. 7.3. Окно Library: simulink
Библиотека Simulink — ядро пакета Simulink 281 Библиотека Simulink состоит из 15 разделов. Тринадцать из них являются глав- ными и не могут быть изменены пользователем Значки этих разделов располо- жены в окне в двух первых рядах Четырнадцатый раздел, BLocksets & Toolboxes (Наборы блоков и инструменты), содержит дополнительные блоки, включенные в рабочую конфигурацию пакета. Пятнадцатый раздел, Demos (Демонстрацион- ные программы), позволяет вызвать демонстрационные программы, иллюстри- рующие работу блоков. Чтобы перейти в окно соответствующего раздела библио- теки, в котором находятся изображения блоков, достаточно дважды щелкнуть мышью на значке этого раздела. Раздел Sinks Приступим к рассмотрению блоков различных разделов. Сначала познакомимся с блоками раздела Sinks (Приемники), так как именно они позволяют визуализи- ровать получаемые при моделировании результаты и проконтролировать правиль- ность работы того или иного блока и моделируемой системы в целом. В этом раз- деле (рис. 7.4) размещены три группы блоков. Все они имеют только входы и не имеют выходов. Рис. 7.4. Блоки раздела Sinks В группу Data Viewers входят блоки, которые при моделировании играют роль об- зорных окон. К ним относятся: О Scope — блок с одним входом, который используется для вывода в графиче- ское окно графика зависимости величины, подаваемой на его вход, от модель- ного времени; О Floating Scope — блок с одним входом, выполняющий аналогичные функции; О XYGraph — блок с двумя входами, который обеспечивает построение графика зависимости одпой моделируемой величины (второй сверху вход) от другой (первый вход);
282 Урок 7 • Основы визуального моделирования динамических систем О Display — блок с одним входом, предназначенный для отображения числовых значений входной величины. Группу Model & Subsystem Outputs составляют блоки, предназначенные для пере- сылки и сохранения результатов: О Out — выходной порт для вывода результатов вне модели; О Terminator — порт для вывода результатов «в никуда»; О То File — блок, обеспечивающий сохранение результатов моделирования на диске в МАТ-файле (с расширением .mat); О То Workspace — блок, который сохраняет результаты в рабочем пространстве. К третьей группе относится блок управления моделированием — Stop Simulation, позволяющий прерывать моделирование при выполнении тех или иных условий; блок срабатывает в том случае, когда на его вход поступает ненулевой сигнал. Блок Scope Этот блок позволяет в ходе моделирования наблюдать графики процессов, кото- рые интересуют исследователя. Для настройки его параметров нужно после раз- мещения изображения блока в окне блок-схемы дважды щелкнуть на нем мышью. В результате на экране появится окно Scope (рис. 7.5). Рис. 7.5. Окно блока Scope Размер и пропорции окна можно изменять произвольно, пользуясь мышью. По горизонтальной оси откладываются значения модельного времени, а по верти- кальной — значения входной величины, отвечающие этим моментам времени. Если входная величина блока Scope является вектором, в окне строятся графики изменения всех элементов этого вектора — количество кривых соответствует числу элементов входного вектора, причем каждая кривая имеет свой цвет. Одно- временно в окне может отображаться до 30 кривых. Для управления параметрами окна в нем предусмотрена панель инструментов, ко- торая содержит одинадцать кнопок, имеющих такое назначение (слева направо): О вывод содержимого окна Scope на принтер; О вызов окна настройки параметров блока Scope;
Библиотека Simulink — ядро пакета Simulink 283 О изменение масштаба одновременно по обеим осям графика; О изменение масштаба по горизонтальной оси; О изменение масштаба по вертикальной оси; О автоматическая установка оптимального масштаба осей (полный обзор, ав- тошкалирование); О сохранение установок параметров осей; О восстановление установок параметров осей; О включение холостого подсоединения блока; О шлюз селектора сигналов; О селектор сигналов. Третья, четвертая и пятая кнопки являются альтернативными, то есть в опреде- ленный момент времени может быть использована лишь одна из них. Кнопки не доступны до тех пор, пока в окне Scope не отобразится график. Постоянно доступ- ными являются лишь первые две, шестая, седьмая и девятая кнопки Щелчок на второй кнопке приводит к появлению на экране диалогового окна 'Scope parameters (рис. 7.6), в котором настраиваются параметры (свойства) блока. Рис. 7.6. Окно настройки блока Scope В диалоговом окне'Scope' parameters имеются две вкладки: General (Общие), позво- ляющая установить параметры осей, и Data history (Представление данных), пред- назначенная для определения параметров представления данных блока Scope В нижней части окна находятся кнопки ОК (Подтвердить установку), Cancel (Вер- нуться назад), Help (Вызов справки) и Apply (Применить). Область Axes (Оси) вкладки General (Общие) содержит поля ввода Number of axes (Количество осей) и Time range (Интервал времени), а также раскрывающийся список Tick labels (Метки осей). В первом поле задается количество графических полей в окне Scope (одновремен- но изменяется количество входов блока Scope). Во втором поле устанавливается верхняя граница модельного времени, отклады- ваемого по оси абсцисс; при этом следует принимать во внимание следующее:
284 Урок 7 • Основы визуального моделирования динамических систем если размер заданного интервала моделирования (Тм) не превышает установлен- ного в этом поле значения (то есть весь процесс умещается в окне Scope), под гра- фиком в строке Time offset (Сдвиг по времени) выводится значение 0. В случае же, когда интервал моделирования превышает установленное значение, в окне Scope отображается только график, соответствующий последнему отрезку времени, мень- шему по размеру, чем Time range, и равному Тм-п*Т1те range, где п — целое число; при этом в строке Time offset выводится размер «скрытого» интервала времени — n*Time range; например, если значение Time range равняется 3, а продолжитель- ность интервала моделирования установлена 17, то в окне Scope будет выведен гра- фик моделируемого процесса, соответствующий последним двум единицам вре- мени, а строка под графиком будет иметь такой вид: Time offset: 15. С помощью раскрывающегося списка Tick Labels (Метки осей) можно задать вид оформления осей координат в.графиках окна Scope. Указанный список содержит три пункта: all (все), bottom axis only (только нижней оси), попе (нет) В результате выбора первого из них деления по осям будут наноситься вдоль каждой из осей всех графиков. Выбор второго означает, что деления по горизонтальным осям графических полей (если их несколько) за исключением нижней будут отсутст- вовать. Наконец, если выбрать третий пункт, то исчезнут деления по осям графи- ков и надписи на них, график займет все поле окна и последнее примет такой вид, как показано на рис. 7 7. Рис. 7.7. Окно Scope при установке значения попе параметра Tick Labels Если в области Axes (Оси) вы установите флажок Floating scope, то входы в блок Scope будут отключены В этом случае блок отображается как не имеющий входа, и если он был связан по входу с другими блоками, эти связи «обрываются». Тот же эффект оказывает щелчок на кнопке с таким же названием, находящейся на панели инструментов блока. В области Sampling (Дискретизация) находится список, в котором выбран эле- мент Decimation (Прореживание), и поле, где можно ввести целое положительное число, которое определяет, через какие промежутки времени (количество дискре- тов времени) полученные данные будут использоваться для построения графи- ков в окне Scope.
Библиотека Simulink — ядро пакета Simulink 285 Вкладка Data history (История данных) окна 'Scope' parameters (рис. 7 8) позволяет задать максимальное количество (начиная с конца) элементов массивов данных, которые используются для построения графиков в окне Scope (поле рядом с флаж- ком Limit data points to Last (Максимальное количество точек)). Рис. 7.8. Вкладка Data history окна настройки блока Scope Если установить флажок Save data to workspace (Записать данные в рабочее про- странство), появится возможность записать в рабочее пространство данные, ко- торые выводятся на графики окна Scope. При этом становятся доступными поле Variable name (Имя переменной) и список Format (Формат). В поле можно ввести имя переменной, под которым будут сохраняться данные в рабочем пространстве сис- темы (по умолчанию эти данные будут записаны под именем ScopeData), а в списке можно выбрать один из трех форматов записи данных: Array (Массив, матрица), Structure (Структура) или Structure with time (Структура с временем). Продемонстрируем работу блока Scope на простейшем примере. Перетянем в ок- но блок-схемы из окна раздела Sources блок Sine Wave, а из окна раздела Sinks — блок Scope и соединим выход первого блока со входом второго Получим схему, показанную на рис. 7.9. Рис. 7.9. Простейшая блок-схема с блоком Scope Вызовем в окне этой блок-схемы команду Simulation ► Start (Моделирование ► Начать), а затем дважды щелкнем на изображении блока Scope. На экране поя- вится окно Scope этого блока с изображением графика изменения во времени гар- монического сигнала (рис. 7.10).
286 Урок 7 • Основы визуального моделирования динамических систем Рис. 7.10 Окн< Scope с изображением синусоиды БлокХУ Graph Этот блок также является обзорным окном. В отличие от блока Scope он имеет два входа: на первый (верхний) подается сигнал, значения которого откладыва- ются по горизонтальной оси графика, а на второй (нижнии) — сигнал, значения которого откладываются по вертикальной оси. Если перетянуть этот блок в окно блок-схемы, а потом дважды щелкнуть мышью на его изображении, на экране появится окно настройки блока (рис. 7.11), позво- ляющее установить границы изменении обеих входных величин, в которых будет построен график зависимости второй величины от первой, а также задать дис- крет по времени. Рис. 7.11. Окн( настройки блока XY Graph Приведем пример использования блока XY Graph Для этого перетянем в окно блок-схемы из окна Library: Simulink/Sinks изображение этого блока, а из окна
Библиотека Simulink — ядро пакета Simulink 287 Library: Simulink/Sources — два блока-источника: Clock и Sine Wave. Соединим выхо- ды блоков-источников со входами блока XY Graph. Получим блок-схему, приве- денную на рис. 7.12. Рис. 7.12. Блок-схема проверки работы блока XY Graph Прежде чем запустить процесс моделирования этой схемы, необходимо настроить блок XY Graph, введя в диалоговом окне Block Parameters: XY Graph ожидаемые диапа- зоны изменения величины х (в нашем случае — времени) и у (синусоидального сиг- нала). Укажем в полях ввода x-min, x-max, y-min и y-max соответственно значения 0,10, -1 и 1. Отметим, что в случае использования блока Scope вводить диапазоны изменения величин не требуется, они устанавливаются автоматически. После вызова команды Simulation ► Start (Моделирование ► Начать) на экране поя- вится обзорное окно XY Graph с изображением, представленным на рис. 7.13. Рис. 7.13. Обзорное окно блока XY Graph с графиком синусоиды Блок Display Этот блок предназначен для вывода на экран числовых значений величин, кото- рые фигурируют в блок-схеме. Перетянув блок Display в окно блок-схемы, дваж- ды щелкнем на нем. Появится окно настройки блока (рис. 7.14).
288 Урок 7 • Основы визуального моделирования динамических систем Рис. 7.14. Окно настройки блока Display Формат вывода чисел задается путем выбора из списка Format одного из пяти пунктов: short, long, short_e, long_e, bank. Поле ввода Decimation (Прореживание) позволяет задать периодичность (через сколько дискретов времени) вывода значе- ний в окне Display. Если флажок Floating display сброшен, можно определить блок Display как блок без входа, обрывая его связи. Параметр Sample time используется только для дискретных во времени процессов. Его значение (-1), установленное по умолчанию, для непрерывных процессов и блоков изменять не рекомендуется. Блок Display может использоваться для вывода как скалярных, так и векторных величин. Если отображаемая величина является вектором, то исходное представ- ление блока изменяется автоматически; об этом свидетельствует появление чер- ного треугольника в правом нижнем углу блока. Для каждого элемента вектора создается свое мини-окно, но чтобы элементы стали видимыми, необходимо уве- личить изображение блока. Для этого следует выделить блок, подвести указатель мыши к одному из его углов и, не отпуская ее левую кнопку, расширить рамки изображения блока так, чтобы исчез черный треугольник. Для примера создадим блок-схему, состоящую из двух элементов — блока-источ- ника Constant и блока-приемника Display (рис. 7.15). Вызвав окно настройки бло- ка Constant (рис. 7.16), установим в нем значение константы — вектора, который состоит из элементов [le-17 pi 1757 -0.087]. В окне настройки блока Display уста- вим формат вывода чисел short_e. После активизации команды Simulation ► Start (Моделирование ► Начать) получим изображение окна блок-схемы, показанное на рис. 7.15. ЙЕШИИИИГ*' г- IPI У в View ДютЛЫ»! Femjl lwl< Цф D ! а? Н & $5 £2 . ► - |1.-17 pl 1757-О 087] ------bjl 1-0t>00«-017| Constant Display Рис. 7.15. Блок-схема проверки функционирования блока Display
Библиотека Simulink — ядро пакета Simulink 289 Рис. 7.16. Окно настройки блока Constant Расширив рамки изображения блока Display на блок-схеме, получим картину, представленную на рис 7.17. Рис. 7.17. Полное изображение содержимого обзорного блока Display Блок То File Этот блок обеспечивает запись значений величины, поданной на его вход, в МАТ- файл данных для дальнейшего их использования в других S-моделях. В окне на- стройки блока То File устанавливаются следующие параметры (рис. 7.18): О Filename — имя МАТ-файла, в который будут записываться значения входной величины (выводится на изображении блока в блок-схеме); по умолчанию ис- пользуется имя untitled.mat; О Vanable name — имя переменной, применяемой для обращения к данным, запи- санным в файле; по умолчанию используется переменная ans; О Decimation — дискретность записи данных в файл то есть через сколько интер- валов времени производится запись; О Sample time — величина дискрета времени для данного блока.
290 Урок 7 • Основы визуального моделирования динамических систем Рис. 7.18. Окно настройки блока То File Следует отметить, что значения данных, которые поступают на вход блока, запи- сываются в выходную переменную (например, ans) так: первую строку матрицы образуют значения моментов времени; вторая строка содержит соответствующие значения первого элемента входного вектора, третья строка — значения второго элемента и т. д. В результате записывается матрица размером (k + 1 )xN, где k — количество элементов входного вектора, a N — количество точек измерения (ко- личество моментов времени, в которые осуществлялось измерение). Блок То Workspace Этот блок предназначен для сохранения данных в рабочем пространстве системы MATLAB. Данные хранятся в виде матрицы размером Nxk, структура которой от- личается от структуры данных в МАТ-файле. Так, для значений сохраняемых ве- личин используется расположение по столбцам, а не по строкам; значения мо- дельного времени не записываются. Окно настройки блока То Workspace (рис. 7.19) содержит такие параметры: О Variable name — имя, под которым данные сохраняются в рабочем пространст- ве; по умолчанию используется имя simout; О Maximum number of rows — максимально допустимое количество строк, то есть значений записываемых данных; по умолчанию оно задается константой 1 nf, указывающей, что данные регистрируются на всем интервале моделирования; О Decimation — дискретность записи данных в файл; О Sample time — величина дискрета времени для данного блока (указывается только для дискретных блоков). В списке Save format (Формат записи) можно выбрать один из трех вариантов за- писи данных: Array (Массив, матрица), Structure (Структура) и Structure with time (Структура со временем).
Библиотека Simulink — ядро пакета Simulink 291 Рис. 7.19. Окно настройки блока То Workspace Раздел Sources Блоки, входящие в раздел Sources (Источники), предназначены для формирова- ния сигналов, которые при моделировании обеспечивают работу S-модели в це- лом или отдельных ее частей. Все блоки-источники имеют по одному выходу и не имеют входов. Раздел Sources библиотеки Simulink содержит две группы блоков: Model & Sybsystem Inputs (Входы моделей и подсистем) и Signal Generators (Генера- торы сигналов) (рис. 7.20). Рис. 7.20. Блоки раздела Sources
292 Урок 7 • Основы визуального моделирования динамических систем В первую группу входят блоки, обеспечивающие поступление сигналов в S-мо- дель или подсистему Simulink (см. раздел «Создание подсистем») извне (из дру- гих S-моделей, рабочего пространства или МАТ-файлов). Это следующие блоки: О Ini — входной порт S-модели или подсистемы; обеспечивает поступление в под- систему сигналов из системы более высокого порядка, формируя вход этой подсистемы (для S-модели верхнего уровня блок обеспечивает поступление процесса из рабочего пространства); О Ground — создает нулевой сигнал; О From File — предназначен для ввода в S-модель данных, которые хранятся на диске в МАТ-файле; О From Workspace — обеспечивает ввод в модель данных непосредственно из рабо- чего пространства MATLAB Напомним, что данные в МАТ-файле образуют многомерный массив с количест- вом строк, которое определяется числом регистрируемых переменных. Первая строка содержит последовательные значения модельного времени, остальные стро- ки — значения переменных, соответствующие отдельным моментам времени. Во вторую группу раздела включены блоки, формирующие выходную величину как заданную функцию времени Они представляют собой своеобразные генера- торы сигналов заданного вида. Эту группу образуют следующие блоки: О Constant — формирует постоянную величину (скаляр, вектор или матрицу); О Signal Generator — создает (генерирует) непрерывный колебательный сигнал одной из волновых форм (синусоидальной, прямоугольной, треугольной) или случайный сигнал; О Pulse Generator — представляет собой генератор непрерывных прямоугольных импульсов; О Signal Builder — создает (генерирует) один или несколько процессов, аппрокси- мируемых отрезками прямых (до пяти отрезков в каждом); О Ramp — создает линейно восходящий (или нисходящий) сигнал; О Sine Wave — генерирует гармонический сигнал; О Step — генерирует сигнал в виде ступеньки (ступенчатый сигнал) с заданными параметрами (время начала ступеньки и ее высота) О Repeating Sequence — генерирует периодическую последовательность, О Chirp Signal— представляет собой генератор гармонических колебаний, частота которых линейно изменяется во времени; О Random Number — служит источником дискретного сигнала, значения которого являются случайной величиной, распределенной по нормальному закону; О Uniform Random Number — служит источником дискретного сигнала, значения которого являются случайной равномерно распределенной величиной; О Band-Limited White Noise — является генератором белого шума с ограниченной полосой частот;
Библиотека Simulink — ядро пакета Simulink 293 О Clock — является источником непрерывного сигнала, пропорционального мо- дельному времени; О Digital clock — формирует дискретный сигнал, пропорциональный времени. Как и другие блоки библиотеки Simulink, блоки-источники могут быть настрое- ны пользователем, за исключением блока Clock. Блок Constant Этот блок генерирует процессы, которые являются неизменными во времени, то есть характеризуются постоянным значением. Для блока Constant (см. рис. 7.17) настраивается один параметр — Constant value, который может быть введен и как вектор-строка из нескольких элементов по общим правилам MATLAB. Пример ис- пользования данного блока был приведен ранее, при рассмотрении блока Display. Блок Signal Generator Этот блок представляет собой генератор непрерывных колебательных сигналов. Диалоговое окно настройки блока Signal Generator содержит следующие парамет- ры (рис. 7.21): О Wave form — форма волны; в раскрывающемся списке можно выбрать одну из таких форм периодического процесса: Sine (Синусоидальные волны), Square (Прямоугольные волны), Sawtooth (Треугольные волны), Random (Случайные ко- лебания); О Amplitude — значения амплитуды генерируемых колебаний; О Frequency — частота колебаний; О Units — единицы измерения частоты колебаний; с помощью раскрывающегося списка можно задать одну из единиц измерения: Hertz (Герцы), Rad/Sec (Ра- дианы в секунду). ’ Рис. 7.21. Окно настройки блока Signal Generator Простейшая блок-схема S-модели, которая состоит из блока Signal Generator и бло- ка отображения XY Graph, приведена на рис. 7.22.
294 Урок 7 * Основы визуального моделирования динамических систем Рис. 7.22. Блок-схема проверки функционирования блока Signal Generator На следующем рисунке в окне блока XY Graph представлены результаты модели- рования при таких значениях параметров: амплитуда — 1; частота — 1 Гц и раз- личных формах волны — Sine, Square, Sawtooth и Random (рис. 7.23, а—г). а в г Рис. 7.23. Результат генерирования различных сигналов: а — синусоидального; б — прямоугольных волн; в — треугольных волн; г — случайного
Библиотека Simulink — ядро пакета Simulink 295 (^ПРИМЕЧАНИЕ При выборе пункта Random в списке Wave form генерируется сигнал, зна- чения которого равномерно случайно распределены в диапазоне,указанном параметром Amplitude, а значения моментов времени, в которые происхо- дят скачкообразные изменения сигнала, разделены на величину шага моде- лирования, устанавливаемого командой Simulation k Simulation Parameters к Solver. Блок Step Этот блок обеспечивает создание сигнала в форме ступеньки (так называемого ступенчатого сигнала). В диалоговом окне настройки блока Step устанавливают- ся следующие параметры (рис. 7.24): О Step time (время начала ступеньки, момент скачка сигнала) — момент времени, в который происходит скачкообразное изменение величины сигнала; значение по умолчанию — 1; О Initial value (начальное значение) — уровень сигнала до скачка; значение по умолчанию — 0; О Final value (конечное значение) — уровень сигнала после скачка; значение по умолчанию — 1. Рис. 7.24. Окно настройки блока Step Рассмотрим пример использования блока. Перетянем в окно блок-схемы из окна библиотеки источников блоки Step и Clock, а из окна библиотеки приемников — блок XY Graph и соединим их (рис. 7.25). Установим такие параметры настройки блока: Step time — 3, Initial value — 1, Final value---1.3. После активизации моделирования (команда Simulation ► Start) в ок- не XY Graph появится кривая, представленная на рис. 7.26.
296 Урок 7 • Основы визуального моделирования динамических систем Рис. 7.25. Блок-схема проверки функционирования блока Step Рис. 7.26. Результат работы блока Step Блок Ramp Этот блок формирует непрерывно нарастающий сигнал. В окне настройки блока Ramp задаются такие параметры: О Slope — значение скорости нарастания сигнала; О Start time — время начала нарастания сигнала; О Initial output — значение сигнала до момента начала его нарастания. На рис. 7.27 представлен результат применения блока Ramp при следующих зна- чениях параметров: Slope —1, Start time — 5, Initial output — 1. Рис. 7.27. Результат работы блока Ramp Блок Sine Wave Этот блок является генератором гармонического сигнала. В окне настройки бло- ка Sine Wave задаются такие параметры: О Sine type — тип синусоидальной волны: Time based — для непрерывного сигнала (аргумент — время); Sample based — для дискретного времени (аргумент — чис- ло дискретов времени);
Библиотека Simulink — ядро пакета Simulink 297 О Amplitude — амплитуда синусоидального сигнала; О Bias — смещение (постоянная составляющая синусоиды); О Frequensy (rad/sec) — частота колебаний (в радианах в секунду); О Phase (rad) — начальная фаза (в радианах); О Sample time — величина дискрета времени для данного блока. На рис. 7.28 показан результат применения блока при следующих значениях па- раметров: Sine type — Time based, Amplitude — 1, Bias —0.5 Frequensy (rad/sec) — 1, Phase (rad) — -pi/2, Sample Time — 0. Рис. 7.28. Результат работы блока Sine Wave Отличия этого генератора от генератора синусоидальных колебаний в блоке Sig- nal Generator состоят в следующем: в блоке Sine Wave можно устанавить произволь- ную начальную фазу, задать средний уровень синусоиды, но нельзя задать часто- ту в герцах. Блок Repeating Sequence Этот блок представляет собой генератор колебаний с периодической последова- тельностью. В окне блока Repeating Sequence устанавливаются два параметра: О Time values — вектор значений моментов времени, в которые заданы значения выходной величины; О Output values - вектор значений выходной величины, которые она должна при- нять в указанные в первом векторе моменты времени. Блок обеспечивает генерирование колебаний с периодом, равным разнице между последним значением вектора Time values и значением первого его элемента. Вол- на внутри периода имеет форму ломаной линии, проходящей через точки с ука- занными в векторах Time values и Output values координатами. В качестве примера на рис. 7.29 приведено изображение процесса, сформирован- ного блоком Repeating Sequence при следующих значениях параметров: Time valu- es - [0.0.5.1.1.5.2], Output values - [-2.4.0.2.-2].
298 Урок 7 • Основы визуального моделирования динамических систем Рис. 7.29. Результат работы блока Repeating Sequence Блок Pulse Generator Этот блок генерирует последовательности прямоугольных импульсов. В окне на- стройки блока Pulse Generator устанавливаются такие параметры: О Pulse type — тип импульсов: Time based (для непрерывного сигнала, аргумент — время), Sample based (для дискретного времени, аргумент — число дискретов времени); О Amplitude — амплитуда сигнала (высота прямоугольного импульса); О Period — размер периода сигнала; О Pulse width — ширина импульса в процентах от периода; О Phase delay — величина задержки первого импульса относительно t = 0. Результат применения этого блока приведен на рис. 7.30. Были заданы следую- щие значения параметров: Pulse type — Time based, Amplitude — 3, Period — 3, Pulse width — 80, Phase delay — 1. Рис. 7.30. Результат работы блока Pulse Generator
Библиотека Simulink — ядро пакета Simulink 299 Блок Chirp Signal Этот блок генерирует синусоидальный сигнал единичной амплитуды перемен- ной частоты, причем значения частоты колебаний изменяются с течением време- ни по линейному закону. В окне настройки блока Chirp Signal предусмотрены та- кие параметры: О Initial frequency (Hz) — начальное значение частоты (в герцах) при t = 0; О Target time (secs) — второй момент времени (в секундах), положительная вели- чина; О Frequency at target time (Hz) — значение частоты во второй момент времени. На рис. 7.31 показан результат использования блока Chirp Signal при таких значе- ниях параметров: Initial frequency (Hz) — 0.2, Target time (secs) — 10, Frequency attar- get time (Hz) — 10. Рис. 7.31. Результат работы блока Chirp Signal Блоки, генерирующие случайные процессы Блок Random Number обеспечивает формирование сигналов, значения которых в от- дельные моменты времени являются случайной величиной, распределенной по нормальному закону с заданными параметрами. В окне настройки этого блока (рис. 7.32) можно установить такие параметры: О Mean — среднее значение генерируемого процесса; О Variance — среднеквадратичное отклонение от этого среднего; О Initial seed — начальное значение базы для инициализации генератора после- довательности случайных чисел; при фиксированном значении этого парамет- ра генератор всегда вырабатывает одну и ту же последовательность; О Sample time — величина дискрета времени. Блок Uniform Random Number формирует сигналы, значения которых в отдельные моменты времени являются случайной величиной, равномерно распределенной в заданном интервале. В окне настройки этого блока можно установить следую- щие параметры: О Minimum — нижний предел случайной величины; О Maximum — верхний предел;
300 Урок 7 • Основы визуального моделирования динамических систем О Initial seed — начальное значение базы генератора случайных чисел; О Sample time — значение дискрета времени. Рис. 7.32. Окно настройки блока Random Number Блок Band-Limited White Noise формирует процесс в виде частотно-ограниченного белого шума. Параметры настройки данного блока такие: О Noise power — значение интенсивности (мощности) белого шума; О Sample time — значение дискрета времени (определяет верхнее значение часто- ты процесса); О Seed — начальное значение базы генератора случайной величины. Сформируем блок-схему, иллюстрирующую работу блоков (рис. 7 33). Рис. 7.33. Блок-схема проверки функционирования генераторов случайных процессов Для того чтобы в окне Scope можно было разместить три графика, каждый из ко- торых отображал бы отдельный процесс, необходимо вызвать команду Scope ►
Библиотека Simulink — ядро пакета Simulink 301 'Scope' parameters ► General и установить в поле Number of axes число осей — 3. Вид блока Scope на блок-схеме при этом изменится, на нем появятся изображения трех входов. В списке Tick Labels установим значение all. После этого над каждым из трех выводимых графиков можно будет проставить заголовки. Тексты заго- ловков помещаются на линиях, ведущих ко входам блока Scope (см. рис. 7.33). Перед запуском S-модели в окне блок-схемы вызовем команду Simulation ► Simu- lation parameters ► Solver (Моделирование ► Параметры моделирования ► Solver) и установим в окне настройки параметров процесса моделирования (рис. 7.34) та- кие параметры: в области Solver options выберем значения Fixed-step и discrete (по continuous states) в раскрывшихся списках; в поле Fixed step size введем значение шага изменения времени (в секундах) — 0.01. ПРИМЕЧАНИЕ Следует различать шаг изменения модельного времени, устанавливаемый при проведении моделирования в окне Simulation parameters и определяющий интервалы времени, через которые производятся вычисления отдельных со- стояний моделируемой системы, и параметр Sample time (Дискрет времени), определяющий интервал времени, внутри которого выходная величина бло- ка не изменяет своего значения. Рис. 7.34. Окно настройки параметров процесса моделирования Осуществляя теперь моделирование, получим процессы, которые представленны на рис. 7.35 Как видим, моделируемые процессы сохраняют неизменные значения внутри интер- валов времени, устанавливаемых с помощью параметра Sample time Изменение зна- чений процесса происходит скачкообразно на границе соседних дискретов времени. Следует отметить, что блок Band-Limited White Noise существенно отличается от первых двух блоков-генераторов Для них установка значения параметра Sample time, отличного от нуля, не является обязательной. В блоке Band-Limited White Noise этот параметр определяет наибольшую частоту в спектре выходного сигна- ла, она равна величине (в герцах), обратной значению параметра Sample time, а по- тому последний не может быть равен нулю.
302 Урок 7 • Основы визуального моделирования динамических систем Рис. 7.35. Результат раб ты генераторов случайных процессов На рис. 7.36 показан результат моделирования первых двух блоков при значении параметра Sample time, равном нулю. В этом случае изменение величины случай- ного процесса происходит на стыке шагов моделирования (0,01 с), величина ко- торых устанавливается с помощью команды Simulation ► Simulation parameters ► Solver (Моделирование ► Параметры моделирования ► Solver). Рис. 7.36. Результат генерирования случайных процессов при значении параметра Sample time, равном 0
Библиотека Simulink — ядро пакета Simulink 303 Раздел Continuous Раздел Continuous (Непрерывные элементы) содержит блоки, которые разделя- ются на следующие группы: О блоки общего назначения (интеграторы, дифференциаторы); О блоки задержки сигнала, О блоки линейных стационарных звеньев. Они реализуют динамические звенья, описываемые линейными дифференциаль- ными уравнениями с постоянными коэффициентами, то есть линейные стацио- нарные звенья (рис. 7.37): О Integrator — представляет идеальное интегрирующее звено (интегратор), О Derivative — представляет идеальное дифференцирующее звено; О State-Space — позволяет задать линейное звено путем ввода четырех матриц его пространства состояний; О Transfer Fen — позволяет задать линейное звено путем ввода его передаточной функции; О Zero-Pole — используется для того, чтобы задать звено посредством указания векторов значений его полюсов и нулей, а также значения коэффициента пе- редачи; О Transport Delay — обеспечивает задержку сигнала на заданное количество шагов модельного времени (не обязательно целое число); О Variable Transport Delay — позволяет задавать управляемую извне величину за- держки. Рис. 7.37. Блоки раздела Continuous Пользуясь этими блоками, можно, собирая в окне блок-схемы различные звенья и соединяя их между собой, составлять модели сложных систем автоматического
304 Урок 7 • Основы визуального моделирования динамических систем управления, а затем осуществлять моделирование во времени поведения этих систем, задавая разные входные воздействия. В этом случае S-модель выполняет те же функции, что и программы пакета Control. Однако этот процесс осуществ- ляется в Simulink значительно проще, нагляднее и надежнее, он дает возмож- ность проводить моделирование при значительно более сложных внешних воз- действиях на систему. Блок Integrator позволяет осуществлять интегрирование входного сигнала в не- прерывном времени. Окно его настройки содержит следующие параметры: О External reset — подключение дополнительного управляющего сигнала; О Initial condition source — определение источника (внутренний или внешний) установки начального значения выходного сигнала; О Initial condition — начальное значение выходной величины, вводится в строке редактирования или как числовая константа либо в виде вычисляемого выра- жения; О Limit output — ограничение величины выхода (этот флажок определяет, будут ли использоваться следующие три параметра); О Upper saturation limit — верхнее предельное значение выходной величины, по умолчанию не ограничено (значение inf); О Lower saturation limit — нижнее предельное значение выходной величины (по умолчанию параметр имеет значение -inf); О Show saturation port — показать порт насыщения; О Show state port — показать порт состояния; О Absolute tolerance — допустимая предельная величина абсолютной погрешности. Параметр External reset может принимать такие значения; попе — дополнительный управляющий сигнал не используется; rising — для управления используется на- растающий сигнал; falling — для управления используется убывающий сигнал; either — на работу блока влияет изменение управляющего сигнала в любом на- правлении. Параметр Initial condition source принимает одно из двух значений: internal — ис- пользуется внутренняя установка начального значения выходной величины; exter- nal — установка начальных условий будет осуществляться извне. Если выбранные пользователем значения этих двух параметров предполагают на- личие дополнительных входных сигналов, то на графическом изображении блока появляются дополнительные входные порты (после щелчка на кнопке Apply в окне настройки блока). Если флажок Limit output установлен, то при переходе выход- ного значения интегратора через верхнюю или нижнюю границу на дополнитель- ном выходе блока (saturation port) формируется единичный сигнал. Чтобы этот сигнал можно было использовать для управления работой S-модели, должен быть установлен флажок Show saturation port. При этом на правой стороне изображения блока-интегратора появляется обозначение нового выходного порта. Установка флажка Show state port также приводит к появлению дополнительного выхода бло- ка (state port), возникающего на нижней стороне изображения. Сигнал, который подается на этот порт, совпадает с главным выходным сигналом, но в отличие от
Библиотека Simulink — ядро пакета Simulink 305 него может быть использован только для прерывания алгебраического цикла или для согласования состояния подсистем модели Использование блоков-звеньев State-Space, Transfer Fen и Zero-Pole представляется достаточно прозрачным для тех, кто знаком с основами теории автоматического управления. Настройка блока Transport Delay, обеспечивающего задержку сигнала на заданное число шагов модельного времени, происходит по трем параметрам: О Time delay — количество шагов модельного времени, на которое следует задер- жать сигнал (может вводиться в числовой форме или в форме вычисляемого выражения); О Initial input — начальное значение входа, по умолчанию равняется 0; О Initial buffer size — начальный объем буфера памяти (в байтах), который выделя- ется в рабочем пространстве MATLAB для сохранения параметров задержан ного сигнала (значение должно быть кратным 8, по умолчанию — 1024). Блок Variable Transport Delay, с помощью которого можно задавать управляемую извне величину задержки, имеет дополнительный вход. Подаваемый на него сиг- нал определяет продолжительность задержки. Раздел Discrete Ранее рассмотренные разделы библиотеки позволяют формировать непрерывную линейную динамическую систему В раздел Discrete (Дискретные элементы) вхо- дят блоки, с помощью которых в модели может быть описано поведение дискрет- ных систем. Различают два основных типа таких систем: системы с дискретным временем и системы с дискретными состояниями. Блоки, которые входят в раз- дел Discrete обеспечивают моделирование систем с дискретным временем и пре- образование непрерывной системы в дискретную (рис. 7.38). Блоки этого раздела имеют следующие назначение О Unit Delay — используется для задержки сигнала; О Discrete-Time Integrator — представляет собой дискретный интегратор; О Discrete Filter — позволяет задать дискретное звено через дискретную переда- точную дробнорациональную функцию относительно z-1; О Discrete Transfer Fen — позволяет задать линейное дискретное звено через дис- кретную передаточную дробно рациональную функцию относительно z; О Discrete Zero-Pole — используется для определения дискретного звена через указание значений пулей и полюсов дискретной передаточной функции отно- сительно z; О Discrete State-Space — используется для определения дискретного линейного звена путем указания матриц его состояния; О Memory — используется для задержки сигнала на один шаг модельного времени, О Zero-Order Hold — представляет собой экстраполятор нулевого порядка; О First-Order Hold — является экстраполятором первого порядка
306 Урок 7 • Основы визуального моделирования динамических систем Рис. 7.38. Блоки раздела Discrete Блок Unit DeLay обеспечивает задержку входного сигнала на заданное число шагов модельного времени. Параметрами его настройки являются: Initial condition — на- чальное значение сигнала, Sample time — время задержки, которое задается коли- чеством шагов модельного времени. Блок Discrete-Time Integrator позволяет выполнить численное интегрирование вход- ного сигнала. Большинство параметров настройки этого блока совпадают с пара- метрами блока Integrator раздела Continuous. Отличия состоят в следующем. В бло- ке дискретного интегратора есть дополнительный параметр — метод численного интегрирования (Integrator method). С помощью списка можно выбрать один из трех методов: прямой метод Эйлера (левых прямоугольников); обратный метод Эйлера (правых прямоугольников); метод трапеций. Вместо параметра Absolute tolerance введен параметр Sample time — шаг интегрирования в количестве шагов модельного времени. Блок Memory позволяет выполнить задержку сигнала только на один шаг модельно- го времени. Блок имеет два параметра: Initial condition (Начальное условие) — зна- чения входного сигнала в начальный момент времени; Inherit sample time (Наследо- вание шага времени) — величина задержки сигнала. Если этот флажок сброшен, то используется минимальная задержка, равная 0,1 единицы модельного време- ни; если же он установлен, то величина задержки равна значению дискрета вре- мени блока, который предшествует блоку Memory. Блоки Zero-Order Hold и First-Order Hold служат для преобразования непрерывного сигнала в дискретный. На рис. 7.39 приведен результат прохождения синусои- дального сигнала через эти блоки.
Библиотека Simulink — ядро пакета Simulink 307 Рис. 7.39. Прохождение синусоидального сигнала через экстраполяторы Раздел Math Operations В разделе Math Operations (Математические операции) содержатся блоки, которые реализуют некоторые встроенные математические функции системы MATLAB. Они объединены в четыре группы (рис. 7.40). Рис. 7.40. Блоки раздела Math Operations
308 Урок 7 • Основы визуального моделирования динамических систем В первую группу, Math Operations, входят блоки, осуществляющие математиче- ские преобразования входных величин О Sum — суммирует поступающие на него сигналы; О Product — выполняет умножение или деление входных сигналов, О Dot Product — осуществляет умножение двух входных величин, если они явля- ются скалярами, или определяет сумму произведений элементов двух вход- ных векторов одинаковой длины; О Gain — является линейным усилительным звеном, О Slider Gain — представляет собой звено интерактивного изменения коэффици- ента усиления; О Matrix Gain — является матричным усилительным звеном для многомерной системы; О Algebraic Constraint — используется для нахождения решения алгебраического уравнения; О Polynomial — служит для вычисления корней полинома. К этой группе относятся также шесть блоков стандартных математических опера- ций: Math Function, Trigonometric Function, MinMax, Abs, Sign и Rounding Function Вторая группа, Vector Operations, содержит блоки, осуществляющие векторные опе- рации. Она включает следующие блоки: О Assignment — используется для включения сигнала в другой векторный сигнал; О Matrix Concatenation — позволяет выполнить расширение матричного сигнала за счет его сцепления с другим матричным сигналом; О Reshape — используется для преобразования входного векторного или матрич- ного сигнала в одну из форм одномерного массива; В состав третьей группы, Logic Operations, входят блоки осуществляющие логиче- ские операции: О Logical Operator — представляет собой логический оператор; О Relational Operator — является оператором отношения’ О Combinatorial Logic — является блоком комбинаторной логики; О Bitwise Logical Operator — является поразрядным логическим оператором Четвертая группа Complex Vector Conversions, содержит блоки, осуществляющие преобразования комплексных векторных величин. Блоки этой группы, Complex to Magnitude-Angle, Complex to Real-Imag, Magnitude-Angle to Complex и Real-Imagto Comp- lex, используются для преобразования комплексных сигналов в действительные и наоборот. Блок Sum может использоваться в двух режимах: суммирования входных сигна- лов (в том числе с разными знаками) и суммирования элементов вектора, посту- пающего на вход блока Для управления режимами работы блока используются параметры Icon Shape (Форма изображения) и List of signs (Список знаков). Первый параметр может
Библиотека Simulink — ядро пакета Simulink 309 принимать два значения: round (круглый) и rectangular (прямоугольный). Значе- ния второго параметра задаются одним из трех способов: О последовательностью знаков «+» или «-», при этом количество знаков опре- деляет число входов блока, а сам знак — полярность соответствующего вход- ного сигнала; О в виде целого положительного числа, большего 1, которое определяет количество входов блока, при этом все входы считаются положительными; О с помощью символа «1», который указывает, что блок используется в режиме суммирования элементов вектора (в этом случае вход у блока один). Блок Product выполняет умножение или деление нескольких входных сигналов. Окно настройки блока содержит два параметра: Number of inputs (Количество вхо- дов) и Multiplication (Умножение). Входные величины могут быть векторными или матричными. В списке Multiplication (Умножение) выбирается способ умно- жения входных величин: Elementwise — поэлементное умножение входных векто- ров или матриц; Matrix — матричное умножение векторов или матриц. Если значение параметра Number of inputs (Количество входов) является положи- тельным числом, которое больше 1, то все входные величины перемножаются. Если в качестве значения параметра ввести 1, будет вычисляться произведение элементов единственного входного вектора. При этом на изображении блока выво- дится символ «Р». В случае, когда результат выполнения должен содержать деление на некоторые входные величины, в поле Number of inputs (Количество входов) сле- дует вводить последовательность символов «*» или «/» (по числу входов блока) в зависимости от того, умножается или делится результат на соответствующую входную величину. Значения этих параметров задаются так же, как и при настрой- ке блока Sum. Если выбрано матричное умножение, то символ «/» обозначает ум- ножение на матрицу, обратную матрице соответствующей входной величины. В блоке Dot Product (скалярное (внутреннее) произведение), не имеющем пара- метров настройки, есть лишь два входа. Входные сигналы блока должны быть векторами одинаковой длины. Выходная величина блока в каждый момент вре- мени равна сумме произведений соответствующих элементов этих двух векторов. Если векторы являются комплексными, то перед умножением первый вектор (верхний входной порт) заменяется комплексно сопряженным. Блок Gain осуществляет умножение входного сигнала на постоянную величину (или вектор), значения которой (элементы которого) задаются в диалоговом окне настройки в поле Gain (Коэффициент усиления) (рис. 7.41). Входная величина блока (и) может быть скалярной, векторной или матричной. В случае, когда входной сигнал является вектором длиной N элементов, коэффициент усиления должен быть вектором той же длины. В списке Multiplication (Умножение) выбирается один из следующих способов умножения входной величины на вектор К коэффи- циентов усиления: Element wise(K.*u) — поэлементное умножение входного вектора на вектор коэффициентов усиления; Matrix(K*u) — матричное умножение вектора коэффициентов усиления на матрицу входной величины; Matrix(u*K) — матрич- ное умножение матрицы входной величины на вектор коэффициентов усиления; Matrix(K*u)(u vector) — матричное умножение векторов Кии.
310 Урок 7 • Основы визуального моделирования динамических систем Рис. 7.41. Окно настройки блока Gain Блок Matrix Gain отличается от блока Gain только тем, что в нем коэффициент пе- редачи задается как матрица. Блок Slider Gain является разновидностью простейшего усилительного звена и од- ним из элементов взаимодействия пользователя с моделью. Если дважды щелк- нуть мышью на изображении блока, появится диалоговое окно Slider Gain с пол- зунковым регулятором (рис 7.42) Рис. 7.42. Окно настройки блока Sl'der Gain В этом окне имеются три поля ввода: два Именованных и одно — безымянное. В по- ле Low указывается нижняя граница изменения параметра, в поле High — верхняя. В среднем поле задается текущее значение параметра. При выборе нового диапазона изменения параметра необходимо сначала указать новое значение параметра, а потом изменить границы диапазона. После ввода зна- чений этих трех числовых величин можно, передвигая ползунок с помощью мыши, установить любое другое значение внутри диапазона. Установленное значение отобразится в числовом виде в среднем поле ввода. Далее описываются особенности блоков, реализущих математические функции. Блок Abs формирует абсолютное значение вектора входного сигнала. Он не име- ет настраиваемых параметров. Блок Trigonometric Function обеспечивает преобразование входного сигнала с по- мощью одной из следующих функций MATLAB: sin, cos, tan, asm, acos, atan, atan2, sinh, cosh, tanh, asinh, acosh, atanh. Выбор функции осуществляется в окне настройки блока с помощью списка. Блок Math Function позволяет выбрать для преобразования входного сигнала та- кие функции: exp, log, 10лц, logic, magnitude*?, square, sqrt, pow, conj, reciprocal,
Библиотека Simulink — ядро пакета Simulink 311 hypot, rem, mod, transpose, hermitian. Нужную функцию выбирают с помощью спи- ска в окне настройки блока. Блок Rounding Function содержит разнообразные функции округления, предусмот- ренные в MATLAB. Он осуществляет округление значений входного сигнала. Выбор конкретного метода округления также осуществляется с помощью списка в окне настройки блока. Блок MinMax осуществляет поиск минимального или максимального элемента входного вектора. Если входом является скалярная величина, то выходная вели- чина совпадает с входной. Если входов несколько, отыскивается минимум или максимум среди входов. В окне настройки блока указывается метод (минимум или максимум) и количество входов Блок Sign реализует нелинейность типа сигнум-функции. Он не имеет парамет- ров настройки. Блок формирует выходный сигнал, который принимает только три возможных значения: +1 — в случае, когда входной сигнал положителен, -1 — при отрицательном входном сигнале и 0 — при входном сигнале, равном нулю Для указанных выше блоков имя выбранной функции выводится на изображе- нии блока. Во всех блоках группы Logic Operations выходная величина является булевой, то есть может принимать лишь два значения: 1 (ИСТИНА) или О (ЛОЖЬ). Во мно- гих блоках этой группы булевыми должны быть и все входные величины. Блок Relational Operator реализует между двумя входными сигналами операции от- ношения: >, с, <=, >=, =, ~= (соответственно: больше, меньше, меньше или равно, больше или равно, тождественно равно, не равно). Конкретная операция выбира- ется при настройке параметров блока с помощью списка. Знак операции в даль- нейшем отображается на значке блока. Блок Logical Operator содержит набор основных логических операций: AND, OR, NAND, NOR, XOR, NOT. Входные величины должны быть булевыми. Выбор необходимой ло- гической операции осуществляется в окне настройки блока с помощью списка. Вторым настраиваемым параметром является Number of input ports — число входных величин (портов) блока, то есть количество аргументов логической операции Блок Combinatorial Logic обеспечивает преобразование входных булевых величин в выходную величину в соответствии с заданной таблицей истинности. Блок име- ет единственный настраиваемый параметр — Truth table (Таблица истинности). Блоки Complex to Magnitude-Angle и Complex to Real-Imag осуществляют преобразо- вание комплексного входного сигнала в один или два действительных выходных сигнала, которые являются модулем, аргументом, действительной или мнимой частью входного сигнала Блоки Magn'tude-Angle to Complex и Real-Imag to Complex преобразуют один или два входных действительных сигнала в комплексный вы- ходной сигнал. Количество входов или выходов определяется в окне настройки блока.
312 Урок 7 • Основы визуального моделирования динамических систем Раздел Discontinuities В разделе Discontinuities (Разрывные элементы) расположены восемь блоков, ко- торые реализуют некоторые типовые нелинейные (кусочно-линейные) зависи- мости выходной величины от входной (рис. 7.43) Рис. 7.43. Блоки раздела Discontinuities Блок Saturation (Насыщение) реализует линейную зависимость с насыщением (ограничением). Выходная величина этого блока совпадает со входной, если по- следняя находится в указанном диапазоне. Если же входная величина выходит за рамки диапазона, то выходный сигнал принимает значение ближайшей из гра- ниц. Значения границ диапазона устанавливаются в окне настройки блока Блок Dead Zone (Мертвая зона) реализует нелинейность типа зоны нечувствитель- ности. Блок имеет два настраиваемых параметра: начало и конец зоны нечувстви- тельности Выходная величина равна нулю, если входная величина принимает значения, находящиеся внутри зоны нечувствительности Если входная величи- на больше верхней границы зоны, выходная величина равна разности их значе- ний. В том случае, когда входная величина меньше нижней границы зоны, выход- ная величина равна разности их значений. Блок RateLimiter (Ограничитель скорости) обеспечивает ограничение сверху и снизу скорости изменения проходящего через него сигнала. Окно настройки блока со- держит два параметра Rising slew rate и Falling slew rate Блок работает по следую- щему алгоритму: сначала рассчитывается скорость изменения проходящего через него сигнала по формуле t(i) -t(i-l) где и (г) - значение входного сигнала в момент времени t(i),y(i -1) — значение выходного сигнала в момент t(i -1). Далее, если вычисленное значение rate пре- вышает значение параметра Rising slew rate (7?), выходная величина определяется по формуле y(i) = y(i-l)+ RM.
Библиотека Simulink — ядро пакета Simulink 313 Если rate меньше, чем значение параметра Falling slew rate (F), то выходная вели- чина определяется так: У -1)+FAL В том случае, когда значения rate находится между значениями Rvl F выходная величина совпадает со входной: j/(i)=w(O- Блок Backlash реализует нелинейность типа зазора. В диалоговом окне настрой- ки блока содержатся два параметра: Deadband widt — величина люфта и Initial out- put — начальное значение выходной величины. Блок Relay работает по аналогии с обычным реле если входной сигнал превыша- ет некоторое предельное значение, то на выходе блока формируется постоянный сигнал. Блок имеет четыре настраиваемых параметра: О Switch on point (Точка включения) — уровень входного сигнала, при превыше- нии которого происходит включение реле; О Switch off point (Точка выключения) — уровень входного сигнала, ниже которо- го реле выключается; О Output when on (Выход при включенном состоянии) — уровень выходной вели- чины при включенном реле; О Output when off (Выход при выключенном состоянии) — уровень выходного сигнала при выключенном реле. Блок Quantizer (Квантователь) осуществляет дискретизацию (квантование) вход- ного сигнала по его величине. Единственный настраиваемый параметр блока — Quantization interval (Интервал квантования) — дискрет сигнала по его уровню. Блок Hit Crossing (Обнаружить пересечение) позволяет зафиксировать состояние, в момент пересечения входным сигналом некоторого значения При возникнове- нии такой ситуации на выходе блока формируется единичный сигнал. Блок име- ет три настраиваемых параметра: О Hit crossing offset — значение, пересечение которого необходимо идентифици- ровать; О Hit crossing direction — направление пересечения, при котором это пересечение должно выявляться; значение этого параметра определяется с помощью спи- ска, содержащего три альтернативы: rising (увеличение), falling (уменьшение), either (в любом направлении); О Show output port (Указать порт выхода) — вид представления блока; выбирает- ся путем установки флажка; О Enable zero crossing (Разрешить пересечение нуля) — разрешение пересечения нуля; устанавливается с помощью флажка При одновременном выполнении условий, которые задаются параметрами Hit crossing offset и Hit crossing direction, на выходе блока формируется единичный сиг- нал. Его продолжительность определяется значением дискрета времени (пара- метр Sample time) блока, который предшествует в модели блоку Hit Crossing. Если этот параметр отсутствует, то единичный сигнал на выходе блока сохраняется до следующего «срабатывания» блока
314 Урок 7 • Основы визуального моделирования динамических систем Блок Coulomb & Viscous Friction (Кулоново и вязкое трение) реализует нелинейную зависимость типа линейной с предварительным натягом. Если входная величина положительна, то выходная величина пропорциональна ей с коэффициентом про- порциональности, равным коэффициенту вязкого трения, и ее значение больше на величину натяга (кулонова, сухого трения). Если входная величина отрица- тельна, то выходная величина также пропорциональна входной (с тем же коэф- фициентом пропорциональности) за вычетом величины натяга. В том случае, когда входная величина равна нулю, выходная величина тоже равна нулю. На- страиваемыми параметрами блока являются величины кулонова трения (натяга) и коэффициента вязкого трения. Раздел User Defined Functions В разделе User Defined Functions (Пользовательские функции) содержатся блоки, назначение которых определяет пользователь (рис. 7.44). На их основе он может создавать собственные S-блоки, выполняющие необходимые ему функции. Рис. 7.44. Блоки раздела User Defined Functions В блок Fen пользователь может ввести любую скалярную функцию от одного (скалярного или векторного) аргумента которая выражается через стандартные функции MATLAB. Выражение функции вводится в окне настройки блока. Для обозначения входного сигнала (аргумента функции) используется символ «и». Блок MATLAB Fen позволяет формировать из входного сигнала не только скаляр- ный, но и векторный выход. В отличие от предыдущего блока, здесь к числу пара- метров настройки добавлен параметр Output width (Ширина выходного сигнала), который определяет количество элементов выходного вектора Если установить значение этого параметра равным -1, то размер выходного вектора совпадет с раз- мером входа. Отдельный i-й элемент выходного вектора в окне параметра MATLAB function задается в виде функции, которая записана на М-языке и предваряется записью u( 1 )=. С помощью блока S-function пользователь может реализовать в виде Simulink- блока любую программу обработки входного сигнала, включая создание сложных
Библиотека Simulink — ядро пакета Simulink 315 моделей систем, описываемых нелинейными дифференциальными или конечно- разностными уравнениями, и обработку дискретных во времени сигналов. Более подробно работа с S-функциями описана в уроке 8. Блок S-function Builder дает возможность пользователю создавать S-функцию в диа- логовом режиме. Раздел Signals Routing В раздел Signals Routing (Пересылка сигналов) включены блоки, обеспечивающие разного рода пересылки сигналов, такие как переключения сигналов, объедине- ние нескольких сигналов в шину, «разводку» сигналов из шины и т. п. Состав этого раздела приведен на рис. 7 45 Рис. 7.45. Блоки раздела Signals Routing Блок Mux (Мультиплексор) выполняет объединение входных величин в единый выходной вектор (шину). При этом входные величины могут быть как скалярны- ми, так и векторными. Длина результирующего вектора равна сумме длин всех векторов. Порядок элементов в векторе выхода определяется порядком входов (сверху вниз) и порядком расположения элементов внутри каждого входа. Блок имеет два настраиваемых параметра: Number of inputs (Количество входов) и Dis- play option (Вид изображения). Последний определяет, в каком виде блок будет изображен на блок-схеме. Блок Demux (Демультиплексор) выполняет обратную функцию — разделяет вход- ной вектор на заданное число компонентов. Он также имеет два настраиваемых
316 Урок 7 • Основы визуального моделирования динамических систем параметра: Number of outputs (Количество выходов) и Display option (Вид изображе- ния) Если заданное число выходов (7V) меньше, чем размер входного вектора (М), блок формирует исходные векторы следующим образом. Первые N -1 выхо- дов будут векторами с одинаковым количеством элементов, равным целой части отношения М (N -1). Последний выход будет иметь размер, равный остатку от деления. Блоки Bus Creator (Построитель шины) и Bus Selector (Разделитель шины) в общем выполняют те же функции, что и, соответственно, блоки Мих и Demux, но имеют большие возможности для перераспределения сигналов внутри шины. Блок Merge (Слияние) объединяет поступающие на его входы сигналы. Блок Selector (Селектор) выбирает во входном векторе и передает на выход толь- ко те элементы, номера которых указаны в поле ввода Elements окна настройки блока (рис 7.46) Рис. 7.46. Окно настройки блока Selector Существенным достоинством блока является то, что значения его настраиваемых параметров выводятся в графической форме на изображении блока. Блок Manual Switch (Ручной переключатель) не имеет настраиваемых параметров. У него два входа и один выход. На изображении блока с помощью перемычки по- казано, какой именно из двух входов подключен к выходу. Блок позволяет вруч- ную переключать входы Для этого необходимо дважды щелкнуть мышью на изо- бражении блока. В результате изменится и изображение — на нем выход уже будет соединен перемычкой с другим входом Блок Multiport Switch (Многопортовый переключатель) имеет не меньше трех входов Первый из них (верхний) является управляющим, остальные — информационны- ми Окно настройки блока содержит один параметр: Number of inputs (Количество входов) — число информационных входов. Номер входа, который соединяется с выходом, соответствует значению управляющего сигнала, поступающего на верхний вход Если это значение является дробным числом, то оно округляется до целого по обычным правилам, если это значение меньше единицы, оно считается равным
Библиотека Simulink — ядро пакета Simulink 317 единице. Кода значение управляющего сигнала больше, чем число информацион- ных входов, то оно принимается равным наибольшему номеру (входы нумеруют- ся сверху вниз, начиная со входа, который находится под управляющим). Блок Switch имеет три входа и один выход. Первый и третий входы являются ин- формационными, а второй — управляющим. Если величина управляющего сигна- ла, который поступает на второй вход, не меньше некоторого граничного значения, заданного в поле Threshold (Порог), то на выход блока передается сигнал с первого входа, в противном случае — сигнал с третьего входа. Блоки From (Принять от), Goto Tag Visibility (Признак видимости) и Goto (Передать в) используются совместно и предназначены для обмена данными между разнооб- разными частями S-модели с учетом досягаемости (видимости) этих данных. Блоки Data Store Read (Чтение данных), Data Store Memory (Запоминание данных), Data Store Write (Запись данных) также используются совместно и обеспечивают не только передачу данных, ио и их сохранение па протяжении моделирования Раздел Signals Attributes Раздел Signals Attributes (Атрибуты сигналов) состоит из блоков, обеспечивающих определение либо изменение некоторых атрибутов сигнала, таких как размер (количество элементов в векторном или матричном сигнале), тип данных, на- чальные условия, скорость передачи данных и т. п (рис 7.47). Рис. 7.47. Блоки раздела Signals Attributes Блок Data Type Conversion предназначен для изменения типа данных входного сиг- нала. Список единственного настраиваемого параметра, Data Туре, позволяет за- дать тип данных double или single Кроме того, для входного сигнала с помощью списка можно установить такие типы данных. О auto — автоматическая установка типа данных; О int8 — целое 1-байтовое число; О uint8 — целое 1-байтовое число только для хранения и считывания; О intl6 — целое 2-байтовое число, О uint!6 — целое 2-баитовое число только для хранения и считывания,
318 Урок 7 • Основы визуального моделирования динамических систем О int32 — целое 4-байтовое число; О uint32 - целое 4-байтовое число только для хранения и считывания; О boolean — булев тип данных. Блок IC (Initial Condition — начальное условие) позволяет установить произволь- ное начальное значение входного сигнала. Он применяется для внешней установ- ки начального условия перед блоком Integrator. Блок Probe (Зонд) служит для определения таких атрибутов сигнала: О Width — ширина сигнала; О Sample time — величина дискрета времени; О Complex signal — наличие комплексных сигналов; О Signal dimensions — размерность сигнала. Блок Width (Размер) определяет длину векторного сигнала, который поступает на его вход. Значения размерности выводятся непосредственно на изображении бло- ка. Настраиваемых параметров блок не имеет. Раздел Ports & Subsystems Большинство блоков раздела Ports & Subsystems (Порты и подсистемы) предна- значены для разработки сложных S-моделей, содержащих модели более низкого уровня (подсистемы), и обеспечивают установление необходимых связей между несколькими S-моделями (рис. 7.48). Подсистема представляет собой S-модель более низкого уровня, в которую могут быть вложены подсистемы разных уровней. Подсистемы могут функционировать лишь в составе основной S-модели, связь с которой осуществляется через вход- ные (In) и выходные (Out) порты подсистемы. Роль подсистем в S-модели та же, что и роль функций (процедур) в основной (вызывающей их) М-программе. При этом входные и выходные величины под- системы определяются соответственно ее входными и выходными портами. Ре- зультаты выполнения действий в подсистеме (выходные величины) в дальней- шем могут быть использованы в вызывающей ее S-модели (или подсистеме более высокого уровня). Применение подсистем позволяет свести составление сложной S модели к созда- нию совокупности вложенных простых подсистем более низкого уровня, что де- лает моделирование более наглядным и упрощает отладку модели Опишем ос- новные блоки раздела. Блоки In (Входной порт) и Out (Выходной порт) обеспечивают информационную связь между подсистемой и вызывающей ее S-моделью. Блоки Enable (Разрешить) и Trigger (Задвижка) предназначены для логического управления работой подсистем S-модели. Блоки Ground (Земля) и Terminator (Ограничитель) могут использоваться как «за- глушки» для тех портов, которые по какой-либо причине не были подсоединены к другим блокам S-модели. При этом блок Ground применяется для входных пор- тов, а блок Terminator — для выходных.
Библиотека Simulink — ядро пакета Simulink 319 Рис. 7.48. Блоки раздела Ports & Subsystems Блок Subsystem (Подсистема) является заготовкой для создания подсистемы. Двойной щелчок на его изображении в блок-схеме приводит к появлению на эк- ране окна, в котором размещена блок-схема, состоящая лишь из одного входного порта, соединенного с одним выходным портом (рис. 7.49). Это служит напомина- нием о том, что создаваемая пользователем подсистема должна обязательно содер- жать соединенные между собой (возможно, через другие блоки) входные и выход- ные порты. Рис. 7.49. Окно заготовки блока Subsystem В открывшемся окне пользователь строит блок-схему подсистемы по обычным правилам создания S-модели, а затем записывает ее на диск. Размещение допол- нительных входных и выходных портов в подсистеме приведет к появлению на изображении блока Subsystem дополнительных входов и выходов. При этом ря- дом с соответствующими входами и выходами блока Subsystem на изображении блока в S-модели появятся надписи, сделанные на входных и выходных портах подсистемы.
320 Урок 7 • Основы визуального моделирования динамических систем Раздел Look-Up Tables В разделе Look-Up Tables (Табличные функции) (рис. 7.50) сосредоточены блоки, формирующие выходной сигнал, зависимость которого от входного сигнала зада- на с помощью таблицы соответствий. Блоки осуществляют линейную интерполя- цию по содержащимся в ней значениям. Рис. 7.50. Блоки раздела Look-Up Tables Блок Look-Up Table выполняет линейную интерполяцию входного сигнала в соот- ветствии с заданной табличной функцией. Блок Look-Up Table(2-D) осуществляет двумерную линейную интерполяцию двух входных сигналов. Раздел Model Verification Раздел Model Verification (Проверка модели) содержит блоки, выполняющие провер- ку некоторых статических и динамических характеристик модели (рис. 7.51). Рис. 7.51. Блоки раздела Model Verification
Построение блок-схем 321 Раздел Model-Wide Utilities В разделе Model-Wide Utilities (Утилиты расширения модели) сосредоточены бло- ки, позволяющие линеаризовать динамическую модель и оформить на нее доку- ментацию (рис. 7.52). Рис. 7.52. Блоки раздела Model-Wide Utilities Построение блок-схем Рассмотрим операции, с помощью которых можно формировать блок-схемы сложных динамических систем. Выделение объектов При создании и редактировании S-модели используются такие операции, как ко- пирование или изъятие блоков и линий. Прежде чем выполнять эти операции, необходимо выделить (выбрать) объект. Для выделения отдельного объекта нужно щелкнуть на нем один раз. В результате по углам выделенного блока или в начале и конце линии появятся маленькие черные квадратики. При этом снимается выделение со всех ранее выделенных объектов Если щелкнуть на блоке второй раз, он становится невыделенным. На рис. 7.53 показан результат выбора соединительной линии, а на рис. 7 54 — ре- зультат выбора блока Clock. Рис. 7.53. Выбрана линия Рис. 7.54. Выбран блок Clock
322 Урок 7 • Основы визуального моделирования динамических систем Чтобы выделить несколько объектов, следует, удерживая нажатой клавишу Shift, щелкнуть на каждом из них, затем отпустить клавишу. Именно таким способом выделены блоки Signal Generator, Constant и XY Graph (рис. 7.55). Несколько объектов можно выделить также с помощью прямоугольной рамки. Для этого необходимо щелкнуть мышью в точке, которая будет служить углом рамки, а затем, удерживая кнопку мыши нажатой, протянуть указатель в направ- лении диагонали прямоугольника В результате вокруг выделяемых объектов долж- на появиться пунктирная рамка Когда все нужные объекты будут охвачены рам- кой, необходимо отпустить кнопку мыши. На рис. 7.56 показан процесс выделе- ния блоков Signal Generator, Constant и Clock с помощью рамки. Е.& У*** iynefetiori 1<хй Ц^р 1-2 о! ►' * F |1СОХ ‘ ix«c5S ec-Dac Рис. 7.55. Результат выделения нескольких блоков Рис. 7.56. Выделение нескольких блоков с помощью рамки Выделение всей модели, то есть всех объектов в активном окне блок-схемы, осу- ществляется одним из двух способов- путем вызова команды Edit ► Select All (Прав- ка ► Выбрать все) в окне блок-схемы или посредством нажатия клавиш Ctrl+A. Операции с блоками Копирование блоков из одного окна в другое В процессе создания и редактирования модели необходимо копировать блоки из биб- лиотеки или из другой модели в текущую модель Для этого достаточно открыть нужный раздел библиотеки или окно модели-прототипа и перетащить нужный блок с помощью мыши в окно создаваемой (редактируемой) модели. Скопированный блок получает те же значения настраиваемых параметров, что и блок-оригинал. Копировать блоки можно и другим способом. Для этого необходимо выполнить следующие действия. 1. Выделить блок, который нужно скопировать 2. Вызвать команду Edit ► Сору (Правка ► Копировать). 3. Сделать активным окно, в которое нужно скопировать блок. 4. Вызвать в нем команду Edit ► Paste (Редактирование ► Вставить). Каждому из скопированных блоков автоматически присваивается имя. Первый из них будет иметь то же имя, что и блок в библиотеке, а каждый следующий
Построение блок-схем 323 блок такого типа — то же имя с добавлением порядкового номера. Пользователь может переименовать блок (см. далее). Перемещение блоков в модели Чтобы переместить блок внутри модели с одного места на другое, достаточно пе- ретянуть его с помощью мыши. При этом автоматически будут перерисованы ли- нии связей перемещенного блока с другими. Для одновременного перемещения нескольких блоков вместе с соединительны- ми линиями следует выделить блоки и линии рамкой, а затем перетянуть с помо- щью мыши один из выделенных блоков в нужное место. Остальные блоки займут новые места; все относительные расстояния при этом сохранятся (рис. 7.57). Рис. 7.57. Результат перемещения блоков, выделенных с помощью рамки Дублирование блоков внутри модели Чтобы скопировать блоки внутри модели, нужно, удерживая нажатой клавишу Ctrl, установить указатель мыши на блок, который необходимо скопировать, и пе- ретянуть его в другую позицию. Того же результата можно достичь, если перетя- нуть блок в новое положение, используя правую кнопку мыши. На рис. 7.58 пред- ставлен результат копирования блоков Scope и XY Graph. Рис. 7.58. Результат копирования блоков
324 Урок 7 • Основы визуального моделирования динамических систем Установка параметров блока Параметры блока устанавливаются в диалоговом окне его настройки. Для тою чтобы вызвать это окно, необходимо дважды щелкнуть на изображении блока в блок-схеме. Удаление блоков Чтобы удалить ненужные блоки из блок-схемы, нужно выделить эти блоки и на- жать клавишу Delete или Backspace. Для удаления блоков применяется также ко- манда Edit ► Clear (Правка ► Очистить) или Edit ► Cut (Правка ► Вырезать) окна блок- схемы Если выбрать вторую команду, то в дальнейшем удаленные блоки можно будет скопировать обратно в модель, воспользовавшись командой Edit ► Paste (Прав- ка ► Вставить) окна блок-схемы. Отсоединение блока Для отсоединения блока от линий связи следует поместить указатель на изображе- нии блока, нажать клавишу Shift и, не отпуская ее, перетянуть блок в другое место. Изменение ориентации блока В обычном изображении блоков сигнал проходит сквозь блок слева направо (по левую сторону размещены входы блока, а по правую сторону — выходы). Чтобы изменить ориентацию блока, нужно сделать следующее. 1. Выделить блок, который нужно повернуть. 2. Открыть меню Format (Формат) в окне блок-схемы и выбрать команду Flip Block (Перевернуть блок) — чтобы повернуть блок на 180 или команду Rotate Block (Повернуть блок) — для поворота блока по часовой стрелке па 90 . На рис. 7.59 показан результат применения команды Rotate Block (Перевернуть блок) к блоку Constant и команд Rotate Block (Перевернуть блок) и Flip Block (По- вернуть блок) — к блоку Signal Generator Рис. 7.59. Результат изменения ориентации блоков
Построение блок-схем 325 Изменение размеров блока Чтобы изменить размеры блока, необходимо выполнить такие действия. 1. Выделить нужный блок. 2. Установить указатель мыши на одну из угловых меток блока. Возле этой метки должен появиться указатель в виде двунаправленной стрелки, расположенной под углом 45°. 3. Захватить эту метку мышью и перетянуть в новое положение. Противополож- ная метка блока останется неподвижной. На рис. 7.60 показан результат применения вышеописанных операций для растяги- вания блока XY Graphl, а также процесс увеличения размеров блока Scope. Рис. 7.60. Результат растягивания изображения блоков Изменение имен блоков и манипуляции с ними Все имена блоков в модели должны быть уникальными и включать как минимум один символ. Если блок ориентирован слева направо, то по умолчанию имя рас- полагается под ним, если блок ориентирован справа налево — выше блока, а если сверху вниз или снизу вверх — по правую сторону блока. Чтобы изменить имя блока, следует щелкнуть на нем, а потом, как обычно, вос- пользовавшись клавиатурой, ввести новое имя или отредактировать существующее. Для изменения шрифта необходимо выделить блок, вызвать команду Format ► Font (Формат ► Шрифт) в окне модели и в раскрывшемся списке выбрать нуж- ный шрифт. Изменить местоположение имени выделенного блока можно двумя способами: пе- ретянуть имя на противоположную сторону с помощью мыши или воспользо- ваться командой Format ► Flip Name (Формат ► Развернуть имя) окна модели. Удалить имя блока можно с помощью команды Format ► Hide Name (Формат ► Скрыть имя) окна модели. Чтобы потом восстановить отображение имени блока, следует воспользоваться командой Format ► Show Name (Формат ► Показать имя).
326 Урок 7 • Основы визуального моделирования динамических систем Проведение соединительных линий Сигналы в модели передаются по линиям. Каждая линия может передавать либо скалярный, либо векторный сигнал Линия соединяет выходной порт одного бло- ка с входным портом другого или с входными портами нескольких блоков через разветвление линии. Создание линии между блоками Для соединения выходного порта одного блока со входным портом другого сле- дует выполнить такие действия. 1. Установить указатель мыши в область выходного порта первого блока; при этом указатель должен принять вид крестика. 2. Удерживая нажатой левую кнопку мыши, переместить указатель ко входному порту второго блока. 3. Отпустить кнопку мыши В результате вместо символов портов появится со- единительная линия, стрелка на конце которой будет указывать направление передачи сигнала Именно таким образом соединен на рис 7 60 выход блока Constant со входом блока XY Graph. Линии можно проводить как от выходного порта ко входному, так и наоборот. Описанным выше способом можно создать соединительные линии, включающие липп» горизонтальные и вертикальные сегменты. Создание разветвления линии Ответвляющаяся линия начинается от существующей и передает ее сигнал ко входному порту другого блока. Таким образом, разветвление линий дает возмож- ность организовать передачу одного сигнала нескольким блокам. Для создания ответвления от линии нужно выполнить такие действия. 1. Щелкнуть в той точке линии, от которой должна ответвляться другая линия. 2. Нажав и удерживая правую кнопку мыши, провести линию ко входному пор- ту нужного блока, отпустить кнопку мыши (см. рис 7.61). Рис. 7.61. Создание разветвления линии
Построение блок-схем 327 Создание сегмента линии Линии могут быть нарисованы по сегментам В этом случае указатель устанавли- вается в конец сегмента и с помощью мыши рисуется следующий сегмент. Таким образом, например, соединены блоки Signal Generator и XY Graph на рис. 7.62. и untitled ж ___ _______ fie £<* У»* 5»nuistjor> Joofc Це!р ЪТог и а i х а--* М*' 1 Т...............' iFiiwdSt^aete, Рис. 7.62. Линия, соединяющая блоки Signal Generator и XY Graph, нарисована по сегментам Перемещение сегмента линии Для перемещения отдельного сегмента линии необходимо выполнить следующее 1. Установить указатель на сегмент, который нужно передвинуть. 2. Нажать и удерживать левую кнопку мыши; при этом указатель должен при- нять вид четырехнаправленной стрелки. 3. Передвинуть указатель к новому положению сегмента и отпустить кнопку мыши. Сегмент, который соединен с портом блока, передвинуть нельзя. На рис. 7.63 показан результат перемещения вертикального сегмента линии, ко- торая соединяет блоки Signal Generator и XY Graph. Яе £dt yiew £imutatian Fjymet Todt ЦеЬ i 10CT' FwedStepOit&ete 4 Рис. 7.63. Сегмент линии перемещен вверх
328 Урок 7 » Основы визуального моделирования динамических систем Разделение линии на сегменты Для того чтобы разделить линию на два сегмента, необходимо выполнить сле- дующие действия. 1. Выделить линию и установить указатель мыши в ту ее точку в которой линия должна быть разделена на два сегмента. 3. Удерживая нажатой клавишу Shift, нажать и удерживать левую кнопку мыши; указатель при этом примет вид кружка, и на линии образуется излом. 4. Передвинуть указатель в новое положение и отпустить кнопку мыши и клави- шу Shift. Результат выполнения этих действий показан на рис. 7.64, где линия, соединяющая блоки Constant и Ссоре, разделена на два сегмента. Для того чтобы передвинуть из- лом линии, достаточно на блок-схеме перетянуть точку излома в новое положение. Рис. 7.64. Линия разделена на два сегмента Метки сигналов Для наглядности оформления блок-схемы и удобства пользования ею линии можно снабжать метками протекающих по ним сигналов. Метка размещается выше или ниже горизонтальной линии либо слева или справа от вертикальной линии. Мет- ка может быть расположена в начале, в конце линии или в любой другой ее точке. Создание меток сигналов и манипулирование ими Чтобы создать метку сигнала, надо дважды щелкнуть на сегменте линии и ввести текст метки (рис 7.65). При выполнении щелчка следует соблюдать точность, иначе вместо метки будет создан комментарий к модели. Signal Generator Рис. 7.65. Метка «Время» на соединительной линии
Построение блок-схем 329 Для перемещения метки нужно просто перетянуть ее с помощью мыши в новое место Чтобы скопировать метку, следует, нажав и удерживая клавишу Ctrl, пере- тянуть метку в новое положение на линии или избрать другой сегмент линии, на котором нужно установить копию метки, и дважды щелкнуть на нем. Если необхо- димо отредактировать текст метки, надо щелкнуть на ней и потом произвести со- ответствующие изменения, как в обычном текстовом редакторе Чтобы удалить метку, нажмите и удерживайте клавишу Shift, выделите метку и затем восполь- зуйтесь клавишей Delete или Backspace Распространение меток сигналов Распространение меток сигналов — это процесс автоматического переноса имени метки на сегменты одной линии, разорванные блоками From/Goto и Мих Для того чтобы распространить метки создайте во втором и следующих сегмен- тах линии метки с именем < > После выполнения команды Edit ► Update Diagram (Правка ► Обновить схему) в окне модели или нажатия клавиш Ctrl+D в указан- ных сегментах автоматически будут проставлены метки (рис. 7.66). ConrtanU ConrtjntZ Рис. 7.66. Распространение меток: подготовка (слева) и результат (справа) Комментарии Комментарии дают возможность снабжать блок-схемы текстовой информацией о модели и отдельных ее составляющих Комментарии можно размещать в любом свободном месте блок-схемы (рис 7 67). Это просто пример оформлении блок-схемы Conrtant2 Рис. 7.67. Пример размещения комментария на блок-схеме Для создания комментария дважды щелкните в любом свободном месте блок- схемы, а потом введите комментарий в прямоугольную рамку. Для перемещения комментария в другое место следует перетянуть его на это место с помощью мыши
330 Урок 7 * Основы визуального моделирования динамических систем Чтобы скопировать комментарий, нужно нажать клавишу Ctrl и, удерживая ее, пере- тянуть комментарий в новое место. Для редактирования комментария надо щелк- нуть на нем, а потом внести нужные изменения, как в обычном текстовом редак- торе. Чтобы изменить при этом шрифт, его размер или стиль, следует выделить фрагмент текста комментария, подлежащий изменению, вызвать команду Format ► Font (Формат ► Шрифт) в окне блок-схемы, выбрать в появившемся диалоговом окне название шрифта, его размер, стиль и т. п., а затем щелкнуть на кнопке ОК. Удалить комментарий можно следующим образом: выделите его с помощью рам- ки и нажмите клавишу Delete или Backspace. Создание подсистем Сложную блок-схему модели можно существенно упростить путем группировки блоков. Последние можно объединить в подсистемы. Использование подсистем дает следующие преимущества: сокращается количество блоков, которые выводят- ся в окне модели, а также появляется возможность объединять в одну группу (под- систему) функционально связанные блоки и создавать иерархические блок-схемы Подсистему можно создать двумя способами: добавив блок Subsystem или сгруп- пировав существующие блоки. Чтобы создать подсистему первым способом, нужно сделать следующее. 1. Перетащить блок Subsystem из раздела Ports & Systems в окно модели. 2. Открыть окно блок-схемы блока Subsystem, дважды щелкнув на его изображе- нии в блок-схеме S-модели 3. В пустом окне блок-схемы подсистемы создать подсистему, используя блоки In и Out для представления ее входов и выходов. Если блок-схема уже содержит блоки, которые нужно объединить в подсистему, то последнюю можно образовать таким образом 1. Выделить с помощью рамки блоки и соединяющие их линии, которые нужно включить в состав подсистемы. 2. Вызвать команду Edit ► Create Subsystem (Правка ► Создать подсистему) в окне мо- дели; все выделенные блоки будут заменены одним блоком Subsystem (рис. 7.68). Рис. 7.68. Создание подсистемы путем группировки блоков: процесс (слева) и результат (справа)
Примеры создания S-моделей 331 Если открыть окно блока Subsystem, дважды щелкнув на нем, отобразится блок- схема подсистемы (рис. 7 69). Как видите, Simulink добавил блоки In и Out для того, чтобы образовать входы и выходы подсистемы. Gain Рис. 7.69. Подсистема, созданная из имеющихся блоков Сохранение и вывод на печать блок-схемы S-модели Для записи модели (блок-схемы) на диск нужно вызвать команду Save (Сохра- нить) или Save As (Сохранить как) из меню File (Файл) окна модели Simulink за- писывает в указанную директорию файл с заданным (введенным с клавиатуры) именем, присваивая ему расширение .mdl. Чтобы распечатать модель (блок-схему) на принтере, нужно воспользоваться ко- мандой File ► Print (Файл ► Печать) окна модели Довольно интересной является возможность вставки блок-схемы в документ тек- стового редактора Word. Для этого следует использовать команду Copy Model to clipboard (Копировать модель в буфер) меню Edit (Правка) окна модели, которая помещает в буфер обмена содержимое окна модели. Если после этого перейти в ок- но текстового редактора и нажать клавиши Ctrl+V, в открытом документе редакто- ра появится изображение блок-схемы модели. Именно таким образом получены рис. 7 64-7.69. римеры создания S-моделей При создании собственных S-моделей пользователь должен решить ряд проблем, возникающих в процессе построения блок-схемы заданной математической модели. Моделирование поведения физического маятника Опишем процесс построения S-модели на примере задачи моделирования пове- дения физического маятника при гармонической вибрации точки его опоры. Пользуясь результатами ранее проведенных преобразований (см раздел -«Проце- дура вычисления правых частей ОДУ маятника» урока 2), исходное уравнение движения маятника представим в таком виде: ф"+sin(p = 5(т, ф, <р'), (7.1) где 9. 9') = -2 - (7 2 у - lnmx sin (vx + ех ) cos ф + пту sin (vt + гу ) зшф],
332 Урок 7 • Основы визуального моделирования динамических систем Безразмерные величины £ и v определяются следующими выражениями: „ R со Imgl =,______; v=—; соо = I— 2 Jmgl ®о V J Исходными (задаваемыми) параметрами для моделирования будем считать: 1) параметры самого маятника, к ним в анализируемом случае относится только относительный коэффициент затухания 2) параметры, характеризующие внешнее воздействие, сюда входят: амплитуды виб- роперегрузок в вертикальном пту и горизонтальном птпх направлениях; отно- сительная (по отношению к частоте собственных малых колебаний маятника) частота вибрации точки опоры v; начальные фазы гу и гх вибрации точки опоры; 3) начальные условия движения маятника, то есть начальное отклонение (р от вертикали и начальная безразмерная угловая скорость маятника ср' = <р/со0. К выходным (моделируемым) величинам будем относить текущий угол отклоне- ния маятника от вертикали <р(т)и его безразмерную угловую скорость <р'(т) Запишем уравнение (7.1) несколько в иной форме: tp" = 5(т, ср, ср') -sirup. (7.3) Прежде чем приступить к составлению S-модели, отметим одну очень важную особенность взаимодействия рабочего пространства MATLAB и среды Simulink с ) ВНИМАНИЕ Все рабочее пространство системы MATLAB доступно для исполняемых S-мо- делей среды Simulink. Поэтому при указании значений настраиваемых пара- метров S-блоков можно вместо числовых значений вводить имена (иденти- фикаторы) переменных, существующих в данный момент времени в рабочем пространстве MATLAB, и даже выражения, записанные на М-языке. Это значительно облегчает сос авление блок схем поскольку вы можете в рабочем пространстве формировать массив переменных, а затем при составлении блок-схем выражать через эти переменные значения настраиваемых параметров блоков. В дальнейшем будем применять обозначения исходных и искомых величин в ра- бочем пространстве MATLAB, приведенные в табл. 7.1. Таблица 7.1. Обозначения, используемые, в формулах и в программе Формулы Рабочее пространство Примечание ср(О) НО Начальное значение угла отклонения маятника от вертикали Ф'(О) fitO Начальная безразмерная угловая скорость маятника dz Относительный коэффициент затухания ^тх nmx Амплитуда виброперегрузки вдоль горизонтальной оси ^ту nmy Амплитуда виброперегрузки вдоль вертикальн >й оси V nu Относительная частота вибрации точки подвеса ex Начальная фаза виброперегрузки в горизонтальном направлении ey Начальная фаза виброперегрузки в вертикальном направлении
Примеры создания S-моделей 333 Предположим, что тем или иным способом этим переменным присвоены значе- ния, и они находятся в рабочем пространстве. При построении блок-схемы, соответствующей этому уравнению, будем руковод- ствоваться следующими соображениями. Если сформировать правую часть уравнения по «известным» процессам <р(т) и S(x, <р, ср'), то станет известным угловое ускорение <р"(т). Если затем проинтегри- ровать ускорение, можно получить угловую скорость <р'(т). Наконец проинтегриро- вав и ее, можно получить угол <р(т)как функцию времени Две последние получен- ные величины (процессы) можно будет использовать для формирования правой части уравнения (7 3). Итак, при формировании блок-схемы, осуществляющей численное интегрирование уравнения (7.1), поступим так. В основу блок-схемы положим два последовательно соединенных интегратора (блоки Integrator); на вход первого интегратора подадим угловое ускорение, а в качестве начального условия используем начальное значе- ние угловой скорости. Выходом первого блока будет текущая угловая скорость <р'(т); эту величину следует подать на вход второго интегратора с начальным ус- ловием в виде начального значения угла <р(0). Выходом второго блока будет иско- мый процесс <р(т). Оформим описанную часть блок-схемы в виде подсистемы. Для этого в пустое окно блок-схемы перетянем из раздела Ports & Subsystem блок Subsystem и дважды щелкнем на нем В появившемся окне соберем блок-схему подсистемы, показан- ную на рис. 7 70, и назовем ее Маятник Рис. 7.70. Подсистема Маятник При настройке первого блока Integrator в качестве значения его параметра Initial condition укажем fitO. Во втором интеграторе этому параметру присвоим значе- ние f 10. Выходными величинами созданной подсистемы являются текущий угол ср откло- нения маятника от вертикали и его текущая безразмерная угловая скорость <р' Используя их, можно теперь аналогично сформировать подсистему, вычисляю- щую текущее значение безразмерного «момента» внешних сил, действующих
334 Урок 7 • Основы визуального моделирования динамических систем на маятник при вибрации точки его опоры. Назовем новую подсистему Внешние моменты сил (рис. 7.71). Рис. 7.71. Подсистема Внешние моменты сил Видно, что подсистема осуществляет действия по формированию выражения (7.2). Ее выходной порт выдает величину 5(ф, ф', т). Теперь, используя две созданные подсистемы, можно собрать основную блок-схе- му, реализующую уравнение (7.3). Она изображена на рис. 7.72. Назовем ее FM_21. Рис. 7.72. Основная блок-схема FM_21 Можно заметить, что величина dz (относительный коэффициент затухания) использована в блоке Gain, который расположен внизу блок-схемы. Кроме того, при формировании перегрузок по горизонтальной и вертикальной осям (блоки
Примеры создания S-моделей 335 Вертик. вибрация и Горизонт, вибрация) в параметрах настройки использованы пе- ременные nmx, nmy, nu, ex и ey (рис. 7.73). Рис. 7.73. Диалоговое окно настройки блока Горизонт, вибрация Перед началом моделирования следует задать на вкладке Solver (Решатель) (рис. 7.74) параметры численного интегрирования дифференциального уравнения маятника. Рис. 7.74. Установка параметров численного интегрирования Установим интервал моделирования (по безразмерному времени) от 0 (значение, введенное в поле Start time) до 2*р1*20 (значение в поле Stop time), что соответствует двадцати периодам собственных малых колебаний маятника. Зададим тип решателя (метода интегрирования) с фиксированным шагом (значение Fixed-step в поле
336 Урок 7 • Основы визуального моделирования динамических систем Туре), метод интегрирования — Рунге-Кутта 4-го порядка (значение ode4(Runge-Kutta)), а шаг интегрирования — 0,01 с (значение 0.01 в поле Fixed step size). Теперь практически все готово к моделированию. Осталось лишь обеспечить при- своение значений всем переменным, которые были использованы в параметрах настройки блоков. Для этого составим небольшую программу FM_21_dat.m: % FM_21_dat % Программа ввода данных для S-модели FM_21 % Лазарев Ю. Ф. 23-01-2004 nmy = 1; птх = 0: еу = 0: ех = 0: пи = 2.3; dz = 0.1: fiO - 160*pi/180; fitO = 0; Данные, введенные в файле FM_21_dat.m, соответствуют вертикальной вибрации основания с частотой, которая в 2,3 раза больше частоты собственных незатухаю- щих колебаний маятника, амплитудой 1g по ускорению и при начальном откло- нении маятника от вертикали 160е. Вызвав программу FM_21_dat.m из командного окна MATLAB, а затем S-модель FM_21 на моделирование из окна се блок-схемы, получим в обзорных окнах моде- ли результаты, представленные на рис. 7.75. в Рис. 7.75. Результаты моделирования, представленные в различных обзорных окнах модели FM_21: а — в окне XY Graph; б — в окне XY Graphl; в — в окне Scope
Примеры создания S-моделей 337 В окне блока XY Graph (см. рис. 7.75, а) выводится график зависимости угла откло- нения маятника от времени. В окне блока XY Graphl (см. рис. 7.75, б) изображен фазовый портрет маятника при выбранных параметрах маятника и возмущений, а окне блока Scope (см. рис. 7.75, в) представлены графики зависимости угла и уг- ловой скорости от времени. Результаты полностью соответствуют полученным ранее (см. разделе «Программа моделирования движения маятника» урока 2) и иллюстрируют возникновение пара- метрических колебаний маятника при вертикальной вибрации точки его подвеса. Изменяя данные настройки в файле FM_21_dat.m, можно проводить исследования поведения маятника при различных значениях входных параметров. Теперь становятся очевидным преимущества и недостатки моделирования дина- мических систем с помощью пакета Simulink в сравнении с аналогичными иссле- дованиями с использованием программы MATLAB. К числу приемуществ относятся такие: О блок-схема уравнений движения значительно более наглядна, чем код проце- дуры вычисления для правых частей, поскольку благодаря ей становится понят- ным физическое содержание отдельных блоков и их взаимосвязей; О при проведении моделирования в среде Simulink исчезает потребность в орга- низации процесса численного интегрирования дифференциальных уравнений и вывода результатов в графической форме. Наличие некоторых недостатков объясняется тем, что форма вывода результатов в графической форме в Simulink не обладает желаемой гибкостью: О нельзя добавить собственные надписи в заголовок и по осям графика; О нельзя установить сетку координатных линий в графическом окне блока XY Graph; О отсутствуют средства вывода текстовой информации на поле графика — это делает графическое представление безадресным. Последний недостаток существен. Он может быть устранен предусмотренными в пакете Simulink средствами. Например, можно записать полученные значения исходных величин в МАТ-файл (посылая их на блок То File), а потом создать и ис- пользовать программу, которая бы осуществляла считывание данных, записанных в МАТ-файле, и формирование на этой основе графического изображения в окне фигуры по образцу, приведенному в разделе «Графическое оформление результа- тов» урока 2. Такой способ моделирования рассмотрен в следующем разделе. Неудобством применения обзорного окнаХУ Graph является также необходимость предварительной установки диапазонов изменения обеих входных величин по осям графика. Если эти диапазоны установлены неверно, в обзорном окне может вообще не возникнуть изображение графика, или появится такой его фрагмент, по которому нельзя сделать правильный вывод о поведении системы. А при ис- следовании системы часто невозможно заранее предусмотреть диапазоны изме- нений величин.
338 Урок 7 * Основы визуального моделирования динамических систем Моделирование движения трех тел под действием сил гравитации Рассмотрим классическую задачу небесной механики — определение движения трех материальных тел под действием сил гравитации с точки зрения численного моделирования в среде Simulink. Рассмотрим три изолированные материальные точки с массами соответственно т1} т2 и т3. Обозначим радиус-векторы этих точек относительно некоторой не- подвижной в инерциальном пространстве точки О через Rt, R2 и R3. Дифферен- циальные уравнения движения этих трех точек могут быть записаны в следую- щем виде: r/2Rt ^тщтп2 р ^гщгп3 . 9 - ч К21 Ь о к13> dt2 R31 №2 — 2 = -gB^.r21 + g^^-R32; (7.4) dt2 Rh Rf2 rf2R3 . r^h r> I dt R32 R$i где обозначено R2i =R2 -RtJ R32 = Кз -Кг! R13 =Ri -Кз- Исследование уравнений движения (и особенно численное) всегда удобнее про- изводить по уравнениям, приведенным к безразмерной форме, — в этом случае сокращается число параметров, от которых зависит решение. Приведем уравнения (7.4) к безразмерной форме. Для этого в качестве базовых используем такие физические величины: О G — гравитационная постоянная, имеющая размерность L3M-1 Т'2 (L — едини- ца длины, М — единица массы, Т — единица времени); О гщ — масса первого тела, которое будем считать основным; им обычно являет- ся наиболее массивное тело (например, Солнце, которое находится под дейст- вием гравитационного притяжения Земли (второе, среднее по массе, тело) и Луны (третье, наименее массивное, тело)); размерность — М; О Т?2Ю “ начальное значение расстояния между первым и вторым телами, раз- мерность — L. Теперь введем безразмерные величины: 1) безразмерная масса первого тела: Mi = = 1; 2) безразмерная масса второго тела: ^2=^/^; (7-5) 3) безразмерная масса третьего тела из = ^зМ; (7.6)
Примеры создания S-моделей 339 4) безразмерные длины радиус-векторов: /?< /?2 Я3 Pi =——; р2 =——> Рз =—— Г 1 р га р ’ го р Л210 Л210 к210 5) безразмерные радиус-векторы равны _ R, . _ Rv. Ъю J «210 ’ 6) безразмерное время определим следующим образом: V ^210 (7-7) (7.8) (7-9) Последняя формула означает, что в качестве единицы измерения времени ис- пользуется величина I р3 То=2плр^. (7.10) у Стщ Для системы Солнце-Земля-Луна она равна году. Принятое безразмерное время таково, что безразмерный период кругового обраще- ния второго тела вокруг первого равен 2 л. С учетом этого уравнения (7.4) в безразмерной форме приобретут такой вид: J2rt _ dx2 ' M2r ИЗ r . — r21 r13, r21 r31 < d2ri = dx2 1 М3 —o~ r2i + —^-r32; Г21 r32 (7-И) d2r3 _ [a2 ' H2 1 r32 + —3~ r13 r32 r31 где Гу =Г,‘ -г,; Ру =|г,у|. (7-12) Три вектора (7.12) связаны между собой следующим соотношением: г13 + г32 + Г21 - 0, (7.13) Уравнения движения удобнее полностью выразить через векторы (7.12), характе- ризующие положение тел относительно друг друга. Для этого по очереди вычтем уравнения (7.11) одно из другого. Из полученных трех уравнений исключим век- тор г13. Останутся два уравнения: 'rf2r2i . dx2 1 1 +M2 < P21 Из/ P31 j Г21 +М3 <Р32 Рз1 > Г32> j2 « r32 М2 +M3 1 X / 1 1 'I I dx2 ' < P32 + Гз2 + Р31 J к Р21 Р31 у г21- (7.14)
340 Урок 7 • Основы визуального моделирования динамических систем Эти уравнения положим в основу моделирования. Следует также принять во вни- мание, что Р21 (0) = 1. При составлении S-модели будем использовать переменные рабочего простран- ства, представленные в табл. 7.2. Таблица 7.2. Обозначения, используемие в ф рмулах и при составлении S-модели Формула Рабочее пространство Примечание £1 f II см zl mu2 Отношение масс второго и первого тела т3 Мз =— rrh mu3 Отношение масс третьего и первого тела x2i(0)' yzi(0)'22i(0) Х210, Y210, Z210 Начальные безразмерные координаты второго тела относительно первого лз2(0)'Узг(0)/2з2(0) Х320, Y320, Z320 Начальные безразмерные координаты третьего тела относительно второго t4u(0),Hv(0).W0) V21x, V21y, V21z Начальные безразмерные проекции вектора скорости второго тела относительно первого W).ife,(0),W0) V32x, V32y, V32z Начальные безразмерные пр екции вектора ск рости третьего тела относительно второго Вариант S-модели под названием GR_3_TELmdl приведен на рис. 7.76. Она вклю- чает подсистемы — llravnenye 21, Uravnenye 32, Prav 21, Prav 32, RV13 и Absolute Coor- dinates и блок To File. Последний обеспечивает запись результатов моделирования в МАТ-файл GR_3_TELmat, в котором они сохраняются в матрице под именем RV. Pmv32 Рис. 7.76. Блок-схема S-модели GR_3_TEL.mdl
Примеры создания S-моделей 341 Основные действия по численному интегрированию дифференциальных уравнений (7.14) сосредоточены в подсистемах Uravnenye 21 и Uravnenye 32. Здесь (рис. 7.77) производится двойное интегрирование ускорений, а также вычисляется текущее расстояние (длина вектора) между первым и вторым телами. Входной величиной обеих подсистем является векторная величина, элементы которой представляют собой проекции вектора ускорения на оси X, Y и Z. Выходных величин две. Одна из них — вектор из трех элементов, являющихся текущими проекциями радиус-век- тора на те же оси. Второй выход — скалярная величина, длина этого радиус-вектора. [Подсистем^войнш^нтегрировани^скорения^ Рис. 7.77. Блок-схема подсистемы Uravnenye 21 Блок, осуществляющий вычисление длины вектора по его составляющим, реали- зован на основе блока Fen из раздела User-Defined Functions. у ^ПРИМЕЧАНИЕ При написании арифметических выражений в окнах настройки блоков Simu- link используются правила М-языка. Однако указание индексов для векторов и матриц должно осуществляться в квадратных скобках (а не в круглых, как в М-языке). Характерной и важной особенностью этих подсистем, отличающей их от исполь- зованной ранее подсистемы Маятник (см. рис. 7.70), является то, что в них интег- рируется не скалярная функция времени, а векторная, состоящая сразу из трех скалярных величин. Например, в подсистеме Uravnenye 21 производится одновре- менное интегрирование ускорений х21, г/21 и z2i> достигаемое за счет лишь двух блоков Integrator. Для этого достаточно в блоке настройки интеграторов ввести в качестве начального условия не одну величину, а вектор из трех величин, каждая из которых является начальным условием соответствующего элемента вектора, поступающего на вход интегратора. Например, вектором начальных условий для первого интегратора является [V21x.V21y.V21z] (рис. 7.78). Аналогично, во втором интеграторе установлен вектор [X210.Y210.Z210] начальных условий. То же сделано в подсистеме Uravnenye 32, которая вычисляет текущие состав- ляющие вектора г32, полученные двойным интегрированием ускорения г32. Здесь в интеграторах начальные условия установлены в виде векторов [V32x.V32y.V32z] и [X320.Y320.Z320]. Подсистемы Prav 21 и Prav 32 формируют правые части первого и второго уравне- ний (7.14), то есть ускорения в виде вектора из трех элементов. Выходная величина у этих подсистем одна. Например, в подсистеме Prav 21 (рис. 7.79) выходом являет- ся вектор Uskor21, составляющие которого — проекции ускорения на оси X, YnZ.
342 Урок 7 • Основы визуального моделирования динамических систем Входами являются два вычисленных ранее вектора RV21 и RV32, состоящие из про- екций радиус-векторов г21 и г32,и три скалярные величины, равные текущим зна- чениям длин трех радиус-векторов, соединяющих три тела. Рис. 7.78. Окно настройки первого блока Integrator подсистемы Uravnenye 21 |Подсистем^форш^Ровани^скорениял13менеж^^адиус-вектор^2^ RV32 Product! Рис. 7.79. Блок-схема подсистемы Prav 21 В подсистеме Prav 21 используются три блока типа Fen для вычисления коэффи- циентов при векторах в правой части первого уравнения (7.14) и два блока Pro- duct для умножения вектора на скалярный коэффициент.
Примеры создания S-моделей 343 Блок-схема подсистемы RV13, вычисляющей вектор г13 и его длину по известным векторам Г21 и Г32, приведена на рис. 7.80. [Подсистема вычисления третьего радиус-вектора | RV13 Рис. 7.80. Блок-схема подсистемы RV13 На рис. 7.81 показана блок-схема подсистемы Absolute Coordinates. Она вычисляет абсолютные координаты второго и третьего тел относительно центра масс систе- мы трех тел. Подсистема перехода от относительных радиус-векторов тел к абсолютным Рис. 7.81. Блок-схема подсистемы Absolute Coordinates Блок То File (см. рис. 7.76) производит запись поступающих на его вход данных в МАТ-файл GR_3_TEL.mat. Эти данные записываются па диск в виде матрицы под именем RV (рис. 7.82) в следующем порядке: О первую строку образует массив значений модельного времени, для которых вычислены подаваемые на вход блока величины; Рис. 7.82. Заполнение окна настройки блока То File
344 Урок 7 * Основы визуального моделирования динамических систем О вторую строку образуют значения первого элемента входного векторного сиг- нала (ему соответствует верхний сигнал, поступающий на вход блока Мих, вы- ходной сигнал которого поступает на вход блока То File), соответствующие мо- ментам времени, записайным в первой строке; О оставшиеся строки заполняются значениями остальных элементов вектора сигнала входа в порядке следования элементов этого вектора. Эти особенности необходимо принимать во внимание при считывании данных из сформированного МАТ-файла. Для того чтобы выполнить моделирование по созданной S-модели и графически оформить полученные результаты, нужно произвести следующие операции. 1. Ввести исходные данные в рабочее пространство. 2. Запустить S-модель GR_3_TELmdl на моделирование; при этом результаты мо- делирования будут записаны в МАТ-файл GR_3_TELmat. 3. Загрузить содержимое МАТ-файла GR_3_TEL mat в рабочее пространство, вве- дя в командном окне MATLAB команду load GR 3 TEL; при этом все данные, хранящиеся в этом МАТ-файле, будут записаны в рабочее пространство в ви- де матрицы под именем RV размером (1 + 5)хи, где п — размер вектора значе- ний времени. 4. Используя данные матрицы RV, создать программу графического и текстового оформления результатов моделирования в графическом окне. Все эти операции можно автоматизировать, запрограммировав их в отдельной М-программе, которую удобно оформить в виде М-файла GR_3_TEL_upr (управ- ляющая программа для S-модели GR_3_TEL). При этом вызвать на моделирование S-модель из программы можно с помощью команды sim('имя_$-модели') Ниже приведен текст управляющей программы. % GR_3_TEL_upr % Программа управления запуском и обработки данных для S-модели GR_3_TEL % Лазарев Ю. Ф. 25-01-2004 % 1. Ввод данных в рабочее пространство mu2 = 0.1; шиЗ = 0.01; Х210 - 1; Y210 = 0; Z210 - 0; V21X = 0; V21y - 1; V21z = 0; Х320 - 0.1; Y320 - 0.0: Z320 - 0: V32x = 0; V32y = -1; V32z - 0; * % 2. Запуск S-модели sim('GR_3_TEL') u % 3. Загрузка МАТ-файла load GR_3_TEL; % 4. Присвоение значений из данных МАТ-файла новым переменным Т = RV(1,:); Х21 = RV(2,:); Y21-RV(3.;); Z21-RV(4,;);
Примеры создания S-моделей 345 X32=RV(5.:): Y32 = RV(6.:); Z32=RV(7.:); X13 = RV(8,:); Y13=RV(9.:); Z13 = RV(10.:); X2=RV(11,:); Y2=RV(12.:); Z2 = RV(13.:); X3=RV(14.:); Y3 = RV(15.:); Z3 = RV(16.:); n = length(t); % 5. Построение графика зависимости координат движения второго тела % относительно первого subplot(2.2,l) plot(t.X21,t.Y21.,t.Z21.'.1). grid title('Движение второго тела относительно первого') xlabel('Время (безразмерное)'), ylabel('Координаты (безразмерные)') legend('X'.'Y'.'Z'.O) % 6. Построение графика зависимости координат движения третьего тела % относительно второго subplot(2.2,3) п1 = round(n)plot(t(l:nl),X32(l:nl).t(l:nl).Y32(l:nl).... '-',t(l:nl),Z32(l:nl).’.').grid title('Движение третьего тела относительно второго') xlabel('Время (безразмерное)'), ylabel('Координаты (безразмерные)') legend('X'.'Y'.‘Г .0) % 7. Построение пространственных траекторий движения % трех тел subplot(4,4,[3,4,7.8.11.12]) plot3(X2.Y2.Z2.'.'.X3.Y3.Z3). grid title('Движение трех гравитирующих тел*.'FontSize'.14) xlabel('Координата X'). ylabel('Координата Y'), zlabel('Координата Z') legend('первое тело'.'второе тело'.О) X 8. Вывод текстового оформления subplot(4.4,[15.16]) axis('off') h = text(0.1.0,'Массовые параметры (относительные):'); h = text(-0.1.0.9.['mul = 1; '.sprintf('mu2 = Xg: ',mu2).sprintf('mu3 = Хд'.шиЗ)]); h = text(0.0.0.8,'Начальные координаты (безразмерные):'); h = text(-0.1.0.7.['второго тела относительно первого:'.... sprintf('Х21 = Xg; '.X210).sprintf('Y21 = Xg; .Y210).... sprintf('Z21 = Xg; '.Z210)]): h - text(-0.1.0.6.['третьего тела относительно второго: sprintf('X32 = Xg; '.X320).sprintf('Y32 = Xg; ’.Y320).... spri ntf CZ32 = Xg; '.Z320)]): h = text(0.0.5.'Начальные скорости (безразмерные):'); h = text(-0.1.0.4.['второго тела относительно первого: ',... sprintf('V21x - Xg; ',V21x).sprintf('V21y » Xg; ’.V21y).... spri ntf CV21z = Xg; ’.V21z)]); h = text(-0.1.0.3,['третьего тела относительно второго: ‘ sprintfСV32x = Xg: ’,V32x).sprintf('V32y = Xg; ’.V32y). spri ntf ('V32z = Xg; '.V32z)D; h = text(-0.1.0.1, '_____________________________________________ '): h = text(-0.1,-0.1,'Программа GR-3-TEL-upr Автор - Лазарев Ю. Ф. 25-01-2004'); h = text (- 0.1, - 0.2,' ’); Запустив эту программу, можно сразу получить результаты моделирования в та- ком виде, как показано на рис. 7 83-7 85
346 Урок 7 • Основы визуального моделирования динамических систем 0.С5 Движение трех гравитирующих тел а 05 Движение третьего тела относительно второго 015 005 первое тело второе тело 8 а. 8 рограмме GR-3-TEL-npr Автор - Лазарев К) Ф 2501-200* 2 3 4 5 6 Время (безразмерное) '15 Г 0.5 0 -05 -1 -1! । _?4accoBjie п^а»ге^1_(^^й?5йв^):. НачйльныЬ квЬрдикагы гол р «змеиные) второготеле owchtommp первого КП = г У21 = 0. = v, рв ьвготвлв относнталвно ьт&рзгс" >32*01» ¥32*u Z32«G> Начальное скорости (Безрадмернь-е) л вмрсготвпв относительно первого rt V. Ma¥*’i ч21* ” третьего тела относительно второго V32x « u v32y = 1. v32z = J Движение второго тем относительно переесо 2 3 4 5 5 Время (безразмерное) Рис. 7.83. Плоское орбитальное движение тел в одном направлении Рис. 7.84. Плоское орбитальное движение тел в противоположных направлениях Представленные результаты соответствуют трем случаям движения: 1) орбитальные движения второго тела относительно первого и третьего относи- тельно второго происходят в одной плоскости (ХУ) и в одном направлении (орбитальные моменты однонаправлены — вдоль оси Z);
Вопросы для самопроверки 347 Рис. 7.85. Орбитальное движение в случае перпендикулярности плоскостей орбит 2) указанные орбитальные движения происходят в одной плоскости (XY) в про- тивоположных направлениях (орбитальные моменты направлены в противо- положные стороны); 3) указанные орбитальные движения происходят во взаимно перпендикулярных плоскостях. Во всех трех случаях отношение масс первого, второго и третьего тел равно 100:10:1. Относительные начальные скорости тел во всех указанных случаях приняты оди- наковыми по величине ( V12 = 1 и V32 =1). Обратите внимание на различия в пара- метрах орбиты среднего (второго) тела и на период этого орбитального движения. Вопросы для самопроверки 1. Каковы преимущества использования пакета Simulink для решения вычисли- тельных задач по сравнению с программированием их непосредственно в сре- де MATLAB? 2. Блоки каких разделов библиотеки Simulink должны обязательно присутство- вать в блок-схеме любой S-модели? 3. Каково основное предназначение блоков раздела Source библиотеки Simulink? 4. Каково основное предназначение блоков раздела Sinks библиотеки Simulink? 5. Блоки какого раздела библиотеки Simulink обеспечивают пользователю воз- можность создавать собственные блоки? 6. Что такое подсистема и как ее создать? 7. В чем заключаются преимущества использования подсистем?
g ) УРОК Взаимодействие MATLAB с Simulink □ Объединение S-моделей с программами MATLAB □ Пользовательские библиотеки S-блоков □ Примеры применения пользовательской библиотеки
Объединение S-моделей с программами MATLAB 349 Как уже отмечалось, моделирование процессов с помощью S-моделей наряду со значительными преимуществами имеет и некоторые существенные недостатки. Использования S-моделей обеспечивает следующие преимущества: О эффективный метод создания программ моделирования сложных динамиче- ских систем, который заключается в сборке блок-схемы системы из стандарт- ных готовых блоков (визуальное программирование); О удобные и наглядные средства, позволяющие преобразовать готовую блок-схе- му или получить дополнительную информацию об изменении промежуточ- ных процессов; О широкий набор эффективных программ решателей (Solvers), реализующих методы численного интегрирования дифференциальных уравнений с фиксиро- ванным шагом интегрирования, с переменным шагом интегрирования, а также решателей для так называемых жестких систем дифференциальных уравнений; О отсутствие необходимости в специальной организации процесса численного интегрирования; О уникальные возможности интегрирования нелинейных систем с существенны- ми «нелинейностями» (когда нелинейная зависимость имеет скачкообразный характер); О возможность весьма быстрого и удобного получения графической информа- ции об изменении моделируемых величин по аргументу (времени). Недостатками использования S-моделей являются: О жесткая и неудобная форма графического представления сигналов в блоках Scope и XY Graph (в отличие от средств, используемых в среде MATLAB); О отсутствие возможности автоматически (программно) обработать полученные результаты многоразового моделирования одной или нескольких S-моделей; О отсутствие возможности рационально организовать процесс изменения исход- ных данных S-модели и параметров ее блоков (например, в диалоговой форме). Важно отметить, что для отдельных видов дифференциальных уравнении намного удобнее, проще и быстрее составить процедуры для вычисления их правых час- тей, чем сформировать соответствующую блок-схему. Из вышеизложенного следует, что программная реализация процесса моделирова- ния и моделирование путем создания S-моделей имеют взаимодополняющие возмож- ности Поэтому желательно воспользоваться преимуществами этих двух средств моделирования, соединив программную реализацию с применением S-моделеи S-моделей с программами MATLAB Чтобы осуществить объединение программы MATLAB с S-моделью, необходимо иметь в наличии средства, позволяющие обеспечить: О передачу данных из среды MATLAB в S-модель и обратно, О запуск процесса моделирования S-модели из среды MATLAB, а также измене- ние параметров моделирования из этой среды;
350 Урок 8 • Взаимодействие MATLAB с Simulink О вызов программ MATLAB из S-модели; О создание S-блоков не только из других готовых блоков, а и путем использова- ния программ, написанных на М-языке MATLAB Управление процессом моделирования в Simulink Каждый блок S-модели имеет такие внутренние характеристики (рис. 8.1): О вектор входных величин и\ О вектор выходных величин у, О вектор состояния х. и (input) X ► , У „ (states) (output) Рис. 8.1. Схема взаимодействия величин, определяющих текущее состояние S-блока Вектор состояния может включать в себя непрерывные состояния хс, дискретные состояния xj или их комбинации. Математические связи между этими величина- ми могут быть представлены в виде следующих уравнений: О формирование выхода: У = fo(t,x,u), О обновление (формирование нового значения) состояния: =/u(f, x,w), О формирование значении производной состояния. ~=/Мх,и), at где Моделирование состоит из двух фаз — инициализации и собственно моделирова- ния В фазе инициализации осуществляются такие действия: О параметры блоков передаются в MATLAB для оценки (вычисления); результа- ты числовых операции используются как фактические параметры блоков; О иерархия модели «сглаживается»; каждая не условно выполняемая подсисте- ма заменяется блоками, из которых она складывается; О блоки сортируются в том порядке, в котором их нужно изменять; алгоритм сортировки обеспечивает такой порядок, что любой блок с прямым подключе- нием не изменяется, пока изменяются блоки, определяющие входные величи- ны; на этом шаге выявляются алгебраические циклы; О проверяются связи между блоками (прежде всего совпадение длины вектора выходных величин каждого блока с ожидаемой длиной векторов входных ве- личин управляемых им блоков).
Объединение S-моделей с программами MATLAB 351 Собственно моделирование осуществляется путем численного интегрирования. Каждый из имеющихся в наличии методов интегрирования (ODE) зависит от способности модели определять производные ее непрерывных состояний. Расчет этих производных происходит в два этапа. Сначала каждая выходная величина блока вычисляется в порядке, определенном в процессе сортировки. На втором этапе вычисляются производные каждого блока для текущего момента времени, входные переменные и переменные состояния. Полученный вектор производных используется для вычисления нового вектора переменных состояния в следую- щий момент времени. Как только завершается вычисление нового вектора со- стояния, блоки данных и блоки, являющиеся обзорными окнами, обновляются. С перечнем программ решателей (интеграторов), прилагаемых к пакету Simulink, можно ознакомиться на вкладке Solver, которая появляется после вызова команды Simulation ► S'mulation Parameters ► Solvers (Моделирование ► Параметры моделирова- ния ► Solvers) В верхней части вкладки Solver (рис. 8.2) находятся поля ввода Start time (Началь- ное время) и Stop time (Конечное время), в которых устанавливаются соответствен- но начальное и конечное значения аргумента (времени). В области Solver options (Параметры решателя) в списке Туре (Тип) выбирается тип решателей, а в рас- крывающемся списке, находящемся справа от него, — конкретный решатель. Рис. 8.2. Список решателей с фиксированным шагом на вкладке Solver Если выбран тип решателей Fixed-step (с фиксированным шагом), в списке справа появляется такой набор решателей: О discrete (no continuous states) — дискретный (не непрерывные состояния); О ode5 — метод Дормана- Принса (пятого порядка); О ode4 — метод Рунге- Кутта (четвертого порядка); О ode3 — метод Богацкого-Шампена (третьего порядка), О ode2 — метод Хойна (второго порядка); О odel — метод Эйлера (первого порядка).
352 Урок 8 • Взаимодействие MATLAB с Simulink При этом в нижней части вкладки появляется поле Fixed step size (Размер фикси- рованного шага), в которое нужно ввести значение шага интегрирования. В списке, находящемся справа от него, следует выбрать один из трех возможных режимов работы: Auto (Автоматический), Single Tasking (Однозадачный) или Multi Tasking (Многозадачный). При выборе в списке Туре (Тип) элемента Variable-step (с переменным шагом), в рас- крывающемся списке справа появится другая подборка интеграторов (методов численного интегрирования) (рис. 8.3): О ode45 — метод Дормана- Принса; О ode23 — метод Богацкого-Шампена; О odell3 — метод Адамса; О odel5s — жесткий метод NDF; О ode23s — жесткий метод Розенброка; О ode23t — жесткий метод трапеций; О ode23tb — жесткий метод TR-BDF2. Рис. 8.3. Список решателей с переменным шагом на вкладке Solver В этом случае в нижней части вкладки появляются следующие поля ввода: Max step size (Максимальная величина шага), Min step size (Минимальная величина шага), Initial step size (Начальная величина шага), Relative tolerance (Допустимая относи- тельная погрешность), Absolute tolerance (допустимая абсолютная погрешность). Во всех полях, кроме Relative tolerance, установлено значение auto, то есть эти пара- метры задаются автоматически и изменяются пользователем лишь в том случае, когда ему необходимо установить их конкретные значения, отличные от принятых по умолчанию. Относительная точность (точнее, относительная погрешность) по умолчанию равна 1-10”3.
Объединение S-моделей с программами MATLAB 353 Обнаружение пересечения нуля При моделировании систем, содержащих элементы с разрывными характеристи- ками, такие как реле, люфты, сухое трение, необходимо максимально точно вос- произвести особенности поведения системы в моменты времени, когда скачкооб- разно изменяется значение разрывной характеристики. Обычно в этот момент времени скачкообразно изменяются свойства самой системы, а также начальные условия для продолжения процесса. В связи с этим очень важно максимально точно (с машинной точностью) определить момент времени, в который происхо- дит подобное изменение разрывной характеристики, и зафиксировать текущие параметры движения системы. Это требуется для того, чтобы на следующем шаге начать процесс интегрирования именно с данного момента времени с новыми на- чальными условиями, определяемыми особенностями прохождения системы че- рез скачок соответствующей характеристики. Обычно скачкообразное изменение разрывной характеристики происходит в мо- мент, когда одна из переменных состояния системы при своем изменении во време- ни переходит через некоторый уровень. Причем иногда имеет значение направление, в котором происходит пересечение переменной этого уровня — при ее увеличе- нии или уменьшении — от этого может зависеть, как именно изменятся (скачко- образно) характеристики системы и значения ее переменных состояния Задача обнаружения пересечения сигналом какого-либо постоянного уровня лег- ко сводится к задаче выявления пересечения нулевого уровня. Поэтому в даль- нейшем процесс точного определения параметров состояния системы в момент, когда происходит скачкообразное изменение некой характеристики системы, бу- дем называть обнаружением пересечения нуля. В пакете Simulink обнаружение пересечения нуля используется для того, чтобы зафиксировать резкие изменения в непрерывных сигналах. Эта процедура играет важную роль при управлении скачками состояния и при точном интегрировании прерывистых сигналов. Система испытывает скачок состояния, когда изменение значений переменных состояния вызывает значительные мгновенные изменения в системе. Простои при- мер скачков состояния — отскакивание мяча от пола. При моделировании такой системы используется метод интегрирования с переменным шагом. Метод чис- ленного интегрирования обычно не предусматривает мер, которые позволили бы точно зафиксировать момент контакта мяча с полом. Вследствие этого при моде- лировании мяч, переходя через контактную точку, как бы проникает сквозь пол. Использование обнаружения пересечения нуля в Simulink гарантирует, что мо- мент скачка состояния системы определен точно (с машинной точностью). По- этому в результате численного моделирования не происходит проникновения мяча сквозь пол, и переход от отрицательной скорости мяча к положительной в мо- мент контакта осуществляется чрезвычайно резко. Чтобы можно было увидеть демонстрацию поведения подскакивающего мяча вве- дите в командном окне MATLAB команду bounce. В результате ее выполнения появится окно с изображением блок-схемы модели поведения мяча (рис. 8.4).
354 Урок 8 • Взаимодействие MATLAB с Simulink Эта модель численно интегрирует методом ode23 (с автоматическим изменением шага интегрирования) дифференциальное уравнение х =~g, (где g — ускорение свободного падения; х — текущая высота мяча над полом) в про- межутках между моментами времени, в которые происходит контакт мяча с полом. Интегрирование осуществляется с помощью двух блоков-интеграторов— Velocity и Position. На выходе первого из них получают значение текущей скорости движе- ния мяча, а на выходе второго — высоты мяча над полом. Рис. 8.4. Блок-схема S-модели Bounce Более детальное знакомство со вторым интегратором (блок Position) (рис. 8.5) дает возможность убедиться, что в нем установлена нижняя граница (нуль) изменений высоты мяча, кроме того, в первом интеграторе (блок Velocity) (рис. 8.6) введено внешнее управление (элемент falling (при уменьшении) в списке External reset) от выхода второго интегратора. Во втором интеграторе начальное условие установ- лено как внутреннее (10 м), тогда как в первом оно является внешним (15 м/с) Кроме того, в первом интеграторе установлено отображение порта состояния На этот порт подаются значения текущей скорости. Block Potometer* Position - Integrator - - пй>а!cordbcnsoutca. Internal InSial condtxxT Параметры----------- Externalrml I £7 t«r> output Upper гдаЛй hnfc Absolute tctaance: jauto ________________ f? Ег<аЫв zero ctwarg detection I OK I Cancel I tjelp | | Рис. 8.5. Окно настройки блока-интегратора Position Рис. 8.6. Окно настройки блока-интегратора Velocity
Объединение S-моделей с программами MATLAB 355 Моделирование происходит таким образом. Интегрирование начинается при ука- занных начальных условиях В момент, когда на втором интеграторе фиксируется пересечение мячом нуля высоты, осуществляется точное (с машинной точностью) вычисление момента времени, в который мяч пересекает пол, пересчитывается значение скорости в первом интеграторе на момент пересечения и этот момент устанавливается как новый начальный момент времени. Найденное значение ско- рости через выходной порт первого интегратора (находится в нижней части блока- интегратора) изменяет свои знак на противоположный, уменьшается по величине па 20 % (этим учитывается уменьшение скорости за счет потерь энергии вследст- вие неидеальной упругости мяча) и используется как новое начальное условие по скорости; затем интегрирование продолжается при новых начальных условиях. Следует отметить, что управление процессом прерывания интегрирования и про- должения его при новых начальных условиях осуществляется вторым интеграто- ром при пересечении величины на его выходе установленного уровня (нуля) при уменьшении (установка falling на первом интеграторе). При этом значение вели- чины на выходе первого интегратора не может быть использовано для расчета нового ее начального значения. Для этой цели необходимо применить дополнительный выходной порт интегратора, то есть установить флажок Show state port (Показать порт состояния), и подать это рассчитанное значение на входной порт блока внеш- него начального условия интегратора не непосредственно, а обязательно через блок начального условия IC Численные методы интегрирования обычно сформулированы в предположении, что интегрируемые ими сигналы являются непрерывными и имеют непрерывные производные. В пакете Simulink предусмотрены следующие блоки, которые используют обна- ружение пересечения нуля (табл. 8.1). Таблица 8.1. Блоки S mulink, использующие обнаружение пересечения нуля Блок Применение функции Abs (Формирование абсолютного Определяет момент, когда сигнал на входе пересекает нуль значения входа) в любом направлении — уменьшаясь или увеличиваясь BackLash (Формирование люфта) Используется дважды: когда входной сигнал достигает верхнего и нижнего порогов Dead Zone (Формирование зоны Используется дважды: когда сигнал входит в зону нечувствительности, или мертвой нечувствительности (до этого выходной сигнал был зоны) больше входного на величину нижней границы зоны) и когда оставляет эту зону (выходной сигнал становится меньше входного на величину верхней границы) Hit Crossing (Улавливание Выявляет момент, когда сигнал на входе пересекает пересечения) заданный уровень Integrator (Интегратор) Если представлен порт сброса, выявляет момент, когда сброс происходит; если выход ограничен, то трижды выявляется пересечение нуля: когда достигается верхняя граница насыщения, когда достигается нижняя граница насыщения и когда зона насыщения покинута продолжение &
356 Урок 8 • Взаимодействие MATLAB с Simulink Таблица 8.1 (продолжение) Блок MinMax (Поиск минимума или максимума входной величины) Relay (Формирование релейного изменения выхода) Relational Operator (Операторы отношения) Saturation (Насыщение) Sign (Формирование функции Sign от входа) Step(Формирование скачкообразного изменения выхода) Применение функции Для каждого элемента выходного вектора выявляет момент времени, когда входной сигнал становится минимальным или максимальным Выявляет момент времени, когда реле нужно включить (если оно выключено) или выключить (если оно включено) Выявляет момент времени, когда выход изменяется Используется дважды: когда сигнал достигает верхнего порога или покидает его и когда сигнал достигает нижнего порога или покидает его Выявляет момент прохождения входного сигнала через нуль Выявляет момент времени, когда будет осуществляться скачкообразное изменение выходного сигнала Описанные выше средства пакета Simulink позволяют моделировать очень важ- ные и труднопрограммируемые особенности поведения существенно нелинейных систем, такие как «сцепление» подвижных частей механизмов под действием сил сухого трения, удароподобные процессы и связанные с ними режимы, скользя- щие режимы, автоколебания, резкие переходы от одного режима к другому. Обмен данными между средой MATLAB и S-моделью Рабочее пространство среды MATLAB является досягаемым для используемой S-модели. Это означает, что если в качестве значений параметров в окнах на- стройки блоков S-модели использованы имена переменных, а значения этих пере- менных предварительно установлены в рабочем пространстве, то значения сразу передаются соответствующим блокам S-модели. Поэтому, чтобы организовать удоб- ное изменение параметров блоков S-модели (например, в диалоговом режиме), достаточно сделать следующее: О в окнах настройки блоков S-модели в качестве параметров указать идентифи- каторы (имена) вместо чисел; О организовать средствами среды MATLAB (например, программно) присвое- ние числовых значений этим идентификаторам, а также (в случае необходи- мости) их изменение в диалоговом режиме; О после присвоения числовых значений всем идентификаторам (например, пу- тем запуска соответствующей М-программы) провести запуск S-модели на моделирование. Некоторые средства обмена данными были уже рассмотрены ранее. Это блок From Workspace раздела Sources и блок То Workspace раздела Sinks стандартной биб- лиотеки Simulink (рис. 8.7). Первый служит для включения сигналов, предва- рительно полученных в результате вычислений в среде MATLAB, в процесс моделирования S-модели, второй обеспечивает возможность записи результатов,
Объединение S-моделей с программами MATLAB 357 полученных при моделировании с использованием S-модели, в рабочее простран- ство среды MATLAB. simin > From Woitepace simout To Woikspace Рис. 8.7. Заготовки блоков From Workspace и To Workspace Окно настройки блоков From Workspace и To Workspace приведены соответственно на рис. 8.8 и 7.19. Рис. 8.8. Окно настройки блока From Workspace Для определения процесса, который будет использоваться в S-модели, в поле вво- да Data (см. рис. 8.8) следует указать вектор, состоящий из двух имен — имени массива значений аргумента (моментов времени, в которые определен этот про- цесс) и имени массива значений процесса при указанных значениях аргумента, например: [Т, D]. В этом случае из массива Т рабочего пространства будут считаны все значения, которые будут играть в S-модели роль значений модельного време- ни, а выходная величина блока при моделировании в моменты времени, соответ- ствующие записанным в массиве Т, будет принимать значения, записанные в мас- сиве D. Если при этом реальные значения моментов времени при моделировании не совпадут с теми, что записаны в массиве Т, произойдет линейная интерполя- ция значений массива D, „соответствующих предшествующему и последующему значениям моментов времени в массиве Т. Для записи полученного процесса в рабочее пространство (см. рис. 7.19) следует указать в поле Variable name имя, под которым процесс нужно сохранить в рабочем пространстве системы MATLAB. Соответствующие моменты модельного време- ни при этом не записываются.
358 Урок 8 * Взаимодействие MATLAB с Simulink Существует и более простой способ выполнения вышеописанных операций — без использования указанных блоков. Чтобы подключить определенный в программе MATLAB процесс в S-модель как входной, предусмотрен механизм включения портов входа и выхода. Для этого нужно сделать следующее. 1. Вставить блок входного порта In в блок-схему S-модели и подключить его к од- ному из блоков S-модели. 2. В окне S-модели вызвать команду Simulation ► Simulation Parameters ► Workspace I/O (Моделирование ► Параметры моделирования ► Входы/выходы рабочего пространства), чтобы открыть окно, показанное на рис. 8 9. 3. В области Load from workspace (Загрузить из рабочего пространства) установить флажок Input (Вход) и в поле справа ввести имя, состоящее из имени вектора значений аргумента и имени вектора значений входного сигнала при этих зна- чениях аргумента. 4. Установить значение этих векторов в среде MATLAB, например, так: t - (0:0.1:1)': u = [sin(t), cos(t), 4*cos(t)]; 5. Запустить S-модель на моделирование. Рис. 8.9. Установка входного процесса в S-модель Чтобы вывести некоторые сигналы, формируемые в S-модели, в рабочее простран- ство MATLAB, нужно выполнить следующие действия. 1. В блок-схему S-модели вставить блоки портов выхода Out и подсоединить к ним необходимые выходные величины других блоков. 2. В окне S-модели вызвать команду Simulation ► Simulation Parameters ► Workspace I/O (Моделирование ► Параметры моделирования ► Входы/выходы рабочего пространства). 3. В области Save to workspase (Сохранить в рабочем пространстве) открывшегося окна установить флажки Time (Время) и Output (Выход).
Объединение S-моделей с программами MATLAB 359 В этом случае значения модельного времени будут записываться в рабочее про- странство в массив под именем tout, а соответствующие значения выходных про- цессов при этих значениях времени — в столбцы матрицы yout (в первый стол- бец — процесс, который подан на первый выходной порт, Outl, а во второй столбец — процесс, поданный на второй порт, 0ut2, и т. д ). После установки флажка Initial state (Начальные значения переменных состоя- ния) в области Load from workspase (Загрузить из рабочего пространства) можно ввести в S-модель начальные значения переменных состояния системы. Устано- вив флажок States (Переменные состояния) в области Save to workspase (Сохра- нить в рабочем пространстве), можно записать текущие значения переменных состояния системы в рабочее пространство под именем xout (или под другим име- нем, если его записать в поле справа от флажка States (Переменные состояния)). Наконец, можно записать и конечные значения переменных состояния в вектор xFinal, если установить флажок Final state (Конечное состояние). Запуск процесса моделирования S-модели из среды MATLAB Рассмотрим средства, которые позволяют запускать процесс моделирования соз- данных S-моделей из программы MATLAB. S-модель запускается на выполне- ние, если в программе MATLAB вызвать процедуру sim: [t.x.yl. у2...уп] - simfmodel.timespan.options.ut) Здесь model — символьная строка, содержащая имя MDL файла, который вклю- чает запись соответствующей S-модели, timespan — вектор, состоящий из двух элементов — значении начального и конечного моментов времени моделирова- ния; options — вектор значений параметров интегрирования, который устанавли- вается процедурой simset: options = simset('Свойство!'.Значения!.'Свойство?'.Значения?....): Процедура sim возвращает следующие значения: t — массив выходных значении моментов времени; х — массив (вектор) переменных состояния системы; yl — первый столбец матрицы выходных переменных системы (которые подаются на выходные порты) и т д. Изменять параметры решателя и процесса интегрирования в MATLAB можно с помощью функции simset, как это показано выше. Таким образом можно за- дать значения свойств решателя, которые приведены в табл. 8.2. Таблица 8.2. Свойства решателя, устанавливаемые функцией simset Решатель Свойство 'Solver' Название решателя; значение (указывается между двумя апострофами) может быть одним из следующих: ode45, ode23, odelb, odel5s, ode23s — для интегрирования с автоматически изменяемым шагом; ode5, ode4, ode3, ode2, odel — для интегрирования с фиксированным шагом 'RelTol' - Относительная допустимая погрешность; значение может быть положительным скаляром; по умолчанию устанавливается 1е-3 продолжение &
360 Урок 8 • Взаимодействие MATLAB с Simulink Таблица 8.2 (продолжение) Решатель Свойство 'AbsToL' Абсолютная допустимая погрешность; значение может быть положительным скаляром; по умолчанию устанавливается 1е-6 'FixedStep' 'MaxOrder1 Фиксированный шаг (положительный скаляр) Максимальный порядок метода (применяется лишь для метода odel5); может быть одним из целых чисел 1,2,3,4; по умолчанию равно 5 'MaxRows' Максимальное количество строк в выходном векторе; неотрицательное целое; по умолчанию равно 0 'InitiaLState' Вектор начальных значений переменных состояния; по умолчанию он пустой ([]) 'FinaLStateName' Имя вектора, в который будет записываться конечное значение вектора состояния модели; представляет собой символьную строку, по умолчанию она пуста (") 'OutputVariables' Выходные переменные; по умолчанию имеет значение {txy}; возможные варианты: tx, ty, ху, t X, у; все они неявно указывают, какие именно выходные переменные не будут выводиться Создание S-блоков с использованием программ MATLAB В системе MATLAB предусмотрен механизм преобразования некоторых процедур, написанных на языках высокого уровня, в блок S-модели. Он реализуется с помо- щью так называемых S-функций. S-функция — это относительно самостоятельная программа, которая написана на языке MATLAB или С. Главное назначение S-функции состоит в решении сле- дующих задач: О создание новых блоков, которые дополняют библиотеку пакета Simulink; О описание моделируемой системы в виде системы математических уравнений; О включение ранее созданных программ на языке С или MATLAB в S-модель. Программный код S-функции имеет четкую структуру. Для случая, когда S-функ- ция создается на основе М-файла, эта структура приведена в файле SfunTMPL.m, ко- торый находится в папке TOOLBOX\SIMULINK\BLOCKS. Заголовок S-функции в об- щем случае может иметь следующий вид: function [sys.xO.str.ts] - <Имя_8-функции> (t,x,u,flag{. <Паранетры>}) Стандартными аргументами S-функции являются: О t — текущее значение аргумента (времени); О х — текущее значение вектора переменных состояния; Ou— текущее значение вектора входных величин; О fl ад — целочисленная переменная, отражающая форму представления резуль- татов действия S-функции; О <Параметры> — дополнительные идентификаторы, характеризующие значения некоторых параметров системы, используемых в S-функции (наличие их не является обязательным).
Объединение S-моделей с программами MATLAB 361 В результате вычислений, осуществляемых при работе S-функции, получают зна- чение такие переменные: О sys — системная переменная, содержимое которой зависит от значения, кото- рое приобретает переменная fl ад; О хО — вектор начальных значений переменных состояния; О str — символьная переменная состояния (обычно она пуста []); О ts — матрица, которая содержит информацию о дискретах времени. Текст S-функции состоит из текста самой S-функции и текстов подпрограмм (внут- ренних), которые она вызывает. В табл. 8.3 приведены внутренние процедуры, S-функции. Таблица 8.3. Внутренние процедуры S-функции Процедура Описание mdllnitializeSizes Устанавливает размеры переменных S-функции и начальные значения переменных состояния mdLDerivatives Используется как процедура правых частей системы дифференциальных уравнений модели в форме Коши в случае, когда переменные состояния объявлены как непрерывные mdLUpdate Используется как процедура обновления на следующем интервале дискрета времени значений переменных состояния, которые объявлены как дискретные mdLOutputs Формирует вектор значений выходных переменных в блоке S-функции mdLGetTimeOfNextVarHit Является вспомогательной функцией, которая используется для определения момента времени, когда конкретная переменная состояния пересекает заданный уровень mdLTerminate Является функцией, которая завершает работу S-функции Некоторые из указанных процедур S-функции могут не использоваться. Это за- висит от типа уравнений (алгебраические, дифференциальные или разностные), которыми описывается моделируемый через S-функцию блок. Так, если блок за- дан алгебраическими уравнениями, то не используются почти все указанные внут- ренние процедуры, за исключением процедуры mdl Outputs, в которой и вычисля- ются соответствующие алгебраические соотношения, определяющие связь между входными переменными и и выходными переменными у. В том случае, если пове- дение блока задано системой непрерывных дифференциальных уравнений, не ис- пользуется функция mdl Update, если уравнения блока являются разностными — функция mdlDerivatives. Обязательными являются лишь процедуры mdlInitia- lizeSizes и mdl Outputs (инициализации и формирования выхода). В зависимости от значения переменной flag главная процедура S-функции со- держит обращение к той или иной внутренней процедуре. Например: switch flag. case 0. fsys.xO.str.ts] = mdlInitializeSizes; case 1. sys = mdl Derivatives(t.x.u);
362 Урок 8 • Взаимодействие MATLAB с Simulink case 2. sys = mdlUpdate(t.x.u); case 3. sys = mdlOutputs(t.x.u): case 4. sys = mdlGetTinieOfNextVarHit(t.x.u); case 9. sys = mdlTerminate(t.x.u); otherwise erгог([‘Unhandled flag = ',num2str(flag)]); end В зависимости от значения переменной flag выполняются следующие действия (через вызов соответствующей внутренней процедуры): О 0 — инициализация блока S-функции; О 1 — обращение к процедуре правых частей непрерывных дифференциальных уравнений; О 2 — вычисление новых значений переменных состояния па следующем шаге дискретизации (для дискретной S-функции); О 3 — формирование значения вектора выходных величин блока S функции; 0 4- формирование нового значения модельного времени, которое отсчитыва- ется от момента пересечения заданного уровня определенной переменной со- стояния; 0 9- прекращение работы блока S функции. Установка и изменение значения переменной flag осуществляется автоматиче- ски, без вмешательства пользователя, в соответствии с логикой функционирова- ния блоков при моделировании. Итак, использование S-функции позволяет моделировать работу как обычных алгебраических, так и динамических (непрерывных или дискретных) звеньев. Чтобы создать блок S-функции, выполните следующие действия. 1. Напишите текст S-функции, например в виде М-файла: текст составляется на основе файла-шаблона SfunTMPL.m с учетом заданных уравнений поведения блока. 2 Перетащите стандартный блок S-Function (рис. 8 10) из раздела User-Defined Functions библиотеки Simulink в окно блок-схемы, в которой будет создаваться новый S-блок. >| system ь S-Funct on Рис. 8.10. Заготовка S-функции 3. Дважды щелкните мышью на изображении блока S-Function, что приведет к по- явлению на экране окна его настройки Окно содержит два поля: S-function name (Имя S функции), в которое вводится имя написанной S-фупкции, и S-function parameters (Параметры S функции), в которое вводятся имена или значения параметров блока, указанных в разделе <Параметры> М-файла, содержащего S-функцию.
Объединение S-моделей с программами MATLAB 363 4. Введите в указанные поля имя М-файла, в котором хранится S-функция, и спи- сок значений параметров S-функции. Если, например, в первое из них ввести имя S KA, а во второе — строку J, UgO, UgSkO, окно приобретет такой вид, как показано на рис. 8.11. 5. Щелкните мышью на кнопке ОК. Если система обнаружит М-файл с указан- ным именем в папках, которые для нее доступны, окно, представленное на рис. 8.11, исчезнет, а на изображении блока в окне блок-схемы появится вве- денное имя S-функции. Рис. 8.11. Окно настройки блока S-function после ввода параметров S-блок на основе S-функции, которая содержится в М-файле S_KA.ni, будет соз- дан. Теперь его можно использовать как обычный S-блок в блок-схеме S-модели. На вход этого блока должен поступать векторный сигнал и. Выходом блока станет векторный сигнал у, который сформирован S-функцией во внутренней процеду- ре mdlOutputs. Примеры S-функций Создадим S-функцию, которая реализует динамические свойства твердого тела при его вращательном движении. Для описания динамики тела воспользуемся динамическими уравнениями Эйлера в матричной форме: J^ + (<ox)(Ja>) = M. (8.1) at Здесь / — матрица моментов инерции тела относительно осей, связанных с телом; со — матрица-столбец из проекций абсолютной угловой скорости тела на одни и те же оси; (сох) — кососимметричная матрица вида 0 -со2 ®у " (сох) = coz 0 — ~(йу 0 (8.2) составленная из тех же проекций; М — матрица-столбец из проекций вектора момен- та внешних сил на связанные оси. Такими уравнениями описывается, например,
364 Урок 8 • Взаимодействие MATLAB с Simulink вращательное движение космического аппарата. Поэтому далее тело иногда бу- дет отождествляться с космическим аппаратом. Создадим М-файл соответствующей S-функции. Назовем его S_DUE.ro. function [sys.хО.str ts] = S_DUE(t x.M.flag.J.UgSkO) Я S-функция S_DUE Динамических уравнений Эйлера Я Реализует динамику вращательного движения твердого тела, % отыскивая вектор абсолютной угловой скорости тела % по заданному вектору моментов внешних сил. Я действующих на тело Я ВХОД блока: X М - вектор проекций момента внешних сил на оси % X. Y i Z связанной с телом системы координат % ВЫХОД блока: Я у - вектор из шести элементов: первые три - проекции Я абсолютной угловой скорости от тела на указанные оси. Я последние три - проекции на те же оси углового ускорения тела % Входные ПАРАМЕТРЫ S-функции: % J - матрица моментов инерции тела в указанных осях: % UgSkO - вектор начальных значений проекций угловой скорости тела « Лазарев Ю.Ф.. 18-12-2003 IJ = 1nv(J); % вычисление обратной матрицы моментов инерции switch flag, case 0 [sys.xO.str.ts] = mdlInitializeSizes(UgSkO): case 1 sys - mdlDerivatives(t.x.M.J.IJ); case 3. sys = mdlOutputs(x.M.J.IJ): case 9 sys = []: end X Конец процедуры х=======_==__====_====я=я====^—------------------- function [sys.xO.str.ts] ~ mdlInitializeSizes(UgSkO.UgO) sizes = simsizes: sizes NumContStates = 3; sizes.NumDiscStates = 0; sizes.NumOutputs = 6: sizes.Numinputs = 3: sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys = simsizes(sizes); xO = UgSkO: str = []: ts = [0 0]; Я Конец процедуры mdlInitializeSizes X===—;===_=====:—.=ет==.====ет—=„=== function z = mdlDerivatives(t.x,M J.IJ) Я ВХОДНОЙ вектор M является вектором проекций моментов внешних сил, % действующих на космический аппарат соответственно по осям X Y Z X х(1) = от(1); х(2) = от(2): х(3) = от(3). X z(l) = d(om(l))/dt. z(2) = d(om(2))/dt; z(3) = d(om(3))/dt: X |Jx Jxy Jxz| Я J = jJxy Jy Jyzj - матрица моментов инерции KA I IJxz Jyz Jz |
Объединение S-моделей с программами MATLAB 365 От = х(1:3); omx = vect2ksm(om); z = IJ*(M-cross(om.J*om)); % ДИНАМИЧЕСКИЕ уравнения Эйлера % Конец процедуры mdTDeri vatIves x=a=ws======================-= function у = mdlOutputs(x.M.J,IJ) y(l:3) = x: om = x(l:3); zom = IJ*(M-cross(om.J*om)); % Определение УСКОРЕНИЙ у(4:б) = zom; % Конец процедуры mdlOutputs В качестве входного вектора создаваемого S-блока принят вектор М Этот вектор состоит из трех значений текущих проекций на оси системы декартових коорди- нат, связанной с телом, момента действующих на тело внешних сил Образуем выходной вектор у из шести элементов: первые три — текущие значения проек- ций абсолютной угловой скорости тела, вторые три — проекции на те же оси аб- солютного углового ускорения тела: у = [omx.orny.omz.epsx.epsy.epsz] Создаваемый S блок рассматривается как непрерывная система (с тремя непрерыв- ными состояниями x=[omx,omy,omz]). Поэтому из текста S-функции изъята проце- дура mdlUpdate и оставлена в нем процедура mdlDerivative, которая фактически является подпрограммой правых частей динамических уравнении Эйлера. Создадим новое (пустое) окно блок-схемы. Перетянем в него стандартный блок S-функции из раздела User-Defined Functions. Дважды щелкнув мышью на изображении этого блока, вызовем его окно настрой- ки и запишем в него название М-файла созданной S-функции и его параметры (рис. 8.12). Щелкнем на кнопке ОК. Рис. 8.12. Окно настройки блока S_DUE Вследствие этого на изображении блока появится имя S-функции, а окно настрой- ки исчезнет. Теперь в том же окне с S-блоком создадим блок-схему для проверки правильно- сти работы этого блока. Но для этого предварительно нужно продумать условия тестового примера
366 Урок 8 • Взаимодействие MATLAB с Simulink Рассмотрим такой случай: О на тело не действуют внешние силы, то есть тело свободно вращается в про- странстве; О оси декартовой системы координат, которая жестко связана с телом, направ- лены по главным осям инерции тела; при таком условии матрица моментов инерции будет диагональной; О тело является динамично симметричным, а его ось фигуры направлена вдоль второй оси (У) связанной системы координат; это означает, что матрица мо- ментов инерции будет иметь такой вид. J е J= О О О' J О О J е о vneje — экваториальный момент инерции,/ — момент инерции тела относительно его оси фигуры (осевой момент инерции тела), причем J >/е в слу чае, если тело сплющено по оси; О тело предварительно приведено во вращение с угловой скоростью Q вокруг своей оси фигуры и имеет незначительную (по сравнению с величиной Q) на- чальную угловую скорость вращения соо вокруг оси X Изучим теоретически движение тела при этих условиях. Уравнения Эйлера в этом случае приобретут следующий вид: r d(£)Y . • _ . Je—~ =(J-Je)0>Y at dt at и при заданных начальных условиях будут иметь такие решения: сох = % cos (Юг); coy =Q; coz =-соо sin(&Qf), (8.3) причем (8 4) Итак, если образованная модель правильна (адекватна) и для нее обеспечены ука- занные условия, при моделировании мы должны получить результаты, соответст- вующие формулам (8.3). Добавим в блок-схему блок констант, который формирует нулевой вектор мо- ментов внешних сил (рис. 8.13), а также блоки Scope, позволяющие проконтроли- ровать результаты моделирования в виде зависимостей проекций угловой скоро- сти и углового ускорения тела от времени.
Объединение S моделей с программами MATLAB 367 Перед началом моделирования нужно присвоить значение матрице моментов инер- ции. Это можно сделать в командном окне MATLAB, введя строку » J - diagCE400.600.400]) В результате в том же окне появится следующая запись: 400 0 0 0 600 0 0 0 400 | Блок-схема проверки работы блока S DUE epi Рис. 8.13. Блок-схема проверки работы блока S_DUE Аналогичным образом нужно ввести вектор начальных условии: » UgSkO = [0.001 0.01 0] Получим такой результат: UgSkO » 1.0000е-003 1.0000е-002 0 Теперь следует перейти в окно блок-схемы, установить параметры интегрирова- ния, указанные на рис. 8 14, и запустить блок-схему на моделирование. Рис. 8.14. Параметры интегрирования в S-модели Prov_DUE
368 Урок 8 • Взаимодействие MATLAB с Simulink Обратившись к окнам блоков Scope по окончании процесса моделирования, мож- но убедиться, что созданная модель работает полностью адекватно. Показать на рисунке результат работы созданной модели довольно трудно ввиду следующих обстоятельств. Блоки Scope выводят графики на черном поле Поэто- му при копировании соответствующего графического окна на бумагу получится некачественное изображение. Можно скопировать его на бумагу с помощью ко- манды печати графического окна блока Scope, но тогда соответствующее изобра- жение займет целый лист — его невозможно уменьшить средствами текстового редактора Линии на графике после печати на черно-белом принтере не будут от- личаться одна от другой. На них невозможно нанести надписи, чтобы указать особенности кривых, к тому же сложно изменить стиль линии. Исходя из вышеизложенного можно сделать вывод, что наиболее рациональным решением будет передать результаты в рабочее пространство путем ввода выход- ных портов (см. рис. 8.13) и отправки на них тех сигналов, которые нужно пред- ставить графически. Потом следует построить необходимые графики, используя графические средства MATLAB. Последнее можно сделать непосредственно, с помощью команд MATLAB, в ко- мандном окне программы, но целесообразнее выполнить эту процедуру програм- мно, причем желательно объединить в ней все действия: О ввод значений параметров, начальных условий и т. п.; О установку параметров интегрирования; О обращение к S-модели и запуск ее на моделирование; О обработку полученных результатов моделирования, построение и оформление графиков. Пример такой программы приведен ниже X Prov_DUEupr.ni X Управляющая программа X для запуска модели Prov_DUE.mdl X Лазарев Ю.Ф. 18-12-2003 J = [400 0 0: 0 600 0; 0 0 400]; % Ввод значений матрицы инерции UgSkO = [0 001 0.01 0]; X Ввод начальных значений X проекций угловой скорости тела % Установка параметров моделирования options = simset('Solver','ode45'.'RelTol',le-6); sim('Prov_DUE'.5000.options); % МОДЕЛИРОВАНИЕ на S-модели X Формирование данных и вывод ГРАФИКОВ tt - tout; omx = yout(:.l); ощу = yout(:,2): omz = yout(:.3); epsx = yout(-,4); epsy = yout(;,5): epsz = yout(;.6); subplot(2,l.l) h - plot(tt.omx.tt.oniy,’.'.tt.omz,'--'); grid set(h.'LineWidth'.2);
Объединение S-моделей с программами MATLAB 369 setCgca,'Linewidth’,2) setCgca.'FontAngle'.‘italic’.'Fontsize’.16) titleC'Проекции угловых скоростей’) ylabel('радианы в секунду') legendC'omx'.'omy'.'omz'.0) subplot(2.1,2) h - plotCtt.epsx.tt.epsy.’.'.tt.epsz.'--'); grid setCh.'LineWidth'.2): setCgca.'Linewidth'.2) setCgca.'FontAngle'.'italic'.'Fontsize'.16) titleC'Проекции угловых ускорений') ylabel('l/c*2)') xlabel(’Время (с)’) setCgcf,'color'.'white') legendC'epsx','epsy'.'epsz',0) Обратившись к этой программе, получим графики, приведенные на рис. 8.15. Те- перь читатель может наглядно убедиться в адекватности модели. Время (с) Рис. 8.15. Свободное движение симметричного гироскопа (космического аппарата) Отметим, что смоделированное движение соответствует свободному движению симметричного гироскопа — его нутационным колебаниям. В гироскоп тело пре- вращает приведение его в сравнительно быстрое вращение вокруг одной из его осей (©у = 0,01с'1) Матрица моментов инерции принята диагональной, то есть предполагается, что тело динамически сбалансировано относительно осей X, Y и Z. Наконец, моменты инерции относительно осей, ортогональных оси собствен- ного вращения тела, приняты равными. Это означает, что гироскоп является ди- намически симметричным телом с осью, совпадающей с осью фигуры Y.
370 Урок 8 • Взаимодействие MATLAB с Simulink Запуск М-программ из S-модели Следует указать еще один, более удобный, способ объединения S-модели с про- граммами на языке MATLAB. Он заключается в вызове М-файлов непосредст- венно из S-модели с помощью специально предусмотренных для этого средств. Предположим, что перед началом загрузки S-модели MODELmdl нужно вызвать М-файл, например с именем PERVdan, который содержит операции присваивания исходных значений всем данным. Это можно осуществить, если при создании S-mo- дели с указанным именем в командном окне MATLAB ввести следующую команду: set_param('MODEL'.'PreLoadFcn'.'PERVdan') Она свяжет файл PERVdan.m с S-моделью MODELmdl таким образом, что он будет автоматически вызываться при вызове этой S-модели. Если после выполнения указанной команды записать на диск данную S-модель, то при дальнейших ее вы- зовах сначала автоматически будет вызван файл PERVdan.m и лишь после этого на экране появится блок-схема S-модели, готовая к моделированию. Проверить, какой именно М-файл используется в данной S-модели в качестве предварительно исполняемого, можно путем вызова команды get_param('имя S-модели *,'PreLoadFcn') С помощью функции set param можно установить в S-модели значения многих ее параметров, в том числе и параметров отдельных блоков модели. В общем виде обращение к функции может иметь такой вид: set_param(‘Имя_$-тодели/Имя_блока'.'Параметр!'.Значение!.’Параметр2'.Значение?....) Если указан параметр Имя блока, то последующие значения присваиваются пара- метрам этого блока. Например, вызов set_param('MODEL'.'Solver'.'odel5s'.'StopTime'.'3000') приведет к установке в S-модели MODEL решателя odel5s и времени окончания процесса моделирования 3000. При использовании обращения к этой функции вида set_param('MODEL/ypaBHeHne'.'Gain'.'1000') в блоке Уравнение S-модели MODEL параметру Gain будет присвоено значение 1000. Команда set_param('MODEL/Fcn','Position'.[50 100 ПО 120]) установит изображение блока Fen в S-модели MODEL в прямоугольник с координа- тами [50 100 110 120] в окне блок-схемы. При обращении вида set_param('mymodel/Compute'.'OpenFcn'.'my_open_fcn') блок Compute S-модели mymodelбудет связан с М-программой MATLAB, записан- ной в файле my_open_fcn.m. После этого файл my_open_fcn.m будет вызываться всякий раз после двойного щелчка на изображении блока Compute. Если нужно вызвать некоторый М-файл перед проведением собственно модели- рования на S-модели или после него (например, требуется вызвать программу,
Объединение S-моделей с программами MATLAB 371 которая позволяет изменить значения параметров модели в диалоговом режиме, или использовать программу вывода результатов моделирования в графической форме), можно установить на свободном месте блок-схемы пустые блоки Subsystem (из раздела Ports & Subsystems). Каждый из них будет осуществлять вызов соответ- ствующего М-фаила. Пустые блоки Subsystem блок-схемы можно связать с определенной М-програм- мой, набрав в командном окне команду, аналогичную приведенной ранее. Попро- буем организовать такую форму управления процессом моделирования модели Prov_DUE. Для этого создадим на основе ранее созданного файла Prov_DUEupr.m три отдельных файла Prov_DUE_Pred.m, выполняющий присвоение значении исходным величи- нам; MENU_DUE.m, осуществляющий изменение исходных данных в диалоговом режиме; Graf_DUE.m, обеспечивающий вывод результатов моделирования в графи- ческое окно. Тексты этих программ приведены ниже. % Prov_DUE_Pred.m X Программа установки начальных значений X параметров модели ProvJJUE.mdl X Лазарев Ю.Ф. 28-01-2004 J = [400 0 0; 0 600 0; 0 0 400]; % Ввод значений матрицы инерции gSkO = [0.001 0.01 0]; X Ввод начальных значений % проекций угловой скорости тела X Установка параметров моделирования hl = 10; ТК = 5000; X MENU_DUE.m X Программа изменения исходных значений X параметров модели ProvJDUE.mdl % Лазарев Ю.Ф. 28-01-2004 k = 1; while к<12 к = menu('Данные для модели Prov_DUE. Что изменить?'.... sprintf('Jx = Xg' .J(l.D).... sprintfCJy = Xg'.J(2.2)), ... sprintfCJz = Xg',J(3.3)).... sprintfCJxy = Xg' ,J(1.2)).... sprlntfCJxz = Xg',J(1.3)),... sprintf('Jyz - Xg',J(2.3)).... sprintfC'OMx(O) « Xg'.UgSkO(l)).... sprintfC'OMy(O) ° Xg',UgSkO(2)),... sprintfC'OMz(O) = Xg',UgSkOC3)).... sprintfC'hi - Xg' .hi).sprintf('TK - Xg'.TK).... 'Ничего не менять’); If к = 1 J(l.l) = inputC[sprintfC'Текущее значение J(l.l) = Xg; '.JCl.l)),... 'Установите новое значение JCl.l) = ']); end if к — 2
372 Урок 8 • Взаимодействие MATLAB с Simulink J(2,2) = input([sprintf('Текущее значение J(2,2) = Xg; ‘.J(2,2)).... 'Установите новое значение J(2.2) = ']): end if k “ 3 J(3 3) = 1nput([sprintf('Текущее значение J(3.3) = Xg. ',J(3.3)).... 'Установите новое значение J(3.3) = ']); end if k = 4 J(l,2) = input([sprintf('Текущее значение J(1.2) = Xg; ',J(1.2)).... 'Установите новое значение J(1.2) = ’]): end if k == 5 J(l,3) = input([sprintf('Текущее значение J(1.3) - Xg; ',J(1.3)).... 'Устано! ите новое значение J(1.3) = ']); end if k*=6 J(2.3) = input([sprintf('Текущее значение J(2.3) = Xg; ',J(2.3)).... 'Установите новое значение J(2,3) = ']): end if k — 7 UgSkO(l) = input([sprintf('Текущее значение OMx(O) = Xg; '.UgSkO(l)).... 'Установите новое значение OMx(O) = ']); end if k •— 8 UgSkO(2) = input([sprintf('Текущее значение OMy(O) = Xg; ’.UgSkO(2)). 'Установите новое значение ОМу(О) = ']); end if k = 9 UgSkO(3) = input([sprintf('Текущее значение OMz(O) = Xg; ’.UgSkO(3)). 'Установите новое значение OMz(O) = ']): end if k = 10 hi = input([sprintf('Текущее значение hi = Xg; ’.hi).... 'Установите новое значение hi = ']); end if k = 11 TK = input([sprintf('Текущее значение TK = Xg; ',TK)t... 'Установите новое значение TK = ']); end end J(2.1) = J(l,2); J(3.1) = J(1.3), J(3.2) = J(2.3); X Graf_DUE.m X Программа построения в графическом окне графиков X результатов работы модели Prov_DUE.mdl X Лазарев Ю.Ф. 28-01-2004 X Формирование данных и вывод ГРАФИКОВ tt = tout; omx = yout(:.1); omy = yout(:,2); omz = yout(:,3); epsx = yout(:,4); epsy = yout(:.5); epsz - yout(:.6); StrJ = [sprintfCJx = Xg; '.J(l.D). sprintfCJy = Xg: ' .J(2.2)).sprintf('Jz = Xg: ',J(3,3))J Strll = [sprintf('OMx = Xg; ' .UgSkO(D). sprintfCOMy - Xg; ' ,UgSk0(2)),sprintf('0Mz = Xg; '.UgSkO(3))J
Объединение S-моделей с программами MATLAB 373 StrJl = [sprintfC'Jxy = Xg; ’.J(1.2)). sprintfCJxz = %g; ' ,J(1.3)), sprintfCJyz = Xg: ',J(2.3))] subplot(2.1,l) h = plotftt.omx.tt.omy,'+'.tt.omz.'--'); grid set(h.'Linewidth'.2); set(gca,'LineWidth'.2) setCgca.'FontAngle'.'italic'.'Fontsize'.16) titleC'Проекции угловых скоростей') setCgca.'Fontsize',14) ylabelC'радианы в секунду') legendC'omx', 'ощу','omz',0) xlabelC[StrJ.' '.StrJl,' '.StrU]) subplotC2,1,2) h = plotCtt.epsx.tt.epsy,'+'.tt.epsz,'--'); grid setCh,'LineWidth'.2); setCgca,'LineWidth',2) setCgca,'FontAngle','italic','Fontsize'.16) titleC'Проекции угловых ускорений ') setCgca.'FontSize'.14) ylabel('радианы/с*2') xlabelC' Время (c) ') setCgcf,'color','white') legendC'epsx','epsy','epsz'.0) Теперь введем в блок-схему Prov_DUE два блока Subsystem. Осуществим в этих блоках следующие преобразования. 1. Изменим имена блоков (подписи под их изображениями); первый блок назо- вем MENU, а второй — GRAFIKI (рис. 8.16). | Блок-схема Prov DUE1 проверки работы блока S DUE~| GRAFIKI Рис. 8.16. Блок-схема S-модели Prov_DUEl 2. Дважды щелкнув на каждом из блоков, откроем их блок-схемы и удалим все содержимое — сделаем блоки пустыми. 3. В окне блок-схемы щелкнем на изображении блоков правой кнопкой мыши; из появившегося контекстного меню выберем команду Mask Subsystem (Соз- дать маску подсистемы); в результате откроется окно Mask editor (Редактор маски) (рис. 8.17). 4. В поле Drawing commands (Команда рисования) на вкладке Icon (Значок) этого окна введем команду d sp с указанием в качестве ее аргумента текста, который
374 Урок 8 • Взаимодействие MATLAB с Simulink требуется поместить на изображении блока; для первого блока это будет текст Исходные данные, для второго — Вывести графики. 5. Закроем окно Mask Editor (Редактор маски) щелчком на кнопке ОК. Рис. 8.17. Окно Mask editor Введем в командном окне команды, которые связывают составленные М-програм- мы с S-моделью: set_param('Prov_DUE'.'PreLoadFcn','Prov_DUE_Pred') set _param('Prov_DUE/MENU'.'OpenFcn'.'MENUJJUE') set_param('ProvJMJE/GRAFIKI','OpenFcn','Graf_DUE‘) После выполнения этих команд управление всеми действиями по моделирова- нию будет осуществляться из окна самой S-модели. Назовем эту модификацию S-модели Prov_DUEl. Теперь моделирование можно производить в следующем порядке. 1. Вызовем на экран окно блок-схемы ProvJXJEl; при этом начальные значения исходных данных уже будут записаны в рабочем пространстве, поскольку пе- ред появлением окна блок-схемы будет запущена на выполнение программа Prov_DUE_Pred. 2. Дважды щелкнем в окне блок-схемы на блоке MENU (Исходные данные), что- бы открыть окно MENU (рис. 8.18). 3. Установив нужные значения исходных параметров, закончим работу с меню, щелкнув на кнопке Ничего не менять. 4. Запустим S-модель на моделирование, щелчкнув на кнопке с треугольной стрелкой на панели инструментов окна блок-схемы. 5. По окончании процесса моделирования для вывода графиков в графическое окно дважды щелкнем на блоке Grafiki (Вывести графики).
Объединение S-моделей с программами MATLAB 375 Рис. 8.18. Пользовательское меню программы MENU_DUE Этот способ связывания S-модели с существующими М-файлами является, пожа- луй, наиболее удобным, так как, во-первых, позволяет вызывать М-файлы лишь в случае необходимости и в произвольном порядке, а во-вторых, управление модели- рованием и вызовом программ осуществляется только из блок-схемы S-модели. На рис. 8.19-8.21 представлены результаты моделирования движения тела при разных сочетаниях параметров, Во всех случаях тело «раскручено» вокруг оси У с угловой скоростью toy =0,01 рад/с. Графики на первом рисунке соответствуют динамически несимметричному телу (Jx = 550, Jz = 150), имеющему начальную угловую скорость вращения cox =0,001 рад/с вокруг оси X. Время (с) Рис. 8.19. Нутационные колебания несимметричного гироскопа
376 Урок 8 • Взаимодействие MATLAB с Simulink Во втором случае тело является динамически несбалансированным относительно принятых осей и вращается в начальный момент времени только вокруг оси У Рис. 8.20. Свободное движение динамически несбалансированного гироскопа Третий вариант соответствует случаю, когда тело динамически несбалансирова- но и осевые моменты инерции значительно различаются по величине. Рис. 8.21. Свободное движение несимметричного и несбалансированного гироскопа Как можно убедиться по результатам «экспериментов», вращательное движение тела существенно зависит от его инерционных характеристик.
Пользовательские библиотеки S-блоков 377 Пользовательские библиотеки S-блоков Те, кто занимается моделированием систем, рано или поздно сталкиваются с необ- ходимостью подготовки собственных блоков, имеющих свойства стандартных биб- лиотечных блоков пакета Simulink. Потребность в этом возникает, когда пользо- ватель при выполнении разных задач моделирования в собственной предметной области вынужден неоднократно применять созданные им элементарные блоки, которые являются оригинальными и не входят в состав стандартных библиотек Simulink, либо многократно использовать одни и те же блоки в определенных ус- тойчивых их сочетаниях В таких случаях, разместив новые блоки в библиотеке, можно значительно сократить время создания новой модели и предотвратить по- явление ошибок. Преимущество размещения собственных блоков в библиотеке пользователя состо- ит в том, что их можно применять неоднократно перетягивая изображение блока из библиотеки в окно блок-схемы модели. Пользоваться такими блоками удобнее всего посредством специальных окон настройки блоков, аналогичных тем, кото- рые рассматривались при описании стандартных блоков Simulink. Создание окон настройки блоков осуществляется посредством формирования мас- ки блока, которая и играет роль окна настройки. Создание библиотеки Рассмотрим процесс создания библиотеки S-блоков на конкретных примерах. Формирование новой библиотеки начинается с открытия окна новой блок-схемы модели. В этом окне следует вызвать команду File ► New ► Library (Файл ► Новый ► Библиотека). В результате на экране появится пустое окно библиотеки (рис. 8.22) с именем Library: untitledl. В этом окне можно создавать S-блоки, можно также пе- ретягивать в него блоки, которые уже созданы. В общем случае сформировать S-блок можно на основе стандартных блоков двух видов, блока S-Function из раздела User-Defined Function библиотеки Simulink и бло- ка Subsystem из раздела Ports & Systems той же библиотеки. При создании S-блока на базе блока S-Function используются файлы S-функций написанные на языке MATLAB; такой блок имеет лишь один вход (возможно, векторный) и один выход (векторный). S-блок, образованный на основе блока Subsystem, представляет собой блок схему, включающую уже существующие бло- ки, и может иметь произвольное количество входов и выходов различного вида. Образуем в открытой нами библиотеке S-блок S_DUE на основе созданной прежде одноименной S-функции. 1. Перетянем в окно создаваемой библиотеки блок S-Function из раздела Function & Table библиотеки Simulink. Окно библиотеки приобретет такой вид, как пока- зано на рис. 8 22. 2. Дважды щелкнув на изображении этого блока, вызовем окно его настройки (рис 8.23).
378 Урок 8 • Взаимодействие MATLAB с Simulink Рис. 8.22. Окно создаваемой библиотеки Рис. 8.23. Окно настройки блока S_DUE 3. В поле S-function name (Имя S-функции) открывшегося окна введем имя S_DUE, а в поле S-function parameters (Параметры S-функции) — параметры J. UgSkO, за- тем щелкнем на кнопке ОК. В результате (при условии, что соответствующий файл расположен в папках, доступных для MATLAB, а список введенных па- раметров отвечает списку параметров, указанных в S-функции) окно настрой- ки исчезнет, и изображение блока в окне библиотеки изменится (рис. 8.24). в-------- > S_DUE > Дин. Ура»н. Эйлера Рис. 8.24. Изображение блока S_DUE 4. Чтобы точнее отобразить сущность преобразовании, которые осуществляет блок, присвоим ему название Дин. Уравн. Эйлера. В дальнейшем для моделирования процесса управления ориентацией, например, космического аппарата (КА), двигающегося вокруг планеты по определенной замкнутой орбите, понадобится еще один блок, осуществляющий интегрирова- ние кинематических уравнений ориентации. В результате вычисляются значения параметров, определяющих текущее угловое положение корпуса КА относитель- но орбитальной системы отсчета. Если в качестве такого параметра принять ква- тернион поворота Q, который преобразует текущее положение КА в нужное, со- ответствующие кинематические уравнения будут иметь следующий вид ^=l(Qoa>-noQ), at 2
Пользовательские библиотеки S-блоков 379 где со — вектор-кватернион абсолютной угловой скорости КА; Q — вектор кватер- нион абсолютной угловой скорости орбитальной системы отсчета (жестко свя- занной с положением КА на орбите); ° — знак кватернионного умножения. Кинематическое уравнение в кватернионной форме не очень удобно использовать для проведения вычислений, из-за того что действия над кватернионами существенно отличаются от действий над матрицами и не предусмотрены. Целесообразнее пре- вратить данное уравнение в систему матричных уравнений: at 2 =Й?о (<B-Q) + (qx)(co + Q)]. ас 2 (8.5) В этих уравнениях величины q, ш, и О являются векторами-столбцами из проек- ций, соответственно, векторной части кватерниона поворота, вектора абсолютной угловой скорости КА на оси связанной системы координат и вектора угловой скорости орбитальной системы координат на ее же оси; qG — скалярная часть ква- терниона поворота; (q х) — кососиметричная матрица, составленная из проекций вектора q. Создадим М-файл S-функции, осуществляющей интегрирование этих кинемати- ческих уравнений. Ниже приведен текст М-файла с именем S KUqwat. function [sys.xO.str.ts] = S_KUqwat(t.x.u.flag.OMO.QwO) X S-функция S_KUqwat Кинематических уравнений в кватернионах X Реализует переход от заданного вектора абсолютной X угловой скорости орбитального космического аппарата X к кватерниону поворота КА относительно орбитальной X системы отсчета X ВХОД блока: X и = [отх.ощу.отг]- вектор проекций абсолютной угловой X скорости КА на оси СК. жестко связанной с ним X ВЫХОД блока: X У = [qw0.qwl.qw2.qw3] - вектор компонентов кватерниона поворота X относительно орбитальной декартовой системы координат X Входные ПАРАМЕТРЫ S-функции: X ОМО - орбитальная угловая скорость: X QwO - вектор начального кватерниона поворота X Лазарев Ю Ф 18-12-2003 switch flag. case 0 [sys.xO.str.ts] - mdlInitializeSizes(QwO); case 1. sys - mdlDerivatives(t.x.u.OMO): case 3. sys - mdlOutputs(x): case 9 sys - []; end X Конец процедуры %
380 Урок 8 • Взаимодействие MATLAB с Simulink !(;=-=======-=-============-=========== % Далее идут тексты внутренних процедур %==——=___==-------------------============= % function [sys.xO.str.ts] = mdlInitializeSizes(QwO) sizes = simsizes; sizes.NumContStates = 4: sizes.NumDiscStates = 0; sizes.NumOutputs = 4. sizes Numinputs - 3; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1: sys = simsizes(sizes); xO = QwO; str = []; ts =[00]; % Конец процедуры mdllnitializeSizes %----=====-----==_==-====_====-====-=== function z = mdlDerivatives(t.x.u.OMO) % ВХОДНОЙ вектор "u” - вектор проекций моментов внешних сил. X действующих на космический аппарат соответственно по осям X. Y. Z % х(1) - qwO - скалярная часть кватерниона; % х(2:4) = qw(l:3) - векторная часть кватерниона. К z(l) - d(qwO)/dt; z(2:4) = d(qw)/dt; Я Формирование векторов угловых скоростей и кватерниона от = и; ОМ = [0 ОМО 0]'; Vе х(2:4); отМОМ - от - ОМ; отРОМ = от + ОМ; z(l) = -(v'*omM0M)/2; Я уравнения скалярной части кватерниона z4 = (x(l)*omM0M + cross(v,omP0M))/2; X уравнения векторной части кватерниона z(2:4) = z4; % Конец процедуры mdlDerivatives ^=-==-=====_=—=—======—=====£ function у = mdlOutputs(х) У = х; % Конец процедуры mdlOutputs По аналогии с предыдущим создадим S-блок с именем S KUquat. Его входом явля- ется вектор проекций абсолютной угловой скорости КА, а выходом — вектор из четырех компонентов кватерниона поворота КА относительно орбитальной систе- мы координат. Первый компонент представляет собой скалярную часть, осталь- ные три — проекции векторной части этого кватерниона. В результате получим окно библиотеки в таком виде, как показано на рис. 8.25. > S_DUE > Дин Ура»н Эйлера > S_KUquat > Кин. Ура»н в патернионах Рис. 8.25. Блок S_KUquat добавлен в библиотеку ^ПРИМЕЧАНИЕ Если блок-схема библиотеки была закрыта, изменить ее после повторного от- крытия можно только после того, как будет вызвана команда Edit > Update diagram (Правка ► Обновить диаграмму) в окне библиотеки.
Пользовательские библиотеки S блоков 381 Наконец, необходимо создать S-блок, который осуществлял бы операцию вектор- ного умножения двух векторов, аналогичную М-функции cross. Для этого удобно использовать стандартный блок Subsystem из раздела Ports & Sub- systems. Перетянем его с помощью мыши в окно новой библиотеки (рис. 8.26). Дважды щелкнув на изображении этого блока, получим пустое окно, в котором составим блок-схему подсистемы (рис. 8.27). > S_DUE > > S_KUquat > Дин. Ура»н. Эйлера Кин. Ура«н «атер пионах 11-----------------? > Ini Outl > Subsystem Рис. 8.26. Включение в библиотеку блока Subsystem Рис. 8.27. Блок-схема подсистемы векторного произведения В этой блок-схеме использован блок MATLAB Function из раздела User-Defined Func- tions, окно настройки которого представлено на рис 8 28. Именно он, собственно, и выполняет операцию векторного умножения двух входных векторов, используя для этого стандартную функцию cross системы MATLAB. Рис. 8.28. Окно настройки блока Cross (Matlab Functi n)
382 Урок 8 • Взаимодействие MATLAB с Simulink Наконец нами создана библиотека, состоящая из трех новых собственных S-бло- ков Назовем ее LAZlibrary (рис. 8.29). Рис. 8.29. Библиотека пользователя LAZlibrary ВНИМАНИЕ В руссифицированной версии MATLAB 6.5 появление в тексте документа или в имени блока русской буквы «я» приводит к нарушениям работы блока. При составлении текстового оформления блока на русском языке избегайте упот- ребления этой буквы. Создание окна настройки блока Рассмотрим процесс создания окна настройки. Это окно является удобным сред- ством управления блоком. Прежде всего нужно выделить в библиотеке блок, для которого требуется создать окно. Пусть это будет блок S_DUE новой библиотеки. Затем следует выполнить команду Edit ► Mask S-Function (Правка ► Создать маску S-функции) окна библиотеки, в которой расположен выделенный блок. На экра- не появится окно редактора маски, представленное на рис. 8.30. Рис. 8.30. Окно Mask editor
Пользовательские библиотеки S-блоков 383 ^ПРИМЕЧАНИЕ Возможно, что при повторном вызове библиотеки команда Edit ► Mask S-Func- tion (Правка ► Создать маску S-функции) будет недоступна. В этом случае сле- дует обратить внимание на предпоследнюю команду в меню — Unlock Library (Разблокировать библиотеку), она должна быть активной. После щелчка на ней команда Mask S-Function также должна стать доступной. Окно Mask Editor (Редактор маски) имеет четыре вкладки: О Icon — предназначена для создания и редактирования изображений на блоке; О Parameters — служит для создания и редактирования диалоговой части (ввода параметров) окна настройки; О Initialization — используется для ввода некоторых команд среды MATLAB при инициализации блока; О Documentation — служит для оформления и редактирования текста и справоч- ной части маски. Окна настройки (маски) стандартных S-блоков в общем случае состоят из трех частей. Верхняя часть содержит справочную информацию о назначении блока, его главных параметрах и правилах, которыми следует пользоваться при установ- ке параметров блока и его применении. В средней части окна находятся поля вво- да параметров блока, надписи над ними объясняют смысл параметров. Нижняя часть окна настройки содержит стандартные кнопки: OK, Cancel, Help и Apply. Редактор маски предназначен для оформления двух первых частей окна настрой- ки, а также для создания справки, которая вызывается при щелчке на кнопке Help. Перейдя на вкладку Documentation (Документация) (рис. 8 31) окна редактора мас- ки, следует ввести в поле Mask type (Тип маски) имя блока. В поле Mask description (Описание маски) записывается информация, которая должна отобразиться в верх- ней (справочной) части окна настройки блока, а в поле Mask Help (Справка маски) — дополнительная справочная информация, которая появляется после щелчка на кноп- ке Help в окне маски Рис. 8.31. Вкладка Documentation окна Mask editor
384 Урок 8 • Взаимодействие MATLAB с Simulink ВНИМАНИЕ Грамматические ошибки в тексте документации маски вызваны тем, что в ру- сифицированной версии MATLAB 6.5 появление в тексте документов или име- ни маски и блоков русской буквы «я» часто приводит к нарушениям работы маски или блока. При составлении текстового оформления маски избегайте употребления этой буквы. С помощью вкладки Parameters (Параметры) можно сконструировать важнейшую часть маски — диалоговую (рис. 8.32) Рис. 8.32. Вкладка Parameters окна Mask editor Как видно на рисунке, основное пространство этой вкладки занимает область (пока недоступная) Dialog parameters (Параметры диалога). В ней вводятся пара- метры, определяющие количество полей ввода в окне настройки, надписи над ними и имена переменных, под которыми они будут фигурировать в блоке. Слева от указанной области находится единственная доступная кнопка с изображением стрелки (вверху). Это кнопка Add (Добавить). Щелчок на кнопке приводит к акти- визации области — в ней появляется строка, в которую следует ввести параметры. В блоке S_DUE имеется два параметра, значения которых нужно вводить в диало- говом режиме, — матрица моментов инерции тела J размером 3x3 и вектор UgSkO начальных значений трех проекций угловой скорости тела Поэтому следует соз- дать два поля для ввода значений указанных параметров и сделать надписи над ними. Добавление очередного поля в маску осуществляется посредством щелчка мы- шью на кнопке Add (Добавить). Сама запись производится в области Dialog para- meters (рис. 8.33). В столбец Подсказка записывается текст надписи, расположенной над полем вво- да, а в столбец Variable — имя, под которым введенная величина будет фигуриро- вать в блоке.
Пользовательские библиотеки S-блоков 385 Рис. 8.33. Ввод диалоговых параметров маски блока S_DUE 1тобы завершить процесс создания маски, щелкните на кнопке ОК в окне редак- ора маски, перейдите в окно библиотеки и дважды щелкните на изображении >лока S_DUE. На экране появится окно настройки блока (рис. 8.34) Таким же образом создается окно настройки блока S_KUqwat (рис. 8.35). Рис. 8 34. Окно настройки блока S_DUE Рис. 8.35. Окно настройки блока S_Kllqwat
386 Урок 8 • Взаимодействие MATLAB с Simulink Примеры применения пользовательской библиотеки Проиллюстрируем использование созданной нами библиотеки на двух примерах. Б первом случае моделируется процесс управления угловым положением космичес- кого аппарата. Второй случаи интересен тем, что создается модель очень сложного для программирования процесса действия сил сухого трения на движение тела. Ориентация космического аппарата Рассмотрим создание S-модели и комплекта М-программ, предназначенных для моделирования процесса управления ориентацией космического аппарата (КА), в том числе искусственного спутника Земли (ИСЗ) Чтобы упростить задачу, будем рассматривать космический аппарат как одно твер- дое тело, которое вращается вокруг Земли по замкнутой орбите. Управление ори- ентацией (угловым положением относительно орбитальной системы координат) осуществляется с помощью трех маховичних двигателей, оси которых совпадают с осями декартовой системы координат, жестко связанной с корпусом КА Махо- вичные двигатели производят разгон маховика в соответствии с уравнениями ^-=мк, k=x,y,2 (8.6) at и создают момент сил, действующий на корпус КА, вокруг оси вращения маховика Последний момент вызывает изменение углового движения КА вокруг этой оси, то есть осуществляет управление ориентацией. Изменение угловой ориентации космического аппарата в пространстве подчиня- ется законам механики, на основе которых строятся уравнения, реализованные в блоках S_DUE и S_KUqwat Создадим S модель системы ориентации и сохраним ее в файле SUO_KA.mdL Блок- схема системы ориентации (рис. 8 36) состоит из последовательно соединенных бло- ков S_DUE и S_KUquat, охваченных тремя цепями обратной связи, обеспечивающими управление космическим аппаратом по кватерниону, угловой скорости и компенсацию гироскопического момента, возникающего при поворотах КА. Полученное на выхо- де блока S_KUquat значение кватерниона поворота поступает на вход блока MATLAB Function, который выделяет векторную часть этого кватерниона, необходимую для формирования вектора момента управления угловым положением КА. Рис. 8.36. Блок-схема системы управления ориентацией космического аппарата
Примеры применения пользовательской библиотеки 387 В целом момент сил управления формируется по такому закону: М = -Krq -Dr©+(<ox)(J©). (8.7) В нем можно различить три составляющие. Первая из них пропорциональна век- торной части кватерниона отклонения текущего положения КА от заданного его положения (в этой программе заданное положение отвечает нулевому значению векторной части кватерниона). Она заставляет КА приближаться к заданному уг- ловому положению. Вторая составляющая момента управления пропорциональна вектору угловой скорости КА; она образует демпфирование процесса приближе- ния КА к заданному положению. Третья составляющая вводится для того, чтобы компенсировать возникающий при угловом движении КА гироскопический мо- мент, который стремится повернуть КА вокруг оси, перпендикулярной оси дейст- вия момента сил управления; именно эта составляющая заставляет корпус КА возвращаться в заданное положение по кратчайшему пути, то есть уменьшает энергетические затраты на переориентацию КА. Матрицы Кт и Dr определяют закон управления и должны быть заранее известны. Формирование первой составляющей момента управления на блок-схеме осуще- ствляется верхней обратной цепью с матричным усилителем Кг. Вторая состав- ляющая формируется цепью с матричным усилителем Dr. Третья составляющая обеспечивается третьей обратной цепью, в состав которой входят матричный уси- литель J и образованный ранее блок cross(Ul,U2). Эти составляющие складывают- ся на сумматоре и подаются на вход блока S_DUE. Так образуется замкнутая сис- тема управления ориентацией. Смоделируем поведение системы ориентации космического аппарата, управляе- мого по компонентам кватерниона при разных законах регулирования в соответ- ствии с такими данными. Матрица инерции КА: » J = [1200 100 -200:100 2200 300;-100 300 3100] J = 1200 100 -200 100 2200 300 -100 300 3100 Матрица моментов демпфирования. » Dr - 0.315*diag([1200 2200 3100]) Dr = 378.0000 0 0 0 693.0000 0 0 0 976.5000 Матрица позиционного управления (четыре значения): О матрица управления пропорциональна обратной матрице моментов инерции » Кг = k/J - diag([201,110,78]); Кг = 201 0 0 0 110 0 0 0 78
388 Урок 8 • Взаимодействие MATLAB с Simulink О матрица управления пропорциональна единичной матрице Е » Кг = k*E = diag([110,110,110]); Кг = 110 0 0 0 110 о о о 110 О матрица управления представляет собой комбинацию матриц инерции и еди- ничной » Кг = (alphaJ + betaE) = diag([72,110,204]); Кг = 72 0 0 0 110 0 0 0 204 О матрица управления пропорциональна матрице моментов инерции J » Кг = k*J = diag([60,110.155]) Кг = 60 0 0 О 110 о 0 0 155 Будем полагать, что орбитальная угловая скорость равняется нулю, а начальное отклонение положения КА от заданного определяется кватернионом QwO = [0.159 0.57 0.57 0.57] Это отвечает начальному отклонению от требуемого положения, равному 161,7°. Чтобы начать моделирование, нужно присвоить исходные значения всем пара- метрам. По окончании моделирования необходимо на основе полученных данных построить ряд графиков, которые отображали бы процесс переориентации КА Выполним эти процедуры (а также собственно моделирование) с помощью спе- циального М-файла SUO_KAupr.m. Его текст приведен ниже. X SUO_KAupr.m % Управляющая программа для запуска модели SUO_KA.mdl X Лазарев Ю.Ф. 18-12-2003 % Последние изменения 2-2-2004 clear all clc К =[3.1.2]; OMO = 0X01; % Ввод значений матрицы инерции J = [1200 100 -200; 100 220 % 1) проекций угловой скорости тела UgSkO =[000]; % 2)_компонентов кватерниона поворота QwO = [0.159.0.57.0.57.0.57]; qwO = Qw0(l): qw = Qw0(2 4); U0 = 2*acos(qw0); CsO = qw/sin(U0/2); Zk = [1 0 0 0]; X Матрицы моментов УПРАВЛЕНИЯ Dr = 0.315*diag(diag(J)) V = [201.110.78;110 110 110:72 110 204;60 110 155] for k = 1:4 X Установка параметров моделирования
Примеры применения пользовательской библиотеки 389 Кг = diag(V(k.:)) options = simset('Solver’.,ode45'.,RelTor.le-6); simUSUOJCA'.60,options); % МОДЕЛИРОВАНИЕ на S-модели X Формирование данных для вывода ГРАФИКОВ tt = tout; q0 = yout(i.l); qx = yout(;,2); qy = yout(:,3); qz - yout(:,4); omx - yout(:,5); omy = yout(:,6); omz - yout(:.7); Mx = yout(:.11); My = yout(:.12); Mz - yout(:.13); if k ==-l tl = tt; qOl = q0; qxl - qx; qyl = qy; qzl • qz; omxl = omx; omyl = omy: omzl = omz; Mxl = Mx; Myl = My; Mzl = Mz; elseif k == 2 t2 = tt; q02 = qO; qx2 = qx; qy2 - qy; qz2 = qz; omx2 = omx; omy2 = omy; omz2 = omz; Mx2 = Mx; My2 = My; Mz2 - Mz; elseif k == 3 t3 = tt; q03 = qO; qx3 - qx; qy3=qy; qz3 - qz; omx3 = omx; omy3 = omy; omz3 = omz; Mx3 = Mx; My3 = My; Mz3 = Mz; elseif k == 4 t4 = tt; q04 = qO; qx4 = qx; qy4 = qy; qz4 ° qz; omx4 omx; omy4 = omy; omz4 = omz; Mx4 = Mx; My4 = My. Mz4 = Mz; end clear tt qO qx qy qz omx omy omz Mx My Mz end A = 180/pi; DI = 2*acos(q01); D2 = 2*acos(q02); D3 = 2*acos(q03); D4 = 2*acos(q04); dtl = [O;diff(tl)]; dHxl = Mxl.*dtl; dHyl = Myl *dtl; dHzl = Mzl *dtl; domxl = EO:diff(omxl)]; domyl = [O.diff(omyl)]; domzl = [0;diff(omzD]; DExl = cumsum(abs(dHxl.*domxl)); DEyl = cumsum(abs(dHyl.*domyl)); DEzl = cumsum(abs(dHzl.*domzl)); dl = DExl + DEyl + DEzl; dt2 = [0;diff(t2)]; dHx2 = Mx2.*dt2; dHy2 = My2.*dt2; dHz2 = Mz2 *dt2; domx2 = [0;diff(omx2)]; domy2 = [0;diff(omy2)]; domz2 = [0;diff(omz2)]; DEx2 = cumsum(abs(dHx2.*domx2)); DEy2 = cumsum(abs(dHy2.*domy2)); DEz2 = cumsum(abs(dHz2.*domz2)); d2 = DEx2 + DEy2 + DEz2: dt3 = [0:diff(t3)]; dHx3 = Mx3.*dt3; dHy3 = My3.*dt3; dHz3 = Mz3.*dt3; domx3 = E0;diff(omx3)]; domy3 = E0;diff(omy3)]; domz3 = E0;diff(omz3)]; DEx3 = cumsum(abs(dHx3.*domx3)); DEy3 = cumsum(abs(dHy3.*domy3)); DEz3 = cumsum(abs(dHz3.*domz3)); d3 = DEx3 + DEy3 + DEz3; dt4 = E0;diff(t4)]; dHx4 = Mx4.*dt4; dHy4 = My4.*dt4; dHz4 - Mz4.*dt4; domx4 = E0;diff(omx4)]; domy4 = E0;diff(omy4)]: domz4 = E0:diff(omz4)]; DEx4 -cumsum(abs(dHx4 *domx4));
390 Урок 8 • Взаимодействие MATLAB с Simulink DEy4 = cumsum(abs(dHy4.*domy4)); DEz4 = cumsuni(abs(dHz4.*doniz4)); d4 = DEx4+DEy4+DEz4; % Графики проекций компонентов кватерниона на плоскости subplot(2.2.1) plot(qxl,qyl, qx2,qy2,':',qx3,qy3,'--*,qx4,qy4.'.*), grid title('Проекции КОМПОНЕНТОВ кватерниона') xlabel('Qx'), ylabeK'Qy') subplot(2.2.2) plot(qyl,qzl.qy2,qz2.':',qy3.qz3.,qy4.qz4,’.grid title('Ha координатные плоскости ') xlabel('Qy'). ylabeK'Qz') subplot(2.2,3) plot(qxl,qzl, qx2.qz2.':',qx3.qz3,'--',qx4,qz4,'.'), grid xlabeK'Qx'). ylabeK'Qz’) legendC'Kr - k/J','Kr - kE'.'Kr - k/(\alphaJ+\betaE)'.'Kr = kJ',4) subplot(2,2,4) cl - Dl./sin(Dl/2)*A: cxl - cl.*qxl; cyl - cl.*qyl; czl - cl.*qzl;c2 - D2./sin(D2/2)*A; cx2 - c2.*qx2; cy2 - c2.*qy2; cz2 - c2.*qz2: C3 - D3./sin(D3/2)*A; cx3 - c3.*qx3: cy3 - c3.*qy3; cz3 - c3.*qz3; c4 - D4./sin(D4/2)*A; cx4 - c4.*qx4: cy4 - c4,*qy4; cz4 = c4.*qz4: plot3(cxl.cyl,czl.cx2,cy2.cz2.’:'.cx3.cy3,cz3..cx4,cy4.cz4.'.'),grid title('Вектор ЭЙЛЕРОВА поворота в пространстве') xlabeK'Ex (градусы)’). ylabeK'Ey (градусы)'), zlabeK'Ez (градусы)*) % Графики зависимостей компонентов кватерниона от времени figure subplot(2.2.1) plot(tl,qxl,t2, qx2,':',t3.qx3.,t4,qx4,'.'). grid title('Зависимость КОМПОНЕНТОВ кватерниона от ВРЕМЕНИ') xlabeK'Время (с)'), ylabeK'Qx') subplot(2,2.2) plot(tl,qyl.t2.qy2.':',t3,qy3.,t4.qy4.’.'), grid ylabeK'Qy'). xlabeK'Время (c)') subplot(2,2,3) plot(tl,qzl.t2,qz2,':',t3,qz3.,t4,qz4.’.'), grid ylabeK'Qz'). xlabeK'Время (c)') subplot(2,2.4) plot(tl,Dl*A,t2.D2*A,':',t3.D3*A.'',t4,D4*A,'.'). grid title('Поворот вокруг оси Эйлера'). ylabeK'Угол поворота в градусах') xlabeK*Время (с)') legend(*Kr - k/J*.'Kr = k'.'Kr = k/(\alpha+\beta)'.'Кг = kJ*) Я Графики зависимостей проекций момента сил от времени figure subplot(2,2.1) plot(tl,Mxl.t2. Мх2,*:*,t3.Mx3.*--*,t4.Mx4.*.’). grid title('Зависимость проекций МОМЕНТА УПРАВЛЕНИЯ от времени') ylabel('Mx'). xlabeK'Время (с)') subplot(2.2.2) plot(tl.Myl.t2.My2.*:'ДЗ.МуЗ.*--*,t4.My4.'.*), grid ylabel('My'). х1аЬеК'Время (с)*) subplot(2,2,3) plot(tl.Mzl.t2.Mz2.': * ,t3.Mz3. *-' ,t4.Mz4. *. *). grid ylabeK'Mz'), xlabeK'Время (c)')subplot(2.2,4) plot(tl,dl.t2.d2,*:*,t3,d3,'--*,t4,d4.*.'), grid title('Суммарные затраты ЭНЕРГИИ') ylabel('\Signia\Delta H\Delta\omega'). xlabeK'Время (c)*) legendCKr - k/J','Kr - k'.'Kr - k/(\alpha + \beta)'.'Kr - kJ'.O)
Примеры применения пользовательской библиотеки 391 Результаты, полученные после выполнения этого М-файла, представлены на рисун- ках. На рис. 8.37 приведены проекции траекторий кватерниона на все три коорди- натные плоскости, а также траектории в пространстве вектора эйлерова поворота. Рис. 8.37. Проекции кватерниона поворота КА на координатные плоскости На рис. 8.38 показаны графики зависимостей от времени компонентов кватер- нионов, а также проекций вектора эйлерова поворота. Рис. 8.38. Зависимость компонентов кватерниона поворота КА от времени
392 Урок 8 • Взаимодействие MATLAB с Simulink На рис 8.39 представлена зависимость проекций момента управления от времени, а также общие приращения (сумма по трем ортогональным осям) кинетических моментов двигателей-маховиков, которые обеспечивают выполнение поворотов КА. Эти приращения определяют затраты энергии на поворот КА. Рис. 8.39. Зависимость проекций момента управления ориентацией КА от времени Рассматривая полученные графики, можно сделать вывод, что наименьшие за- траты энергии наблюдаются в том случае, когда матрица позиционного управле- ния пропорциональна матрице моментов инерции КА. При использовании тако- го закона управления энергии расходуется в два раза меньше, чем когда матрица коэффициентов позиционного управления обратно пропорциональна матрице моментов инерции. К такому же выводу можно прийти и теоретическим путем, если подставить выра- жение (8.7) момента управления в уравнение (8.1) движения КА с учетом последней зависимости матрицы Кг от матрицы J. Если предположить также, что и матрица демпфирования Dr пропорциональна матрице J с коэффициентом пропорциональ- ности f, то нетрудно убедиться, что векторное уравнение движения в таком слу- чае будет иметь следующий вид: — + + kq = 0. dt Оно распадается на три одинаковых независимых уравнения движения КА во- круг трех его координатных осей.
Примеры применения пользовательской библиотеки 393 Движение маятника под действием сил сухого трения Как известно, основные свойства силы трения, возникающей при относительном перемещении двух трущихся друг о друга тел, таковы: О сила трения всегда направлена в сторону, противоположную относительной скорости движения тел; О величина силы трения не зависит от величины этой относительной скорости. Указанные свойства довольно хорошо описываются математически, если исполь- зовать сигнум-функцию: Ftr = ~Ft s8n (Ю, где Fp — некоторый положительный коэффициент, равный величине силы сухого трения, а V — относительная скорость взаимного перемещения трущихся тел. Однако нам известно еще одно свойство сил сухого трения: если трущиеся тела неподвижны друг относительно, друга, то приложение внешней силы к одному из них не вызовет относительного движения тел до тех пор, пока действующая сила (назовем ее «активной» — Fa) не превысит по величине так называемую силу тре- ния покоя Fp > 0. В этом случае сила трения уже определяется не величиной и направлением ско- рости, а величиной приложенной активной силы, принимая такое значение и на- правление, что она полностью компенсирует действие этой силы: Fa +Ftr =0» если V =0 и |Fe| <Fp. Данная особенность сил сухого трения обусловливает целый ряд замечательных свойств систем, в которых действуют подобные силы. Это, в частности, такое яв- ление как «захватывание» или «сцепление» одного тела с другим, когда оба тела начинают двигаться как одно, оставаясь неподвижными друг относительно друга. Теоретическое изучение этого свойства сил сухого трения связано со значитель- ными трудностями, поскольку зависимость силы трения от скорости имеет раз- рывный характер, а также существует сложная зависимость силы сухого трения от скорости и активной силы. Сформулируем задачу описания движения механической системы, находящейся под действием сил сухого трениея. Пусть q — обобщенная координата (это может быть линейное перемещение или угол при вращательном движении), соответствую- щая относительному перемещению трущихся тел. Составим обобщенное дифферен- циальное уравнение движения по данной координате и выделим в нем три части. О Обобщенная сила инерции. Включим в эту часть только члены, пропорцио- нальные относительному обобщенному ускорению. Эту часть можно будет пред- ставить в следующем виде: (~Mqq), где Mq имеет смысл обобщенной массы и может зависеть от обобщенной координаты q. О Обобщенная сила трения. Отнесем к этой части все члены уравнения, опреде- ляющие влияние сил сухого трения: Qtr(c[). О «Активная» обобщенная сила. Включим в эту часть все остальные члены урав- нения: Qq.
394 Урок 8 • Взаимодействие MATLAB с Simulink Тогда уравнение движения по этой координате можно представить в следующем виде: Q - ~гт- (Qa + Qtr(q)) • (8-8) Только после такой операции можно сформулировать математическую зависи- мость обобщенной силы сухого трения от всех факторов, влияющих на нее в соот- ветствии с установленными свойствами трения: —Л/рр, если Л/ур, если Qtr (9) -’ ~Qa, еСЛИ Мтр> если £>0; q <0; 9=0 и |£,| <МЛ>; 9 = 0 и |0а|>МГР. (8.9) где постоянные положительные величины MTD и Мтр определяют величины обоб- щенных сил трения движения и покоя соответственно. При этом обычно выпол- няется соотношение МТР > Mtd- Как видим, полностью описать все указанные особенности сил сухого трения мож- но только после того, как заданы (известны) уравнения движения и выделена так называемая активная сила. Создадим универсальный блок, осуществляющий однократное интегрирование уравнения (8.8). Входом этого блока должно быть текущее значение активной силы, выходом — текущее значение обобщенной скорости q. Параметры блока представ- лены в табл. 8.4. Таблица 8.4. Обозначение параметров блока сухого трения в формулах и программе Формула Программа Физический смысл Mq Обобщенная масса ^П) TrDvig Величина трения движения Мтр TrPoc Величина трения покоя Qo qtO Начальное значение обобщенной относительной скорости Оформим блок в виде подсистемы (рис. 8.40) и назовем его Suhoe Trenye. Основной элемент блока — интегратор. Он осуществляет интегрирование пода- ваемого на него сигнала относительного ускорения, выдавая сигнал, равный теку- щему значению обобщенной скорости. Начальное значение обобщенной скорости задается внешним блоком IC, на который подается постоянный сигнал из блока Constant, равный начальному значению обобщенной скорости. Сигнал обобщенного ускорения формируется таким образом. Сначала на суммато- ре (блок Sum) активная сила суммируются с силой трения, результат подается на блок Gain, который производит деление суммарного сигнала на обобщенную массу. Блоки, формирующие силы трения, расположены в нижней части блок-схемы. Если скорость q не равна нулю, то переключатель в блоке Ключ находится в ниж- нем положении и сигнал обобщенной скорости проходит через блок Sign (нижняя
Примеры применения пользовательской библиотеки 395 правая часть схемы), умножается на постоянный коэффициент TrDvig и передает- ся на сумматор как сила трения с обратным знаком. Таким образом реализуются первые два соотношения (8.9). Трение д|ижен. Рис. 8.40. Блок-схема блока Suhoe Тгепуе Значительно сложнее выполнить последние два условия (8.9). Для этого прежде всего нужно как можно точнее определить момент времени, когда относительная скорость проходит через нуль. Необходимо сделать следующее. 1. В блоке интегратора надо открыть порт состояния Show state port, при этом на изображении блока внизу появится дополнительный выход — порт состояния- кроме того, нужно подключить внешнее управление работой интегратора (ус- тановив для параметра External reset значение rising; с левой стороны блока появится изображение еще одного порта (управляющего). 2. К порту состояния надо подключить вход блока Hit Crossing, который осущест вляет фиксацию точного момента времени перехода скорости через нуль и выда ет в этот момент времени управляющий единичный сигнал. 3. К выходу блока Hit Crossing следует подсоединить управляющий вход блока Switch (второй вход); при этом в качестве порога (параметр Threshold) этого блока нужно установить значение 0,5; кроме того, выход блока Hit Crossing не- обходимо соединить с портом управления блока Интегратор. Совокупность описанных блоков работает следующим образом. Если значение скорости не переходит через нуль, выходной сигнал блока Hit Crossing равен нулю. Он меньше порога блока Switch (0,5). Поэтому переключатель соединяет с выхо- дом третий (нижний) вход, и на сумматор подается сила трения движения. Как только блок Hit Crossing зарегистрирует пересечение скоростью нуля, на его выхо- де сигнал станет равным единице, он становится больше порога блока Switch и пе- реключает на сумматор ветвь блок-схемы, формирующую трение покоя (левая
396 Урок 8 • Взаимодействие MATLAB с Simulink нижняя часть блок-схемы). Одновременно сигнал блока Hit Crossing поступает на управляющий вход блока Интегратор. По нему интегратор начинает интегрирова- ние заново с момента пересечения скоростью нуля с начальным условием, уста- новленным в блоке IC (в нашем случае q = 0). Если при дальнейшем интегрировании значение q продолжает оставаться равным нулю, то состояние схемы остается не- изменным. Если же величина q на каком-то шаге интегрирования приобретет зна- чение, отличное от нуля, блок Hit Crossing сбросит значение своего выходного сигнала до нуля, ключ перебросит «рубильник» в нижнее положение, и вновь «заработают» силы трения движения. Ветвь, формирующая силы трения покоя, осуществляет следующие функции. Сна- чала определяется модуль активной силы. Затем он сравнивается со значением силы трения покоя. Определяется меньшая из этих двух положительных величин. Затем ей присваивается знак активной силы (блоки Sign и Product). Полученная величина и составляет силу трения покоя, она направляется на первый вход пере- ключателя. Окно настройки блока SuhoeTrenye, которое нужно создать, показано на рис. 8.41. Рис. 8.41. Окно настройки блока Suhoe Trenye Рассмотрим теперь задачу исследования движения физического маятника, на ко- торый действует момент сил сухого трения в опорах его оси вращения.
Примеры применения пользовательской библиотеки 397 Обозначим через а угол поворота маятника относительно основания. Тогда урав- нение движения (вращения вокруг его оси) маятника можно записать так: ср" +sin<p = pfr(a'), (8.10) где, как и ранее, <р — угол отклонения маятника от вертикали. Величина (a') представляет собой безразмерный момент сил трения, то есть отношение момен- та силы трения к коэффициенту жесткости mgl. Обозначим угол поворота основания относительно вертикали вокруг оси враще- ния маятника через 0. Тогда три угла, 0, а и ср, будут связаны между собой соотно- шением а = <р-0. (8.11) Запишем уравнение (8.10) с учетом этого соотношения в следующем виде: а" = -0" -sin(a + 0) + ^^(а') (8.12) Координата а характеризует относительное (угловое) перемещение маятника и ос- нования. Сравнивая уравнение (8.12) с уравнением (8.8), можно прийти к выво- ду, что в рассматриваемом случае q = а, Мд =1, Qa = -0" -sin(a + 0) = -0" -sincp. Блок-схема S-модели TRENYE, реализующей интегрирование уравнения (8.12), при- ведена на рис. 8.42. [Схем^одел^аетникг^уси^трением^ Рис. 8.42. Блок-схема S-модели TRENYE Блок Osnova в этой S-модели (рис. 8.43) формирует сигналы угловой скорости (Tet) и углового ускорения (Tett) вращения основания. Derivitivd Рис. 8.43. Блок-схема подсистемы Osnova Как видим, угловая скорость основания формируется по закону 0' (О = 0'о + 0'm sin(O)eT + 8g ). Значения используемых констант (табл. 8.5) вводятся в окне настройки блока Sine Wave (рис. 8.44).
398 Урок 8 • Взаимодействие MATLAB с Simulink Таблица 8.5. Обозначения величин в формулах и в программе Формула Программа Физический смысл ©о TetO Постоянная составляющая угловой скорости Tetm Амплитуда угловой скорости сое omt Частота изменения угловой скорости ев et Начальная фаза угловой скорости Рис. 8.44. Окно настройки блока Sine Wave Блок-схема второй подсистемы, Activ, формирующей сигнал активной силы, чрез- вычайно проста (рис. 8.45). Trigonometric Function Рис. 8.45. Блок схема подсистемы Activ Как и ранее, создадим управляющую программу TRENYE_upr.m, которая будет вы- полнять следующие функции: О ввод значений всех параметров, однозначно определяющих движение системы; О запуск S-модели TRENYE.mdl на моделирование; О вывод результатов моделирования в графическое окно MATLAB.
Примеры применения пользовательской библиотеки 399 Текст программы приведен ниже. % Trenye_upr % Управляющая программа для запуска модели TRENYE mdl X Лазарев Ю.Ф. 5-2-2004 clear all. clc % 1. Задание массы и характеристик трения Mq - 1; ТгРос -0.2; TrDvig - 0.01; % 2. Задание параметров вращения основания X Teta’ = TetO + Tetm*sin(omt*t + et) Tetm = 0; TetO = 0; om = 0; et = 0; % 3. Задание начальных условий fiO = 30*pi/180; fitO = 0; X 4. Расчет начальной относительной скорости qtO = tit0-Tet0-Tetm*sin(et); % 5. Запуск модели на моделирование sim('TRENYE'); % МОДЕЛИРОВАНИЕ на S-модели % 6. Формирование данных для вывода ГРАФИКОВ FI = yout(:.1)*180/р1; Fit yout(:,2); ALt - yout(:.3): t - tout; % 7. Вывод графиков subplot(2,2,l) plot(FI,FIt.'.'.FI.ALt), grid set(gca.’fontsize’.12) xlabel(’Угол (градусы)'). ylabeK'Угловая скорость (б/р)’) legend('относит.'.'абсолютн.'.0) set(gca.'fontsize',14). title('Фазовый портрет’) subplot(2.2.[3 4]) plot(t.FI). grid set(gca,'fontsize',12) xlabeK'Время (б/р)'). ylabeK'Угол (градусы)’) set(gca.'fontsize'.14), Ш1е('Угол отклонения от вертикали') subplot(2.2.2) axis('off') h = text(0.1,'Маятник с сухим трением'.'fontsize'.16); h - text(-0.2,0.8.'Вращение основания: Teta'Kt) - TetO + Tetm*sin(omt*t + et)'.’fontsize'.12): h = text(-0.2,0.7.[Tfle: '.. . sprintf('TetO = Xg; '.TetO).sprintf(’Tetm - Xg;'.Tetm).... sprintf('omt = Xg: ’.omt).... sprintff'et = X g градусов'.et*180/pi)]); h - text(-0.2.0.5.'Характеристики трения'.'fontsize'.12); h = text(-0.1,0.4.[sprintf(’TpeHne покоя = Xg; '.TrPoc).... sprintf('Трение движения « Xg: ’.TrDvig)]); h = text(-0.2,0.2,sprintf('Начальная абс. угл. скор. - Xg:'.fitO).... 'fontsize'.12); h “ text(-0.2.0.0.'--------------------------------------------’); h = text(-0.2,-0.1.'Программа TRENYE-upr 5-02-2004 Лазарев Ю. Ф.'); h = text(-0.2,-0.2,'-------------------------------------------’); Результат выполнения этой программы представлен на рис 8.46. Прослеживают- ся три основных нелинейных свойства маятника: О огибающая свободных колебаний представляет собой прямую линию; О колебания затухают за конечное время; О маятник останавливается в смещенном относительно вертикали положении. Рассмотрим поведение маятника при равномерном вращении основания вокруг оси маятника (такой маятник называют маятником Фроуда).
400 Урок 8 • Взаимодействие MATLAB с Simulink Рис. 8.46. Свободные колебания маятника под действием сил сухого трения При вращении основания с постоянной угловой скоростью под действием сил су- хого трения маятник совершает колебания с частотой его собственных колебаний относительно среднего положения, смещенного относительно вертикали на 11,5° в сторону вращения основания. От величины угловой скорости основания зави- сит только амплитуда этих колебании (рис. 8.47, а, б). а Рис. 8.47. Маятник Фроуда: а — при большой угловой скорости основания
Примеры применения пользовательской библиотеки 401 б Рис. 8.47. Маятник Фроуда: б — при малой угловой скорости основания Влияние колебаний основания вокруг оси маятника с различной амплитудой показано на рис. 8.48, а, б. Маятник с сухим трением Вращение основания. Teta’;t^Teft*Te№’>ir^cwa’T<-et] где ТеЮ^С. Tfiim^OS. О градус со Характеристики трения Грьние пдаъв - 0 2. Треиие движения = 0 2: Начальная вбс утл скор. - О Программа TREHYE ирг 5^2-ТЯИ Лазарев Ю Ф. Время (б/р) а Рис. 8.48. Маятник при колебаниях основания: а — с большой амплитудой
402 Урок 8 • Взаимодействие MATLAB с Simulink б Рис. 8.48. Маятник при колебаниях основания: б —с малой амплитудой Интересно, что амплитуда вынужденных колебаний маятника практически не за- висит от амплитуды колебаний основания. Кроме того, при значительных ампли- тудах колебания основания на вынужденные колебания накладываются незату- хающие собственные колебания маятника. Вопросы для самопроверки 1. Как внутри блоков обозначаются входные величины, выходные величины блока и его переменные состояния? 2. Что такое обнаружение пересечения нуля, для чего эта процедура служит и ка- кими блоками используется? 3. Какими средствами можно обеспечить передачу данных из среды MATLAB в S-модель и обратно? 4. В чем главное преимущество блока S-Function по сравнению со всеми осталь- ными блоками библиотеки Simulink, позволяющими пользователю создавать собственные блоки? 5. Можно ли обеспечить одновременное интегрирование нескольких процессов одним блоком Integrator? 6. Что такое S функции, для чего они предназначены и как их создать? 7. Как обеспечить запуск S-модели из программы MATLAB? 8. Как обеспечить запуск программы MATLAB из S-модели? 9. Как создать окно настройки блока? 10. Как создать собственную библиотеку S-блоков?
Моделирование УРОК аэрокосмических объектов □ Общая характеристика библиотеки Aerospace □ Свободное угловое движение космического аппарата □ Управляемое угловое движение космического аппарата □ Движение искусственного спутника Земли
404 Урок 9 • Моделирование аэрокосмических объектов В предыдущих уроках мы познакомились с ядром пакета Simulink — библиоте- кой Simulink. Специалисты различного профиля, основываясь на возможностях ядра пакета, разработали ряд S-библиотек, приспособленных для решения специ- фических задач в своей отрасли. Некоторые из библиотек включены в комплект поставки пакета Simulink. Неотъемлемым компонентом S-моделей, создаваемых на базе этих библиотек, являются блоки, входящие в состав ядра. В настоящем уроке мы познакомимся с библиотекой Aerospace Blockset, предназначенной для моделирования динамики полетов аэрокосмических объектов. )бщая характеристика библиотеки Aerospace Чтобы получить доступ к библиотеке Aerospace, откройте окно Simulink Library Brow- ser (Браузер библиотек Simulink) и с помощью контекстного меню библиотеки вызовите окно Library: aerolibvl, показанное на рис. 9.1. В состав библиотеки вхо- дит семь разделов: О Equatios of Motion (Уравнения движения) — содержит блоки, позволяющие со- ставить модель летательного аппарата; О Propulsion (Двигатель) — включает блоки, моделирующие влияние двигатель- ной установки летательного аппарата; О Actuators (Привод, рулевые машинки) — содержит блоки, моделирующие по- ведение привода рулей летательного аппарата; О GNC (Регуляторы управления движением) — содержит блоки моделирования системы управления движением летательного аппарата; О Environment (Среда) — состоит из блоков, моделирующих влияние окружаю- щей среды на движущийся в ней летательный аппарат; О Transformations (Преобразования) — включает в себя блоки преобразования координат; О Animation (Анимация) — содержит блоки, позволяющие построить анимаци- онные изображения движения летательного аппарата в пространстве. Рис. 9.1. Окно Library: aerolibvl
Общая характеристика библиотеки Aerospace 405 Раздел Equations of Motion В раздел Equatons of Motion (Уравнения движения) входят две группы блоков (рис. 9.2): 6DoF (6 Degree of freedom — 6 степеней свободы) и 3DoF (3 Degree of freedom — 3 степени свободы). Рис. 9.2. Содержимое раздела Equations of Motion К первой группе принадлежат блоки, позволяющие задать модель пространствен- ного движения с шестью степенями свободы: трем первым соответствуют переме- щения вдоль осей декартовой системы координат, а остальным — углы поворота летательного аппарата относительно этой системы координат. Если дважды щелк- нуть мышью на изображении группы 6DoF, на экране появится окно, представлен- ное на рис. 9.3. Рис. 9.3. Блоки группы 6DoF В этом окне изображены два блока — 6DoF (Euler Angles) и 6DoF (Quaternion). Они представляют собой модели поведения твердого тела с шестью степенями свобо- ды. Первый из них осуществляет представление углового движения тела через углы Эйлера, а второй — через кватернион поворота. Окна настройки этих бло- ков почти не отличаются друг от друга (рис. 9.4, 9.5).
406 Урок 9 • Моделирование аэрокосмических объектов Рис. 9.4. Окно настройки блока 6DoF (Euler Angles) Рис. 9.5. Окно настройки блока 6DoF (Quaternion)
Общая характеристика библиотеки Aerospace 407 Прежде чем знакомиться с содержимым этих окон, нужно иметь представление об особенностях систем координат, используемых в библиотеке Aerospace, и при- меняемых обозначениях. В качестве основной (базовой) системы координат здесь принята система декар- товых (взаимно ортогональных) осей Хе, Ye, Ze, связанная с поверхностью Зем- ли. При этом предполагается, что ось Ze направлена вниз, к центру Земли. Две другие оси лежат в плоскости горизонта Земля предполагается неподвижной, не вращающейся в пространстве и плоской. Отсюда следует, во-первых, что система земных осей Хе, Ye, Ze в этих условиях является также и инерциальной, во-вто- рых — что с помощью библиотеки Aerospace можно изучать движения вблизи по- верхности Земли лишь на небольшом расстоянии от начальной точки и в течение небольшого промежутка времени, когда кривизной поверхности и вращением Зем- ли в пространстве можно пренебречь. Вторая система координат, Zj>, по умолчанию имеет начало в центре масс О летательного аппарата (в дальнейшем ЛА). Ось Хь направлена по продольной оси ЛА к носу, ось У^, перпендикулярная ей, лежит в плоскости крыла и направ- лена вправо (если смотреть с хвоста на нос ЛА), ось Zb перпендикулярна плоско- сти крыла и направлена вниз. Проекции вектора V скорости ЛА на оси Уй, Zb обозначаются uh, vb и wb со- ответственно, проекции вектора со абсолютной угловой скорости ЛА — р, q и г, а п- роекции вектора М момента внешних сил, действующих на ЛА, — L, М и N. Углы Эйлера, используемые в библиотеке, состоят из углов рыскания v (yaw), тангажа 0 (pitch) и крена ср (roll) Угол рыскания представляет собой угол откло- нения в плоскости горизонта продольной оси Хь ЛА от направления оси Хе зем- ной системы координат. Угол тангажа — это угол подъема продольной оси ЛА над плоскостью горизонта, а угол крена является углом поворота корпуса ЛА во- круг его продольной оси. Возвращаясь к окнам настройки, перечислим содержащиеся в них настраивае- мые параметры блоков. О Initial position in inertial axes [Xe,Ye,Ze] (m) — начальное положение в инерциаль- ных (земных) осях. Следует задать начальное отклонение центра масс (О) ЛА от начала земной системы координат. О Initial velocity in body axes [u,v,w] (m/s) — начальные скорости в осях тела. Следу- ет задать проекции скорости центра масс ЛА в начальный момент времени на оси, связанные с ЛА. О Initial Euler orientation [rollpitch,yaw] (rad) — начальная ориентация в углах Эй- лера. Следует задать начальные углы крена, тангажа и рыскания. О Initial body rotation rates [p,q,r] (rad/s) — начальные угловые скорости тела. Сле- дует задать начальные значения проекций угловой скорости ЛА на оси, свя- занные с ЛА. О Mass (kg) — задаваемое значение массы ЛА О Inertia matrix (kg.mA2) — задаваемая матрица (3x3) моментов инерции ЛА отно- сительно связанных с ним осей.
408 Урок 9 • Моделирование аэрокосмических объектов Входные величины у обоих блоков одинаковы. Это вектор текущих проекции на оси ЛА всех действующих на него внешних сил и вектор текущих моментов сил относительно осей ЛА. Перечислим выходные величины, они также одинаковы у обоих блоков: О Ve (m/s) — вектор проекций текущего значения вектора скорости центра масс ЛА на оси земной (инерциальной) системы координат, О Хе (т) — вектор текущих смещений центра масс ЛА относительно начала зем- ной (инерциальнои) системы координат; О Euler (rad) — вектор текущих значений углов крена, тангажа и рыскания соот- ветственно; О DCM — текущее значение матрицы направляющих косинусов связанных осей относительно земных осей; О Vb (m/s) — вектор проекций текущего значения вектора скорости центра масс ЛА на оси системы координат, связанной с корпусом ЛА’ О p,q,r (rad/s) — вектор проекций текущей угловой скорости ЛА на оси, связан- ные с ЛА; О pdot,qdot,rdot (rad/sA2) — вектор производных от проекций текущей угловой скорости ЛА на оси, связанные с ЛА. Блоки, входящие в группу 3DoF, позволяют моделировать движение ЛА в одной плоскости (обычно — продольное движение в вертикальной плоскости). В соста- ве группы два блока: Equations of Motion (Body Axes) (Уравнения движения в свя- занных осях) и Incidence & Airspeed (Угол атаки и воздушная скорость) (рис. 9 6). Рис. 9.6. Блоки подраздела aerolib3dof Первый блок позволяет моделировать продольное движение путем численного интегрирования уравнений продольного движения ЛА. Второй вычисляет по за- данным проекциям скорости ЛА на оси и У/, угол атаки Alpha и величину век- тора воздушной скорости
Общая характеристика библиотеки Aerospace 409 Окно настройки блока Equations of Motion содержит параметры, необходимые для численного интегрирования дифференциальных уравнений продольного движения: О Initial velocity (m/s) — начальная скорость; О Initial body altitude (rad) — начальный угол подъема вектора скорости над плос- костью горизонта; О Initial incidence (rad) - начальный угол атаки; О Initial body rotate rate (rad/sec) — начальная угловая скорость тангажа; О Initial position [х z] (m) — начальное положение центра масс, О Mass (kg) — масса ЛА; О Inertia (kg тл2) — момент инерции ЛА относительно поперечной оси; О Acceleration due to gravity (m/sA2) — ускорение силы тяжести Входными величинами блока Equations of Motion являются следующие: О Fx (N) — текущее значение силы (в ньютонах), действующей на ЛА вдоль его продольной оси Хь\ О Fz (N) — текущее значение силы (в ньютонах), действующей на ЛА вдоль его нормальной оси Zj,; О М (Nm) — текущее значение момента сил (в ньютонах на метр), действующего на ЛА вокруг его поперечной оси У/,. Ниже перечислены выходные величины блока: О Altitude (rad) — текущее значение угла между вектором скорости ЛА и плоско- стью горизонта (в радианах); О q (rad/s) — текущее значение проекции угловой скорости ЛА на его попереч- ную ось (в радианах в секунду); О qdot (rad/sA2) — текущее значение проекции углового ускорения ЛА на его по- перечную ось (в радианах в секунду в квадрате); О Хе, Ze (го) — текущие координаты центра масс ЛА в продольной плоскости в земной системе координат (в метрах); О U, w (m/s) — текущие значения проекций скорости ЛА соответственно на про- дольную и нормальную оси ЛА (в метрах в секунду); О Ах, Az (m/sA2) — текущие значения проекций ускорения ЛА соответственно на продольную и нормальную оси ЛА (в метрах в секунду в квадрате). Рассмотренные блоки являются основными для моделирования движения ЛА. В них сосредоточены программы, осуществляющие численное интегрирование дифференциальных уравнений Но для работы блоков необходимо формировать текущие значения сил и моментов сил, действующих на ЛА в течение его полета. Их можно объединить в три группы: О силы и моменты, действующие на ЛА со стороны маршевого двигателя; О силы и моменты, действующие на корпус ЛА со стороны окружающей его сре- ды (силы и моменты аэродинамического сопротивления движению ЛА в ат- мосфере и сила тяжести ЛА);
410 Урок 9 • Моделирование аэрокосмических объектов О силы и моменты, действующие на ЛА со стороны исполнительных элементов системы управления, таких как рули, элероны, элевоны, закрылки и т. п. В общем случае эти силы и моменты сил настолько различаются для разных ти- пов ЛА, что нельзя создать универсальные блоки для их вычисления. Поэтому в библиотеке Aerospace имеется лишь небольшое количество блоков, отражаю- щих наиболее часто встречающиеся зависимости, в законах, описывающих воз- никновение некоторых сил и моментов. Раздел Environment Раздел Environment (Среда) (рис. 9.7) рассматриваемой библиотеки содержит бло- ки, позволяющие учитывать влияние параметров окружающей среды на силы и моменты сил, действующих на ЛА в полете. В этом разделе размещены три груп- пы блоков: Atmosphere (Атмосфера), Gravity (Гравитация) и Wind (Ветер). Рис. 9.7. Блоки раздела Environment В состав первой группы входят блоки ISA Atmosphere Model (ISA-модель атмосфе- ры) и COESA Atmosphere Model (COESA-модель атмосферы) (рис. 9.8). Рис. 9.8. Блоки группы Atmosphere Эти блоки рассчитывают параметры атмосферы на текущей высоте полета. Вход- ной величиной обоих блоков является значение текущей высоты полета ЛА. Вы- ходные величины приведены ниже: О Temperature (К) — температура (в градусах Кельвина);
Общая характеристика библиотеки Aerospace 411 О Speed of sound (m/s) — скорость звука (в метрах в секунду); О Air Pressure (N/mA2) — давление воздуха (в ньютонах на метр в квадрате); О Air Density (kg/mA3) — плотность воздуха (в килограммах на метр кубический). Первый блок производит расчеты по международной модели стандартной атмо- сферы до высоты полета 20 000 м Второй — по американской расширенной моде- ли стандартной атмосферы. Здесь возможен учет особенностей атмосферы до вы- соты 84 852 м Настраиваемых параметров в этих блоках нет. Группа Gravity содержит только один блок — WGS84 Gravity Model (рис. 9.9), кото- рый рассчитывает значение ускорения свободного падения на текущей высоте полета ЛА и на текущей географической широте. Рис. 9.9. Содержимое группы Gravity Раздел Propulsion Раздел Propulsion (Двигатель) содержит единственный блок — Turbofan Engine Sys- tem (Система турбовентиляторного двигателя) (рис. 9.10). Этот блок имеет такие входные величины: О Throttle position - текущее положение регулирующего дросселя; О Mach — текущее значение числа Маха; О Altitude (m) — текущее значение высоты полета (в метрах). Выходными величинами блока Turbofan Engine System являются следующие: О Thrust (N) — сила тяги (в ньютонах); О Fuel flow (kg/s) — расход горючего (в килограммах в секунду). В окне настройки блока содержатся такие параметры: О Initial thrust source — источник (внутренний или внешний) начального значе- ния силы тяги двигателя; О Initial thrust — начальное значение силы тяги двигателя; О Maximum sea level static thrust — максимальное значение силы тяги на уровне океана;
412 Урок 9 • Моделирование аэрокосмических объектов О Fastest engine time constant at sea level static (sec) — постоянная времени двигате- ля на уровне океана (в секундах); О Sea level static thrust specific fuel consumption — удельный расход топлива на уровне океана; О Ratio of installed thrust to uninstalled thrust — отношение установленной силы тя- ги к неустановленной. Рис. 9.10. Окно раздела Propulsion Разделы Actuators и GNC В разделах Actuators (Исполнительные элементы) и GNC (Регуляторы управления движением) находятся блоки, предназначенные для создания модели системы ав- томатического управления движением ЛА. В общем случае система автоматического управления движением содержит сле- дующие элементы: О измерители параметров движения ЛА — гироскопические приборы, измеряю- щие углы поворота корпуса ЛА и его угловые скорости, измерители скорости ЛА, углов атаки и дрейфа и т. п.; О регуляторы — звенья системы управления, которые формируют закон управ- ления (требуемые зависимости регулируемых параметров от измеренных ве- личин); О силовой привод, обеспечивающий поворот рулей, элеронов и элевонов на тре- буемые углы, величины которых определены регулятором; О исполнительные элементы (рули, элероны и элевоны), обеспечивающие нало- жение на ЛА требуемых моментов сил. Модели измерителей параметров движения и работы исполнительных элементов пользователю необходимо создавать самому. Универсальных блоков, моделирую- щих их поведение, в библиотеке нет Раздел Actuators содержит блоки, которые моделируют движение силового при- вода рулевых органов управления: Second Order Linear Actuator (Линейный силовой привод второго порядка) и Second Order Nonlinear Actuator (Нелинейный силовой привод второго порядка) (рис. 9.11).
Общая характеристика библиотеки Aerospace 413 Рис. 9.11. Блоки раздела Actuators Оба блока моделируют процесс перемещения рулевого органа при подаче на вход силового привода заданного значения этого перемещения как прохождение за- данного сигнала через звено второго порядка с заданными частотой собственных колебании и коэффициентом демпфирования. В обоих блоках входом является текущее требуемое значение положения испол- нительного элемента (Ac_dem), а выходом — действительное значение его поло- жения (Ас_ас). 4 Окно настройки блока Second Order Linear Actuator содержит следующие парамет- ры (рис. 9.12): О Natural frequency — частота собственных колебаний; О Damping ratio — относительный коэффициент затухания; О Initial position — начальное положение регулирующего органа Рис. 9.12. Окно настройки блока Second Order Linear Actuator Окно настройки второго блока данного раздела (рис. 9.13) имеет такие же пара- метры. Кроме них, в этом окне можно настроить следующие параметры: О Maximum deflection — максимальное отклонение регулирующего органа; О Minimum deflection — минимальное отклонение регулирующего органа; О Maximum rate — максимальная скорость отклонения регулирующего органа.
414 Урок 9 * Моделирование аэрокосмических объектов Рис. 9.13. Окно настройки блока Second Order Nonlinear Actuator Именно наличием указанных ограничений на отклонения регулирующего органа и его скорость отличается нелинейный привод от линейного. В раздел GNC (Регуляторы управления движением) включены блоки, моделирую- щие процесс формирования сигналов, которые управляют отклонением рулевых органов ЛА (рис. 9 14). Рис. 9.14. Блоки раздела GNC
Общая характеристика библиотеки Aerospace 415 Первые 13 блоков раздела призваны вырабатывать сигнал, пропорциональный требуемому углу поворота исполнительного элемента. Поэтому выход в них один: и — требуемое текущее положение исполнительного элемента. Три последних бло- ка являются вспомогательными и осуществляют интерполяцию матриц. В 11 блоках, представляющих различного вида регуляторы и наблюдатели, ос- новным входом является вектор у величин, характеризующих текущее движение объекта и измеряемых на борту ЛА имеющимися приборами. Эти блоки пред- ставляет интерес главным образом для специалистов в области проектирования систем автоматического управления движением ЛА; их изучение не входит в на- шу задачу. Раздел Transfomations Раздел Transfomations (Преобразования) содержит блоки двух групп: — Axes (Оси) и Units (Единицы) (рис. 9 15). Рис. 9.15. Блоки раздела Transfomations Группа Axes (рис. 9.16) включает шесть блоков, осуществляющих различные пре- образования форм представления углового положения твердого тела в простран- стве и один блок (3x3 Cross Product) векторного произведения двух трехкомпо- нентных векторов Блоки преобразования координат имеют такое назначение: О Quaternions to Euler Angles — преобразует кватернион поворота в вектор трех уг- лов Эйлера; О Quaternions to Direction Cosine Matrix — преобразует кватернион поворота в мат- рицу направляющих косинусов; О Euler Angles to Quaternions — преобразует вектор трех углов Эйлера в вектор кватерниона поворота; О Direction Cosine Matrix to Quaternions — преобразует матрицу направляющих ко- синусов в кватернион поворота; О Euler Angles to Direction Cosine Matrix — преобразует вектор трех углов Эйлера в матрицу направляющих косинусов; О Direction Cosine Matrix to Euler Angles — преобразует матрицу направляющих ко- синусов в вектор трех углов Эйлера.
416 Урок 9 • Моделирование аэрокосмических объектов Рис. 9.16. Блоки группы Axes Группа блоков Units содержит 11 блоков преобразования величин из одной систе- мы единиц в другую (рис. 9.17). Назначение блоков очевидно из их названий. На- страиваемых параметров блоки не имеют. Рис. 9.17. Блоки группы Units вободное угловое движение космического аппарата Работу с библиотекой Aerospace начнем с создания простой модели углового дви- жения космического аппарата (КА) в инерциальном пространстве (рис 9 18) В основу модели можно положить блок 6DoF (Euler Angles), обеспечивающий моде- лирование движение тела с шестью степенями свободы.
417 Свободное угловое движение космического аппарата Если задачей моделирования является исследование свободного движения, то на вход указанного блока следует подать векторные сигналы, соответствующие про- екциям внешней силы и внешнего момента сил, равные нулю Для этого исполь- зуются две подсистемы — П/С СИЛА (рис. 9.19) и П/С МОМЕНТ (рис. 9.20). [Модель свободного углового движение КА | Рис. 9.18. Модель свободного углового движения КА | Модель формирование вектора сипы Рис. 9.19. Подсистема П/С СИЛА Рис. 9.20. Подсистема П/С МОМЕНТ 1/1 Q-
418 Урок 9 • Моделирование аэрокосмических объектов В дальнейшем будем использовать следующие обозначения: От— масса КА; О J - матрица моментов инерции КА; О XYZO — вектор проекций координат центра масс КА; О V0 — вектор проекций скорости центра масс КА; О UG0 — вектор углов поворота КА; О UgSkO — вектор проекций угловой скорости КА на его оси. На рис. 9.21 показаны настройки блока 6DoF (Euler Angles). Рис. 9.21. Окно настройки блока 6DoF (Euler Angles) Управление работой модели и вывод результатов осуществим с помощью управ- ляющей программы SvobDvigKA_upr, текст которой приводится ниже. X SvobDvigKAjjpr X Управляющая программа для модели SvDvigKA I Лазарев Ю.Ф. 29-03-2004 clear all. clc X Установка параметров КА J - [3400 300 -200.300 2200 100:-200 100 1400] X Матрица моментов инерции КА ш - 2000: X Масса КА
Свободное угловое движение космического аппарата 419 X Установка начальных условий XYZO = [0 0 0]; X Начальное положение КА V0 = [0 0 0]; X Начальные скорости КА UGO = [0 0 0]; % Начальные углы КА UgSkO = [1 0.1 0]; X Начальные угловые скорости КА % Установка параметров интегрирования ТК - 300 X Конечное время интегрирования hi = 0.1; X Шаг интегрирования X Запуск модели sim('SvDvigKA'); X Запись результатов интегрирования FI = yout(:,1); ТЕ - yout(:.2); PSI = yout(:.3); omx = yout(:.4); ощу = yout(:.5), omz = yout(:.6). t = tout; X Графическое представление результатов subplot(2.2.1) plot(TE.PSI), grid axi s('equal'); set(gca.'FontSi ze'.12) title('Движение оси Xb в пространстве'): label('Угол \theta (градусы)'); ylabel('Угол \psi (градусы)'); subplot(2.2.3) plot(t.TE.t.PSI.'.'). grid set(gca.'FontSize'.12); Ш1е('Углы во времени'); xlabeK'Время (c)'); ylabeK'Углы (градусы)'); legendC \theta.' \psi '.0); subplot(2.2.4) plot(t,опту.t,omz,'.'), grid set(gca.'FontSize'.12); title('Угловые скорости во времени'), xlabeK’Время (с)'); ylabeK'Угловые скорости (рад/с)'); legendC omy '.' omz '.0); subplot(2.2,2) axis('off'); h - text(-0.3.1.1,'Свободное угловое движение космического аппарата'.'FontSize'.14); h - text(0.1,0 9.*| '.'FontSize'.12); h - text(0.2.0 9.num2str(J(l.D). 'FontSize* .12), h - text(0.4.0.9,num2str(J(l,2)).’FontSize',12); h - text(0.6.0 9.num2str(J(1.3)).'FontSize',12); h = text(0.8.0 9.'| ','FontSize'.12); h = text(-0.1.0.8.'J ' 'FontSize'.12). h = text(0.1.0.8.'| '.'FontSize*.12); h = text(0 2.0 8.num2str(J(2,D),'FontSize'.12). h - text(0.4.0.8,num2str(J(2.2)).’FontSize’,12); h = text(0.6.0.8.num2str(J(2,3)).'FontSize'.12); h - text(0.8.0.8.'| '.'FontSize'.12); h - text(0.1,0.7,'| '.’Fontsize’.12); h = text(0 2,0.7.num2str(J(3.D).'FontSize'.12); h » text(0.4.0.7,num2str(J(3.2)).’FontSize'.12), h - text(0.6.0.7,num2str(J(3,3)).'FontSize',12); h - text(0.8.0 7.'| FontSize'.12); h - text(-0.1.0.5.'Начальные углы (градусы)','FontSize’,12); h “ text(0.1,0 4,['\psi0 - '.num2str(UG0(3)*180/pi)].'FontSize'.12); h - text(0.4.0 4,['\theta0 - ',num2str(UG0(2)*180/pi)].'FontSize',12); h “ text(0.7.0 4.['\phi0 “ ',num2str(UG0(l)*180/pi)].'FontSize',12); h = text(-0.1,0.2,'Начальные угловые скорости (рад/с)'.'FontSize*.12); h = text(0 1.0.1,['omx0 - ',num2str(UgSkO(l))].'FontSize'.12); h - text(0.4.0.1.['oiT|y0 - ',num2str(UgSkO(2))].'FontSize',12); h “ text(0 7,0.1.['omz0 - ',num2str(UgSkO(3))].'FontSize'.12); h “ text(-0.1.-0.05.'--------------------------------------------');
420 Урок 9 • Моделирование аэрокосмических объектов h = text(-0.1,-0.1.'Программа SvobDvigKA-upr Лазарев Ю. Ф. 29-03-2004'); h = text(-0.1.-0.15.'-------------------------------------------'); Далее приведены результаты моделирования для трех случаев различного рас- пределения масс КА: матрица моментов инерции является диагональной (дина- мически симметричный КА) (рис. 9.22, а); матрица моментов инерции является диагональной с разными моментами инерции (рис. 9.22, б); матрица моментов инерции КА является произвольной (рис. 9.22, в). Свободное угловое движение космического аппарата I 3400 О О | J = |0 2200 0 | | 0 0 1400 | Начальные углы (градусы) цю = о ео = о фо = о Начальные угловые скорости (рад/с) отхО = 1 отуО = 0.1 omzO = 0 Рис. 9.22. Свободное движение КА: а — динамически симметричного; б — динамически несимметричного
Управляемое угловое движение космического аппарата 421 Движение оси ХЬ в пространстве Свободное угловое движение космического аппарата | 3400 300 -200 | J= | 300 2200 100 | | -200 100 1400 | Начальные углы (градусы) фО = о ео = о фо=о Начальные угловые скорости (рад/с) omx0=1 оту0 = 0.1 omz0 = 0 Программа SvobCwgkAupr Лазар*а Ю Ф ZWJ3-2UJ В Рис. 9.22. Свободное движение КА: в — динамически несбалансированного Управляемое угловое движение космического аппарата Перейдем теперь к созданию модели управляемого движения КА по углам ориен- тации. Задачей управления будем полагать приведение КА в некоторое непод- вижное в инерциальном пространстве положение. Для обеспечения управления следует добавить в предыдущую модель контур управ- ления ориентацией КА, предполагая, что углы и угловые скорости поворота КА в инерциальной системе координат измеряются приборами, установленными на его борту, и формируя моменты сил управления на основе этой информации. Контур управления реализован в модели, представленной на рис. 9.23, в виде подсистемы СУО, блок-схема которой показана на рис. 9.24 Помимо принятых ранее, здесь используются следующие обозначения: О kug — коэффициент обратной связи по углу отклонения; О kugsk — коэффициент обратной связи по угловой скорости; О к — коэффициент компенсации гироскопического момента При этом предполагается, что момент управления ориентацией формируется по такому закону: М = -kug*J*Ug - kugsk*J*om - k*(omx)*J*om, где М — вектор проекций момента управления, Ug — вектор углов Эйлера, от — век- тор проекций угловой скорости, (отх) —кососимметричная матрица из проекций угловой скорости. Именно этот закон формируется в подсистеме СУО.
422 Урок 9 * Моделирование аэрокосмических объектов [Модель управляемого углового движение КА | СУО Рис. 9.23. Блок-схема процесса управления ориентацией КА | Модель системы управление ориентацией | Рис. 9.24. Блок-схема подсистемы СУО Проиллюстрируем работу модели на нескольких примерах. Проверим работу, моделируя движение КА при отсутствии управления (kug= =kugsk=k=0). На рис. 9.25 показаны результаты такого моделирования для КА с мат- рицей моментов инерции, использованной в работе В. Ви с соавторами* * Ви В, Уэйс X, Эрепостатис Э Управление поворотами космического аппарата вокруг собственной оси с обратной связью по компонентам кватерниона// Аэрокосмическая техника. — 1990, № 3.
Управляемое угловое движение космического аппарата 423 Двикение оси ХЬ в пространстве Управляемое угловое движение космического аппарата утоп v (градусы) I 3100 300 -200 | J = | 300 2200 100 | I -200 100 1200 | Начальные углы (градусы) <|в = 0 60 = 0 *0 = 0 Начальные угловые скорости (рад/с) олтхО = 1 оглуО = 0.1 omzO = 0 Управление Морг=- kug*J*UG - kugsk*J*om + k*(om’)’J'om kug = O kugsk=0 k=0 Программа UprtXqKMrpr Лазар» Ю Ф 2903-2004 Проекции угловой скорости Время (с) Рис. 9.25. Неуправляемое движение несбалансированного КА Сначала рассмотрим, как повлияет на движение КА компенсация гироскопиче- ского момента (к=1). Результат приведен на рис. 9.26. Движение оси ХЬ в пространстве угол ч» (градусы) Управляемое угловое движение космического аппарата | 3100 300 -200 | J= | 300 2200 100 | | -200 100 1200 | Начальные углы (градусы) чЮ = 0 60 = 0 *0 = 0 Начальные угловые скорости (рад/с) оптхО = 1 оглуО = 0.1 omzO = 0 Управление Морг = - kug*J*UG - kugsk’J'om * k*(om’)’ J"om kug = O kugsk=O к=1 Программа UprOffgK^upr Лазар» Ю Ф 2903-2004 Рис. 9.26. Влияние компенсации гироскопического момента Время (с) Результатом такого управления является значительное уменьшение (примерно в 5 раз) амплитуды колебаний оси Хь- Теперь рассмотрим задачу демпфирования (точнее, приведения КА в неподвиж- ное относительно инерциального пространства положение). Для этого введем управление (обратную связь) только по скоростям. Если, например, установить
424 Урок 9 • Моделирование аэрокосмических объектов коэффициент kugsk равным 0,1, а остальные коэффициенты управления равными нулю, то для динамически симметричного КА получим движение, изображен- ное на рис. 9.27. Если к демпфирующему моменту добавить компенсацию гиро- скопического момента, то движение КА будет происходить со значительно мень- шими отклонениями осей от начального положения (рис. 9.28). Управляемое угловое движение космического аппарата | 3100 300 -200 | J = | 300 2200 100 | | -200 100 1200 | Начальные углы (градусы) фО = о ео = о фо = о Начальные угловые скорости (рад/с) отхО - 1 отуО = 01 оггаО = 0 Управление Mupr = - kug*J*UG - kugsk*J'om * k*(om')*J*oni kug = 0 kugsk = 01 k - 0 Рис. 9.27. Режим «обездвиживания» KA Программа UprOngKArupr Лазарев Ю <t> 29-03 2003 Управляемое угловое движение космического аппарата | 3100 300 - 200 | J= I 300 2200 100 | | -200 100 1200 | Начальные углы (градусы) >р0 = 0 00 = 0 ф0 = 0 Начальные угловые скорости (рад/с) отхО = 1 отуО = 01 omzO = 0 Управление Mupr = - kug*J*UG - kugsk* J*om ♦ k*(om’)*J*om kug = O kugsk = 0.1 k=1 Рис. 9.28. Режим «обездвиживания» KA с компенсацией гироскопического момента Пограмма ptOyigKArupr азараа Ф 2004 Как видим, поставленная задача успешно решается. Побочным следствием такого управления является отклонение оси Хь от начального положения на значитель- ные углы.
Управляемое угловое движение космического аппарата 425 Перейдем теперь к режиму приведения КА к заданному положению, под которым будем понимать положение, когда все три угла будут равны нулю. Для этого по- мимо обратной связи по скорости введем обратную связь по углам. Начальные отклонения по углам оси установим равными 0,1 рад. Тогда при kug, равном 0,1, и kugsk, равном 0,3, придем к результатам, показанным на рис. 9.29. Управляемое угловое движе ие космического аппарата | 3100 300 -200 | J= | 300 2200 100 | | -200 100 1200 | Начальные углы (градусы) V0 = 5 7206 60 = 5 7296 ф0 = 0 Начальные угловые скорости (рад/с) огпхО = 1 отуО = 0 1 onrzO = 0 Управление Mupr = - kug"J"UG - kugsk"J"om ♦ k"(om')'J"om kug = 01 kugsk = 03 k = 0 Программ. UprCMgKA-upr аэаровЮ Ф 2004 Рис. 9.29. Режим стабилизации положения КА Дополнительная компенсация гироскопического момента и в этом случае улуч- шает процесс стабилизации (рис. 9.30). Управляемое угловое движение космического аппарата | 3100 300 -200 | J= I 300 2200 100 | | -200 100 1200 | Начальные углы (градусы) <рО = 57296 60 = 57296 ф0 = 0 Начальные угловые скорости (рад/с) огпхО = 1 отуО = 01 omzO = 0 Управление Mupr = - kug"J"UG- kugsk" J'om ♦ k"(om')"J'om kug = 01 kugsk = 03 k = 1 Программ. UprOvigKA-upr Лпар.. Ю Ф 29032004 Рис. 9.30. Режим стабилизации с компенсацией гироскопического момента
426 Урок 9 • Моделирование аэрокосмических объектов Управление по углам отклонения от заданного положения имеет ряд недостат- ков. К ним относится, прежде всего, отклонение осей поворотов углов (при боль- ших углах) от осей приложения соответствующих управляющих моментов. Это может значительно затормозить процесс стабилизации и даже сделать его неус- тойчивым (при углах отклонения от заданного положения больше 90°). Указанный недостаток отсутствует при управлении по кватернионам, когда управ- ляющие моменты по осям КА пропорциональны составляющим векторной части кватерниона отклонения текущего положения КА от заданного. Эти составляю- щие, во-первых, пропорциональны не углам отклонений, а синусам половинных углов, во-вторых, они совпадают с осями, по которым направлены управляющие моменты, что обеспечивает более быстрое (и без потери устойчивости) приведе- ние КА в заданное положение. Побочным, но тоже важным фактором является конечность величин управляющих моментов при любых значениях углов началь- ного отклонения. Модель управляемого по кватернионам процесса ориентации отличается от мо- дели, приведенной на рис. 9.23, только содержимым блока СУО, блок- схема кото- рого для этого случая приводится на рис. 9.31. Рис. 9.31. Блок-схема подсистемы СУО для управления по кватерниону Управление работой модели и выводом результатов осуществляется программой UprDvigKAqwl_upr, текст которой приведен ниже. X UprDvigKAqwl_upr % Управляющая программа для модели UprDvigKA % Лазарев Ю Ф 14-05-2004 clear all cl с % Установка параметров КА % J - [3100 0 0:0 2200 0:0 0 2200]: X Матрица моментов инерции КА % J - [3100 0 0:0 2200 0:0 0 1200]. % Матрица моментов инерции КА J - [3100 300 200.300 2200 100;-200 100 1200]: X Матрица моментов инерции КА го - 2000; % Масса КА % Задание коэффициентов управления kug - 0.1; % Коэффициент обратной связи по углам
Управляемое угловое движение космического аппарата 427 kugsk = 0.3; % Коэффициент обратной связи по угловым скоростям к = 0; X Коэффициент компенсации гироскопического момента % Установка начальных условий XYZ0 =[000]; К Начальное положение КА V0 = [0 0 0]; X Начальные скорости КА UG0 - [0 1 1]; X Начальные углы КА UgSkO =[000]; X Начальные угловые скорости КА X Установка параметров интегрирования ТК = 100; X Конечное время интегрирования hl = 0.1; X Шаг интегрирования % Запуск модели sim('UprDvigKAqw'); % Запись результатов интегрирования FI = yout(:.1); ТЕ = yout(:.2); PSI = yout(:.3); omx = yout(:.4); omy = yout(:,5); omz = yout(:,6); t = tout; L=yout(:,7); M = yout(-8); N=yout(;,9); X Графическое представление результатов subplot(2,2.1) plot(-PSI.TE.-PSI(l).TE(l),’pr'.-PSI(end).TE(end),'kv'), grid axis('equal'); setCgca,'Fontsize'.12) title('Движение оси Xb в пространстве'): ylabeK'Угол \theta (градусы)'); xlabeK'Угол \psi (градусы)'); subplot(2.2.3) plot(t,omx.t.omy.'.'.t omz.’--'). grid Xplot(t.L.t,M.'.',t,N,'—’). grid set(gca,'Fontsize'.12) title('Проекции угловой скорости'); Xtitle('Моменты сил'); xlabeK'Время (с)'); ylabeK'Радиан в сек.'); XylabeK'Моменты (Н м)'); legendC omx '.' omy '.' omz ’.0); fclegendC L '.' M 'N '.0); subplot(2.2.4) plot(t.L.t,M,'.'.t,N.'--’). grid set(gca.’FontSize'.12) titleCМоменты сил'); xlabeK‘Время (с)'); ylabeK'Моменты (H м)'); legendC L '.' М '.’ N *.0): subplot(2.2.2) axis(’off'); h = textCO.3,1.1.’Управляемое по кватернионам угловое движение KA'.'FontSize'.14); h - text(0.1.0.9,'| ‘.'FontSize',12): h = text(0.2.0 9,num2str(J(l,D),'FontSize'.12). h = text(0.4.0.9,num2str(J(1.2)).'FontSize*.12). h - text(0.6.0.9.num2str(J(l.3)).’FontSize'.12); h = text(0.8.0.9.’| ’.’FontSize’.12); h - textCO.1.0.8.'J = '.'FontSize* .12); h = text(0.1.0 8 '| '.'FontSize'.12); h = text(0.2.0.8.num2str(J(2.1)),'FontSize',12); h = text(0.4.0.8,num2str(J(2,2)),’Fontsize'.12); h - text(0.6,0.8.num2str(J(2,3)).'FontSize',12); h = text(0.8.0.8,'| '.'FontSize'.12); h = text(0.1.0.7,'| ’.'FontSIze'.12); h = text(0.2.0.7,num2str(J(3.1)).'FontSize'.12). h = text(0 4.0.7.num2str(J(3.2)).'FontSize'.12); h - text(0.6.0.7,num2str(J(3.3)).'FontSIze’.12); h = text(0.8,0.7.'| '.'FontSize'.12); h - textCO. 1.0.6.'Начальные углы (градусы)'.'FontSize'.12); h = text(0.1.0.5,['\psi0 = '.num2str(UG0(3)*180/pi)].'FontSize',12);
428 Урок 9 • Моделирование аэрокосмических объектов h = text(0.4.0.5.['\theta0 = ',num2str(UG0(2)*180/pi)].'FontSize'.12): h = text(0.7,0.5.['\phi0 - ',num2str(UG0(l)*180/pi)J.'FontSize'.12): h = text(-0.1.0.4.'Начальные угловые скорости (рад/с)'.'FontSize'.12): h = text(0.1.0.3.[’omx0 = ',num2str(UgSk0(l))].'FontSize'.12): h = text(0.4.0.3.[’oniy0 “ '.num2str(UgSk0(2))],'FontSize'.12): h = text(0.7.0.3.['omz0 = ',num2str(UgSkO(3))].'FontSize'.12); h = text(-0.1.0.2.'Управление Mupr = - kug*J*Qwat - kugsk*J*om + k*(om*)*J*om'.'FontSize'.12): h = text(0.1.0.1.['kug - ',num2str(kug)].'FontSize'.12): h = text(0.4,0.1.['kugsk = ',num2str(kugsk)].'FontSize'.12): h - text(0.7,0.1.['k = '.num2str(k)].'FontSize'.12): h = text(-0.1,-0.05.'----------------------------------------------------'): h = text(-0.1,-0.1.'Программа UprDvigKAqwl-upr Лазарев Ю. Ф. 14-05-2004'): h - text(-0.1.-0.15.'----------------------------------------------------'); Результаты работы этой программы представлены на рис. 9.32, 9.33. Коэффици- енты управления приняты прежними, а углы отклонения увеличены в 10 раз (по одному радиану). Как и ранее, рассмотрены движения без компенсации гироско- пического момента и с компенсацией такового. Из приведенных результатов сле- дует, что: О при управлении по кватерниону отклонение движения КА к заданному поло- жению происходит по кратчайшему пути; О процесс установления в заданное положение устойчив при весьма значитель- ных начальных отклонениях; О длительность процесса приведения сохраняется такой же, как и при управле- нии по углам, хотя значение начального отклонения увеличено в 10 раз; О величины моментов управления значительно меньше, чем те, которые требу- ються для управления по углам; О как и ранее, компенсация гироскопического момента приводит к улучшению динамики процесса ориентации. Управляемое по кватернионам угловое движение КА Движение оси ХР в пространстве | 3100 300 -200 | J = | 300 2200 100 | | -200 100 1200 | Начальные углы (градусы) цЮ = 57 2958 80 = 57.2958 «0 = 0 Начальные угловые скорости (рад/с) отхО = 0 отуО = 0 omzO = 0 Управление Mupr=- kug* J*Owat • kugsk* J*om * k*(om’)* J’om kug = 0.1 kugsk=03 k=0 Прогркии» ффуцКАфкРщг Ла»рм Ю. Ф. 14-05-2004 Рис. 9.32. Управление ориентацией по кватерниону отклонения
Движение искусственного спутника Земли 429 Дарение оси хь в пространстве Управляемое по кватернионам угловое движение КА | 3100 300 -200 | J= I 300 2200 100 | | -200 100 1200 | Начальные углы (градусы) чЮ = 57.2958 60 = 57.2958 ф0 = 0 Начальные угловые скорости (рад/с) отхО = 0 отуО = 0 omzO = О Управление Мире - - kug’J*Qwat kugsk'J’om ♦ k'(om’)’J’om kug = 0.1 kugsk = 0.3 k = 1 Рис. 9.33. Управление ориентацией по кватерниону с компенсацией гироскопического момента Движение искусственного спутника Земли Перейдем к составлению модели орбитального движения искусственного спут- ника Земли (ИСЗ) с учетом его угловой стабилизации. Для этого введем следую- щие системы координат: О инерциальную (неподвижную) систему Хе, Ye, Ze, начало которой поместим в центр Земли; ось Ze направим перпендикулярно плоскости орбиты, ось Хе — вдоль линии, соединяющей центр Земли с начальным положением ИСЗ на орбите, а ось Ye — в плоскости орбиты по вектору начальной скорости ИСЗ; О орбитальную систему Хо, Yo, Zo, начало которой поместим в центр масс ИСЗ; ось Zo направим параллельно оси Ze, ось Хо — вдоль линии, соединяющей центр Земли с текущим положением ИСЗ на орбите, а ось Yo — в плоскости орбиты вперед по движению ИСЗ по орбите; О связанную с телом ИСЗ систему Хь, Y^, Z^, начало которой поместим также в центр масс ИСЗ. ИСЗ как объект управления имеет шесть степеней свободы — три координаты положения центра масс в инерциальной системе координат и три угловые степени свободы, определяющие угловое положение тела спутника по отношению к инер- циальной системе. Управление движением ИСЗ состоит из двух тесно связанных процессов — управления движением центра масс ИСЗ и управления его угловым положением Второй процесс был рассмотрен и смоделирован ранее Для управ- ления орбитальным движением ИСЗ важно ориентировать и стабилизировать угловое его положение в орбитальной системе координат.
430 Урок 9 • Моделирование аэрокосмических объектов Возможный вариант модели полного движения спутника приведен на рис. 9.34. Рис. 9.34. Блок-схема модели управляемого движения ИСЗ Основным отличием этой модели от ранее представленных является наличие об- ратной связи (управления) по вектору силы, действующей на центр масс ИСЗ. Она реализована в виде подсистемы П/С СИЛА, блок-схема которой изображена на рис. 9.35. \МоОеп^о^ми^овани^&то^^ип^ Рис. 9.35. Блок-схема блока П/С СИЛА
Движение искусственного спутника Земли 431 Блок-схема подсистемы СУО (рис. 9.36) также изменена, ввиду того что ИСЗ не- обходимо ориентировать не в инерциальной, а в орбитальной системе координат. \Сис>т>емаупр9впение^иентаи11ей^применениешсватернионов^ Рис. 9.36. Блок-схема блока СУО Основным назначением блока П/С СИЛА является формирование вектора силы гра- витации, действующей на ИСЗ со стороны Земли. Для этого вначале следует оп- ределить величину ускорения гравитации в той точке пространства, где располо- жен спутник. Это ускорение определяется выражением: где g — ускорение гравитации на поверхности Земли, gc — ускорение в точке, на- ходящейся на расстоянии г от центра Земли, aR— радиус Земли. Теперь вектор F силы гравитации, действующей на ИСЗ можно определить из соотношения: F = -mgc-r. г Зресь т — масса ИСЗ, а г — радиус-вектор его центра масс. Если известны текущие координаты центра масс Хе, Ye, Ze спутника в инерци- альной системе, то r = 7x2+n2+z2 и вычисление вектора F в инерциальной системе можно свести к формуле F = ~mgc = -mg R2 г. Выполнение этих операций и обеспечивает блок П/С СИЛА (см. рис. 9.35). По- скольку на вход блока 6DoF следует подать вектор силы через его проекции на свя- занные с ИСЗ оси, то далее полученный вектор силы в инерциальной системе пре- образуется в вектор проекций этой силы на связанную систему координат путем умножения на матрицу направляющих косинусов ИСЗ в инерциальной системе.
432 Урок 9 • Моделирование аэрокосмических объектов Вторая задача блока — сформировать силу активного воздействия вдоль оси связанной системы для осуществления перехода на другую орбиту. Эта цель дос- тигается посредством нижней ветви блок-схемы, представленной на рис. 9.35. Здесь формируется постоянная по величине сила, начинающая свое действие в за- данный момент времени и действующая в течение заданного промежутка време- ни. При этом использованы следующие обозначения: О Тп — начальный момент времени действия силы коррекции орбиты; О tau — промежуток времени, в течение которого действует сила коррекции; О DF — величина силы коррекции. Блок СУО в представленной модели (см. рис. 9.34) отличается от аналогичного блока в предыдущей модели (см. рис. 9.31) прежде всего наличием части, вычис- ляющей угловое отклонение связанной с ИСЗ системы координат от орбиталь- ной. Это необходимо для обеспечения управления ориентацией спутника относи- тельно не инерциальной, а орбитальной системы. Кроме того, вместо блока непо- средственного преобразования углов Эйлера в кватернион поворота, используется последовательное преобразование углов Эйлера в матрицу направляющих коси- нусов, а затем последней — в кватернион поворота. Это позволяет избавиться от разрывов в угловых координатах при переходе значений углов через 180°. Текст управляющей программы UprDvigISZqwl_upr приведен ниже. X UprDviglSZqwljjpr % Управляющая программа для модели SvDvigKA % Лазарев Ю.Ф. 15-05-2004 clear all. clc ОМ = 7.292115е-5; Re = б.37814еб: g = 9.78; % Установка параметров КА X J = [1800 0 0:0 3400 0;0 0 1800]; X Матрица моментов инерции КА X J = [3400 0 0:0 2200 0;0 0 1400]; X Матрица моментов инерции КА J х [2200 300 -200:300 3400 100;-200 100 1400]; X Матрица моментов инерции КА m = 2000; X Масса КА X Установка начальных условий XYZO = [б.4еб 0 0]; X Начальное положение КА V0 = [0 8еЗ 0]; % Начальные скорости КА UGO “[010]; X Начальные углы КА UgSkO = [0 0.2 0]: X Начальные угловые скорости КА X Задание коэффициентов управления kug = 0.1; X Коэффициент обратной связи по углам kugsk = 0.3; X Коэффициент обратной связи по угловым скоростям к = 1; X Коэффициент компенсации гироскопического момента Тп = 3600*2; tau = 1000; DF = 2000: % Установка параметров интегрирования ТК = 6*3600; X Конечное время интегрирования hi - 0.5; % Шаг интегрирования X Запуск модели sim('UprDvigISZqwl’); X Запись результатов интегрирования FI = you^(:.l): ТЕ - yout(:.2); PSI - yout(:.3); omx = yout(:.4); огцу - yout(:.5): omz = yout(:.6);
Движение искусственного спутника Земли 433 Хе - yout(:,7): Ye - yout(:.8); Ze - yout(:.9); Vex - yout(;,10); Vey - yout(:,11); Vez = yout(:.12); Flo - yout(:,13); Teo •= yout(: ,14); PSIo = unwrap(yout(:.15)): t = tout; n - length(t); kl - 0; for ks = 1 : n if t(ks) <= Tn kl = kl + 1; tl(kl) = t(ks); end end Kl = kl; Xel = Xed : Kl); Yel = Yed : Kl); kl = 0: for ks = 1 : n if (t(ks) > Tn)&(t(ks) <= Tn + tau) kl = kl + 1, t2(kl) = t(ks): end end K2 - kl; Xe2 = Xe(Kl +1 Kl + K2); Ye2 = Ye(Kl + 1 : Kl + K2); kl = 0; for ks = 1 : n if tCks) > Tn + tau kl = kl + 1; t3(kl) = t(ks); end end КЗ = kl; ХеЗ - Xe(Kl + K2 + 1 : Kl + K2 + КЗ); Ye3 = Ye(Kl + K2 + 1 : Kl + K2 + КЗ); % Графическое представление результатов subplot(2,2.1) plot(Xel*le-6.Yel*le-6.'--',Xe3*le-6.Ye3*le-6.'.'.... Xe2*le-6,Ye2*le-6,'*'.0.0.'o'.XYZ0(l)*le-6.XYZ0(2)*le-6.’pk'). grid axis(‘equal’); title('Движение ИСЗ в плоскости X - Y‘); xlabeK’Координата X (тыс. км)’); ylabel(’Координата Y (тыс. км)’); legendC орбита 1 орбита 2 ',’ акти ный ’,0); subplot(2.2,3) plot(tl/3600,Xel*le-6.' k—*,t2/3600.Xe2*le-6.'k*',t3/3600.Xe3*le-6.'k.’... tl/3600.Yel*le-6.'b--'.t2/3600.Ye2*le-6.,b*'.t3/3600.Ye3*le-6,'b.’). grid title('Инерциальные координаты'); xlabeK'Время (часы)'); ylabeK'Координаты (тыс. км)'); legendC орбита 1 '.' активный ’,' орбита 2 '.0); subplot(2.2.4) plot(t(l:80),PSI(l:80),'*',t(l;80),TE(l:80),t(l:80),PSIo(l:80)*180/pi t(l:80),TEo(l 80)*180/pi), grid title('Процесс угловой стабилизации'); х1аЬе1('Время (с)'); у1аЬе1СУглы (градусы)'); legendC \psi '.' \theta ',' \psio '.' \thetao '.0): subplot(2,2,2) axisCoff'); h - text(0.0.1.1.’Управляемое движение ИСЗ'.'FontSize'.14); h = text(0.3.0.95,'| '); h - text(0.4.0 95,num2str(J(l.l))); h » text(0.6.0.95,num2str(J(l,2))); h - text(0.8,0.95.num2str(J(l,3))); h - textd.0.0.95,'1 '); h = text(0.1.0.9.'J » '); h = textCO.3.0.9.['m - '.num2str(m)]); h - text(0.3.0.9.'| '); h -= text(0.4.0.9,num2str(J(2.1))); h - text(0.6.0.9,num2str(J(2.2))); h = text(0.8.0.9,num2str(J(2,3))); h - textd.0.0.9,' | '); h - text(0.3,0.85.'| '); h - text(0.4.0.85.num2str(J(3,l))); h = text(0.6.0.85.num2str(J(3,2))); h *= text(0.8.0.85.num2str(J(3.3))); h - text(1.0.0.85.’| ’); h=text(-0.1.0.75,'Начальное положение '); h = textCO.3,0.7,['XeO = ', num2str(XYZ0(l)*le-6)]);
434 Урок 9 • Моделирование аэрокосмических объектов h = text(0.0,0.7,[’Ye0 = ',num2str(XYZ0(2)*le-6)]); h = text(0.3,0.7.[’Ze0 = '.num2str(XYZ0(3)*le-6)]): h = text(0.7.0.7.'(тыс. км) '): h = text(-0.3,0.65,['\psi0 = '.num2str(UG0(3)*180/pi)]); h = text(0.0,0.65,['\theta0 = ',num2str(UG0(2)*180/pi)]); h = text(0.3.0.65,[‘\phi0 = ',num2str(UG0(l)*180/pi)]): h = text(0.7,0.65.'(градусы) '); h = text(-0.1.0.55.'Начальные скорости:'): h = text(-0.3.0.5.['Vex0 = ',num2str(V0(l)*le-3)]); h = text(0.0,0.5.['Vey0 = ',num2str(V0(2)*le-3)]); h = text(0.3,0.5.[’Vez0 = ',num2str(V0(3)*le-3)]); h = text(0.7,0.5,'(км/с) '); h = text(-0.3,0.45,['omx0 = '.num2str(UgSkO(l))]): h = text(0.0,0.45.['omy0 = ',num2str(UgSkO(2))]); h = text(0.3,0.45.['omz0 = ',num2str(UgSkO(3))]): h = text(0.7.0.45.’(рад/с) '): h = text(-0.1.0.35.'К-нты управления ориентацией:'): h = text(-0.3,0.3.['kug - '.num2str(kug)]); h = text(0.0,0.3,[’kugsk = '.num2str(kugsk)]); h = text(0.3,0.3,['k = '.num2str(k)]): h = text(-0.1,0.2,['Начало активного участка Tn = ',num2str(Tn).' сек']); h = text(-0.1,0.1.['Длительность активного участка tau = ',num2str(tau),... ' сек']); h = text(-0.1,0.0.['Тяга F = ',num2str(DF),' H']); h = text(-0.1.-0.05,'-----------------------------------------------------'): h = text(-0.1,-0.1,'Программа UprDviglSZqwl-upr Лазарев Ю. Ф. 15-05-2004'); h = text(-0.1,-0.15.'-----------------------------------------------------'); На рис. 9.37 отображены результаты работы программы и модели. Управляемое движение ИСЗ Начальное положение^ YeO « 0 2е0 = О 60 = 57 2958 ФО = О Начальные скорости =L о^"= (ТЫС. *и) (градусы) К-нты управления ориентацией kugsk = 03 к - 1 Начало активного участка Тп = 7200 сек Длительность ектменого участка 1аи = 1000 сек Рис. 9.37. Маневрирование ИСЗ Тяга F - 2000 Н_______________________________________ Программа UprOnglSZqwl ирг Лазарев Ю Ф 154)5-2004 Полученные результаты подтверждают, что созданная модель достаточно хорошо отражает свойства сложных процессов управления движением ИСЗ.
Вопросы для самопроверки 435 Вопросы для самопроверки 1. Каково основное назначение библиотеки Aerospace? Перечислите ее разделы. 2. С какой целью используются блоки раздела Equations of Motion, в чем состоит различие между ними? 3. Для чего предназначены блоки раздела Environment? 4. Какие группы силовых воздействий определяют движение летательного аппа- рата? 5. Для чего служат блоки раздела Propulsion? 6. Каково основное назначение блоков разделов Actuators и GNC? 7. Какие задачи можно решить с помощью блоков раздела Transfomations?
Моделирование Ж УРОК электроэнергетических систем □ Общая характеристика библиотеки Sim PowerSystems □ Запуск асинхронного двигателя □ Управление трехфазным мостовым выпрямителем
Общая характеристика библиотеки SimPowerSystems 437 Поведение электрических силовых систем, представляющих собой комбинации электрических цепей и электромеханических устройств, в том числе электрических двигателей и генераторов, моделируется с помощью библиотеки SimPowerSystems. Эта библиотека функционирует в составе пакета Simulmk в среде MATLAB и со- держит модели типовых устройств силовой электроэнергетики, таких как транс- форматоры, преобразователи, линии электропередач, электромашины и элемен- ты силовой электроники эщая характеристика библиотеки SimPowerSystems Принцип составления блок-схемы модели в библиотеке SimPowerSystems суще- ственно отличается от принципа составления блок-схем в S-моделях. В последних соединяемые блоки представляют собой программы математического преобразо- вания входных величин блока в выходные величины независимо от их физиче- ского содержания, а линии соединения переносят некоторый информационный сигнал. Соединения же блоков SimPowerSystems обычно следует рассматривать как имитацию электрических соединений, линии соединения — как идеальную проводную связь, обеспечивающую передачу электрического сигнала (тока) от выхода одного блока ко входу другого, а сами блоки библиотеки SimPowerSys- tems — как модели электрических процессов, протекающих в устройстве, поведе- ние которого моделируется. Из вышесказанного следует, что блоки S-модели в общем случае не могут быть соединены с большинством блоков библиотеки SimPowerSystems. В частности, нельзя непосредственно использовать блоки библиотеки Simulink для формирова- ния электрических сигналов заданной формы, а также непосредственно вывести значения токов и напряжений в обзорные окна Scope и на выходные порты. Тем не менее модели библиотеки SimPowerSystems функционируют в среде Simulink, и потому им должны быть доступны все возможности этой среды, предоставляе- мые библиотекой Simulink. В дальнейшем будем использовать следующую терминологию. S-блоками будем называть блоки библиотеки Simulink, Р-блоками — блоки библиотеки SimPower- Systems, m-линиями - линии, соединяющие S-блоки, m-входами и т-выходами — входы и выходы S-блоков, р-линиями — линии, соединяющие P-блоки, р-входами и р-выходами — входы и выходы P-блоков. Напомним, что т-линии переносят сигналы-функции, независимо от их физической природы, а p-линии переносят электрические сигналы и являются аналогом идеальной проводной связи. Анало- гично, m-входы и т-выходы воспринимают или генерируют функциональные сиг- налы, а p-входы и p-выходы реализуют электрическое соединение проводника р-линии с соответствующим Р-блоком. Для связи P-блоков с обычными S-блоками предназначены лишь отдельные блоки библиотеки SimPowerSystems, среди них блоки-измерители электрических сиг- налов (тока, напряжения и т п.), имеющие p-входы и m-выход, ряд блоков-источ- ников электрических сигналов, имеющих m-вход и p-выходы, а также некоторые другие блоки. Именно эти блоки позволяют использовать богатейшие возмож- ности библиотеки Simulmk для моделирования электроэнергетических систем,
438 Урок 10 • Моделирование электроэнергетических систем и в частности возможности программирования в MATLAB процессов ввода, пре- образования и вывода информации (в том числе — в графической форме). Для доступа к библиотеке SimPowerSystem откройте окно Simulink Library Browser (Браузер библиотек Simulink) и с помощью контекстного меню библиотеки вы- зовите окно Library: powerlib2, показанное на рис. 10.1. Как видите, рассматриваемая библиотека состоит из девяти разделов. Ниже при- водятся их названия и указан состав входящих в них блоков: О Electrical Sources (Источник электричества) — блоки, моделирующие источни- ки тока и напряжения; О Elements (Элемент) — блоки, моделирующие электрические процессы в эле- ментарных электрических элементах (RLC-цепи, реальная проводная связь, электрическая нагрузка, трансформаторы и т. п.); О Power Electronics (Элементы силовой электроники) — блоки, моделирующие по- ведение коммутирующих элементов силовой электроники (диоды, тиристоры, мосты, управляемые ключи и т. п.); О Machines (Машины) — блоки-модели электрических машин различных типов; О Connectors (Соединительные элементы) — блоки, моделирующие электриче- ские соединения различных типов; О Measurements (Измерители) — блоки, имитирующие измерительные электри- ческие приборы (амперметры, вольтметры, омметры и т п.); О Extras (Дополнительные блоки) — представляет собой библиотеку дополни- тельных блоков; О Demos (Демонстрационные программы) — содержит демонстрационные про- граммы-модели; О Powergui (Интерфейс пользователя) — представляет собой интерактивный блок окна графического интерфейса пользователя. Рис. 10.1. Окно библиотеки powerlibZ Раздел Electrical Sources В раздел Electrical Sources (Источники электричества) входят семь блоков (рис. 10.2): О DC Voltage Source — источник постоянного напряжения;
Общая характеристика библиотеки SimPowerSystems 439 О AC Voltage Source — источник переменного (синусоидального) напряжения; О AC Current Source — источник переменного (синусоидального) тока; О Controlled Voltage Source — управляемый источник напряжения* О Controlled Current Source — управляемый источник тока; О 3-Phase Source — трехфазный источник; О 3-Phase Programmable Voltage Source — трехфазный программируемый источник напряжения. Рис. 10.2. Блоки раздела Electrical Sources Блок DC Voltage Source имитирует работу идеального источника постоянного на- пряжения. Единственным настраиваемым параметром этого блока является ве- личина напряжения на клеммах источника. Блоки AC Voltage Source и AC Current Source имитируют работу источников синусои- дального напряжения и тока соответственно. Окна настройки этих блоков почти не отличаются. Они содержат следующие параметры: О Pick amplitude (V) — амплитуда синусоидального напряжения (в вольтах); О Pick amplitude (А) — амплитуда синусоидального тока (в амперах); О Phase (deg) — начальная фаза (в градусах); О Frequency (Hz) — частота изменения тока или напряжения (в герцах); Вход и выход каждого блока — это клеммы подсоединения источников к элемен- там электрической схемы. Блоки Controlled Voltage Source и Controlled Current source позволяют с использовани- ем блоков раздела Sources библиотеки Simulink создать источник с произвольным изменением напряжения или тока во времени. В отличие от ранее рассмотренных
440 Урок 10 * Моделирование электроэнергетических систем эти блоки имеют m-вход, к которому могут быть подсоединены выходы любого S-блока. Окна настройки блоков идентичны (рис. 10.3). Рис. 10.3. Окно настройки блока Controlled Voltage Source Каждый из этих блоков вырабатывает на выходных клеммах напряжение или ток, равный тому S-сигналу, который поступает на его вход. На рис. 10.4 приведе- на блок-схема моделирования работы источников напряжения трех видов. Рис. 10.4. Схема моделирования источников напряжения трех видов На схеме последовательно соединены блок AC Voltage Source, на котором установ- лена амплитуда 100 В и частота 50 Гц, блок DC Voltage Source, где установлено по- стоянное напряжение 50 В, и блок управляемого источника напряжения Controlled Voltage Source, на вход которого (m-вход) подается сумма двух сигналов: гармони- ческого с частотой 20 рад/с и амплитудой 50 В и скачкообразного, равного 0 до момента времени 0,1 с и -200 В — после этого момента. Все три источника напряжения замкнуты на RC-цепь (R = 1 Ом, С = 10-6 Ф). Общее напряжение измеряется с помощью измерительного блока Voltage Measurement (Вольтметр); его выход является m-выходом, к которому подключен блок Scope. Результат моделирования, отображаемый в блоке Scope, представлен на рис. 10.5.
Общая характеристика библиотеки SimPowerSystems 441 Результирующее напряжение, как и следовало ожидать, равно сумме напряже- ний указанных трех источников. Рис. 10.5. Результат моделирования работы источников напряжения Два последних блока раздела, (3-Phase Source и 3-Phase Programmable Voltage Source), имитируют работу трехфазных источников напряжения. В обоих блоках входом является нейтраль (N), а выходом — фазы А, В и С трехфазного напряжения. Об- щими настраиваемыми параметрами блоков являются следующие (рис. 10.6,10.7): О Phase-to-phase rms voltage (V) — напряжение между фазными клеммами (в вольтах); О Phase angle of phase A (degrees) — начальный фазовый угол фазы А (в градусах); О Frequency (Hz) — частота изменения напряжения (в герцах). Рис. 10.6. Окно настройки блока 3-Phase Source
442 Урок 10 • Моделирование электроэнергетических систем Рис. 10.7. Окно настройки блока 3-Phase Programmable Voltage Source В блоке 3-Phase Source моделируется трехфазный источник с внутренней последо- вательной RL-цепью, параметры которой определяют два остальных настраивае- мых параметра: Source resistance — активное сопротивление источника (в омах); Source inductance — индуктивность источника (в генри). В блоке 3-Phase Programmable Voltage Source имитируется источник с внутренним импедансом, равным нулю. Блок дополнительно позволяет модулировать ампли- туду, частоту или фазу напряжения источника (см. рис. 10.7). Список Time varia- tion of содержит четыре элемента: None, Amplitude, Phase, Frequency. При выборе одного из видов модуляции появляется дополнительный список, позволяющий установить амплитуду (в соответствующих единицах — вольтах, герцах или гра- дусах), фазовый угол (в градусах) и частоту (в герцах) модулирующего сигнала. Раздел Elements Блоки, которые входят в раздел Elements (Элементы), составляют четыре группы (рис. 10 8): О Elements — блоки, имитирующие элементарные последовательные и парал- лельные RLC-цепи; О Lines - блоки, имитирующие линии электропередач; О Circuit Breakers — блоки, имитирующие различного рода прерыватели тока; О Transformers — блоки, имитирующие трансформаторы. Группа Elements состоит из таких блоков: О Series RLC Branch — последовательная RLC-цепь; О Series RLC Load — последовательная RLC-цепь нагрузки; О Parallel RLC Branch — параллельная RLC-цепь; О Parallel RLC Load - параллельная RLC-цепь нагрузки; О 3-Phase Series RLC Branch — трехфазная последовательная RLC-цепь;
Общая характеристика библиотеки SimPowerSystems 443 О 3-Phase Series RLC Load — трехфазная последовательная RLC-цепь нагрузки; О 3-Phase Parallel RLC Branch — трехфазная параллельная RLC-цепь; О 3-Phase Parallel RLC Load — трехфазная параллельная RLC-цепь нагрузки; О Mutual Inductance — блок взаимной индуктивности; О 3-Phase Mutual Inductance — блок трехфазной взаимной индуктивности; О 3-Phase Dynamic Load — трехфазная динамическая нагрузка; О Surge Arrester — ограничитель пиковых напряжений. Рис. 10.8. Блоки раздела Elements Обычные RLC-цепи (блоки Series RLC Branch, Parallel RLC Branch, 3-Phase Series RLC Branch и 3-Phase Parallel RLC Branch) задаются тремя параметрами — сопротивлени- ем R, индуктивностью L и емкостью С. Для ввода отдельных элементов (резисто- ра, конденсатора или индуктивности) можно использовать любой из этих блоков, установив в нем соответствующие значения параметров. Например, чтобы задать резистор с помощью последовательной цепи (блок Series RLC Branch), следует уста- новить L — 0, и С = inf (при бесконечном значении емкости конденсатор превра- щается в идеальный проводник).
444 Урок 10 • Моделирование электроэнергетических систем В нагрузочных RLC-цепях (блоки Series RLC Load, Parallel RLC Load, 3-Phase Series RLC Load и 3-Phase Parallel RLC Load) задаются допустимые мощности рассеивания: ак- тивная — для резистора и реактивная - для индуктивности и конденсатора. В окне настройки блока Mutual Inductance (рис. 10.9) устанавливаются следующие параметры. О Winding 1 self impedance (Собственный импеданс первой обмотки) — в этом по- ле задается вектор из двух элементов, один их которых представляет собой со- противление первой обмотки (в омах), а другой определяет ее индуктивность (в генри). О Winding 2 self impedance (Собственный импеданс второй обмотки) — в этом по- ле соответственно задаются сопротивление и индуктивность второй обмотки. О Winding 3 self impedance (Собственный импеданс третьей обмотки) - в этом по- ле соответственно задаются сопротивление и индуктивность третьей обмотки О Mutual impedance (Взаимный импеданс обмоток) — в этом поле задается век- тор, элементами которого являются сопротивление (в омах) и взаимная ин- дуктивность (в генри) Рис. 10.9. Окно настройки блока Mutual Inductance Кроме того, предусмотрена возможность создания взаимной индуктивности на двух обмотках, для чего следует сбросить флажок Tree windings Mutual Inductance. В группе Lines находятся блоки имитации двух типов линий электропередачи. Первый из них — PI Section Line — представляет линию электропередачи как сово- купность последовательно соединенных секций с сосредоточенными параметрами. При этом длина линии задается в километрах, а параметрами линии являются со- противление, индуктивность и емкость одного километра линии (рис. 10.10).
Общая характеристика библиотеки SimPowerSystems 445 Рис. 10.10. Окно настройки блока PI Section Line Второй блок — Distributed Parameters Line (Линия с распределенными параметрами) — заменяет электрическую линию более близкой к реальности системой, в которой электрические параметры непрерывно распределены вдоль линии. Настраиваемые параметры этого блока в основном совпадают с описанными ранее (рис. 10.11). Block Parameters DttlrtbuledPar i - I >« Dubbuled Pearaetas lune (mask) [ink Implements eN-phsses drstrbutod peehwter few model The R,l,ar<dC kne parameters ere specified by JN>N] meluces. Toraodelelwo-.lhee-.aa six-phase s^iowfocetfewyou can etfhet i. specify complete [MxNJmatxes i r enter sequence pstemc-te-s j vedtrs the posnrve and eero sequence parameters ftль two-phase Or j thrae-pbese transposed fine, plus the mutual awsequenc* tor a j setphase transposed few (2 coupled 3-phese lews) Рис. 10.11. Окно настройки блока Distributed Parameters Line По умолчанию этот блок рассчитан на трехфазную проводную передачу, однако число линий можно уменьшить до двух или одной, установив нужное число в по- ле Number of phases N.
446 Урок 10 * Моделирование электроэнергетических систем Для имитации выключателей (рубильников) предусмотрены блоки группы Circuit Breakers (Прерыватели тока). Они обеспечивают моделирование процессов, воз- никающих при включении или выключении переменного тока. На рис. 10 12 по- казано окно настройки простейшего из них — блока Breaker. Рис. 10.12. Окно настройки блока Breaker Блок Linear Transformer, который входит в группу Transformers, представляет собой линейную модель трансформатора, не учитывающую насыщения в его обмотках. В окне настройки блока устанавливаются такие параметры (рис. 10.13). О Nominal power and frequency (Номинальная мощность и частота)— в этом поле задается вектор из двух элементов: первым элементом является номинальная мощность трансформатора (в вольт-амперах), а вторым — частота питания (в герцах). Рис. 10.13. Окно настройки блока Linear Transformer
Общая характеристика библиотеки SimPowerSystems 447 О Winding 1 parameters (Параметры первой обмотки) — в этом поле задается век- тор из трех элементов, первый — напряжение на обмотке (в вольтах), вто- рой — сопротивление обмотки, третий — индуктивность обмотки. О Winding 2 parameters (Параметры второй обмотки) — в этом поле задаются ана- логичные параметры для второй обмотки. О Winding 3 parameters (Параметры третьей обмотки) — в этом поле задаются ана- логичные параметры для третьей обмотки. О Magnetization resistance and reactance (Активное и реактивное сопротивление намагничивания) — в этом поле задается вектор из двух элементов: первый — сопротивление намагничивания, второй — индуктивность намагничивания. Величины сопротивлении и индуктивностей в этом случае задаются в относи- тельных единицах (pu — per unit), то есть как величины отношений к базовому сопротивлению GRbase) и базовой индуктивности (/-base) Эти величины определя- ются для каждой из обмоток следующими соотношениями: -^basej — V] Рп, = Rbasej где индекс j обозначает номер обмотки, V — напряжение на обмотке. Остальные обозначения такие, как показано в окне настройки. Базовые сопротивление и ин- дуктивность для параметров намагничивания совпадают с соответствующими ба- зовыми параметрами для первой обмотки эаздел Connectors Содержимое раздела Connectors (Соединительные элементы) представлено на рис 10.14. Назначение блоков этого раздела обычно вполне очевидно. Первые два блока служат для подключения элементов электрической цепи к общему про- воду — земле. Вторые два блока — нейтрали — отображают также общий провод для нескольких элементов электрической схемы, но в отличие от заземления по- тенциал которого принимается равным нулю, потенциал нейтрали может быть произвольным. На схеме может быть несколько нейтралей. Чтобы отличать нейтра- ли от земли и других нейтралей (с другими потенциалами) их снабжают порядко- вым номером (номером узла), который проставляется в окне настройки блока. РнТГДг lg , , г: [Зе View Це'Ь Рис. 10.14. Блоки раздела Connectors Четыре остальных элемента представляют собой различные сочетания разветвле- ний и соединений электрических линий.
448 Урок 10 • Моделирование электроэнергетических систем _ ___ р Раздел Power Electronics В окне раздела Power Electronics (Элементы силовой электроники) расположены такие блоки (рис. 10.15): О Ideal Switch — управляемый переключатель; О Diode — полупроводниковый диод; О Thyristor — упрощенная модель тиристора; Рис. 10.15. Блоки раздела Power Electronics О Detailed Thyristor — детальная модель тиристора; О Gto — силовой биполярно-полевой блок; О IGBT — комбинация биполярных транзисторов с полевыми, О Mosfet — упрощенная модель полевого транзистора с изолированным затвором; О Universal Bridge — универсальный мост; О Three-Level Bridge — трехуровневый мост. Все модели содержат имитацию последовательной цепи RsCs (snubber), гасящей выбросы напряжения Блоки имеют m-выход, на котором формируется вектор значений тока, протекающего через соответствующий элемент, и значений напря- жения на клеммах элемента. Как обычный S-сигнал, сигнал с этого выхода может быть использован любыми S-блоками для преобразования и вывода результатов. В управляемых блоках (тиристорах) предусмотрен также и m-вход д, на который подается управляющий S-сигнал предварительно сформированный S-блоками. В окнах настройки блоков мостов для установки величин, которые должны быть измерены и вектор которых будет выдавать m-выход, имеется список Measurement.
Общая характеристика библиотеки SimPowerSystems 449 Раздел Machines В состав раздела Machines (Машины) входят блоки, реализующие различные мо- дели электромашин (рис. 10.16) Приведем некоторые из них: О Simplified Synchronous Machine pu Units — упрощенная модель синхронной маши- ны (в относительных единицах); О Simplified Synchronous Machine SI Units — упрощенная модель синхронной маши- ны (в единицах системы СИ); О Permanent Magnet Synchronous Machine — синхронная машина с постоянным маг- нитом; О Synchronous Machine pu Fundamental — основная (полная) модель синхронной машины (в относительных единицах); О Synchronous Machine SI Fundamental — основная (полная) модель синхронной машины (в единицах системы СИ); О Synchronous Machine pu Standard — стандартная модель синхронной машины (в относительных единицах), О Asynchronous Machine pu Units — модель асинхронной машины (в относитель- ных единицах); О Asynchronous Machine SI Units — модель асинхронной машины (в единицах сис- темы СИ); О DC Machine — машина постоянного тока; О Discrete DC Machine — машина постоянного тока с дискретным управлением. Рис. 10.16. Блоки раздела Machines
450 Урок 10 • Моделирование электроэнергетических систем Поскольку перечисленные блоки, в отличие от рассмотренных ранее, моделиру- ют поведение электромеханических устройств, они помимо электрических свя- зей, содержат связи механических величин и модели механических процессов. Поэтому такие блоки имеют m-входы и т-выходы, позволяющие подключить к модели S-блоки, в которых реализуются динамические процессы преобразования механических величин. Так, в каждом из блоков электромашин присутствует один m-выход, отмеченный на изображении блока символом «т». Этот m-выход представляет собой S-сигнал в виде вектора из электрических и механических величин, описывающих текущее состояние выбранного вида электромашины. Чтобы выбрать величины, которые необходимо использовать для построения модели, нужно подсоединить к т-вы- ходу блока машины специальный блок данного раздела — Machine Measurement Demux (Распределитель машинных измерений). В окне настройки этого блока в верхней части области Параметры располагается список, позволяющий выбрать тип модели машины (Simplified synchronous, Synchro- nous, Asynchronous, Permanent magnet synchronous). Следует указать тип той машины, к m-выходу которой подсоединен блок Machine Measurement Demux. В окне настрой- ки появится тот или иной набор величин, описывающих измеряемый вектор (рис. 10.17-10.19). Рис. 10.17. Окно настройки блока Machine Measurement Demux (тип модели Asynchronous) Набор измеряемых величин для асинхронной машины, который представлен на рис. 10.17, включает токи и напряжения в различных электрических частях маши- ны, а кроме того, три механические величины: Rotor speed — угловая скорость враще- ния ротора; Electromagnetic torque — электромагнитный момент; Rotor angle — угол поворота ротора. Набор измеряемых величин для синхронной машины приведен на рис. 10.18. В него входят такие измеряемые механические величины: О Rotor angle deviation — угол отклонения ротора от «равновесного» положения;
Общая характеристика библиотеки SimPowerSystems 451 О Rotor speed — угловая скорость вращения ротора; О Rotor speed deviation — угловая скорость отклонения ротора от «равновесного» положения; О Rotor mechanical angle — угол поворота ротора; О Electromagnetic torque — электромагнитный момент; О Load angle — угол нагрузки. Рис. 10.18. Окно настройки блока Machine Measurement Demux (тип модели Synchronous) Для машины постоянного тока предусмотрены те же измеряемые механические величины, что и для асинхронной машины (рис. 10.19). Рис. 10.19. Окно настройки блока Machine Measurement Demux (тип модели Permanent magnet synchronous)
452 Урок 10 * Моделирование электроэнергетических систем Установка флажка рядом с выбранными из представляемого набора величинами обеспечивает их наличие в выходном сигнале блока Machine Measurement Demux. При этом величины в выходном векторе располагаются в том порядке, в котором они представлены в окне настройки блока. В каждом блоке электрической машины предусмотрены p-входы и (или) р-выхо- ды, которые служат для подключения к электрической схеме. Так, в блоках син- хронных машин такими являются выходы А, В и С, имитирующие клеммы обмо- ток статора. В блоках асинхронных машин это клеммы статора А, В и С и клеммы ротора а, b и с. Изображения блоков машин постоянного тока содержат четыре клеммы электрических соединений: F+ и F— для подсоединения обмотки возбу- ждения, а также А+ и А-для подсоединения якоря. Остальные входы блоков электрических машин представляют собой m-входы, то есть на них должны подаваться S-сигналы. Так, на вход Е блока упрощенной син- хронной машины подается амплитуда управляющего напряжения, а на вход Pm — сигнал, равный текущему значению механической мощности на валу машины. На вход Vf основной модели синхронной машины подается сигнал возбуждения. В блоках синхронной машины с постоянными магнитами и асинхронных машин m-входом является механический момент Тт на валу машины, а в блоках машин постоянного тока — момент TL нагрузки на валу. Сигналы, поступающие на эти входы, должны быть сформированы в модели сис- темы либо как явные функции времени, либо как выходы S-блоков, которые ими- тируют работу блоков управления или динамику механических устройств, яв- ляющихся нагрузкой на валу машины. В разделе Machines имеется ряд блоков, выполняющих эти функции: О Excitation System — блок, осуществляющий формирование напряжения возбу- ждения синхронной машины; О Generic Power System Stabilizer — стабилизатор колебаний; О Multi-Band Power System Stabilizer — многополосный стабилизатор колебаний; О HTG — модель динамики гидравлической турбины с ПИД-регулятором для синхронного генератора; О STG - модель динамики четырехступенчатой турбины с ПИД-регулятором для синхронного генератора. Раздел Measurements Наиболее важными блоками, входящими в раздел Measurements (Измерители), являются блоки Voltage Measurement (Вольтметр), Current Measurement (Амперметр) и Multimeter (Многофункциональный измеритель). Их особое значение заключа- ется в том, что эти блоки, в отличие от других блоков библиотеки SimPower- Systems, имеют один m-выход (он обозначен символом «V» в блоке вольтметра и символом «i» — в блоке амперметра). Остальные входы и выходы указанных блоков представляют собой, как обычно, клеммы для подсоединения измерителя к электрической цепи (рис. 10.20).
Общая характеристика библиотеки SimPowerSystems 453 Сигнал с m-выхода (напряжение или ток) может быть в дальнейшем преобразован с помощью обычных S-блоков, а после этого вновь использован в электрической схеме в преобразованном виде, если его подать на вход блока Controlled Voltage Source или блока Controlled Current Source. Кроме того, этот же сигнал может быть транс- портирован с помощью обычных средств в рабочее пространство MATLAB и затем представлен с применением графических средств в окне Figure. Особые функции выполняет блок Multimeter (Многофункциональный измеритель). Он предназначен для «измерения» и формирования на его выходе вектора S-сиг- нала, состоящего из величин, которые выбраны в списках Measurement блоков со- ответствующей блок-схемы Рис. 10.20. Блоки раздела Measurements Окно настройки блока Multimeter состоит из двух областей — Available Measurements (Доступные измерения) и Selected Measurements (Отмеченные измерения) (рис. 10.21). Рис. 10.21. Окно настройки блока Multimeter
454 Урок 10 • Моделирование электроэнергетических систем В первой области автоматически (без вмешательства пользователя) появляют- ся все величины, которые отмечены в списках Measurements блоков, находящихся в блок-схеме, где установлен блок Multimeter. Отмечая в этой области измеряемые величины, подлежащие включению в выходной сигнал блока Multimeter, пользо- ватель переводит их во вторую область (для этого предназначена кнопка, располо- женная между указанными областями, сверху). Таким образом в области Selected Measurements формируется список измеряемых величин. Их порядок в списке мо- жет быть изменен на желаемый с помощью кнопок Up, Down и Remove. Для вывода графиков отмеченных величин непосредственно в графическое окно следует активизировать переключатель Plot selected measurement, расположенный ниже области Selected Measurements. Запуск асинхронного двигателя Рассмотрим моделирование с применением библиотеки SimPowerSystems. Для этого воспользуемся примерами, приведенными в книге С. Г. Герман-Галкина, посвященной вопросам моделирования электроприводов. В качестве первого при- мера используем простейшую модель асинхронного двигателя с короткозамкну- тым ротором — модель akzvirt.mdl*, блок-схема которой приведена на рис. 10.22. Рис. 10.22. Блок-схема модели асинхронного двигателя Основу модели составляет блок Asynchronous Machine SI Units. Параметры двигате- ля приведены на рис. 10.23. Название Squirrel-cage (Беличья клетка) говорит о том, что установленный ротор является короткозамкнутым и имеет «обмотку» типа «беличья клетка*. Блок запитывается от трехфазиого источника напряжения, состоящего из трех соединенных звездой блоков AC Voltage Source (рис. 10.24). * Герман-Галкин С. Г. Компьютерное моделирование полупроводниковых систем в MATLAB 6.0: Учеб, пособие. — СПб.: Короиа-принт, 2001. С. 241-243.
Запуск асинхронного двигателя 455 Рис. 10.23. Окно настройки блока Asynchronous Machine SI Units Рис. 10.24. Окно настройки блока ЕА (AC Voltage Source) Каждый из этих блоков «вырабатывает» переменное напряжение с частотой 50 Гц и амплитудой 310 В. В блоках установлены разные начальные фазы, сдвинутые друг относительно друга на 120° (соответственно 120, 0 и -120°). Отметим, что в раскрывающемся списке Measurement указан вид измеряемой величины — на- пряжение (Voltage). Благодаря этому величины напряжений всех трех источников становятся доступными для измерения блоком Multimeter, который установлен
456 Урок 10 • Моделирование электроэнергетических систем в окне блок-схемы (см. рис. 10.22). При этом в окне настройки блока Multimeter в области Available Measurements появляются обозначения сигналов указанных трех напряжений. Переведем их в поле Selected Measurements. Чтобы задать автомати- ческое построение графиков зависимости этих напряжений от времени, активи- зируем переключатель Plot selection measurements (рис. 10.25). Рис. 10.25. Окно настройки блока Multimeter Величина момента нагрузки на валу двигателя устанавливается с помощью блока Step, параметры которого показаны в окне его настройки (рис. 10.26). Как видно на рисунке, в начальный промежуток времени (от 0 до 0,6 с) моментная нагрузка предполагается отсутствующей, а в последующее время действует постоянный момент (50 Нм). Рис. 10.26. Окно настройки блока Step К m-выходу блока Asynchronous Machine SI Units подсоединен вход блока ASM Mea- surement Demux. В списке параметров его окна настройки (рис. 10.27) отмечены
Запуск асинхронного двигателя 457 только две величины — Rotor speed (Угловая скорость вращения ротора) и Electro- magnetic torque (Электромагнитный момент, развиваемый двигателем). Поэтому именно они и будут являться выходами блока ASM Measurement Demux (см. рис. 10.22). Сигналы скорости и момента затем направляются в блок Speed Moment (типа Scope), позволяющий зарегистрировать графики зависимости этих величин от времени. Рис. 10.27. Окно настройки блока ASM Measurement Demux Для измерения и регистрации межфазного напряжения в блок-схеме предусмот- рены блоки Voltage Measurement и UBC (типа Scope). Установим параметры численного интегрирования описанной модели, показан- ные на рис. 10.28. Рис. 10.28. Окно установки параметров процесса моделирования После запуска модели на экране появляется окно, в котором отображены зависи- мости питающих напряжений от времени (рис. 10.29).
458 Урок 10 • Моделирование электроэнергетических систем Рис. 10.29. Результаты моделирования, выведенные блоком Multimeter Если теперь дважды щелкнуть на изображении блока Speed Moment, на экране появится окно, содержащее графики зависимости от времени скорости вращения ротора и электромагнитного момента, действующего на ротор (рис. 10.30). Рис. 10.30. Результаты моделирования в окне блока Speed Moment
Трехфазный мостовой управляемый выпрямитель 459 Результаты моделирования показывают, что при пуске двигателя без нагрузки на валу вначале возникают значительные колебания момента. Такие же колебания наблюдаются по току и скорости. Переходный процесс прекращается через 0,5 с. В момент времени (0,6 с), когда прикладывается момент нагрузки (50 Нм), проис- ходит скачок момента с переходным процессом и наблюдается уменьшение ско- рости вращения ротора. Трехфазный мостовой управляемый выпрямитель В качестве второго примера используем модель rect_virt_contr.mdl (рис. 10.31) трех- фазного мостового управляемого выпрямителя . Основой модели является блок Thyristor Convertor (Тиристорный преобразователь) типа Universal Bridge (Универсальный мост). Нагрузкой его является активно-ин- дуктивная цепь с противо-ЭДС, обеспечивающая как выпрямительный, так и ин- верторный режим работы. Цепь состоит из двух последовательно соединенных блоков типа Series RLC branche (Последовательная RLC-цепь) и DC Voltage Source (Источник постоянного напряжения). Рис. 10.31. Блок-схема модели трехфазного управляемого выпрямителя Герман-Галкин С. Г. Компьютерное моделирование полупроводниковых систем в MATLAB 6.0. — С. 143.
460 Урок 10 * Моделирование электроэнергетических систем Управление блоком Universal Bridge, который запитывается трехфазным источни- ком напряжения с индуктивным внутренним сопротивлением, осуществляется через блок Synchronized б-Pulse Generator (Генератор 6 импульсных синхронизи- рованных сигналов). Для моделирования трехфазного источника используются три соединенных звездой блока источников переменного напряжения (типа АС Voltage Source) и три последовательно соединенных с ними блока типа Series RLC branche. Межфазные напряжения измеряются вольтметрами и подаются в виде S-сигналов на входы генератора импульсов. Управление фазовым запаздыванием импульсов по отношению к опорным межфазным напряжениям осуществляется совокупно- стью блоков Uc (типа Step), Constant, Sum и Saturation; запаздывание (на блок-схе- ме - alpha_deg) составляет 90° на протяжении первых 0,04 с и 65° — в течение ос- тавшегося времени. На рис. 10.32 и 10.33 показаны параметры блоков, моделирующих трехфазный источник питания, а на рис. 10.34 и 10.35 — параметры блоков, управляющих фа- зовой задержкой импульсных сигналов. Рис. 10.32. Окно настройки блока Vb Рис. 10.33. Окно настройки блока Series RLC Branch
Трехфазный мостовой управляемый выпрямитель 461 Рис. 10.34. Окно настройки блока Uc (Step) Рис. 10.35. Окно настройки блока Saturation В окне настройки блока — генератора импульсов (рис. 10.36) частота напряжения синхронизации установлена 50 Гц, а ширина импульсов — 10 (приведенная к фа- зовому углу). Параметры основного блока — Thyristor Convertor — приведены на рис. 10.37. Обращаем ваше внимание на то, что в списке Measurements выбран эле- мент All voltages and currents (Все напряжения и токи). Он позволяет все токи и на- пряжения ветвей этого моста вывести в графические окна блока Multimeter. Рис. 10.36. Окно настройки блока Synchronized б-Pulse Generator
462 Урок 10 • Моделирование электроэнергетических систем Рис. 10.37. Окно настройки блока Thyristor Convertor Параметры цепи нагрузки показаны на рис. 10.38 и 10.39. В списке Measurement выбран элемент Branch voltage and current (см. рис. 10.38), что позволяет прокон- тролировать ток и напряжение в цепи нагрузки с помощью блока Multimeter. Рис. 10.38. Окно настройки блока Series RLC Branch в цепи нагрузки Рис. 10.39. Окно настройки блока DC Voltage Source в цепи нагрузки
Трехфазный мостовой управляемый выпрямитель 463 В блок-схеме модели наряду с ранее описанными предусмотрен специальный блок Total Harmonic Distorsion, который вычисляет коэффициент отклонения формы то- кового сигнала от гармонической формы с указанной частотой (рис. 10.40). Рис. 10.40. Окно настройки блока Total Harmonic Distorsion В результате предыдущих установок окно настройки блока Multimeter примет та- кой вид, как показано на рис. 10.41. Рис. 10.41. Окно настройки блока Multimeter Выберем для представления в графическом окне сигнал тока источника, а также сигналы тока и напряжения нагрузки. Проводя моделирование при указанных параметрах схемы, получим токи нагруз- ки и питания и напряжение питания, представленные в графическом окне блока Multimeter (рис. 10.42).
464 Урок 10 • Моделирование электроэнергетических систем Рис. 10.42. Результаты моделирования в графическом окне блока Multimeter На выходе блока Total Harmonic Distorsion получим сигнал, отображенный в окне блока Scope (рис. 10.43). Рис. 10.43. Изменение во времени коэффициента отклонения формы тока питания от гармонической формы На рис. 10.44 и 10.45 показаны зависимости от времени фазовой задержки им- пульсов в генераторе импульсных сигналов и самих импульсных сигналов.
Трехфазный мостовой управляемый выпрямитель 465 Рис. 10.44. Фазовая задержка импульсов Рис. 10.45. Выход блока генератора импульсных сигналов
466 Урок 10 • Моделирование электроэнергетических систем Вопросы для самопроверки 1. Для чего предназначена библиотека SimPowerSystems? 2 Каковы основные принципы формирования блок-схемы, создаваемой на осно- ве библиотеки SimPowerSystems? Есть ли различия между ними и принципа- ми создания S-моделей с помощью библиотеки Simulink? 3. Какие разделы библиотеки SimPowerSystems являются главными? 4. Каковы основные отличия построения блоков библиотеки SimPowerSystems от построения обычных S-блоков? Назовите преимущества и недостатки тако- го построения блоков. 5 Какие блоки библиотеки SimPowerSystems осуществляют связь с блоками биб- лиотеки Simulink и с системой MATLAB? 6. Каково основное назначение блока Multimeter? Как осуществляется связь это- го блока с другими блоками блок-схемы?
урок Моделирование машин и механизмов □ Общая характеристика библиотеки SimMechanics □ Движение уравновешенного свободного гироскопа □ Движение кривошипно-шатунного механизма □ Движение маятника
468 Урок 11 • Моделирование машин и механизмов Моделирование механического движения механизмов и машин осуществляется с помощью библиотеки SimMechanics пакета Simulink. Идеология составления блок- схем в этой библиотеке, как и в ранее рассмотренной библиотеке SimPowerSys- tems, существенно отличается от идеологии составления функциональных блок- схем библиотеки Simulink. В блок-схеме SimMechanics отдельные блоки следует рассматривать как модели, имитирующие механическое движение одной части моделируемого механизма относительно другой Входы и выходы блока фактиче- ски таковыми не являются, а имитируют «посадочное место» соответствующей части механизма. Линии соединения «входов» и «выходов» блоков имитируют жесткие соединения выходной части одного механизма с входной частью другого. Можно утверждать, что это соединение моделирует передачу силового воздейст- вия между частями разных механизмов. Но поскольку в соответствии с третьим законом Ньютона сила действия равна силе противодействия, такую передачу силы нельзя рассматривать как однонаправленное воздействие. Поэтому в блок- схемах SimMechanics на линиях соединений механических блоков вы не встретите изображений стрелок, указывающих направление воздействия. По той же причи- не графические изображения «входов» и «выходов» механических блоков имеют вид не стрелок, а квадратов с диагоналями Как и в блоках библиотеки SimPowerSystems, «входы» и «выходы» механических блоков нельзя рассматривать в качестве источников и приемников каких бы то ни было сигналов. К их соединительным линиям нельзя подсоединить обычные S-блоки, а потому нельзя и сформировать с помощью последних заданные воздей- ствия или вывести информацию о получаемых в результате движениях механиз- мов (например, в обзорные окна или непосредственно в среду MATLAB) Но так как любое моделирование механизмов невозможно осуществить без указания нуж- ных исследователю воздействий и без вывода результатов моделирования в среду MATLAB, такая идеология построения блок-схем механизмов требует включе- ния в библиотеку блоков, осуществляющих прямую и обратную связь S-блоков с механическими блоками. Связующие блоки должны иметь хотя бы один т-вход и один механический «выход» (для «восприятия» заданного воздействия и пере- вода его в механическое), либо механический «вход» и m-выход (для отображения результатов моделируемого механического движения в виде информационного сигнала). Общая характеристика библиотеки SimMechanics Если с помощью контекстного меню открыть библиотеку SimMechanics из окна Simulink Library Browser (Браузер библиотек Simulmk), то на экране появится окно, показанное на рис. 11.1. В состав библиотеки входит шесть разделов* О Bodies (Тела) — содержит блоки, моделирующие движения твердых тел; О Joints (Сочленения) — включает блоки имитации механических сочленений, обеспечивающих требуемые степени свободы одной части механизма относи- тельно другой;
Общая характеристика библиотеки SimMechanics 469 О Constraints & Drivers (Связи) — состоит из блоков имитации ограничений на сте- пени свободы механической системы; О Sensors & Actuators (Датчики и приводы) — содержит блоки, имитирующие из- мерители параметров механического движения, и блоки, позволяющие зада- вать движение частей механизма; О Utilities (Утилиты) — включает вспомогательные блоки, которые могут ис- пользоваться при создании модели механизма; О Demos (Демонстрационные программы) — позволяет вызвать на исполнение демонстрационные модели. Рис. 11.1. Окно библиотеки SimMechanics При составлении блок-схем механизмов следует принимать во внимание следую- щие особенности. О Основу блок-схемы любого механизма составляет цепь типа Ground-Joint-Bo- dy-Joint-...-Body с открытой или закрытой топологией, где по крайней мере одно из тел представлено блоком Ground. Блоки Body могут быть соединены более чем с двумя блоками Joint с фиксацией разветвления указанной после- довательности. Но каждое сочленение (блок Joint) должно быть подсоединено к двум и только двум телам. О Блоки Body могут быть соединены и с помощью блоков Driver или Constraint, имитирующих связи. О Блоки Actuator и Sensor могут быть подсоединены к любому из блоков Body, Joint или Driver, но только через дополнительные порты, которые устанавли- ваются в окнах настройки этих блоков. О Задать желаемый закон изменения во времени параметров движения можно только с помощью блоков Actuator, а вывод результатов в рабочее пространст- во MATLAB — посредством блоков Sensor, которые связывают блоки библио- теки SimMechanics со средой Simulink. Раздел Bodies Раздел Bodies (Тела) содержит два блока: Ground и Body (рис. 11.2). Блок Ground (Основание) является обязательным при построении модели любого механизма.
470 Урок 11 * Моделирование машин и механизмов Он представляет неизменные точки основания (Земли), неподвижные в абсолют- ном (инерциальном) пространстве. Движение отдельных частей механизма зада- ется или определяется по отношению к системе координат, воплощаемой именно этим блоком. Рис. 11.2. Блоки раздела Bodies В окне настройки блока Ground устанавливается лишь один параметр — вектор смещения начала системы координат, связанной с неподвижной частью механиз- ма относительно начала инерциальной системы координат. Блок Body представляет отдельную часть механизма, рассматриваемую как твер- дое тело, движение которого моделируется. В окне настройки блока задаются мас- са и матрица инерции этого твердого тела, его начальное положение и ориента- ция (то есть положение и ориентация систем координат CS, жестко связанных с ним). В число систем координат, жестко связанных с телом, обязательно входит система CG (Center of Gravity), начало которой совмещено с центром тяжести тела. Именно относительно осей этой системы координат задается матрица моментов инерции тела. В поле Mass (Масса) указывается величина массы той части меха- низма, которая представлена как твердое тело. В поле Inertia (Моменты инерции) задается квадратная матрица (3x3) моментов инерции тела относительно ортого- нальных осей, жестко связанных с телом и проходящих через его центр тяжести. Область Body coordinate systems (Системы координат, связанные с телом) содер- жит две вкладки: Позиция и Ориентация. Во вкладке Позиция (рис 11.3) располо- жена таблица ввода координат начала систем координат, связанных с телом. По умолчанию эта таблица содержит три строки и позволяет задать координатные системы, связанные с телом: CG, начало которой совмещено с центром тяжести тела, CS1, «привязанную» к левому порту («входу») блока Body и CS2, «привязан- ную» к правому порту («выходу») блока Body. В каждой строке предусмотрен ввод семи характеристик соответствующей систе- мы координат: О Show port (Показать порт) — установка (или сброс) флажка в этом столбце по- зволяет ввести в изображение блока (или убрать из него) изображение порта, связанного с соответствующей системой координат тела;
Общая характеристика библиотеки SimMechanics 471 О Port side (Сторона порта) — этот столбец позволяет установить изображение порта слева или справа на изображении блока; О Имя — в этом столбце устанавливается идентификатор вводимой системы ко- ординат; О Origin position vector [х, у, z] (Вектор положения начала) — этот столбец содер- жит вектор координат начала соответствующей системы координат; О Единицы измерения — здесь устанавливаются единицы измерения для вектора координат начала соответствующей системы координат; О Translated from origin of (Отсчитывается от начала системы координат) — здесь указывается имя (идентификатор) системы координат, от начала которой от- считываются координаты устанавливаемой системы координат; О Components in axes of (Компоненты в осях системы координат) — в этом столбце указывается имя (идентификатор) системы координат, относительно которой отсчитываются координаты начала устанавливаемой системы координат. В раскрывающемся списке на вкладке Позиция (см. рис. 11.3) вы можете выбрать систему отсчета. В него входят инерциальная система отсчета WORLD, все системы координат, имеющиеся на вкладке, а также система ADJOINING, под которой пони- мается система координат, жестко связанная с тем сочленением, которое подсое- динено к телу. Рис. 11.3. Вкладка Позиция окна настройки блока Body
472 Урок 11 • Моделирование машин и механизмов Вкладка Ориентация (рис. 11.4) устроена аналогичным образом, она позволяет ус- тановить начальную угловую ориентацию вводимой системы координат. Отли- чия заключаются в следующем. Вместо вектора координат начала в четвертом столбце вводится вектор углов поворота вводимой системы координат относи- тельно исходной, имя которой указывается в шестом столбце. При этом принимае- мая последовательность поворотов вокруг координатных осей выбирается в седь- мом столбце. Рис. 11.4. Вкладка Ориентация окна настройки блока Body Каждому месту соединения двух тел (блоков Body) соответствует своя отдельная система координат CS Количество точек соединения тела с другими телами (а зна- чит, и количество связанных с телом систем координат) можно увеличить или уменьшить, пользуясь кнопками, расположенными в правом верхнем углу облас- ти Body coordinate systems. Раздел Joints Раздел Joints (Сочленения) содержит блоки, позволяющие обеспечить возмож- ность относительных движений тел, представленных отдельными блоками Body, то есть необходимых степеней свободы. Кроме 15 блоков, имитирующих различные виды сочленений, в разделе Joints на- ходятся два подраздела - Disassembled Joints (Разобранные сочленения) и Massless Connectors (Безинерционные соединители) (рис. 11.5).
Общая характеристика библиотеки SimMechanics 473 Блоки сочленений имеют два обязательных порта, с помощью которых они подсое- диняются к двум блокам из раздела Bodies. Порт, отмеченный индексом В (base — основной), предназначен для соединения с блоком Body, представляющим первое (основное) тело, порт с индексом F (follower — следующий) служит для подсоеди- нения к следующему телу в связанной цепи тел, составляющих механизм. Рис. 11.5. Блоки раздела Joints Рассмотрим некоторые наиболее простые и важные блоки сочленений. Блок Pris- matic обеспечивает одну поступательную степень свободы вдоль оси, указанной во вкладке Оси окна его настройки. Такой осью свободного перемещения являет- ся третья ось (2) инерциальной системы координат (рис. 11.6). Как видно на ри- сунке, имеется возможность связать ось относительного перемещения также с од- ной из осей первого тела, с которым связан блок Prismatic (выбрав элемент Base из предлагаемого списка), либо с одной из осей системы координат, связанной со вторым телом (выбрав элемент Follower). В поле Connection parameters (Параметры соединения) устанавливаются три па- раметра: Current base (Текущая база), Current follower (Текущее ведомое теле Л
Урок 11 • Моделирование машин и механизмов и Number of sensor/actuator ports (Число портов для измерителей и возбудителей движения). Первые два параметра (не устанавливаемые пользователем) указыва- ют название блока тела, к которому подсоединен соответствующий порт блока Joint. Если блок Joint не подсоединен к телам, то напротив этих параметров появ- ляется запись «not connected» (не соединен) Третий параметр позволяет ввести дополнительные порты блока. Рис. 11.6. Окно настройки блока Prismatic Образуем простейшую цепь из блоков Ground, Prismatic и Body (рис. 11 7), одно- временно установив в блоке Prismatic два дополнительных порта для подсоедине- ния блоков Actuator и Sensor После этого окно настройки блока Prismatic будет выглядеть так, как показано на рис. 11.8. Как видим, теперь параметр Current base имеет значение GND@Ground, а параметра Cunent follower — CSl@Body. Это означает, что база отождествлена с системой ко- ординат GND блока Ground, а ведомое тело Follower связано с системой координат CS1 блока Body. При этом на изображении блока Prismatic появились изображения двух дополнительных портов. С ними теперь можно соединить блоки измерите- лей (Sensor) и (или) возбудителей (Actuator) движения. Prismatic Рис. 11.7. Простейшая механическая цепь
Общая характеристика библиотеки SimMechanics 475 Рис. 11.8. Окно настройки подсоединенного блока Prismatic В окне настройки блока RevoLute (Цилиндрический шарнир), устанавливается на- правление оси вращения тела Follower относительно тела Base (рис. 11 9). Рис. 11.9. Окно настройки блока RevoLute
476 Урок 11 • Моделирование машин и механизме! Следует заметить, что элементарное сочленение типа Prismatic имеет внутреннее обозначение «Р», а сочленение типа цилиндрического шарнира — обозначение «R». Блок In-plane обеспечивает свободу относительного поступательного движения двух тел в плоскости осей, направление которых установлено в окне настройки (рис. 11.10). Нетрудно убедиться, что блок представляет собой последовательное соединение двух элементарных сочленений типа Prismatic. Первое из них (Р1) обес- печивает свободу перемещения второго (Р2) вдоль оси, направление которой ука- зывается в первой строке вкладки Оси окна настройки. Во второй строке той же вкладки устанавливается направление второй оси свободного перемещения. Рис. 11.10. Окно настройки блока In-pLane Блок Universal обеспечивает свободу поворота тела Follower относительно тела Base вокруг двух осей, задаваемых в окне его настройки. Блок представляет собой по- следовательное соединение двух элементарных сочленений R1 и R2 типа Revolute. Блок Gimbal (Карданов подвес) представляет собой последовательное соединение трех элементарных сочленений Rl, R2 и R3 типа Revolute и обеспечивает свободу углового перемещения одного тела относительно другого вокруг трех, в общем случае некомпланарных, осей, указанных в окне настройки Блок Spherical (Сферический шарнир), как и предыдущий блок, обеспечивает три уг- ловые степени свободы относительного перемещения двух тел. Отличия заключают- ся в следующем. Во-первых, в блоке Spherical нет явно выраженных осей вращения, и поэтому они не устанавливаются в его окне настройки. Во-вторых, вследствие этой особенности, к блоку Spherical не может быть подсоединен блок возбуждения движения (Actuator), а параметры относительных поворотов тел не могут быть
Общая характеристика библиотеки SimMechanics 477 представлены в углах поворотов; они могут задаваться лишь в виде вектора состав- ляющих кватерниона поворота второго тела (Follower) относительно первого (Base). С помощью блока Planar (Плоское движение) можно обеспечить такое сочленение двух тел, когда одна из плоскостей как ведущего, так и ведомого тела сохраняется неизменной, а точки ведомого тела могут занимать любое положение в соответ- ствующей плоскости ведущего тела. Блок представляет собой последовательное соединение трех элементарных сочленений — двух призматических (Р1 и Р2) и од- ного цилиндрического шарнира (R1). Для обеспечения плоского движения необ- ходимо, чтобы указанные в блоке настройки оси были некомпланарными. Блок Cylindrical (Цилиндрическое сочленение) позволяет имитировать такое со- единение двух тел, которое допускает свободный поворот вокруг указанной оси с одновременным поступательным перемещением вдоль этой же оси. Он пред- ставляет собой последовательное соединение сочленения Р1 типа Prismatic и со- членения R1 типа Revolute Особое место занимает блок Custom Joint (Наборное сочленение). Он предостав- ляет пользователю возможность самому сконструировать произвольную после- довательную цепь из элементарных сочленений. Для этого предназначен набор (в виде списка, расположенного в первой колонке вкладки Оси) из трех примити- вов Pl, Р2, РЗ типа Prismatic, трех сочленений Rl, R2, R3 типа Revolute и одного при- митива S-типа Spherical (рис. 11.11). Рис. 11.11. Окно настройки блока Custom Joint
478 Урок 11 • Моделирование машин и механизмов Ограничения состоят в следующем. Набор должен обеспечивать не более шести степеней свободы — три угловые и три поступательные. Никакие две оси примити- вов Prismatic или две оси примитивов Revolute не должны быть параллельными (в этом случае сочленение вырождается) Блок Weld (Жесткое соединение) служит для имитации жесткого соединения двух тел. Его удобно использовать для построения моделей поводковых меха- низмов. Блок Bushing обеспечивает шесть степеней свободы (три поступательные и три угловые); он состоит из последовательно соединенных трех примитивов Pl, Р2, РЗ типа Prismatic и трех сочленений Rl, R2, R3 типа Revolute. Подобную функцию выполняет блок Six-DoF (Шесть степеней свободы). Единст- венным отличием данного блока от блока Bushing является то, что для обеспече- ния трех угловых степеней свободы используется один примитив S-типа Spherical вместо трех примитивов типа Revolute. Особенностью блока Screw (Винт), обеспечивающего степень свободы относитель- ного перемещения двух тел по винту, является наличие дополнительно устанав- ливаемого параметра Pitch (Шаг винта) (рис. 11.12). Рис. 11.12. Окно настройки блока Screw
Общая характеристика библиотеки SimMechanics 479 Раздел Sensors & Actuators Раздел Sensors & Actuators (Датчики и приводы) (рис. 11.13) включает блоки Sen- sors, которые служат для измерения относительных движений тел, и блоки Actua- tors, задающие относительные движения. Как ранее было отмечено, блоки типа Joint (Сочленения) могут быть снабжены до- полнительными портами для подсоединения к ним блоков Actuator и Sensor. Ана- логичная операция возможна и по отношению к блокам Body, Driver и Constraint. Рис. 11.13. Блоки раздела Sensors & Actuators Особенность блоков Actuator и Sensor состоит в том, что они являются связующими между механическими блоками библиотеки SimMechanics и обычными S-блоками Это позволяет использовать возможности библиотеки Simulink для формирова- ния сигналов, их преобразования и перевода получаемых результатов в рабочее пространство Simulink. Блоки возбудителей (Actuator) и измерителей (Sensor) относительного движения разделены на три группы. О Body Actuator (Возбудитель движения тела) и Body Sensor (Измеритель движе- ния тела) — предназначены для подсоединения к блокам Body; задают или из- меряют абсолютное движение жестко связанной с телом системы координат, к которой они подсоединены. О Joint Actuator (Возбудитель движения сочленения) и Joint Sensor (Измеритель движения сочленения) — предназначены для подсоединения к блокам Joint; задают или измеряют относительное движение примитива, указанного в окне настройки.
480 Урок 11 • Моделирование машин и механизмов О Driver Actuator (Возбудитель нестационарной связи) и Driver & Constraint Sensor (Измеритель движения связи) — предназначены для подсоединения к блокам Driver или Constraint; задают или измеряют относительное движение связи, с которой они соединены. Вначале остановимся на особенностях использования блоков Joint Actuator и Joint Sensor. На рис. 11.14 и 11.15 приведены окна настройки блоков. Рассмотрев эти рисунки, можно сделать следующие выводы. О С помощью блока Joint Actuator можно в общем случае задать (как функцию времени) либо силовое взаимодействие между элементами примитива имя которого указывается в верхнем поле ввода, либо относительное движение элементов этого примитива Установка вида возбуждения осуществляется пу- тем активизации соответствующего переключателя — Generalized Forces (Обоб- щенные силы) или Motion (Движение). О Относительное движение частей примитива задается в виде векторного сигна- ла из трех элементов, первый из которых определяет относительное переме- щение, второй — относительную скорость, а третий — относительное ускоре- ние частей указанного элементарного сочленения. О Блок Joint Sensor позволяет в общем случае измерить следующие характери- стики относительного движения частей примитива, имя которого устанавли- вается в верхнем поле ввода окна настройки блока. • Angle (Угол) — угол поворота выходной части примитива (Follower) относи- тельно его части, соединенной со входом (Base); • Angular velocity (Угловая скорость) — относительная угловая скорость; • Angular acceleration (Угловое ускорение) — относительное угловое ускорение; • Computed torque (Вычисленный момент) — полный момент сил, вызываю- щий относительное угловое ускорение; • Позиция — перемещение выходной части примитива (Follower) относитель- но его части соединенной со входом (Base); • Velocity (Скорость) — относительная скорость; • Acceleration (Ускорение) — относительное ускорение; • Computed force (Вычисленная сила) — полная сила, вызывающая относи- тельное ускорение; • Quaternion (Кватернион) — вектор из четырех элементов, характеризующий текущее относительное угловое положение частей примитива; • Quaternion, derivative (Производная от кватерниона по времени) — вектор из четырех элементов, являющихся производными по времени от соответ- ствующих элементов кватерниона относительного поворота; • Quaternion, second derivative (Вторая производная от кватерниона по време- ни) — вектор из четырех элементов, являющихся вторыми производными по времени от соответствующих элементов кватерниона относительного поворота;
Общая характеристика библиотеки SimMechanics 481 • Reaction torque (Момент реакции) — момент реакции относительно оси при- митива; • Reaction force (Сила реакции) — сила реакции по оси примитива. / Block Parameter Joint- tu tor -101*1 Description — —‘— -*----------------— -------------—. Actuates q Joint primitive wth generalized forteftorque or linear-angular position, velocity, and acceleration motion signals. Base-follower sequence and joint axis determines sign gf forward motion. Inputs are Simulink signals. Motion Input signals must be bundled into one signal. Connect to Joint bloc k to see Connected to primitive list Рис. 11.15. Окно настройки блока Joint Sensor Рис. 11.14. Окно настройки блока Joint Actuator Выбор необходимых для измерения величин производится посредством установ- ки флажка рядом с названием соответствующей величины. Выходом блока слу- жит вектор, элементами которого являются величины, отмеченные в порядке их указания в списке в окне настройки. При подключении к конкретным элементар- ным сочленениям некоторые окна ввода в окне настройки становятся неактивны- ми, поэтому выбор ограничивается оставшимися величинами. ^ПРИМЕЧАНИЕ Примитив типа Spherical позволяет измерить только кватернион поворота и его производные. Перейдем к рассмотрению блоков возбуждения и измерителей для тел Их окна настройки приведены на рис. 11.16 и 11.17.
482 Урок 11 • Моделирование машин и механизмов Как видим, параметры возбуждения могут быть определены относительно абсо- лютной (инерциальной) системы координат либо относительно системы координат, связанной с телом в той точке, куда подсоединен блок. При этом возбуждаться могут только силы и моменты, приложенные к точке подсоединения. Изменить можно лишь следующие величины: О [x;y;z] Позиция — вектор абсолютного перемещения соответствующей точки тела; О [x';y';z'] Velocity (Скорость) — вектор проекций абсолютной скорости соответ- ствующей точки тела; О [Ox^qy'jqz1] Angular velocity (Угловая скорость) — вектор проекций абсолютной угловой скорости тела; О [3x3] Rotation matrix — матрица направляющих косинусов углового положения тела; О [x";y";z"] Acceleration (Ускорение) — вектор проекций абсолютного ускорения соответствующей точки тела; О [ex";ey";ez"] Angular acceleration (Угловое ускорение) — вектор проекций абсо- лютного углового ускорения тела. •) Block Parameters Body Sensor .JSJx] descriptions......— *—---------------------------------------- j Measures ilnearianguiar position, velocity, anchor acceleration • ofagodywith aspect to a specified coordinate system. Optional rotation matrix tor Body orientation. Output ts Srmuhnk J signal Multiple output signals can be bundled into one signal. । Block Parameters Body Actuate! , Dewipfior; - • — - — - Actuates a Body with generalized fcrcefargue signal vector components specified wth respectto reference coordinate system Inputts a Simulink signal For Body motion or initiai cQndltton actuation, press Help г Meas urements———’ T ! ?. Measuring’Body coordinate system With respect to coordinate system (see block diagram) isolute (World) Absolute (World) pActuabonr-——-------—————- § Actuating body at coordinate system Using reference coordinate system Oenerallzed forces* Г* Apply torque P Apply force [x; y. z] (see block diagram) g kosoiute (World) Absolute (World) Local (Body CS) OK Cancel Help Apply Hiv.z] Позиция Local (Body CS) m mis (ex’; ey erJ Angular velocity 13x3 J Rotation matrix I/) y4; 2“ I Acceleration deg/s m)s*2 F I ex'" ey* ег*] Anguiai acceleration [degft P Output selected parameters as one signal Cancel g | I > I X'.y’iz'l Velocity Рис. 11.16. Окно настройки блока Body Actuator Рис. 11.17. Окно настройки блока Body Sensor Как и ранее, величины, которые необходимо измерить, должны быть отмечены посредством установки флажков; выходом блока является вектор всех отмечен- ных измеряемых величин в порядке, указанном в окне настройки
Общая характеристика библиотеки SimMechanics 483 Окна настройки блоков возбуждения и измерения движения двигателей связей показаны на рис. 11.18 и 11.19. Рассмотрев их, можно прийти к таким выводам. О Возбуждаться могут только блоки нестационарных связей (Driver), а измери- тели (Sensor) могут быть подсоединены к любым блокам связей. О Величины, которые задаются как возбуждение, представляют собой векторы из трех элементов (перемещение, скорость и ускорение); при этом перемеще- ния могут быть линейными (как показано на рис. 11.18) или угловыми (если имитируется нестационарная связь по углу). О Измерители (Sensor) измеряют только силу и момент силы реакции в связи. Block Parameters Driver ActualOf ; r toi xf “ Description--------------------— ----------.........— Inputs position, va oclty and acceleration Slmu nksignals to Driverto drive re atwe motion between the base (B) and follower (F) Bodies. Base-fciKiwet sequence and nt axis determine sign of forward той n nput signals must be bundled into one signal. Рис. 11.18. Окно настройки блока Driver Actuator Рис. 11.19. Окно настройки блока Constraint & Driver Sensor Помимо указанных блоков в раздел входят два особых блока. Первый из них — Joint Initial Condition (Начальные условия сочленения), позволяющий задать на- чальное относительное положение и начальную относительную скорость двух частей того элементарного сочленения (Revolute или Prismatic), к которому он подсоединен
484 Урок 11 • Моделирование машин и механизмов (рис. 11 20). Второй блок — Joint Stiction Actuator (Имитатор «захвата» сочлене- ния), с его помощью можно моделировать силы и моменты сил вязкого и сухого трения в оси элементарного сочленения, включая явление «жесткого» сцепления его частей под действием сил сухого трения (рис 11.21). Рис. 11.20. Окно настройки блока Joint Initial Condition Block Paiameteri Jomt Stiction Actuator ,Г|1а<х| ["Description-------------------------——-----------------------:—~---------- Actuates s Joint primitive vrrtb stiction forcefrorque. Locked if static friction -remains vnthin range of forward and reverse stiction limits. External actuation and kinetic friction requite unite. Locking velocity threshiMd in MKS (SI) units, Base-fo tower sequence and joint axis determine sign off rwa;d motion Inputs are S;mutmksignals Connect to joint btock to see Connected to primitive list Рис. 11.21. Окно настройки блока Joint Stiction Actuator Раздел Constraints & Drivers В разделе Constraints & Drivers (Связи) (рис. 11.22) собраны блоки, задающие пред- варительные ограничения на относительные перемещения между телами. Эти ог- раничения могут быть заданы как не зависящие от времени связи (блоки) и как связи, зависящие от времени движения по степеням свободы (блоки Drivers). Блоки Drivers задают нестационарную связь между подсоединенными к блоку те- лами в виде зависимости от времени следующих величин: О Distance Driver — расстояния между началами систем координат, связанными с этими телами;
Общая характеристика библиотеки SimMechanics 485 О Angle Driver — угла между указанными двумя осями систем координат, связан- ными с этими телами; О Linear Driver — проекции расстояния между началами систем координат, свя- занными с этими телами, на указанную ось инерциальной системы отсчета; О Velocity Driver — линейной комбинации проекций векторов линейных и угловых скоростей систем координат, связанных с этими телами, на указанные оси. Рис. 11.22. Блоки раздела Constraints & Drivers Стационарные связи устанавливаются с помощью блоков Constra nts: О Point Curve Constraint — определяет связь в виде заданных своими координата- ми в системе координат, связанной с ведомым телом (Follower), точек кривой (кривая определяется сплайновой интерполяцией указанных точек) задающей расстояние до начала системы координат, связанной с ведущим телом (Body); О Parallel Constraint - определяет такую связь, что указанная ось системы коор- динат, связанной с ведущим телом остается во время движения параллельной одноименной оси системы координат, связанной с ведомым телом; О Gear Constraint — определяет связь как зубчатую передачу с задаваемыми ра- диусами делительных окружностей. Чтобы задать временную зависимость нестационарной связи в блоке Dover, нуж- но подсоединить к нему блок Driver Actuator. В противном случае будет реализова- на стационарная связь Например, блок Distance Driver реализует движение начала координат тела Follower по сфере с центром в начале координат тела Body При этом радиус сферы определяется заданным начальным положением этих систем координат. Раздел Utilities Рассмотрим некоторые из блоков, входящих в раздел Utilities (Утилиты) (рис 11.23) Они выполняют вспомогательные функции. Блок Connection Port (Соединительный порт) играет в модели SimMechanics та- кую же роль, как блоки In и Out в обычной S-модели. В модели SimMechanics
486 Урок 11 • Моделирование машин и механизмов можно создавать подсистемы, используя для формирования входов и выходов блоки Connection Port. В окне блока настраивается один параметр — место распо- ложения порта: справа или слева на изображении блока подсистемы (рис. 11.24). Рис. 11.23. Блоки раздела Utilities Рис. 11.24. Окно настройки блока Connection Port Если для измерения угла относительного поворота используются блоки Joint Sen- sor из раздела Sensors & Actuators (Датчики и приводы), то измеритель угла выдает сигнал, пропорциональный измеряемому углу только в диапазоне +л радиан. При выходе за пределы указанного диапазона выдаваемое значение угла претерпевает разрыв, равный 2л радиан. Чтобы получить реальное значение угла поворота, сле- дует использовать блок Continuous Angle. При этом в число измеряемых блоком Joint Sensor величин помимо угла нужно включить скорость его изменения и по- дать соответствующий сигнал на вход Rate. Тогда на выходе блока получится не- прерывный сигнал угла. Настраиваемыми параметрами блока Continuous Angle яв- ляются единицы измерения угла и угловой скорости. Движение уравновешенного свободного гироскопа Рассмотрим на простейших примерах процесс построения S-модели с помощью библиотеки SimMechanics. Начнем с модели уравновешенного гироскопа. Он пред-
Движение уравновешенного свободного гироскопа 487 ставляет собой устройство, состоящее из одного твердого тела, центр тяжести ко- торого неподвижен в инерциальном пространстве, а само тело может произволь- но поворачиваться в пространстве относительно его неподвижной точки (точки подвеса); при этом телу сообщено быстрое вращение вокруг одной из жестко свя- занных с ним осей (оси собственного вращения гироскопа). Обеспечить телу три угловые степени свободы можно с помощью двух видов со- членений, предусмотренных в библиотеке SimMechanics (раздел Joints): Spherical (Сферический шарнир) и Gimbal (Карданов подвес). Удобнее использовать вто- рой блок. В нем применяются три элементарных сочленения вида Revolute (Ци- линдрический шарнир), каждое из которых обеспечивает вращение вокруг одной из трех взаимно перпендикулярных осей. Модель такого гироскопа представлена на рис. 11.25. Она состоит из блока Ground инерциальной системы отсчета, блока Gimbal обеспечения подвеса гироскопа с тре- мя степенями свободы, блока Гироскоп (типа Body), трех блоков Joint Initial Con- dition (IC), каждый из которых устанавливает начальные условия для одного из примитивов Rl, R2 и R3 типа Revolute, составляющих подвес Gimbal) и трех изме- рителей Joint Sensor, каждый из которых подсоединен к одному из указанных при- митивов и измеряет угол его относительного поворота. [Модел^1тМесИап1С^^авновешенно(^^роскоп^| Gimbfll Рис. 11.25. Модель уравновешенного гироскопа Для связи с рабочим пространством предусмотрены выходные порты Дельта! и Дельта2, на которые поступают сигналы, значения которых пропорциональны текущим значениям углов поворота гироскопа вокруг осей Z и X соответственно. Примем для модели следующие обозначения: От— масса гироскопа; О J — матрица моментов инерции гироскопа; О ОМ — собственная угловая скорость гироскопа (вокруг оси У); О omx, omz — начальные угловые скорости гироскопа вокруг осей X и Z соответ- ственно;
488 Урок 11 * Моделирование машин и механизмов О deltalO, del ta20 — начальные углы отклонения оси собственного вращения ги- роскопа от оси У инерциальной системы координат (вокруг осей Z и X соот- ветственно). На рис. 11.26-11.29 приведены окна настройки основных блоков. Рис. 11.26. Окно настройки блока Joint Initial Condition Block Parameters Joint Sen. I Description . Measures linaarfanguiar position, velocity, acceleration 1 computed forceflonjue and/or reactioni fcrce/toreue of a Joint p mtirve. Spherical measured by guatemten. Base-follower : sequence and Joint axis determine sign of forward motion. i Outputs are Simulink sign ats' Multiple output signals can be : bundled into one signet Connect to Joint block to see • Connected to primitive list Рис. 11.27. Окно настройки блока Joint Sensor
Движение уравновешенного свободного гироскопа 489 Рис. 11.28. Окно настройки блока Gimbal Рис. 11.29. Окно настройки блока Гироскоп
490 Урок 11 • Моделирование машин и механизмов Текст управляющей программы SUG_simMech_upr, которая осуществляет присвое- ние значений инерционным характеристикам гироскопа, ввод начальных усло- вий, запуск на выполнение S-модели и вывод на экран результатов в графической форме, приведен ниже. X SUG_simMech_upr X Лазарев Ю. Ф. 19-04-2004 clc clear all X Установка инерционных характеристик гироскопа m - 1; J - [3 0 0;0 5 0:0 0 33: XJ - [4 0 0:0 5 0:0 0 3]: XJ - [4 -0.2 0.1;-0.2 5 -0.2,0 1 -0 2 3J: X Установка начальных условий ОМ - 20; omx - 1; omz - 0: deltalO - 0: delta20 - 0: X Моделирование на модели SimMechanics sim('SUG_simMech'); X Извлечение данных t « tout: DI - yout(:.l). 02 - yout(;.2): X Построение графического вывода результатов subplot(2.2.1) plot(Dl,D2), grid setCgca,'FontSize*.12) title('Траектория в картинной плоскости'); xlabeK'\deltai (градусы)'). ylabeK'\delta2 (градусы)') subplot(2.2 2) axis('off'): h - text(-0 3.1.1,'Уравновешенный гироскоп (модель SimMechanics)1.'FontSize'.14); h - text(0.1.0 9,'| ','FontSize',12); h - text(0.2,0.9,num2str(J(l,D),'FontSize'.12): h - text(0.4.0.9,num2str(J(l.2)).'FontSize',12); h - text(0.6,0.9.num2str(J(l,3)).'FontSize'.12); h - text(0 8.0 9.'| ','FontSize'.12); h - text(-0.1,0.8.'J - '.'FontSize'.12): h - text(0.1.0 8.'j '.'FontSize'.12); h - text(0.2. .8.num2str(J(2,l)).’FontSize'.12); h - text(0 4,0 8,num2str(J(2,2)).'FontSize'.12); h - text(0.6.0.8.num2str(J(2,3)),'FontSize',12); h - text(0.8,0.8.'| ','FontSize*.12); h - text(0.1.0.7,’| ','FontSize'.12); h - text(0.2,0.7,num2str(J(3,l)),'FontSize',12); h - text(0 4,0 7.num2str(J(3.2)),'FontSize'.12); h ° text(0 6 0.7,num2str(J(3.3)).'FontSize'.12), h » text(0 8,0.7.'| '.'FontSize'.12); h - text(-0 1,0.5.’Начальные углы (градусы)','FontSize’,12); h - text(0.1,0.4.['\deltal0 - ',num2str(deltal0)],'FontSize'.12); h - text(0.4,0.4,['\delta20 - ',num2str(delta20)],'FontSize'.12); h = text(-0.1,0.2.'Начальные угловые скорости (рад/с)'.'FontSize*.12); h - text(0.1,0.1.['omx0 - ',num2str(omx)].'FontSize'.12); h - text(0 4.0 I.E'omyO - ',num2str(0M)].'FontSize'.12); h - text(0.7.0.1,['omz0 ~ ',num2str(omz)].'FontSize'.12); h - text(-0 1.-0.05.'-----------------------------------------------'); h - text(-0.1.-0.1,'Программа SUG-simMech-upr Лазарев Ю Ф 19-04-2004'); h - text(-0.1.-0.15,'-----------------------------------------------'); subplot(2,2,[3,4]) plot(t,Dl,t.D2,'.'), set(gca,'FontSize'.12) title('Изменение углов поворота оси гироскопа со временем’); xlabeK'Время (сек)'), ylabeK'Углы (градусы)') legend('\deltal'.'\delta2'.0). grid
Движение уравновешенного свободного гироскопа 491 Далее приводятся результаты работы этой программы для трех вариантов свобод- ного движения гироскопа: для случая, когда он является динамически симмет- ричным телом с осью симметрии, совпадающей с осью собственного вращения (рис. 11.30, а); для несимметричного гироскопа (рис. 11.30, б); для несимметрич- ного и динамически несбалансированного гироскопа (рис. 11.30, в). Уравновешенный гироскоп (модель SimMechanics) Начальные углы (градусы) 310 = 0 820 = 0 Начальные угловые скорости (рад/с) omxO = 1 отуО = 20 omzO = 0 Программа SUG-simMech-upr Лазарев Ю. Ф. 9-04 2004 Уравновешенный гироскоп (модель SimMechanics) Траектория в картинной плоскости -5 -4 -3 -2 -1 0 81 (градусы) I 4 0 0 | J= | 0 5 0 | I 0 0 3 | Начальные углы (градусы) 810 = 0 820 = 0 Начальные угловые скорости (рад/с) omxO = 1 отуО = 20 omzO = 0 Программа SUG-simMech-upr Лазарев Ю Ф 19-04-2004 Изменение углов поворота оси гироскопа со временем ;1_I_।_।_।_I_।_।_।_।_ 0123456789 10 Время (сек) J = 3 О О О 5 О О О 3 6 Рис. 11.30. Свободное движение гироскопа: а — симметричного уравновешенного; 6 — несимметричного уравновешенного
492 Урок 11 • Моделирование машин и механизмов Рис. 11.30. Свободное движение гироскопа: в — динамически несбалансированного Движение кривошипно-шатунного механизма Перейдем к построению модели кривошипно-шатунного механизма. Он состоит из ведущего звена (поводка, кривошипа), вращающегося с заданной угловой ско- ростью вокруг оси Z, ведомого звена (шатуна) и ползуна, перемещающегося по- ступательно в направляющих, параллельных оси X. Три указанных тела образуют замкнутую механическую цепь. Модель может быть реализована в виде схемы, изображенной на рис. 11.31 Она состоит из двух блоков типа Ground, трех блоков типа Body (Ведущее звено, Ведомое звено и Ползун), четырех блоков примитивов сочленении (три блока Revolute и один блок Prismatic), блока Joint Actuator — возбу- дителя вращения ведущего звена, четырех блоков типа Joint Sensor, предназначен- ных для измерения относительного движения частей четырех сочленений, и трех блоков типа Body Sensor, которые служат для измерения параметров движения тел. В дальнейшем будем использовать следующие обозначения О ml, m2, m3 — массы ведущего звена, ведомого звена и ползуна; О Л, J2, J3 — матрицы моментов инерции указанных тел относительно их цен- тров масс; О L1 — расстояние от оси вращения кривошипа до шарнира, связывающего его с шатуном; О L2 — расстояние между двумя шарнирами шатуна (ведомого звена); О от — угловая скорость вращения кривошипа вокруг оси Z,
Движение кривошипно-шатунного механизма 493 О fl 0 — начальный угол отклонения кривошипа от горизонтальной оси X; О Е - кратчайшее расстояние от» оси вращения кривошипа до оси перемещения ползуна; О а! — рассчитываемое начальное значение угла наклона оси шатуна к оси X. С учетом этих обозначений установлены настраиваемые параметры блоков тел, показанные на рис. 11.32-11.34. Рис. 11.31. Модель SimMechJGMl кривошипно-шатунного механизма Рис. 11.32. Окно настройки блока Ползун
494 Урок 11 • Моделирование машин и механизмов а б Рис. 11.33. Окно настройки блока Ведущее звено: а — вкладка Позиция; б — вкладка Ориентация
Движение кривошипно-шатунного механизма 495 а б Рис. 11.34. Окно настройки блока Ведомое звено: а — вкладка Позиция; б — вкладка Ориентация
496 Урок 11 • Моделирование машин и механизмов На рис. 11.35 показаны результаты моделирования с использованием программы (приведенной ниже) управления работой модели кривошипно-шатунного меха- низма. Кривошипно-шатунный механизм Угловые скорости поворотов шарниров 61--------!-------:-------:------- Шарнир1 Шарнир? ШарнирЗ 150 200 Время (с) Угловые ускорения поворотов шарниров Момент сил на ведущем шарнире Отн перемещение призматич сочленения Скорость и ускорение ползуна Скорость Vy звеньев 0.03 Угловая скорость ведущего звена Перемещения У ц м. звеньев 0.3 0.2 -0.2 Л-О — S..Q -0.3 Время (с) 0.01 -0.01 0 02 0.02* и Л ._ft_____.е>4.,®.. *> ft ft s> : f> --ft--*—-ЧГ-J— ffti. t® —- .V « ft е Л. -0.03 L 0 50 100 150 200 Время (c) А о , Рис. 11.35. Результаты моделирования движения кривошипно-шатунного механизма
Движение кривошипно-шатунного механизма 497 % SimMech_KSMl_upr % Лазарев Ю. Ф. 6-05-2004 clear all, clc X Задание параметров ведущего звена ml = 1; Л = [1 о 0;0 1 0; 0 0 1]: L1 = 0.5: fiO = 0; от - 5 X Задание параметров ведомого звена m2 - 1; J2 - [1 0 0:0 1 0; 0 0 1]: L2 = 1 X Задание параметров ползуна m3 - 1; J3 = [1 0 0:0 1 0: 0 0 1]; Е = 0.1; X Предварительные расчеты al - asinC(Ll*sin(fi0)-E)/L2); X Моделирование sim('SimMechJCSMl') X Получение данных t = tout: И. С приводного шарнира Ugl = unwrap(yout(:,l)*pi/180)*180/pi; UgSkl = yout(:.2); UgUskl - yout(:,3): Mcl - yout(:.4); X 2 С ведомого шарнира Ug2 = unwrapCyoutC:,5)*pi/180)*180/pi; UgSk2 - yout(:,6): UgUsk2 - yout(:.7): Mc2 = yout(:.8): % 3. С шарнира ползуна Ug3 - youtC:.9); UgSk3 - yout(:,10); UgUsk3 - youtC:.11); Mc3 » youtC:,12); X 4 С направляющей ползуна Xp - yout(:,13); Skp = yout(:,14); Uskp = yout( ,15): X 5. С центра масс ведущего звена Xzl = youtC:.16); Yzl = youtC:.17); SkXzl = yout(:.19): SkYzl = yout(:.20); UgSkZl = youtC:.24), UgUskZl = youtC:.27); X 6. С центра масс ведомого звена Xz2 = yout(:,28); Yz2 = yout(:.29); SkXz2 = youtC:.31); SkYz2 = youtC:.32); UgSkZ2 = yout(:.36); UgUskZ2 = yout(:.39); W.C центра масс ползуна Xz3 = yout(:.40); Yz3 = yout(:,41); SkXz3 = yout(:,43); SkYz3 = yout(:,44); UgSkZ3 = yout(:,48); UgUskZ3 = out(;,51); % Вывод графиков subplot(2.3.1) plotCt.Ugl.'o',t,Ugl+Ug2.'.',t.Ug3). grid. titleC'Углы поворотов шарниров’) xlabel('Время (c)'). ylabel('Градусы') h = text(0.0,1200.'Кривошипно-шатунный механизм'.'FontSize'.14); legend('ШарнирГ.'Шарнир1-2'.'ШарнирЗ',0) subplot(2,3.4) plotCt.Mcl.’o'). grid. titleC'Момент сил на ведущем шарнире') xlabel('Время (с)'), ylabel('Ньютон*м') subplot(2,3.2) plotCt.UgSkl.'o',t.UgSk2.'.',t.UgSk3). grid titleC'Угловые скорости поворотов шарниров') xlabel('Время (c)'). ylabel('Градусы в секунду') legendC'ШарнирГ,'Шарнир2‘.'ШарнирЗ'.0) subplot(2.3.3) plot(t.UgSkZl.'o',t.UgSkZ2.'.',t.UgSkZ3). grid titleC'Угловые ускорения поворотов шарниров') xlabel('Время (с)'), ylabel('Градусы в секунду*2') legendC'ШарнирГ,'Шарнир2'.'ШарнирЗ'.0) subplot(2.3.5) plotCt.Xp.'г'), grid. titleC'd™. перемещение призматич. сочленения') xlabel('Время (с)'), ylabel('Метры') subplot(2.3.6)
498 Урок 11 • Моделирование машин и механизмов plotCt.Skp.'.'.t.Uskp). grid. titleC'Скорость и ускорение ползуна') xlabel('Время (с)'). ylabel(’M/c и м/с*2'), legendC'скорость'.'Ускорение'.0) figure subplot(2.3.1) plotCt.Xzl.'o',t,Xz2,'.',t.Xz3). grid. titleC'Перемещения X ц.м. звеньев') х1аЬе1('Время (с)'). ylabeK'Метры'). legendC'ведущее'.'ведомое','ползун'.1) subplot(2.3.3) plotCt.UgSkZl.'o',t.UgSkZ2.’.'.t.UgSkZ3). grid titleC'Угловая скорость ведущего звена') xlabelC‘Время (О'), ylabeK'Градусы в сек.') subplot(2,3 4) plotCt.Yzl.'o',t.Yz2.'.',t.Yz3). grid. titleC'Перемещения Y ц.м. звеньев') xlabeK'Время (c)'), ylabeK'Метры') subplot(2.3.2) plotCt.SkXzl,'o',t.SkXz2.'.'.t,SkXz3). grid. titleC'Скорость Vx звеньев') xlabeK'Время (c)'), ylabeK‘Градусы 8 сек.') subplot(2.3.5) plotCt.SkYzl.'o',t,SkYz2.'.',t.SkYz3), grid. titleC'Скорость Vy звеньев') xlabeK'Время (O'). ylabeK'Градусы в сек.') subplot(2.3,6) plotCt.UgUskZl.'o',t.UgUskZ2.'.'.t.UgUskZ3). grid titleC'Угловые ускорения звеньев'). х1аЬе1('Время (с)'), ylabel('Градусы 8 сек.') Как видим, средства библиотеки SimMechanics позволяют получить достаточно обширную информацию о механическом движении тел, как относительном, так и абсолютном, включая реакции в связях между телами. Последнее обстоятельство особенно важно при проектировании механизмов и машин. маятника Рассмотрим модель движения маятника на поступательно вибрирующем основа- нии, поведение которого было исследовано ранее другими средствами Для нача- ла отметим, что по умолчанию модели библиотеки SimMechanics автоматически учитывают действие силы тяжести на все звенья механизма. При этом предпола- гается, что ось Y земной (инерциальной) системы координат направлена вверх, следовательно, сила тяжести, приложенная в центре масс, направлена в противо- положном направлении (вниз); оси Z и X лежат в плоскости горизонта. В дальнейшем будем предполагать, что ось вращения маятника совпадает с осью Z, а колебания маятника происходят в плоскости YX. Для имитации поступательного движения основания в этой плоскости свяжем тело маятника (блок Тело) с инерциальной системой отсчета (блок Основание) через сочленение Planar, которое представляет собой цепь из трех последовательно соеди- ненных примитивов Pl, Р2 и R1 (рис. 11.36). Первые два (типа Prismatic) реализу- ют поступательное движение основания соответственно вдоль осей X и К Третий примитив (типа Revolute) реализует вращательную степень свободы маятника во- круг оси Z. Окно настройки блока Тело представлено на рис. 11.37, а блока Planar — на рис. 11.38. Для установки параметров используются следующие обозначения: Ош- масса маятника; О J - матрица моментов инерции маятника относительно его центра масс; О 1 — смещение центра масс маятника относительно оси его вращения;
Движение маятника 499 О ft г — коэффициент вязкого трения в оси вращения маятника; О fi 0 — начальный угол отклонения маятника от вертикали; О fitOM — начальная угловая скорость маятника, О nxiTi, пут — амплитуды виброперегрузок основания соответственно в горизон- тальном и вертикальном направлениях; О от — частота колебаний основания; О ерх, еру — начальные фазы колебаний основания; Од — ускорение силы тяжести. [Модель SimMechanics движение маетника | Рис. 11.36. Блок-схема модели маятника -------------L_-------.---------------------------------------1 Рис. 11.37. Окно настройки блока Тело
500 Урок 11 • Моделирование машин и механизмов JjSJxf Description- -— -----j-.. — - Represents two translational and one rotational degrees of freedom Restricts the follower (F>to move relative to the Разе (В) Body tn plane defined by span of two primitive prismatic axes (Pt, P2). follower can also rotate about aids R l - P1 x P2 Axis Rt must be normalto plane P1 attached to base. Ri attached to follower Listed order of primitives is order of mot;on during simulation. Sensor and actuator ports can be added Base-follower sequence and axes directions determine sign of forward motion This joint become® singular if both prlsmatlce alien. -J Block Paiameteis Planai Connectton parameters Current base. ONO@OcHoaaHne CSi@Teno Number ofsensor/actuator ports |s| 4Й Current follower Parameters ‘—....... — Осн | Дополнительно | Axis of action —JШ_____ Reference csys Ит.я P1 P2 R1 Primitive । Prismatic i[1 0 0] Prismatic ![01 0] Revolute Цр 01J | APPV | Cancel Рис. 11.38. Окно настройки блока Planar WORLD _*] Ввод начальных условий движения маятника осуществляется блоком Joint Initial Condition, окно настройки которого приведено на рис. 11.39. Рис. 11.39. Окно настройки блока Joint Initial Condition
Движение маятника 501 Возбуждение колебаний основания осуществляется двумя блоками: Joint Actua- tor2 (по оси X) и Joint Actuatorl (по оси У). Окно настройки одного из них показа- но на рис. 11.40. Измерение угла отклонения маятника от вертикали и его угловой скорости осу- ществляется с помощью блока Датчик угла и угл. скор, типа Joint Sensor, окно на- стройки которого показано на рис. 11.41. Рис. 11.40. Окно настройки блока Joint Actuatorl . Block Parameters Датчик угла и угл.гжор -Description- *-“—'—— Measures iinear/angular position, velocity, acceleration, computed forceftorque andior reaction forceflorque of a Joint primitive Spherical measured by quaternion. Base-follower sequence and joint axis determine sign of forward motion Outputs are Simulink signals. Multiple output signals ci n be bundled into one signal. Conned to Joint block to see Connected to primitive list Р Angular velocity Г Computed torq e [ Г* Reaclion torque |N Г” Reaction force [n N-m N-m jease | ft' Measurements Connected to primitive -|ri Reactions measured on: With respect to coord nate system jAbsolute (World) Г Cutpul selected parameters as one signal : Cartel Apply | Рис. 11.41. Окно настройки блока Датчик угла и угл. скор. Для получения непрерывного и большего по модулю, чем 180° угла поворота ма- ятника использован блок Continuous Angle. Сигнал угловой скорости, полученный на выходе блока Датчик угла и угл. скор., ис- пользуется для формирования момента сил вязкого трения на оси вращения ма- ятника с помощью блока Joint Actuator, окно настройки которого приведено на рис. 11.42.
502 Урок 11 • Моделирование машин и механизмов Рис. 11.42. Окно настройки блока Joint Actuator Управление вводом данных, запуском модели и выводом результатов можно осу- ществить с помощью программы SimMech_FM_upr. X SimMech_FM_upr X Управляющая программа для S-модели S1mMech_FMp % Лазарев Ю. Ф.. 11-05-2004 clear all. clc % Ввод параметров маятника П) = 1; Jx = 0.01: Jy ~ 0.01; Jz = 0.02: 1=0.5; ftr = 0.0; Ж0.05; J = [Jx 0 0;0 Jy 0.0 0 Jz]; % Параметры внешних воздействий nxm = 0: от = 10; ерх = 0; пут = 0; от = 21 5. еру = 0; g - 9 81; % Ввод начальных условий fi0 = 179.9*pi/180; fitO = 0; % Моделирование на S-модели sim('SimMechFMp’) X Получение результатов t = tout; fi « yout(; .1); fit =yout(:,2);
Движение маятника 503 X Вывод графиков subplot(2.2.1) plot(fi*pi/180.fit*pi/180). grid xlabel('Угол (радиан)'), ylabel('Угл. скорость (рад/с)') set(gca.'FontSize'.12). title('Фазовый портрет') subplot(2.2.[3 4]) plot(t.fi). grid xlabel('Время (секунды)'), ylabel('Угол (градусы)') set(gca,'FontSize'.12). title('Отклонение от вертикали') subplot(2.2,2) axis('off’): h = text(0.1.1.1,'Маятник (модель SimMechanics)','FontSize'.14); h - text(-0.2,1.0.['Macca (кг) m - ',num2str(m)].'FontSize'.12); h = text(0.5,1.0,['Смещение ц.м (м) L= *.num2str(l)],'FontSize'.12); h = text(-0.2,0.9.'Матрица моментов инерции относительно центра масс (кг мА2)','FontSize'.12); h “ text(0.1,0.8.'| '.'FontSize'.12); h - text(0.2.0.8,num2str(J(l,l)),'FontSize'.12); h = text(0.4,0.8.num2str(J(1.2)).'FontSize'.12); h “ text(0.6.0.8,num2str(J(l,3)).'FontSize'.12); h e text(0.8,0.8,'| '.'FontSize'.12); h - text(-0.1,0.7.'J - '.’FontSize’.12); h = text(0.1.0.7,'| ’.'FontSize'.12); h - text(0.2,0.7.num2str(J(2.D).'FontSize'.12); h “ text(0.4,0.7.num2str(J(2.2)).'FontSize'.12); h = text(0.6,0.7.num2str(J(2.3)).'FontSize'.12); h - text(0.8.0.7.'| ','FontSize'.12); h = text(0.1.0 6,'j '.'FontSize'.12); h - text(0.2.0.6.num2str(J(3.D).'FontSize'.12); h = text(0 4.0.6.num2str(J(3.2)).'FontSize',12); h - text(0.6.0.6.num2str(J(3,3)).'FontSize',12); h = text(0.8,0.6.'| '.'FontSize'.12); h = text(-0.2.0.5.'Начальный угол (градусы)'.'FontSize'.12); h = text(0.7,0.5,['\phi0 = ’,num2str(fi0*180/pi)].'FontSize'.12); h = text(-0.2,0.4.'Начальная угловая скорость (рад/с)'.'FontSize',12); h = text(0.7,0.4,['\phi "О = ',num2str(fit0)],'FontSize'.12); h = text(-0.2,0 3.'K-нт вязкого трения (H м с)','FontSize'.12); h = text(0.7.0.3.[‘ftr = ’,num2str(ftr*180/pi)].'FontSize*.12); h = text(-0.2,0.2,'Движение основания;'.'FontSize',12); h = text(0.5,0.2.['om - ',num2str(om)L'FontSize'.12); hl = text(-0.2.0.1.' вдоль горизонтали'.'FontSize',12); h - text(0.5.0.1.['nxm - ',num2str(nxm)].'FontSize',12); h - text(0.8.0.1.['epx - '.num2str(epx)].'FontSize'.12); h2 - text(-0.2,0 0.' вдоль вертикали','FontSize'.12); h - text(0 5.0.0,['nym = ' ,num2str(nyni)],'FontSize'.12); h - text(0.8,0.0,[’epy - ',num2str(epy)],'FontSize'.12); h - text(-0.1,-0.05,’---------------------------------------------'); h = text(-0.1.-0.1,'Программа SimMech-FM-upr Лазарев Ю. Ф 26-04-2004'); h = text(-0.1,-0.15,'---------------------------------------------'); Далее приведены два примера работы программы и модели. На рис. 11.43 показа- ны результаты работы модели для свободных (без трения и колебаний основа- ния) колебаний маятника с амплитудой, близкой к 180°. На рис. 11.44 представлены результаты моделирования маятника при интенсив- ной вертикальной вибрации основания и проиллюстрирована устойчивость при этих условиях верхнего положения равновесия маятника.
504 Урок 11 • Моделирование машин и механизмов Фазовый портрет Маятник (модель SimMechanics) Масса (кг) т= 1 Смещение ц м (м) L= 0 5 Матрица моментов инерции относительно центра масс (кг м2) | 0.01 О О Начальный угол (градусы) Начальная угловая скорость (рад/с) К-нт вязкого трения (Н м с) Движение основания вдоль горизонтали вдоль вертикали Программа SimMech-FM-upr Лазарев Ю Ф 26 04-2004 J = О 0 01 О 0 О 0.02 ф0 = 179 9 ф'О = О ftr = 0 от = 21 5 пхт = О пут = О ерх= О еру = О Рис. 11.43. Свободные колебания маятника Маятник (модель SimMechanics) Масса (кг) т= 1 Смещение ц м (м) !_= О 5 Матрица моментов инерции относительно центра масс (кг м2) | 001 0 0 | J = I 0 0 01 0 | | 0 0 0.02 | Начальный угол (градусы) ф0 = 170 Начальная угловая скорость (рад/с) Ф'О - 0 К-нт вязкого трения (Н м с) ftr = 2 .8648 Движение основания: от = 21 5 вдоль горизонтали пхт = 0 ерх = 0 вдоль вертикали пут = 10 еру = 0 Программа SimMech-FM-upr Лазарев Ю Ф 26 04-2004 Рис. 11.44. Устойчивость верхнего положения равновесия маятника
Вопросы для самопроверки 505 Наконец, на рис. 11.45 продемонстрирован выпрямительный эффект маятника при интенсивной горизонтальной вибрации основания. Маятник (модель SimMechanics) Масса (кг) т= 1 Смещение ц.м (м) L= 0 5 Матрица моментов инерции относительно центра масс (кг м2) | 0.01 0 0 I J= I 0 0.01 0 | | 0 0 0 02 | Начальный угол (градусы) Ф0 = 0 Начальная угловая скорость (рад/с) Ф'0 = 0 К-нт вязкого трения (Н м с) fir = 2.8648 Движение основания от = 21.5 вдоль горизонтали пхт = 10 ерх = 0 вдоль вертикали пут = 0 еру = 0 Программа SimMech-FM-upr Лазарев Ю Ф 26-04-2004 Отклонение от вертикали Время (секунды) Рис. 11.45. Отклонение положения равновесия маятника от вертикали при горизонтальной вибрации основания Вопросы для самопроверки 1 Для чего предназначена библиотека SimMechanics? 2. Каковы основные принципы формирования блок-схемы, создаваемой на осно- ве библиотеки SimMechanics? Отличаются ли они от принципов создания S-моделей с помощью библиотеки Simulink? 3. Из каких главных разделов состоит библиотека SimMechanics? 4. В чем состоят основные отличия построения блоков библиотеки SimMecha- nics от построения обычных S-блоков? Перечислите преимущества и недос- татки такого построения блоков. 5. Какие блоки библиотеки SimMechanics осуществляют связь с блоками биб- лиотеки Simulink и с системой MATLAB? 6. С помощью каких блоков библиотеки SimMechanics осуществляется имита- ция: а) источников механического движения; б) обеспечения степеней свобо- ды; в) наложения связей?
Алфавитный указатель А R ans, 18 realmax, 20 с realmin, 20 case, 77 s SS-объект, 150 Е SS-модель, создание, 239 else, 75 ss-представление, 193 elseif, 76 end, 33, 75 switch, 76 eps, 20 T F TF-объект, 150 for, 75, 78 Z function, 87, 88 ZPK-объект, 150 G zp-представление, 193 global, 92 A T амплитудный спектр, 180 1 аналогово-цифровой i, 20, 23 преобразователь, 166 if, 75 inf, 20 аппроксимация, 58 Б J библиотека j, 20, 23 Aerospace Blockset, 404 SimMechanics, 468 L SimPowerSystems, 438 latc-представление, 193 Simulink, 278 Itiview, 264 блок LTI-модели, 239 LU-разложение, 52 M М-файл, 86, 88 М-книга, 124 M-book.dot, 124 N NaN, 20 3DoF, 405 6DoF, 405 Actuator, 404, 469 BackLash, 313,355 Body, 469 Chirp Signal, 299 Clock, 287 Combinatonal Logic, 311 Connections, 330 Constant, 293, 337 0 Constraint & Driver Sensor, 483 otherwise, 76 Coulomb & Viscous Friction, 314 Data Store Memory, 317 P Data Store Read, 317 pi, 20 Data Store Write, 317
Алфавитный указатель 507 блок (продолжение) Dead Zone, 355 Demux, 315 Derivative, 303 Digital clock, 293 Discrete Pulse Generator, 298 Discrete State-Space, 305 Discrete Transfer Fen, 305 Discrete-Time Integrator, 305, 306 Display, 282, 287, 293 Dot Product, 308 Driver Actuator, 483 Enable, 318 Fen, 314 First-Order Hold, 305 From Workspace, 356 From, 317 Function & Table, 377 Gain, 308 Goto Tag Visibility, 317 Goto, 317 Ground, 318 Hit Crossing, 313 IC, 318 In, 318 Integrator, 303, 333, 355 ISA Atmosphere Model, 410 Joint Actuator, 480 Joint Sensor, 480 Logical Operator, 311 Look-up Table(2D), 320 Look-up Table, 320 Manual Switch, 316 Math Function, 310 MATLAB Fen, 314 Matrix Gain, 308 Memory, 306 Merge, 316 MinMax, 311, 356 Mux, 315 Out, 282, 318 Ramp, 296 Relational Operator, 311, 356 Relay, 356 Repeating Sequence, 292 Repeating Sequence, 297 Rounding Function, 311 Saturation, 356 Scope, 281 Second Order Linear Actuator, 412 Selector, 316 S-Function, 377 Sign, 356 Signal Generator, 293 Sine Wave, 287, 296 Slider Gain, 310 Sources, 291 блок (продолжение) State-Space, 303, 305 Step, 295, 356 Subsystem, 319, 330, 377 Sum, 308, 309 Terminator, 318 To File, 282, 289, 337 To Workspace, 282, 290 Transfer Fen, 303 Transport Delay, 303, 305 Trigger, 318 Trigonometric Function, 310 Turbofan Engine System, 411 Uniform Random Number, 299 Unit Delay, 306 Variable Transport Delay, 303 Width, 318 XY Graph, 281, 286, 337 Zero-Order Hold, 306 Zero-Pole, 303 блоки, преобразования координат, 415 В вектор, 26 вычитание, 35 поэлементное преобразование, 36 сложение, 35 транспонирование, 35 умножение на число, 35 умножение, 35 векторизация функций, 149 векторное произведение, 35 векторные действия, 35 Г гироскоп, уравнение, 242 д действительная форма Шура, 55 действительные числа, ввод, 15 дискрет времени, 166 3 знаки операций, 18 &, 76 , 36, 37 *,37 ./,36, 37 .Л, 36, 37 1,76 ~, 76 -, 18, 35 *, 18, 35 +, 18, 35 ’, 18, 40 /, 18, 40 л, 18, 40
508 Алфавитный указатель знаки разделительные %, 88 , (запятая), 87 .... 87 ;, 87 И интегрирование ОДУ, 83 интерактивная оболочка SPTool, 221 интерполяция, 58 К КИХ-фильтры, 205 класс double, 138 cell, 138 char, 138 sparse, 138 struct, 138 uint8, 138 классы пакета Control System Toolbox, 150 команда 1,79 break, 78 cd, 79 cedit, 80 clc, 80 clear, 79 delete, 79 demo, 79 diary, 79 dir, 79 echo, 80 format, 80 getenv, 79 help, 92 home, 80 info, 80 input, 93, 95 load, 79 matlabrc, 80 more, 80 pack, 79 path, 79 pause, 93, 95 quit, 80 save, 79 sp, 77, 79, 93, 148 startup, 80 unix, 79 version, 80 which, 79 whatsnew, 80 комплексная форма Шура, 55 комплексные числа, ввод, 23 константы зарезервированные, 19 конструктор класса, 147 линейная стационарная система, 235 м массив ячеек, 144 матрица, 26 LU-разложение, 52 базовые матричные операции, 39 вертикальная конкатенация, 34 возведение в целую степень, 40 горизонтальная конкатенация, 34 деление матриц, 40 ковариаций, 50 коэффициентов корреляции, 50 матричные операции, 39 обращение, 40 ранг, 51 сингулярное разложение, 54 меню, пользовательское, 97 метод, 138 array, 139 cell, 139 char, 139 struct, 139 uint8, 139 Рунге-Кутта, 107 модель перевод в дискретную форму, 249 перевод в непрерывную форму, 251 получение информации о, 255 О окно Filter Designer, 229 LTI Viewer, 264 Signal Browser, 225 Spectrum Viewer, 227 SPTool, 221 Simulink Library Browser, 278 командное, 14 оператор переключения, 76 управления, 1^-Tl условного перехода, 75 цикла, 77 определитель квадратной матрицы, 51 П пакет Control Toolbox, классы, 150, 235 Signal Processing Toolbox, 167 Simulink, 278 первичный преобразователь, 165 переменные зарезервированные, 19 полигармонические колебания, 169 полином, умножение и деление, 43 полоса пропускания, 197
Алфавитный указатель 509 построение графиков, 66, 67, 69, 71, 73 функция (продолжение) преобразование Фурье, 62 angle, 25 Р append, 252 argnames, 148 разложение asec, 21 Паде, 41 asech, 21 Тейлора, 41 asin, 20, 310 Холецкого, 52 asinh, 20 ранг матрицы, 51 atan, 20, 310 ряд Фурье, комплексный, 181 С свертка векторов, 43 atan2, 20, 310 atanh, 20 augstatc, 152 bar, 69 сигналы, формирование, 167 besselap, 200 сингулярные числа, 55 besself, 201 система besseli, 22 синтез 272-275 анализ, 256-263 besselj, 22 besselk, 22 автоматического управления, 272 случайный процесс, 179 спектральное разложение, 41 спектральный анализ, 181 спектрограмма процесса, 220 специальные графики, 69 статистический анализ, 181, 190 bessely, 22 beta, 22 betainc, 22 betaln, 22 bilinear, 202 butter, 201 c2d, 249 У care, 275 углы Эйлера, 407 угол cart2pol, 22 cart2sph, 22 крена, 407 рыскания, 407 cat, 148 ceil, 22 тангажа, 407 cell, 144 celldisp, 145 Ф cellplot, 145 фазовый спектр, 180 char, 148, 156, 157 файл-функция, 88-91 cheblap, 200 файл-сценарий, 92-99 cheblord, 199 фигура, 66 cheb2ord, 199 фильтр, 166 chebyl, 201 аналоговый, 196 chirp, 172 аппроксимация, 199 class, 147 линейный стационарный, 173 colon, 159 проектирование, 192 conj, 25 создание, 166 connect, 252 формы представления, 192 cos, 20, 310 фильтрация, двойная 178 cosh, 20, 310 форматы чисел, 17 cot, 21 форма coth, 21 Шура, 55 cross, 35, 381 Коши, 86 esc, 21 функция csch, 21 abs, 21, 25 ctranspose, 159 acos, 20, 310 cumprod, 48 acosh, 20 cumsum, 48 acot, 21 d2, 251 acoth, 21 damp, 152, 262 aese, 21 dare, 275 acsch, 21 diff, 48
510 Алфавитный указатель функция (продолжение) diric, 172 display, 148, 157-159 dlyap, 275 double, 139-142, 161 dss, 243, 248 ellip, 201 ellipj, 23 ellipke, 23 ellipord, 199 eps, 19 eq, 159 erf, 23 erfc, 23 erfcx, 23 erfinv, 23 estim, 275 exp, 21, 36, 310 expint, 23 expm, 41 expml, 41 expm2, 41 expm3, 41 feedback, 252 feval, 110, 148, 150 feval/, 107 fft, 62; 64 fftshift, 64 fieldnames, 143 figure, 74 filt, 248 filtfilt, 178 find, 139 fircl, 207 fix, 22 floor, 22 formula, 148 fplot 85 freqs, 174 freqz, 212 fresp, 211 gamma, 22 gammainc, 22 gammain, 22 gauspuls, 168 gcd, 23 ge, 159 gram, 262 grid, 67 gt, 159 hist, 70 horzcat, 148, 159, 252 hypot, 311 ifft, 63 imag, 25, 139 inline, 147 interpl, 60 функция (продолжение) inv, 252 isa, 155 keyboard, 93, 95 1cm, 23 Idivide, 158 le, 159 legendre 23 length, 79, 139 log, 21, 310 loglO, 21, 310 log2, 23 loglog 72, 73 lower, 139 lp2bp, 200 Iqgreg, 275 It, 158 Iti, 147, 153 lyap, 275 max, 48 maxflat, 214 mdlDenvatives, 361 mdlGetTimeOfNextVarHit, 361 mdllnitializeSizes, 361 mdl Outputs, 361 mdlTerminate, 361 mdlUpdate, 361 mean, 48 menu, 95, 97 min, 48 minus, 158, 161 midi vide, 158 mod, 311 mpower, 158 mrdivide, 158, 161 mtimes, 158, 161, 252 nargin, 148 nargout, 148 ndims, 139 num2str, 94, 141 ode23, 83, 111, 354 ode45, 85 111, 113, 114 odeset, 84 otherwise, 76 parallel, 252 permute, 139 plot, 66 73, 101 plus, 158, 159 po!2cart, 22 pole, 261 poly, 44 poly2rc, 196 polyder, 45 polyeig, 58 polyfit, 59 polyval, 44, 72 polyvalm 58
Алфавитный указатель 511 функция (продолжение) функция (продолжение) pow, 310 subscribe, 80 pow2, 23 subsindex, 159 power, 158 subsref, 159 prod, 48 sum, 48 psd, 190 sym, 147 pulstran, 170 tan, 20, 310 pzmap 262 tanh, 20, 310 quad, 83 text, 104 randn, 70, 179 tf, 147, 241, 248 rat, 23 tf21atc, 195 rc2poly, 196 times, 158 rdivide, 158 title, 68 real, 25, 139 transpose, 139, 159 reciprocal, 310 trapz, 48 rem, 22, 311 tripuls, 168 reshape, 139 uminus, 158 residuez, 194 uplus, 158 rlocus, 262 vectorize, 148, 149 roots, 157, 162 vertcat, 148, 159, 252 round, 22 xlabel, 68 sawtooth, 170 у label, 68 sec, 20 sech, 20 yulewalk, 204 zp2sos, 196 semilogx, 71, 72, 73 zp2ss, 196 semilogy, 71, 73, 101 zpk, 147, 242, 248 series, 252 zpkdata, 262 set, 153, 248 Дирихле, 172 sign, 22 затухания, 197 sim, 359 комплексного аргумента, 24 simset, 359 линейной алгебры, 50 sin, 20, 36, 310 математические, 20 sine, 169 специальные, 22 sinh, 20, 310 формирующие векторы и матрицы, 28 size, 48, 79, 139, 256 функций, 83, 85 sort, 48 Фурье-изображение, 62, 183 speegram, 220 sph2cart, 22 spnntf, 93 ц циклы, 96 sqrt, 21, 25, 310 цифровой анализ данных наблюдений, 61 square, 170, 310 ч ss, 147, 248 ss2tf, 194 частота std, 48 Найквиста, 64 stem, 69 среза, 197 str2num, 141 частотный спектр, 180 stremp, 139 ш struct, 138, 142, 147 strveat, 140 subindex, 139 шум первичного преобразователя, 165 шумы измерителя, 166 subplot, 73, 101, 102 э subsasgn, 159 экстраполятор, 166
АНТИВИРУС ИГОРЯ ДАНИЛОВА DF.WEI www.drweb.ru mi iiiiiiii min Юрий Лазарев МОДЕЛИРОВАНИЕ ПРОЦЕССОВ И СИСТЕМ в MATLAB УЧЕБНЫЙ КУРС £ Эта книга содержит весь необходимый материал и примеры, которые помогут вам освоить систему MATLAB. Вы изучите работу в режиме научного калькулятора и программирование в среде MATLAB, применение системы для создания документации и многие другие полезные темы. Большая часть книги посвящена моделированию физических процессов и технических систем. Рассмотрены цифровая обработка сигналов, моделирование линейных стационарных систем, аэрокосмических объектов и электроэнергетических систем, а также моделирование машин и механизмов. В рамках этих тем подробно описаны пакеты Signal Processing Tools, Control Toolbox и Simulink с дополнительными библиотеками Aerospace, SimPowerSystems, SimMechanics. ISBN 5-469-00600-X Посетите веб-сайты издательств www.bhv.kiev.uawww.piter.com С^ППТЕР' WWW.PITER.COM