Серия «Библиотека
профессионала»
В. П. Дьяконов
M A T L A B 6 . 5 S P 1 / 7+ S i m u l i n k 5 / 6
Основы применения
Москва СОЛОН-Пресс 2005
УДК 621.396.218 ББК 32.884.1 Д93 В. П. Дьяконов Д93 MATLAB 6.5 SP1/7 + Simulink 5/6®. Основы применения. Серия «Библиотека профессионала».— М.: СОЛОН-Пресс, 2005. — 800 с : ил. ISBN 5-98003-181-2 Первый том трехтомной справочной монографии впервые описывает две новейшие версии мощной матричной системы MATLAB (6.5 Service Pack 1 и 7.0) и ее главного расширения Simulink (версии 5 и 6), выполняющего блочное ситуационное моделирование. Эти, появившиеся в 2003/2004 гг., системы лидируют в численных расчетах и в математическом, блочном имитационном и ситуационном визуально-ориентированном моделировании различных систем и устройств. Для них характерна высочайшая степень визуализации результатов работы. Служат мощной операционной средой для применения и разработки сотен пакетов расширения по новейшим направлениям науки и техники. Состав трехтомника: 1. MATLAB 6.5 SP1 + Simulink 5 и MATLAB 7 + Simulink 6. Основы применения; 2. MATLAB 6.5 SP1 + Simulink 5 и MATLAB 7 + Simulink 6 в математике и математическом моделировании; 3. MATLAB 6.5 SP1 + Simulink 5 и MATLAB 7 + Simulink 6. Обработка сигналов и изображений. Для инженеров, научных работников, студентов и преподавателей университетов и вузов. Книги подготовлены при поддержке разработчика систем — корпорации Math Works.
КНИГА - ПОЧТОЙ Книги издательства «СОЛОН-Пресс» можно заказать наложенным платежом по фиксированной цене. Оформить заказ можно одним из двух способов: 1. послать открытку или письмо по адресу: 123242, Москва, а/я 20; 2. передать заказ по электронной почте на адрес:
[email protected]. Бесплатно высылается каталог издательства по почте. При оформлении заказа следует правильно и полностью указать адрес, по которому должны быть высланы книги, а также фамилию, имя и отчество получателя. Желательно указать допол- | нительно свой телефон и адрес электронной почты. Через Интернет вы можете в любое время получить свежий каталог издательства «СОЛОН-Пресс». Для этого надо послать пустое письмо на робот-автоответчик по адресу:
[email protected].
Получать информацию о новых книгах нашего издательства вы сможете, подписавшись на рассылку новостей по электронной почте. Для этого пошлите письмо по адресу:
[email protected]. В теле письма должно быть написано слово SUBSCRIBE.
По вопросам приобретения обращаться: ООО «Альянс-книга» Тел: (095) 258-91-94, 258-91-95, www.abook.ru ISBN 5-98003-181-2
© Макет и обложка «СОЛОН-Пресс», 2005 © В. П. Дьяконов, 2005
Введение В наши дни компьютерная математика получила должную известность и интенсивно развивается как передовое научное направление на стыке математики и информатики [1]. Программируемые микрокалькуляторы [2j, а затем уже и персональные компьютеры [3, 4] давно применяются для математических расчетов. Для подготовки программ таких расчетов еще совсем недавно использовались различные универсальные языки программирования [5—9]. Но уже в начале 90-х годов на смену им пришли специализированные системы компьютерной математики (СКМ) [10—12]. Наибольшую известность получили системы Eureka [13J, Mercury [14], Mathcad [15—23], Derive [24-27], Mathematica 2/3/4 |28—30], Maple V R3/R4/R5 и Maple 6/7/8/9 [32—36] и др. Ежегодно появляются их новые версии. Среди ряда современных СКМ особо выделяется математическая система MATLABM. Она прошла многолетний путь развития от узкоспециализированного матричного программного модуля, используемого только па больших ЭВМ, до универсальной интегрированной СКМ, ориентированной на массовые персональные компьютеры класса IBM PC и Macintosh и рабочие станции UNIX. Система имеют мощные средства диалога, графики и комплексной визуализации [37—59]. Система MATLAB предлагается разработчиками (корпорация MathWorks, Inc.) как лидирующий на рынке, в первую очередь на предприятиях военно-промышленного комплекса, в энергетике, в аэрокосмической отрасли и в автомобилестроении, язык программирования высокого уровня для технических вычислений, расширяемый большим числом пакетов прикладных программ — расширений. Она вобрала в себя не только передовой опыт развития и компьютерной реализации численных методов, накопленный за последние три десятилетия, но и весь опыт становления математики за всю историю человечества. Более миллиона легально зарегистрированных пользователей уже применяют эту систему. Ее охотно используют в своих научных проектах ведущие университеты и научные центры мира. Популярности системы MATLAB способствует се матричная ориентация и мощное главное расширение Simulink. MATLAB и Simulink поставляются в виде единого программного комплекса и уже стали двумя сторонами «медали» в лучшем смысле этого понятия. Они предоставляют пользователю удобные и простые средства, в том числе визуального объектно-ориентированного программирования, для моделирования линейных и нелинейных динамических систем, а также множество других пакетов расширения системы [39, 41—48, 52—57]. Некоторые из них являются наиболее доступными и эффективными инструментальными средствами для развития и применения новых направлений науки и техники, таких как нечеткая логика, нейронные сети, средства анализа и обработки сигналов и изображений (включая новейшую вейвлет-технологию), средства анализа, идентификации и моделирования систем и т. д. Однако все это в первую очередь достигается уникальными возможностями базовой матричной системы MATLAB и ее основным расширением Simulink. Структура комплекса MATLAB + Simulink помимо основы — системы MATLAB и главного расширения Simulink содержит обширные группы пакетов расширения (рис. 0.1). Это инструментальный ящик Toolbox с числом пакетов расширения приближающимся к сотне, и группа пакетов расширения Blockset, расширяющая возможности системы визуально-ориентированного блочного моделирования динамических систем Simulink.
Введение
MATLAB
Application Deveo l pment Toosl Toolboxes ' I: Data Access Toosl Student
SIMUONKl
Stateflow Blocksets | Code Generation
Рис. 0.1. Структура системы MATLAB + Simulink К сожалению, в России мало публикаций по новейшим версиям системы MATLAB и особенно по ее расширению Simulink. Помимо обзоров [10—12] и первой книги по этой системе [37], опубликованной еще в 1993 году, в течение ряда лет серьезных изданий, посвященных MATLAB, практически не было. Лишь после 1997 г. появился ряд книг по системам MATLAB до версий MATLAB 6.5, включая [38—59]. За рубежом этим версиям и их применению посвящено уже свыше 800 книг (их список можно найти на Web-узле фирмы MathWorks, Inc., разработавшей эту систему). Однако на момент подготовки данной книги по новым реализациям MATLAB 6.5 SP1 и MATLAB 7 и Simulink 6 книг не было выпущено вообще. Среди всех книг по системе MATLAB лишь в одной книге [89] из трехтомника 189—91] дано одновременно описание самой системы MATLAB 6.* и ее главного расширения — Simulink 4/5 (при этом Simulink 5 описан обзорно в плане отличий от Simulink 4). Между тем именно приложение Simulink 5/6 подверглось кардинальной переработке в сравнении с предшествующей версией Simulink 4. Особенно это относится к Simulink 5.1, который по возможностям и составу средств ближе к Simulink 6, чем к Simulink 5.O. Это обстоятельство учтено в данной книге. Настоящая книга является первым томом нового трехтомника автора, посвященного описанию применений новейших версий систем MATLAB 6.5 SP1 + Simulink 5 и MATLAB 7 + Simulink 6 с пакетами их расширения. Состав трехтомника следующий: 1. MATLAB 6.5 SP1 + Simulink 5 и MATLAB 7 + Simulink 6. Основы применения. Содержит полное описание указанных в заголовке тома систем и краткий обзор пакетов расширения. 2. MATLAB 6.5 SP1 + Simulink 5 и MATLAB 7 + Simulink 6 в математике и математическом моделировании. Содержит вводный курс по системе MATLAB 6.5 SP1 4- Simulink 5 и описание пакетов расширения, относящихся к математическим расчетам и математическому модулированию. 3. MATLAB 6.5 SP1 + Simulink 5 и MATLAB 7 + Simulink 6. Обработка сигналов и изображений. Содержит вводный курс по системе MATLAB 7 + Simulink 6 и описание пакетов расширений по обработке сигналов и изображений.
Введение Такое построение трехтомника делает каждый том вполне самостоятельной книгой и в то же время наиболее полно удовлетворяет интересы тех читателей, которые хотели бы иметь достаточно полное представление о новых версиях систем MATLAB + Simulink — уникальных по своим математическим возможностям и обширным сферам применения в науке и технике. Первая книга имеет особо важное значение, поскольку в ней дано достаточно полное описание двух последних версий систем MATLAB + Simulink. Ее, как и весь трехтомник, удалось подготовить в крайне сжатые сроки благодаря заинтересованности корпорации MathWorks в быстром продвижении своих программных продуктов и поддержке планов автора по изданию книг по системе MATLAB этой корпорацией. Так, новейшие версии MATLAB 6.5 с сервисным пакетом SP1 и MATLAB 7 с множеством новых пакетов их расширения были предоставлены автору задолго до их появления на рынке. Это позволило детально изучить особенности новых версий и впервые, даже в мировой практике, подготовить серию книг по этим новейшим системам практически к сроку выхода их на мировой рынок. Данная книга, по аналогии с [89], описывает одновременно базовую систему MATLAB, но уже новейших версий MATLAB 6.5 SP1 и 7, и главного расширения Simulink 5 и 6. Основной материал данной книги основан на версии MATLAB 6.5 Service Pack 1 и полностью пригоден для новейшей версии MATLAB 7 + Simulink 6, особенности которой описаны отдельно. Такой подход оправдан целым рядом важных обстоятельств: • версия MATLAB 6.5 SP1 получила в России большое распространение, по своим возможностям она ближе к MATLAB 7.0, чем к предшествующей реализации MATLAB 6.5 (без SP 1); • она показала стабильную работу на ПК даже с операционной системой Windows 98, все еще широко применяемой у нас; • в России выпущен ряд CD-ROM, хотя и не самого благородного происхождения, но вполне работоспособных и содержащих доступ ко всем (!) пакетам расширения; • литературы по версии MATLAB 6.5 SP1, к моменту сдачи рукописи данной книги в издательство, не было. Версия MATLAB 7 + Simulink 6, конечно, очередное достижение корпорации MatWorks в продвижении своего программного продукта. Однако, применительно к нашим российским читателям, ее внедрение омрачается рядом весьма существенных обстоятельств: • эта версия у нас пока мало распространена, что не удивительно, поскольку на рынок она поступила только летом 2004 года; • из поставки MATLAB 7 + Simulink 6 исключен отдельный диск с документацией в формате PDF (она открыто выставлена на Интернет-сайте корпорации MathWorks, но скачивать с Интернета многомегабайтные файлы с общим объемом почти в 1 Гбайт мало кто из наших пользователей сможет); • работа с Windows 98 уже не поддерживается; • большинство новых средств MATLAB 7 + Simulink 6 положительно сказываются на внутренних характеристиках системы, например на скорости ее работы, но никак не на основах работы пользователя с системой и ее принципиальных математических возможностях;
Введение • многочисленные переименования некоторых пакетов расширения и чехарда с изменением их текущих версий способны запутать даже опытных пользователей; • для такого дорогого продукта, как MATLAB + Simulink легальная смена предшествующей версии на конечную явно экономически не оправдана. Все эти обстоятельства говорят о справедливости бытующего мнения — лучшей является не самая последняя версия программного продукта, а предшествующая ей. Тем не менее надо отметить, что возможности MATLAB 7 + Simulink 6 в данной книге описаны достаточно полно. Естественно, что эта книга базируется на обширном материале ранее изданных книг автора по системе MATLAB + Simulink [38—45, 89| и на весьма обширной фирменной документации [93—98 и др.], включая электронную документацию, любезно предоставленную корпорацией MathWorks на CD и через Интернет. Однако прямым переводом этой документации, объем которой многократно превосходит объем данной книги, последняя не является. В отличие от ряда предшествующих книг автора по системе MATLAB данная книга характеризуется: • совместным и взаимоувязанным полным описанием базовой системы MATLAB и ее основного расширения Simulink последней и предпоследней версий; • достаточно полным описанием всех компонентов системы MATLAB + Simulink, включая описание интерфейса, встроенных операторов и функций ядра системы, основ программирования, справки, инструментальных средств, демонстрационных примеров и пакетов расширения; • удобной (справочной) рубрикацией разделов, объединяющей и обобщающей возможности близких по назначению средств системы MATLAB; • полной переработкой глав, относящихся к пакету расширения Simulink 5/6; • достаточно полным описанием отличительных особенностей новейших версий MATLAB 6.5 SP 1/7.0 и Simulink 5/6; • описанием ряда новых функций систем MATLAB и особенно Simulink последних реализаций; • существенно расширенным описанием данных сложных типов, таких как многомерные массивы, массивы структур и ячеек; • описанием нового Мастера импорта данных; • описанием нового раздела по многомерной интерполяции; • значительным расширением описания дескрипторной графики; • существенно расширенным описанием анимационной графики; • существенно расширенным материалом по трехмерной графике; • большим числом примеров, особенно относящихся к электро- и радиотехническим расчетам; • введением новых материалов по визуализации сложных явлений, таких как струи полупрозрачных жидкостей и газов, электрические разряды, торнадо и др.; • отдельным разделом по поддержке средств Java и виртуальной Java-машины; • большим числом иллюстраций (их свыше 600); • подробной демонстрацией работы всех примеров в контексте их описания;
Предупреждения • расширенным описанием handle- и inline-функций в главе по программированию; • обзором новых пакетов расширения систем MATLAB; • существенно расширенным описанием пакета моделирования Simulink и новых средств его новейших реализации Simulink 5/6. Различные реализации системы MATLAB получили широкую известность у нас в России. Как это ни печально, известность пришла во многом благодаря появлению большого числа «пиратских» компакт-дисков, содержащих полные и вполне работоспособные копии MATLAB со всеми ее дорогостоящими пакетами расширения (но, естественно, без русскоязычной документации). Эта книга поможет читателям, вынужденным в силу ряда известных обстоятельств применять даже такие программные продукты. Автор надеется, что это поможет многим читателям со временем стать пользователями легальных версий системы MATLAB + Simulink. Она заменит многим пользователям, особенно системы MATLAB 7, ставшую дефицитной электронную документацию в формате PDF. Оглавление книги может служить подробным тематическим указателем'. Основные операторы и функции MATLAB 6.5 SP1/7 и средства Simulink 5/6 описаны настолько подробно, что книга может служить руководством пользователя по этим системам, справочником по их возможностям и даже самоучителем. В целом книга имеет вполне законченный характер и полезна всем, кто собирается изучать или уже использует новые реализации систем MATLAB 6.5 SP1/7.0 + Simulink 5/6. Она дает также достаточно полный обзор пакетов расширений системы MATLAB + Simulink, достаточный для оценки целесообразности их приобретения и инсталляции. Новая серия книг аналогична по замыслу книгам ранее изданной серии, посвященной предшествующим реализациям MATLAB 6/6.1/6.5 и Simulink 4/5 [89—91], но содержит существенно переработанное и дополненное описание более новых их реализаций — последних на момент подготовки этой серии.
Предупреждения В книгах, описывающих новейшие реализации сложных программных продуктов, к коим относится система MATLAB + Simulink, трудно полностью избежать опечаток и даже отдельных ошибок. Как говорится, «и на солнце есть пятна». Опытный читатель замечает такие «пятна» даже в фирменной документации — например, многие рисунки в такой документации, относящейся к только что вышедшей на рынок версии MATLAB 7 + Simulink 6, явно относятся к предшествующим реализациям. Это видно по мелким деталям интерфейса. И это при том, что в создании этой огромной по размерам фирменной документации участвует множество людей, работающих в условиях куда более комфортных и намного лучше оплачиваемых, чем те, что характерны для авторов российских книг. Целью автора всегда была подготовка книг по новейшим реализациям системы MATLAB в кратчайшие сроки. В таких условиях отдельные неточности и описки почти неизбежны. Автор считает нужным предупредить читателей об этом, хотя он сам и издательство «Солон-Пресс» сделали все возможное, чтобы свести ущерб от спешки в подготовке книг к разумному минимуму.
7
Введение Автор считает нужным отметить, что в данной книге имеется много материала из ранее изданных книг автора. Это естественная практика публикации серьезных справочников и описаний новых версий программных систем. Приобретающий новый холодильник или телевизор покупатель вряд ли согласится купить вместо целого устройства лишь его отдельные новые части, отличные от примененных в предыдущих моделях. В наше время книга тот же товар и вряд ли стоит полагать, что вместо серьезного справочника по той или иной системе покупатель предпочтет брошюрку с описанием только отличий новой версии программной системы от предыдущих версий. Работа с такими мощными математическими системами, как MATLAB 6.5 SP1/7 и Simulink 5/6, несомненно, требует от читателя знания основ математики и теории и техники математического моделирования. Без этого невозможно гарантировать правильное применение используемых в этих системах методов и получение корректных результатов. В связи с этим следует отметить, что данная книга представляет собой справочную монографию по конкретной СКМ MATLAB и ее расширению Simulink, а вовсе не справочник по математике или численным расчетам. Нужные сведения по ним можно найти в специальной литературе, например [60—75]. Мы вынуждены предупредить читателя, что автор и издательство не несут никакой ответственности за неудачи читателей в освоении такой сложной и мощной системы, как MATLAB с ее расширениями, и за моральный или даже экономический ущерб, который может иметь место вследствие ошибок и неудачного выбора математической системы для обучения или ее применения при решении конкретных задач пользователя. Сказанное ни в коей мере не означает, что в данной книге или в системах MATLAB 6.5 SP1/7.0 + Simulink 5/6 заведомо имеются серьезные ошибки и недочеты. Просто такое предупреждение отвечает юридическим нормам современного права в отношении сложных программных продуктов и сопровождающей их документации. Консультаций по применению описанных в книге средств в учебном процессе автор не дает, поскольку это почетный долг преподавателей, ведущих занятия со студентами, и вмешиваться в их работу со стороны автора просто неэтично. Консультации по системе MATLAB читатель может получить на сайтах www.matlab.ru и www.exponenta.ru.
Благодарности и адреса для связи Автор выражает благодарность представителям фирмы MathWotks Courtney Esposito и Naomi Fernandes. Благодаря им подготовка автором книг по системе MATLAB и ее расширениям была включена в планы поддержки корпорацией MathWorks изданий книг по этой системе в разных странах мира и была обеспечена легальными программными средствами и обширной документацией по ним. Автор благодарит и представителя компании SoftLine Бориса Манзона за оперативную помощь в получении этих средств и полезные консультации. Доктору технических наук, профессору Владимиру Круглову и кандидату физико-математических наук, доценту Роману Кристаллинскому автор выражает признательность за постоянный обмен мнениями и полезные замечания по его книгам. Автор благодарит также генерального директора ЗАО «Смоленский Теле-
Благодарности и адреса для связи порт» (www.keytown.com) Григория Рухамина за предоставление услуг спутникового Интернета в ходе работы над книгой, что позволило посредством прямой оперативной связи с сайтом фирмы MathWorks, Inc. быть в курсе обновлений системы MATLAB и использовать самую свежую информацию. С автором можно связаться по электронной почте (
[email protected]), можно также посетить его домашнюю страницу в Интернете (www. keytown, com/users/dyak). Автор заранее выражает признательность всем читателям, которые готовы сообщить свое мнение о данной книге и поделиться соображениями по ее улучшению. Кроме электронной почты, замечания можно направлять по следующему адресу: 214000, г. Смоленск, ул. Пржевальского, 4, СГПУ. Вы можете отправлять свои письма и по адресу издательства «Солон-Пресс», выпустившего книгу. Связаться с фирмой MathWorks вы можете, посетив сайт www.mathworks.com. Ее официальные почтовые реквизиты следующие: The MathWorks, Inc. 3 Apple Hill Drive Natick, MA, 01760-2098 USA Tel: 508-647-7000 Fax: 508-647-7101 E-mail:
[email protected] С официальным дилером фирмы в России — корпорацией SoftLine — можно связаться через сайт http://www.softline.ru. Полезные материалы по системе MATLAB можно найти на сайтах http://www.exponenta.ru и www.matlab.ru.
Глава 1 . Начало работы с MATLAB 1 . 1 . Н а з н а ч е н и е и о с о б е н н о с т и с и с т е м MATLAB 1 . 1 . 1 . Н а з н а ч е н и е с и с т е м ы MATLAB MATLAB — одна из старейших, тщательно проработанных и проверенных временем систем автоматизации математических расчетов [1—18], построенная на расширенном представлении и применении матричных операций [19—22]. Это нашло отражение в названии системы — MATrix LABoratory — матричная лаборатория. Матрицы широко применяются в сложных математических расчетах, например, при решении задач линейной алгебры и математического моделирования статических и динамических систем и объектов [23—25]. Они являются основой автоматического составления и решения уравнений состояния динамических объектов и систем. Примером программы, выполняющей это, может служить расширение MATLAB — Simulink |4, 7, 11]. Оно существенно повышает интерес к системе MATLAB, вобравшей в себя лучшие достижения в области быстрого решения матричных задач за послевоенное время. MATLAB поставляется как комплекс MATLAB + Simulink + Toolbox + Blockset, где разделами системы Toolbox и Blockset корпорация MathWorks называет пакеты расширения для систем MATLAB и Simulink, соответственно. Одной из основных задач системы MATLAB всегда было предоставление пользователям мощного языка программирования, ориентированного на технические и математические расчеты и способного превзойти возможности традиционных языков программирования, которые многие годы использовались для реализации численных методов. При этом особое внимание уделялось как повышению скорости вычислений, так и адаптации системы к решению самых разнообразных задач пользователей. Важными достоинствами системы являются ее открытость и расширяемость. Большинство команд и функций системы реализованы в виде m-файлов текстового формата (с расширением .т) и файлов на языке Си, причем все файлы доступны для модификации. Пользователю дана возможность создавать не только отдельные файлы, но и библиотеки файлов для реализации специфических задач. Такие файлы можно готовить как в простом и удобном редакторе m-файлов системы MATLAB, так и в любом другом текстовом редакторе — например Microsoft Word 97/2000/XP. Более того, такие файлы можно перенести с помощью буфера в командную строку MATLAB и тут же исполнить. 1.1.2. О с о б е н н о с т и в е р с и и MATLAB 6.5 + Service Pack 1.0 В 2002 году появилась версия MATLAB 6.5 (реализация R13). Ожидалось, что к лету 2003 года ко дню независимости США появится новейшая реализация R14. Но вместо нее появилась промежуточная версия MATLAB 6.5 + Service Pack 1.0. В ней устранено множество недоделок прежней версии, а главное — существенно переработаны многие пакеты расширения. Поразительная легкость модификации системы и возможность ее адаптации к решению самых различных задач науки и техники привели к созданию десятков К)
J.I. Назначение и особенности систем MATLAB пакетов прикладных программ, вошедших в инструментальный ящик системы Toolbox и намного расширивших сферы применения системы. Это особенно характерно для новых реализаций системы. Некоторые из пакетов расширения, например, Simulink (моделирование динамических систем и устройств, заданных в виде системы блоков), Notebook (интеграция с текстовым процессором Word и подготовка «живых» электронных книг) и Symbolic (символьные вычисления с применением ядра системы Maple), настолько органично интегрировались с системой MATLAB, что стали ее составными частями. О масштабности доработки системы MATLAB 6.5.1 + Service Pack 1 говорит тот факт, что в ходе ее были написаны заново или существенно переработаны более 100 000 блоков исходного кода системы. Исчезли ранее известные проблемы со шрифтами, в том числе кириллическими, заметно повысилась стабильность работы, исчезло подвисание Windows при выключении после сеанса работы с MATLAB. К новым возможностям системы MATLAB 6.5.1 + Service Pack 1 относится: • улучшенная поддержка динамических библиотек — MATLAB Interface to Generic DDLs; • поддержка операторов отношения, таких как <, >, <=, >—, ~= и = = , для новых типов данных int64 и utit 64; • поддержка считывания файлов формата HDF5 (Hierarchical Data Format, Version 5), предложенного Национальным Центром суперкомпьютерных приложений (NCSA); • расширенная поддержка файлов формата TIF, в частности запись и считывание L*a*b цветового пространства TIF-файлов; • устранение множества недоработок предшествующей версии; • обеспечение работы функции sqrt с комплексными данными; • улучшение работы с СОМ-интерфейсом; • существенная переработка более чем полутора десятков пакетов расширения системы MATLAB, включая Simulink; • поддержка получения из Интернета новых реализаций пакетов расширения; • расширенная поддержка компьютерных платформ (см. ниже). Версия MATLAB 6.5.1 + Service Pack 1 может работать на большом числе компьютерных платформ: • • • • • • • • • • • • •
Windows 98 (оригинальная и second edition); Windows ME; Windows 2000 (Service Pack 1, 2, or 3); Windows NT 4.0 (Service Pack 5, 6 или 6а); Windows XP (Service Pack 1); Linux ix86 2.2.x or 2.4.x, glibc (Iibc6) 2.1.2, glibc (Iibc6) 2.2.5 (рекомендуется); Sun Solans 2.6, 2.7, 2.8 и 2.9; Alpha TRU64; . UNIX 4.0f, 4.0g, 5.0, 5.1, or 5.1a; HP-UX 10.20, 11.0 или Hi; SGI IRIX/IR1X64 6.5.8 - 6.5.12, 6.5.15f; IBM AIX 4.3.3 or 5.1; Macintosh OS X 10.1.5 и 10.2.
Глава 1. Начало работы с MATLAB Хотя в этой книге описаны примеры только для реализации MATLAB 6.5.1 + Service Pack 1 под Windows, большая часть материала книги полностью пригодна и для реализаций на других компьютерных платформах. 1.1.3. О с о б е н н о с т и в е р с и и MATLAB 7 + Simulink 6 Новая версия MATLAB 7 содержит новые средства программирования, поддержку целочисленной арифметики и арифметики с одиночной точностью, возможность работать с большими объемами данных, а также средства повышения производительности. Кроме того, MATLAB Compiler 4 полностью поддерживает язык MATLAB, накладывая значительно меньше ограничений на возможность компиляции приложений. Для новой версии MATLAB 7 было разработано 12 новых пакетов расширения: • Bioinformatics Toolbox 1.1; • Embedded Target for Tl C2000(tm) DSP; • Fixed-Point Toolbox; • Genetic Algorithm and Direct Search Toolbox 1.0.1; • Link for ModelSim; • Simulink Control Design; • Simulink Parameter Estimation; • Simulink Verification and Validation; • Filter Design HDL Coder; • OPC Toolbox; • RF Blockset; • RF Toolbox. В состав MATLAB 7 + Simulink 6 вошло также около шести десятков пакетов расширения: • • • • • • • • • • • • • • • • •
Communications Blockset 3; Communications Toolbox 3; Database Toolbox 3; Filter Design Toolbox 3; Financial Derivatives Toolbox 3; Instrument Control Toolbox 2; Mapping Toolbox 2; MATLAB Compiler 4; MATLAB Report Generator 2; Model Predictive Control Toolbox 2; Nonlinear Control Design Blockset; Optimization Toolbox 3; Real-Time Workshop 6; Real-Time Workshop Embedded Coder 4; Signal Processing Blockset 6 (формальное имя DSP Blockset); Simulink Fixed Point 5 (формальное имя Fixed-Point Blockset); Simulink Response Optimization 2 (формальное имя Nonlinear Control Design Blockset); • Stateflow 6;
12
/./. Назначение и особенности систем MATLAB • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
Stateflow Coder 6; Statistics Toolbox 5; System Identification Toolbox 6.1; Virtual Reality Toolbox 4; Wavelet Toolbox 3; Aerospace Blockset 1.6; Curve Fitting Toolbox 1.1.1; Data Acquisition Toolbox 2.3; Datafeed Toolbox 1.5; Dials & Gauges Blockset 1.2; Embedded Target for Infineon C166 Microcontrollers 1.1; Embedded Target for Motorola HC12 1.1; Embedded Target for OSEK/VDX 1.1; Excel Link 2.2; Extended Symbolic Math Toolbox 3.1; Financial Time Series Toolbox 2.1; Financial Toolbox 2.4; Fixed-Income Toolbox 1.0.1; Fuzzy Logic Toolbox 2.1.3; GARCH Toolbox 2.0.1; Image Acquisition Toolbox 1.5; LMI Control Toolbox 1.0.1; MATLAB Link for Code Composer Studio® 1.3.1; MATLAB Builder for COM 1.1 (формальное имя MATLAB COM Builder); MATLAB Builder for Excel 1.2 (формальное имя MATLAB Excel Builder); Model-Based Calibration Toolbox 2.1; Ми-Analysis and Synthesis Toolbox 3.0.8; Neural Network Toolbox 4.0.3; Partial Differential Equation Toolbox 1.0.5; Real-Time Windows Target 2.5; Robust Control Toolbox 2.0.10; Signal Processing Toolbox 6.2; SimMechanics 2.2; SimPowerSystems 3.1; Simulink Accelerator 6; Symbolic Math Toolbox 3.1; xPC Target 2.5; xPC Target Embedded Option 2.5; xPC Target Box 2.5.
Существенно переработаны 27 пакетов расширения: • • • • •
Communications Blockset; Communications Toolbox; Database Toolbox; DSP Blockset; (see Signal Processing Blockset);
13
Глава I. Начало работы с MATLAB • Embedded Target for Motorola MPC555; • Embedded Target for TI C6000 DSP; • Filter Design Toolbox; • Financial Derivatives Toolbox; • Fixed-Point Blockset; • (see Simulink Fixed Point); • Instrument Control Toolbox; • Mapping Toolbox; • MATLAB Compiler; • MATLAB Report Generator; • Model Predictive Control Toolbox; • Nonlinear Control Design Blockset; • (see Simulink Response Optimization); • Optimization Toolbox; • Real-Time Workshop; • Real-Time Workshop Embedded Coder; • Signal Processing Blockset; • Simulink Fixed Point; • Simulink Report Generator; • Simulink Response Optimization; • Stateflow; • Stateflow Coder; • Statistics Toolbox; • System Identification Toolbox; • Virtual Reality Toolbox; • Wavelet Toolbox. Кроме того, в MATLAB 7: • улучшена работа с множеством документов; • усовершенствованы редактор.массивов и браузер рабочею пространства; • расширены возможности редактора М-файлов, теперь в нем можно создавать программы не только в М-кодах, но и на языках HTML, C/C++ и Java; • улучшены возможности программирования и отладки программ; • введена целочисленная арифметика для больших целочисленных множеств; • улучшена арифметика одиночной точности для решения таких задач, как линейная алгебра, быстрое преобразование Фурье и фильтрация для больших массивов данных с числами одиночной точности; • введены геометрические средства на основе Qhull 2003.1, дающие повышенный контроль над геометрическими алгоритмами отбора; • применена улучшенная функция linsolve для ускоренного решения систем линейных уравнений с контролем структуры матрицы коэффициентов; • улучшен решатель обыкновенных дифференциальных уравнений ODE, позволяющий решать функциональные и импликативные дифференциальные уравнения и задачи на многоточечные граничные условия; 14
/./. Назначение и особенности систем MATLAB • введен новый графический интерфейс для интерактивного создания и редактирования графиков с вводом М-кодов; • улучшена генерация М-кодов для графических построений, осуществляемых пользователем или заданных программой; • улучшены средства для аннотации и пользовательской дорисовки графиков; • введена интерфейсная панель для контроля над элементами ActiveX; • введена улучшенная поддержка для рендеринга Handle-графики и выражений, использующих полный ТеХ- и LaTeX-интерфейс; • файловый I/O и внешний интерфейс API • опции компрессии МАТ-файлов, уменьшающие нужное дисковое пространство при записи больших массивов данных; • введен ряд Java-функций для добавления, уничтожения и перезагрузки динамических Java-классов с рестартом системы MATLAB. Среда разработки MATLAB 7 также существенно улучшена. В частности, обеспечены следующие возможности: • обновленный рабочий стол позволяет легко управлять окнами документов, пристыковывать графические окна, сохранять настройки рабочего стола, создавать ярлыки для часто используемых команд; • переработанные редактор массивов (Array Editor) и браузер рабочего пространства (Workspace Browser) облегчают просмотр, редактирование и визуализацию значений переменных; • новое средство Directory Reports позволяет сканировать М-файлы для анализа эффективности кода и взаимозависимостей в нем; • новое средство M-Lint Code Checker анализирует код и предлагает модификации, направленные на повышение производительности и облегчение поддержки; • добавлена возможность запускать на выполнение отдельные фрагменты М-кода прямо из редактора; • автоматизировано оформление М-кода в виде документов HTML, Word и LaTeX. В рамках поддержки платформы Windows в новую реализацию системы введены: • ЛТ-ускоритель поддерживающий все числовые типы данных и вызовы функций; • ЛТ-ускоритель генерирующий ММХ-инструкции для целочисленной арифметики; • функции быстрого преобразования Фурье (FFT), использующие новую версию библиотеки FFTW3; • ускорены загрузка и сохранение текстовых файлов; • обеспечена поддержка 3GB switch под Windows XP, что дает для MATLAB дополнительный 1 Гбайт памяти данных. В части совершенствования внешних интерфейсов и доступа к данным: • введены новые функции файлового ввода/вывода для чтения очень больших текстовых файлов произвольного формата и записи файлов в форматах Excel и HDF5;
а 1. Начало работы с MAT LAB • добавлена возможность сжатия данных в МАТ-файлах, позволяющая сохранять больше данных при меньшем требуемом объеме дискового пространства; • введена новая функция javaaddpath, позволяющая позволяет динамически добавлять, убирать и перезагружать классы Java без перезапуска MATLAB; • введена поддержка custom-интерфейсов СОМ, серверных событий и сценариев Visual Basic; • реализован доступ к Web-службам с помощью протокола SOAP (Simple Object Access Protocol); • добавлен FTP-объект для подключения к FTP-серверам и выполнения удаленных файловых операций; • введена поддержка кодировки Unicode, обеспечивающая сохранение корректности символьных данных в МАТ-файлах при смене системной кодовой страницы. Отличия Simulink 5.1 и Simulink б от предшествующих реализаций (даже Simulink 5.0) весьма существенны, но они будут описаны в Главах 12—19, посвященных этому расширению. Столь внушительный список новинок и улучшений в системе MATLAB 7 + Simulink 6 свидетельствует о том, что мы имеем действительно новую реализацию системы. В то же время, учитывая дороговизну систем MATLAB + Simulink, совершенно очевидно, что значительная часть пользователей будет по-прежнему применять более ранние версии системы. При этом различия между MATLAB 7 + Simulink 6 и предшествующей версией MATLAB 6.5 SP1 + Simulink 5 внешне достаточно малы и лишь достаточно опытный пользователь в состоянии их заметить. Исключением являются лишь новые средства графики MATLAB 7, которые будут детально описаны. В данной книге описание составлено так, что его большая часть относится к версиям систем MATLAB 7 + Simulink 6 и MATLAB 6.5 SP1 + Simulink 5. Их явные различия отмечаются отдельно. 1.1.4. И н т е г р а ц и я с д р у г и м и п р о г р а м м н ы м и с и с т е м а м и С системой MATLAB могут интегрироваться такие популярные математические системы, как Mathcad, Maple и Mathematica. Есть тенденция и к объединению математических систем с современными текстовыми процессорами класса MS Word. Так, средство последних версий MATLAB — Notebook позволяет готовить документы в текстовом процессоре Word 95/97/2000/XP со вставками в виде документов MATLAB и результатов вычислений, представленных в численном, табличном или графическом виде. Таким образом, становится возможной подготовка «живых» электронных книг, в которых демонстрируемые примеры могут быть оперативно изменены. Так, вы можете менять условия задач и тут же наблюдать изменение результатов их решения. В MATLAB задачи расширения системы решаются с помощью специализированных пакетов, входящих в инструментальный ящик Toolbox. Многие из них содержат специальные средства для интеграции с другими программами, поддержки объектно-ориентированного и визуального программирования, для генерации различных приложений. В состав системы MATLAB входит ядро одной из самых мощных, популярных и хорошо апробированных систем символьной математики (компьютерной алгебры) Maple 8. Оно используется пакетами расширения Symbo16
/./. Назначение и особенности систем MATLAB lie Math Toolbox и Extended Symbolic Math Toolbox, благодаря которым в среде MATLAB стали доступны принципиально новые возможности символьных и аналитических вычислений. Новые свойства системе MATLAB придала ее интеграция с программной системой Simulink, созданной для моделирования блочно заданных динамических систем и устройств. Базируясь на принципах визуально-ориентированного программирования, Simulink позволяет выполнять моделирование сложных устройств с высокой степенью достоверности и прекрасными средствами представления результатов. Помимо естественной интеграции с пакетами расширения Symbolic Math и Simulink, MATLAB интегрируется с десятками мощных пакетов расширения. В свою очередь, многие другие математические системы, например Mathcad и Maple, допускают установление объектных и динамических связей с системой MATLAB, что позволяет использовать в них эффективные средства MATLAB для работы с матрицами. Эта прогрессивная тенденция интегрирования компьютерных математических систем, несомненно, будет продолжена. 1.1.5. Ориентация на матричные операции Напомним, что двумерный массив чисел или математических выражений принято называть матрицей. А одномерный массив называют вектором. Примеры векторов и матриц даны ниже: 3 4
Вектор из 4 элементов
2 3 4 5 6 7 8
Матрица размера 3 x 4
I 2 I
9 8 7 6 а
а + Ь с + Ь/с
X
У* 2
I
X
Z
3
Матрица с элементами разного типа
Векторы и матрицы характеризуются размерностью и размером. Размерность определяет структурную организацию массивов в виде одной строки или столбца (размерность I), страницы (размерность 2), куба (размерность 3) и т. д. Так что вектор является одномерным массивом, а матрица представляет собой двумерный массив с размерностью 2. MATLAB допускает задание и использование многомерных массивов, но в этой главе мы ограничимся только одномерными и двумерными массивами — векторами и матрицами. Размер вектора — это число его элементов, а размер матрицы определяется числом ее строк т и столбцов п. Обычно размер матрицы указывают как т * п. Матрица называется квадратной, если т = п, то есть число строк матрицы равно числу ее столбцов. Векторы и матрицы могут иметь имена, например, V — вектор или М — матрица. В данной книге имена векторов и матриц набираются полужирным шрифтом. Элементы векторов и матриц рассматриваются как индексированные переменные, например: V2 — второй элемент вектора V; М, третий элемент второй строки матрицы М. 17
Глава 1. Начало работы с MATLAB Интересно отметить, что даже обычные числа и переменные в MATLAB рассматриваются как матрицы размера 1 x 1 , что дает единообразные формы и методы проведения операций над обычными числами и массивами. Это также означает, что большинство вычислительных функций может работать с аргументами в виде векторов и матриц, вычисляя значения для каждого их элемента. Данная операция обычно называется векторизацией и обеспечивает упрощение записи операций, производимых одновременно над всеми элементами векторов и матриц, и существенное повышение скорости их выполнения.
1.1.6. Расширяемость системы MATLAB — расширяемая система, и ее легко приспособить к решению нужных пользователю специфических классов задач. Ее огромное достоинство заключается в том, что это расширение достигается естественным путем и реализуется в виде так называемых m-файлов (с расширением ,т). Иными словами, расширения системы хранятся на жестком диске компьютера и в нужный момент вызываются для использования точно так же, как встроенные в MATLAB (внутренние) функции и процедуры. Благодаря текстовому формату m-файлов пользователь может ввести в систему любую новую команду, оператор или функцию и затем пользоваться ими столь же просто, как и встроенными операторами или функциями. При этом, в отличие от таких языков программирования, как Бейсик, Си или Паскаль, не требуется никакого объявления этих новых функций. Это роднит MATLAB с языками Лого и Форт, имеющими словарную организацию операторов и функций и возможности пополнения словаря новыми определениями-словами. Но, поскольку новые определения в системе MATLAB хранятся в виде файлов на диске, это делает набор операторов и функций практически неограниченным. В базовый набор слов системы входят спецзнаки, знаки арифметических и логических операций, арифметические, алгебраические, тригонометрические и некоторые специальные функции, функции быстрого преобразования Фурье и фильтрации, векторные и матричные функции, средства для работы с комплексными числами, операторы построения графиков в декартовой и полярной системах координат, трехмерных поверхностей и т. д. Словом, MATLAB предоставляет пользователю обширный набор готовых средств (большая часть из них — это внешние расширения в виде М-файлов). Дополнительный уровень системы образуют се пакеты расширения. Они позволяют быстро ориентировать систему на решение задач в той или иной предметной области: в специальных разделах математики, в физике и в астрономии, в области нейтронных сетей и средств телекоммуникаций, в математическом моделировании, проектировании событийно управляемых систем и т. д. Благодаря этому MATLAB обеспечивает высочайший уровень адаптации к решению задач конечного пользователя.
1.1.7. Мощные средства программирования Многие математические системы создавались, исходя из предположения, что пользователь будет решать свои задачи, практически не занимаясь программированием. Однако с самого начала было ясно, что подобный путь имеет недостатки и по большому счету порочен. Многие задачи нуждаются в развитых средствах 18
/./. Назначение и особенности систем MATLAB программирования, которые упрощают запись их алгоритмов и порою открывают новые методы создания последних. С одной стороны, MATLAB содержит огромное число встроенных операторов и функций (приближающееся к тысяче), которые успешно решают множество практических задач, для чего ранее приходилось готовить достаточно сложные программы. К примеру, это функции обращения или транспонирования матриц, вычисления значений производной или интеграла и т. д. и т. п. Число таких функций с учетом пакетов расширения системы уже достигает уже многих тысяч и непрерывно увеличивается. Но, с другой стороны, система MATLAB с момента своего создания создавалась как мощный математико-ориентированный на технические вычисления язык программирования высокого уровня. И многие вполне справедливо рассматривали это как важное достоинство системы, свидетельствующее о возможности ее применения для решения новых, наиболее сложных математических задач. Система MATLAB имеет входной язык, напоминающий Бейсик (с примесью средств Фортрана и Паскаля). Запись программ в системе традиционна и потому привычна для большинства пользователей компьютеров. К тому же система дает возможность редактировать программы с помощью любого, привычного для пользователя текстового редактора. Имеет она и собственный редактор с отладчиком. Язык системы MATLAB в части программирования математических вычислений намного богаче любого универсального языка программирования высокого уровня. Он реализует почти все известные средства программирования, в том числе объектно-ориентированное и визуальное программирование. Это дает опытным программистам необъятные возможности для самовыражения. 1.3.6. О компиляции программ системы MATLAB Язык программирования систем MATLAB относится к классу интерпретаторов. Это обеспечивает простой интерактивный характер взаимодействия пользователя с системой — любая функция системы или набор их (кодов программы) может исполняться после ввода в командной строке или исполнения М-файла (с расширением .т). Это резко облегчает отладку программных модулей. Однако М-файлы могут исполняться только в среде системы MATLAB. Полностью законченных исполняемых файлов с расширением .ехе или .com система не создает. Между тем MATLAB весьма громоздкая система и ее наличие на компьютере — тяжкое бремя. Многие пользователи предпочли бы иметь свои программы, созданные на языке MATLAB, в виде самостоятельных исполняемых модулей, в случае необходимости сопровождаемых динамическими библиотеками. MATLAB предусматривает такую возможность за счет включения в его состав специального компилятора и дополнения системы языком программирования высокого уровня С или C++. К сожалению, поставки MATLAB в таком виде крайне редки и стоят очень дорого. Самостоятельное расширение системы в принципе возможно, но, как показывает практика, требует привлечения для этого весьма опытных программистов и, соответственно, больших средств на оплату их работы. В связи с этим ограничимся лишь упоминанием возможности компиляции программных модулей системы MATLAB и в дальнейшем будем рассматривать все примеры ее применения только в операционной среде системы MATLAB, т. е. в интерпретирующем режиме ее работы. Следует отметить, что в составе MATLAB 7 поставляется существенно улучшенный компилятор, у которого создание исполняемых файлов упрощено. 19
Глава 1. Начало работы с MAT LAB
1.2. У с т а н о в к а с и с т е м ы MATLAB 6.5 SP1 и начало работы с ней 1 . 2 . 1 . Инсталляция систем MATLAB 6.5 SP1 Установка систем MATLAB 6.5 SPl в среде Windows 95/98/NT/2000/XP обычно не имеет никаких специфических особенностей и подобна установке других программных продуктов. Она неоднократно описывалась в книгах по предшествующим версиям систем [38—41, 89]. Кроме того, инсталляция новейшей версии MATLAB 7 описана в конце этой главы. Поэтому ниже описана инсталляция MATLAB 6.5 SPl предельно кратко. Возможны типичная установка и выборочная, в ходе которой вам предлагается выбор компонентов системы. Последняя предпочтительнее, так как из-за огромного объема системы ее полная установка не всегда возможна. Для установки системы на ПК достаточно вставить установочный компакт-диск в устройство считывания компакт-дисков. Диск запускается автоматически и выводит временное окно — заставку системы. При этом копируются вспомогательные файлы MathWorks Installer (Мастера установки). При выборочной установке в окне инсталлятора (рис. 1.1) надо отметить те пакеты расширения, которые желательно загрузить.
Рис. 1.1. Окно инсталлятора MATLAB 6.5 SPl с перечнем расширений Учтите, что нередко установка занимает 2—3 часа (меньше только на самых современных компьютерах со скоростными микропроцессорами и CD-ROM-драйвами). 1.2.2. Файловая система MATLAB Система MATLAB состоит из многих тысяч файлов, находящихся в множестве папок. Полезно иметь представление о содержании основных папок, поскольку это позволяет быстро оценить возможности системы — например, узнать, какие операторы, функции или графические команды входят в систему. 20
1.2. Установка системы MATLAB 6.5 SPJ и начало работы с ней В MATLAB особое значение имеют файлы двух типов — с расширениями .mat и .т. Первые являются бинарными файлами, в которых могут храниться значения переменных. Вторые представляют собой текстовые файлы, содержащие внешние программы, определения команд и функций системы. Именно к ним относится большая часть команд и функций, в том числе задаваемых пользователем для решения своих специфических задач. Нередко встречаются и файлы с расширением .с (коды на языке Си), файлы с откомпилированными кодами MATLAB с расширением .тех и другие. Исполняемые файлы имеют расширение .ехе. Особое значение имеет папка MATLAB/TOOLBOX/MATLAB. В ней содержится набор стандартных m-файлов системы. Просмотр этих файлов позволяет детально оценить возможности поставляемой конкретной версии системы. Ниже перечислены основные подпапки с этими файлами (деление на категории условно, на самом деле все подпапки находятся в общей папке MATLAB/TOOLBOX/MATLAB). Подпапка команд общего назначения: General — команды общего назначения: работа со справкой, управление окном MATLAB, взаимодействие с операционной системой и т. д. Подпапки операторов, конструкций языка и системных функций: ops — операторы и специальные символы; lang — конструкции языка программирования; strfun — строковые функции; iofun — функции ввода/вывода; timefun — функции времени и дат; datatypes — типы и структуры данных. Подпапки основных математических и матричных функций: elmat — команды создания элементарных матриц и операций с ними; elfun — элементарные математические функции; specfun — специальные математические функции; matfun — матричные функции линейной алгебры; datafun — анализ данных и преобразования Фурье; polyfun — полиномиальные функции и функции интерполяции; funfun — функции функций и функции решения обыкновенных дифференциальных уравнений; soarfun — функции разреженных матриц. Подпапки команд графики: graph2d — команды двумерной графики; graph3d — команды трехмерной графики; specgraph — команды специальной графики; graphics — команды дескрипторной графики; uitools — графика пользовательского интерфейса. Полный состав файлов каждой подпапки (их список содержится в файле contents, m) можно вывести на просмотр с помощью команды help имя, где имя — название соответствующей подпапки. 1.2.3. Запуск MATLAB и работа в режиме диалога После запуска MATLAB на экране появляется основное окно системы MATLAB, показанное на рис. 1.2 в открытом виде. Обычно это окно раскрыто не полностью и занимает часть рабочего стола. Вы можете раскрыть окно полностью, 21
Глава 1. Начало работы с MATLAB щелкнув на средней из трех кнопок, расположенных в конце титульной (верхней) строки окна. Левая кнопка сворачивает окно в кнопку с именем приложения, помещаемую в панель задач Windows 95/98, а правая закрывает окно и прекращает работу с MATLAB.
• Start | Рис. 1.2. Окно системы MATLAB после запуска и выполнения простых вычислений Обратите внимание на список Current Directory: путей файловой системы MATLAB в панели инструментов. Неправильное указание пути может сделать неработоспособными многие команды, которые ассоциируются с m-файлами. Поэтому необходима правильная установка директории. Для явного уточнения версии системы следует вывести окно с информацией о системе (команда About MATLAB (О MATLAB) в меню Help (Помощь). Полезно знать, что в начале запуска автоматически выполняется команда matl a c r c , которая исполняет загрузочный файл matlabrc.m и файл startup.m, если таковой существует. Эти файлы выполняют начальную настройку терминала системы и задают ряд ее параметров. В частности, могут быть заданы пути доступа к другим файлам, необходимым для корректной работы системы MATLAB. Поскольку указанные файлы имеют текстовый формат, их легко просмотреть с помощью какого-либо текстового редактора или с помощью команды type в командном режиме работы MATLAB. Сеанс работы с MATLAB принято именовать сессией (session). Сессия, в сущности, является текущим документом, отражающим работу пользователя с системой MATLAB. В ней имеются строки ввода, вывода и сообщений об ошибках. Входящие в сессию определения переменных и функций, расположенные в рабочей области памяти, но не саму сессию, можно записать на диск (файлы формата .mat), используя команду save (Сохранить). Команда load (Загрузить) позволяет считать с диска данные рабочей области. Фрагменты сессии можно оформить в виде дневника с помощью команды diary (Дневник). Позже мы обсудим эти команды подробно. 22
1.2. Установка системы MATLAB 6.5 SPI и начало работы с ней Интерфейс системы является настраиваемым. Основные средства его настройки представлены в позиции view меню. Стандартный вид окна MATLAB 6.5 SPI представлен на рис. 1.3. Ж
DltkMfKir «о
DO2 •
Classic An-ki-,
••
SOIltt Foais PC_Lob2(»O
;
• ;_._
Рис. 1.З. Вид рабочего окна MATLAB 6.5 на рабочем столе Windows XP 1.2.4. Новый и старый облик системы MATLAB Пользователи, уже имеющие опыт работы с системами MATLAB, будут приятно (а кое-кто, напротив, неприятно) удивлены новациями пользовательского интерфейса системы MATLAB 6.5 SPI. В новой реализации пользовательского интерфейса, введенной начиная с версии MATLAB 6.0 (R12), не осталось и следа от прежней аскетической скромности. Об интерфейсе MATLAB 7 мы поговорим отдельно чуть позже. Теперь вид окна системы MATLAB 6.5 SPI (рис. 1.2 и 1.3) уже вполне отвечает канонам современного интерфейса Windows-приложений. Пользовательский интерфейс многооконный и имеет ряд средств прямого доступа к различным компонентам системы. Бросается в глаза новый пункт меню — Web. Он дает прямой выход в Интернет. В панели инструментов добавлена позиция ввода ранее отмененной операции и меню просмотра файловой системы с кнопкой его открытия. Но самые решительные изменения произошли в левой части общего окна системы — здесь появились окна доступа к компонентам системы Launch Pad/Workspace (Панель Запуска/Рабочая область) и окно Current Directory (текущей папки). Надо прямо признать, что особой необходимости в этих новациях нет, поскольку старые пользователи уже привыкли к крайней простоте интерфейса систем MATLAB. Учтя это, разработчики системы ввели в позицию View (Вид) меню команду Desktop Layout • Command Windows Only (Только командное окно). Стоит ее исполнить, как вид окна системы будет очень напоминать добрый старый интерфейс версий MATLAB 5* — см. рис. 1.4. На этом рисунке показано также 23
Глава 1. Начало работы с MATLAB окно данных о программы для версии MATLAB 6.5 + SP1. Для его вызова надо исполнить команду About MATLAB в позиции Help меню. •
Щ V
| ?
Current Diredwy:] С WATLAB65\wo.k
-
1
»
s
l
2
n
(
V
3
4
)
M 0.Ё415
0.9093
0,1411
A
T
L
A
B
'
-0.7568 Version 6.5.1.199709 Release 13 {Service Р.эсИ 1)
»
3*V
August 4, 2003 LicenseNumber 0
/ j МШ
DVP
3
»
Puc.
9
12
4
9
16
V.'2
1 »
6
V4-2
Ш^Ш.
SSPU
\ m
як
чЭяР i
„„,„,» ы у№ Show Lcene i | j OK {
/.4. Упрощенный интерфейс системы MATLAB и окно данных о программе
Если вы все же хотите вкусить прелести нового интерфейса, то исполните в той же позиции меню команду Desktop Layout • Default (Интерфейс по умолчанию). Там же вы найдете и другие возможности модификации вида интерфейса системы MATLAB. 1.2.5. Операции строчного редактирования При работе с MATLAB в командном режиме действует простейший строчный редактор. Его команды перечислены в табл. 1.1.
Таблица 1.1 Команды строчного редактора MATLAB Комбинация клавиш
24
j Назначение
—> или Ctrl+b
Перемещение курсора вправо на один символ
<- или Ctrl+f
Перемещение курсора влево на один символ
Ctrl+-> или Ctrl+r
Перемещение курсора вправо на одно слово
Ctrl+^— или Ctrl+I
Перемещение курсора влево на одно слово
Home или Ctrl+a
Перемещение курсора в начало строки
End или Ctrl+e
Перемещение курсора в конец строки
Ти^или Ctrl+p и Ctrl+n
Перелистывание предыдущих команд вверх или вниз для подстановки в строку ввода
1.2. Установка системы MATLAB 6.5 SPJ и начало работы с ней
Комбинация клавиш
Назначение
Del или Ctrl+d
Стирание символа справа от курсора
«-или Ctrl+h
Стирание символа слева от курсора
Ctrl+k
Стирание до конца строки
Esc
Очистка строки ввода
Ins
Включение/выключение режима вставки
PgUp
Перелистывание страниц сессии вверх
PgDn
Перелистывание страниц сессии вниз
Эти возможности кажутся примитивными, но позволяют пользователю быстро работать в стиле первых версий MATLAB для MS-DOS. Они обеспечивают важное свойство новых версий систем — их совместимость со старыми версиями в части преемственности навыков работы. Позже вы увидите, что в новых версиях есть вполне современный редактор со средствами отладки создаваемых документов — т-файлов. Обратите особое внимание на применение клавиш t и I. Они используются дня подстановки после маркера строки ввода » ранее введенных строк, например для их исправления, дублирования или дополнения. При этом указанные клавиши обеспечивают перелистывание ранее введенных строк снизу вверх или сверху вниз. Такая возможность существует благодаря организации специального стека, хранящего строки с исполненными ранее командами.
1.2.6. Команды управления окном Полезно сразу усвоить некоторые команды управления окном командного режима: • c l c — очищает экран и размещает курсор в левом верхнем углу пустого экрана; • home — возвращает курсор в левый верхний угол окна; • echo
on — включает режим вывода на экран текста Script-файла (файла-сценария); • echo off — выключает режим вывода на экран текста Script-файла; • echo — меняет режим вывода на противоположный; • echo on a l l — включает режим вывода на экран текста всех т-файлов; • echo off a l l — отключает режим вывода на экран текста всех т-файлов; • more on — включает режим постраничного вывода (полезен при просмотре больших т-файлов); • more off — отключает режим постраничного вывода (в этом случае для просмотра больших фалов надо пользоваться линейкой прокрутки). 1.2.7. MATLAB в режиме прямых вычислений Система MATLAB создана таким образом, что любые (подчас весьма сложные) вычисления можно выполнять в режиме прямых вычислений, то есть без подготовки программы. Это превращает MATLAB в необычайно мощный калькулятор, ко25
Глава 1. Начало работы с MAT LAB торый способен производить не только обычные для калькуляторов вычисления (например, выполнять арифметические операции и вычислять элементарные функции), но и операции с векторами и матрицами, комплексными числами, рядами и полиномами. Можно почти мгновенно задать и вывести графики различных функций — от простой синусоиды до сложной трехмерной фигуры. Работа с системой в режиме прямых вычислений (или в командном режиме) носит диалоговый характер и происходит по правилу «задал вопрос, получил ответ». Пользователь набирает на клавиатуре вычисляемое выражение, редактирует его (если нужно) в командной строке и завершает ввод нажатием клавиши ENTER. В качестве примера на рис. 1.2 уже были показаны простейшие вычисления — вычисление выражения 2 + 2 и значения sin([l 2 3]) и ехр(1). Даже из таких простых примеров можно сделать некоторые поучительные выводы: • • • • • •
• • •
для очистки окна сессии используется команда clc; для указания ввода исходных данных используется символ >>; данные вводятся с помощью простейшего строчного редактора; для блокировки вывода результата вычислений некоторого выражения после него надо установить знак ; (точка с запятой); если не указана переменная для значения результата вычислений, то MATLAB назначает такую переменную с именем a n s ; знаком присваивания является привычный математикам знак равенства =, а не комбинированный знак :=, как во многих других языках программирования и математических системах; встроенные функции (например s i n ) записываются строчными буквами, и их аргументы указываются в круглых скобках; результат вычислений выводится в строках вывода (без знака »); диалог происходит в стиле «задал вопрос — получил ответ».
Уже первый пример на рис. 1.4 иллюстрирует применение системы MATLAB для выполнения простых векторных операций. В этом примере задается четырехэлементный вектор V со значениями элементов 1, 2, 3 и 4. Далее (сосредоточьте на этом внимание!) вычисляются функции синуса и экспоненты с аргументом в виде вектора, а не скаляра. Две записи для вектора — v= [1 2 3 4] и v= [ 1 , 2 , 3 , 4 ] — являются идентичными. Таким образом, векторы задаются списком своих элементов, разделяемых пробелами или запятыми. Список заключается в квадратные скобки. Для выделения я-го элемента вектора V используется выражение V (п). Оно задает соответствующую 'индексированную переменную. В большинстве математических систем вычисление s i n (V) и ехр (V), где v — вектор, сопровождалось бы выдачей ошибки, поскольку функции sin и ехр должны иметь аргумент в виде скалярной величины. Однако MATLAB — матричная система, а вектор является разновидностью матрицы с размером 1 х п или n x 1. Поэтому в нашем случае результат вычислений будет вектором того же размера, что и аргумент V, но элементы возвращаемого вектора будут синусами или экспонентами от элементов вектора V. Матрица в MATLAB задается в виде ряда векторов, представляющих ее строки и заключенных в квадратные скобки. Для разделения элементов векторов используется пробел или запятая, а для отделения одного вектора от другого — точка с
26
1.3. Основные объекты MATLAB запятой. Для выделения отдельного элемента матрицы м используется выражение вида М( j , i ) , где м — имя матрицы, j — помер строки H i — номер столбца. Обратите внимание на форму ответов при выполнении простых операций без указания переменной, которой присваивается результат. В таких случаях MATLAB сам назначает переменную ans, которой присваивается результат и значение которой затем выводится на экран. 1.2.8. О п е р е н о с е с т р о к и в с е с с и и В некоторых случаях вводимое математическое выражение может оказаться настолько длинным, что для него не хватит одной строки. В этом случае часть выражения можно перенести на новую строку с помощью знака многоточия «...» (3 или более точек), например: s = 1 - 1/2 1/8 + 1/9 -
+ 1/3 - 1/4 + 1/5 - 1/6 1/10 + 1/11 - 1 / 1 2 ;
+ 1/7
...
. Этот прием может быть весьма полезным для создания наглядных документов, у которых предотвращается заход строк в невидимую область окна.
1.3. О с н о в н ы е о б ъ е к т ы MATLAB 1.3.1. Понятие о математическом выражении Центральным понятием всех математических систем является математическое выражение. Оно задает то, что должно быть вычислено в численном (реже символьном) виде. Вот примеры простых математических выражений: 2+3
2.301*sin (x) 4+ехр (3)/5 sqrt(у)/2 sin (pi/2) Математические выражения строятся на основе чисел, констант, переменных, операторов, функций и разных спецзнаков. Ниже даются краткие пояснения сути этих понятий. 1.3.2. Действительные и комплексные числа Число — простейший объект языка MATLAB, представляющий количественные данные. Числа можно считать константами, имена которых совпадают с их значениями. Числа используются в общепринятом представлении о них. Они могут быть целыми, дробными, с фиксированной и плавающей точкой. Возможно представление чисел в хорошо известном научном формате с указанием мантиссы и порядка числа. Ниже приводятся примеры представления чисел: О 2 -3 2.301 0.00001 123.456е-24 27
Глава 1. Начало работы с MAT LAB -234.45беЮ
Как нетрудно заметить, в мантиссе чисел целая часть отделяется от дробной не запятой, а точкой, как принято в большинстве языков программирования. Для отделения порядка числа от мантиссы используется символ е. Знак «плюс» у чисел не проставляется, а знак «минус» у числа называют унарным минусом. Пробелы между символами в числах не допускаются. Числа могут быть комплексными: z — Re(x) + Im(x)*/. Такие числа содержат действительную Яе(г) и мнимую 1т(г) части. Мнимая часть имеет множитель / или у, означающий корень квадратный из —1: 3i
2+3i -123.456+2.7e-3i Функция r e a l ( z ) возвращает действительную часть комплексного числа, Re(z), а функция i m a g ( z ) — мнимую, Im(z). Для получения модуля комплексного числа используется функция a b s ( z ) , а для вычисления фазы — a n g l e (Z). Ниже даны простейшие примеры работы с комплексными числами: >> i ans = О + l.OOOOi >> j ans = О + l.OOOOi >> z = 2 + 3 i z = 2.0C00 + 3 . 0 0 0 0 i >> a b s (z) ans = 3.6056 >> r e a l (z) ans = 2 >> i m a g ( z ) ans = 3 >> a n g l e ( z ) ans = 0.9828
В MATLAB операции над числами обычно выполняются в формате, который принято считать форматом с двойной точностью. Такой формат удовлетворяет подавляющему большинству требований к численным расчетам, но совершенно не подходит для символьных вычислений с произвольной (абсолютной) точностью. Символьные вычисления MATLAB может выполнять с помощью специального пакета расширения Symbolic Math Toolbox [12]. 28
1.3. Основные объекты MAT LAB 1.3.3. Форматы чисел По умолчанию MATLAB выдает числовые результаты в нормализованной форме с четырьмя цифрами после десятичной точки и одной до нее. Многих такая форма представления не всегда устраивает. Поэтому при работе с числовыми данными можно задавать различные форматы представления чисел. Однако в любом случае все вычисления проводятся с предельной, так называемой двойной, точностью. Для установки формата представления чисел используется команда >> format name где name — имя формата. Для числовых данных name может быть следующим сообщением: • s h o r t — короткое представление в фиксированном формате (5 знаков); • s h o r t e — короткое представление в экспоненциальном формате (5 знаков мантиссы и 3 знака порядка); • long — длинное представление в фиксированном формате (15 знаков); • long e — длинное представление в экспоненциальном формате (15 знаков мантиссы и 3 знака порядка); • hex — представление чисел в шестнадцатеричной форме; • bank — представление для денежных единиц. Для иллюстрации различных форматов рассмотрим вектор, содержащий два элемента-числа: х=[4/3 1.2345е-б]
В различных форматах их представления будут иметь следующий вид: format s h o r t 1.3333 0.0000 format s h o r t e 1.3333E+000 1.2345E-006 format long 1.333333333333338 0.000001234500000 format long e 1 . 333333333333338E+000 1.234500000000000E-006 format bank 1.33 0.00 Задание формата сказывается только на форме вывода чисел. Вычисления все равно происходят в формате двойной точности, а ввод чисел возможен в любом удобном для пользователя виде. 1.3.4. Константы и системные переменные Константа — это предварительно определенное числовое или символьное значение, представленное уникальным именем. Числа (например, I, —2 и 1.23) являются безымянными числовыми константами. Другие виды констант в MATLAB принято назвать системными переменными, поскольку, с одной стороны, они задаются системой при ее загрузке, а с другой — могут переопределяться. Основные системные переменные, применяемые в системе MATLAB, указаны ниже: i или j — мнимая единица (корень квадратный из —I); p i — число к = 3.1415926...; eps — погрешность операций над числами с плавающей точкой (2^52); realmin — наименьшее число с плавающей точкой (2~1022); realmax — наибольшее число с плавающей точкой (2 1023 ) i n f — значение машинной бесконечности; 29
Глава 1. Начало работы с MATLAB ans — переменная, хранящая результат последней операции и обычно вызывающая его отображение на экране дисплея; NaN — указание на нечисловой характер данных (Not-a-Number). Вот примеры применения системных переменных: >> 2*pi ans = 6.2832 >> eps ans 2.2204е-01б >> realmin ans ^ 2.2251e-308 >> realmax ans
.
:
• . . . .
=
. : •
1.7977e+308 » 1/0 Warning: Divide by zero, ans = Inf >> 0/0 Warning: Divide by zero, ans = NaN Как отмечалось, системные переменные могут переопределяться. Можно задать системной переменной eps иное значение, например eps=0.000l. Однако важно то, что их значения по умолчанию задаются сразу после загрузки системы. Поэтому неопределенными, в отличие от обычных переменных, системные переменные не могут быть никогда. Символьная константа — это цепочка символов, заключенных в апострофы, например: 'Hello my friend!' 'Привет' •2+3'
'••-.;••
Если в апострофы помещено математическое выражение, то оно не вычисляется и рассматривается просто как цепочка символов. Так что ' 2 + 3 ' не будет возвращать число 5. Однако с помощью специальных функций преобразования символьные выражения могут быть преобразованы в вычисляемые. Соответствующие функции преобразования будут рассмотрены в дальнейшем. 1.3.5. Текстовые комментарии Поскольку MATLAB используется для достаточно сложных вычислений, важное значение имеет наглядность их описания. Она достигается, в частности, с помощью текстовых комментариев. Текстовые комментарии вводятся с помощью символа %, например: %It
или 30
is factorial
function
.
1.3. Основные объекты MATLAB %Это функция факториала Обычно первые строки m-файлов служат для описания их назначения, которое выводится на экран дисплея после команды >> help Имя файла Считается правилом хорошего тона вводить в m-файлы достаточно подробные текстовые комментарии. Без таких комментариев даже разработчик программных модулей быстро забывает о сути собственных решений. В текстовых комментариях и в символьных константах могут использоваться буквы русского алфавита — при условии, что установлены содержащие эти буквы наборы шрифтов (см. примечание выше). 1.3.6. Переменные и присваивание им значений Переменные — это имеющие имена объекты, способные хранить некоторые, обычно разные по значению, данные. В зависимости от этих данных переменные могут быть числовыми или символьными, векторными или матричными. В системе MATLAB можно задавать переменным определенные значения. Для этого используется операция присваивания, вводимая знаком равенства = Имя_переменной = Выражение Типы переменных заранее не декларируются. Они определяются выражением, значение которого присваивается переменной. Так, если это выражение — вектор или матрица, то переменная будет векторной или матричной. Имя переменной (ее идентификатор) может содержать сколько угодно символов, но запоминается и идентифицируется только 31 начальный символ. Имя любой переменной не должно совпадать с именами других переменных, функций и процедур системы, то есть оно должно быть уникальным. Имя должно начинаться с буквы, может содержать буквы, цифры и символ подчеркивания _. Недопустимо включать в имена переменных пробелы и специальные знаки, например +, -, *, / и т. д., поскольку в этом случае правильная интерпретация выражений становится невозможной. Желательно использовать содержательные имена для обозначений переменных, например speed_l для переменной, обозначающей скорость первого объекта. Переменные могут быть обычными и индексированными, то есть элементами векторов или матриц (см. выше). Могут использоваться и символьные переменные, причем символьные значения заключаются в апострофы, например s='Demo'. 1.3.7. Уничтожение определений переменных В памяти компьютера переменные занимают определенное место, называемое рабочей областью (workspace). Для очистки рабочей области используется функция c l e a r в разных формах, например: c l e a r — уничтожение определений всех переменных; c l e a r х — уничтожение определения переменной х; c l e a r а, Ь, с — уничтожение определений нескольких переменных. Уничтоженная (стертая в рабочей области) переменная становится неопределенной. Использовать неопределенные переменные нельзя, и такие попытки будут сопровождаться выдачей сообщений об ошибке. Приведем примеры задания и уничтожения переменных: 31
Глава 1. Начало работы с MATLAB >> x=2*pi x = 6.2832 » V=[l 2 3 4 5] V = 12 3 4 5 >> MAT ??? Undefined function or variable 'MAT1. » MAT=[1 2 3 4; 5 6 7 8] MAT = 12 3 4 5 6 78 >> clear V >> V ??? U n d e f i n e d f u n c t i o n o r v a r i a b l e >> c l e a r >> x ??? U n d e f i n e d f u n c t i o n o r v a r i a b l e >> M ??? U n d e f i n e d f u n c t i o n o r v a r i a b l e
'V.
'x'. 'M'.
Обратите внимание на то, что сначала выборочно стерта переменная V, а затем командой c l e a r без параметров стерты все остальные переменные. 1.3.8. Операторы и функции Оператор — это специальное обозначение для определенной операции над данными — операндами. Например, простейшими арифметическими операторами являются знаки суммы +, вычитания -, умножения * и деления /. Операторы используются совместно с операндами. Например, в выражении 2+3 знак + является оператором сложения, а числа 2 и 3 — операндами. Следует отметить, что большинство операторов относится к матричным операциям, что может служить причиной серьезных недоразумений. Например, операторы умножения * и деления / вычисляют произведение и частное от деления двух массивов, векторов или матриц. Есть ряд специальных операторов, например, оператор \ означает деление справа налево, а операторы .* и ./ означают, соответственно, поэлементное умножение и поэлементное деление массивов. Следующие примеры поясняют сказанное на примере операций с векторами: » VI 2 >> V2 1 »
Vl=[2 4 6 8] = 8 4 66 8 V2=[l 2 3 4] =
2 34 V1/V2
ans = 2 » V1.*V2 ans = 2 8 18 32
32
1.3. Основные объекты >>
MATLAB
VI./V2•
ans = 2 2 2 2 Полный список операторов можно получить, используя команду » help ops Постепенно мы рассмотрим все операторы системы MATLAB и обсудим особенности их применения. А пока приведем только часть полного списка операторов, содержащую арифметические операторы: >> help ops Operators and special characters. Arithmetic operators. Plus — Plus + Uplus — Unary plus + Minus — Minus — Uminus — Unary minus — Mtimes — Matrix m u l t i p l y * times — Array m u l t i p l y .* mpower — Matrix power Л power — Array power . Л mldivide — Backslash or l e f t matrix divide \ mrdivide — Slash or r i g h t matrix divide / l d i v i d e — Left a r r a y divide .\ r d i v i d e — Right a r r a y d i v i d e ./ kron — Kronecker t e n s o r product Функции — это имеющие уникальные имена объекты, выполняющие определенные преобразования своих аргументов и при этом возвращающие результаты этих преобразований. Возврат результата — отличительная черта функций. При этом результат вычисления функции с одним выходным параметром подставляется на место ее вызова, что позволяет использовать функции в математических выражениях, например функцию s i n в 2 * s i n ( p i / 2 ) . Функции в общем случае имеют список аргументов (параметров), заключенный в круглые скобки. Например, функция Бесселя записывается как b e s s e l (NU,X). В данном случае список параметров содержит два аргумента — NO В виде скаляра и X в виде вектора. Многие функции допускают ряд форм записи, отличающихся списком параметров. Если функция возвращает несколько значений, то она записывается в виде Т/1,
Y 2 , . . . ] = f u n c ( X I ,
Х2,...)
где Yl, Y2, . . . — список выходных параметров и XI, Х2, . . . — список входных аргументов (параметров). Со списком элементарных функций можно ознакомиться, выполнив команду h e l p e l f u n , а со списком специальных функций — с помощью команды h e l p sp>ecfun. Функции могут быть встроенными (внутренними) и внешними, или т-функциями. Так, встроенными являются наиболее распространенные элементарные функции, например, s i n ( x ) и е х р ( у ) , тогда как функция s i n h ( x ) является внешней функцией. Внешние функции содержат свои определения в т - ф а й лах. Задание таких функций с помощью специального редактора m-файлов мы рассмотрим в главе 2. Встроенные функции хранятся в откомпилированном ядре системы MATLAB, в силу чего они выполняются предельно быстро. 33
Глава 1. Начало работы с MAT LAB 1.3.9. П р и м е н е н и е о п е р а т о р а : (двоеточие) Очень часто необходимо произвести формирование упорядоченных числовых последовательностей. Такие последовательности нужны для создания векторов или значений абсциссы при построении графиков. Для этого в MATLAB используется оператор : (двоеточие): Начальное значение:Шаг:Конечное значение Данная конструкция порождает возрастающую последовательность чисел, которая начинается с начального значения, идет с заданным шагом и завершается конечным значением. Если Шаг не задан, то он принимает значение I. Если конечное значение указано меньшим, чем начальное значение — выдается сообщение об ошибке. Примеры применения оператора : даны ниже: >> 1:5 ans == 1 2 » i=0:2:10
3
1 —
»
О 2 i=10:-2:2
1С
10 8 б 4 2 >> V==0 :pi/2 :2*pi; >> V V= 0 1.5708 3.1416 >> Х=1:-.2:0 X= 1.0000 0.8000 0.6000 0 >> 5:2 ans = Empty matrix:
4.7124
0.4000
6.2832
0.2000
l-by-0
Как отмечалось, принадлежность MATLAB к матричным системам вносит коррективы в назначение операторов и приводит, при неумелом их использовании, к казусам. Рассмотрим следующий характерный пример: >>
х=0:5
х = 0 1 >> c o s (х) ans =
2
3
0.5403 -0.4161 -0.9900 -0.6536 0.2837 1.0000 >> sin (х)/х ans = -0.0862 Вычисление массива косинусов здесь прошло корректно. А вот вычисление массива значений функции $\п(х)/х дает неожиданный, на первый взгляд, эффект — вместо массива с шестью элементами вычислено единственное значение! 34
1.3. Основные объекты MATLAB Причина «парадокса» здесь в том, что оператор / вычисляет отношение двух матриц, векторов или массивов. Если они одной размерности, то результат будет одним числом, что в данном случае и выдала система. Чтобы действительно получить вектор значений sin(x)/x, надо использовать специальный оператор поэлементного деления массивов — ./. Тогда будет получен массив чисел: >> s i n (x) . / х W a r n i n g : D i v i d e by z e r o , ans = NaN 0.8415 0.4546 0.0470
-0.1892
-0.1918
Впрочем, и тут без особенностей не обошлось. Так, при х = 0 значение sin(x)/x дает устранимую неопределенность вида 0/0 = 1. Однако, как и всякая численная система, MATLAB классифицирует попытку деления на 0 как ошибку и выводит соответствующее предупреждение. А вместо ожидаемого численного значения выводится символьная константа NaN, означающая, что неопределенность 0/0 — это все же не обычное число. Выражения с оператором : могут использоваться в качестве аргументов функций для получения множественных (ранжированных) их значений. Например, в приводимом ниже примере вычислены функции Бесселя порядка от 0 до 5 со значением аргумента 0.5: >> b e s s e l ( 0 : 1 : 5 , 1 / 2 ) ans = 0.9385 0.2423 0.0306
0.0026
0.0002
0.0000
А в следующем примере вычислено шесть значений функции Бесселя нулевого порядка для значений аргумента от 0 до 5 с шагом 1: >> b e s s e l ( 0 , 0 : 1 : 5 ) ans = 1.0000
0.7652
0.2239
-0.2601
-0.3971
-0.1776
Таким образом, оператор : является весьма удобным средством задания регулярной последовательности чисел. Он широко используется при работе со средствами построения графиков. В дальнейшем мы расширим представление о возможностях этого оператора. 1.3.10. Функции пользователя Хотя в ядро MATLAB последних версий встроено уже около тысячи операторов и функций, пользователю всегда может понадобиться та или иная функций, простая или сложная, отсутствующая в ядре. Язык программирования систем MATLAB предоставляет ряд эффективных возможностей для задания функций пользователя. Одна из таких возможностей заключается в применении функции i n l i n e , аргументом которой надо в апострофах задать выражение, задающее функцию одной или нескольких переменных. В приведенном ниже примере задана функция двух переменных — суммы квадратов sin(x) и cos(y): Л
Л
>> sc2 = inline ( 'sin (x) . 2 + соз (у) .2') sc2 = Inline function: A Л sc2(x,y) = sin (x) . 2 + cos(у) . 2
35
Глава 1. Начало работы с MATLAB Можно также задавать свои функции в виде m-файлов. Подробно это описано в главе 10. Например, можно в окне редактора m-файлов (открывается командой New в меню File) создать m-файл с именем sc2 и листингом: function y=sc2(x,y) y=sin (x) . A 2+cos(y) . Л 2 Записав его на диск, можно командой type sc2 вывести листинг созданной функции: >> type sc2 function y=sc2(x,y) y=sin (x) . A 2 + cos(y) . A 2 Обращение к функции, созданной описанными методами, задается как sc2(x,y), где на место х и у подставляются значения переменных — аргументов функции пользователя. Например: >> з с 2 ( 1 , 2 ) ans = 0.8313>> s c 2 ( 2 , 1 )
1.118 7 a n s =: 1.1187
Можно также создать так называемую handle-функцию с помощью оператора @: >> fh=@sc2; К такой функции можно обращаться с.помощью функции исполнения функций f e v a l (fh, x, у) : >> f e v a l ( f h , 1 , 2 ) Y= С.8813 ans = С.8813 >> f e v a l ( f h , 2 , 1 ) У~ 1.1187 ans == 1.1187 1 . 3 . 1 1 . С о о б щ е н и я об о ш и б к а х и и с п р а в л е н и е о ш и б о к Важное значение при диалоге с системой MATLAB имеет диагностика ошибок. Вряд ли есть пользователь, помнящий точное написание тысяч операторов и функций, входящих в систему MATLAB и в пакеты прикладных программ. Поэтому никто не застрахован от ошибочного написания математических выражений или команд. MATLAB диагностирует вводимые команды и выражения и выдает соответствующие сообщения об ошибках или предупреждения. Пример вывода сообщения об ошибке (деление на 0) только что приводился. Рассмотрим еще ряд примеров. Введем, к примеру, ошибочное выражение >> sqr (2) 36
1.3. Основные объекты MATLAB и нажмем клавишу ENTER. Система сообщит об ошибке: ??? Undefined function or variable
'sqr'.
Это сообщение говорит о том, что не определена переменная или функция, и указывает, какая именно — sqr. В данном случае, разумеется, можно просто набрать правильное выражение. Однако в случае громоздкого выражения лучше воспользоваться редактором. Для этого достаточно нажать клавишу \ для перелистывания предыдущих строк. В результате в строке ввода появится выражение >>
sqr(2)
с курсором в его конце. Начиная с версии MATLAB 6 теперь можно нажать клавишу Tab. Система введет подсказку, анализируя уже введенные символы. Из предложенных системой трех операторов выбираем sqrt. Теперь с помощью клавиши -I вновь выбираем нужную строку и, пользуясь клавишей <—, устанавливаем курсор после буквы г. Теперь нажмем клавишу Т, а затем клавишу ENTER. Выражение примет следующий вид: >> sqrt (2) ans = 1 . 4142
Если бы был только один вариант окончания введенных символов, то после нажатия клавиши Tab система бы закончила наш ввод без перевода строки. Вычисления дают ожидаемый результат — значение квадратного корня из двух. В системе MATLAB внешние определения используются точно так же, как и встроенные функции и операторы. Никаких дополнительных указаний на их применение делать не надо. Достаточно лишь позаботиться о том, чтобы используемые определения действительно существовали в виде файлов с расширением .т. Впрочем, если вы забудете об этом или введете имя несуществующего определения, то система отреагирует на это звуковым сигналом (звонком) и выводом сообщения об ошибке: >> h s i n ( 1 )
??? Undefined >> sinh (1) ans = 1.1752
function or variable
'hsin'.
В этом примере мы забыли (нарочно), какое имя имеет внешняя функция, вычисляющая гиперболический синус. Система подсказала, что функция или переменная с именем hsin не определена ни как внутренняя, ни как m-функция. Зато далее мы видим, что функция с именем sinh есть в составе функций системы MATLAB — она задана в виде М-функции. Между тем в последнем примере мы не давали системе никаких указаний на то, что следует искать именно внешнюю функцию! И это вычисление прошло так же просто, как вычисление встроенной функции, такой как sin. Разумеется, скорость вычислений по внешним определениям несколько ниже, чем по встроенным функциям или операторам. При этом вычисления происходят следующим образом: вначале система быстро определяет, имеется ли введенное слово среди служебных слов системы. Если да, то нужные вычисления выполняются сразу, если нет, система ищет m-файл с соответствующим именем на диске. Если файла нет, то выдастся сообщение об ошибке и вычисления останавливаются. Если же файл найден, он загружается с жесткого диска в память машины и исполняется. 37
Глава 1. Начало работы с MAT LAB Иногда в ходе вывода результатов вычислений появляется сокращение NaN (от слов Not a Number — не число). Оно обозначает неопределенность, например вида 0/0 или inf/inf, где inf — системная переменная со значением машинной бесконечности. Могут появляться и различные предупреждения об ошибках (на английском языке). Например, при делении на 0 конечного числа появляется предупреждение «Warning: Devide by Zero.» («Внимание: деление на ноль»). Диапазон чисел, представимых в системе, лежит от 10~308 до 10+308. Вообще говоря, в MATLAB надо отличать предупреждение об ошибке от сообщения о ней. Предупреждения (обычно после слова Warning) не останавливают вычисления и лишь предупреждают пользователя о том, что диагностируемая ошибка способна повлиять на ход вычислений. Сообщение об ошибке (после знаков ???) останавливает вычисления.
1.4. Ф о р м и р о в а н и е в е к т о р о в и м а т р и ц 1.4.1. Особенности задания векторов и матриц MATLAEi — система, специально предназначенная для проведения сложных вычислений с векторами, матрицами и массивами — в том числе многомерными. При этом она по умолчанию предполагает, что каждая заданная переменная — это вектор, матрица или массив. Все определяется конкретным значением переменной. Например, если задано х=1, то это значит, что X — это вектор с единственным элементом, имеющим значение 1. Если надо задать вектор из трех элементов, то их значения следует перечислить в квадратных скобках, разделяя пробелами. Так, например, присваивание » V=[l 2 3] V = 12 3
задает вектор V, имеющий три элемента со значениями 1, 2 и 3. После ввода вектора система выводит его на экран дисплея. Задание матрицы требует указания нескольких строк. Для разграничения строк используется знак ; (точка с запятой). Этот же знак в конце ввода предотвращает вывод матрицы или вектора (и вообще любой операции) на экран дисплея. Так, ввод » М=[1 2 3; 4 5 6; 7 8 9 ] ; задает квадратную матрицу, которую можно вывести: >> м м= 1 2 4 5 7 8
3 6 9
Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые доступные системе функции, например: >> V= [2+2/(3+4) ехр(5) sqrt(10)]; >> V V = 2.2857 148.4132 3.1623 38
1.4. Формирование векторов и матриц Для указания отдельного элемента вектора или матрицы используются выражения вида v (i) или м ( i , j ) . Например, если задать >> М(2, ans = 5
2)
то результат будет равен 5. Если нужно присвоить элементу м ( i , j ) новое значение х, следует использовать выражение M(ij)=x Например, если элементу М(2, 2) надо присвоить значение 10, следует записать »
М(2, 2)=10
Вообще говоря, в тексте программ MATLAB лучше не использовать i и j как индексы, так как i и j — обозначение квадратного корня из —1. Но можно использовать ] и J. Выражение м (i) с одним индексом дает доступ к элементам матрицы, развернутым в один столбец. Такая матрица образуется из исходной, если подряд выписать ее столбцы. Следующий пример поясняет такой доступ к элементам матрицы м: » М=[1 2 3 ; М= 1 2 3 4 5 6 7 8 9 >> М(2) ans =
4 5 6;
7 8
9]
4 » М(8) ans = 6 >> М(9) ans = 9 >> М ( 5 ) = 1 0 0; >> М К = 1 2 3 4 100 б 7 8 9
Возможно задание векторов и матриц с комплексными элементами, например: >> i = s q r t (-1) ; >> СМ = [1 2; 3 4] + i * [ 5
б; 7 8]
ИЛИ
>> СМ = [ l + 5 * i 2 + 6 * i ; 3+7*i 4+8*i] Это создает матрицу: .0000 0000
+ S.OOOOi 2 . 0 0 0 0 + 7.00001 4.0000
+ б.00001 + 8.00001
39
Глава 1. Начало работы с MATLAB Наряду с операциями над отдельными элементами матриц и векторов система позволяет производить операции умножения, деления и возведения в степень сразу над всеми элементами, то есть над массивами. Для этого перед знаком операции ставится точка. Например, оператор * означает умножение для векторов или матриц, а оператор . * — поэлементное умножение всех элементов массива. Так, если м — матрица, то м. *2 даст матрицу, все элементы которой умножены на скаляр — число 2. Впрочем, для умножения матрицы на скаляр оба выражения — м*2 и н . ' 2 — оказываются эквивалентными. Имеется также ряд особых функций для задания векторов и матриц. Например, функция magic (n) задает магическую матрицу размера п х п, у которой сумма всех столбцов, всех строк и даже диагоналей равна одному и тому же числу: >> M = m a g i c ( 4 ) М=
16
2 3 13 11 10 8 9 7 6 12 4 14 15 1 >> sum(M) ans = 3 4 34 34 3^ >> sum(M') ans 34 34 34 34 >> sum(diag (M) ) ans — » M(l,2)+M(2,2)+M(3,2)+M(4,2) ans = 34
Уже сама по себе возможность создания такой матрицы с помощью простой функции magic заинтересует любителей математики. Но векторных и матричных функций в системе множество, и мы их детально рассмотрим в дальнейшем. Напомним, что для стирания переменных из рабочей области памяти служит команда c l e a r . 1.4.2. О б ъ е д и н е н и е м а л ы х м а т р и ц в б о л ь ш у ю Описанный способ задания матриц позволяет выполнить операцию конкатенации — объединения малых матриц в большую. Например, создадим вначале магическую матрицу размера 3 x 3 : >> A = m a g i c ( 3 ) А = 8 1 6 3 5 7 4 9 2
Теперь можно построить матрицу, содержащую четыре матрицы: >> В=[А А+1б;А+32 А+16; В =
40
1.4. Формирование векторов и матриц 8
1
о
С,
4 40 35 36
9 33 37 41
6 7 2 38 39 34
24 19 20 24 19 20
17
21 25 17 21 25
22 23 18 22 23 18
Полученная матрица имеет уже размер 6 х 6. Вычислим сумму се столбцов: >> sum(В) ans = 126 126
126
126
126
126
Любопытно, что она одинакова для всех столбцов. А для вычисления суммы строк используем команду >> s u m ( В . ' ) ans = 78 78 78
174
174
174
Здесь запись в. ' означает транспонирование матрицы в, то есть замену строк столбцами. На этот раз сумма оказалась разной. Это отвергает изначально возникшее предположение, что матрица В тоже является магической. Для истинно магической матрицы суммы столбцов и строк должны быть одинаковыми: >> D = m a g i c ( 6 )
D = 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 3 4 12 14 16 4 36 29 13 18 11 >> sum (D) ans = 111 111 1 11 111 >> sum (D. ' ) ans = 111 111 111 111
111
111
111
111
Более того, для магической матрицы одинаковой является и сумма элементов по основным диагоналям (главной диагонали и главной антидиагонали). 1.4.3. У д а л е н и е с т о л б ц о в и с т р о к м а т р и ц Для формирования матриц и выполнения ряда матричных операций возникает необходимость удаления отдельных столбцов и строк матрицы. Для этого используются пустые квадратные скобки [ ]. Проделаем это с матрицей м: » М=[1 2 3; 4 5 6; 7 8 9] М= 1 2 3 4 5 6 7 8 9
Удалим второй столбец, используя оператор : (двоеточие): 41
Глава 1. Начало работы с MAT LAB »
М(:,2)=[
]
М = 1
3
4
б
7
9
А теперь, используя оператор : (двоеточие), удалим вторую строку: » м
М ( 2 , :) = [ ] = 1
3
7
9
1.5. О п е р а ц и и с р а б о ч е й о б л а с т ь ю и т е к с т о м с е с с и и 1.5.1. Дефрагментация рабочей области По мере задания одних переменных и стирания других рабочая область перестает быть непрерывной и начинает содержать «дыры» и всякий «мусор». Это рано или поздно может привести к ухудшению работы системы или даже к нехватке оперативной памяти. Подобная ситуация становится возможной, если вы работаете с достаточно большими массивами данных. Во избежание непроизводительных потерь памяти при работе с объемными данными (а векторы, матрицы и массивы относятся к таковым) следует использовать команду pack, осуществляющую дефрагментацию рабочей области. Эта команда переписывает все определения рабочей области на жесткий диск, очищает рабочую область и затем заново считывает все определения без «дыр» и «мусора» в рабочую область. 1.5.2. Сохранение рабочей области сессии Переменные и определения новых функций в системе MATLAB хранятся в особой области памяти, именуемой рабочей областью. MATLAB позволяет сохранять значения переменных в виде бинарных файлов с расширением .mat. Для этого служит команда save, которая может использоваться в ряде форм: save fname — записывается рабочая область всех переменных в ф а й ^ бинарного формата с именем fname.mat; save fname X — записывает только значение переменной х; save fname x Y z — записывает значения переменных X, Y и Z. После параметров команды save можно указать ключи, уточняющие формат записи файлов: -mat — двоичный МАТ-формат, используемый по умолчанию; - a s c i i — ASCII-формат единичной точности (8 цифр); - a s c i i -double — ASCII-формат двойной точности (16 цифр); - a s c i i -double -tabs — формат с разделителем и метками табуляции; V4 — запись МАТ-файла в формате версии MATLAB 4; -append — добавление в существующий МАТ-файл. Возможно использование слова save и в формате функции, а не команды, например: save('fname','var1','var2') 42
1.5. Операции с рабочей областью и текстом сессии В этом случае имена файлов и переменных задаются строковыми константами. Следует отметить, что возможности сохранения всего текста сессии, формируемой в командном режиме, команда save не дает. И не случайно! Дело в том, что сессия является результатом проб и ошибок и ее текст наряду с правильными определениями содержит сообщения об ошибках, переопределения функций и переменных и много прочей «шелухи». Необходимости сохранять такое «творчество» обычно нет. А если есть — для этого служит команда diary, описанная чуть ниже. Вы можете также воспользоваться редактором и отладчиком, которые позволяют (после отладки программы) получить документ в корректной форме без синтаксических и иных ошибок и сохранить его в виде файла с расширением .т текстового формата. 1.5.3. Ведение дневника Мы отмечали, что сессии не записываются на диск стандартной командой save. Однако, если такая необходимость есть, можно воспользоваться специальной командой для ведения так называемого дневника сессии: diary f ile_name — ведет запись на диск всех команд в строках ввода и полученных результатов в виде текстового файла с указанным именем; diary off — приостанавливает запись в файл; diary on — вновь начинает запись в файл. Таким образом, чередуя команды diary off и diary on, можно сохранять нужные фрагменты сессии в их формальном виде. Команду diary можно задать и в виде функции diary (' f i l e ' ) , где строка ' f i l e ' задает имя файла. Следующий пример поясняет технику применения команды diary: >> diary myfile.m >> 1 + 2 ans = 3
>> diary off >> 2 + 3 ans = 5 >> diary on >> sin (1) ans = 0.8415 >> diary off Нетрудно заметить, что в д а н н о м примере первая о п е р а ц и я — 1 + 2 = 3 — будет з а п и с а н а в файл myfile.m, вторая — 2 + 3 = 5 — не будет записана, третья операция — s i n ( l ) = 0.8415 — снова будет записана. Т а к и м образом, будет создан Script-файл следующего вида:
1+2 ans = 3 diary off sin (1) ans = 43
Глава 1. Начало работы с MATLAB 0.8415 diary off Он приведен в том виде, как записан, то есть с пробелами между строк. Одна из распространенных ошибок начинающих пользователей — попытка запустить подобный файл в командной строке указанием его имени: >> myfile ??? ans = Missing variable or function. Error in ==> C:\MATLAB\bin\myfile.m On line 3 ==> ans = Обычно это приводит к ошибкам, так как данный файл — это просто текстовая запись команд и результатов их выполнения, не проверяемая на корректность и содержащая ряд строк, ошибочных с позиций синтаксиса языка программирования MATLAB — например, выражения ans =. Зато команда type позволяет просмотреть текст такого файла со всеми записанными действиями: >> type
myfile
1 +2 ans = 3 diary
off
sin(l) ans =
0.8415 diary off Во избежание отмеченных казусов рекомендуется записывать файл с расширением, отличным от .т, например .txt. Это позволит встраивать подобные текстовые файлы дневника сессии в документы, содержащие ее описание. 1.5.4. З а г р у з к а р а б о ч е й о б л а с т и с е с с и и Для загрузки рабочей области ранее проведенной сессии (если она была сохранена) можно использовать команду load: load f name . . . — загрузка ранее сохраненных в файле fname.mat определений со спецификациями на месте многоточия, подобными описанным для команды save (включая ключ -mat для загрузки файлов с расширением .mat обычного бинарного формата, используемого по умолчанию); load (' f name ' , . . . ) — загрузка файла fname.mat в форме функции. Если команда (или функция) load используется в ходе проведения сессии, то произойдет замена текущих значений переменных теми значениями, которые были сохранены в считываемом МАТ-файле. Для задания имен загружаемых файлов может использоваться знак *, означающий загрузку всех файлов с определенными признаками. Например, load demo'.mat означает загрузку всех файлов с началом имени demo, например demo1, demo2, demoa, demob и т. д. Имена загружаемых файлов можно формировать с помощью операций над строковыми выражениями. 44
1.5. Операции с рабочей областью и текстом сессии 1.5.5. Работа с р е д а к т о р о м / о т л а д ч и к о м М-файлов Любая последовательность команд может быть оформлена в виде М-файлов. Для этого можно использовать любой текстовый редактор, поддерживающий формат ASCII-файлов — например WordPad или Word. Для профессиональной подготовки, редактирования и отладки М-файлов служит специальный редактор системы MATLAB. Он выполнен как типичное приложение под Windows. Редактор можно вызвать командой e d i t из командной строки MATLAB или командой New • M-file из меню File. После этого в окне редактора можно создавать свой файл, пользоваться средствами его отладки и запуска. Для запуска файла его необходимо записать на диск, используя команду Save as в меню File редактора. На рис. 1.5 приведен пример работы с редактором/отладчиком. Задано вычисление выражения 2 + 3 и построение графика синусоиды с помощью функции plot. Окно с текстом этого простого файла в окне редактирования и отладки представлено справа на фоне окна MATLAB. Подготовленный текст файла (это простейшая и первая наша программа на языке программирования MATLAB) надо записать на диск, например в виде файла demo. Для этого используется обычная команда Save As в окне редактора. Jflli<J
МОИ «окунет
•J
~
Do*
'•;•. Г
""
•; ••' : Щ i ?
TtDreciwy. С WAlLAPe,^
File
Edit
View
Text
Debug
" 3 . ,
Breakpoints
Web
Wmdm
Рис. 1.5. Выполнение т-файла прямо из окна редактора/отладчика этих файлов После записи файла на диск можно заметить, что команда Run в меню Debug редактора становится активной (до записи файла на диск она пассивна) и позволяет произвести запуск файла. Запустив команду Run, можно наблюдать исполнение М-файла — в нашем случае это вычисление числа 5 и построение графика синусоиды в окне, показанном на рис. 1.9 слева. Редактор имеет и другие важные отладочные средства — он позволяет устанавливать в тексте файла специальные метки, именуемые контрольными точками. При их достижении вычисления приостанавливаются и пользователь может оценить промежуточные результаты вычислений (например, значения переменных), проверить правильность выполнения циклов и т. д. Наконец, редактор позволяет 45
Глава 1. Начало работы с MAT LAB записать файл в текстовом формате и увековечить ваши труды в файловой системе MATLAB. После сохранения М-файла редактор/отладчик можно закрыть. При этом созданный М-файл можно запустить уже из командной строки MATLAB. Редактор/отладчик М-файлов выполняет синтаксический контроль текстов (листингов) файлов по мере ввода текста. При этом используются следующие цветовые выделения: • ключевые слова языка программирования — синий цвет; • операторы, константы и переменные — черный цвет; • комментарии после знака % — зеленый цвет; • символьные переменные (в апострофах) — зеленый цвет; • синтаксические ошибки — красный цвет. Благодаря цветовым выделениям, а точнее их учету программистом, вероятность синтаксических ошибок резко снижается.
1.6. Введение в графику системы MATLAB 1 . 6 . 1 . Особенности графики системы MATLAB С понятием графики связано представление о графических объектах, имеющих определенные свойства. В большинстве случаев об объектах можно забыть, если только вы не занимаетесь объектно-ориентированным программированием задач графики. Связано это с тем, что большинство команд высокоуровневой графики, ориентированной на конечного пользователя, автоматически устанавливает свойства графических объектов и обеспечивает воспроизведение графики в нужной системе координат, палитре цветов, масштабе и т. д. На более низком уровне решения задач используется ориентированная на опытного программиста дескрипторная графика (Handle Graphics), при которой каждому графическому объекту в соответствие ставится особое описание — дескриптор, на который возможны ссылки при использовании графического объекта. Дескрипторная графика позволяет осуществлять визуальное программирование объектов пользовательского интерфейса — управляющих кнопок, текстовых панелей и т. д. Команды дескрипторной графики могут использоваться в высокоуровневой графике, например, для удаления осей, изменения цвета и т. д. в уже построенных графических объектах. Эти обширные возможности делают графику MATLAB одной из лучших среди графических подсистем систем компьютерной математики (СКМ).
1.6.2. Построение графика функций одной переменной В режиме непосредственных вычислений доступны практически все возможности системы. Широко используется, например, построение графиков различных функций, дающих наглядное представление об их поведении в широком диапазоне изменения аргумента. При этом графики строятся в отдельных масштабируемых и перемещаемых окнах. Возьмем вначале простейший пример — построение графика синусоиды. Следует помнить, что MATLAB (как и другие СКМ) строит графики функций по ряду точек, соединяя их отрезками прямых, т. е. осуществляя линейную интерполяцию 46
1.6. Введение в графику системы MAT LAB функции в интервале между смежными точками. Зададим интервал изменения аргумента х от 0 до 10 с шагом 0,1. Для построения графика достаточно вначале задать вектор х=0:0.1:10, а затем использовать команду построения графиков p l o t (sin (x) ). Это показано на рис. 1.6. Само задание и выполнение команд видно в левом нижнем углу окна системы MATLAB.
Be £d^ y»w insert: Jock Wnidow | ЦЫр " ,.
^
0.8 / 0.6- / 0.4- / 0.2- 1 0 •0.2 -0.4 -0.6 -0.8 j-
£iinling and Exportn ig
/
\
0
Рис. 1.6. Пример построения графика синусоиды Вектор х задает интервал изменения независимой переменной от 0 до 10 с шагом 0,1. Почему взят такой шаг, а не, скажем, 1? Дело в том, что p l o t строит не истинный график функции sin(x), а лишь заданное числом элементов вектора х число точек. Эти точки затем просто соединяются отрезками прямых, то есть осуществляется кусочно-линейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10—20 точках она будет выглядеть состоящей из отрезков прямых. Графики MATLAB строит в отдельных окнах, называемых графическими окнами. С первого взгляда видны отличия графического окна, показанного на рис. 1.6, от командного окна MATLAB. В главном меню окна появилась позиция Tools (Инструменты), которая позволяет вывести или скрыть инструментальную панель, видимую в верхней части окна графика на рис. 1.6. Средства этой панели (мы их рассмотрим полнее в дальнейшем) позволяют легко управлять параметрами графиков и наносить на них текстовые комментарии в любом месте. 1.6.3. П о с т р о е н и е в о д н о м о к н е г р а ф и к о в н е с к о л ь к и х ф у н к ц и й Пойдем дальше и попытаемся построить графики сразу трех функций: sin(x), cos(x) и sin(x)/x. Прежде всего, отметим, что эти функции могут быть обозначены переменными, не имеющими явного указания аргумента в виде у(х): >> y l= s i n ( х ); y 2 = c o s ( х ) ;
y3 =s i n (х)/х; 47
Глава 1. Начало работы с MAT LAB Такая возможность обусловлена тем, что эти переменные являются векторами — как и переменная х. Теперь можно использовать одну из ряда форм команды p l o t : plot(al,f1,a2,f2,a3, f 3 ,. . . ) ,
где a l , a2, a3, ... — векторы аргументов функций (в нашем случае все они — х), а fl, f2, f3, ... — векторы значений функций, графики которых строятся в одном окне. В нашем случае для построения графиков указанных функций мы должны записать следующее: >>
p l o t (x, y l , х, у 2 , х , уЗ)
Можно ожидать, что MATLAB в этом случае построит, как обычно, точки графиков этих функций и соединит их отрезками линий. Но, увы, если мы выполним эти команды, то никакого графика не получим вообще. Не исключен даже сбой в работе программы. Причина этого казуса уже обсуждалась в предыдущем уроке — при вычислении функции y 3 = s i n ( x ) / x , если х представляет собой массив (вектор), то нельзя использовать оператор матричного деления /. Этот пример еще раз наглядно указывает на то, что чисто поверхностное применение даже такой мощной системы, как MATLAB, иногда приводит к досадным срывам. Чтобы все же получить график, надо вычислять отношение sin(x) к х с помощью оператора поэлементного деления массивов ./. Этот случай поясняет рис. 1.7. ;.•:;•;«•.• :' ••.•.•••••.• = я Э Ш Ш ^ Ш 1 г ® Й £ = . : л . : Wfnsk>s4
О
№=-1 5:0
Н*.-!р •
Ц, k"J f ' ; Ц
ЯГ :
••
j ?
.••
•
j Current Directory; j с WATLAB65Wk
1:15:
y1=sm(x); y2=cos(x); y3=sin(x)./x; Warning: Divide by zero. (Type "warning off MATUVB.divideByZero" to suppress this warning.) plot(x,y1 ,x,y2,x,y3) File Edit View Inset Tools Winders Help
-0.5 i
Рис. 1.7. Построение графиков трех функций Обратите внимание на то, что хотя на этот раз MATLAB построила графики всех трех функций, в окне командного режима появилось предупреждение о делении на 0 — в момент, когда х = 0 — «Warning: Divide by zero.». Таким образом p l o t «не знает» о том, что неопределенность sin(x)/x = 0/0 устранимая и даст 1. Это недостаток практически всех систем для численных вычислений. 48
1.6. Введение в графику системы MATLAB 1.6.4. Г р а ф и ч е с к а я ф у н к ц и я f p l o t Разумеется, MATLAB имеет средства для построения графиков и таких функций, как sin(x)/x, которые имеют устранимые неопределенности. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды — fplot: f p l o t ( ' f (x) ' ,
[xmin
xmax])
Она позволяет строить график функции f(x), заданной в символьном виде, в интервале изменения аргумента х от xmin до xmax без фиксированного шага изменения х. Один из вариантов ее применения демонстрирует рис. 1.8. Хотя в процессе вычислений предупреждение об ошибке (деление на 0) выводится, но график строится правильно, при х — 0 sinx/x=l. Обратите также внимание на две используемые команды: c l e a r (очистить) — очистка графического окна и g r i d on (сетка) — включение отображения сетки, которая строится пунктирными линиями. ;;:;;::.:.:••:•.;.;;.:
ШЕШЗШШ&Т;,:,
О с * | .X л- Ш, •• '
,
:
'.::..
• ;:
. .
.
:
^ ш * 1
*? ! Current Directory; С WATLAB65\work
:lear, fplot('sin(*)ftf.',[-1 5,15)),grid on
--1.D.1 * | Рйе
Edit
View
Qpeft...
Insert
Tods
Window
He!p
Ctri-Ю
Ctose
Ctri+W
Save
Crxi+5
Save As... Export...
Г"\"Г
Preferences... Page Setup... Print Setup... Print Preview... Print,.,
СЫ+Р
02
0
-0.2
•J •Фа
Рис. 1.8. Построение графика sin(x) /x функцией fplot На рис. 1.8 представлено также меню File (Файл) окна графики. Нетрудно заметить, что оно содержит типовые файловые операции. Однако они относятся не к файлам документов, а к файлам графиков. В частности, можно присваивать имя записываемым на диск рисункам с графиками. Позже мы более подробно рассмотрим возможности различных графических команд. Мы также покажем, как можно задавать определенный цвет и стиль линий, как менять вывод координатных осей, наносить на графики различные текстовые надписи и выполнять множество иных операций форматирования графиков для придания им более наглядного вида, соответствующего требованиям пользователя. Мы также обсудим множество новых форм применения графических команд, резко расширяющих их возможности построения графиков всех мыслимых типов. 49
Глава 1. Начало работы с MATLAB 1.6.5. П о с т р о е н и е т р е х м е р н ы х г р а ф и к о в Столь же просто обеспечивается построение графиков сложных поверхностей. Надо только знать, какой командой реализуется тот или иной график. Например, для построения графика поверхности и ее проекции в виде контурного графика на плоскость под поверхностью достаточно использовать следующие команды: >> [X,Y]=meshgrid (-5:0.1:5) ; >> Z=X.*sin(X+Y); >> meshc(X,Y,Z) Окно с построенным графиком показано на рис. 1.9. Раньше пришлось бы убить много дней на составление и отладку нужной для построения такого графика программы. В MATLAB же можно в считанные секунды изменить задающую поверхность функцию ( , ) и тут же получить новый график поверхности с окраской, в данном случае заданной вектором , и с ее проекцией на плоскость X . На рис. 1.9 показано также открытое меню el (Помощь) окна трехмерной графики. Ffe £dtl ^eiw Jnssrt
j o cs- Q a, \
\
Рис. I. . Окно с графиками поверхности и ее проекции на плоскость под фигурой Мы ограничимся этими примерами построения графиков как достаточно простыми и типовыми. Из них следует важный вывод — для решения той или иной частной задачи надо знать соответствующие команды и функции. В этом вам помогут как данная книга, так и справочная система MATLAB. 1.6.6. В р а щ е н и е г р а ф и к о в м ы ш ь ю Можно поворачивать построенную фигуру мышью и наблюдать ее под разными углами. Рассмотрим эту возможность на примере построения логотипа системы MATLAB — мембраны. Для этого, введя команду logo, получим исходный график, представленный на рис. 1.Ю.
50
1.6. Введение в графику системы MATLAB .-±11 .х
I. . . к м
Puc. /./0. Построение мембраны — логотипа системы MATLAB Для вращения графика достаточно активизировать последнюю справа кнопку панели инструментов с изображением пунктирной окружности со стрелкой. Теперь, введя курсор мыши в область графика и нажав левую кнопку мыши, можно круговыми движениями заставить график вращаться вместе с обрамляющим его параллелепипедом (рис. 1.11).
Puc. /.//. График, после вращения трехмерной фигуры мышью Любопытно, что в версии MATLAB 6 вращать можно и двумерные графики, наблюдая поворот плоскости, в которой они построены. Никакого программирования такое вращение не требует.
51
Глава 1. Начало работы с MATLAB 1.6.7. Контекстное меню графиков Для переключения в режим редактирования графика нужно щелкнуть на кнопке Edit Plot (Редактировать график) с изображением курсора-стрелки. В этом режиме графиком можно управлять с помощью контекстного меню, вызываемого щелчком правой кнопки мыши. Вид этого меню при курсоре, расположенном в области трехмерного графика вне построенных трехмерных графических объектов, показан на рис. l.l I. С помощью мыши можно также выделить график. Щелчок левой клавишей выводит рамку вокруг рисунка (см. рис. l.l I). Теперь на график можно наносить стрелки, поясняющие надписи (кнопка с буквой А) и т. д.
1.7. Основы форматирования графиков 1.7.1. Форматирование двумерных графиков Графики в системе MATLAB строятся обманчиво просто. Связано это с тем, что многие свойства графиков установлены по умолчанию. К таким свойствам относятся вывод или скрытие координатных осей, положение их центра, цвет линии графика, ее толщина и т. д. и т. п. Позже будет показано, как свойства и вид графиков можно менять в широких пределах с помощью параметров команд графики. Однако этот путь требует хорошего знания дет&пей языка программирования и особенностей дескрипторной графики системы MATLAB. В новых версиях MATLAB 6.* для изменения свойств графиков (их форматирования) используются принципы визуального контроля за стилем (видом) всех объектов графиков. Это позволяет легко, просто и наглядно придать графикам должный вид перед записью их в виде файлов на диск. Можно сказать, что в этой части реализованы отдельные принципы визуально-ориентированного программирования графических средств. Здесь мы рассмотрим возможности форматирования графиков, которые, образно говоря, лежат на поверхности. Систематизированное описание интерфейса систем MATLAB 6.*, в том числе интерфейса графических окон, дается в следующей главе.
1.7.2. Форматирование линий графиков MATLAB имеет возможность легко настраивать и корректировать свойства графиков с помощью специальных средств. В новых версиях MATLAB они существенно изменены. Так, в предшествующих версиях MATLAB 5.* для настройки (форматирования) графиков использовался специальный редактор свойств — Graphics Properties Editor (Редактор свойств графики). Его можно было вызвать из меню File окна командного режима MATLAB с помощью команды Show Graphics Properties Editor (Показать редактор свойств графики). В новых версиях MATLAB форматирование графиков стало более строгим и удобным. При этом ранее упомянутый редактор свойств графиков перестал так именоваться и команда Show Graphics Properties в новых версиях отсутствует. Ее заменяют команды Figure Properties (свойства фигуры) и Axis Properties (свойства осей) со всеми необходимыми настройками. При построении графиков появляется графическое окно. Иногда оно бывает скрыто ранее имеющимися окнами как системы MATLAB, так и других работаю52
1.7. Основы форматирования
графиков
щих в среде Windows 95/98/Me/2000/NT4 приложений. Если вы не увидели графика, заданного для построения, то поишите его в списке открытых окон (приложений), нажимая клавиши Alt + Tab, и выберите из списка нужное окно. Окна графики имеют изображение логотипа системы MATLAB. По умолчанию они выводятся с панелью инструментов с рядом кнопок вполне очевидного назначения. Щелкнув на кнопке Edit Plot (Редактировать график) в панели инструментов окна графики и по графику, можно заметить, что график выделился: вокруг него появилась рамка. Теперь, указав курсором мыши на тот или иной объект графика и щелкнув снова левой клавишей, можно наблюдать выделение объекта и появление окна его форматирования. Например, указав в режиме редактирования мышью на линию графика (и дважды быстро щелкнув левой клавишей), можно увидеть окно форматирования линий графика, показанное на рис. 1.12 слева. Часть окна графики с выделенным графиком видна справа. Обратите внимание на появление на линии графика ряда черных квадратиков — они используются для указания курсором мыши именно на линию графика, а не на другие объекты.
Da;;-" i » plot(x,si
L: С?
а «§ ' ! \ A / /
JS Э ':•
11-—
Edti Properte is for, Data Stye l Mb | -Ln ie Propere tis 1 U n a s t y e l [sod il n il e (-) Line Width |эо 1
Color H B Yellow Matienla Cyan
i
. Market Properties . Sfjie JNo mait,ei tnorie)
л1 i l 1;
•Hit
п
-
-. '
J^j i ZJ j jj _^j
S
™ 1 Edge color inherited tamo) No colo, (none)
Green •
- Example
While Black
I';
•
: . V t o
OK
Cancel
Appy l jp ImTiariiate apply
Help
Ready
•
1
•Г
Рис* 1.12. Окно графина (справа) и окно форматирования линий (слева) В этом окне открыта главная для операций форматирования вкладка — Style (Стиль). Она устанавливает стиль отображения линии, то есть ее вид (например, сплошная линия или пунктирная), ширину и цвет, а также параметры маркеров, отмечающих опорные точки графиков. Полезно знать, что кнопка Apply (Применить) позволяет применить сделанные установки к графику до закрытия окна диалога. Кнопка ОК вводит сделанные установки и закрывает окно диалога. Назначение других кнопок очевидно. 1.7.3. Ф о р м а т и р о в а н и е м а р к е р о в о п о р н ы х т о ч е к В нашем случае опорные точки задаются ранжированной переменной х, имеющей ряд значений от —15 до +15 с шагом 0.1. Эти точки появляются на графике,
53
Глава 1. Начало работы с MAT LAB если в поле свойств маркера Marker Properties (Свойства маркера) из меню Style (Стиль) выбрать стиль маркера. На рис. 1.13, к примеру, показано построение графика с маркерами опорных точек в виде окружностей.
Dc*
• в -
-
*
; Orrent Dieciwy j £ VtmlabRi 2\wotk
d,:1
£(irt Properties for: jime : Oaia Style j info j . r Line Properties..--_( • . Line style jsoiia lin-> e .. 1 LtnewlOtTi JO 5 ..- • Color [Blue
•rj J
Marker frooerBes Style Circle»)
i
_—J
Jd;| » 40 _^] :! Ed[ie color Red fellow
d d d
£<M iJiew Intea fi? H Ш
* S О
A / /
•
0
1
2
Э
4 5
у
/ E
V *'
. i
Puc. 1.13. Пример задания параметров маркеров и построения графика с ними Можно задавать размеры маркеров, цвет их закраски и цвет окантовки. Так, на рис. 1.13 при его просмотре на экране цветного дисплея маркеры имеют вид окружностей с условным размером 4, цветом окантовки красным и цветом закраски желтым. Маркеры можно задавать в виде окружностей, прямоугольников, крестиков, ромбиков и так далее. Применение маркеров делает графики более наглядными. Но, к сожалению, в графиках с маркерами вы не сможете использовать возможности Open GL.
Л Л Л. Форматирование линий и маркеров для графика нескольких функций Если строится график нескольких функций, то можно форматировать линии и маркеры каждой кривой отдельно. Выполним следующие команды: >> х=-6:.1:6; >> plot(х,sin(x),x,sin(x) . A 3,x,sin(x) . Л 5 ) ; Рис. 1.14 показывает пример такого форматирования для графика, полученного исполнением этих команд. Кстати, обратите внимание на то, как заданы степени синуса. Записать эти выЛ A ражения в виде з 1 п ( х ) 2 и c o s ( x ) 2 будет грубейшей ошибкой, поскольку х Л здесь вектор. Операторы . в данном случае дают поэлементное возведение в степень, что и нужно для построения графиков этих функций. 1.7.5. Форматирование осей графиков Аналогично описанным выше правилам выполняется форматирование и других объектов графиков. Например, указав курсором мыши на оси графиков (на
54
1.7. Основы форматирования
графиков
&t E* У*и Jriseft loofe i&nfaw beb iHt
A
Г.'.; •. v ' ; " 0.8 ...J-it I
f
h
^:: •'." : 0.6
/
/
, Д> Э
"
•
•'
••
".'.
\
%
Oi
U l l
\ \°
-0 2
•••••••••':••...
\.. . h * I P 4 }\ a ---** %\ //? . «л. 1 / ^ "
-L-\ %\
/ Ц " :; \ 0.4 / /' r/r » \ \\ .-'-• .0.2 ,« "•• \
•-'. .':-;.
• •• '
i • A f -•nif 14
-0.4 (16
a?
\\
\
-D.8
V
?* / \
't ТГ I*» \J/Jt-/
Puc. 1.14. Пример форматирования для графика трех функций них тоже есть метки в виде черных квадратиков) и дважды щелкнув левой клавишей мыши, можно увидеть появление окна форматирования объектов дескрипторной графики Property Editor (Редактор свойств, Графический редактор свойств) (рис. 1.15), настроенного на форматирование осей. Окно графического редактора свойств дескрипторной графики имеет множество вкладок, настройки которых довольно очевидны, и ничто не мешает читателю поэкспериментировать с ними несколько минут. Это позволит понять простоту и одновременно высокую эффективность средств форматирования объектов графи-
h.. . .-,i . • . >., • ' D t* : • : в
и • ?
••.«•..- «[•им--*, Г
.-...•-.i - i
zi A
ЕДЯ Properties for jaxes
|—
LabaJs W Auto
z
V
X
Umits P Auto 1
'
P Alto
1
i i.o,a.£ c» u j j j * i" » ' *
11.31110]
P Auto
5
ft Lin
ar
(—
'
_J ^
AuIt>
d
1
i
Scale <• Linear " Log
Г Reverse
i-rtd Г кии*,
<~ Log
(? Noirnal С йвувгве
^ Line t" LflQ
С Reverse
Г Sho\
Set axes auto shape Set light limits
•
'
"
•
"
•
O
•
R
e
a
d
=
K
"
:
:
.
'
|
.
•
•
•
=
C
•
•
a
i
\ r: i
c
e
!
Apply
mmedlaie apply
j
'
-J
;
J
y
2 4
Halp
:
3
4
S
6
:
7 • '
В
9
10
'
Puc. 1.15. Пример форматирования осей графика 55
Глава 1. Начало работы с MATLAB ки. Например, вы можете задать линейный или логарифмический масштаб осей (вкладка Scale (Масштаб), открытая на рис. 1.33), нормальное или инверсное направление осей (X, У, а в случае трехмерных графиков и Z), показ сетки (параметр Grid Show), изменить стиль осей и цвета фона (вкладка Style (Стиль)), нанести у осей надписи (вкладка Label (Ярлык)) и прочее. Рис. 1.16 показывает график синусоиды после некоторых операций по форматированию осей. Здесь (кстати, как и на рис. 1.15) задано построение сетки Grid по осям X и Y, построение надписей (просто буквы X и Y) по координатным осям и построение титульной надписи. Заодно на рис. 1.34 показано в открытом виде меню расширенных инструментальных средств графического окна. Его команды подробно обсуждаются в следующей главе. fife ]
|
o
E(ft i
*
View Ins У
e
i
P
»
'
I
*
ZcomQut
График синусоиды
Raid «3D
0.4\ I
0.2,-
V
- оа~
~4
i -0.2 --0.4,-/-0.Б1---0.8 - •
!
* 1
0
•
7
6
5
3
2
1
Рис. 1.16. Пример построения графика синусоиды после форматирования осей Словом, с объектами графики можно сделать все что угодно! Некоторые из возможностей форматирования объектов графики мы рассмотрим позже, по мере описания типов графиков. Если компьютер оснащен должным набором шрифтог!, то надписи на графиках могут быть сделаны на русском языке — рис. 1.16 хорошо иллюстрирует эту важную для наших пользователей возможность. На нем титульная надпись сделана на русском языке. Средства форматирования надписей дают обширные возможности по выбору набора шрифтов, их стиля, размеров символов и их цвета. 1.7.6. Н а н е с е н и е н а д п и с е й и с т р е л о к п р я м о на г р а ф и к Дополнительно на график можно нанести надписи с помощью кнопки панели инструментов с буквой А. Место надписи фиксируется щелчком мыши. На рис. 1.17 показан отформатированный график с текстовым блоком, созданным таким образом в левой верхней части поля графика. Там же показано контекстное меню правой клавиши мыши, поясняющее выбор размера символов надписи (и другие возможности этого меню). Напоминаем, 56
1.7. Основы форматирования графиков
|D С* Н
в i~PT Л г / :'& 0 о
Рис. 1.17. Нанесение надписи на отформатированный
график
что это меню появляется при щелчке правой кнопки мыши на заданном объекте. В этом меню имеются все команды, доступные для данного объекта в данной ситуации. Полученную таким образом надпись можно выделить и перенести мышью в любое другое место. Рисунок 1.18 показывает процесс создания еще двух надписей с переносом их текстового блока в нужное место. Надписи сделаны с разным размером символов и разным стилем. Особенно приятно, что при задании на надписи возведения в степень знаком Л надпись на экране отображается в естественном математическом виде (степень в виде верхнего индекса). file £
JO G? В Ш |рГ A /• / \ & & Q Графики ряда функций
Ось абС14исс
Рис. 1.18. Окончательно отформатированный
график трех функций 57
Глава 1. Начало работы с MATLAB На рис. 1.18, в частности, показано задание надписей разным стилем, а также задание стрелки с помощью соответствующей кнопки панели инструментов. Это стрелку в режиме редактирования графика можно перемещать и вращать мышью, а также менять ее длину. Можно также наносить на график и обычные линии (без стрелки). 1.7.7. П о с т р о е н и е л е г е н д ы и ш к а л ы ц в е т о в на г р а ф и к е Дополнительно можно изменить размеры графика (см. меню Tools (Инструменты) и его команды Zoom In (Увеличить) и Zoom Out (Уменьшить)), начать поворот графика мышью (команда Rotate 3D), добавить отрезок прямой или иной графический примитив (подменю Add) и подключить к графику легенду — пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него. Поскольку наш график содержит три кривые, то легенда представляет собой обозначение этих трех линий в правом верхнем углу рисунка (рис. 1.19). Каждая линия имеет тот же цвет, что и на графике (и тот же стиль). Возможен также вывод шкалы цветов. f> £.dt V«w n i sert 1сю1( ^i^dsw btlri ', ^ а о У A ^ / ;« /->
Рис. 1.19. График трех функций с легендой и шкалой цветов Следует еще раз отметить, что все описанные возможности форматирования графиков доступны и программным способом, путем задания соответствующих графических команд, параметров и примитивов. Например команда t e x t (x, у, ' l e g e n d ' ) позволяет задать надпись ' l e g e n d ' с началом, имеющим координаты (х,у). Если после первого апострофа перед текстом поместить параметр \ l e f t a r r o w , то надпись (легенда) появится после стрелки с острием, обращенным влево. Аналогично, параметр \ r i g h t a r r o w после надписи задает вывод стрелки после надписи с острием, обращенным вправо. Эта возможность позволяет помечать не только кривые, но и отдельные точки на них. Возможно также применение команды l e g e n d ( ' s i ' , ' s 2 ' , . . . ) , выводящей легенду обычного вида — отрезки линий графиков с поясняющими надписями ' s i ' , ' s2 ' и т. д. 58
1.7. Основы форматирования
графиков
1.7.8. П е р е м е щ е н и е графика в графическом окне Обычно график занимает фиксированное положение в центре графического окна. Однако в режиме редактирования графиков, когда курсор мыши находится в области графика, в контекстном меню правой клавиши мыши есть команда Unlock Axes Position (Отключить позиционирование осей). Она снимает фиксацию положения координатных осей графика и позволяет двигать его мышью вместе с осями. Это иллюстрирует рис. 1.20. . ... ... 1D 1* Иm i A » /
. " | ~ •vT\\ "^ 0.6- / 1 7 1, °l 1 // Dt
\\\ \\
>
^ datai ...j tl^t^2 -1 da
" yf I ;! ] / /,
s
\ \\ \ •\
3
•0.2,-0.4 L •0 6•OB,_ J.
1 // I
1 Г\\ 'V7 \\\ 'f; \ \^ i \ \\ l/ / \\l \ \i // \| 1 —U
o
4
0
3
D
"
.
£o» -
\\ \\\
s
«send
\V \ \\ \v \ \!
"
•Ж
jJ
•
/
•
•
•
•
'
III
•
-
,
•
•
•
•
:
1
•
"
:
0
\
I
Рис. 1.20. Пример перемещения графика Интересно, что при перемещении графика его легенда и цветовая диаграмма остаются на прежнем месте.
1.7.9. Применение графической «лупы» На панели инструментов есть кнопки с изображением лупы и знаками + и —. С их помощью можно исполнять команды Zoom In (+) (Увеличить) и Zoom Out (-) (Уменьшить). Это позволяет увеличивать или уменьшать масштаб просмотра изображения. При этом команда Zoom In интересна еще одной возможностью — с ее помощью можно выделять часть графика перемещением мыши с нажатой левой клавишей (рис. 1.21). Область выделения отмечается прямоугольником из тонких точечных линий. Отпустив левую клавишу мыши, можно наблюдать построение выделенной части графика на всем окне (рис. 1.22). С помощью команды Zoom Out можно восстановить график в прежнем масштабе. Таким образом реализуется графическая «лупа».
1.7.10. Работа с камерой ЗЭ-графики В отличие от двумерных (2D) графиков форматирование трехмерных графиков содержит ряд дополнительных возможностей. Покажем их на простом примере построения ЗЭ-графики с помощью следующих простых команд: 59
Глава 1. Начало работы с MATLAB » Z=peaks(40); >> mesh(Z); Здесь первая команда создает массив точек поверхности с помощью одного из ряда встроенных в ядро системы MATLAB готовых описаний таких поверхностей. Вторая команда просто строит эту поверхность по опорным точкам с использованием интерполяции для промежуточных точек. Таким образом создается цветная каркасная поверхность, как бы сотканная из разноцветных проволок. На рис. 1.23 показано построение этой поверхности вместе со специальной панелью инструментов трехмерной графики, названной в оригинале Camera (Камера). Efe Е * View |nse(t Jools \^dow ЦеЬ
jo cs a &\ >< А г / ,> э о
Рис. 1.21. Пример выделения части графика
j o с* у a
>t А г / •>•>
a
0.25
/
'
/
/
0.2 I
015
1
01
.
t
a
.
;
/ i ;
1
1 j
0 05 0
/ /
•0 05
'
•0!
i
-0 15
l
/ /
-0 2 /
'
•'
l
/ '
-0.25
Рис. 1.22. Пример просмотра части графика 60
1.7. Основы форматирования hfc
jo
E« tS
V
графиков
look
a *
#!
it A Д
r\
г . i,
A;
V
ьо
9
Яыс. 1.23. Пример построения каркасного Зй-графика Несмотря на множество кнопок пользование панелью инструментов 3D-rpaфики достаточно просто, если представить себе, что вы смотрите на предмет через объектив фотокамеры. Наглядные рисунки на кнопках поясняют смысл их действия — это перемещение и вращение ЗО-рисунков относительно тех или иных координатных осей, включение отображения перспективы, изменение цветовой схемы и др. Рис. 1.24 показывает, что приемы форматирования двумерной графики можно использовать при работе с трехмерной графикой — вывод надписи на график, вывод легенды (кстати, теперь объемной) и шкалы цветов.
jo c* a ei 9 3»iSfce
Ж 3D
25
a]
is
ю
5
Рис. /.24. Пример форматирования трехмерного графика 61
Глава 1. Начало работы с MAT LAB Для управления положением и вращением трехмерного графика можно использовать клавиши перемещения курсора. Эффект вращения графика иллюстрирует рис. 1.25, где показан график рис. 1.24 после его поворота при нажатой клавише -к В отличие от поворота мышью (также возможного), перемещение и повороты с помощью клавиш курсора при выбранном типе перемещения дают плавное перемещение или вращение фигуры. Таким образом осуществляется анимация (оживление) трехмерной графики.
Ч Э D I 2» О
Рис. 1.25. Стоп-кадр вращения трехмерного графина Следует отметить, что скорость вращения фигур при анимации во многом зависит от скорости работы ПК, на котором установлена система MATLAB, от примененной видеокарты и ее настроек. На старых ПК она может оказаться довольно низкой.
1.8. Работа с системой MATLAB 7 1 . 8 . 1 . И н с т а л л я ц и я с и с т е м ы MATLAB 7 + Simulink 6 Новейшая система MATLAB 7 + Simulink 6 вышла на рынок летом 2004 года и пока мало известна отечественным пользователям. Поставляется новая реализация системы уже на двух CD-ROM. Файлы документации в формате PDF, которые ранее занимали третий CD-ROM, теперь выставлены на Интернет-сайте корпорации MathWorks и могут быть открыто скачаны с него. Для наших пользователей низкоскоростного Интернета это не очень удобно, поскольку эти файлы велики и их общий объем достигает многих сотен мегабайт. Для инсталляции MATLAB 7 с Simulink 6 и другими пакетами расширения достаточно установить первый CD-ROM и дождаться его автоматического запуска. После распаковки и установки файлов инсталлятора на короткое время появляется окно с эмблемой MATLAB, а затем первое окно инсталлятора (рис. 1.26). 62
1.8. Работа с системой MATLAB 7 -) Weclome to the MatWorks InstaWleelrcome to trie MatliWorks Installer. This nroaiam will install [he
MATLAH SIMULINK'
MATLAS family of products
*~ Update license without installing anything, ustnganewPLP
«iTheMathWoiks
WARNING: These programs ara protected bv copyright taws By entering Into the Software License Agreement thai follows within this installation process you will also agree to additional restrictions on : your use of these programs. Any unauthorized usSi reproduction, or distribution may result In severe civil and criminal penalties. Please note that the installer wintry to contact the MathWorks Web title Ij retrieve product version information.
Рис. 1.26. Первое окно инсталлятора системы MATLAB 7 В этом окне надо установить опцию Install для инсталляции или опцию обновления лицензии и получения кода PLP (Personal License Pasword). Этот код является группой из 20 цифр. Установим Install и нажмем мышью кнопку Next>. Появится окно для ввода данных пользователя (имени и названия организации) и, главное, кода PLP. Этот код записывается в виде длинного числа и указывается на диске при продаже MATLAB 7 или запрашивается у MathWorks по Интернету. Каждый легальный пользователь MATLAB ныне имеет свои страницы на этом Интернет-сайте с данными о лицензии, ее сроках и комплекте поставки MATLAB. С этой страницы можно получить коды PLP. Please enter your name and сопфану:
MATLABName: . SIMULINK' „Company;
• j DVP . SSPU
Please Btiteryour Personal License Password (PIP): (You snoutEi have received this via e-tnall ot (ax-.) I
iTheMaUMbrks
tfyou do not have yout PLP, click the button to get it via the Web. GetrnvPLP
Puc. 1.27. Окно инсталлятора системы MATLAB 7 для ввода данных пользователя и кода PLP Если данные введены верно, то нажатие кнопки Next> вызовет появление окна с текстом лицензии (брошюра с ним поставляется вместе с CD-ROM установки MATLAB). Если вы намерены продолжить легальную установку, вам надо ознакомиться с текстом лицензии и установить опцию Yes согласия с данными лицензии. Установка No прервет инсталляцию. Окно инсталлятора с текстом лицензии показано на рис. 1.28. Нажав кнопку Next>, можно наблюдать появление окна выбора вида инсталляции, показанного на рис. 1.29. В этом окне возможна установка одной из двух опций. Опция Typical задает типичную инсталляцию, при которой устанавливается MATLAB 7, пакет расширения Simulink 6 и все пакеты расширения, которые предусмотрены поставкой вам системы. Если вы хотите задать выборочную установку, то установите опцию Custom. 63
Глава 1. Начало работы с MATLAB •% License Agreement
ё
The MathWoiks.inc. Scftsvare License Booklel • • IMPORTANT NOTICE Read the terms and conditions of your License Agreement carefully . The License Agreement together with any applicable Addendum represents the entire agreement between you (the "Licensee") and The Milhvvorks, inc С Md in Works") concerning the Program(s) and Documentation delivered hereunder. CONTENTS DoyouaccatrttlieternieoftheHcermeaereement?
а y>..j Г
Рис. 1.28. Окно инсталлятора с текстом
лицензии
М ATI АИ SIMULINK ?•••:•,:•.:'. I •
••
'•'•'•
•
1 TheMalhWhrb
' -\
Рис. 1.29. Окно выбора вида
И
°'р
установки
При выборе типа установки Custom появляется окно, представленное на рис. 1.30. В нем нужно установить директорию, в которую устанавливается система, и пометить птичками все пакеты расширения, которые вы хотите установить. Эта возможность действует в пределах приобретенного набора расширений. Нажав кнопку Next>, перейдем к установкам, представленным в окне рис. 1.31. Здесь надо наметить, куда следует поместить ярлык запуска системы и какие файлы ассоциируются с ней. Обычно можно удовлетвориться опциями, задаваемыми по умолчанию.
Seelct o tlstmatn i n fotliar for metarlt n i n: МЛ'ПЛН SIMULINK 6 D Z-J !6 11 t1 •. 30 3.0 6.0 111 jj .
' P Aerospace Bolcksel f./ f^n.:i"(ii T I' d iC il ^ TJ{lij"tinL , [F CD Amu Rnceiae foitre PC oM m nsnceBolB co klsceklsel I • f7 control Syse tm Tooblox * Ba<:L.J 1 мт^Г 1 Рас. 1.30. Окно установки
п4
el
CanE
Hep l I
директории и выбора пакетов
расширения
1.8. Работа с системой MATLAB 7
MATLAB' SIMULINK'
Please select the option* yuu would like to use: Г~ Se1 permissions of installed files !o read-only (useful for installations on mapped or shared dnvee wtien yoii do not want. users to have wite privileges). AdaMATLA@Snorteutsto ~ P.Desktop
.
.
'
~~~—*
• ,
t
--
-• • •
•
•-.;•
• P" Pfosrams folder on Ihe Start Menu Г Quick Launch bar
«jTheMatlMbrb
• Associate file-types win tins application • P m P ,mat
:
P ,f!o
P ,p
P tndl
11
•
"
..
8
P, "*;.?! .....I
.
Ие|
Рис. 1.31. Окно размещения ярлыка системы и ассоциации с ней типов файлов Следующее окно чисто информационное — рис. 1.32. На нем просто перечисляются компоненты системы, установку которых вы задали. Если обнаружено несоответствие, то можно вернуться к предшествующему этапу установки, нажав кнопку <Васк. Иначе можно начать установку, нажав кнопку Install. Теперь вы можете расслабиться и даже выпить пару чашечек кофе. Но лучше этого не делать, а понаблюдать за установкой. Окно установки показано на рис. 1.33 и содержит постоянно обновляемую информацию о возможностях системы MATLAB + Simulink и пакетах ее расширения. Особенно важна эта инсЬормация для начинающего пользователя системой. Окно содержит линейный индика-
Cnnfi N I the n istaa lto in opo tins you have see lcted: MATLAB' emo Instaa lto in . SlMULINK' D Product Fod ler Producs t seelcted1
МАТШВ 7.0 Simulink6 0 Aerospace Blockset 1.6 Bio informatics Toolbox 1.1 CDMA Reference Blockset 1.1 Communications Blockset 3.0 Communications Toolbox 3.0 Control System Toolbox 6 0 Curve FittingTOQIDOK 1 1 1
iTheMalKWbrks
I
_e=»LJ
Puc. 1.32. Окно с информацией о выбранных компонентах системы Test AMeasure „ e n , . The Ma * Builaancl deploy GUI (rant en Sop MATLAB • Accиe PC pSug-lr r r MOP, VXiPnR 1VI, t
; •• :-•? :'""' . ' • •• Installing pradi cifilesfar MATUB омдтивя.
S
nK uiing GPIB, WSA. ТСРЛ1» en t drivers •
1
Puc. 1.33. Окно инсталляции со сменной информацией 65
Глава 1. Начало работы с MATLAB тор загрузки файлов. Кроме того, имена загружаемых файлов мелькают в левом нижнем углу окна. В какой-то момент инсталлятор предложит вам воспользоваться вторым CD-ROM. Окно с этим предложением показано на рис. 1.34 внутри окна инсталляции. Вы можете отказаться от этого этапа и установить упрощенную версию системы без детальной документации. Иначе вставьте второй CD-ROM и нажмите кнопку ОК. Инсталляция продолжится.
D 1 wrthout Instan il g
Instaling productfe ils for Wsvee lfToob lo* Puc. 1.34. Окно с предложением сменить CD-ROM По завершении инсталляции появляется информационное окно (рис. 1.35) с предупреждением о том, что установка расширения Real-Time Windows Target для работы с MATLAB в реальном масштабе времени обеспечивается в командном режиме. Дано указание, как это делать. •Л Product tmif Щигatf on Notes
Y lm iuln e lio tinal cong fiurao tin steps, set tto ifu lrtunInesstaa Ito wm toayi n Ire strq uc tinasd :do MATLAB SlMULINK'
iThcMatiMbrb
Puc. 1.35. Окно с информацией об установке Real-Time Windows Target Нажав кнопку Next>, можно завершить инсталляцию. Это подтверждается окном, показанным на рис. 1.36. В этом окне можно задать (или отменить) единственную опцию — Start MATLAB. В случае ее задания нажатие кнопки Finish приведет к запуску MATLAB, описанному ниже. В противном случае инсталляция завершается без запуска системы. Инсталляция такого сложного комплекса, как MATLAB + Simulink, дело не простое. К сожалению, иногда возможны ошибки, сопровождаемые выдачей сообщений об ошибках инсталлятора. Инсталляция при этом прерывается. Пользователю предлагается обратиться через Интернет-сайт к службе поддержки, указав номер ошибки инсталлятора и сопровождающие появление ошибки данные (например, версию продукта, тип операционной системы и т. д.). 66
1.8. Работа с системой MATLAB 7 .J Setup Complete
Setup Is comnlet». Click finish to ехй.
MATLABSIMULINK"
p5lartMATuE
iThcMathVtotks
Рис. 1.36. Окно завершения инсталляции Если пользователю предоставлен USB-ключ для доступа к программе, то перед пуском MATLAB надо установить этот ключ в свободное гнездо USB-порта. В противном случае при запуске появляется сообщение об ошибке 9. Стоит отметить, что этих проблем нет при инсталляции демонстрационных версий MATLAB 7 и версий, которые поставляются на нелегальных копиях системы. В последнем случае пользователи лишаются поддержки компании MathWorks и ее представителей в разных странах. 1.8.2. Запуск системы MATLAB 7 + Simulink 6 Запуск MATLAB 7 + Simulink 6 вполне обычный и осуществляется активизацией ярлыка системы на рабочем столе Windows (если вывод ярлыка был предусмотрен) или из рабочего меню Windows. После запуска появляется окно системы MATLAB, представленное в полностью раскрытом виде на рис. 1.37. С первого взгляда в интерфейсе системы MATLAB 7 мало что изменилось. Но это далеко не так. Сравните внимательно окно системы MATLAB 6 SPl, показанFei Edt Debug 0 1* • h S
t
a
t
c
u
t
s
.
'
j
H
o
All H e ? I
w
t
" • * • ' -
^
o
W
.
*
i
n
d
o
w
H
-
«
t
a
o
'
j
;
f
j
C
u
r
r
e
n
l
D
i
r
e
c
t
o
r
y
.
1
A
T
L
A
B
?
\
w
o
r
k
j
j
^
J
£
3
*
A
d
d
_
'
J
V
4
,
a
f
s
N
e
w
'"
Cutreril Directory |,Wqfksp(
pause(0.1); •end;
f-clc i
vrmeuobc
[••—vcmanih S vtmtmb '-ауре
vctswsiiifc-
J
JJ
Puc. /.37. Окно системы MATLAB 7 после запуска 67
Глава 1. Начало работы с MATLAB ное на рис. 1.2 с окном системы MATLAB 7. Оказывается, состав меню претерпел значительные изменения — исчезли позиции View и Web, зато появились Debug (Отладка) и Desktop (Стол). Впрочем, оказывается, что большая часть средств изменения вида интерфейса в новой версии MATLAB 7 перекочевала из старой позиции View в новую позицию Desktop — см. рис. 1.38. Меню MATLAB 7 стало контекстно-зависимым. Приведенный на рис. 1.37 и 1.38 вид меню соответствует открытой справа вкладке Current Directory. Однако, если открыть вкладку просмотра рабочего пространства Workspace, то состав меню существенно изменится (рис. 1.39). Fb i Edti Debug . Desko tp W nidow Heo l QS j I
Q
%
> №dock e a r n e d Window
1а^«ч Dietary.
Shortcuts > ! Ho 5
a
v
Й t* Si Ф "7
s
C
o
m
C
u
r
r
H
e
l
p
L
m
a
e
n
a
y
o
n
d
t
D
u
i
t
.
W
i
r
.
.
n
d
o
e
c
t
o
r
o
o
l
b
a
D
e
f
v
A
C
o
m
m
a
n
d
«
r
t
n
~
d
o
w
O
n
t
3
j
i
i
y
rv and C
w
y
P r o f i l e r
T
o
S
h
o
o
b
r
a
t
c
r
u
t
s
T
r
jjij Current Diredorv i v*«
T i t l e s
•••
' • •
!
!
!
-
:
-
e
; •
••••
;
p
n
v
t
• •
a
r
y
d
*
•
u
s
e
(
0
.
X
1
s
i
;
r
o
p
e
e
m
b
v
t
r
i
u
T
j
"
'
'
'
J
.5. Окно системы с открытой позицией Desktop меню - - i - i Fie EdK View
Graphics Debug Desktop W»dow НЫр
Slwrtciis ^jMowloAdd l£j v^*1d'sNew -
raw
,
,
-
.
. . . , . .
[
0
5
3
1
0
6
7
2
0
4
3
. .
d
o
u
t
afeflow
J
±
1
шс^ obi)> it!*3 ^Dj иl*istal 1
J
й "О и observer ork e load f wot: Id) ; vrciKew
Рис. 1.39. Окно системы с открытой вкладкой просмотра рабочего пространства Workspace 68
1.8. Работа с системой MATLAB 7 Теперь в меню появилась позиция View. Однако она не имеет ничего общего с этой позицией меню предшествующей версии MATLAB 6.5 SP1. В позиции View меню MATLAB 7 число команд резко уменьшено, и они теперь относятся к командам усовершенствованного вьювера рабочего пространства. Изменение внешнего вида интерфейса отведено командам позиции Desktop меню. Из наиболее важных нововведений надо отметить появление позиции Graphics меню. В ней реализованы новые обширные средства графики, которые будут отражены в Главе 2. Следует отметить, что если перейти к интерфейсу MATLAB только с окном командного режима, то интерфейс обеих описанных в данной книге реализаций (да и реализаций, предшествующих им) становится идентичным и предельно простым. В книгах данного трехтомника большая часть материалов дается с иллюстрациями именно в таком интерфейсе. Поэтому она пригодна практически для любой версии MATLAB, начиная с MATLAB 5.O. 1.8.3. Тестирование MATLAB на скорость вычислений Автору, видимо, как и читателю, было интересно, как изменилась скорость работы новых версий системы. Проверим это, исполнив в командной строке MATLAB 6.5 SP1 команду: >> bench Результат представлен на рис. 1.40. До сих пор старые ПК автора с процессором Pentium III в лучшем случае занимали среднее положение среди представленных в этом тесте ПК. Но на рис. 1.40 ПК автора, к большому его удовольствию, явно лидирует с большим отрывом от соперников по этой гонке. Это связано с тем, что испытания проводились на вполне современном ПК с микропроцессором Pentium 4 Hyper Threading 2,6 ГГц.
Type "hel
1
f
^ш
Relative Speed
e ты AMD Ath Intel Pc ompaq AtDhЭ212&4 HPPA- 700 75ОННГ Uacintosh G4 1.OGHz Dual SBM Pwef3 o 45( Mitt
1
|||
.TLAB Help"
и
I 1 1 1 1
Intel РепйитЗ 70OMHzlaptc P Sun UltraSPARC-** 750Mnz ШО Athlon 60CMIU SGlR12000 400Mhz
ШШШ LU FFT This machine • 0.59 1:02 AHD Athlon 1800+ Duel . 0.67 1.32 I n t e l Pentiu»4 2.0GHz 0.84 1.64 Compaq Alpha 212648 634Khz 0.86 0.95 HP PA-B7Q0 750MHz 0.50 2.25 Macintosh G4 1.OGHz Dual 0.97 1.80 IBM Pover3 450Mhz . 0 60 1.70 I n t e l Pentiums 700HHz Laptop 2 .09 2.35 Sun Ultr*SPARC-II 750KUZ 1. 02 г, 71 Athlon 600Mhz . 1.68 3.05 A H D
J
- i D l x j о iii
£
e 2~D
3-D
0.47
.5
0 . 84
0.63
.9
0 .87
0.56
.8 :•• 0 ,52
0 59.••' •'•' ••
0 42 0 47
1.02
.2
1 .37
1 04
0.77
.3
: .36
2 41
0 79
4
l .91
3 16
1.14
,4
2 .08
3 09
1.20
.8
•1 -73.
2 5S
1.56
1
; .62
3 59
1.97
,5
2 .66
3 87
;•
Рас. 1 АО. Результаты тестирования системы MATLAB 6.5 SP1 69
Глава 1. Начало работы с MATLAB А теперь проверим MATLAB 7 на том же тесте (рис. 1.41). На этот раз ПК автора занял вполне достойное второе место. В чем дело? Неужели скорость вычислений в новейшей версии MATLAB несколько снизилась? Дело, однако, в другом — среди сравниваемых ПК в тестирующей утилите появилась более скоростная машина с процессором Pentium 4 и частотой 3 ГГц. Она, естественно, и заняла первое место. Fte .Edti Del D c*|
Intel Penu !im4 3.0 QHi THIS mach n ie Macn itosh 05,2.0 GHz Dual Intel Penu lrn4 2 0 OHz AMD Atho ln 1666MHz Dual
HP-UX, 876MHz Dual Sun UtlraSPARC-lI 1 1 GHz 0' Sparse 0.47 0.6Э . 0.52 0.77 0.97 0.62 1.14 0.66 1.26 1.09 1.44
I n t e l Pentiun-l 3.0 GHz This machine Macintosh G5, 2.0 GHz Duaa I n t e l Penuuefl 2.0 GHz
0.34 0.45 0.42 0.47
AMD Athlon 1666MH& I-ual Mecincosh G4, 1.2S GHE Dual HP-UX, 67SPIHZ Dual Sim mtraSPARC-III 1.2 GHz Dual
0.52 0.47 1.21 0.70 1.02 1.39 1.32 0.93
l.oe 0.70 0.63 1.17 2.03 3.66
updated data
file
• si.nl
Рис. 1.41. Результаты тестирования системы MATLAB 7 Теперь можно сравнить результаты тестирования для двух версий системы MATLAB на одном и том же компьютере автора: Вид вычислений MATLAB 6.5 SP1 MATLAB 7
LU 0.59 0.53
FFT 1.02 0.61
ODE 0.47 0.45
Sparse 0.58 0.63
2-D 0.84 0.84
3-D 0.42 0.63
Нетрудно заметить, что быстродействие ПК на сравниваемых версиях мало изменилось. MATLAB 7 опережает по скорости счета предшествующую версию MATLAB 6.5 SP1 на операциях LU-декомпозиции матриц, на тестах быстрого преобразования Фурье и решении ODE. Скорость выполнения операция на разреженных матрицах несколько снизилась. Заметное снижение скорости операций 3-D графики не вполне понятно. В дальнейшем мы будем возвращаться к сравнению двух описываемых в данной книге систем — MATLAB 6.5 SP1 и MATLAB 7. К счастью, большинство отличий между версиями (не считая отличий в деталях интерфейса) относятся к внутренним особенностям систем и связано с усовершенствованием встроенных алгоритмов вычислений. Отдельные отличия будут оговариваться, но в целом последующий материал книг почти в равной степени относится к любой из двух описанных версий системы MATLAB.
70
Глава 2 . Интерфейс пользователя 2 . 1 . Интерактивная справка из командной строки 2 . 1 . 1 . Вызов списка разделов интерактивной справки Общепризнанным и характерным для всех версий систем MATLAB является интерфейс пользователя, реализуемый в командном режиме работы. Он был описан в Главе I. MATLAB имеет интерактивную систему помощи, которая реализуется в командном режиме с помощью ряда команд. Одной из них является команда » help HELP topics: matlab\general Matlab\ops MatlabMang MatlabXelmat Matlab\elfun Matlab\specfun
— General purpose commands. — Operators and special characters. — Programming language constructs. — Elementary matrices and matrix manipulation. — Elementary math functions. — Specialized math functions.
Она выводит весь список папок, содержащих m-файлы с определениями операторов, функций и иных объектов, присущих конкретной реализации системы MATLAB. Ввиду большого размера приведены только первые несколько строк его. Рекомендуется просмотреть этот список для установленной на ПК пользователя системы MATLAB. Этот внушительный список дает наглядное представление о пакетах прикладных программ — пакетах инструментов — пакетах расширений (toolbox), увеличивающих возможности системы MATLAB и содержащих массу серьезных примеров применения системы. ПРИМЕЧАНИЕ
Следует отметить, что набор входящих в список средств зависит от набора пакетов расширения, которыми располагает конкретная версия системы MATLAB, заказанная или полученная конкретным пользователем. Кроме того, для доступа к пакетам расширения может потребоваться указание пути к их файлам на диске в панели браузера файловой системы.
2.1.2. Справка по конкретному объекту Для получения справки по какому-либо конкретному объекту используются команды >> help имя ИЛИ >> doc имя
где имя — имя объекта, для которого требуется вывод справочной информации. Мы уже приводили пример помощи по разделу операторов ops. Ниже дается пример для функции вычисления гиперболического синуса, намеренно введенной с неверным указанием имени: 71
Глава 2. Интерфейс
пользователя
>> help hsin hsin.m not found. Нетрудно заметить, что система помощи сообщает, что для функции с именем hsin соответствующий m-файл отсутствует. Введем имя верно: >> help sinh SINH Hyperbolic sine. SINH(X) i s the hyperbolic Overloaded methods help sym/sinh.m
sine of the elements of X.
Теперь полученное сообщение содержит информацию о функции sinh. Сообщается, что данная функция возвращает значение гиперболического синуса для элементов вектора X. Хотя имена функций в MATLAB задаются малыми (строчными) буквами, в сообщениях справочной системы имена функций и команд выделяются большими (прописными) буквами. Этот не слишком удачный прием использован для выделения заголовка текста справки в виде имени функции. В данной книге мы отказались от такого приема, вводящего начинающих пользователей в заблуждение. Аналогичным образом можно получить справку по константам и другим объектам языка MATLAB. Ниже дан пример обращения к справке о числе п: >> h e l p p i PI 3.1415926535897 PI = 4 * a t a n ( l ) = i m a g ( l o g ( - 1 ) )
= 3.1415926535897
При всей примитивности справки help надо отметить ее высокую эффективность. Особенно популярна интерактивная справка у пользователей, привыкших к работе с языками программирования, которые используются в среде операционной системы MS-DOS. Справка doc имя выводит более полную информацию в окне помощи в формате HTML. 2 . 1 . 3 . С п р а в к а по г р у п п е о б ъ е к т о в Пользователя системы MATLAB часто интересует набор функций, команд или иных понятий, относящихся к определенной группе объектов. Выше были указаны имена основных групп объектов системы MATLAB. Ниже дан пример вызова справки по группе объектов time fun: >> help timefun Time and dates. Current date and time. Now — Current date and time as date number. Date — Current date as date string. Clock — Current date and time as date vector. Basic functions. Datenum — Serial date number. Datestr % — String representation of date. Datevec — Date components. Date functions. Calendar — Calendar. Weekday — Day of week. Eomday — End of month.
72
2.1. Интерактивная
справка из командной строки
Datetick — Date formatted t i c k l a b e l s . Timing f u n c t i o n s . Cputime — CPU time in seconds. Tic — S t a r t stopwatch timer. Toe — Stop stopwatch timer. Etime — Elapsed time. Pause — Wait in seconds. После уточнения состава определенной группы объектов можно получить детальную справку по любому выбранному объекту. Как это делается, было описано выше.
2.1.4. Справка по ключевому слову Ввиду обилия в системе MATLAB m-функций, важное значение имеет поиск m-функций по ключевым словам. Для этого служит команда lookfor Ключевое слово или lookfor 'Ключевые слова' В первом случае ищутся все m-файлы, в заголовках которых встречается заданное ключевое слово, и заголовки обнаруженных файлов выводятся на экран. Следует отметить, что широкий поиск по одному ключевому слову может подчас привести к выводу многих десятков определений и длится довольно долго. Для уточнения и сокращения зоны поиска следует использовать вторую форму команды lookfor. Вот пример ее применения: >> lookfor 'inverse sin' ASIN Inverse sine. IS2RC Convert inverse sine parameters to reflection coefficients. RC2IS Convert reflection coefficients to inverse sine parameters. ASIN Symbolic inverse sine. В данном случае для поиска использованы слова ' inverse sin ', то есть задан поиск арксинуса. Число найденных определений зависит от того, с каким числом пакетов прикладных программ (пакетов расширений) поставляется версия системы MATLAB. В следующей главе мы рассмотрим гораздо более эффектные средства справочной системы, ориентированные на работу в стиле приложений операционных систем Windows 95/98/Me/2000/NT4 с графическим пользовательским интерфейсом.
2.1.5. Дополнительные справочные команды В командном режиме можно получить справочные данные с помощью ряда команд: • computer — выводит сообщение о типе компьютера, на котором установлена текущая версия MATLAB; • help s c r i p t — выводит сообщение о назначении m-файлов сценариев (Script-файлов); • help function — выводит сообщение о назначении и структуре т-файлов функций; 73
Глава 2. Интерфейс пользователя • info — выводит информацию о фирме MathWorks с указанием адресов электронной почты; • s u b s c r i b e — позволяет создать файл с бланком регистрации; • ver — выводит информацию о версиях установленной системы MATLAB и ее компонентов; • v e r s i o n — выводит краткую информацию об установленной версии MATLAB, • v e r s i o n - j a v a - выводит информацию об установленной в составе MATLAB версии Ява (Java); • what — выводит имена файлов текущего каталога; • what name — выводит имена файлов каталога, заданного именем name; • whatsnew name — выводит на экран содержимое файлов readme заданного именем name класса для знакомства с последними изменениями в системе и в пакетах прикладных программ; • which name — выводит путь доступа к функции с данным именем. Как правило, эти команды выводят довольно обширные сообщения. Ниже показаны примеры применения отдельных команд этой группы: >> computer ans = PCWIN >> version ans = 6.5.1.199709 (R13) Service Pack 1 Особенно ценные сведения выводит команда ver: >> ver MATLAB Version 6.5.1.199709 (R13) Service Pack 1 MATLAB License Number: 0 Operating System: Microsoft Windows XP Version 5.1 (Build 2600) Java VM Version: Java 1.3.1_01 with Sun Microsystems Inc. Java HotSpot™ Client VM MATLAB Version 6.5.1 (R13SP1) Simulink Version 5.1 (R13SP1) Aerospace Blockset Version 1.5 (R13SP1) CDMA Reference Blockset Version 1.1 (R13SP1) Communications Blockset Version 2.5.1 (R13SP1) Communications Toolbox Version 2.1 (R13SP1) Приведенный выше сокращенный список пакетов расширения системы MATLAB дает весьма ценную информацию об их версиях и датах выпуска. Он свидетельствует о весьма существенном обновлении не только базовой системы MATLAB, но и стандартных пакетов расширения (toolbox). Особенно это относится к новейшей версии системы MATLAB 7. Приведем для нее полный список пакетов расширения: >> v e r MATLAB V e r s i o n
74
7.0.0.19920
(R14)
2.1. Интерактивная
справка из командной строки
MATLAB License Number: DEMO Operating System: Microsoft Windows XP Version 5.1 (Build 2600: Service Pack 1) Java VM Version: Java 1.4.2 with Sun Microsystems Inc. Java HotSpot(TM) Client VM MATLAB Version 7.0 Simulink Version 6.0 Aerospace Blockset Version 1.6 Bioinformatics Toolbox Version 1.1 CDMA Reference Blockset Version 1.1 Communications Blockset Version 3.0 Communications Toolbox Version 3.0 Control System Toolbox Version 6.0 Curve Fitting Toolbox Version 1.1.1 Data Acquisition Toolbox Version 2.5 Database Toolbox Version 3.0 Datafeed Toolbox Version 1.5 Dials and Gauges Blockset Version 1.2 Embedded Target for Infineon C166 M... Version 1.1 Embedded Target for Motorola HC12 Version 1.1 Embedded Target for Motorola MPC555 Version 2.0 Embedded Target for OSEK VDX Version 1.1 Embedded Target for TI C2000 DSP(tm) Version 1.1 Embedded Target for TI C6000 DSP(tm) Version 2.1 Excel Link Version 2.2 Extended Symbolic Math Version 3.1 Filter Design HDL Coder Version 1.0 Filter Design Toolbox Version 3.0 Financial Derivatives Toolbox Version 3.0 Financial Time Series Toolbox Version 2.1 Financial Toolbox Version 2.4 Fixed-Income Toolbox Version 1.0.1 Fixed-Point Toolbox Version 1.0 Fuzzy Logic Toolbox Version 2.1.3 GARCK Toolbox Version 2.0.1 Genetic Algorithm Direct Search Too ... Version 1.0.1 Image Acquisition Toolbox Version 1.5 Image Processing Toolbox Version 4.2 Instrument Control Toolbox Version 2.0 LMI Control Toolbox Version 1.0.9 Link for Code Composer Studio (r) Deve.. .Version 1.3.1 Link for ModelSim Version 1.1.1 MATLAB Builder for COM Version 1.1 MATLAB Builder for Excel Version 1.2 MATLAB Compiler Version 4.0 MATLAB Report Generator Version 2.0 MATLAB Web Server Version 1.2.3 Mapping Toolbox Version 2.0.2
(R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14)
75
Глава 2. Интерфейс пользователя Version 2 Model Predictive Control Toolbox Version 2 Model-Based Calibration Toolbox Mu-Analysis and Synthesis Toolbox Version 3. Neural Network Toolbox Version 4.0 3 OPC Toolbox Version 1.0 Optimization Toolbox Version 3.0 Partial Differential Equation Toolbox Version 1.0.5 RF Blockset Version 1.0 RF Toolbox Version 1.0 Real-Time Windows Target Version 2.5 Real-Time Workshop Version 6 . 0 Real-Time Workshop Embedded Coder Version 4 . 0 Version 2 . 0 . 1 0 Robust Control Toolbox Version 6 . С Signal Processing Blockset Version 6 . 2 Signal Processing Toolbox Version SimMechanics Version SimPowerSystems Version Simulink Accelerator Versior Simulink Control Design Versior Simulink Fixed Point Versior. Simulink Parameter Estimation Versior, 2 Simulink Report Generator Versior. 2 Simulink Response Optimization Simulink Verification and Validation Version Versior Spline Toolbox Versior Stateflow Versior Stateflow Coder Versior Statistics Toolbox Versior; 3 Symbolic Math Toolbox Versior: 6 System Identification Toolbox 1 Version 4 Virtual Reality Toolbox Version 3 Wavelet Toolbox Versior. 2 xPC Target Version 2 xPC Target Embedded Option
(R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14) (R14)
Заметим, что из-за быстрого совершенствования пакетов расширения даже этот список не является окончательным и единственно верным для новой реализации системы MATLAB 7. Кроме того, для каждой лицензии при покупке MATLAB определены конкретные пакеты расширения (за каждый надо платить!), так что список может быть и существенно сокращенным.
2.2. Примеры, вызываемые из командной строки 2.2.1. Вызов списка демонстрационных примеров Одним из самых эффективных методов знакомства со сложными математическими системами является ознакомление со встроенными примерами их применения. Система MATLAB содержит многие сотни таких примеров — по примеру 76
2.2. Примеры, вызываемые из командной строки практически на каждый оператор или функцию. Наиболее поучительные примеры можно найти в разделе demos справки или исполнив команду: >> help demos Examples and demonstrations. Type 'demo at the command line to browse more demos of MATLAB, the Toolboxes, and Simulink. — Run demonstrations. demo Mathematics. — Basic Matrix Operations intro — Inverses of Matrices inverter — Graphs and Matrices buckydem — Sparse Matrices sparsity — Matrix Manipulation matmanip — Integer Arithmetic Examples integerMath — Single Precision Arithmetic, Linear singleMath Algebra Examples and Working with Nondouble Datatypes — Symmetric eigenvalue movie. eigmovie — Movie of the computation of the rrefmovie reduced row echelon form. delsqdemo — Finite Difference Laplacian — Orderings and Separators for a sepdemo Finite Element Mesh — Graphical Representation of Sparse airfoil Matrices — Graphical demonstration of eigshow eigenvalues and singular values. — Differential Equations in MATLAB odedemo — Browse ODE/DAE/IDE/BVP/PDE odeexamples examples. hndlgraf — Demonstrates Handle Graphics for line plots in MATLAB. fitdemo — Optimal Fit of a Non-linear Function sunspots — Using FFT in MATLAB — Graphical Approach to Solving e2pi Inequalities — MATLAB Benchmark bench fftdemc — FFT for Spectral Analysis census — Predicting the US Population spline2d — Splines in Two Dimensions lotkademo — Numerical Integration of Differential Equations quake — Loma Prieta Earthquake qhulldemo — Tessellation and Interpolation of Scattered Data expmdemo — Matrix Exponentials expmdemoi — Matrix exponential via Pade approximation. expmdemo2 — Matrix exponential via Taylor
77
Глава 2. Интерфейс пользователя
ехртсетоЗ
Programming. funfuns nesteddemo anonaemo textscanDemo nddemo strucdem Graphics. graf2d graf2d2 graf3d hndlaxis lorenz imageext vibes xpsound imagedemo penny earthmap xfourier cplxdemo ardemo 3-D Visualization xpklein teapotdemo transpdemo voivec Gallery. modes logo wernerboy knot quivdemo kleinl cruller t огi 4
spharm2
78
series. Matrix exponential via eigenvalues and eigenvectors. Function Functions Nested Function Examples Anonymous Function Examples Reading Arbitrary Format Text Files with textscan Manipulating Multidimensional Arrays Structures XY plots in MATLAB. XYZ plots in MATLAB. Demonstrate Handle Graphics for surface plots in MATLAB. Demonstrates Handle Graphics for axes in MATLAB. Plot the orbit around the Lorenz chaotic attractor. Examples of images with a variety of colormaps Vibrating L-shaped membrane. Demonstrate MATLAB's sound capability. Images and Matrices Viewing a Penny Earth ' s Topography Square Wave from Sine Waves Functions of Complex Variables Interactive axes properties demonstration Klein bottle • A demo that uses the famous Newell teapot • Changing Transparency • Volume Visualization in MATLAB. • Modes • Logo • Werner Boy's Surface: Three-Dimensional Knot - Quiver • Klein Bottle - Cruller Four Linked Tori - Spherical Surface Harmonic
2.2. Примеры, вызываемые из командной строки Other Demos.
fifteen
— A sliding puzzle of fifteen squares and sixteen slots. xpbombs — Play the minesweeper game, life — MATLAB's version of Conway's Game of Life, soma — display precomputed solutions to Piet Hein's soma cube truss — Animation of a bending bridge truss. travel — Traveling salesman problem demonstration. xpquad — Superquadrics plotting demonstration. codec — Coder/Decoder makevase — Generate and plot a surface of revolution. wrldtrv — Show great circle flight routes around the globe. quatdemo — Quaternion demonstration, superquad — Ban's «superquadrics» ellipsoid, mlcomiface — Programming with COM demos is both a directory and a function. DEMOS Start DEMO. See also demo. М ы настоятельно рекомендуем пользователям системы M A T L A B просмотреть с десяток примеров из интересующих их областей. Это займет от силы полчаса или даже меньше, но зато позволит оценить поистине неисчерпаемые возможности системы при решении сложных математических, физических, технических и иных задач, а также превосходные средства графической визуализации решений. Список примеров может несколько различаться для различных версий MATLAB, а потому он не приводится. 2.2.2. Пример — вывод изображения поверхности Мы уже приводили в конце Главы 1 наглядный пример вызова из командной строки примера на вычисление скорости работы системы MATLAB. Эмблемой этой системы стала поверхность мембраны, испытывающей выпучивание на 3/4 своей площади (это один из примеров решения дифференциальных уравнений в частных производных). Исполнив команду >> logo можно наблюдать построение этой поверхности — логотипа системы MATLAB в окне графики. Это показано на рис. 2.1. 2 . 2 . 3 . Что б о л ь ш е — e A p i и л и p i A e ? Рассмотрим еще один простой пример, дающий ответ на сакраментальный воA прос о том, какое значение больше — e^pi или pi e? Для запуска этого примера надо исполнить команду >> e2pi 79
Глава 2. Интерфейс
пользователя
и наблюдать красочное шоу — графики степенных функций х А у и у Л х с построением на них линий заданных функций и оценкой их значений. Этот пример — наглядная демонстрация перехода от узких понятий к более широким. Edt Debug Desktop Игаои \ D a( ', "« - " 'j *
Н*. rf | ?
: | C u r r M K e a r n JC IMATLAB7IWOH
3 Jв
Рис. 2.1. Вывод изображения поверхности логотипа системы MATLAB
? I Curent Driectory; c jM i ATL File
Ей; view
"3J
insert ТоЫ« window Heb
IID Q? И Ш \ \ A /• / ! Д> Э О
Рис. 2.2. Исполнение примера e2pi Разумеется, вы могли бы, вместо приятного обозрения графического представления примера, просто вычислить соответствующие значения:
80
2.2. Примеры, вызываемые из командной строки е = 2.7183 >> e ^ p i ans = 23.1407 >> p i ^ e ans = 22.4592 Так можно легко убедиться в том, что все же е Л р 1 больше, чем р 1 Л е . Можно проверить это и помощью логического оператора сравнения > (результат 1 означает, что неравенство выполняется и дает логическое значение TRUE) ans = 1 Но в последних примерах это означает, что вы просто технарь или физик-экспериментатор, а не «истинный» математик. Впрочем, у каждого есть свои взгляды на применение математики. И чьи взгляды лучше и полезнее — вопрос весьма спорный.
2.2.4. Встроенные фигуры MATLAB имеет ряд встроенных фигур, которые можно легко выводить на построение простым указанием их названия. Так, введя команду knot, можно задать построение сложной пространственной фигуры узла с функциональной окраской (рис. 2.3). При запуске этого примера в среде MATLAB 6.0/6.1 нажатием кнопки Spinmap можно наблюдать изменение окраски, имитирующее как бы движение жидкости внутри замкнутой трубки, образующей данную фигуру. Однако в версии MATLAB 6.5 эта возможность отсутствует. Как видно из рис. 2.2, имеется возможность вращать полученную фигуру вместе с обрамляющим ее параллелепипедом.
Рис. 2.3. Построение фигуры-узла 81
Глава 2. Интерфейс
пользователя
Таким образом, можно сделать вывод о том, что для имитации и моделирования математических и физических задач система MATLAB предоставляет значительные графические возможности — от простейших графиков функций в декартовой системе координат до сложных анимационных графиков с динамической цветной функциональной окраской. 2.2.5. Просмотр текстов примеров и т-файлов ХОТЯ наблюдение за тем, как MATLAB расправляется со сложными примерами и задачами, само по себе довольно поучительно, жаждущие применить систему на деле пользователи, безусловно, захотят узнать, а как же конкретно реализовано решение той или иной задачи? Для этого вам достаточно просмотреть соответствующий демонстрационный (или любой другой) m-файл. Это можно сделать с помощью любого текстового редактора, редактора и отладчика m-файлов, встроенного в систему, или с помощью команды
type Имя М-файла Например, если вы хотите просмотреть текст файла демонстрационного примера e2pi, то нужно исполнить команду: >> type e2pi Используя команду help, можно получить справку по любой конкретной функции или команде.
2.3. Справочная система MATLAB 2 . 3 . 1 . Меню Help и запуск справки Основной доступ к справочной информации обеспечивает меню Help (Помощь). Оно открывает доступ к справочным системам MATLAB и к информации о производителе MATLAB. В новых версиях MATLAB справочная система была существенно доработана. Теперь она основана на использовании виртуальной машины Java и может приспосабливаться к конкретной ее реализации. Команда About MATLAB выводит окно, содержащее информацию о системе. Это окно показано на рис. 1.4. Для запуска справочной системы следует использовать одноименную команду меню Help — MATLAB Help. При этом запустится браузер справочной системы и откроется ее окно, показанное на рис. 2.4. Окно справки имеет вид современного электронного документа. В левом окне расположены вкладки разделов справочной системы и дерево ее разделов, в правом информация о текущем установленном разделе. Каждый небольшой раздел справочной системы представлен в правом окне в виде гипертекстовой ссылки, активизация которой приводит к переходу на соответствующую HTML-страницу. На рис. 2.4 показан один из документов справочной системы, содержащий начальные данные о реализации системы — версии R13 SP1 (MATLAB 6.5 SP1). Несмотря на удобства справочной системы надо отметить, что ее содержимое во многом дублирует другие справочные подсистемы MATLAB, например, справки, вызываемые из командной строки и имеющиеся в виде PDF-файлов. В целом справочная система MATLAB превратилась в монстр — уже в версии MATLAB 6.0 только для PDF-файлов этой системы пришлось в ее поставку включить отдельный CD-ROM и ныне система поставляется на трех CD-ROM. 82
2.3. Справочная система MATLAB
Rie
Kit
View
Go
Web
Wind
. Help Naviyaior i .
Produd Mer: <• AI С
Seis.
*••} Instalation
Ф MATLAB :?<4> Getting Started [•••-§• Examples >;-^J Development Environment ;*} 1^1 Mathematics it:-^J Programming and Data Types •Х-Щ Graphics Щ-Щъ 3-D Visualization if;-© Creating Graphical User interface: ф Щ) Functions-ByCategory [• • 1) Functions - Alphabetical List 1-'Щ( Handle Graphics Property Browse h Щ External Interfaces/API "f Щ External InterfacesfAPt Reference ;*' Щ Release Notes [- S Printable Documentation (PDF) -•@ Product Page (Web) •^ MA1LAB COM Builder
R e l e a s e
N o t e s
R e l e a s e
1 3 w i t h
f o r S e r v i c e P a c k
1
Overview Release 13 with Seivice Pack 1 (Release 13SPI) contains many products that are updated with new features and/or mao j r bug fixes. In addition, this release packages in CD form several product updates that have been made available in Web downo l ad form since Ree l ase 13 was shipped •
\ Note There was a slipstream release of MathWorks products, ] Release 13.0 1, which was made available to new customers | between Release 13 arid this Ree l ase 13SP1. The functionality of | Release 13.0 1 is included in Ree l ase 13SP1 The Release Notes [ for Release 13 with Seivice Pack 1 highlights changes between I Release 13 and Release 13SP1 L£J
Puc. 2.4. Основное окно справочной подсистемы
2.3.2. Виды работы со справочной системой Как видно из рис. 2.4, окно разделов справочной системы имеет пять вкладок, соответствующих следующим видам работы справочной системы: Contents (Содержание) — поиск информации по контексту (или попросту по обычному оглавлению с разделами справки); Index (Индекс) — поиск информации по индексному (алфавитному) каталогу; Search (Поиск) — поиск всех тем справки, в которые включена заданная для поиска фраза или отдельное слово; Demos (Демонстрации) — новое окно с доступом к демонстрационным примерам; Favorites — доступ к специальным возможностям справочной системы (в системе MATLAB 7 эта вкладка исчезла). Эти виды работы могут применяться в зависимости от конкретных задач пользователя. Для пользователей, имеющих навыки работы с системой MATLAB (а на них в основном рассчитана эта книга) работа с системой помощи вполне очевидна. Описанные выше справочные средства рассчитаны на то, что пользователь уже знаком с системой и желает быстро получить справку по ее конкретным возможностям. Но для общего знакомства с системой они не очень подходят, поскольку много времени занимают «бесконечные» переходы от одного раздела справки к другому. Поэтому хотелось бы обратить внимание читателя на подробные электронные книги, обычно представленные в виде файлов формата PDF, для работы с которыми применяются такие программы, как Acrobat Reader или Adobe Acrobat. Первая позволяет только просматривать материалы книг, а вторая — еще и редактировать их и снабжать своими пометками. Справочная система содержит раздел Favorites с подразделом MATLAB Printable Documentation (печатаемая документация MATLAB), предоставляющим доступ к 83
Глава 2. Интерфейс
пользователя
электронной справочной документации, которая поставляется в виде файлов PDF или PostScript. Возможность просмотра документов в этом формате требует наличия программы Adobe Acrobat Reader (можно бесплатно скачать с Web-узла фирмы Adobe www.adobe.com) и файлов самих документов. Не все поставки системы MATLAB имеют эти средства. Полный объем документации по системе MATLAB 6/7 и пакетам прикладных программ уже занимает целый CD-ROM, что делает документацию достаточно полной, но трудиообозримой. 2.3.3. Доступ к примерам из справочной системы В окне справки имеется вкладка Demos, дающая доступ к галерее демонстрационных примеров применения систем MATLAB. Пуск примеров осуществляется прямо из окна справки (см. описание чуть ниже). JflJil
•11 .
Fe li Edti Veiw Go Web W nidow Hub Нею Navigator
! [> Getn ig Started wtih Demos \s •&
."'.i Desktop Environment LJ Matrices 1 D Numerics LJ Graphics ^_J Language Cj Automation Client Interface (COM) | LJ Gallery Cj More Demos i.
MATLAB Demos MATLAB n i tegrates mathemac tial computnig, visualization, and a powerful alnguage to provd i e a flexible envo inment for ei> hnc i al compun tig MATLAB n i cu l des toosl for Data acqusition Data anaylssi and expo l rato in visuali z at ion a'^ii uricj п Й pi пг.в s^if \ц Algorithm prototyping and development Modeling and simulation F'пи(]iзrnniinу af"id ^ppliCcitiGn development Run demos in the b
ф. MATLAB Report Genetator
ing categories to see MATLAB at work.
• ф Toolboxes Simulink
-• ъBlocksets
1 :
Category
Description
Desktop
The MATLAB desktop is a gra|ihical user interface that
Environment
transforms MATLAB into an integrated environment for exploration and development
hese playback demos
show you how easy the desktop is to use. Matrices
MATLAB works with scalars, vectors, and matrices. A scalar is really just a 1 - by-1 matrix, and a vector is nothing more than a long, thin rnatrin grven as either a
Рис. 2.5. Работа с вкладкой демонстрационных примеров В окне справки имеется три панели: • левая панель с перечнем разделов, по которым предлагаются примеры; • панель с описанием выбранного раздела примеров; • панель с перечнем примеров по выбранному разделу. Открыв вкладку Demos окна справки, можно увидеть в ней дерево с папками демонстрационных примеров. На рис. 2.5 часть этих папок показана в закрытом состоянии. На это указывает знак + в прямоугольниках слева от папок (он означает, что папку можно открыть, установив на ней курсор мыши и щелкнув левой клавишей мыши). Знак — означает, что папка уже открыта и ее можно закрыть. Откроем, к примеру, папку с примерами графики — Graphics и активизируем один из примеров (схематично они изображены значком в виде мигающей лампочки). Рис. 2.6 показывает работу с одним из примеров — Teapot (построение и наблюдение чайника с моделированием эффектов его раскраски).
2.4. Интерфейс
пользователя
MATLAB
£:. О
р - get(gd,'UserO3la'l. se!(p,'LmeSlyle','-');
Puc. 2.6. Работа с демонстрационным примером Teapot При активизации значка примера в правой части окна появляется гиперссылка на файл примера с полным путем к нему и гиперссылка Run this Demo запуска данного примера. Ее активизация приводит к появлению окна примера (рис. 2.6). Нетрудно заметить, что окно примера содержит кнопки управления, назначение которых вполне очевидно. Многие примеры имеют свои окна, созданные на основе средства графического интерфейса пользователя GUI (Graphic User Interface).
2 . 4 . И н т е р ф е й с п о л ь з о в а т е л я MATLAB 2 . 4 . 1 . Средства панели инструментов Панель инструментов (рис. 2.7) дает наиболее простой и удобный, особенно для начинающих пользователей, способ работы с системой MATLAB (для определенности это версия 6.5 SP1). При этом основные команды вводятся указанием курсором мыши на нужную кнопку с нажатием левой клавиши мыши. Кнопки имеют изображение, явно подсказывающее их назначение. Перечислим назначение кнопок панели инструментов: • • • • • • • • •
New M-file (Новый m-файл) — выводит пустое окно редактора т-файлов; Open file (Открыть файл) — открывает окно для загрузки т-файла; Cut (Вырезать) — вырезает выделенный фрагмент и помещает его в буфер; Сору (Копировать) — копирует выделенный фрагмент в буфер; Paste (Вставить) — переносит фрагмент из буфера в текущую строку ввода; Undo (Отменить) — отменяет предшествующую операцию; Redo (Повторить) — восстанавливает последнюю отмененную операцию; Simulink — открывает окно браузера библиотек Simulink; Help (Помощь) — открывает окно справки. 85
Глава 2. Интерфейс
пользователя
New M-file D
Cut US i X
Open file
Paste Ч'-S fe
Copy
Redo
k J
'
r
Undo
Help
* I U ! ?
i Current Directory: j E:\matlsbR12\wort
Sunulink
j j ] ...I Browse for Folder
Рис. 2.7. Панель инструментов системы MATLAB Набор кнопок панели инструментов обеспечивает выполнение наиболее часто необходимых команд и вполне достаточен для повседневной работы с системой. О назначении кнопок говорят и всплывающие подсказки, появляющиеся, когда курсор мыши устанавливается на соответствующую кнопку. Они имеют вид желтого прямоугольника с текстом короткой справки. Кнопка New M-file открывает окно редактора/отладчика m-файлов. Работу с этим средством мы обсудим позже. Кнопка Open file (Открыть файл) служит для загрузки в редактор/отладчик ранее созданных m-файлов, например, входящих в пакет расширения (Toolbox) системы или разработанных пользователем. Она открывает стандартное окно, которое является типичным элементом интерфейса Windows-приложений. Кнопки Cut (Вырезать), Сору (Копировать) и Paste (Вставить) реализуют наиболее характерные команды работы с буфером обмена (Clipboard). Первые две операции относятся к выделенным фрагментам сессии или текста m-файлов (если они выполняются в окне редактора/отладчика). Для выделения объектов можно использовать мышь, перемещая курсор по тексту при нажатой левой кнопке, или клавиши со стрелками в комбинации с клавишей Shift. В MATLAB можно использовать контекстное меню, появляющееся при нажатии правой кнопки мыши. Например, установив курсор мыши на выделенный фрагмент матрицы М и нажав правую кнопку, можно увидеть меню, показанное на рис. 5.6. В нем, кстати, дублируется позиция с командой Сору (Копировать). Есть и ряд других доступных в данный момент команд. Обратите внимание, что в момент подготовки магической матрицы М ее имя появилось в окне браузера рабочей области — в правой части экрана. При этом матрица представляется изображением таблицы. Часто, выполнив какую-то операцию, мы замечаем, что она оказалась ошибочной. При работе в MATLAB такой ситуации пугаться не стоит — нажатие кнопки Undo (Отменить) панели инструментов приведет к отмене последнего действия, выполненного в текущей строке. Операции в предыдущих строках документа этой командой не отменяются. Если оказалось, что вы зря произвели отмену последней операции, то ее легко восстановить, введя с панели инструментов операцию Redo (Восстановить). 2.4.2. Браузер рабочей области Векторы и матрицы могут занимать большой объем памяти. Конечно, речь не идет о векторах или матрицах, содержащих несколько элементов или даже несколько десятков элементов. Хотя и в этом случае оценка их размеров полезна при разработке алгоритмов матричных вычислений и оценке их эффективности в части использования памяти. Как отмечалось, в левой части окна системы MATLAB имеется окно специального браузера рабочей области — Workspace Browser. Он служит для просмотра ре86
2.4. Интерфейс пользователя MAT LAB сурсов рабочей области памяти. Браузер дает наглядную визуализацию содержимого рабочей области (рис. 2.8).
Q
^S!
fe*
*
•
1%
?
Ojirerrft recbr, ffm.5tial,Ri:Wor
шшшшш
Рис. 2.8. Пример просмотра рабочей области Окно браузера рабочей области выполняет и другие важные функции — позволяет просматривать существующие в памяти объекты, редактировать их содержимое и удалять объекты из памяти. Для вывода содержимого объекта достаточно выделить его имя с помощью мыши и щелкнуть на кнопке Open (Открыть). Объект можно открыть и двойным щелчком на его имени в списке. Откроется окно редактирования массива Array Editor, показанное на рис. 2.8 применительно к матрице М2. Окно редактирования матрицы дает удобный доступ для редактирования любого элемента матрицы по правилам, принятым при работе с электронными таблицами. Основное из них — быстрый доступ к любому элементу матрицы. Можно также менять тип значений элементов, выбирая его из списка, предоставляемого меню Numeric format (Формат чисел). В окне также выводятся данные о числе строк и столбцов матрицы. Заметим, что в новой версии MATLAB 7 работа с браузером рабочей области стала еще более удобной. Это достигнуто за счет того, что главные возможности работы с браузером перенесены в позицию меню View. 2.4.3. Команды просмотра рабочей области who и whos Следует отметить, что просмотр рабочей области возможен и в командном режиме, без обращения к браузеру Workspace Browser. Команда who выводит список определенных переменных, а команда whos — список переменных с указанием их размера и объема занимаемой памяти. Следующие примеры иллюстрируют действие этих команд при предварительно очищенной рабочей области (команда Clear Workspace в позиции Edit меню): » х=1.234; 87
Глава 2. Интерфейс »
V=[1
»
M=magic (4) ;
»
who
Your M »
2
3
4
5];
variables V
пользователя
are:
x
whos
Name
Size
M
4x4
128
Bytes double
array
V
1x5
40
double
array
X
lxl
8
double
array
Grand
total
is
22
elements
Class
using
176
bytes
Если вы хотите просмотреть данные одной переменной, например м, следует использовать команду whos M. Естественно, просмотр рабочей области с помощью браузера рабочей области (Workspace Browser) более удобен и нагляден. 2.4.4. Браузер файловой структуры Для просмотра файловой структуры MATLAB служит специальный браузер файловой системы (Path Browser), который запускается при обычной загрузке системы. Если был установлен упрощенN 1 - .. 1' '• ' . 1 ный интерфейс, то для запуска браузеFile Ы1 View Web •ж He*t ра файловой системы используется C:\MATLAB6S О ;м окно Current Directory (Текущая папка). All riles J Tile Tvpe j Last Modified |м На рис. 2.9 показано окно этого брауFol den Qbin 05-дек-2003 11 01 зера, выведенное отдельно. rjde.o= Fo) der 01 05-дек-2003 Qjextern FoJ 05-дек-2003 01 Нетрудно заметить, что браузер О he If Го] dec 05-дек-200Э 01 файловой системы построен по типу Fo dec О5-дег-2О03 11 01 СП» общеизвестного Проводника (Explorer) Го dec 05-дек-2003 11 01 Pj Java операционных систем Windows. Окно 06-дек-200Э 56 Fo Cjjhelp Fo der. 05-дек-2003 01 Pjnotebook дает возможность просмотра файловой Fo Qro 05-дек-2003 и системы ПК и выбора любого файла из "laimulink Fo 05-дек-2003 11 02 любой папки. Fo pjstateflou 05-дек-2003 11 Исполнив команду Open (Открыть) Го 05-дек-2003 и 01 Qj toolbox Fo det 05-дек-2003 11 01 из контекстного меню правой клавиши ,w |-It,nin,r«ll мыши или дважды щелкнув по выделенной строке с именем файла, можно ввести этот файл в окно редактора/отРис. 2.9. Окно браузера Path Browser ладчика m-файлов. При этом редактор запустится автоматически и его окно с готовым для редактирования выбранным файлом появится на экране. W*)dow
11
det
11
11
det
06
11
det
05
'• •
02
•;;;;:..
det
dec
dec
Fo
11
ПК
2.5. Работа с м е н ю 2.5.1. Команды, операции и параметры Открытая позиция строки основного меню содержит различные операции и команды. Выделенная команда или операция исполняется при нажатии клавиши Ввод (Enter). Выполнение команды можно также осуществить щелчком мыши или нажатием на клавиатуре клавиши, соответствующей выделенному символу в названии команды. 88
2.5. Работа с меню Между командами и операциями нет особых отличий, и в литературе по информатике их часто путают. Для определенности мы будем считать командой действие, которое исполняется немедленно. А операцией — действие, которое требует определенной подготовки, например, открытие окна для установки определенных параметров. Параметр (option) — это значение определенной величины, действующее во время текущей сессии. Параметрами обычно являются указания на применяемые наборы шрифтов, размеры окна, цвет фона и т. д. 2.5.2. Меню системы MATLAB Перейдем к описанию основного меню системы MATLAB 6.5 SP1. Основные отличия в организации меню версии MATLAB 7 были отмечены в конце Главы 1. Меню MATLAB 6.5 SP1 (см. рис. 2.2 сверху) выглядит довольно скромно и содержит всего шесть пунктов: • File — работа с файлами; • Edit — редактирование сессии; • View — вывод и скрытие панели инструментов; • Web — доступ к Интернет-ресурсам; • Window — переключение и закрытие окон: • Help — доступ к справочным подсистемам. Позиция Web появилась начиная с версий MATLAB 6.*. Она дублирует возможности стандартных браузеров, например Microsoft Internet Explorer и не [всегда работоспособна. Возможно, поэтому она удалена в новой версии MATLAB 7. Работа с позицией Window вполне очевидна, а с позицией Help уже описывалась. В связи с этим отметим особенности работы трех первых позиций меню системы MATLAB. 2 . 5 . 3 . М е н ю File Меню File содержит ряд операций и команд для работы с файлами: • • • • • • • • • • • • • •
New — открывает подменю с позициями: M-file — открытие окна редактора/отладчика т-файлов; Figure — открытие пустого окна графики; Model — открытие пустого окна для создания Simulink-модели; GUI — открытие окна разработки элементов графического интерфейса пользователя; Open — открывает окно загрузки файла; Close Command Windows — закрывает окно командного режима работы (оно при этом исчезает с экрана); Import data — открывает окно импорта файлов данных; Save Workspace As... — открывает окно записи рабочей области в виде файла с заданным именем; Set Path — открывает окно установки путей доступа файловой системы; Preferences... — открывает окно настройки элементов интерфейса; Print... — открывает окно печати всего текущего документа: Print Selection... — открывает окно печати выделенной части документа; Exit — завершает работу с системой.
Глава 2. Интерфейс пользователя Большинство окон, открывающихся этими операциями, хорошо известно пользователям любыми приложениями Windows. Поэтому остановимся на описании только тех окон, которые специфичны для систем класса MATLAB. Кстати, состав команд позиции File в обеих описываемых тут версиях системы MATLAB идентичен. 2.5.4. Установка путей доступа файловой системы Операция Set Path... (Установить путь) открывает окно редактора путей доступа файловой системы. Это окно показано на рис. 2.10. Окно дает список папок с файлами системы MATLAB. Имеется возможность переноса папок вверх или вниз по списку, уничтожения их и переименования. По умолчанию задается правильная установка путей доступа, так что данными возможностями стоит пользоваться только в особых обстоятельствах, например, при случайном переносе папок в другое место или при их переименовании.
Ail changes take eimmediately T let MATLAB search path-
Add Fod l er.. J _jCAMATLAB65\loolbO)Amatlamgenetal Add wtih Subfod l ejirs. 2 J C-\MATLA865ltoolbo>ftmatlab\OpS .. , 1 2J C:lMATLAB65toolbox\mall melmat ——'"'•••'• i _ J C:\MATLAB65>toolbo>rtmatl blelfun ••-•••••* 1 2 J CAMATU\B55\tOOlbo>rtmatl b\spetfun taVrn atTu.'i u r-,- 1 f_jC.lMATLAS65«oolbox\matl bldatafun M.-r \ •-•-;• j _jC.\MATLAB65HoolbO)rtmatl . _ j CAMATLAB65\toolrjortmatl b\audic Г-,
1,.-у.ц.Г1 |
i^J C:\MATUB65«oolboxlmatl b^polyfur
— ^ — Save
[
1
:2jCAMATLAB65ltoolbo«\matlab»funfur
'
£j С >MATLAB65\loolbo>rtmatlaWspartun
• Сuse
|
•-•--•'.•-.>-! ^ j \:
Defau 0
zl
_
Help
j
Рас. 2.10. Окно редактора путей доступа файловой системы
2.5.5. Настройка элементов интерфейса Интерфейс последних версий системы MATLAB 6.* стал настолько удобным и даже изысканным, что маловероятно, что кому-либо захочется менять его в большей мере, чем это предусмотрено командами подменю View. Однако такая возможность есть — команда Preferences... (Предпочтения) выводит окно детальной настройки элементов интерфейса (рис. 2.11). В левой части этого окна имеется древообразный список элементов интерфейса системы, а в правой части — поле задания параметров для выбранного типа элементов. Число параметров и видов этого окна велико, но заинтересованный читатель разберется с нужными ему параметрами без особого труда.
•Command W nidow Command Hs itory Edto ir/Debugger Hep l Curent Driectory Workspace • Aray Edto ir GUD IE Fg iure Copv Tempa lte •Sm iu n ilk
General References "; Toob lox path cachn ig ~ i f? EnaOe l toob lox path cache I ™ I Enabe l toolboxpeth cache da ign ; Update Toob lox Path Cache j I Fg iure w n idow prn itn ig ;№Specfy i how coo lred ln iter :! Use prn itet defe as utlsand te*t are sent to the prn <" Aw l ays send asba ii ! ^ Aw l ays send as coe l
j
Cancel
j
Apply
Puc. 2.11. Окно настройки элементов интерфейса 90
2.6. Основы редактирования
и отладки т-файлов
2.5.6. Меню Edit — средства редактирования документов Меню Edit содержит операции редактирования, типичные для большинства приложений Windows. Это меню имеет следующие операции и команды: • • • • •
Undo (Отменить) — отмена результата предшествующей операции; Redo (Повторить) — отмена действия последней операции Undo; Cut (Вырезать) — вырезание выделенного фрагмента и перенос его в буфер; Сору (Копировать) — копирование выделенного фрагмента в буфер; Paste (Вставить) — вставка фрагмента из буфера в текущую позицию курсора; • Clear (Очистить) — операция очистки выделенной области; • Select All (Выделить) — выделение всей сессии; • Delete (Стереть) — уничтожение выделенного объекта; • Clear Command Windows (Очистить командное окно) — очистка текста сессии (с сохранением созданных объектов); • Clear Command History (Очистить окно истории команд) — очистка окна истории; • Clear Workspace — очистка окна браузера рабочей области. Назначение ряда указанных команд и операций уже обсуждалось. Отметим лишь, что команда Clear Command Window очищает окно командного режима работы и помещает курсор в верхний левый угол окна. Однако все определения, сделанные в течение стертых таким образом сессий, сохраняются в памяти компьютера. Напомним, что для очистки экрана используется также команда clc, вводимая в командном режиме. Осталось заметить, что состав команд позиции Edit меню в новой версии MATLAB 7 не изменился. 2 . 5 . 7 . Меню View — управление видом интерфейса документов Позиция меню View служит для изменения вида интерфейса. На рис. 2.12 показан вид окна системы MATLAB 6.5 SP1 с открытой позицией View после исполнения команды Five Panel. В этом случае выводится сразу пять панелей, видимых на рис. 2.12. Кроме того, выведено окно профилографа Profiler, в котором позиция меню View представлена открытой. Состав меню View (рис. 2.12) очевиден — в нем содержатся команды, выводящие панели (окна) интерфейса. Кроме выведенных панелей можно вывести панель (окно) справки Help и задать разные варианты вида интерфейса. Напомним, что в таком виде позиция View меню в MATLAB 7 исчезла, а ее возможности перекочевали в позицию Desktop меню.
2.6. Основы редактирования и отладки т-файлов 2 . 6 . 1 . Интерфейс редактора/отладчика т-файлов Для подготовки, редактирования и отладки m-файлов служит специальный многооконный редактор. Он выполнен как типичное приложение Windows. Редактор можно вызвать командой e d i t из командной строки или командой New • M-file из меню File. После этого в окне редактора можно создавать свой 91
Глава 2. Интерфейс
v-[i
г з •
H=magic(10); 10АН doc
Pi
1С: ••'". АИ •
пользователя
: \КАТШ — ~ Fit All fil
Edit ; tf«w Web
C J USERS |_J, app_Lf с
Dock Profiler
Q c£s_beg Develop ^demo.n ^.dmdl.Ei
Conwand Wndo* Ody
g [ a r i proi ^ Conanand Window
Workspace Launch Pad ProSer Hetp
ф Ptonieilme.Qss
i l e
P e r f o r m a n c e
-
У kids.jp «Start 1
Puc. 2./2. Интерфейс MATLAB с пятью панелями файл, пользоваться средствами его отладки и запуска. Перед запуском файла его необходимо записать на диск, используя команду File • Save as в меню редактора. На рис. 1.5 было показано окно редактора/отладчика с текстом простого файла demo.m в окне редактирования и отладки. Подготовленный текст файла (это простейшая и наша первая программа на языке программирования MATLAB) можно записать на диск. Для этого используется команда Save As, которая использует стандартное окно Windows для записи файла с заданным именем. После записи файла на диск можно заметить, что команда Run в меню Tools (Инструменты) редактора становится активной (до записи файла на диск она пассивна) и позволяет произвести запуск файла. Запустив команду Run, можно наблюдать исполнение m-файла — в нашем случае это построение рисунка в графическом окне и вывод надписи о делении на ноль в ходе вычисления функции sin(x)/jc в командном окне системы (рис. 1.5). На первый взгляд может показаться, что редактор/отладчик — просто лишнее звено в цепочке «пользователь — MATLAB». И в самом деле, текст файла можно было бы ввести в окно системы и получить тот же результат. Однако на деле редактор/отладчик выполняет важную роль. Он позволяет создать m-файл (программу) без той многочисленной «шелухи», которая сопровождает работу в командном режиме. Далее мы убедимся, что текст такого файла подвергается тщательной синтаксической проверке, в ходе которой выявляются и отсеиваются многие ошибки пользователя. Таким образом, редактор обеспечивает синтаксический контроль файла. Редактор имеет и другие важные отладочные средства — он позволяет устанавливать в тексте файла специальные метки, именуемые точками прерывания (breakpoints). При их достижении вычисления приостанавливаются, и пользователь может оценить промежуточные результаты вычислений (например, значения переменных), проверить правильность выполнения циклов и т. д. Наконец, редактор позволяет записать файл в текстовом формате и увековечить ваши труды в файловой системе MATLAB. 92
2.6. Основы редактирования
и отладки т-файлов
Для удобства работы с редактором/отладчиком строки программы в нем нумеруются в последовательном порядке. Редактор является многооконным. Окно каждой программы оформляется как вкладка. Редактор-отладчик позволяет легко просматривать значения переменных. Для этого достаточно подвести к имени переменной курсор мыши и задержать его — появится всплывающая подсказка с именем переменной и ее значением.
2.6.2. Цветовые выделения и синтаксический контроль Редактор/отладчик m-файлов выполняет синтаксический контроль программного кода по мере ввода текста. При этом используются следующие цветовые выделения: • ключевые слова языка программирования — синий цвет; • операторы, константы и переменные — черный цвет; • комментарии после знака % — зеленый цвет; • символьные переменные (в апострофах) — зеленый цвет; • синтаксические ошибки — красный цвет. Благодаря цветовым выделениям вероятность синтаксических ошибок резко снижается. Однако далеко не все ошибки диагностируются. Ошибки, связанные с неверным применением операторов или функций (например, применение оператора — вместо + или функции cos (x) вместо sin (x) и т. д.), не способна обнаружить ни одна система программирования. Устранение такого рода ошибок (их называют семантическими) — дело пользователя, отлаживающего свои алгоритмы и программы.
2.6.3. Понятие о файлах-сценариях и файлах-функциях Здесь полезно отметить, что m-файлы, создаваемые редактором/отладчиком, делятся на два класса: • файлы-сценарии, не имеющие входных параметров; • файлы-функции, имеющие входные параметры. Видимый в окне редактора на рис. 1.5 файл является файлом-сценарием, или Script-файлом. Данный файл не имеет списка входных параметров и является примером простой процедуры без параметров. Он использует глобальные переменные, то есть такие переменные, значения которых могут быть изменены в любой момент сеанса работы и в любом месте программы. Для запуска файла-сценария из командной строки MATLAB достаточно указать его имя в этой строке. Файл-функция отличается от файла-сценария прежде всего тем, что созданная им функция имеет входные параметры, список которых указывается в круглых скобках. Используемые в файле-функции переменные являются локальными переменными, изменение значений которых в теле функции никоим образом не влияет на значения, которые те же самые переменные могут иметь за пределами функции. Иными словами, локальные переменные могут иметь те же имена (идентификаторы), что и глобальные переменные (хотя правила культурного программирования не рекомендуют смешивать имена локальных и глобальных переменных). В дальнейшем мы рассмотрим этот вопрос более подробно, а пока вернемся к теме данного раздела — описанию интерфейса компонентов системы MATLAB. 93
Глава 2. Интерфейс
пользователя
2.6.4. Панель инструментов редактора и отладчика Редактор имеет свое меню и свою панель инструментов. Она представлена на рис. 2.13. New
Save
Open file
Cut
Print
Paste
Copy
Redo
Undo
Show function
Find text
Clear all Step breakpoints in
Set/Clear breakpoint
Step
Save and Run
Step out
Exit Debug Mode
Рис. 2.13. Панель инструментов редактора/отладчика Назначение кнопок панели инструментов редактора/отладчика (слева-направо) следующее: • New — создание нового т-файла; • Open — вывод окна загрузки файла; • Save — запись файла на диск; • Print — печать содержимого текущего окна редактора; • Cut — вырезание выделенного фрагмента и перенос его в буфер; • Сору — копирование выделенного объекта в буфер; • Paste — размещение фрагмента из буфера в позиции текстового курсора; • Undo — отмена предшествующей операции; • Redo — повтор отмененной операции; • Find text — нахождение указанного текста; • Show function — показ функции; • Set/Clear Breakpoint — установка/сброс точки прерывания; • Clear All Breakpoints — сброс всех точек прерывания; • Step — выполнение шага трассировки; • Step In — пошаговая трассировка с заходом а вызываемые т-файлы; • Step Out — пошаговая трассировка без захода в вызываемые т-файлы; • Save and Run — запись и сохранение; • Exit Debug Mode — выход из режима отладки. Подробное описание работы с редактором/отладчиком дано в Главе 10.
2.7. Интерфейсы графических окон 2 . 7 . 1 . Обзор интерфейсов графических окон Выше (в Главе I) мы уже описывали в общих чертах окно графики. Ниже мы рассмотрим его более детально. Графическое окно MATLAB представлено на рис. 2.14. Это обычное масштабируемое и перемещаемое окно Windows-приложений. MATLAB может создавать множество таких окон. Однако размещение графики в окне сессии не предусмотрено. Это возможно в специальном расширении Notebook, позволяющем встраивать объекты MATLAB (тексты, строки ввода и вывода, графики) в документы популярного текстового редактора Word 95/97/2000. 94
2.7. Интерфейсы
графических
окон
E*e £-* V«w . n i sert led! ' ^hdw Je jp l t <- к v
9 Э D ;^ О
График синусоиды в пространстве
\
\\
\\
\ \
\ \
Рис. 2.14. Графическое окно MATLAB Меню этого окна похоже на меню окна командного режима работы системы MATLAB. Однако при внимательном просмотре заметен ряд отличий. Прежде всего, в меню Edit окна графики наряду со стандартными операциями работы с буфером есть ряд новых команд: Copy Figure (Копировать рисунок) — копирование в буфер рисунка (графика); Copy Options (Копировать параметры) — копирование параметров графика: Figure Properties (Свойства рисунка) — вывод окна свойств графика; Axes Properties (Свойства осей) — вывод окна свойств осей графика; Current Object Properties (Свойства текущего объекта) — вывод окна свойств текущего объекта. ПРИМЕЧАНИЕ
Большинство графиков, которые описываются в книге, представлены копиями только самих графиков, а не всего графического окна. Для полунения таких копий использовалась команда Copy Figure из меню Edit окна графики или просто вырезалась нужная часть копии экрана, получаемой нажатием клавиши Print Screen. Такое представление делает приведенные рисунки одинаковыми для всех версий MATLAB, от MATLAB 5.0 и выше.
Для вывода свойств графиков, их осей и текущих объектов используется окно свойств графиков с соответствующими вкладками, работа с которым описывалась в главе 1. 2 . 7 . 2 . Панель инструментов к а м е р ы о б з о р а Отличительной особенностью окна графики в версии MATLAB 6.0 стало появление второй инструментальной панели со средствами форматирования трехмерной (3D) графики. Эта панель (она видна на рис. 2.14 под основной панелью инструментов) выводится командой View • Camera Toolbar. 95
Глава 2. Интерфейс
пользователя
Эта панель управляет некоторой воображаемой фотокамерой (или просто камерой), с помощью которой как бы наблюдается объект. Кнопки имеют наглядные изображения, поясняющие действия кнопок. В связи с этим их подробное описание лишено смысла — проще опробовать их в действии. 2.7.3. Меню инструментов Tools Действия кнопок панели инструментов камеры обзора продублированы в меню Tools (Инструменты). Состав команд указанного подменю начиная с версии MATLAB 6.0 существенно изменен и обновлен. Теперь в нем имеются следующие команды: • • • • • •
Edit Plot (Редактировать график) — редактирование графика; Zoom In (Увеличение) — увеличение масштаба графика; Zoom Out (Уменьшение) — уменьшение масштаба графика; Rotate 3D (Вращение 3D) — вращение в пространстве; Move Camera (Передвинуть камеру) — установка камеры-обзора; Camera Motion (Передвижение камеры) — установка перемещения камеры обзора; • Camera Axes (Оси камеры) — установка координатных осей при работе с камерой; • Camera Reset (Установка начального состояния камеры) — сброс установок камеры; • Basic Fitting — проведение аппроксимации и регрессии; • Data Statistics — получение статистических данных для точек графика. Две последние позиции этого меню дают весьма оригинальные возможности обработки точек графика — выполнение регрессии множеством методов с выводом (где это возможно) уравнения регрессии на график и вычисление статистических параметров для этих точек. Поскольку эти операции относятся к обработке данных, мы рассмотрим их более детально в главе 9.
2.7.4. Вращение графиков мышью Хорошее впечатление оставляет возможность вращения графиков мышью — прием, введенный в целый ряд систем компьютерной математики (Mathcad, Maple 6 и Mathematica 4). При вводе этой команды вокруг фигуры появляется обрамляющий ее параллелепипед, который можно вращать мышью (при нажатой левой кнопке) в том или ином направлении. Отпустив кнопку мыши, можно наблюдать график в пространстве. Интересно, что эта возможность действует даже в отношении двумерных графиков (см. рис. 2.14). При этом вращается плоскость, в которой расположен график. Эта плоскость размещается в упомянутом параллелепипеде.
2.7.5. Операции вставки В главе 1 мы уже рассматривали операции вставки с помощью основной панели инструментов. Эти возможности продублированы в позиции Insert (Вставка) меню графического окна. Рис. 2.14 показывает пример рисунка, в котором выполнены основные операции вставки с помощью команд меню Insert (Вставка). Это нанесение надписей по осям, титульной надписи, надписи внутри рисунка, стрелки, отрезка прямой, легенды и шкалы цветов. На этом рисунке меню Insert показано в открытом состоянии. 96
2.8. Работа с Мастером импорта данных
2.8. Работа с Мастером импорта данных 2 . 8 . 1 . Открытие окна Мастера импорта данных MATLAB предоставляет расширенные возможности по импорту данных. Для этого служит специальный Мастер импорта Import Wizard. Рассмотрим доступ к нему. При исполнении команды Import Data... в меню File открывается окно Import (рис. 2.16). В сущности, это обычное окно открытия файлов. Внизу его представлен открытый список типов файлов, содержащих импортируемые файлы. В их число входят mat-файлы, HDF-файлы, файлы изображений популярных форматов и некоторые виды специальных файлов (например, Windows-и кон и курсора мыши). Возможен также ввод данных со звуковых файлов и даже с видеофайлов формата AVI (кстати, попытка автора загрузить такой файл фильма с объемом около 700 Мбайт завершилась прочным «зависанием» компьютера). >ho.o, flan» ftS"
_U Banket ' 2)Book 2j Bookfari 21 Center I] Cm l eW i I] Chciago <| имя Файла* Хил Файлов:
j UJ CorntecOl DDIi Ci G Cj Germcen! Qlel D Intel! 0 Dlntel2 1
_._
_..._ ._.
EJ
£
Q Iol2000 Dlra D Isdn CJ Knowlege QKrist GKrislina DMaW_u 1
• Mens CjMmtt-14 LJ Moscow ' • Ni.2001 ' Q 0v2001 | DPe Clj Pentium4
-f«mrr--z'mr^amji.
Recogni?ed data tiles Recognized dafa files CompuServe Graphics Interchange f.gif) Cursor FormatC.cur) HDForHDF-EOS(*.hdf) Icon Formal f'ico) MAT ('.mat) Movie ("avi) Portable Network G'aphics Cpog) Sound |",aa".snd. ".wavl
j Щ|фЬгТЬ 1 „^Отмена!;
*
*
Рис. 2.16. Окно Import импорта файлов с открытым списком их типов Выбрав нужный файл, можно наблюдать появление окна импорта данных Import Wizard. На рис. 2.17 это окно показано с загруженным файлом dvp.jpg, который представляет цифровую фотографию автора этой книги, заданную в формате JPG. Это окно имеет две большие панели — слева с данными о загруженных файлах, а справа с поначалу пустым окном просмотра массива, представляющего данные. Вид окна Мастера импорта достаточно прост и его возможности вполне очевидны. Однако они зависят от того, какие данные (например, текстовые, электронных таблиц, бинарные и т. д.) импортируются. 2.8.2. Информация о импортируемых бинарных данных Правая панель Мастера импорта при работе с бинарными файлами изображений отображает содержимое двух вкладок: • Image Preview — предварительный просмотр изображения; • dvp — просмотр содержимого массива с текущим именем dvpl (при загрузке другого файла имя этой вкладки будет иным). 97
Глава 2. Интерфейс
пользователя
Puc. 2.17. Окно Мастера импорта данных Import Wizard Для просмотра изображения надо нажать кнопку Show Image. При этом запускается специальный выовер изображений Image Viewer. Его окно с изображением автора представлено на рис. 2.17 (окно снизу и справа). Часть изображения можно выделить с помощью мыши, если при ее нажатой левой клавише поместить нужную часть изображения в образующийся при движении мыши прямоугольник. Отпустив левую клавишу мыши, можно наблюдать увеличенный фрагмент этого изображения (рис. 2.18). Просто щелчок левой или правой клавиши мыши увеличивает или уменьшает масштаб изображения. В правой панели можно наблюдать цифровые данные о загруженном массиве бинарных данных (рис. 2.19).
Click and drag to zoom
Puc. 2.18. Просмотр части изображения в увеличенном формате
98
2.8. Работа с Мастером импорта данных -JflJiJ
. Create vara i be l s in MATLAB e' workspace usn ig contents of File. JFAWEB_DVP\dvpJ .PG| r Cp ilboard. Preve twoF fJWE9_D . VPe ;vpJ .PG
Dwse. j
Puc. 2.19. Просмотр части изображения в увеличенном формате
Более удобно использовать для этого браузер рабочего пространства. Нажав кнопку Finish, можно занести импортируемый массив данных в рабочее пространство в виде одноименной с ним переменной. Если после этого открыть браузер рабочего пространства, то, щелкнув мышью по имени массива-переменной dvp, можно наблюдать все данные о загруженном массиве бинарных данных (рис. 2.20). Браузер рабочего пространства, как уже отмечалось, дает возможность доступа к любому элементу массива (даже многомерного), что открывает широкие возможности в самом тонком редактировании массивов — в том числе представляющих изображения. Однако это очень тонкая и кропотливая работа, которая более просто и наглядно делается современными редакторами изображений.
Using Toolbox Path Cache.
Type "help tooibox_path_cache" *
•Ф- Start
Puc. 2.20. Просмотр переменной dvp,. созданной в рабочем Мастером импорта
пространстве
99
Глава 2. Интерфейс пользователя 2.8.3. Импорт данных mat-формата Многие встроенные функции системы MATLAB представлены файлами mat-формата. Мастер импорта дает удобные средства для их загрузки и просмотра. На рис. 2.21 представлен вид окна Мастера импорта после загрузки файла logos.mat, задающего вывод логотипа системы MATLAB. Create «ш«а*8 In MATLAS'S v-wtepacs USIIIJ center!!* at
Preview iiuitciteclf.' 1 № 0
г
I
з *.
Рис. 2.21. Первое окно Мастера импорта с данными файла logos.mat Нетрудно заметить, что данный файл содержит множество переменных, список которых дан в левой части окна. Нажав кнопку Next, можно перейти к другому окну Мастера импорта, показанному на рис. 2.22. Здесь в сущности представлена та же информация, но в несколько ином виде. Переменные представлены как массивы и в их списке можно выделить только нужные из них. Select vaiiaoteg to Import using еИегкЬшэв. Create vaiiafites matililng erevtew.
Ямс. 2.22. Второе окно Мастера импорта с данными файла logos.mat Нажатие клавиши Finish теперь загрузит все массивы в рабочую область и создаст переменную с именем файла. 2.8.4. Импорт данных текстового формата Аналогичным образом происходит импорт данных текстового формата. На рис. 2.23 показано первое окно Мастера импорта при загрузке текстового файла. В качестве его взят файл лицензии license.txt. Нетрудно заметить, что в левой части- окна представлено начало полного текста лицензии. Нажав кнопку Next, можно наблюдать второе окно с данными этого 100
2.9. Новинки графического интерфейса MATLAB 7 •> m I port Wriwd- f /MATA lG5b/bcM*ie tut
юг ill
Г Comma] 6 spate • г stmc leo ln <~ Tab <~ otner 1 • Terthtadarn i Pr mew of E /MATLA65ec Jie lns9 M rhtU- IUNM' p«OTMM «« betDB provd ied «J Mwaw cetpowto in «id. iup[i»clP.i PXtc« ~
"
e
n
s
e
\
P m l w r u m t i t d to ю ч о
1
!
1
£
« , i v a , » « « - , Ш u « t h , « « « « * • t-cb. ft
A
g
r
e
e
T
r
.
e
s
a
n
d
m
e
c
e
h
a
n
t
n
t
e
d
n
)
1
to'
n
s
m
i
n
i
— i 6
U
p
o
n
y
o
u
r
a
g
!
—
f
•-
tCfocce ol skilled J t v e l c p t e m expects and thr •f
|
.•--••
»}'
LJj
• /Camel':" | ••'. «Sack :
-
_M .
i .
«
.
|
_
;
:
;
.
,
;
.
.
,
:
•
,
:
•
Puc. 2.2J. Первое окно Мастера импорта с данными файла license.txt «•alert varUMei ю imnon using rhetKhoxf s <" Create vansiiti'S riiattfsii>g pfenew
variables in E/MATLABibnicense.M pieviewlruflpeteo ta KtoiQ
i 1 i нпй^^ми'ШГтими
г
1
1 э 1 «
Agreement fo: These license
з Delaware cori Hifi Dnve, Nat Upon your ag; button below.; receive, review ~JZL certain ccimiji information iri '1
1
e«« | .6.Л | : ,:• | fra«h |
_tl
Рис. 2.24. Второе окно Мастера импорта с данными файла license.txt файла (рис. 2.24). На этот раз видно, что данный файл представлен одним массивом с именем, совпадающим с именем файла. 2.8.5. Об экспорте данных Данные, размещенные в рабочей области системы MATLAB, можно экспортировать. Для этого используются обычные файловые операции записи файлов в тех или иных форматах. Подробное описание этих операций, а также операций импорта с командами, вводимыми из командной строки, дано в главе 9, описывающей обработку и сохранение данных. Операции импорта и экспорта файлов открывают обширные возможности по обмену данными между системой MATLAB и другими программами, а также по управлению различными внешними устройствами.
2.9. Новинки графического интерфейса MATLAB 7 2 . 9 . 1 . Новая позиция меню Graphics Из самых серьезных нововведений в новейшей версии системы MATLAB 7 надо отметить новые возможности редактирования и создания графики. Долгое время главными достоинствами системы MATLAB считались возможности векторных и матричных вычислений и удобные средства расширения. Но оказалось, 101
Глава 2. Интерфейс
пользователя
что MATLAB обладает еще и уникальными средствами графики, превосходя по обилию видов графики многие другие системы компьютерной математики. Поняв это, разработчики новейшей реализации MATLAB 7 закрепили свое лидерство в новых средствах графики. Новая позиция Graphics меню содержит всего три основные команды: • New Figure — открывает пустое окно графики; • Plot Tools — открывает окно редактора графики; • More Plots... — открывает окно доступа к различным видам графики. Первая команда очевидна, а две другие будут детально описаны ниже. 2.9.2. Работа с окном 2О-графики MATLAB 7 Рассмотрим работу с редактором графики вначале на примере 2О-графики. Рисунок 2.25 дает пример построения графиков двух простых функций. Соответствующие команды заданы в командной строке MATLAB. На рис. 2.25 показано также окно графики с построенными кривыми. Пока ничем выдающимся это построение не отличается. Fb i Edi Debug Deskop VWndow H 1i Ш ® "и S I % i ЕЗ
By Fib
(x) . / x ;
^1x201 double*
Divide
<1 к2О1 doubles <1K2O1 double>
b:
douli
Fe li Edt Veiw \ Insert Toosl D О* О &
xi-abol Title ,
Г
Legrrrf
'
г '
'
/'•'
—
d
—
'
« . i
d . .
a
3
^ Colorbar /
\
\
/ f
\
1
\
•
' i
_
l
I
\
Double Arrow
1
Te«Box
\
Rectangle
\
Ebpse
I y
"•
f
- /
i
i
i
\ j
1
0
-5
0
5
1
•«-•I " Рис. 2.25. Построение графиков двух функций в среде MATLAB 7 Обратите внимание на то, что построение графиков сопровождается появлением в рабочем пространстве трех массивов — переменных х, у и z. Они видны в окне выовера рабочего пространства. Полезно подметить и то, что в окне графика в панели инструментов появились новые кнопки: • • • • • 102
Data cursor — вывести данные по месту установки курсора. Insert Color Bar — вставить в рисунок панель цветов; Insert Legends — вставить легенду; Hide Plot Tools — скрыть окно редактора графики; Show Plot Tools — показать окно редактора графики.
2.9. Новинки графического интерфейса MATLAB 7 Все эти команды очевидны. Стоит только отметить первую команду — если навести курсор на место кривой графика и щелкнуть левой клавишей мыши, то появится всплывающее окошко с координатами точки. При этом действует система автоматического слежения курсором за кривой. Многие команды по обработке графиков в графическом окне соответствуют уже описанным командам, их можно вводить как из меню окна графики, так и с помощью контекстного меню — на рис. 2.25 представлена позиция меню Insert в открытом состоянии. 2.9.3. Работа с редактором графики MATLAB 7 Редактор графики это принципиально новое графическое средство системы MATLAB. Он служит как для редактирования уже созданных М-файлами или командами в командной строке графиков, так и для создания графиков заданного пользователем типа. Редактор графики можно ввести из окна графики, из меню этого окна и из меню Graphics окна системы MATLAB. Если введены массивы, нужные для построения графики, то позиция Graphics меню расширяется набором команд, для построения возможных типов графиков. Это хорошо видно из рис. 2.26, на котором показана открытая позиция Graphics. В ней видны команды построения обычного графика, столбикового графика, круговой диаграммы и т. д.
orka^ace j 77
( е ) ; f i g u r e (get)
Z)
-
3 - 3
[[-3
с
peeks(30);
(7,
3
-10
Б])
'Dtapi-ivWiMrt.--.' ,
'-,;• ) ;
.0:0.1:10;
Рис. 2.26. Окно системы MATLAB 7 с открытой позицией Graphics меню Исполним, например, команду p l o t (у) и увидим появившееся окно редактора графики (рис. 11.27). В левой его части имеется панель Figure Palette, которая имеет три области: • New Subplot — открытие новых 2D- и ЗО-графиков; • Variables — выбор из списка переменной-массива, по данным которой строится очередной график; • Annotations — выбор средств украшения графиков (стрелки, текстовые надписи, окружности и эллипсы, прямоугольники и т. д.). 103
Глава 2. Интерфейс
File
Edit
View
Insert
пользователя
Tools
Desktop
Window
НЫр
. W Axes (no title) /
\
/
\ i- ^
СОРУ
Delete
\
•*• Vateblei
I /
Unpin
( A
•"• Anratetl \
edit Text
\
/ j
\
№. V
^-
Text Background Co .Font...
'
.
Lme Width Line Style
' 0
Backyound
•
50
100
Head Stye l Head Sue
& j \
Рис. 2.27. Пример работы с редактором графики для случая 2Э-графики Выбрав, к примеру, переменную z и щелкнув по ее имени мышью, можно наблюдать построение графика соответствующей функции — в данном случае sin(x)./x. Воспользовавшись средствами Annotations, можно разнообразить график, например нанести на него стрелку для текстовой надписи, что и показано на рис. 2.27. Показано также контекстное меню правой клавиши мыши, которое дает доступ к операциям, возможным для данного графика. В частности, есть команда Reverse Direction для изменения напра1зления стрелки. Вид окна редактора после изменения направления стрелки и введения текстовой надписи показан на рис. 2.28. Рисунок 2.29 демонстрирует возможность построения двух графиках в разных окнах редактора графики. Как происходит разбивка окна, мы рассмотрим чуть позже. Обратите внимание на еще одно средство контроля — панель свойств редактора, расположенную снизу. Она контекстно-зависимая и на рис. 2.29 соответствует установке осей Axes (на рис. 2.28 эта панель относится к фигуре — Figure). Здесь можно задать титульную надпись, ввести линии разметки окна, построить прямоугольник вокруг графика, проверить и изменить пределы изменения переменных, назначить линейный или логарифмический типы графика, изменить шрифт надписей, вызвать инспектор графика и т. д. Для углубленного изучения графика и его основных свойств служит инспектор графики. Он вызывается из окна редактора графики активизацией кнопки Inspector. Окно инспектора графика показано на рис. 2.28 снизу. С помощью этого окна можно установить любые свойства объектов графика, например цвет линий, их тип и т. д. и т. п. О многих из них обычный пользователь может и не догадываться, но профессионал оценит такую возможность весьма положительно. 2.9.4. Построение в MATLAB 7 графиков из их каталога Если есть данные для построения графика (например в виде переменной-массива), то для построения графика достаточно задать его тип. Для этого следует в позиции меню Graphics исполнить команду More Plots.... Появится окно с катало104
2.9. Новинки графического интерфейса MATLAB 7
Рис. 2.28. Окно редактора графики после работы над 20-графиком Ffie EdK veiw tnstn. Tods pasto» Wndow Hr-o t
msUTa" Г? ^ «i n ® + D a
\ Arow ^ OouWe Afro us j•FcI : Color,: •» -| J,.\ : Odd; Г X Г V Г Z Га»
V Label ) V Lm i tis, j-1 V Scael: Lniear
ты,.. |
W|i
. • P AUo _^J Г" Reverse
Рис. 2.29. Окно редактора графики с двумя графиками гом графиков Plot Catalog (рис. 2.30). В нем надо указать имя переменной, хранящей данные для построения графика, — например z для наших экспериментов. По вертикали окно каталога графиков делится на три области: • Categories — категория графиков; • Plot Types — тип графиков в пределах каждой категории; • Description — описание выделенного (выбранного) графика. В каталоге представлены все типы графиков, которые способна строить система MATLAB 7, включая особую handle-графику. Каталог дает наглядный вид графиков, что облегчает их выбор и в дальнейшем построение. 105
Глава 2. Интерфейс пользователя •..:.
2-D Line
G r a p h
2-0 line graph using linear
axes
V e c l o r s c r e a t e a s i n g l e line,
malm
Plotted Variables
line vs. its n i dex. • N vara i be l paris - plot each pari of vara i be l s in the see l cted PL. _ Л 1 Ш Я Й mm Rte Edt View Ins» Tods
о о* a .ajfe
-•
SI 61 \
..0-5
/
\
i
0 "О
\ V /
50
100
15C
260
Рис. 2.30. Окно каталога графиков
В простых случаях, если пользователь уверен в возможности построения графика по выбранным данным, достаточно нажать кнопку Plot внизу области Description. Будет построен график в стандартном окне графики системы MATLAB — см. это окно в области Description на рис. 2.30. Кнопка Plot in New Figure позволяет приступить к построению новой фигуры. Теперь попытаемся построить график трехмерной поверхности с линиями равного уровня на плоскости под графиком. Окно каталога в этом случае показано на рис. 2.31 с установкой на категорию 3D Surface. Выберем подходящий тип графика —второй сверху. В разделе описания Description появится статья с описанием назначения и построения выбранного графика. . Po lted Vara ibe l *: 3-D Surface Plot with Contour e jo lw Po l ted Vara i be ls » Sn ige l vara ibe l (z) -- po l t matrxi vau ler as heg ihts above h i e x-y palne and map data vau les to coo lrmap. • Three vara ibe ls (x, Y, Z) •• X and Y ate vectors or matrcies defining the x and у components of э surface • Four variables (X, Y, 2, C) - С is a mwlrix the same size as z, defining surface color Мог» Information See the s u r f c reference page for more information.
Рис. 2.31. Окно каталога графиков с категорией 3D Surface 106
2.9. Новинки графического интерфейса MATLAB 7 Поскольку в данном случае мы не подготовили данные для построения графика, то использовать кнопку Plot нельзя — будет получено сообщение об ошибке. Однако в разделе описания в конце его есть гиперссылка surfc, которая открывает раздел справки по нужной функции (рис. 2.32). В конце справки по данной функции (рис. 2.33) можно найти пример ее применения. Его надо выделить, что показано на рис. 2.33, и перенести в окно MATLAB для исполнения. Можно и сразу проделать это с помощью контекстного меню правой клавиши мыши.
№
View
tdt.
•< |
;••-& Begn i Here ••*.•«# Ree lase Notes ®-0 Installation f 0 MATLAB • HrQt Getn i g Started !
&--ф- Examples
j
t j j - l ^ l Desktop Tools and Developme^
;
ijj- !Q Mathematics
Ш
MATLAB Function Refer surf,
surfc
3-D shaded surface plot Syntax surf(Z)
:
l i i f - l ^ Graphics
surf(X,У,Z!
;
i s H t j 3-D Visualization -
surt(X,Y,Z,C)
I
;
;
j
it--Mathematics
i
}
IS File I/O
:"•'• Desktop Tools "and Developmt
|
:
Г*! Graphics
I |
! :
& 3-D Visualization (b- Crealing Graphical User Interf;1
I
г~Щ Functions -Alphabetical L i s t ' !l External Interfaces
Description
color specified by z or с
mathematcial functo i ns ovet a e l ctangua l r rego i n. id parametrci surfaces specfied by X, T. and Z, wild
i External Interfaces Refer* J Release Notes 3 Printable Documentation
mponecti!
Puc. 2.32. Окно справки по функции surfc
C*sktop W)nd»« He> t |De^E| О Begin Here ч ^ Release Noies «Ф Installation 4 > MATLAB - # Gelling Start -Q- Examples %
Desktop Tools and Develcpme_
fgt Mathematics ©
Programming
e
Graphics
© 3 - D Visualization IJt) Creating Graphical Us
Ш^•Desktop Toosl and Deveo l pme •1 Mathematc is « Programmn i g and Data Types •} File /IO .••Graphcis «-3-D Visualisation =atn i g Graphical User Interfi -Щ
Functions - Alphabetical List
•• Ifs) Handle Graphics Properfy Bro .••© External Interfaces r-igt External Interfaces Reference :-;|J Release Notes иЫе Documentation (PDF 1
. Окно справки по функции surfc с примером ее применения 107
Глава 2. Интерфейс
пользователя
Исполнив пример, можно наблюдать построение графика в окне трехмерной графики. Этот случай показан на рис. 2.34. Теперь все данные графика размещаются в рабочем пространстве и можно воспользоваться редактором графики для дальнейшей обработки графика. Plotted Vartabto»; jy Oateeore is . Po lt Types
Puc. 2.34. Пример построения графика поверхности и контурного графика 2.9.5. Некоторые другие особенности применения редактора графики Отметим еще несколько особенностей применения редактора графики. Мы уже отмечали возможность построения множества графиков в одном окне редактора. Для этого достаточно активизировать темный треугольник у квадратика с разбиением на части в области редактора Figure Palette. Появится шаблон для задания макета окна — на рис. 2.35 показано выделение одного окна, но можно выделить и большее число окон. Если данных для построения графика нет, то окно графики в окне редактора графики будет пустым (рис. 2.36). Если шаблон графики выбран с несколькими графиками, то появится несколько окон графиков. Чтобы построить данные, в пустом окне редактора графики надо добавить данные. Для этого достаточно исполнить команду Add Data..., доступную, например, из контекстного меню правой клавиши мыши (рис. 2.37) в случае, когда курсор мыши размещен внутри пустого окна. Эту команду можно исполнить и из панели браузера графики (в правой части его окна). Появится окно Add Data to Axes. В этом окне имеется список типов графиков, а также данные для установки данных. Например, если мы хотим построить график функции Б1П(Х)ЛЗ, ТО МОЖНО задать данные по оси х как автоматически формируемые, а по оси у ввести выражение sin(x).A3. Нажав кнопку ОК, получим построенный график в окне редактора графики — см. рис. 2.38. 108
2.9. Новинки графического интерфейса MATLAB 7 FSe
Е*
v*sw
Insert Toote Desktop Window
Help
Q"S У mipTiCoio'® M»Si о s l o"i • К ЗI
1
•» New Subpolts ^ 3D Axes Ш>; WLJ ш
u
УагиЫаЕ
w
ffi
1
at
• Annotations
\
Double Arrow
T Text Box
i ' Stiow Figure Number С dor map
Insoector
j IH№: i i
; FigureCotor
"Э* - I
- •
j
Puc. 2.35. Пример задания шаблона окна графики внутри редактора графики
Ffe Efk V«« Insert Toosl DesUop W nidow Hepl "" W r ^ C ®v4tH D Si n » New Subplots • 2D Axes k, 3D Axes
Ш>
• VanaWes Sx ^
1x201 '
^ Anriotetiofis \ A 1
^ Doube l Arrow
_ J
T Text Box zl
00 0.8 07 06 0.51 a4
Cop/ Paste Deelte Show Legend
0.3 0.2 0.1
ot X A^is j у Axis
• Cotors: -5» -j JLA • Grtt
Г" X Г
'
ГЕО»
V Г Z
Z Aiis j Fort 1
x Label. [ X L*rtt5. jo x aceie: | Line a
Tcbs
to|i
:::
1
f ^ AUO j j
Г
Revwse
Рис. 2.36. Пример вывода пустого окна графики В контекстном меню правой клавиши мыши (см. рис. 2.36) имеется команда Show M-code для просмотра М-файла, обеспечивающего построение заданного графика. Эта команда вызывает появление окна редактора М-кодов с текстом файла. Это окно показано на рис. 2.38 снизу. На этом обзор основных возможностей графического интерфейса MATLAB 7 мы закончим. Разумеется, есть и другие, менее значимые возможности графического редактора, которые пользователь может освоить самостоятельно. 109
Глава 2. Интерфейс
пользователя
Fb is EdA ¥*v« n I sert Took Desa top Wd *iow Met * D t)!o • ' EB> •
0.9 0.8 07
i
0.6 o.a 0.4
\ Ln ie \ Doubel Ai re ^ Text Arow T Text Box
>' Data Soiree j auto
" 3 ;
0.3 0.2 0.1 Di
X Axis Y Axis j 2 Axi
KLMs: jo Г V Г V Г Z
X Scale. ! Linear
Г Box
Puc. 2.37. Подготовка к добавлению данных •JQi.il
; rfe Edti V W w Insert Toosl Desktop Wnidow Hepl о* с» У а П7 ®. У. о ^ * D • •'
E ;» . r • i , r.., I. • Ip a r e n t l , y l ) CREATEA/:E3fPAPSNTi, VI) ?AFENT1: axes jmren
holdtaxesl,'All1);
plocl - plot(yl,
Puc. 2.38. Построенный по введенным данным график
ПО
Глава 3. Математические операции 3 . 1 . Вычислительные и логические операции 3.1.1. Арифметические
матричные операторы и функции
Арифметические операторы являются самыми распространенными и известными. В отличие от большинства языков программирования, в системе MATLAB практически все операторы являются матричными, то есть они предназначены для выполнения операций над матрицами (табл. 3.1). Таблица 3.1 Арифметические операторы и функции MATLAB Функция
Название
Оператор
; plus
Плюс
+
J uplus
Унарный плюс
+
М1+М2
+м М1-М2
minus
Минус
uminus
Унарный минус
-
-м
Матричное умножение
*
М1*М2
Поэлементное умножение массивов
.*
А1*А2
j mtimes .. times
!
Синтаксис
mpower
Возведение матрицы в степень
М1 Л х
power
Поэлементное возведение массива в степень
А1 Л х
mldivide
Обратное (справа налево) деление матриц
mrdivide
Деление матриц слева направо
/
М1\М2 М1/М2
ldivide
Поэлементное деление массивов справа налево
.\
А1ДА2
rdivide
Поэлементное деление массивов слева направо
kron
Тензорное умножение Кронекера
А1./А2 kron
kron(X,Y)
Обратите внимание на то, что каждый оператор имеет аналогичную по назначению функцию. Например, оператору матричного умножения * соответствует функция mtimes (М1,м2). Примеры применения арифметических операторов уже не раз приводились, так что ограничимся несколькими дополнительными примерами: >> А=[1 2 3 ] ; >> В=[4 5 6] ; >> В-А ans = 3 3 3 >> m i n u s ( В , А )
>> А . Л 2 11
Глава 3. Математические ans = 1 4 9 >> p o w e r ( А , 2 ) ans = 1 4 9 » А. \В ans = 4 . 0 0 00 2 . 5 0 0 0 >> l d i v i d e ( А , В ) ans = 4.0000 2.5000 >> r d i v i d e ( А , В ) ans = 0.2500 0.4000
операции
2.0000
2.0000
0.5000
Соответствие функций операторам и командам в системе MATLAB является одним из основных положений программирования. Оно позволяет одновременно использовать элементы как операторного, так и функционального программирования. Следует отметить, что в математических выражениях операторы имеют определенный приоритет исполнения. Например, в MATLAB приоритет 1) круглые скобки; 2) операции транспонирования и возведения в степень; 3) одноместные операции (унарные + и —, логическое отрицание ); 4) арифметические операции умножения и деления; 5) арифметические операции сложения и вычитания; 6) оператор сечения массива :; 7) операторы отношения; 8) логические операторы. Для изменения приоритета операций в математических выражениях используются круглые скобки. Степень вложения скобок не ограничивается. 3.1.2. Операции отношения Для выполнения операций отношения предназначены операторы отношения. Они служат для сравнения двух величин, векторов или матриц. Все операторы отношения имеют два операнда, например х и у, и записываются, как показано в табл. 3.2. Таблица 3.2 Операторы и функции отношения Функция eq j
ne
112
Название Равно
Оператор ==
Не равно
Пример х==у х~=у
It
Меньше чем
<
gt
Больше чем
>
х>у
le
Меньше или равно
<=
х<=у
ge
Больше или равно
х<у
х>=у
3.1. Вычислительные и логические операции Данные операторы выполняют поэлементное сравнение векторов или матриц одинакового размера и возвращают значение 1 (True), если элементы идентичны, и значение 0 (False) в противном случае. Если операнды — действительные числа, то применение операторов отношения тривиально: » eq(2,2) ans = 1
•
>> 2==2 ans = 1 >> n e ( I , 2 ) ans = » ans 0 >> ans 1 » ans Э
2 ~= 2 = 5 > 3 = l e (5,3) =
Следует отметить, что операторы <, <=, > и >= при комплексных операндах используют для сравнения только действительные части операндов — мнимые отбрасываются. В то же время операторы == и -= ведут сравнение с учетом как действительной, так и мнимой частей операндов. Следующие примеры поясняют это положение: )>= ans 1
=
ans = 0 >> abs (2+3i)>abs(2+i) ans = >> (2+3i)==(2+i) ans = 0 >> (2+3i)~=(2+i) ans = 1 Если один из операндов — скаляр, происходит сравнение всех элементов второго операнда-массива со значением этого скаляра: м= -I О 1 2 >> М>=0
113
Глава 3. Математические операции
ans = 0 1 1 1
В общем случае операторы отношения сравнивают два массива одного размера и выдают результат в виде массива того же размера: >> М>[0 1; 1 0] ans = 0 0 0 1
Таким образом, спектр применения операторов отношения в системе MATLAB шире, чем в обычных языках программирования, поскольку операндами являются не только числа, но и векторы, матрицы и массивы. Возможно применение операторов отношения и к символьным выражениям: ans = т_ » 'abc'=='abc' ans = 1 1 1 >> ' c b a ' < ' a b c ' ans = 0 0 1
В этом случае символы, входящие в выражения, представляются своими ASCII-кодами. Строки воспринимаются как векторы, содержащие значения кодов. Все это надо учитывать при использовании управляющих структур языка программирования, в которых широко применяются операторы отношения. 3.1.3. Логические операции и операторы Логические операторы и соответствующие им функции служат для реализации поэлементных логических операций над элементами одинаковых по размеру массивов (табл. 3.3). Они широко используются в управляющих структурах программ (см. главу 10). Таблица 3.3 Логические операторы и функции MATLAB Функция i
Название
and
Логическое И (AND)
or
Логическое ИЛИ (OR)
not
Логическое НЕ (NOT)
xor
Исключающее ИЛИ (EXCLUSIVE OR)
any
Верно, если все элементы вектора равны нулю
all
Верно, если все элементы вектора не равны нулю
Работа операторов поясняется приведенными ниже примерами: 114
Обозначение
1
3.1. Вычислительные и логические операции » А=[1 2 3 ] ; >> В=[1 0 0 ] ; >> and(А,В) ans = '1 О О >> or(А,В) ans = 1 1 1 >> А&В ans = 1 0 0 » А|В ans = 1 1 1 >> nor(A) ans = 0 0 0 >> not(B) ans = 0 1 1 >> ~B ans = 0 1 1 >> xor(A,B) ans = 0 1 1 >> any(A) ans = 1 >> a l l ( [0 0 0]) ans = 0 >> all.(B) ans = 0 >> a n d ( ' a b c ' , ' 0 1 2 ' ) ans = 1 1 1
Обратите внимание, что аргументами логических операторов могут быть числа и строки. При аргументах-числах логический нуль соответствует числовому нулю, а любое отличное от' нуля число воспринимается как логическая единица. Для строк действует уже отмеченное правило — каждый символ строки представляется своим ASCII-кодом. В MATLAB возможны также укороченные логические операторы && и || (укороченные И и ИЛИ). Эти операторы осуществляют укороченную проверку логических выражений. Например, в выражении А&&В если оператор А ложен, то проверка оператора В уже не осуществляется, поскольку результат тождественно ложен. Аналогично в А||В если оператор А истинен, то выражение не проверяется, поскольку оно заведомо истинное. 115
Глава 3. Математические операции
3.2. Специальные символы 3.2.1. Специальные символы К классу операторов в системе MATLAB относятся также специальные символы. Они предназначены для создания самых разнообразных объектов входного языка и языка программирования системы и придания им различных форм. В табл. 3.4 представлено описание полного набора специальных символов. Таблица 3.4 Специальные символы MATLAB Обозначение
Название
Категория
Двоеточие
colon
( )
Круглые скобки
paren
[ ]
Квадратные скобки
paren
{ }
Фигурные скобки
paren
Десятичная точка
punct
Выделение поля структуры
punct
Родительский каталог
punct
Продолжение строки
punct
,
Разделитель
punct
г
Точка с запятой
punct
%
Комментарий
punct
I
Вызов команды операционной системы
punct
Присваивание
punct
Кавычка
punct
Транспонирование
transpose
Транспонирование с комплексным сопряжением
ctranspose
[,]
Горизонтальная конкатенация
horzcat
[;]
Вертикальная конкатенация
vertcat
= Л
г \
(
) , {
} , •
Присваивание подмассива
subsasgn
(
),{
Ь •
Ссылка на подмассив
subsref
Индекс подмассива
subsindex
Теперь рассмотрим их более подробно. • : (двоеточие) — формирование подвекторов и подматриц из векторов и матриц. Оператор : — один из наиболее часто используемых операторов в системе MATLAB. Оператор : использует следующие правила для создания векторов: • j : к — то же, что и [ j , j + l , . . . , k ] ; 116
3.2. Специальные символы • j : к — пустой вектор, если j>k; • j : i : k — то же, что и [ j , j + i , j + 2 i , . . . , к ] ; • j : i : к — пустой вектор, если i>0 и j>k или если i<0 и j
A(:,j:k)
— ЭТО А ( : , j ) ,А ( : , j + 1) ,...,А ( : , к ) ;
• А ( : , :, к) — это к-я страница трехмерного массива А; • A ( i , j , k , :) — вектор, выделенный из четырехмерного массива А. Вектор включает элементы A ( i , j , k , l ) , A ( i , j , k , 2 ) , A ( i , j , k , 3 ) и т. д.; • А (:) — записывает все элементы массива А в виде столбца. Символы ( ) (круглые скобки) используются для задания порядка выполнения операций в арифметических выражениях, указания последовательности аргументов функции и указания индексов элемента вектора или матрицы. Если х и v — векторы, то х (V) можно представить как [ x ( V ( l ) ) , X (V (2) ) , . . . , X (V(n) ) ] . Элементы вектора V должны быть целыми числами, чтобы их можно было использовать как индексы элементов массива х. Ошибка генерируется в том случае, если индекс элемента меньше единицы или больше чем s i z e (X). Такой же принцип индексирования действителен и для матриц. Если вектор v имеет т компонентов, а вектор w — п компонентов, то A(v,w) будет матрицей размера m x п, сформированной из элементов матрицы А, индексы которой — элементы векторов V И W.
Символы [ ] (квадратные скобки) используются для формирования векторов и матриц: • [ 6 . 9 9.64 s q r t ( - l ) ] — вектор, содержащий три элемента, разделенных пробелами; • [ 6 . 9 , 9 . 6 4 , i ] — такой же вектор; • [ l + j 2-j 3] и [1 +j 2 - j 3] — разные векторы: первый содержит три элемента, а второй пять; • [11 12 13; 21 22 23] — матрица размера 2 х 3. Точка с запятой разделяет первую и вторую строки. Еще несколько примеров: • А = [ ] — сохраняет пустую матрицу в А; • А (т, :) = [ ] — удаляет строку m из матрицы А; • А ( : , п) = [ ] удаляет столбец п из матрицы А. Символы { } (фигурные скобки) используются для формирования массивов ячеек. Например, {magic(3) 6.9 ' h e l l o ' } —массив ячеек с тремя элементами. Символ . (десятичная точка) используется для отделения дробной части чисел от целой. Например, 314/100, 3.14 и . 314е1 — одно и то же число. Кроме того, символ точки . используется для выделения полей структур. Например, A . ( f i e l d ) и A(i) . f i e l d , где А — структура, означает выделение поля структуры с именем « f i e l d » . 117
Глава 3. Математические
операции
Ниже перечислено назначение остальных специальных символов MATLAB: • . . (родительский каталог) — переход по дереву каталогов на один уровень вверх; • . . . (продолжение) — три или более точек в конце строки указывают на продолжение строки; • , (запятая) — используется для разделения индексов элементов матрицы и аргументов функции, а также для разделения операторов языка MATLAB. При разделении операторов в строке запятая может заменяться на точку с запятой с целью запрета вывода на экран результата вычислений; • ; (точка с запятой) — используется внутри круглых скобок для разделения строк матриц, а также в конце операторов для запрета вывода на экран результата вычислений; • % (знак процента) — используется для указания логического конца строки. Текст, находящийся после знака процента, воспринимается как комментарий и игнорируется (увы, за исключением русскоязычных комментариев, которые нередко ведут к ошибочным командам); • ! (восклицательный знак) — является указателем ввода команды операционной системы. Строка, следующая за ним, воспринимается как команда операционной системы; • = (знак равенства) — используется для присваивания значений в арифметических выражениях; • ' (одиночная кавычка, апостроф) — текст в кавычках представляется как вектор символов с компонентами, являющимися ASCII-кодами символов. Кавычка внутри строки задается двумя кавычками. Например: >> a = ' H e l l o ' ' m y f r i e n d ' а = Hello'my friend • ' (транспонирование с комплексным сопряжением) — транспонирование матриц, например А' — транспонированная матрица А. Для комплексных матриц транспонирование дополняется комплексным сопряжением. Строки транспонированной матрицы соответствуют столбцам исходной матрицы; • . ' (транспонирование) — транспонирование массива, например А. ' — транспонированный массив А. ДЛЯ комплексных массивов операция сопряжения не выполняется; • [, ] — горизонтальная конкатенация. Так, [А, в] — горизонтальная конкатенация (объединение) матриц А и в. А и в должны иметь одинаковое количество строк. [А В] действует аналогично. Горизонтальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [А, в, С]. Горизонтальная и вертикальная конкатенации могут использоваться одновременно: [ А , В , - С ] ; • [;] — вертикальная конкатенация. Так, [А;В] — вертикальная конкатенация (объединение) матриц А и в. А и в должны иметь одинаковое число столбцов. Вертикальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [А;В;С]. Горизонтальная и вертикальная конкатенации могут использоваться одновременно: [А; в, С]; • ( ), { } — присваивание подмассива. Приведем несколько примеров: 118
3.2. Специальные символы -
А(1)=в — присваивает значения элементов массива в элементам массива А, которые определяются вектором индексов I. Массив в должен иметь такую же размерность, как и массив I, или может быть скаляром; - A(l, J)=B — присваивает значения массива в элементам прямоугольной подматрицы А, которые определяются векторами индексов i и J. Массив в должен иметь LENGTH (I) строк и LENGTH ( J ) столбцов; - А{ 1}=в, где А — массив ячеек и I — скаляр, помещает копию массива в в заданную ячейку массива А. Если I имеет более одного элемента, то появляется сообщение об ошибке.
3.2.2. Системные переменные и константы Как отмечалось ранее, в состав объектов MATLAB входит ряд системных переменных и констант, значения которых устанавливаются системой при ее загрузке или автоматически формируются в процессе вычислений. Описание таких объектов приводится ниже. • ans — результат выполнения последней операции. Переменная ans создается автоматически, когда не определены выходные аргументы какого-либо оператора. Пример: >> c o s ( [ 0 : 2 * p i ] ) ans = 1.0000 0.5403 -0.4161
-0.9900
-0.6536
0.2837
0.9602
• computer — возвращает строку с информацией о типе компьютера, на котором установлена система MATLAB; • [str,maxsize] = computer — возвращает строку s t r с информацией о компьютере и целое число maxsize, содержащее максимально допустимое число элементов матрицы для данной версии MATLAB. Пример: >> [str,maxsize] = computer str = PCWIN maxsize = 268435455
• eps — возвращает интервал между числом 1.0 и следующим ближайшим числом с плавающей запятой, которое воспринимается как отличное от 1.0. Значение eps определяет заданный по умолчанию порог для функций pinv и rank, а также для некоторых других функций. На машинах с арифметикой с плавающей запятой eps = 2 Л (-52), что приблизительно составляет 2 .22е-16. Пример: >> eps
ans = 2.2204е-016 • i или j — мнимая единица (равная s q r t ( - l ) ) , которая используется для задания мнимой части комплексных чисел. Символ i при задании комплексной константы можно использовать без знака умножения. В качестве мнимой единицы можно также использовать символ j . Пример: >> w=3+5i
119
Глава 3. Математические операции W =
•
,
3.0000 + 5.0000i ПРИМЕЧАНИЕ Переменным i и j можно задать и иное значение, 'например, они могут выступать в качестве индексов в циклах for. Однако это чревато путаницей, если внутри цикла пользователь задает" выражения с комплексными числами. 'Используйте как индексы I и J вместо iuj. • Inf — возвращает представление положительной бесконечности для машинной арифметики. Бесконечность следует из операций, подобных делению на нуль, и переполнения, которое ведет к результатам, слишком большим, чтобы их можно было представить в виде числа с плавающей запятой. Пример: » 4/0 Warning: Divide by zero, ans = Inf • inputname (argnum) — возвращает в тело функции название переменной рабочей области, соответствующее аргументу с номером argnum. Может использоваться только внутри тела функции.. Если входной аргумент не имеет никакого символьного представления (например, если это выражение или функция, дающая на выходе выражение, например, а(1), vararginj:}, eval(expr), а не переменная), функция inputname возвращает пустую строку («»); • j — мнимая единица. Символ j можно использовать в качестве мнимой единицы наряду с i. Как мнимая единица (равная s q r t (-1)) символ j используется для задания мнимой части комплексных чисел. Все сказанное о символе i относится и к j . Пример: » s=4-3j
S —
4.0000 - 3.0000i
• NaN — возвращает представление для нечисловых величин, например, в случае операций, которые имеют неопределенные численные результаты. Пример: » s=0/0 Warning: Divide by zero. . ' . s = NaN Функция nargchk часто используется внутри m-файлов для проверки соответствия количества входных параметров (аргументов): • msg = nargchk (low, high, number) — возвращает сообщение об ошибке, если число number меньше, чем low, или больше, чем high, в противном случае возвращается пустая строка. Пример: >> msg = nargchk (4,9,5) msg = [ ] >> msg = nargchk (4,9,2)
120
3.2. Специальные
символы
msg = Not enough input arguments. msg = nargoutchk(low,high,number) — возвращает сообщение об ошибке, если число number выходных параметров (выходных аргументов в терминологии MATLAB) меньше, чем low, или больше, чем high, в противном случае возвращается пустая строка. Еще две функции позволяют определить число входных и выходных параметров функции: • nargin' — возвращает число входных аргументов, определенных для функции. Внутри тела m-файла функции nargin и nargout указывают, соответственно, количество входных или выходных аргументов, заданных пользователем. ,Вне тела m-файла функции nargin и nargout показывают, соответственно, число входных или выходных аргументов для данной функции. Отрицательное число аргументов означает, что функция имеет переменное число аргументов; • nargin (@fun) — возвращает число объявленных входных параметров для функции fun. Если функция имеет переменное число входных аргументов, возвращается - i ; • nargout — возвращает число выходных параметров, определенных для функции; ' • nargout (' fun') — возвращает число объявленных выходных параметров для функции fun. Применение этих функций мы рассмотрим позже при описании структуры функций. Продолжаем перечисление системных переменных: • pi — число (отношение длины окружности к ее диаметру), pi возвращает число с плавающей запятой, ближайшее к значению п. Выражения 4 * a t a n ( l ) и imag (log (-1) ) выдают тот же результат. Пример: >> pi ans = 3.1416
,
• reaimax — возвращает самое большое число в формате с плавающей запятой, соответствующее конкретному компьютеру. Большее значение соответствует системной переменной Inf. Пример: >> n = r e a i m a x п = 1.7977е + 308
•
• ,
''
• realmin — возвращает наименьшее нормализованное положительное число в формате с плавающей запятой, представимое на конкретном компьютере. Любое меньшее число воспринимается как ноль. Пример: >> n = realmin п= 2.2251е-308 Переменные v a r a r g i n и varargout позволяют использовать в функциях переменное число входных и выходных параметров: 121
Глава 3. Математические
операции
• varargout = foo(n) — возвращает список выходных параметров переменной длины функции f оо; • у = function bar (varargin) — принимает переменное число аргументов в функцию bar. Переменные v a r a r g i n и varargout используются только внутри т-файлов функции для задания произвольных аргументов функции. Эти переменные должны быть последними в списке входов или выходов, а для их обозначения могут использоваться только строчные буквы. Использование этих возможностей мы рассмотрим в главе 10.
3.3. Работа со специальными данными 3 . 3 . 1 . Поразрядная обработка данных Ряд функций предназначен для поразрядной логической обработки данных: • bitand(A,B) — возвращает поразрядное И двух неотрицательных целых аргументов А й в . Пример: >> f = b i t a n d ( 7 , 1 4 ) f = 6
• bitcmp (A, n) — возвращает поразрядное дополнение аргумента А как л-битовое неотрицательное целое число. Пример: >>
g=bitcmp(6,4)
g = 9
• bitor(A,B) — возвращает поразрядное ИЛИ двух неотрицательных целых аргументов А й в . Пример: >> v=bitor(12,21) v = 29 • bitmax — возвращает максимальное целое число без знака, которое может быть представлено в формате чисел с плавающей запятой применительно к используемому компьютеру. Это значение определяется для комбинации, когда все биты установлены. На машинах с IEEE-арифметикой это значение равно 253 — 1. Пример: >> bitmax ans = . , . ' 9.0072е+015 • b i t s e t (A, b i t ) — устанавливает бит в позиции b i t аргумента А в единичное значение. Аргумент А должен быть неотрицательным целым, b i t — это номер в диапазоне между 1 и числом бит в целом числе, представленном в формате чисел с плавающей запятой. • b i t s e t (A, b i t , v) — устанавливает бит в позиции b i t равным значению v, которое должно быть 0 или 1. Пример: »
122
d=bitset(12,2,1)
3.3. Работа со специальными
данными
• b i t s h i f t (А, п) — возвращает значение аргумента А, сдвинутое на п бит. Если п>0. это аналогично умножению на 2" (левый сдвиг). Если п<0, это аналогично делению на 2" (правый сдвиг). Пример: >> f=bitshift (4,3) f = 32 • b i t g e t (A,bit) — возвращает значение бита в позиции b i t операнда А. Аргумент А должен быть неотрицательным целым числом, b i t — это номер между 1 и числом бит в целом числе формата с плавающей запятой. Пример: >> disp(dec2bin (23)) 10111 >> С = b i t g e t ( 2 3 , 5 : - 1 : 1 ) С = 1 0 1 1 1
• bitxor(A,B) — возвращает результат поразрядного исключающего ИЛИ для двух аргументов А Й В . Оба аргумента должны быть целыми. Пример: >> x = b i t x o r (12,31) 19
Чтобы операнды этих функций гарантированно были целыми числами, при их задании рекомендуется использовать функции c e i l , fix, floor и round. 3.3.2. Обработка множеств Множество — первичное понятие математики, не имеющее четкого определения. Под множеством подразумевается совокупность некоторых объектов, например, книг в библиотеке, людей в зале или элементов вектора. В этом разделе приводятся некоторые функции для обработки множеств, представленных векторами. Они широко используются при анализе и обработке данных. • i n t e r s e c t (a,b) — возвращает пересечение множеств для двух векторов а и Ь, то есть общие элементы векторов а и Ь. Результирующий вектор отсортирован по возрастанию. Если входные массивы не являются векторами, то они рассматриваются как совокупность векторов-столбцов а=а (:) или b=b ( : ) ; • i n t e r s e c t (a, b, ' rows ' ) — возвращает строки, общие для а и Ь, когда а и b представляют собой матрицы с одинаковым числом столбцов; • [ c , i a , i b ] = i n t e r s e c t (a,b) — также возвращает вектор-столбец индексов ia и ib, но так, что с = a (ia) и с = b (ib) (или с = a (ia, :) и с = b(ib, :)). Пример: » А = [ 1 7 2 6]; В = [ 7 2 3 4 6 1]; >> [ c , i a , i b j = i n t e r s e c t ( А , В )
123
Глава 3. Математические операции д. а = 1 3 4 2 ib = 6 2 5 1 • ismember (a, S) — возвращает вектор той же длины, что и исходный а, содержащий логические единицы на месте тех элементов вектора а, которые принадлежат множеству S, и логические нули на месте тех элементов вектора а, которые не принадлежат множеству S; • ismember (A, s, ' r o w s ' ) — возвращает вектор, содержащий логические единицы там, где строки матрицы А являются также строками матрицы S, и логические нули в остальных позициях. А и s должны быть матрицами с одинаковым числом столбцов. Пример: » s e t = [0 1 3 5 7 9 11 15 17 1 9 ] ; >> а = [ 1 2 3 4 5 6 7 8 ] ; >> k = ismember ( a , s e t )
к=
1 0 1 0 1 0 1 0 • s e t d i f f (a,b) — возвращает разность множеств, то есть те элементы вектора а, которые не содержатся в векторе Ь. Результирующий вектор сортируется по возрастанию; • s e t d i f f (a, b , ' r o w s ' ) — возвращает те строки из матрицы а, которые не содержатся в матрице Ь. Матрицы а и b должны иметь одинаковое число столбцов; • [с, i ] = s e t d i f f ( . . . ) — возвращает также вектор индексов i, такой что с = a (i) или с = a ( i , : ) . Если входной массив а является матрицей, то он расценивается как вектор-столбец а ( : ) . Пример: » а=[2 3 5 7 8 9 10 13 2 0 ] ; » Ь=[1 4 5 6 8 9 4] >> с = s e t d i f f ( a , b ) с = 2 3 7 10 13 20 • s e t x o r ( a , b ) — исключающее ИЛИ для векторов а и Ь. Результирующий вектор отсортирован; • s e t x o r ( a , b , ' r o w s ' ) — возвращает строки, которые не являются пересечениями матриц а и Ь. Матрицы а и b должны иметь одинаковое число столбцов; • [с, i a , i b ] = s e t x o r ( . . . ) — возвращает также векторы индексов i a и i b так, что с является отсортированной комбинацией элементов с = a ( i a ) и с = b (ib) или для комбинаций строк с = a ( i a , : ) и с - Ь ( i b , : ) . Если входной массив а является матрицей, то он расценивается как вектор-столбец а (:) . Пример: >> а = [-1 0 1 I n f - I n f NaN]; 124
3.3. Работа со специальными » b = [-2 p i 0 I n f ] ; >> с = s e t x o r ( a , b ) с = -Inf -2.0000 -1.0000
1.0000
данными
3 . 1 4 1 6 NaN
• u n i o n (a,b) — возвращает вектор объединенных значений из а и b без повторяющихся элементов. Результирующий вектор сортируется в порядке возрастания; • u n i o n ( a , b , ' rows ') — возвращает объединенные строки из а и Ь, не содержащие повторений (а и b — это матрицы с одинаковым числом столбцов); • [ с , i a , i b ] = u n i o n ( . . . ) — дополнительно возвращает i a и i b — векторы индексов, такие что с = a ( i a ) и c = b ( i b ) или, для объединенных строк, с = a ( i a , : ) И с = b ( i b , : ). Невекторный массив а расценивается как вектор-столбец а ( : ) . Пример: » а=[2,4,-4,9,0];Ь=[2,5,4]; >> [ с , i a , i b ] = u n i o n ( a , b ) с = - 4 0 2 4 5 9 ia = 3 5 4 ib = 1 3 2 • u n i q u e (a) — возвращает значения элементов из а, не содержащие повторений. Результирующий вектор сортируется в порядке возрастания. Невекторный массив расценивается как вектор-столбец а=а ( : ) ; • u n i q u e (a, ' rows ' ) — возвращает уникальные строки а; • [ b , i , j ] = u n i q u e ( . . . ) — дополнительно возвращает i и j — векторы индексов, такие что b = a ( i ) и а = b ( j ) (или b = a ( i , :) и а = b(j, :)). Примеры: » Ь=[-2,3,5,4,1,-6,2,2,7] b = -2 3 5 4 1 - 6 227 >> [ с , i , j ] = u n i q u e ( b ) с = - 6 - 2 1 2 3 4 5 7 1
=
6 1 5 8 2 4 3 9 j = 2 5 7 6 3 1 4 4 8 » a = [ - 2, 3 , 5; 4 , 1, - 6; 2, 2, 7 ; - 2, 3, 5 ] a = -2 3 5 4 1-6 2 2 7 -2 3 5 125
Глава 3. Математические операции »
c = u n i q u e (а, ' r o w s ' )
с = -2 3 5 2 2 7 4 1-6
Примеры графической визуализации операций со множествами можно найти в [54]. '
3.3.3. Работа с функциями времени и даты Ряд функций служит для возврата текущего времени и даты. Они перечислены ниже. • calendar — возвращает матрицу размером 6 х 7, содержащую календарь на текущий месяц. Календарь начинается с воскресенья (первый столбец) и завершается субботой; • calendar (d) — возвращает календарь на, месяц, в который попадает день, заданный аргументом d (дни отсчитываются от начала летоисчисления); • calendar (у, т) — возвращает календарь на месяц, заданный аргументом т, и год, заданный аргументом у; Вызов функции без присваивания результата выдает календарь на экран. Примеры: >> calendar Jul 2000 S M Tu 0 0 ' 0 2 4 3 11 9 ' 10 17 16 18 24 23 25 30 31 0 calendar(700477) Nov 1917 S M Tu 0 0 0 4 5 6 11 12 13 18 19 20 27 25 26 0 0 0
W 0 5 12 19 26 '0
Th 0 6 13 20 27 0
F 0' 7.
W 0 7 14 21 28 0
Th 1 8 15 22 29 0
F 2 9 16 23 30 0
ik 21 28 0
s 1 8 15 22 29 -0
s 3 • io 17 24
0 0
clock — возвращает вектор из 6 элементов, содержащий текущую дату и время в десятичной форме [год месяц день час минуты секунды]. Первые пять элементов этого вектора — целые числа. Шестой элемент имеет несколько десятичных знаков после запятой. Функция fix (clock) округляет число секунд до целого значения. Пример: c=clock l.Qe+003 2.0000 126
0.0070
0.0240
0.0200
0.0120
0.0148
3.3. Работа со специальными » fix(clock) ans = 2000 7
24
20
12
данными
26
• cputime — возвращает время работы процессора (в секундах), использованное системой MATLAB с момента ее запуска. Это число может выйти за рамки внутреннего представления, и тогда отсчет времени начинается заново. Пример: >> +tl=cputime; w=surf (peaks(30));cputime-tl ans = 0.2200 • s t r = date — возвращает строку, содержащую дд-ммм-гггг (день—месяц—год). Пример:
дату в формате
>> а = date d= 24-Jul-2000
• datenum — преобразует строку даты в порядковый номер даты, который отсчитывается с некоторого начального дня (01.01.00); • datenum (str) — преобразует дату, заданную строкой s t r , в порядковый номер даты. Строка s t r i n g должна иметь один из следующих форматов: 0, 1, 2, б, 13, 14, 15 или 16, определенных для функции d a t e s t r ; • datenum (Y,M, D) — возвращает порядковый номер даты для соответствующих массивов элементов Y, м и D (год, месяц, день). Массивы Y, м и D должны иметь одинаковую размерность (при этом любые из них могут быть скалярами); • datenum (Y,M, D, н,MI, S) — возвращает порядковый номер даты для соответствующих массивов элементов Y, м, D, H, Ml и s (год, месяц, день, часы, минуты, секунды). Массивы Y, м, D, н, MI и S должны иметь одинаковую размерность (при этом любые из них могут быть скалярами). Пример: >> n l = d a t e n u m ( ' 2 6 - N O V - 1 9 9 8 '
)
nl = 730085 >>
Y=[1998,2000],-М=[1,12];D=23;N=datenum(Y,M,D)
N= 729778
730843
• d a t e s t r (D, dateform) — преобразует каждый элемент массива порядковых номеров даты D в строку. Аргумент dateform определяет формат результата; dateform может быть номером или строкой в соответствии с табл. 3.5; Таблица 3.5 Форматы представления даты 1
Dateform (строка)
Dateform (номер) 0 1
arl
|
v
Пример
!
dd-mmM-yyyy HH :ММ : S S '
01-Маг-1995 03 : 45
'dd-mmM-yyyy'
Ol-Mar-1995 127
Глава 3. Математические
операции
Datefoi m (номер) 2 3
Пример
Dateform (строка)
'mm/dd/yy'
03/01/95
v
Mar
mmm'
л
т'
M
5
'mm'
3
6
*mm/dd'
03/01
7
'dd'
1
8
Mdd'
Wed
9
M'
W
10
'УУУУ'
1995
11
v
4
12
yy' 'mmmyy'
Mar95
13
'HH:MM:SS'
15:45:17
95
• d a t e v e c (A) — преобразует входные величины в массив размерности пб, каждая строка которого представляет собой вектор [Y,M, D, H , M I , S ] . Первые пять элементов вектора — целые числа. Массив А может состоять или из строк, удовлетворяющих формату функции d a t e s t r , или из скалярных величин, созданных функциями datenum и now; • [Y, M., D, H, Ml, S] = d a t e v e c (A) —возвращает компоненты вектора даты как индивидуальные переменные. Любой компонент входного вектора, который не вписывается в нормальный диапазон дат, преобразуется в следующий диапазон (так. например, несуществующая дата June 31 преобразуется в J u l y l ) . Допускаются значения нулевого месяца и нулевого дня. Например: >> n = d a t e v e c ( ' 1 1 / 3 1 / 9 8 ' ) п = 1998 12 1 0 0 0 >> n = d a t e v e c ( 7 1 0 2 2 3 ) п = 1944 7 10 0 0 • eomday (Y,M) — возвращает последний день года и месяца, заданных соответственно элементами массивов Y и м. Пример (нахождение високосных лет двадцатого столетия): >> у
=
1900:1999;
>> Е = eomday(у,2*ones(length(у) , 1) ); >> у(find(E==29)) ans = Columns 1 through 6 1904 1908 1912 1916 1920 1924 Columns 7 through 12 1928 1932 1936 1940 1944 1948 Columns 13 through 18
!28
3.4. Вычисление элементарных 1952 1956 1960 1964 C o l u m n s 19 t h r o u g h 24 1976 1980 1984 1988
1968
1972
1992
1996
функций
• etime ( t 2 , t l ) — возвращает длительность промежутка времени (в секундах), задаваемого векторами t l и t2. Векторы должны удовлетворять формату, выдаваемому функцией clock: Т = [год месяц день час минуты секунды]. Функция работает некорректно, если в текущий промежуток времени попадут границы месяца или года, что, однако, случается крайне редко и исправляется при повторе операции. Пример (вычисляется время, затрачиваемое на быстрое преобразование Фурье с 2048 точками): >> х = r a n d ( 2 0 4 8 , 1 ) ; t = c l o c k ; f f t ( x ) ; etime(clock,t);etime (clock,t) ans = 0.0500 • now — возвращает текущие время и дату в форме числа. Использование rem(now, 1) возвращает только время, a floor (now) — только дату. Пример: >> t l = now, t2 = rem(now,l) ti 1 —
7.3009e+005 t.2 = 0.6455 • t i c — запускает таймер; • toe — выводит время, прошедшее с момента запуска таймера; • t = toe — возвращает прошедшее время в переменной t. Пример: >> t i c , s u r f ( p e a k s ( 5 0 ) ) ; t o e e l a p s e d time = 0.7600~ • [N,S] = weekday (D) — возвращает день недели в виде числа N и в виде строки S для каждой даты массива D. Пример: >> D=[728647,735730];[N,S] = weekday(D) N= 2 1 5 = Mon Sun
3.4. Вычисление элементарных функций Элементарные функции, пожалуй, наиболее известный класс математических функций [66]. Поэтому, не останавливаясь подробно на их описании, представим набор данных функций, имеющийся в составе системы MATLAB. Функции, перечисленные ниже, сгруппированы по функциональному назначению. В тригонометрических функциях углы измеряются в радианах. Все функции могут использоваться в конструкции вида y=func (х), где func — имя функции. Обычно в та129
Глава 3. Математические
операции
кой форме задается информация о функции в системе MATLAB. Мы, однако, будем использовать для функций, возвращающих одиночный результат, более простую форму func (х). Форма [у, z, . . . ] =func (x, . . .) будет использоваться только в тех случаях, когда функция возвращает множественный результат. 3 . 4 . 1 . Алгебраические и арифметические
функции
В системе MATLAB определены следующие алгебраические и арифметические функции: • abs (X) — возвращает абсолютную величину для каждого числового элемента вектора X. Если х содержит комплексные числа, abs(X) вычисляет модуль каждого числа. Примеры: a b s (-5) = 5 abs(3+4i) = 5 >> a b s ( [ 1 -2 i 3 i 2 + 3 i ] ) ans = 1.0000 2 . 0 0 0 0 1.0000 3.0000 3.6056 • e x p ( X ) — возвращает экспоненту для каждого элемента х. Для комплексного числа z = х + i * y функция e x p ( z ) вычисляет комплексную экспоненту: e x p ( z ) = е х р ( х ) * ( c o s ( у ) + i * s i n ( у ) ) . Примеры: >> е х р ( [1 2 3 ] ) ans = 2.7183 7.38912 0.0855 >> exp(2+3i) ans = -7.3151 + 1.0427i • f a c t o r (n) — возвращает вектор-строку, содержащую простые множители числа п. Для массивов эта функция неприменима. Пример: f = factor(221) 13
17
• G=gcd(A, в) — возвращает массив, содержащий наибольшие общие делители соответствующих элементов массивов целых чисел А й в . Ф у н к ц и я g c d ( 0 , 0) возвращает значение 0, в остальных случаях возвращаемый массив G содержит положительные целые числа; • [G, с , D ] = g c d ( A , в) — в о з в р а щ а е т массив наибольших общих делителей G и массивов с и D, которые удовлетворяют уравнению A ( i ) . * c ( i ) + в ( i ) . *D ( i ) = G ( i ) . О н и полезны для выполнения элементарных эрмитовых преобразований. Примеры: » А=[2 6 9] ; » В=[2 3 3] ; >> gcd(A,B) ans = 2 3 3 >> [G,С,D]=gcd(A,B) 2 130
3
3
3.4. Вычисление элементарных
функций
с= 0
0
0
D = 1
1
1
• lcm (А, В) — возвращает наименьшие общие кратные для соответствующих парных элементов массивов А Й В . Массивы А й в должны содержать положительные целые числа и иметь одинаковую размерность (любой из них может быть скаляром). Пример: » А=[1 3 5 4] ; » В=[2 4 6 2] ; >> lcm(A,B) ans = 2 12 30 4 • log (X) — возвращает натуральный логарифм элементов массива х. Для комплексного или отрицательного z, где z = х + y*i, вычисляется комплексный логарифм в виде log(z) = l o g ( a b s ( z ) ) + i*atan2 (у, х) . Функция логарифма вычисляется для каждого элемента массива. Область определения функции включает комплексные и отрицательные числа, что способно привести к непредвиденным результатам при некорректном использовании. Пример: »
Х=[1.2
»
log(X)
ans
3.34
5 2.3] ;
=
0.1823
1.2060
1.6094
0.8329
• Iog2 (X) — возвращает логарифм по основанию 2 элементов массива х; • [F,E] = Iog2 (X) — возвращает массив действительных значений F и массив целых чисел Е. Элементы массива F обычно лежат в диапазоне 0.5 abs (F) < 1. Для действительных х возвращаемые массивы F удовлетворяют уравнению вида X = F . * 2 . E . Для нулевых значений х возвращаются F = 0 и Е = 0. Пример: » Х=[2 4.678 5;0.987 1 3 ] ; » [F,E] = Iog2(X) F= 0.5000
0.5847
0.6250
0.9870
0.5000
0.7500
2
3
0
3 1 2
• loglO (X) — возвращает логарифм по основанию 10 для каждого элемента х. Область функции включает комплексные числа, что способно привести к непредвиденным результатам при некорректном использовании. Пример: >>
Х=[1.4
>>
loglO(X)
ans
2.2 3
5.8
3] ;
=
0.1461
0.3483
0.7634
0.4771
• mod(x,y) —возвращает х mod у; 131
Глава 3. Математические
операции
• mod(X,Y) — возвращает остаток от деления X на Y (то есть X Y . *f l o o r (x. /Y)) для ненулевого Y и х в противном случае. Если операнды х и Y имеют одинаковый знак, функция mod(x, Y) возвращает тот же результат, что rem (X, Y). Однако (для положительных X и Y) mod (-x, у) = r e m ( - x , y ) + y . Примеры: >> М = mod (5,2) М= 1 >> mod(10,4) ans = 2 • pow2 (Y) — возвращает массив х, где каждый элемент есть 2К; • pow2 ( F , E ) — вычисляет x=F*2 £ для соответствующих элементов F и Е. Аргументы F и Е — массивы действительных и целых чисел соответственно. Пример: >> d = p o w 2 ( p i / 4 , 2 ) d = 3.1416 • р = nextpow2 (A) — возвращает такой показатель степени р, что 2Р > abs (A). Эта функция эффективно применяется для выполнения быстрого преобразования Фурье. Если А не является скалярной величиной, то nextpow2 возвращает значение nextpow2 ( l e n g t h (A) ) . Пример: » х = [ 2 6 7 8 9 3 4 5 6 7 7 8 4 3 2 4 ] ; >> l e n g t h ( х ) ans = 16 >> р = n e x t p o w 2 (x)
Р
=
4 >> х = 4 ; >> р = n e x t p o w 2 ( x ) Р = 2 >> х=4 5; >> р = n e x t p o w 2 (x) Р = 6
Функция p r i m e s (п) возвращает вектор-строку простых чисел, меньших или равных п. Пример: >> р = p r i m e s ( 2 5 ) Р = 2 3 5 7 11 13
17
19
23
• [N,D] = r a t ( X ) - возвращает массивы N и D, такие что N./D аппроксимирует х с точностью 1. e-6*norm (X (:) , 1). Даже при том, что все числа с плавающей запятой — рациональные числа, иногда желательно аппрокси132
3.4. Вычисление элементарных
функций
мировать их дробями, у которых числитель и знаменатель являются по возможности малыми целыми числами. Функция r a t пытается это сделать; • [N,D] = r a t ( x , t o l ) — возвращает массивы N и D, такие что N . / D аппроксимирует х с точностью t o l ; • rat(X) без выходных параметров просто выдает на экран массив цепных дробей; • r a t s (X, s t r l e n ) — возвращает ряд, полученный путем упрощенной рациональной аппроксимации элементов х. Аргумент s t r l e n — длина возвращаемой строки. Функция возвращает знак «*», если полученное значение не может быть напечатано в строке, длина которой задана значением s t r l e n . По умолчанию strlen=13. Тот же алгоритм аппроксимации используется в командном окне MATLAB при задании рационального формата вывода командой format r a t . Пример: >> [ g , j ] = r a t ( p i , l e - 1 0 ) g = 312689 99532 • s q r t ( A ) — возвращает квадратный корень каждого элемента массива х. Для отрицательных и комплексных элементов х функция s q r t (x) вычисляет комплексный результат. Пример: >> А = [ 2 5 2 1 . 2 3 5 5 . 8 3 ] ; >> s q r t ( A ) ans = 5.0 4.6076 7.4699 1.7321
На рис. 3.1 представлены графики ряда распространенных алгебраических функций. Эти графики получены в результате исполнения следующего файла-сценария: syms х subplot(2,2,1),ezplot(хЛ2, [-5 5]),xlabel ( ' '),grid on subplot(2,2,2),ezplot(exp(x), [-2 2]),xlabel ( ' '),grid on subplot(2,2,3),ezplot(log(x),[0 5]),grid on subplot (2,2,4) ,ezplot(sqrt(x), [0 10]),grid on
2
Э
4
5
Рис. З.1. Графики ряда алгебраических функций 133
Глава 3. Математические операции Графики дают наглядное представление о поведении представленных на них функций. Обратите внимание на применение графической команды e z p l o t из пакета Symbolic Math ToolBox (она отличается от обычной команды e z p l o t MATLAB отсутствием заключения символьных переменных в 1 ) , команды syms, также входящей в пакет Symbolic Math Toolbox и задающей символьную переменную х, и несколько необычное применение команды x l a b e l ( " ] . Эта команда с аргументом в виде пустой строки снимает вывод обозначения горизонтальной оси на двух верхних графиках. Если этого не сделать, то символ «х» окажется наложенным на наименование функций нижних графиков, которое команда e z p l o t выводит над графиками автоматически.
3.4.2. Вычисление тригонометрических и обратных тригонометрических функций В системе MATLAB определены следующие тригонометрические и обратные тригонометрические функции. Функции вычисляются для каждого элемента массива. Входной массив допускает комплексные значения. Напоминаем, что все углы в функциях задаются в радианах. • acos(X) — возвращает арккосинус для каждого элемента X. Для действительных значений х в области [—1,1] acos (X) возвращает действительное значение из диапазона [0, ], для действительных значений х вне области [— 1, 1] acos(X) возвращает комплексное число. Примеры: >>Y = a c o s
(0.5)
Y = 1.0472 >> a c o s ( [ 0 . 5 1 2 ] ) ans = 1.04720 0 + 1.31701
• acot
(X) — возвращает арккотангенс для каждого элемента X. Пример:
>> Y=acot (0.1) Y — 1.4711 • a c s c (X) — возвращает арккосеканс для каждого элемента х. Пример: >> Y = a c s c ( 3 ) Y = 0.3398
• a s e c (x) — возвращает арксеканс для каждого элемента X. Пример: >> Y=asec(0.5) Y = 0 + 1 .31701 • a s i n (X) — возвращает арксинус для каждого элемента X. Для действительных значений х в области [— 1, 1] a s i n ( X ) возвращает действительное число из диапазона [—л/2,я/2], для действительных значений х вне области [—1, 1] a s i n ( X ) возвращает комплексное число. Пример: >> Y = a s i n Y =
134
(0.278)
3.4. Вычисление элементарных
функций
• atan(X) — возвращает арктангенс для каждого элемента X. Для действительных значений X atan (X) находится в области [—л/2,я/2]. Пример: >> Y = a t a n (1) Y= 0.7854 • atan2 (Y, X) — возвращает массив р той же размерности, что X и Y, содержащий поэлементно арктангенсы отношения вещественных частей Y и X. Мнимые части игнорируются. Элементы р находятся в интервале [—к, л]. Специфический квадрант определен функциями sign(Y) и sign(X). Это отличает полученный результат от результата atan (Y/x), который ограничен интервалом [—к/2,п/2]. Пример: •> a t a n 2 ( 1 , 2 ) ins = 0.4636 • cos (X) — возвращает косинус для каждого элемента X. Пример: » Х=[1 2 3] ; >> c o s ( X ) ans = 0.5403 -0.4161 -0.9900 • cot (X) — возвращает котангенс для каждого элемента х. Пример: >> Y = c o t ( 2 ) Y= -0.4577 • esc (X) — возвращает косеканс для каждого элемента х. Пример: » Х=[24.678 5;0.987 1 3 ] ; >> Y = c s c ( X ) Y = 1.0998 -1.0006 -1.0428 1.1985 1.1884 7.0862 • s e c (X) — возвращает массив той же размерности, что и X, состоящий из секансов элементов х. Пример: >> X = [ p i / 1 0 p i / 3 p i / 5 ] ; >> s e c ( X ) ans = 1.0515 2 . 0 0 0 0 1.2361 • s i n (X) — возвращает синус для каждого элемента X. Пример: » X=[pi/2 p i / 4 p i / 6 p i ] ; >> sin(X) is
=
1.0000 0.7071 0.5000 0.0000 • t a n (X) — возвращает тангенс для каждого элемента х. Пример: » Х=[0.08 0 . 0 6 1.09] X = 0.0800 0.0600 1.0900 >> tan (X)
135
Глава 3. Математические операции
0.802 0.0601 1.9171
Следующий файл-сценарий позволяет наблюдать графики четырех тригонометрических функций (рис. 3.2): syms х subplot (2, 2,1),ezplot (sin (x), [-5 5]),xlabel ( ' '),grid on subplot (2, 2,2),ezplot(tan (x), [-5 5]),xlabel(''),grid on subplot (2, 2,3),ezplot (asin (x), [-1 l]),grid on subplot(2,2,4),ezplot(atan(x) , [-5 5]),grid on
\
•b t --
)-ц
А asl M
1
-: i 0
V"
10 ! atan(x)
1-
|
5
\/ i /, /:
Рис. З.2. Графики четырех тригонометрических функций
Поскольку многие тригонометрические функции периодичны, появляется возможность формирования из них любопытных комбинаций, позволяющих создавать типовые тестовые сигналы, используемые при моделировании радиоэлектронных устройств. Следующий файл-сценарий строит графики для таких комбинаций, создающих из синусоиды три наиболее распространенных сигнала — прямоугольные, пилообразные и треугольные импульсы1: х=-10:0.01:10;: subplot(2,2,1),plot(x,0.8*sin(x)),xlabel ('0.8*sin(x) ') subplot (2,2,2) ,plot (x,0.8*sign (sin (x)) ) , xlabel C0.8*sgn(sin(x)) ' ) subplot(2,2,3),plot (x,atan(tan(x/2))),xlabel('atan(tan(x/2)) ') subplot (2,2,4),plot(x,asin(sin(x))),xlabel('asin(sin(x) ) ')
Соответствующие графики представлены на рис. 3.3. Дополнительный ряд графиков, полученных комбинациями элементарных функций, показан на рис. 3.4. Эти графики строятся следующим файлом-сценарием: х=-10:0.01:10; subplot (2,2,1) , plot (x, sin (x) . Л 3) , xlabel ('з1п(х)Л3') subplot(2,2,2),plot(x,abs(sin(x))),xlabel('abs(sin(x)l'), axis([-10 10 -1 1] ) , subplot(2,2,3),plot(x,tan(cos(x))) ,xlabel('tan(cos(x)l ') В пакете расширения Signal Processing Toolbox есть специальные функции для генерации таких сигналов — square и sawtooth.
136
3.4. Вычисление элементарных функций subplot(2,2,4),plot(x,csch(sec(x))
),xlabel
( ' c s c h ( s e c ( x ) ) ') Л
,
0
0
-5
/ / / -10
-5
0 0.8*5in(x)
5
10
А / / / / 0
-Ш
:
5
/\/ / \/
/ У1
\/
\ ' \ \ / 1
•
,'
1
0.5
05 -ID
/\
и.ь
05
-5 0 5 Q.8*sgn(stri(x))
10
.•i 0 -1У V V -2-10 . . -5 D 5
Рис. 3.3. Графики синусоиды прямоугольных, пилообразных и треугольных колебаний
-10
-5
0 sln(x)3
5
10
- 1 0 - 5
0 ate(sin(x))
A
5
10
A
МММ -11 00-5 . 0 5 10 -10 -5 0 5 10 Рис. 3.4. Графики периодических сигналов без разрывов
Эти графики неплохо моделируют сигналы, получаемые при выпрямлении синусоидального напряжения (или тока) и при прохождении синусоидальных сигналов через нелинейные цепи. 3 . 4 . 3 . Вычисление гиперболических и обратных гиперболических функций Наряду с тригонометрическими функциями в математических расчетах часто используются и гиперболические функции. Ниже приводится список таких функций, определенных в системе MATLAB. Функции вычисляются для каждого элемента массива. Входной массив допускает комплексные значения. Все углы в тригонометрических функциях измеряются в радианах. • acosh (X) — возвращает гиперболический арккосинус для каждого элемента х. Пример: >>Y
V =
= acosh
(0.7)
0 + 0.7954i
• acoth(X) — возвращает гиперболический арккотангенс для каждого элемента х. Пример: >>Y = acoth (0.1) Y = 0.1003 + 1.5708i • acsch(X) — возвращает гиперболический арккосеканс для каждого элемента х. Пример: >> Y = acsch(l) У
~
0.8814
• asech(X) — возвращает гиперболический арксеканс для каждого элемента X. Пример: 137
Глава 3. Математические операции » Y = asech(4) Y — 0+1.3181i • asinh(X) — возвращает гиперболический арксинус для каждого элемента х. Пример: >>
Y = asinh
(2.456)
Y = 1.6308
• atanh(X) — возвращает гиперболический арктангенс для каждого элемента х. Пример: >>
Х= [ 0 . 8 4
>>
atanh
ans
0.16
1.39];
(X)
=
1.22120.16140.9065
+
1.5708i
• cosh(X) — возвращает гиперболический косинус для каждого элемента X. Пример: >> Х=[1 2 3 ] ; >> cosh(X) ans = 1.54313.762210.0677 • coth(X) — возвращает гиперболический котангенс для каждого элемента х. Пример: » Y = coth(3.987) V
—
1.0007
• csch (x) — возвращает гиперболический косеканс для каждого элемента х. Пример: >>
Х=[2
4.67 8
>>
Y =
csch(X)
Vj_ — 0.2757 0.0186 0.8656 0.8509
5,-0.987
1 3] ;
0.0135 0.0998
• sech(X) — возвращает гиперболический секанс для каждого элемента X Пример: >> X = [ p i / 2 p i / 4 p i / 6 p i ] ; >> s e c h ( X ) ans = 0.3985 0.7549 0.8770 0.0863 • sinh(X) — возвращает гиперболический синус для каждого элемента X. Пример: >> X=[pi/8 p i / 7 p i / 5 p i / 1 0 ] ; >> sinh(X) ans = 0.4029 0.4640 0.6705 0.3194 138
3.5. Операции работы с числами • tanh(X) — возвращает гиперболический тангенс для каждого элемента х. Пример: >> X = [ p i / 2 p i / 4 p i / 6 p i / 1 0 ] ; >> t a n h ( X ) ans = 0.9172 0.6558 0.4805 0.3042
Следующий m-файл-сценарий строит графики (рис. 3.5) ряда гиперболических функций: syms х subplot(2, subplot(2,2 subplot(2,2 subplot(2,2
1) 2) 3) 4)
ezplot(sinh (x) ezplot(cosh (x) ezplot(tanh (x) ezplot(sech (x)
[-4 [-4 [-4 [-4
4]),xlabel ('') ,grid on 4]),xlabel ( ' '),grid on 4]),grid on 4]),grid on
Нетрудно заметить, что гиперболические функции, в отличие от тригонометрических, не являются периодическими. Выбранные для графического представления функции дают примеры характерных нелинейностей. В другом файле использованы команды для построения графиков (рис. 3.6) ряда обратных гиперболических функций: syms х s u b p l o t ( 2 , 2 1) ezplot(asinh(x) [-4 4]),xlabel(''),grid on s u b p l o t ( 2 , 2 2) ezplot(acosh(x) [0 4]) ,xlabel ( ' '),grid on s u b p l o t ( 2 , 2 3) ezplot(atanh(x) [-1 1]),grid on subplot (2,2,4) ,ezplot(asech(x) , [0 l]),grid on
На этих графиках хорошо видны особенности данного класса функций. Такие функции, как обратный гиперболический синус и тангенс, «ценятся» за симметричный вид их графиков, дающий приближение к ряду типовых нелинейностей. 20 10 0 -10 -20
;
;
/
j /_
V
•---„:
-2 1 i 0,5 0 1 : -0 5\ "т
А
tan
у asec
--"
0
1
sech(x)
2
4
atanh(x)
i Э
4
1*0
/ ; \
;
Л
J . . . l \ / ! \
Рис. 3.5. Графики гиперболических функции
3 6 Графики обратных гиперболических функций
Рис
3.5. Операции работы с числами 3 . 5 . 1 . Округление и смена знака чисел Ряд особых функций служит для выполнения операций округления числовых данных и анализа их знака. 139
Глава 3. Математические операции • fix (А) — возвращает массив А с элементами, округленными до ближайшего к нулю целого числа. Для комплексного А действительные и мнимые части округляются отдельно. Примеры: » А=[1/3 2 / 3 ; 4 . 9 95 . 0 1 ] А= 0.3333 0.6667 4.9900 5.0100 >> f i x ( А ) ans = 0 0 4 5 • floor (A) — возвращает А с элементами, представляющими ближайшее меньшее или равное соответствующему элементу А целое число. Для комплексного А действительные и мнимые части преобразуются отдельно. Примеры: »
А=[-1/3
2/3; 4.99 5.01]
А =
-0.3333 0.6667 4.9900 5.0100 >> f l o o r ( А ) ans = -1 0 4 5 • c e i l (A) — возвращает ближайшее большее или равное А целое число. Для комплексного А действительные и мнимые части округляются отдельно. Примеры: >> а = - 1 . 7 8 9 ; >> c e i l ( a ) ans = -1 » a=-1.789+i*3.908; >> c e i l ( a ) ans = -1.0000 + 4 . 0 0 0 0 i • rem(X,Y) — возвращает X - f i x (X./Y) .*Y, где f i x (X./Y) — целая часть от частного x/Y. Если операнды х и Y имеют одинаковый знак, функция rem(x,Y) возвращает тот же результат, что mod (X, Y). Однако (для положительных X и Y) rem (-x, у) = m o d ( - x , y ) - y . Функция rem возвращает результат, находящийся между 0 и s i g n (X) * a b s (Y). Если Y=0, функция rem возвращает NaN. Аргументы X и Y должны быть целыми числами. Из-за неточного представления в компьютере чисел с плавающей запятой использование вещественных (или комплексных) входных аргументов может привести к непредвиденным результатам. Пример: » Х=[25 21 23 55 3 ] ; >> Y=[4 8 2 3 6 4 ] ; 140
3.5. Операции работы с числами » rem(X,Y) ans = 15 0 13 • round (X) — возвращает округленные до ближайшего целого элементы массива X. Для комплексного х действительные и мнимые части округляются отдельно. Пример: » Х=[5.675 21.6+4.897*i >> r o u n d ( X ) ans = 6.0000 22.0000 + 5.0000i
2.654
3.0000
55.8765];
56.0000
• s i g n (x) — возвращает массив у той же размерности, что и х. где каждый из элементов Y равен: • 1, если соответствующий элемент х больше 0; • 0, если соответствующий элемент х равен 0; • - 1 , если соответствующий элемент X меньше 0. Для ненулевых действительных и комплексных X Sign(X) = X./abs(X) Пример: >> Х= [-5 2 1 2 0 - 3 . 7 ] ; >> s i g n ( X ) ans = - 1 1 1 0 - 1
3.5.2. Операции с комплексными числами Комплексные числа особенно широко применяются в электро- и радиотехнике, где они являются основой символического метода анализа линейных цепей. Часто они применяются и в технике моделирования динамических систем разного характера и физических явлений. Почти все рассмотренные выше арифметические и логические операции могут использоваться при работе с комплексными числами вида Z = Re(Z) + i*Im(Z) = а + i*b, где i — мнимая единица (корень квадратный из —1). При этом результат операции в общем случае также является комплексным числом (или массивом комплексных чисел, если используются такие массивы). Для работы с комплексными числами и данными в MATLAB используются следующие функции. Функция a n g l e (z) возвращает аргумент комплексного числа в радианах для каждого элемента массива комплексных чисел Z. Углы находятся в диапазоне [—п;+к]. Для комплексного z модуль и аргумент вычисляются следующим образом: R = abs(Z) — модуль, t h e t a = a n g l e (Z) — аргумент. При этом формула z =R. *exp ( i * t h e t a ) дает переход от показательной формы представления комплексного числа к алгебраической. Примеры: >> Z=3+i*2 Z= 3.0000 + 2.0000i >> theta = angle (Z) theta = 0.5880
141
Глава 3. Математические
операции
R = abs (Z) R= »
3.6056 >> Z = R . * e x p ( i * t h e t a )
Z= 3.0000 + 2.0000i
• imag(Z) — возвращает мнимые части всех элементов массива Z. Пример: » Z=[l+i, 3+2i, 2 + 3 i ] ; >> imag(Z) ans = 1 2 3 • real(Z) — возвращает вещественные части всех элементов комплексного массива ъ. Пример: >> Z= [ l + i , >> r e a l (Z) ans = 1 3 2
3+ 2 i ,
2 +3 i ] ;
• c o n j (z) — возвращает число, к о м п л е к с н о - с о п р я ж е н н о е аргументу z. ECJ Z к о м п л е к с н о е , то c o n j (Z) = r e a l ( Z ) - i * i m a g ( Z ) . П р и м е р : >> conj (2 + 3i) ans = 2.0000 - 3.00001
3.6. Вычисление специальных математических функций Специальные математические функции являются решениями дифференциальных уравнений специального вида или обозначениями некоторых видов интегралов. Довольно полный обзор специальных функций дается в книгах [66—69], так что ниже мы ограничимся только указанием функций системы MATLAB, реализующих их вычисление. Набор специальных математических функций в системе MATLAB настолько представителен, что позволяет решать практически все задачи, связанные с применением таких функций. Если и обнаруживаются недостающие специальные функции, то пользователь может сам задать их вычисления. Специфика специальных функций в MATLAB та же, что и элементарных, — их аргументами могут быть как одиночные численные значения, так и массивы чисел. В последнем случае функции возвращают массив тех же размерности и размера с преобразованием каждого элемента в соответствии с действием функции. В версии MATLAB 6 вы теперь можете получить справку с записью формул в стандартной математической форме, набрав в командной строке doc function, гд< function — имя специальной функции. 3 . 6 . 1 . Функции Эйри Функция Эйри формирует пару линейно независимых решений линейного дифференциального уравнения вида 142
3.6. Вычисление специальных математических
функций
dZ2 Связь между функцией Эйри и модифицированной функцией Бесселя выражается формулой Ai(Z) = -п V 3где ъ
з
•
• a i r y ( Z ) — возвращает ф у н к ц и ю Э й р и , Ai ( Z ) , для каждого элемента к о м п л е к с н о г о массива z; • a i r y ( k , Z) — возвращает р а з л и ч н ы е варианты результата в зависимости от з н а ч е н и я к: О к=0 — тот же результат, что и a i r y (Z) ; О к=1 — производную от Ai ( Z ) ; О к=2 — ф у н к ц и ю Э й р и второго рода, B i ( Z ) ; О k=3 — производную от Bi ( Z ) . Пример:
» D=[l,3+2i] D 1.0000 3.0000 + 2.0000i >> S=airy(D) s — 0.1353
-0.0097
+
0.00551
3.6.2. Функции Бесселя Линейное дифференциальное уравнение второго порядка вида 2
d2y
dy
dz2+Z
dz+
.
2
2\
г, У
~ '
где — неотрицательная константа, называется уравнением Бесселя, а его решения известны как функции Бесселя. Функции Jv(<;) и J_v(z) формируют фундаментальное множество решений уравнения Бесселя для неотрицательных значений v (это так называемые функции Бесселя первого рода):
2) tok\r(v + k + \y где для г а м м а - ф у н к ц и и используется следующее представление:
143
Глава 3. Математические
операции
Второе решение уравнения Бесселя, линейно независимое от }v(z), определяется как v (,\ _ Jy(z)cos(vn)-J_y(z) sin(vTt)
и задает функции Бесселя второго рода Y(z). Функции Бесселя третьего рода (функции Ханкеля) и функция Бесселя первого и второго рода связаны следующим выражением:
где iv(z) — это b e s s e l j , a Yv(^) — b e s s e l y . • b e s s e l j (nu, z) — возвращает функцию Бесселя первого рода, i(z), для каждого элемента комплексного массива z. Порядок пи может не быть целым, однако должен быть вещественным. Аргумент z может быть комплексным. Результат вещественный, если z положительно. Если nu и z — массивы одинакового размера, то результат имеет тот же размер. Если любая входная величина — скаляр, результат расширяется до размера другой входной величины. Если одна входная величина — вектор-строка, а другая — вектор-столбец, результат представляет собой двумерный массив значений функции. • b e s s e l y (nu, z) — возвращает функцию Бесселя второго рода, У(г). При вызове В формате [ J , i e r r ] = b e s s e l j (nu, Z) И [ Y , i e r r ] ly (nu, Z) функции всегда возвращают массив с флагами ошибок: • • • •
ierr ierr ierr ierr
= besse-
= 1 — запрещенные аргументы; = 2 — переполнение (возвращает inf); = 3 — некоторая потеря точности при приведении аргумента; = 4 — недопустимая потеря точности: z или nu слишком велики;
• i e r r = 5 — нет сходимости (возвращает NaN). Примеры: >> g
S = [ 2 - 5 i , 4 , 7 ] ; Т = [ 8 , 1 , 3 ] ; g = b e s s e l j (T,S) =
-0.1114 >> 9
-
0.0508i
-0.0660
S = [ 2 - 5 i , 4 , 7 ] ; T = [ 8 , 1 , 3 ] ;
-0.1676
[ g , i e r r ] = b e s s e l y (T,S)
= 0.1871
i e r r
0
-
0.0324i
0.3979
0.2681
=
0
0
• b e s s e l h (nu, K, Z) — для к=1 или 2 возвращает функцию Бесселя третьего рода (функцию Ханкеля) для каждого элемента комплексного массива z. Если nu и Z — массивы одинакового размера, то результат имеет тот же размер. Если одна из входных величин — скаляр, результат формируется по размеру другой входной величины. Если одна вчодная величина — вектор-строка, а другая — вектор-столбец, результат представляет собой двумерный массив значений функции. • b e s s e l h (nu, Z) —использует по умолчанию к = 1. 144
3.6. Вычисление специальных математических
функций
(l)
• b e s s e l h (nu, I , z, 1) — масштабирует H v (z) с коэффициентом exp(-i*z). (2) — масштабирует H v (z) с коэффициентом • b e s s e l h (nu, 2, z, 1) exp ( + i * z ) . • [ H , i e r r ] = b e s s e l h ( . . . ) — всегда возвращает массив с флагами ошибок: О ierr О ierr О ierr О ierr О *ierr
= 1 — запрещенные аргументы; = 2 — переполнение (возвращает inf); = 3 — некоторая потеря точности при приведении аргумента; = 4 — недопустимая потеря точности: Z или nu слишком велики; = 5 — нет сходимости (возвращает NaN).
Пример: >> D=[l,3+2i];F=[3,2];besselh(F, D) ans = 0.0196
-
5.8215i
0.0509
-
0.0583i
Линейное дифференциальное уравнение второго порядка вида 2
dy.
d
1
dz
,
^--(z2 dz d
2
2х
л
+ v2)y=0,
где v — неотрицательная константа, называется модифицированным уравнением Бесселя, а его решения известны как модифицированные функции Бесселя I v (z) и I_v(z). К у (г) — второе решение модифицированного уравнения Бесселя, линейно независимое от I v (z). l v (z) и К у (г) определяются следующим образом: 2
Г 4
sin(vn) b e s s e l i (nu, Z) — возвращает модифицированную функцию Бесселя первого рода, 1(г), для каждого элемента массива г. Порядок nu может не быть целым, однако должен быть вещественным. Аргумент z может быть комплексным. Результат вещественный, если z положительно. Если nu и z — массивы одинакового размера, то результат имеет тот же размер. Если любая входная величина — скаляр, результат расширяется до размера другой входной величины. Если одна входная величина — вектор-строка, а другая — вектор-столбец, результат является двумерным массивом значений функции. b e s s e l k (nu, Z) — возвращает модифицированную функцию Бесселя второго рода, Kv(z), для каждого элемента комплексного массива z. b e s s e l i (nu,Z,1) — возвращает b e s s e l i (nu,Z) .*exp (-Z). b e s s e l k ( n u , Z , l ) — возвращает b e s s e l k ( n u , Z ) .*exp (-Z). [I, i e r r ] = b e s s e l i ( . . . ) и [К, i e r r ] = b e s s e l k ( . . . ) всегда возвращают массив с флагами ошибок: О i e r r = 1 — запрещенные аргументы; 0 i e r r = 2 — переполнение (возвращает I n f ) ; 0 i e r r = 3 — некоторая потеря точности при приведении аргумента; 145
Глава 3. Математические операции О i e r r = 4 — недопустимая потеря точности: z или пи слишком велики; О i e r r = 5 — нет сходимости (возвращает NaN). Примеры: >> D = [ l , 3 + 2 i ] ; F = [ 3 , 2 ] ; K = b e s s e l i ( F , D ) К = 0.0222
-1.2577
+
2.3188i
D=[l,3+2i];F=[3,2];[K,ierr]=besselk(F,D)
»
К = 7.1013 ierr 0
-0.0401
-
0.0285i
= 0
Естественно, что возможно построение графиков специальных функций. В качестве примера рассмотрим m-файл-сценарий, приведенный ниже: х=0:0.1:10; y0=besselj
(0,x);
yl=besselj
(l,x);
y2=besselj
(2,х);
y3=besselj
(3,х);
plot(x,y0,'-т',х,yl,'-г',х,у2,'-.к',х,уЗ,':Ь') legend('besselj
( 0 , x ) ' , ' b e s s e l j ( I , x) ' , ' b e s s e l j ( 2 , х) ' , ' b e s s e l j ( 3 , x ) ' ) ;
Рисунок 3.7 иллюстрирует построение четырех функций Бесселя bess e l j (п,х) для п = 0, 1, 2 и 3 с легендой, облегчающей идентификацию каждой кривой рисунка. Эти графики дают наглядное представление о поведении функций Бесселя,
e|"G ( x7 b e s 5 e(p jj2 ll.,x x),)x) s besse bes5
0.5
Л /
\ X
\--''N
'
ч
. ,
0
'
-
•
-
ч
/
-
^
-
•
"
'
\
\
ч
.
/
.
.
X
.
—
-
.
.
.
'
' •
'•
;Х X
/
-
Рис. 3.7. Графики четырех функций Бесселя besselj(n,x) широко используемых при анализе поведения систем, описываемых линейными дифференциальными уравнениями второго порядка. Описание построения графиков функций Бесселя при комплексном аргументе можно найти в [33]. 3 . 6 . 3 . Б е т а - ф у н к ц и я и ее в а р и а н т ы Бета-функция определяется как
r(z)f(w) r(z + w)' 146
3.6. Вычисление специальных математических функций где Г(г) — гамма-функция. Неполная бета-функция определяется по формуле
• beta(Z,W) — возвращает бета-функцию для соответствующих элементов комплексных массивов z и w. Массивы должны быть одинакового размера (или одна из величин может быть скаляром). • b e t a i n c (X, Z, W) — возвращает неполную бета-функцию. Элементы X должны быть в закрытом интервале [0, 1]. • b e t a l n (Z,W) — возвращает натуральный логарифм бета-функции l o g ( b e t a (Z,W) ), без вычисления b e t a ( Z , w ) . Так как сама бета-функция может принимать очень большие или очень малые значения, функция b e t a l n (Z, W) иногда более полезна, так как позволяет избежать переполнения. Пример: >> format rat;beta ( (1:10) '2, 4) ans = 1/4 1/20 1/60 1/14 0 1/280 1/504 1/840 1/1320 1/1980 1/2860 3.6.4. Эллиптические функции и интегралы Эллиптические функции Якоби определяются интегралом ] (l-/??sin29)l/2 . и соотношениями sn(u) = sin ф, сп{и) = совф, 2
1/2
dn(u) = (1 — sin ф) , ат(и) = ф. В некоторых случаях при определении эллиптических функций используются модули к вместо параметра т. Они связаны выражением к1 = т = sin 2 а. • [SN,CN,DN] = e l l i p j ( u , M ) — возвращает эллиптические функции Якоби SN, CN и DN, вычисленные для соответствующих элементов — аргумента и и Обратите внимание, что аргумент задается как вектор-столбец. 147
Глава 3. Математические
операции
параметра м. Входные величины и и м должны иметь один и тот же размер (или любая из них может быть скаляром). • [SN,CN,DN] = e l l i p j (и,м, t o l ) — возвращает эллиптическую функцию Якоби, вычисленную с точностью t o l . Значение t o l по умолчанию — eps; его можно увеличить, тогда результат будет вычислен быстрее, но с меньшей точностью. Пример: » [SN,CN,DN]=ellipj ([23,1], [0.5,0.2]) SN = 474/719 1224/1481 CN = 1270/1689 1457/2588 DN = 399/451 538/579 Полные эллиптические интегралы первого и второго рода определяются следующим образом:
К(т) = }[(1 -?2)(1 -mt^dt J L
J
Л
J
0
0
-
^
(l-/HSin (l9)
0
1
Е(т) = $(\-t2yi/2(\-mt2)]/2dt
л/2
= J(l - w sin о
• e l l i p k e (м) — возвращает полный эллиптический интеграл первого рода для элементов м. • [К,Е] = e l l i p k e (M) — возвращает полные эллиптические интегралы первого и второго рода. • [ К , Е ] = e l l i p k e (M, t o l ) — возвращает эллиптические функции Якоби, вычисленные с точностью t o l . Значение по умолчанию — eps; его можно увеличить, тогда результат будет вычислен быстрее, но с меньшей точностью. Пример: • >> [ f , e ] = e l l i p k e ( [ 0 . 2 , 0 . 8 ] ) f =
707/426 1018/451 е = 679/456 515/437 Для вычисления этих функций используется итерационный метод арифметико-геометрического среднего (см. детали в Reference Book по системе MATLAB). 3 . 6 . 5 . Функции ошибки Функция ошибки определяется следующим образом:
• e r f (X) — возвращает значение функции ошибки для каждого элемента вещественного массива х. 148
3.6. Вычисление специальных математических
функций
Дополнительная (остаточная) функция ошибки задается соотношением
erfc(X) = - L f e~'2dt = 1 - erf(X). л/л •
• e r f c (X) — возвращает значение остаточной функции ошибки. • erfcx(X) — возвращает значение масштабированной остаточной функции ошибки. Эта функция определяется так: erfcx(x) = ex'erfc{x). • erfinv(Y) — возвращает значение обратной функции ошибки для каждого элемента массива Y. Элементы массива Y ДОЛЖНЫ лежать в области -1
0.2227 -0.3286 >> b=erfc (Y) b = 0.7773 1.3286 >> c=erfex (Y) с = 0.8090 1.4537 >> d=erfinv(Y) a = 0.1791 -0.2725 При вычислении данных функций используется аппроксимация по Чебышеву (см. детали алгоритма в Reference Book no MATLAB). 3 . 6 . 6 . Интегральная показательная функция Интегральная показательная функция определяется следующим образом:
• e x p i n t (X) — возвращает интегральную показательную функцию для каждого элемента х. Пример: >> d
d=expint ( [2,3 + 7i]) =
0.0489
-0.0013
—0.00601
Для вычисления этой функции используется ее разложение в ряд (см. [40]). 3 . 6 . 7 . Гамма-функция и е е варианты Гамма-функция определяется выражением о Неполная гамма-функция определяется как 149
Глава 3. Математические
операции
В MATLAB заданы следующие функции этого класса: • gamma (A) — возвращает гамма-функцию элементов А. Аргумент А должен быть вещественным. • gammainc (x,A) — возвращает неполную гамма-функцию соответствующих элементов X и А. Аргументы X и А должны быть вещественными и иметь одинаковый размер (или любой из них может быть скалярным). • gammaln (А) — возвращает логарифмическую гамма-функцию, gammaln (А) = l o g (gamma (A) ). Команда gammaln позволяет избежать переполнения, которое может происходить, если вычислять логарифмическую гамма-функцию непосредственно, используя l o g (gamma (A) ). Примеры: » f=[5,3];d=gamma(f) d= 24 2 >> h=gammaln(f) h = 3.1781 0.6931 Гамма-функция имеет довольно сложный график (рис. 3.8), заслуживающий построения. Это можно осуществить с помощью следующего файла-сценария: %Gamma-function graphicclear syms x ezplot(gamma(x),[-4 4]) grid on3 gamma(con(jx)
...
1
j
1 1
_—-^ 1
:
/
\
1 \ 1
1
[
Рис. З.8. График, гамма-функции Гамма-функция вычисляется по известному алгоритму W. J. Kody (1989 г.). Для вычисления неполной гамма-функции используются рекуррентные формулы, приведенные в [40]. Обратите внимание, что здесь используются команды не собственно MATLAB, а пакета расширения Symbolic Math Toolbox. 150
3.7. Новые средства вычислений в MATLAB 6/7 3 . 6 . 8 . Ортогональные полиномы Л е ж а н д р а Функция Лежандра определяется следующим образом: рт _ /_,у»/, _
2W2 d'"Pn{x)
где Р„(х) — полином Лежандра степени п, рассчитываемый как "v '
2"n\\_
dx
• l e g e n d r e (n, X) — возвращает функции Лежандра степени п и порядков m = 0 , 1 , . . . , п, вычисленные для элементов х. Аргумент п должен быть скалярным целым числом, не превосходящим 256, а х должен содержать действительные значения в области -1x1. Возвращаемый массив р имеет большую размерность, чем х, и каждый элемент p ( m + l , d l , d 2 . . .) содержит связанную функцию Лежандра степени п и порядка т, вычисленную в точках X ( d l , d 2 . . . ) . • l e g e n d r e (n, X, ' s e n 1 ) — возвращает квазинормализованные по Шмидту функции Лежандра. Пример: >> g=rand(3,2);legendre(3,g) ans (:,:,!) = -0.4469 -0.0277 0.1534 -0.0558 1.4972 -2.0306 5.4204 0.2775 4.0079 -10.5653 -14.9923 -2.7829 ans (:, :,2) = -0.4472 -0.3404 0.0538 0.0150 -1.0567 -1.9562 5.3514 5.7350 4.4289 -10.7782 -7.3449 -3.4148 Формулы для вычисления функций Лежандра приведены в [65].
3.7. Новые средства вычислений в MATLAB 6/7 3 . 7 . 1 . Новые функции true и false в MATLAB 6.5 В версии MATLAB 6.5 введены две новые функции t r u e ( m , n ) и f a l s e (m,nj для генерации массивов размера m х п, содержащих соответственно логические I и 0. Примеры: >> t r u e (2,3) ans = 1 1 1 1 1 1 » false(4,2) ans = 0 0 0 0 0 0 0 0 151
Глава 3. Математические
операции
То, что эти функции введены отдельно (их вполне заменяют средства генерации единичных и нулевых матриц) и почему они отнесены к логическим функциям, остается на совести разработчиков языка программирования системы MATLAB. 3.7.2. Функция psi Набор специальных математических функций в системах MATLAB функционально достаточно полон, а потому пересматривается очень редко. Чести быть включенной в этот набор в версии MATLAB 6.5 удостоена полигамма функция psi: • p s i (x) — возвращает значение логарифмической производной гамма-функции (полигамма функции). psi(x) = digamma(x) = d(log(gamma(x)))/dx = gamma'(x)/gamma(x); • p s i ( k , x ) — возвращает значение логарифмической k-й производной гамма-функции (полигамма функции); Y=psi (kO:kl,x) — возвращает значение логарифмических производных гамма-функции (полигамма функции) от kO-й до kl-й. Примеры: >> -psi (1) ans = 0.5772 » psi (2,2) ans = -0 .4041 » Y=psi(1:3,1:3 >> Y Y = 1 . 6449 -2.4041 6.4939
0.6449 -0.4041 0.4939
0.3949 -0.1541 0.1189
3.7.3. Особенности вычислений некоторых функций Работа ряда функций в MATLAB 6.5 подверглась пересмотру и улучшению. Так, функция log(10) доработана так, что теперь она возвращает значение i в выражении logl0(10Ai), например: >> 1 о д Ю ( 1 0 Л 5 ) ans = 5 >> l o g l O ( 1 0 " 5 . 6 7 8 ) ans = 5.6780
Функция вычисления полиномов Лежандра приобрела дополнительную форму: N = legendre (n,X, 'norm') — вычисляет полином Лежандра в полной нормализованной форме. С другими менее важными изменениями можно ознакомиться в разделе справки «New Features and Bug Fixes: Mathematics» в разделе MATLAB 6/7.
152
Глава 4. Операции с векторами и матрицами 4 . 1 . Создание матриц с заданными свойствами 4 . 1 . 1 . Создание единичной матрицы Матрицы как двумерные массивы с числовыми элементами представляют собой самые распространенные объекты системы MATLAB. Ниже описываются основные операции с матрицами. По обилию матричных операторов и функций MATLAB является лидером среди массовых систем компьютерной математики. Для создания единичной матрицы (она обычно обозначается как Е), которая имеет единичные диагональные элементы и нулевые все остальные, служит функция eye: • еуе(п) — возвращает единичную матрицу размера n x п; • eye (m,n) или eye ([m n] ) — возвращают матрицу размера m n с единицами по диагонали и нулями в остальных ячейках; • eye ( s i z e (A) ) — возвращает единичную матрицу того же размера, что и А. Единичная матрица не определена для многомерных массивов. Так, функция у = eye ( [ 2 , 3 , 4 ] ) при попытке ее вычисления приведет к ошибке. Пример использования функции eye: >> t = e y e ( 4 , 5 ) t~\
\J
0 0 0
i
0 0
.
0 0 1 0
0 0 0 1
0 0 0 0
Чаще всего применяются квадратные единичные матрицы, но последние могут быть и не квадратными, что и видно из приведенного примера. 4 . 1 . 2 . Создание матрицы с единичными элементами Для создания матриц, все (а не только диагональные) элементы которых — единицы, используется функция ones: • ones (n) — возвращает матрицу размера n x п, все элементы которой — единицы. Если п — не скаляр, то появится сообщение об ошибке; • ones(m,n) или ones ([m n]) — возвращают матрицу размера m x п, состоящую из единиц; • ones ( d l , d 2 , d 3 , . . .) или ones ( [ d l d2 d 3 . . . ] ) —возвращают массив из единиц с размером d l x d2 x d3 х . . .; • ones ( s i z e (А) ) — возвращает массив единиц той же размерности и размера, что и А. Матрица с единичными элементами, в отличие от единичной матрицы, в MATLAB определена и для многомерных массивов. Пример: >> s=ones (3,4)
153
Глава 4. Операции с векторами и матрицами s = 1 1 1 1 1 1 1 1 1 1 1 1
4.1.3. Создание матрицы с нулевыми элементами Иногда нужны матрицы, все элементы которых — нули. Следующая функция обеспечивает создание таких матриц: • z e r o s (n) — возвращает матрицу размера n x п, содержащую нули. Если п — не скаляр, то появится сообщение об ошибке; • z e r o s (m,n) или z e r o s ([m n]) —возвращают матрицу размера m x n, состоящую из нулей; • z e r o s ( d l , d2, d 3 , . . .) или z e r o s ( [dl d2 d3 . . . ] ) — возвращают массив из нулей размера d l x d2 x d3 x . . .; • z e r o s ( s i z e (A) ) — возвращает массив нулей того же размера и размерности, что и А. Пример: >> D = z e r o s ( 3 , 2 ) D = О О О О О О
4.1.4. Создание линейного массива равноотстоящих точек Функция l i n s p a c e формирует линейный массив равноотстоящих узлов. Это подобно оператору :, но дает прямой контроль над числом точек. Применяется в следующих формах: • l i n s p a c e ( a , b ) — возвращает линейный массив из 100 точек, равномерно распределенных между а и b; • l i n s p a c e (а, Ь, п) — генерирует п точек, равномерно распределенных в интервале от а до Ь. Пример: >> M = l i n s p a c e ( 4 , 2 0 , 1 4 ) М = Columns I through 7 4.0000 5.2308 6.4615 7.6923 8.92311 0.15381 1.3846 Columns 8 t h r o u g h 14 12.6154 13.8462 15.0769 16.3077 17.5385 18.7692 20.0000
4.1.5. Создание вектора равноотстоящих в логарифмическом масштабе точек Функция l o g s p a c e генерирует вектор равноотстоящих в логарифмическом масштабе точек. Она особенно эффективна при создании вектора частот. Это логарифмический эквивалент оператора : и функции l i n s p a c e : 154
4.1. Создание матриц с заданными
свойствами
• logspace (a,b) — возвращает вектор-строку из 50 равноотстоящих в логарифмическом масштабе точек между декадами 10й и 10*; • logspace (a, b, n) — возвращает п точек между декадами 10"' и 10*; • logspace (a,pi) — возвращает точки в интервале между 10" и к. Эта функция очень полезна в цифровой обработке сигналов. Все аргументы функции logspace должны быть скалярными величинами. Пример: >> L=logspace(1,2,14) L = Columns I through 7 10.0000 11.9378 14.2510 17.0125 20.3092 24.2446 28.9427 Columns 8 through 14 34.5511 41.2463 49.2388 58.7802 70.1704 83.7678 100.0000 4.1.6. Создание массивов со случайными элементами р = randperm(n) — возвращает случайные перестановки целых чисел 1:п в векторе-строке. Пример: >> randperm(6) ans = 2 4 3 6 5 1 Функция rand генерирует массивы случайных чисел, значения элементов которых равномерно распределены в промежутке (0,1): • rand(n) — возвращает матрицу размера п х п. Если п — не скаляр, то появится сообщение об ошибке; • rand(m,n) или rand ([m n]) — возвращают матрицу размера mn; • rand (m, n , p , . . .) или rand ([m n p . . . ] ) — возвращает многомерный массив; • rand (size (A) ) — возвращает массив того же размера и размерности, что и А, с элементами, распределенными по равномерному закону; • rand (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет равномерный закон распределения; • rand (' s t a t e ' ) — возвращает вектор с 35 элементами, содержащий текущее состояние генератора случайных чисел с равномерным распределением. Для изменения состояния генератора можно применять следующие формы этой функции: 0 rand (' s t a t e ' , s) — устанавливает состояние в s; 0 rand (' s t a t e ' , 0) — сбрасывает генератор в начальное состояние; 0 rand (' s t a t e ' , j ) — для целых j , устанавливает генератор ву'-е состояние; 0 rand (' s t a t e ' , sum (100*clock) ) —каждый раз сбрасывает генератор в состояние, зависящее от времени. Пример: >> Y=rand(4,3) 0.9501
0.8913
0.8214
155
Глава 4. Операции с векторами и матрицами 0.2311 0.7621 0.4447 0.6068 0.4565 0.6154 0.4860 0.0185 0.7919 Проверить равномерность распределения случайных чисел можно, построив большое число точек на плоскости со случайными координатами. Это делается с помощью следующих команд: >> X=rand(1000, 1) ; >> Y=rand(1000, 1) ; >> p l o t ( X , Y , ' . ' ) Полученный при этом график показан на рис. 4.1. Нетрудно заметить, что точки довольно равномерно распределены на плоскости, так что нет оснований не доверять заданному закону распределения координат точек.
0.9 OB # * t 07 06 0.5 •
V
':•
• \
•
.
•
.
••:
4
*-
•
•• *
' *
V.*
'•".
> .
"•;
•*
•
>•."•.'.
Т |-
•':• 1
*
v
:
D4 . 03 02 01 0
&
:
•••
\
i
*
*
*
*
•
*
• . • / • - • < • ' . : . ' } ' •
'••!•'.
•!••' I.
?
\ •*;.•
••>'•
.
ч
.*
*;
"•
r
<
I
0 2
0 3
.
*.V
• i "
•.
' ' ,
0.1
>
0 а
.*
'•
V
t
. i
** *
0 5
0,6
•,
0 7
*\
t
• • •
>
л. * Ч * >"
'л * л '. . О.В
0 9
*•
Рис. 4.1. Случайные точки с равномерным распределением на плоскости
координат
Функция r a n d n генерирует массив со случайными элементами, распределенными по нормальному закону с нулевым математическим ожиданием и среднеквадратическим отклонением, равным 1: • r a n d n (п) — возвращает матрицу размера п х п. Если п — не скаляр, то появится сообщение об ошибке; • randn (m,n) или randn ( [m n] ) — возвращают матрицу размера m x п; • randn (m, n, p , . . .) или randn ( [m п р . . . ] ) — возвращает массив с элементами, значения которых распределены по нормальному закону; • r a n d n ( s i z e (A) ) — возвращает массив того же размера, что и А, с элементами, распределенными по нормальному закону; • r a n d n (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет нормальное распределение; • r a n d n (' s t a t e ' ) — возвращает двухэлементный вектор, включающий текущее состояние нормального генератора. Для изменения состояния генератора можно применять следующие формы этой функции: 0 r a n d n (' s t a t e ' , s) —устанавливает состояние в s; 0 r a n d n (' s t a t e ' , 0) — сбрасывает генератор в начальное состояние; 0 r a n d n (' s t a t e ' , j) — для целых j устанавливает генератор в j-e состояние;
156
4.2. Операции с матрицами О randn (' s t a t e ' , sum (100*clock) ) — каждый раз сбрасывает генератор в состояние, зависящее от времени. Пример: » Y=randn(4,3) Y = -0.4326 -1.6656 0.1253 0.2877
-1.1465 1.1909 1.1892 -0.0376
0.3273 0.1746 -0.1867 0.7258
Проверить распределение случайных чисел по нормальному закону можно, построив гистограмму распределения большого количества чисел. Например, следующие команды » Y=randn (10000,1); >> hist (У,100) строят гистограмму (рис. 4.2) из 100 столбцов для 10 000 случайных чисел с нормальным распределением. Из рисунка видно, что огибающая гистограммы действительно близка к нормальному закону распределения.
Рис. 4.2. Гистограмма для 10 000 нормально распределенных чисел в 100 интервалах В пакете расширения Statistics Toolbox можно найти множество статистических функций, в том числе для генерации случайных чисел с различными законами распределения и определения их статистических характеристик.
4.2. Операции с матрицами 4 . 2 . 1 . Конкатенация матриц Конкатенацией называют объединение массивов. Это реализует следующая функция: • С = cat (dim, А, В) — объединяет массивы А и в в соответствии со спецификацией размерности dim и возвращает объединенный массив; dim = 1 — горизонтальная конкатенация, dim = 2 — вертикальная, dim = 3 — многомерный массив размерности 3 и т. д.; 157
Глава 4. Операции с векторами и матрицами с = c a t (dim, А1, А2, A3, А4, . . .) объединяет все входные массивы (А1, А2, A3, А4 и т. д.) в соответствии со спецификацией размерности dim и возвращает объединенный массив; c a t ( 2 , A , B ) — это то же самое, что и [А, В], a c a t ( 1 , А,в) — то же самое, что и [А;В]. При записи cat(dim,C(:)) или cat(dim, C.field) эта функция применима к массивам ячеек или структур, содержащим численные матрицы. Пример: >> А = = [12 , 4 ; 3 , 5 ] ; В= [ 8 , 7 ; 9, 0 ] ; C = c a t . ( l , А, В) • С = 4 2 3 5 7 8 9 0
4.2.2. Создание матриц с заданной диагональю Свойства матриц сильно зависят от их диагональных элементов. Следующая функция MATLAB позволяет создавать специальные типы матриц с заданными диагональными элементами.: • X = d i a g (v, k) — для вектора v, состоящего из п компонентов, возвращает квадратную матрицу х порядка n+abs (k) с элементами v на k-к диагонали, при к=0 это главная'диагональ (из левого верхнего угла матрицы в правый нижний угол), при к>0 — одна из диагоналей (диагональ в терминологии MATLAB — это линия, параллельная главной диагонали) выше главной диагонали, при к<0 — одна из нижних диагоналей. Остальные элементы матрицы — нули; • X = d i a g ( v ) — помещает вектор v на главную диагональ (то же, что и в предыдущем случае при к=0); • v = d i a g (X, к) — для матрицы X возвращает вектор-столбец, состоящий из элементов к-й диагонали матрицы х; • v = diag(X) — возвращает главную диагональ матрицы х (то же, что и в предыдущем случае при к=0). Примеры: >> v = [ 2 , 3 ] ; X = d i a g ( v , 2) X = 0 0 2 0 0 0 0 3 0 0 0 0 0 0 0 0 »Х=[2,5,45,6,-3,5,4,9;7,9,4,8,-5,66,45,2];v=diag(X,0) v = 2 5 4 2
•
4.2.3. Перестановки элементов матриц Для перестановок элементов матриц служат следующие функции: 158
4.2. Операции с матрицами • в = f l i p l r (А) — зеркально переставляет столбцы матрицы А относительно вертикальной оси. Пример: » F=[l,2,3;5,45,3] F= 1 2 3 5 45 3 » fliplr(F) ans = 3 2 1 3 45 5
• В = flipud(A) — зеркально переставляет строки матрицы А относительно горизонтальной оси. Пример: >> F= 3 6 >> ans 6 3
F=[3,2,12;6,3,2] 2 12 3 2 flipud(F) = 3 2 2 12
• perms (v) — возвращает матрицу р, которая содержит все возможные перестановки элементов вектора v, каждая перестановка в отдельной строке. Матрица р содержит п! строк и п столбцов. Пример: » v = [ l 4 6] v = 1 4 6 >> P=perms(v) Р= 6 4 1 4 6 1 6 1 4 1 6 4 4 1 6 1 4 6
4.2.4. Вычисление произведений Несколько простых функций служат для перемножения элементов массивов: • prod (А) — возвращает произведение элементов массива, если А — вектор, или вектор-строку, содержащую произведения элементов каждого столбца, если А — матрица; • prod (A, dim) — возвращает матрицу (массив размерности два) с произведением элементов массива А по столбцам (dim = 1), по CTpoKaM(dim = 2), по иным размерностям в зависимости от значения скаляра dim. Пример: » А=[1 2 3 4; 2 4 5 7; 6 8 3 4] 159
Глава 4. Операции с векторами и матрицами 1 2 3 4 2 4 5 7 6 8 3 4 >> B = p r o d ( A ) В = 12 64 45
112
• cumprod (A) — возвращает произведение с накоплением. Если А — вектор, cumprod (А) возвращает вектор, содержащий произведения с накоплением элементов вектора А. Если А — матрица, cumprod (А) возвращает матрицу того же размера, что и А, содержащую произведения с накоплением для каждого столбца матрицы А (первая строка без изменений, во второй строке произведение первых двух элементов каждого столбца, в третьей строке элементы второй строки матрицы-результата умножаются на элементы третьей строки матрицы входного аргумента по столбцам и т. д.); • cumprod (A, dim) — возвращает произведение с накоплением элементов по строкам или столбцам матрицы в зависимости от значения скаляра dim. Например, cumprod (А, 1) дает прирост первому индексу (номеру строки), таким образом выполняя умножение по столбцам матрицы А. Примеры: » А = [ 1 2 3 ; 4 5 6; А = 1 2 3 4 5 6 7 8 9 >> В = c u m p r o d ( A ) В = 1 2 3 4 10 18 28 80 162 В = cumprod(А,1) В = 1 2 3 4 10 18 28 80 162
7 8 9]
• c r o s s (u,v) — возвращает векторное произведение векторов и и V в трехмерном пространстве, то есть W = U х V. U H V — обязательно векторы с тремя элементами; • c r o s s (и, v, dim) — возвращает векторное прошведение и и V по размерности, определенной скаляром dim. и и V — многомерные массивы, которые должны иметь одну и ту же размерность, причем размер векторов в каждой размерности s i z e (U, dim) и s i z e (v, dim) должен быть равен 3. Пример: >> с
а
=
[6
5
3 ] ;
b
=
[ 1 7
6];с
=
cross
(a,b)
= Э
-3337
• kron(x,Y) — вычисления тензорного произведения Кронекера для матриц X и Y. 160
4.2. Операции с матрицами Пример: » X=[l 2; 3 4] X = 1 2 3 4 » Y=eye(2) Y = 0 1 kron(X,Y ) 1 0
» ans = 1 0 0 1 3 0 0 3 >> kron(Y,X ) ans = 1 2 3 4 0 0 0 0
2 0 4 0
0 0 1 3
0
2 0 4
0 0
2 4
4.2.5. Суммирование элементов Определены следующие функции суммирования элементов массивов: • sum (А) — возвращает сумму элементов массива, если А — вектор, или вектор-строку, содержащую сумму элементов каждого столбца, если А — матрица; • sum (A, dim) — возвращает сумму элементов массива по столбцам (dim = 1), строкам (dim = 2) или иным размерностям, в зависимости от значения скаляра dim. Пример: >;> A=magic(4) A = 16 2 3 13 5 11 10 8 7 6 9 12 4 14 15 1 >> В = sum(A) В = 34 34 34 34 cumsum(A) — выполняет суммирование с накоплением. Если А — вектор, cumsum (А) возвращает вектор, содержащий результаты суммирования с накоплением элементов вектора А. Если А — матрица, cumsum (А) возвращает матрицу того же размера, что и А, содержащую суммирование с накоплением для каждого столбца матрицы А; 161
Глава 4. Операции с векторами
и
матрицами
• cumsum (A, dim) — выполняет суммирование с накоплением элементов по размерности, определенной скаляром dim. Например, cumsum (А, 1) выполняет суммирование по столбцам. Пример: >> A=magic (4) A = 16 2 3 13 5 11 10 8 7 12 9 6 4 14 15 1 >> В = cumsum (A) П -D
— —
16 21 30 34
2 13 20 34
3 13 19 34
13 21 33 34
4 . 2 . 6 . Функции формирования матриц Для создания матриц, состоящих из других матриц, служат следующие функции: • repmat (A, m, п) — возвращает матрицу в, состоящую из m х n копий матрицы А (т. е. в матрице m x n каждый элемент заменяется на копию матрицы А); • repmat (А, п) — формирует матрицу, состоящую из n x n копий матрицы А; • repmat (A, [m п] ) — дает тот же результат, что и repmat (A,m,n); • repmat (A, [m n p . . . ] ) — возвращает многомерный массив (m x n x p ...), состоящий из копий многомерного массива или матрицы А; • repmat (A,m, n) — когда А — скаляр, возвращает матрицу размера m x n со значениями элементов, заданных А. Это делается намного быстрее, чем A'ones(m,n) . Пример: F = 2 3 4 3 32 >> repmat (F,2 ,3) ans = 2 2 3 2 3 3 43 32 43 32 43 32 2 3 2 3 3 2 43 32 43 32 43 32 r e s h a p e (A,m,n) — возвращает матрицу в размерностью m x n, сформированную из А путем последовательной выборки по столбцам. Если число элементов А не равно m x п, то выдается сообщение об ошибке; r e s h a p e ( А , ш , п , р , . . . ) или В = r e s h a p e ( A , [ m n р . . . ] ) — возвращает N-мерный массив с элементами из А, но имеющий размер m x n x p . . . . Произведение m x n х р ... должно быть равно значению p r o d ( s i z e (A) ).
162
4.2. Операции с матрицами • reshape (A, siz) — возвращает N-мерный массив с элементами из А, но перестроенный к размеру, заданному с помощью вектора s i z . Пример: » F = [ 3 , 2 , 7 , 4 ; 4 , 3 , 3 , 2 ; 2 , 2, 5, 5] F = 3 2 7 4 4 3 3 2 2 2 5 5 >> r e s h a p e ( F , 2 , 6 ) ans = 3 2 3 7 5 2 4 2 2 3" 4 5
4.2.7. Поворот матриц Следующая функция обеспечивает поворот матрицы (по расположению элементов): • rot9О (А) — осуществляет поворот матрицы А на 90° против часовой стрелки; • r o t 9 0 ( A , k ) — осуществляет поворот матрицы А на величину 90*к градусов, где к — целое число. Пример: » М=[3,2,7;3,3,2;1,1,1] М= 3 2 7 3 3 2 1 1 1 >> rot90(M) ans = 7 2 1 2 3 1 3 3 1
4.2.8. Выделение треугольных частей матриц При выполнении ряда матричных вычислений возникает необходимость в выделении треугольных частей матриц. Следующие функции обеспечивают такое выделение: • t r i l (х) — возвращает матрицу, все элементы которой выше главной диагонали х заменены нулями, неизменными остаются лишь элементы нижней треугольной части, включая элементы главной диагонали; • t r i l (X, к) — возвращает неизменной нижнюю треугольную часть матрицы X, начиная с к-й диагонали. При к = 0 это главная диагональ, при к > 0 — одна из верхних диагоналей, при к < 0 — одна из нижних диагоналей. Пример: >> М = [ 3 , 1 , 4 ; 8 , 3 , 2 ; 8 , 1 , 1 ] М = 3 1 4
163
Глава 4. Операции с векторами и матрицами 8 3 2 8 1 1 » tril(M) ans = 3 0 0 8 3 0 8 1 1 • t r i u ( x ) — возвращает неизменной верхнюю треугольную часть матрицы х, включая элементы главной диагонали, и заменяет нулями остальные элементы; • t r i u ( X , k ) — возвращает неизменной верхнюю треугольную часть матрицы х, начиная с к-й диагонали. При к = 0 это главная диагональ, при к > 0 — одна из верхних диагоналей, при к < 0 — одна из нижних диагоналей. Пример: м= 3 1 4 8 3 2 8 1 1 >> t r i u ( M ) ans = 3 1 4 0 3 2 0 0 1
4.2.9. Операции с пустыми матрицами Возможно создание пустых матриц, например: » м=[]
м=
>> whos M Name Size Bytes Class M 0x0 0 double array Grand total is 0 elements using 0 bytes Из этого примера видно, что пустая матрица создается с помощью пустых квадратных скобок. С помощью функций zeros, ones, rand или eye также можно создавать пустые матрицы заданного размера. Например: >> E = z e r o s ( 0 , 5 ) Е= Empty m a t r i x : 0-by-5 С пустыми матрицами можно выполнять некоторые операции, например: » sum(M) ans = 0 >> prod(M) ans = 1 » max(M) 164
4.3. Создание и вычисление специальных матриц ans
=
[] >> min(M) ans =
4.3. Создание и вычисление специальных матриц 4.3.1. Сопровождающие матрицы Начиная с этого раздела рассматриваются функции, относящиеся к различным специальным матрицам. Они довольно широко используются при решении достаточно серьезных задач матричного исчисления. В связи с тем, что назначение соответствующих функций вытекает из их наименования, мы не будем сопровождать описание вводными комментариями. Соответствующие подробные определения вы найдете в книге [53]. Рекомендуем читателю построить графики, представляющие.элементы этих матриц. compan(u) — возвращает сопровождающую матрицу, первая строка которой равна -и (2 :п)/и (1), где и — вектор полиномиальных коэффициентов. Собственные значения compan(u) — корни многочлена. Пример: для многочлена х Л 3+х Л 2-бх-8 вектор полиномиальных коэффициентов г имеет следующий вид: »
г=[1,1,-6,-8]
1 1 - 6 - 8 >> A = c o m p a n ( r ) % сопровождающая м а т р и ц а А = - 1 6 8 1 0 0 0 1 0 >> e i g ( c o m p a n ( r ) ) % корни м н о г о ч л е н а ans = -2.0000 2.5616 -1.5616
4.3.2. Тестовые матрицы Для выполнения ряда вычислений в области линейной алгебры создан ряд специальных матриц, именуемых тестовыми матрицами. Такие матрицы создаются указанными ниже функциями. [А, в, С , . . . ] = g a l l e r y (' tmf u n ' , PI, P2, . . . ) — возвращает тестовые матрицы, определенные строкой tmfun, где tmfun — это имя семейства матриц, выбранное из списка. PI, P2, ... — входные параметры, требуемые для конкретного семейства матриц. Число используемых параметров PI, P2, ... изменяется от матрицы к матрице. Функция g a l l e r y хранит более 50 различных тестовых матричных функций, полезных для тестирования численных алгоритмов и других целей (включая матрицы Коши, Чебышева, фон Неймана, Чебышева — Вандермонде, Вандермонде, Уилкинсона и т. д.). Пример:
165
Глава 4. Операции с векторами и матрицами >> A=gallery( 'dramadah',5,2) А — 1 0 0 0
1 1 0 0
0 1 1 0
1 0 1 1
0 1
0
0
0
0
1
с 1
4 . 3 . 3 . Матрицы Адамара н = hadamard(n) — возвращает матрицу Адамара порядка п. Матрица Адамара — это квадратная матрица размера п, составленная из значений 1 и— 1, столбцы которой ортогональны, так что справедливо соотношение Н'*н=п*1, где 1=еуе (п, п) (единичная квадратная матрица размера п). Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов. Матрица Адамара размера n x n при п > 2 существует только, если п делится на 4 без остатка. Алгоритм MATLAB вносит дополнительные ограничения, вычисляя матрицы Адамара только для тех п, когда или п, или п/12, или п/20 являются степенями по основанию 2. Пример: >>
н= н= 1 1 1
hadamard(A
1
1 1 \ -1 -I -1
_
1 -1 -1 1
1
4.3.4. Матрицы Ганкеля Матрицы Ганкеля относятся к симметричным матрицам с постоянными значениями на антидиагоналях. Элементы матриц Ганкеля определяются выражением: р = [с r(2:end)\
Векторы с и г могут задаваться произвольно, а вектор р определяет матрицу. Определены следующие функции для матриц Ганкеля: • hankel(c) — возвращает квадратную матрицу Ганкеля, первый столбец которой совпадает с вектором с и все элементы, лежащие ниже первой анти-диагонали (из левого нижнего угла матрицы в правый верхний угол), равны 0; • h a n k e l ( c r ) — возвращает матрицу Ганкеля, первый столбец которой совпадает с вектором с, а последняя строка — с вектором г. Если последний элемент вектора с отличен от первого элемента вектора г, то выдается предупреждение об ошибке, но предпочтение отдается последнему элементу вектора с. Примеры: >> с = 1 : 4 с 1 2 3
166
4
4.3. Создание и вычисление специальных
матриц
>> г=6 :10 г = 6 7 8 9 10 >> Н = hanke]-(c,r) Warning: (Column wins anti-diagonal conflict. Н = 2 3 4 7 2 3 4 7 8 3 4 7 8 9 4 7 8 9 10
4 . 3 . 5 . Матрицы Гильберта Функция h i l b ( n ) — возвращает матрицу Гильберта порядка п. Матрица Гильберта является примером плохо обусловленной матрицы. Элементы матрицы Гильберта определяются как н ( i , j ) =1/ ( i + j - 1 ) . Пример: >> Н = h i l b ( 5 ) Н =
1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 0.2500 0.2000 0.1667 0.2000 0.1667 0.1429 >> cond(hilb(5)) ans = 4.7661e+005
0.2500 0.2000 0.1667 0.1429 0.1250
0.2000 0.1667 0.1429 0.1250 0.1111
Значение числа обусловленности матрицы Гильберта указывает на очень плохо обусловленную матрицу. invhilb(n) — возвращает матрицу, обратную матрице Гильберта порядка п (п<15). Для п > 15 функция invhilb(n) возвращает приближенную матрицу. Точная обратная матрица — это матрица с очень большими целочисленными значениями. Эти целочисленные значения могут быть представлены как числа с плавающей запятой без погрешности округления до тех пор, пока порядок матрицы п не превышает 15. Пример:
>>н = н=
invhilb (5) .
25 -300 -300 4800 1050 18900 -1400 26880 630 - 12600
1050 -18900 79380 -117600 56700
-1400 26880 -117600 179200 -88200
630 -12600 56700 -8820С 44100
А вот результат обращения матрицы Гильберта с плавающей запятой: >> m v ( h i l b ( 5 ) ) ans
=
1.0е+005
*
0.0002
-0.0030
0.0105
-0.0140
0.0063
-0.0030
0.0480
-0.1890
0.2688
-0.1260
0.0105
-0.1890
0.7938
-1.1760
0.5670
167
Глава 4. Операции с векторами и матрицами -0 .0140 0. 0063
0. 2688 -0 .1260
-1 .1760 0. 5670
1 .7920 .8820
-0
-0 .8820 0. 4410
4.3.6. Матрицы магического квадрата Функция magic (n) — возвращает матрицу размера n x п, состоящую из целых чисел от 1 до п2, в которой суммы элементов по строкам, столбцам и главным диагоналям равны одному и тому же числу. Порядок матрицы должен быть больше или равен 3. Пример: >> M = m a g i c ( 4 ) М = 16 5 9 4
2 11 7 14
3 10 6 15
13 8 12 1
4.3.7. Матрицы Паскаля Матрицы Паскаля — это симметрические положительно определенные квадратные матрицы порядка п, составленные из элементов треугольника Паскаля. Он составлен из коэффициентов разложения бинома (1 + w)k, записанных для к = 1, 2, 3, 4 в виде: 1
1+ w
1 + 2w + w
2
2
1 + 3w + 3w + w3
1 + 4w + 6w2 + 3w3 + w4 Определены следующие функции для задания матриц Паскаля: • p a s c a l (n) — возвращает матрицу Паскаля порядка п, то есть симметричную положительно определенную матрицу с целочисленными элементами, взятыми из треугольника Паскаля; • pascal (n, 1) — возвращает нижний треугольный фактор (до знаков столбцов) Холецкого для матрицы Паскаля. Полученная матрица, все элементы которой выше главной диагонали равны нулю, является своей обратной матрицей, т. е. квадратным корнем из единичной матрицы; • p a s c a l (n,2) — возвращает матрицу, полученную в результате транспонирования и перестановок матрицы pascal (n, 1), при этом результат является кубическим корнем из единичной матрицы. Примеры: >> A = p a s c a l ( 4 ) А = 1 1 1 1 >> А = 0
168
1 1 1 2 3 4 6 10 3 4 10 20 A=pascal(4,2) 0
0 - 1
4.3. Создание и вычисление специальных матриц 0 0 1
0 1 1
-1 2 1
3 -3 -1
4.3.8. Матрицы Россера Матрицей Россера называют матрицу порядка 8 с целочисленными элементами, собственные значения которой имеют: • пару кратных значений; • 3 близких собственных значения; • нулевое собственное значение; • малое ненулевое собственное значение. Многие алгоритмы вычисления собственных значений спотыкаются на этой матрице. Исключением является QR-алгоритм Франсиса, усовершенствованный Уилкинсоном, входящий в MATLAB. Пример: >> R=rosser R = 611 196 196 899 -192 113 407 -192 -8 -71 -52 -43 -49 -8 29 -44 » eig(rosser) ans = 1.0е+003 * -1.0200 -0.0000 0.0001 1.0000 1.0000 1.0199 1.0200 1.0200
-192 113
-192
899 196 61 49 8 52
196 611 8 44 59 -23
407
-52 -43 49 44 -599 -599 411 208 208 208 208 -8 -71 61 8 411
-49 -8 8 59 208 208 99 -911
29 -44 52 -23 208 208 -911 99
4.3.9. Матрицы Теплица Для задания матриц Теплица заданы следующие функции: • t o e p l i t z (с, г) — возвращает несимметричную матрицу Теплица, где с — ее первый столбец, а г — первая строка. Если первый элемент столбца с и первый элемент строки г различны, то выдается соответствующее предупреждение, но отдается предпочтение элементу столбца; • t o e p l i t z (r) — возвращает симметричную, или эрмитову, матрицу Теплица, однозначно определяемую вектором г. Пример: 169
Глава 4. Операции с векторами и матрицами » с=1:3; » г=1.5:4.0; >> Т = toeplitz (с,г) Warning: Column wins diagonal conflict. T = 1.0000 2.5000 3.5000 2.0000 1.0000 2.5000 3.0000 2.0000 1.0000 4 . 3 . 1 0 . Матрица Вандермонда Матрица Вандермонда vander(x) задает преобразование вектора х и создает матрицу, размер которой определяется размером вектора, а каждый элемент j-ro столбца удовлетворяет выражению v (:, j ) =хЛ ( n - j ) . Пример: >> X = [1 3 5 7] ;
>> V = vander (х) V = 1 1 1 1 27 1 9 3 25 125 5 1 343 49 7 1
Обратите внимание на то, что третий столбец аналогичен исходному вектору. 4 . 3 . 1 1 . Матрицы Уилкинсона Функция Wilkinson (п) — возвращает одну из тестовых матриц Уилкинсона. (Другие матрицы Уилкинсона можно вызвать при помощи функции gallery.) Это симметричная трехдиагональная матрица, собственные значения которой попарно близки, но не равны друг другу. Наиболее широко используется wilkinson(2l), собственные значения которой (10.746) совпадают до 14 знака после запятой (различаются с 15). Пример: W = Wilkinson
(5)
W =
2 1
0 0 0
1 1 1 0 0
0 1 0 1 0
0 0 1 1 1
0 0 0 1 2
Полные данные о тестовых матрицах можно найти в справочной системе MATLAB.
4.4. Матричные операции линейной алгебры Линейная алгебра — область, в которой наиболее часто используются векторы и матрицы. Наряду с операциями общего характера, рассмотренными выше, применятся функции, решающие наиболее характерные задачи линейной алгебры. 170
4.4. Матричные операции линейной
алгебры
4 . 4 . 1 . Матричные функции Весьма представителен в MATLAB набор матричных функций, широко используемых в линейной алгебре. Они перечислены ниже. х • ехрт(Х) — возвращает е от матрицы х. Комплексный результат получается, если х имеет неположительные собственные значения. Функция expm является встроенной и использует разложение Паде. Ее вариант в виде m-файла располагается в файле expmi.m. Второй метод вычисления матричной экспоненты использует разложение Тейлора и находится в файле expm2.m. Метод Тейлора не рекомендуется применять как основной, так как он зачастую бывает относительно медленным и неточным. Реализация третьего способа вычисления матричной экспоненты находится в файле ехртЗ.т и использует спектральное разложение матрицы А. ЭТОТ метод неудачен, если входная матрица не имеет полного набора линейно независимых собственных векторов. Пример: >> S = [ 1 , 0 , 3 ; 1 , 3 , 1 ; 4 ,
0,0]
S = 1 0 3 1 3 1 0 4 0 a=expm (S) 31..2203 38 .9659 31 . 1705
0 20.0855 0
23. 3779 30. 0593 23. 4277
• funm(x, Sfunction) ' — возвращает любую функцию от квадратной матрицы X, если правильно ввести имя, составленное из латинских букв. Команды funm(X,@ехр), funm (X,@sqrt), funm (X,@log) Иехрт(Х), sqrtm(x), logm(X) вычисляют соответственно одинаковые функции, но используют разные алгоритмы. Однако предпочтительнее использовать ехрт(Х), sqrrm(x), logm(X); • [ Y , e s t e r r ] = funm(x, @function) — не выдает никакого сообщения, но, помимо результата вычислений в матрице Y, возвращает грубую оценку относительной погрешности результата вычислений funm в e s t e r r . Если матрица X — действительная симметричная или комплексная эрмитова, то ее форма Шура диагональна и полученный результат может иметь высокую точность. Примеры: » S=[l,0,3;l,3,l;4,0,0] S = 1 0 3 1 3 1 4 0 0 >> a = f u n m ( S , @ е х р )
Форма funm(X, ' f u n c t i o n ' ), как в предыдущих версиях MATLAB, по-прежнему возможна, но не рекомендуется. 171
Глава 4. Операции с векторами и матрицами 31 .2203 38 .96592 31 .1705
0.0000 0.0855 -0 .0000
23 .3779 30 .0593 23 .4277
• logm(X) — возвращает логарифм матрицы. Результат получается комплексным, если х имеет отрицательные собственные значения; • [Y, e s t e r r ] =logm (X) — не выдает какого-либо предупреждающего сообщения, но возвращает оценку погрешности в виде относительной неувязки norm(expm(Y)-X)/norm(X) ; Если матрица X — действительная симметричная или комплексная эрмитова, то теми же свойствами обладает и logm(x). Пример: а = 31.2203 0.0000 23. 3779 38.9659 20. 0855 30 .0593 31.1705 -0. 0000 23 .4277 >> logm(a) ans = 1.0000 0 .0000 3.0000 1. 0000 3 .0000 1.0000 4.0000 -0.0000 -0.0000 • sqrtm(X) — возвращает квадратный корень из х, соответствующий неотрицательным действительным частям собственных значений х. Результат получается комплексным, если х имеет отрицательные собственные значения. Если X вырожденная, то выдает предупреждение об ошибке; • [Y, resnorm] =sqrtm(x) — не выдает какого-либо предупреждающего сообщения, но возвращает оценку погрешности в виде относительной неувязки по нормам Фробениуса (см. урок 11) norm(x-YA2, ' f r o ' ) /norm (X,'fro1); • [Y, alpha, condest]= sqrtm(X) — с тремя выходными аргументами функция помимо квадратного корня возвращает также фактор стабильности (но не невязку!) и оценку числа обусловленности результирующей матрицы Y. Пример: » S=[2,l,0;6,7,-2;3,4,0]; » e=sqrtm(S) е = 1.2586 0.2334 0.0688 1.6066 2.7006 -0.6043 0.5969 1.1055 0.7918
4.4.2. Вычисление нормы и чисел обусловленности матрицы Для понимания всего нижеизложенного материала необходимо учесть, что нормы матриц в MATLAB отличаются от норм векторов. Норма вектора х (или, точнее, его р-норма) задается выражением
Ml = II \\р
и вычисляется функцией norm(x,p). 172
4.4. Матричные операции линейной алгебры Пусть А — матрица. Тогда n = norm(A) эквивалентно n = norm(A,2) и возвращает вторую норму, т. е. самое большое сингулярное число матрицы А. Функция п = norm(A, 1) возвращает первую норму, т. е. самую большую из сумм абсолютных значений элементов матрицы по столбцам. Норма неопределенности n = norm(A,inf) возвращает самую большую из сумм абсолютных значений элементов матрицы по рядам. Норма Фробениуса (Frobenius) norm(A,'fro') = sqrt(sum(diag(A'A))). В общем случае р-норма матрицы А вычисляется как:
Для этого вычисления, при р = 1, 2 и inf, служит функция norm(A,p). Пример: » А=[2,3,1;1,9,4;2,б,7] А= 2 3 1 1 9 4 2 6 7 >> norm(А,1) ans = 18
Числа обусловленности матрицы определяют чувствительность решения системы линейных уравнений к погрешностям исходных данных. Следующие функции позволяют найти числа обусловленности матриц. • cond(X) — возвращает число обусловленности, основанное на второй норме, то есть отношение самого большого сингулярного числа х к самому малому. Значение cond(X), близкое к 1, указывает на хорошо обусловленную матрицу; . : • с = cond(X,p) — возвращает число обусловленности матрицы, основанное нар-норме: norm (X,p) *norm(inv (X) , р), где р определяет способ расчета: О р=1 — число обусловленности матрицы, основанное на первой норме; О р=2 — число обусловленности матрицы, основанное на второй норме; О р= ' f r o ' — число обусловленности матрицы, основанное на норме Фробениуса (Frobenius); О p=inf — число обусловленности матрицы, основанное на норме неопределенности. О с = cond(X) — возвращает число обусловленности матрицы, основанное на второй норме. Пример: » d = c o n d ( h i l b (4)) d =
1.5514е+004 • condeig (A) — возвращает вектор чисел обусловленности для собственных значений А. Эти числа обусловленности — обратные величины косинусов углов между левыми и правыми собственными векторами; • [V, D,s] = condeig (А) — эквивалентно [V, D] = e i g ( A ) ; s = condeig(A);. 173
Глава 4. Операции с векторами и матрицами Большие числа обусловленности означают, что матрица А близка к матрице с кратными собственными значениями. Пример: >> d = c o n d e i g ( r a n d (4)) d = 1.0766 1.2298 1.5862 1 .7540 • r c o n d (A) — оценивает обратную величину обусловленности матрицы А по первой норме, используя оценивающий обусловленность метод LAPACK. Если А — хорошо обусловленная матрица, то rcond (А) около 1.00, если плохо обусловленная, то около 0.00. По сравнению с cond функция rcond реализует более эффективный в плане затрат машинного времени, но менее достоверный метод оценки обусловленности матрицы. Пример: >> s = r c o n d ( h i l b ( 4 ) ) s = 4.6461е-005
4.4.3. Определитель и ранг матрицы Для нахождения определителя (детерминанта) и ранга матриц в MATLAB имеются следующие функции: • det(X) — возвращает определитель квадратной матрицы X. Если х содержит только целые элементы, то результат — тоже целое число. Использование det (X)=0 как теста на вырожденность матрицы действительно только для матрицы малого порядка с целыми элементами. Пример: » А = [ 2 , 3 , 6 ; 1 , 8 , 4 ; 3 , 6 , 7] А = 2 3 6 1 8 4 3 6 7 >> d e t ( A ) ans = -29
Детерминант матрицы вычисляется на основе треугольного разложения методом исключения Гаусса: [L,U]=lu(А) ;
s=det(L);
d=s*prod(diag(U) ) ;
Ранг матрицы определяется количеством сингулярных чисел, превышающих порог tol=max ( s i z e (A) ) *nprm (A) *eps. При этом используется следующий алгоритм: s = svd (A) ; tol=max ( s i z e (A) ) *nprm (A) * e p s ; r = s u i n ( s > t o l ) ; Для вычисления ранга используется функция rank: • rank (A) — возвращает количество сингулярных чисел, которые являются большими, чем заданный по умолчанию допуск; • r a n k ( A , t o l ) — возвращает количество сингулярных чисел, которые превышают t o l . 174
4.4. Матричные операции линейной
алгебры
Пример: >> rank(hilb(ll)) ans 10
4.4.4. Определение нормы вектора Норма вектора — скаляр, дающий представление о величине элементов вектора. Функция norm определяет, является ли ее аргументом (входным аргументом в терминологии MATLAB) вектор или матрица, и измеряет несколько различных типов норм векторов: • norm (X) =norm (X, 2) — вторая норма возвращает наибольшее сингулярное число X, max (svd (X) ); • n o r m ( x , p ) , где р — целое положительное число, — возвращает корень степени р из суммы абсолютных значений элементов вектора, возведенных в степень р. При р = 1 это может совпадать либо с первой нормой, либо с нормой неопределенности матриц; • norm(X, ' i n f ' ) возвращает максимальное из абсолютных значений элементов вектора; • norm(x, ' - i n f ' ) возвращает минимальное из абсолютных значений элементов вектора.
4.4.5. Определение ортонормированного базиса матрицы Вычисление ортонормированного базиса матрицы обеспечивают функции:
следующие
• в = o r t h ( A ) — возвращает ортонормированный базис матрицы А. Столбцы в определяют то же пространство, что и столбцы матрицы А, но столбцы в ортогональны, то есть В' *в=еуе (rank (А) ). Количество столбцов матрицы в равно рангу матрицы А. Пример: » А=[2 4 6 ; 9 8 2 ; 1 2 2 3 4 3 ] А= 2 4 6 9 8 2 12 2 3 43 >> B = o r t h ( A ) 3 = 0.1453 -0.0414 -0.9885 0.1522 -0.9863 0.0637 0.9776 0.1597 0.1371 • n u l l (A) — возвращает ортонормированный базис для нулевого (пустого) пространства А. Пример: » null(hilb(ll)) ans = 0 .0000 -0.0000 0.0009 -0.0099 175
Глава 4. Операции с векторами и матрицами 0.0593 -0.2101 0.4606 -0.6318 0.5276 -0.2453 0.0487
4.4.6. Функции приведения матрицы к треугольной форме Треугольной называется квадратная матрица А, если при 1 > к (верхняя треугольная матрица) или при к > 1 (нижняя треугольная матрица) следует, что элементы матрицы А(1,к) равны нулю. В строго треугольной матрице нули находятся и на главной диагонали. В линейной алгебре часто используется приведение матриц к той или иной треугольной форме. Оно реализуется следующими функциями: • r r e f (А) — возвращает приведенную к треугольной форме матрицу, используя метод исключения Гаусса с частичным выбором ведущего элемента. По умолчанию принимается значение порога допустимости для незначительного элемента столбца, равное (max (size (A) ) *eps*norm (A, inf) ); • [R,jb] = r r e f (A) — также возвращает вектор jb, так что: 0 г = length (jb) может служить оценкой ранга матрицы А; 0 x(jb) — связанные переменные в системе линейных уравнений вида Ах=ь; 0 А (:, jb) — базис матрицы А; 0 * R ( l : r , j b ) — единичная матрица размера г х г ; • [R,jb] = r r e f ( A , t o l ) — осуществляет приведение матрицы к треугольной форме, используя метод исключения Гаусса с частичным выбором ведущего элемента для заданного значения порога допустимости t o l ; • rrefmovie(A) — показывает пошаговое исполнение процедуры приведения матрицы к треугольной. Примеры: >> s=magic(3) s = 8 1 6 3 5 7 4 9 2 » rref(s) ans = 1 0 0 0 1 0 0
0
1
4.4.7. Определение угла между двумя подпространствами Угол между двумя подпространствами вычисляет функция t h e t a = s u b s p a с е ( А , в ) . Она возвращает угол между двумя подпространствами, натянутыми на столбцы матриц А Й В . ЕСЛИ А Й В — векторы-столбцы единичной длины, то угол вычисляется по формуле a c o s ( A ' * B ) . Если некоторый физический эксперимент 176
4.4. Матричные операции линейной
алгебры
описывается массивом А, а вторая реализация этого эксперимента — массивом в, то s u b s p a c e ( А , в ) измеряет количество новой информации, полученной из второго эксперимента и не связанной со случайными ошибками и флуктуациями. Пример: >> Н = h a d a m a r d ( 2 0 ) ; А = Н ( : , 2 : 4 ) ; В = Н ( : , 5 : 8 ) ; >> s u b s p a c e ( А , В ) ans = 1.5708
4.4.8. Вычисление следа матрицы След матрицы А — это сумма ее диагональных элементов. Он вычисляется функцией t r a c e (A). Пример: » а = [ 2 , 3 , 4 ; 5 , 6 , 7 ; 8,9,1] а = 2 3 4 5 6 7 8 9 1 >> t r a c e (a) ans = 9
4.4.9. Разложение Холецкого Разложение Холецкого — известный прием матричных вычислений. Функция c h o l находит это разложение для действительных симметричных и комплексных эрмитовых матриц. • R = c h o l (X) — для квадратной матрицы 2 х возвращает верхнюю треугольную матрицу R, так что R' *R = xnew. Если симметрическая матрица x neu , заданная верхней треугольной частью и диагональю матрицы х, не является положительно определенной матрицей, выдается сообщение об ошибке. Разложение Холецкого возможно для действительных и комплексных эрмитовых матриц 3 ; • [R,p] = chol(X) с двумя выходными аргументами никогда не генерирует сообщение об ошибке в ходе выполнения разложения Холецкого квадратной матрицы х. Если верхняя треугольная часть и диагональ х задают положительно определенную матрицу, то р = 0, a R совпадает с вышеописанным случаем, иначе р — положительное целое число, a R — верхняя треугольная матрица порядка q = р - 1, такая что R' *R = X (1 :q, l : q ) . Пример: >> c = c h o l ( p a s c a l ( 4 ) ) с = 1 1 1 1 Положительно определенной называется действительная симметрическая матрица, все собственные значения которой положительны. Поскольку используется только верхний треугольник матрицы X, матрица X не обязательно должна быть симметрической. Квадратная матрица с комплексными элементами, комплексно сопряженная матрица которой может быть получена транспонированием, т. е. равна транспонированной матрице (А* = А'). 177
Глава 4. Операции с векторами и матрицами 0 0 0
1 0 0
2 1 0
3 3 1
4 . 4 . 1 0 . Обращение матриц — функции inv, pinv Обращение матриц — одна из наиболее распространенных операций матричного анализа. Обратной называют матрицу, получаемую в результате деления единичной матрицы Е на исходную матрицу х. Таким образом, х ' = Е/Х. Следующие функции обеспечивают реализацию данной операции: • inv(x) — возвращает матрицу, обратную квадратной матрице х. Предупреждающее сообщение выдается, если х плохо масштабирована или близка к вырожденной. Пример: >> inv (rand(4, 4) ) ans = 2.2631 -2 .3495 -0.4696 -0.6631 -0.7620 1 .2122 1.7041 -1.2146 -2.0408 1. 4228 1.5538 1.3730 1 .3075 -0 .0183 -2.5483 0.6344 На практике вычисление явной обратной матрицы не так уж необходимо. Чаще операцию обращения применяют при решении системы линейных уравнений вида Ах=Ь. Один из путей решения этой системы — вычисление х = inv (А) *ь. Но лучшим с точки зрения минимизации времени расчета и повышения точности вычислений является использование оператора матричного деления х = А\Ь. Эта операция использует метод исключения Гаусса без явного формирования обратной матрицы. • в = pinv (A) — возвращает матрицу, псевдообратную матрице А (псевдообращение матрицы по Муру—Пенроузу). Результатом псевдообращения матрицы по Муру—Пенроузу является матрица в того же размера, что и А', и удовлетворяющая условиям А*В*А = А И В*А*В = в. Вычисление основано на использовании функции svd(A) и приравнивании к нулю всех сингулярных чисел, меньших величины t o l ; • в = pinv (A, t o l ) — возвращает псевдообратную матрицу и отменяет заданный по умолчанию порог, равный max (size (A) ) *norm (A) *eps. Пример: >> p i n v ( r a n d ( 4 , 3 ) ) ans — -1 .3907 -C .0485 1 .8640 -0 .2493 1 .1636 -0 .8775 -0 .0034 0. 6605 2 .0906 -0 .5921 -0 .2749 -0 .5987 4 . 4 . 1 1 . LU- и QR-разложение Так называемые LU- и QR-разложения реализуются следующими матричными функциями. Функция /м выражает любую квадратную матрицу 4 х как произведе4
178
В MATLAB 6 аргументом (входным аргументом) функции lu может быть и полная прямоугольная матрица.
4.4. Матричные операции линейной
алгебры
ние двух треугольных матриц, одна из которых (возможно, с перестановками) — нижняя треугольная матрица, а другая — верхняя треугольная матрица. Иногда эту операцию называют LR-разложением. Для выполнения этой операции служит следующая функция: • [L,u] = lu(X) — возвращает верхнюю треугольную матрицу и и психологическую нижнюю матрицу L (TO есть произведение нижней треугольной матрицы и матрицы перестановок), так что х = L*u; • [L,U,P] = lu(X) — возвращает верхнюю треугольную матрицу и, нижнюю треугольную матрицу L и сопряженную (эрмитову) матрицу матрицы перестановок р, так что L*u = Р* х; • lu (X) — вызванная с одним выходным параметром, функция возвращает результат из подпрограмм DGETRF (для действительных матриц) или ZGETRF (для комплексных) известного пакета программ линейной алгебры LAPACK. • lu(X, thresh) — где t h r e s h в диапазоне [0... 1], управляет центрированием в разреженных матрицах(см. урок 12). Отдельная форма предыдущего случая. Центрирование происходит, если элемент столбца на диагонали меньше, чем произведение t h r e s h и любого поддиагонального элемента. Thresh = 1 — значение по умолчанию. Thresh = 0 задает центрирование по диагонали. Если матрица неразреженная, выводится сообщение об ошибке. Пример: »
f=[3,5,4;12,7,5;34,65,23]
3 5 4 12 7 5 34 65 23 > [d,h]=lu(f) d = 0.0882 0.0461 1.0000 0.3529 1.00000 1. 000000 h — 11 —
65.0000 23 .0000 34:.0000 0 -3. 1176 -15.9412 0 0 2. 1144 >> сi*h ans = 4. 0000 3.13000 5. 0000 12 .0000 7 _0000 5. 0000 34 .0000 65 .0000 23 .0000
qr-функция выполняет QR-разложение матрицы. Эта операция полезна для квадратных и треугольных матриц. Она выполняет QR-разложение, вычисляя произведение унитарной матрицы и верхней треугольной матрицы. Функция используется в следующих формах: • [Q,R] = qr(X) — вычисляет верхнюю треугольную матрицу R того же размера, как и у х, и унитарную матрицу Q, так что х = Q*R;
179
Глава 4. Операции с векторами и матрицами [Q,R,E] = qr(X) — вычисляет матрицу перестановок Е, верхнюю треугольную матрицу R с убывающими по модулю диагональными элементами и унитарную матрицу Q, так что х*Е = Q*R. Матрица перестановок Е выбрана так, что a b s ( d i a g (R) ) уменьшается; [Q,R] = q r ( x , 0 ) и [Q,R,E] = q r ( x , O ) — вычисляют экономное разложение, в котором Е — вектор перестановок, так что Q*R = х ( : , Е). Матрица Е выбрана так, что a b s ( d i a g (R) ) уменьшается; А = q r (X) — возвращает результат из LAPACK. Пример: >> C=rand(5 ,4) Q
=
0.5028 0.8381 0.0196 0.7095 0.6813 0.4289 0.3046 0.3795 0.1897 0.8318 » [Q,R]=qr (C) Q = -0.5922 -0.1114 -0.0139 -0.9278 -0.4814 -0.1173 -0.2681 -0.1525 -0.5877 0.2997 R = -0.7072 -1.4152 0 -0.7541 0 0 0 0 0 0
0. 1934 0. 6822 0. 3028 0. 5417 0. 1509
0. 5197 -0 .0011 0. 0699 -0 .8268 -0 .2036
0.6979 0.3784 0.8600 0.8537 0.5936
0.0743 -0.3448 0.5940 0.2632 -0.6734
-0.5037 -13.7274
-cJ.3577 0 0
-0 .6011 0. 1420 0. 6299 -0 .3898 0. 2643
-1.4103 -0.4819 -0.4043 0.2573 0
[Q,R] = q r d e l e t e (Q,R, j ) — изменяет Q и R таким образом, чтобы пересчитать QR-разложение матрицы А для случая, когда в ней удалену-й столбец (А ( : , j ) = [ ] ). Входные значения Q и R представляют QR-разложение матрицы А как результат действия [Q,R] = q r (A). Аргумент j определяет столбец, который должен быть удален из матрицы А. Примеры: C=rand(3 ,3) С =
0 .0164 0.0576 0. 7176 0. 1901 0.3676 0. 6927 0. 5869 0.6315 0. 0841 [Q ,R]=qr (C) Q =
-0. 0265 -0 .3080 -0. 9510 R
-0.9700 0.2378 -0.0500
=
_ 0.6171 0 0 180
-0.2416 -0.9212 0.3051 -0.7153 -0.1599 0
-0.3123 -0.7858 -0.5356
4.4. Матричные операции линейной
алгебры
=qrdelete(Q,R,2) Ql = -0.0265 -0.3080 -0.9510 Rl = -0.6171 0 0
0. 7459 0. 6272 -0 .2239
0. 6655 -0 .7153 0. 2131
-0 .3123 0. 9510
с
• [Q,R] = q r i n s e r t (Q, R, j , x) — изменяет Q и R таким образом, чтобы пересчитать разложение матрицы А ДЛЯ случая, когда в матрице А перед у'-м столбцом вставлен столбец х. Входные значения Q и R представляют QR-разложение матрицы А как результат действия [Q,R]= q r ( A ) . Аргумент х — вектор-столбец, который нужно вставить в матрицу А. Аргумент j определяет столбец, перед которым будет вставлен вектор х. Примеры: >> C=rand (3,3) 0.1210 0. 8928 0.8656 0. 2731 0.2324 0.4508 0. 2548 0.8049 0.7159 » [Q,R]=qr(C) Q = -0.1416 0. 9835 0.1126 -0.5275 0. 0213 -0.8493 -0.8377 -0 .1797 0.5157 R = -0.8546 -с.4839 -0.9194 0 0. 8381 0.7116 0.3152 0 0 » x=[0.5, -0 .3,0.2] ;[Q2,R2]=qrinsert(Q,R,2,x' Q2 = -0 . 1416 0. 7995 -0.5838 -0.5275 -с.5600 -0.6389 -0.8377 0. 2174 0.5010 R2 = -0.8546 -0 .0801 -0.4839 -0.9194 0 0. 6112 0.6163 0.7369 0 -0.5681 -0.2505 0 4 . 4 . 1 2 . Вычисление собственных значений и сингулярных чисел Во многих областях математики и прикладных наук большое значение имеют средства для вычисления собственных значений (собственных чисел, характеристических чисел, решений векового уравнения) матриц, принадлежащих им векторов и сингулярных чисел. В новой версии MATLAB собственные вектора нормализуются иначе, чем в предыдущих. Основной критерий: либо VV = I, либо VBV = I, где V — собственный вектор, I — единичная матрица. Поэтому результаты вычислений в новой версии, как правило, отличаются. Ниже дан список средств решения векового уравнения, реализованных в системе MATLAB. 181
Глава 4. Операции с векторами и матрицами Несимметрические матрицы могут быть плохо обусловлены при вычислении их собственных значений. Малые изменения элементов матрицы, такие как ошибки округления, могут вызвать большие изменения в собственных значениях. Масштабирование, хотя и не превращает их в симметрические, значительно повышает стабильность собственных значений. Масштабирование — это попытка перевести каждую плохую обусловленность собственных векторов матрицы в диагональное масштабирование. Однако масштабирование обычно не может преобразовать несимметрическую матрицу в симметрическую, а только пытается сделать (векторную) норму каждой строки равной норме соответствующего столбца. Масштабирование значительно повышает стабильность собственных значений. • [D,B] = balance (A) — возвращает диагональную матрицу D, элементы которой являются степенями основания 2, и масштабированную матрицу в, такую, что в = D\A*D, а норма каждого ряда масштабированной матрицы приближается к норме столбца с тем же номером; • в = balance (А) — возвращает масштабированную матрицу в. Пример использования функции balance: » A=[l 1000 1000С ;0.0001 1 1000;0.000001 0.0001 1] А = 1.Ое+004 J 0.0001 0.1000 1.0000 0.0000 0.0001 0.1000 0.0000 0.0000 0.0001 >> [F,G]=balance(A) F = 1.Ое+004 i 0 3.2768 0 0 0.00320 0 0 0.0000 G = 1.0000 0 .9766 0 .0095 0.1024 1 .0000 0 .9766 1.0486 0 .1024 1 .0000 Величина, связывающая погрешность вычисления собственных значений с погрешностью исходных данных, называется числом обусловленности (собственных значений) матрицы и вычисляется следующим образом: cond(V) = norm(V)*norm(inv(V)) где [V,D]=eig(A).5 • eig (A) — возвращает вектор собственных значений квадратной полной или симметрической разреженной матрицы А, обычно после автоматического масштабирования, но для больших разреженных матриц (в терминологии MATLAB — это просто полные матрицы со сравнительно небольшим числом нулей), а также во всех случаях, где помимо собственных значений необходимо получать и собственные вектора разреженной матрицы, вместо нее рекомендовано использовать e i g s (A); В MATLAB 6.* значительно повышена точность оценки числа обусловленности в функции condest, не требующей вычисления eig. 182
4.4. Матричные операции линейной
алгебры
• eig(A,B) - возвращает вектор обобщенных собственных значений квадратных матриц А Й В ; • [v,D] = eig(A,B) — вычисляет диагональную матрицу обобщенных собственных значений D и матрицу V, столбцы которой являются соответствующими собственными векторами (правыми собственными векторами), таким образом, что A v = в v D; • [v, D] = eig(A) — вычисляет диагональную матрицу собственных значений D матрицы А и матрицу v, столбцы которой являются соответствующими собственными векторами (правыми собственными векторами) , таким образом что A v = v D. Нужно использовать [w, D]=eig (A') ; w = W , чтобы вычислить левые собственные вектора, которые соответствуют уравнению w*A = D*w. • [v,D] = eig(A, 'nobalance') — находит собственные векторы и собственные значения без предварительного масштабирования. Иногда это улучшает обусловленность входной матрицы, обеспечивая большую точность вычисления собственных векторов для необычно масштабированных матриц; • eig(A,B, ' c h o l ' ) — возвращает вектор, содержащий обобщенные собственные значения, используя разложение матрицы в по методу Холецкого; если А - симметрическая квадратная матрица и в — симметрическая положительно определенная квадратная матрица, то eig(A,B) по умолчанию работает точно так же; • eig(A,B, ' q z ' ) — не требует, чтобы матрицы были симметрическими и возвращает вектор, содержащий обобщенные собственные значения, используя QZ-алгоритм; при явном указании этого флага QZ-алгоритм используется вместо алгоритма Холецкого даже для симметрической матрицы и симметрической положительно определенной матрицы в, так как может давать более стабильные значения, чем предыдущий метод. Для несимметрических матриц в MATLAB 6 всегда используется QZ-алгоритм и параметр ' c h o l ' или ' q z ' игнорируется; • [V, D] = eig(A, в) — возвращает диагональную матрицу обобщенных собственных значений D и матрицу V, чьи столбцы являются соответствующими собственными векторами, так чтобы A*v = B*V*D. Пример: » В = [3 -12 -.6 2 *eps;-2 48 --1 -eps;5 -.5 .3 i;1
в=
3.0000 -12.0000 -2.0000 48.0000 -0.0000 0.0000 -0.5000 -0.5000 » [G,H]=eig(B) G = -0.2548 0.7420 0.9670 0.0193 -0.0015 -0.6181 -0.0075 -0.2588
-0.6000 -1.0000 -1.0000 0.3000
0.0000 -0.0000 10.0000 1.0000
-0.4842 0. 1956 -0.0388 0. 0276 -0.8575 0. 9780 -0.1694 -0 .0676
H =
183
Глава 4. Операции с векторами и матрицами 48. 5287 0 0 0
0 3. 1873 0 0
0 0
0.9750 0
0 0 0 -1
.6909
• svd(X) — возвращает вектор сингулярных чисел. Команда svd выполняет сингулярное разложение матрицы х; • [и, S,V] = svd(X) — вычисляет диагональную матрицу S тех же размеров, которые имеет матрица х с неотрицательными диагональными элементами в порядке их убывания, и унитарные матрицы и и V, так что х = u*s*V; • [u,s,V] = svd(x,0) — выполняет экономичное сингулярное разложение. Пример: >> F=[23 12;3 5;6 0] F
23 12 5 3 6 0 >> [к,l,m]=svd(F) = -0.0034 0 .9628 0 .1846 0.7385 -0.6743 0 .1974 1 = 26.9448 0 0 4.1202 0 0 m = -0.4630 0. 8863 0. 4630 0.8863
к
-0 .2702 0. 6485 0. 711.6
4.4.13. Приведение матриц к форме Шура и Хессенберга Ниже приводятся функции, обеспечивающие приведение матриц к специальным формам Шура и Хессенберга: • cdf2rdf — преобразование комплексной формы Шура в действительную. Если система [v,D]= eig(X) имеет комплексные собственные значения, объединенные в комплексно-сопряженные пары, то функция cdf2rdf преобразует систему таким образом, что матрица D принимает вещественный диагональный вид с 2 х 2 вещественными блоками, заменяющими первоначальные комплексные пары. Конкретные столбцы матрицы v больше не являются собственными векторами, но каждая пара векторов связана с блоком размера 2 х 2 в матрице D. Пример: » А
А=[2 3 6;-4 =
•
2
3
6
- 4
0
3
1 5 - 2 » [S,D]=eig(A)
184
0 3;1 5 -2] •
'
;
••'••••
.
;
4.4. Матричные операции линейной алгебры Q
0.7081 + 0.3296i 0.7081 - 0.3296i -0.3355 -0.3456 + 0.3688i -0.3456 - 0.3688i -0.5721 0.0837 + 0 . 3 5 7 H 0.0837 - 0 . 3 5 7 H 0.7484 D = 3.1351 + 4 . 0 6 0 3 i 0 0 0 3.1351 - 4.0603Ю 0 0 -6.2702 » [S,D]=cdf2rdf(S,D) S = 0.7081 0.3296 -0.3355 - 0 . 3 4 5 6 0.3688 -0.5721 0.0837 0.3571 0.7484 D= 3.1351 4.0603 О -4.0603 3.1351 О О 0 -6.2702 Функция qz обеспечивает приведение пары матриц к обобщенной форме Шура: • [АА, BB,Q, Z, V] = qz(A,B) — возвращает, возможно, комплексные верхние треугольные матрицы АА и вв и соответствующие матрицы приведения Q и Z, такие, что Q*A*z = АА и Q*B*Z = вв. Функция также возвращает матрицу обобщенных собственных векторов V. Обобщенные собственные значения могут быть найдены из следующего условия: A*V*diag(BB) = B*V*diag(AA) Пример: » А= [ 1 2 3 ; 6 3 0 ; 4 7 0 ] ; В= [ 1 1 1; 0 7 4 ; 9 4 1 ] ; >> [ a a , b b , f , g , h ] = q z ( А , В ) аа = -2.9395 0.4775 0.8751 0 9.5462 3.5985 0 0 3.2073 bb = 5.5356 3.5345 -2.2935 0 8.4826 6.7128 0 0 0.7667 f -0.0367 0.7327 -0.6796 -0.1052 -0.6791 -0.7265 -0.9938 0.0448 0.1020 g = -0.7023 -0.7050 -0.0989 0.6867 -0.6343 -0.3552 -0.1877 0.3174 -0.9295 h
-1.0000 0.9778 -0.2673
-0.4874 -0.0561 -1.0000 0.6238 0.4340 -1.0000 185
Глава 4. Операции с векторами и матрицами Функция qz (А, в , ' r e a l ' ) при заданных матрицах д и в возвращает действительные треугольную матрицу вв и квазитреугольную матрицу АА с 2 х 2 диагональными блоками, соответствующими парам сопряженных комплексных значений. Так как матрица АА квазитреугольная, то необходимо решить проблемы обобщения 2 x 2 для получения подлинных собственных значений. Пример: » А=[1 2 3;6 3 0;4 7 0 ] ; В = [ 1 1 1;0 7 4; 9 4 1 ] ; >> [ a a , b b , f , g , h ] = q z ( A , B , ' r e a l ' ) aa = -2.9395 0.4775 0.8751 9.5462 0 3.5985 3.2073 0 0 bb = 5.5356 3.5345 -2.2935 8.4826 6.7128 0 0.7667 0 0 f = -0.0367 0.7327 -0.6796 -0.1052 -0.6791 -0.7265 0.1020 -0.9938 0.0448 -0.7023 0.6867 -0.1877 h = -1.0000 0.9778 -0.2673
-0.7050 -0.6343 0.3174
-0.0989 -0.3552 -0.9295
-0.4874 -1.0000 0.4340
-0.0561 0.6238 -1.0000
• т = s c h u r (A) — возвращает матрицу Шура т; • [и, Т] = s c h u r (A) — возвращает матрицу Шура т и унитарную матрицу и, такие, что A = U T U ' M U ' U = e y e ( s i z e ( A ) ) ( е д и н и ч н а я матрица размера А) ; • 6 [ и , т ] = r s f 2 c s f ( u , t ) — преобразование результатов предыдущей функции (действительной формы Шура) в комплексную форму Шура, может использоваться только после вызова [u, t ] = s c h u r (A). Комплексная форма Шура — это верхняя треугольная матрица со всеми собственными значениями на диагонали. Действительная форма Шура имеет действительные собственные значения на диагонали, а комплексные собственные значения содержатся в 2 х 2 блоках, расположенных вдоль диагонали. И входные, и выходные матрицы и, и и T , t представляют собой соответственно унитарные матрицы и матрицы Шура исходной матрицы А, которая удовлетворяет условиям А = UTU' и U' U = e y e ( s i z e ( A ) ) ; Примеры: А= 6
186
В MATLAB 6.* в функции schur, если ее входной аргумент — действительная матрица, может использоваться новый параметр 'complex' (schur, 'complex' ), позволяющий получить комплексную форму Шура без использования функции преобразования r s f 2 c s f .
4.4. Матричные операции линейной алгебры
-3 1
0
- 1 2
-
5
-4
1
3 0
>>
[u,z] = schur(A)
u = -0.4883
-0.6416
-0.5757
0.1362
-0:5289
0.7465
-0.3986
-0.0646
-0.1403
-0.1528
0.0583
-0.9765
-0.6798
-0.0884
0.7115
0.1540
t = 1.2036 1.9478
0 0 >
[U,T]
-0.8023 -2.7670 2.3183 1.5080 0 -0.6449 0 0.0000 = rsf2csf ( u , t )
и -=0 . 3 2 2 6
- 0.36311 0.5771 -• 0.39331 -0.0724 - 0 .1044i 0.0682 -• 0 . 5 0 5 6 i
0.4318 + 0.2027 0.1183 + 0.4532 +
-0.0842 2.6513 -2.9694 -5.8771
0.47711 0.555H 0.11361 0.0657i
-0 .57570. 1362 -0 .3986-0 .0646 0 . 0583 -0 .9765 0 . 7115 0. 1540
T =
1.7610 + 2.2536i 0.5003 - 1.289711.1168 + 0.59671 7196 + 0. 06261 0.2383 + 1.1215i -0.4335 + 1.9717i 1.7610 - 2.25361 -0.6449 -2.9694 0 0 -5.8771 0 • н = h e s s (A) — находит н, верхнюю форму Хессенберга для матрицы А; • [Р,н] = h e s s (А) — возвращает матрицу Хессенберга н и унитарную матрицу преобразований р, такую, что А = Р*Н*Р' И Р ' * Р = e y e ( s i z e ( A ) ) . Элементы матрицы Хессенберга, расположенные ниже первой поддиагонали, равны нулю. Если матрица симметричная или эрмитова, то матрица Хессенберга вырождается в трехдиагональную. Эта матрица имеет те же собственные значения, что и оригинал, но для их вычисления необходимо меньшее количество операций. Пример: f=magic (4)
»
2 11 7 14
16 5 9 4 »
3 10 6 15
13 8 12 1
hess(f)
ans = 16. -11 0
0
0000 .0454
-8 . 0577 24 . 2131 - 1 3 .5058 0
8958 -6! . 1984 -4 . 3 8 9 4 3 .2744 8.
6 . 1595 2 . 1241 -7 .8918 -;, . 8 2 3 7
187
Глава 5. Операции с массивами специального вида 5 . 1 . Разреженные матрицы 5.1.1. Роль и назначение разреженных матриц Матрицы без нулевых значений обычно называются полными матрицами. Матрицы, содержащие некоторое число элементов с нулевыми значениями, в MATLAB называются разреженными матрицами. Строго говоря, разреженными называют те матрицы, при работе с которыми используются численные методы, учитывающие упрощение арифметических операций с нулевыми элементами (например, получение нуля при умножении на нуль или пропуск операций сложения и вычитания при использовании этих операций с нулевыми элементами матриц). Применение таких операций уменьшает время, затрачиваемое на обработку матриц и вычисления с ними. Разреженные матрицы широко используются при решении прикладных задач. Например, моделирование электронных и электротехнических линейных цепей часто приводит к появлению в матричном описании топологии схем сильно разреженных матриц. Для таких матриц создан ряд функций, обеспечивающих эффективную работу с ними и устраняющих тривиальные операции с нулевыми элементами матриц. Это существенно повышает скорость и эффективность выполнения матричных операций и способствует разработке расширений системы MATLAB, предназначенных для моделирования различных систем и устройств.
5.1.2. Элементарные разреженные матрицы Вначале рассмотрим элементарные разреженные матрицы и относящиеся к ним функции системы MATLAB. Функция spdiags расширяет возможности встроенной функции diag. Возможны четыре операции, различающиеся числом входных аргументов: • [B,d] = spdiags (А) — извлекает все ненулевые диагонали из матрицы А размера m х п. В — матрица размера min (m, n) x p, столбцы которой р являются ненулевыми диагоналями A. d — вектор длины р, целочисленные элементы которого точно определяют номера диагоналей матрицы А (положительные номера — выше главной диагонали, отрицательные — ниже); • в = spdiags (A, d) — извлекает диагонали, определенные вектором d; • А = spdiags (B,d,A) — заменяет столбцами матрицы в диагонали матрицы А, определенные вектором d; • А = spdiags (В, d,m, n) — создает разреженную матрицу размера m x п, размещая соответствующие столбцы матрицы в вдоль диагоналей, определяемых вектором d. Пример: » 32 »
А = [ 1 3 4 6 8 0 0 ; 7 8 0 7 0 0 5 ; 0
9
d=[l
>> В =
188
6]; 3
2
2]
spdiags(A,d)
0 0 0 0 0 9 8 ;
7 6 5 4
5.1. Разреженные матрицы
в= 3 0 0 0
6 0 9 6
4 7 0 9
4 7 0 9
• s = s p e y e (m, n) — возвращает разреженную матрицу размера m x n с единицами на главной диагонали и нулевыми недиагональными элементами; • S = speye (п) — равносильна speye (п, п ) . Пример: » S = speye(4) S = 1 (1, 1) (2, 2) 1 (3, 3) 1 (4, 4) 1. Матрица R = sprand (S) имеет ту же структуру, что и разреженная матрица S, но ее элементы распределены по равномерному закону: • R = sprand (m, n, density) — возвращает случайную разреженную матрицу размера m x п, которая имеет приблизительно d e n s i t y x m x n равномерно распределенных ненулевых элементов (0 < d e n s i t y < 1). • R = sprand (m, n, density, re) — в дополнение к этому имеет в числе параметров число обусловленности по отношению к операции обращения, приблизительно равное гс. Если вектор гс имеет длину l r ( l r < min (m, n)), то матрица R имеет гс в качестве своих первых l r сингулярных чисел, все другие значения равны нулю. В этом случае матрица R генерируется с помощью матриц случайных плоских вращений, которые применяются к диагональной матрице с заданными сингулярными числами. Такие матрицы играют важную роль при анализе алгебраических и топологических структур. Пример: >> d = s p r a n d ( 4 , 3 , 0 . 6 ) d =
(1,1) (2,1) (4,1) (3,3) (4,3)
0 .6614 0 .2844 0 .0648 0 .4692 0 .9883
R = sprandn(S) — возвращает матрицу со структурой разреженной матрицы s, но с элементами, распределенными по нормальному закону с нулевым средним и дисперсией, равной 1; R = sprandn (m, n, density) — возвращает случайную разреженную матрицу размера m x п, имеющую примерно d e n s i t y x m x n нормально распределенных ненулевых элементов (0 < d e n s i t y < 1); R = sprandn (m, n, d e n s i t y , re) — в дополнение к этому имеет своим параметром число обусловленности по отношению к операции обращения, приблизительно равное гс. Если вектор гс имеет длину l r ( l r < min (m, n)), то матрица R имеет гс в качестве своих первых l r сингулярных чисел, все другие значения равны нулю. В этом случае матрица R генериру189
Глава 5. Операции с массивами специального вида ется с помощью матриц случайных плоских вращений, которые применяются к диагональной матрице с заданными сингулярными числами. Пример: >>
f=sprandn(3,4,0.3) (2, 1) (2, 2) (2, 3) (2. 4)
-0 .4326 -1 .6656 0. 1253 0. 2877
sprandsym(S) — возвращает случайную симметрическую матрицу, нижние поддиагонали и главная диагональ которой имеют ту же структуру, что и матрица S. Элементы результирующей матрицы распределены по нормальному закону со средним, равным 0, и дисперсией, равной 1; sprandsym(n, density) — возвращает симметрическую случайную разреженную матрицу размера n x п, которая имеет приблизительно d e n s i t y п х п ненулевых элементов; каждый элемент сформирован в виде суммы нормально распределенных случайных чисел (0 < d e n s i t y < 1); R = sprandsym(n, density, re) — возвращает матрицу с числом обусловленности по отношению к операции обращения, равным гс. Закон распределения не является равномерным; значения случайных элементов симметричны относительно 0 и находятся в пределах [—1 1]. Если гс — вектор размера п, то матрица R имеет собственные значения, равные элементам вектора гс. Таким образом, если элементы вектора гс положительны, то матрица R является положительно определенной. В любом случае матрица R генерируется с помощью случайного вращения по Якоби диагональных матриц с заданными собственными значениями и числом обусловленности. Такие матрицы играют важную роль при анализе алгебраических и топологических структур; R = sprandsym(n, d e n s i t y , r e , kind) — возвращает положительно определенную матрицу. Аргумент kind может быть следующим: 0 kind=l — матрица R генерируется из положительно определенной диагональной матрицы с помощью случайных вращений Якоби. R имеет точно заданное число обусловленности; 0 kind=2 — матрица R генерируется как смещенная сумма матриц внешних произведений. Число обусловленности матрицы приблизительно, но структура более компактна (по сравнению с предыдущим случаем); 0 kind=3 — генерируется матрица R той же структуры, что и S, а число обусловленности приближенно равно 1/гс. Значение d e n s i t y игнорируется. Пример: >> a = s p r a n d s y m ( 4 , 0 ,3,0.8) а = (1,1) (3,1) (2,2) (1,3) (3,3) (4, 4)
190
0. 9818 0. 0 4 68 -0 .9283 0. 0468 0. 8800 -0 .8000
5.1. Разреженные матрицы 5.1.3. Преобразование разреженных матриц Теперь рассмотрим функции преобразования разреженных матриц. Они представлены ниже: • k = find(X) — возвращает индексы вектора х для его ненулевых элементов. Если таких элементов нет, то find возвращает пустой вектор. f ind(X > 100) возвращает индексы элементов вектора с X > 100; • [i/j] = find(X) —возвращает индексы строки и столбца для ненулевого элемента матрицы х; • [ i , j / v ] = find(X) — возвращает вектор столбец v ненулевых элементов матрицы X и индексы строки i и столбца j . Вместо X можно вставить (X, операция отношения, параметр), и тогда индексы и вектор-столбец будут отражать элементы матрицы, удовлетворяющие данному отношение. Единственное исключение find(x ~= 0). Индексы те же, что и при исполнении find (X), но вектор v содержит только единицы. Пример: >> q = s p r a n d ( 3 , 4 , 0 . 6 ) Ч = (1, 1) 0. 7266 0. 4120 (1, 2) 0. 2679 (3, 2) 0. 4399 (3, 3! 0. 7446 (2, 4) 0. 9334 (3, 4) > [i ,j ]=find(q) 1 1 3 3 2 3
2 2 3 4 4
f u l l ( S ) — преобразует разреженную матрицу s в полную; если исходная матрица s была полной, то f u l l (S) возвращает s. Пусть х — матрица размера m х n c n z = nnz (X) ненулевыми элементами. Тогда f u l l (X) требует такой объем памяти, чтобы хранить m х n действительных чисел, в то время как sparse (X) требует пространство для хранения лишь nz действительных чисел и (п х z + п) целых чисел — индексов. Большинству компьютеров для хранения действительного числа требуется вдвое больше пространства, чем для целого. Для таких компьютеров sparse (X) требует меньше пространства, чем full(X), если плотность nnz/prod (size (X) )< 191
Глава 5. Операции с массивами специального
вида
2/3. Выполнение операций над разреженными матрицами, однако, требует больше затрат времени, чем над полными, поэтому для эффективной работы с разреженными матрицами плотность расположения ненулевых элементов должна быть много меньше 2/3. Примеры: >>
q=sprand(3,4,0.6)
q = (1 ,1) 0.0129 0.3840 (1 ,2) (2,2) 0.6831 (3,3) 0.0928 » d=full (q) d = 0.3840 0. 0129 0 0.6831 0 0.
0 0 0.09280
0 0
• S = s p a r s e (A) — преобразует полную матрицу в разреженную, удаляя нулевые элементы. Если матрица S уже разреженная, то s p a r s e (S) возвращает S. Функция s p a r s e — это встроенная функция, которая формирует матрицы в соответствии с правилами записи разреженных матриц, принятыми в системе MATLAB; • S = s p a r s e ( i , j , s, m, n, nzmax) — использует векторы i , j и s для того, чтобы генерировать разреженную матрицу размера m x n с ненулевыми элементами, количество которых не превышает nzmax. Векторы i и j задают позиции элементов и являются целочисленными, а вектор s определяет числовое значение элемента матрицы, которое может быть действительным или комплексным. Все элементы вектора s, равные нулю, игнорируются вместе с соответствующими значениями i и j . Векторы i , j и s должны быть одной и той же длины; • S = s p a r s e ( i , j , s, m, n) —использует nzmax = l e n g t h ( s ) ; • S = s p a r s e ( i , j , s) — использует m = max(i) и г = max (j ). Максимумы вычисляются раньше, чем нулевые строки столбца S будут удалены; • S = s p a r s e (m,n) равносильно s p a r s e ([ ] , [ ] , [ ] ,m, n, 0). Эта команда генерирует предельную разреженную матрицу, где m x n элементов нулевые. Все встроенные в MATLAB арифметические, логические и индексные операции могут быть применены как к полным матрицам, так и разреженным. Операции над разреженными матрицами возвращают разреженные матрицы, а операции над полными матрицами возвращают полные матрицы. В большинстве случаев операции над смешанными матрицами возвращают полные матрицы. Исключение составляют случаи, когда результат смешанной операции явно сохраняет разреженный тип. Так бывает при поэлементном умножении массивов A . * s , где s — разреженный массив. Пример: >> i = [ 2 , 4 , 3 ] ; j = [ l , 3 , 8 ] ; s = [ 4 , 5 + 5 i , 9 ] ; t t =
192
(2,1)
4.0000
(4,3)
5.0000+ 5.0000i
(3,8)
9.0000
= sparse (i,j,s,5,8)
5.1. Разреженные
матрицы
Функция s p c o n v e r t используется для создания разреженных матриц из простых разреженных форматов, легко производимых вне средств MATLAB: • S = s p c o n v e r t (D) — преобразует матрицу D со строками, содержащими [ i , j , r ] или [ i , j , r , s ] , где i — индекс ряда, j — индекс строки, г — численное значение, в соответствующую разреженную матрицу. Матрица D может иметь nnz или rmz + 1 строк и три или четыре столбца. Три элемента в строке генерируют действительную матрицу, четыре элемента в строке генерируют комплексную матрицу (s преобразуется во мнимую часть значения элемента). Последняя строка массива D типа [m n 0] или [т п 0 0] может быть использована для определения s i z e ( S ) . Команда s p c o n v e r t может быть использована только после того, как матрица D загружена или из МАТ-файла, или из ASCII-файла при помощи команды load. Пример: load mydata.dat А - spconvert(mydata); 5.1.4. Работа с ненулевыми элементами разреженных
матриц
Поскольку разреженные матрицы содержат ненулевые элементы, то предусмотрен ряд функций для работы с ними: • nnz (х) — возвращает число ненулевых элементов матрицы х. Плотность разреженной матрицы определяется по формуле nnz (X) /numel (X). Пример: h = sparse(hilb(10)); >> nnz(h) ans = 100 • n o n z e r o s (A) — возвращает полный вектор-столбец ненулевых элементов матрицы А, выбирая их последовательно по столбцам. Эта функция дает только выход s, но не значения i и j из аналогичного выражения [ i , j , s ] = f i n d ( A ) . Вообще l e n g t h ( s ) = n n z ( A ) J n z m a x ( A ) J p r o d ( s i z e ( A ) ) . Пример: >> g=nonzeros(sparse(hankel([1, 2 , 8 ] ) ) ) g = 1 2
nzmax(S) — возвращает количество ячеек памяти для ненулевых элементов. Обычно функции nnz(S) и nzmax(S) дают один и тот же результат. Но если S создавалась в результате операции над разреженными матрицами, такой, как умножение или Ш-разложение, может быть выделено больше элементов памяти, чем требуется, и nzmax(S) отражает это. Если S — разреженная матрица, то nzmax(S) — максимальное количество ячеек для хранения ненулевых элементов. Если s — полная матрица, то nzmax(S)=numel(S). 193
Глава 5. Операции с массивами специального вида Пример: >> q=nzmax(sparse(hankel([ 1,7,23]))) q = б
• s = s p a l l o c (m, n, nzmax) — создает массив для разреженной матрицы S размера m x n с пространством для размещения nzmax ненулевых элементов. Затем матрица может быть заполнена по столбцам; • s p a l l o c (m, n, nzmax) — эквивалентна функции s p a r s e ([ ] , [ ] , [ ] , m,n,nzmax); Пример: >> S = s p a l l o c ( 5 , 4 , 5 ) ; • spfun — вычисление функции для ненулевых элементов. Функция spfun применяется выборочно только к ненулевым элементам разреженной матрицы, сохраняя при этом разреженность исходной матрицы; • f = spfun (@function, S) — вычисляет f u n c t i o n (S) для ненулевых элементов матрицы S. Имя f u n c t i o n — это имя m-файла или встроенной в ядро функции, f u n c t i o n должна работать с матричным аргументом S и вычислить функцию для каждого элемента матрицы s. Пример: >> S=spfun(@exp,sprand (4,5,0.4)) S = (2.2) 1.6864 (2.3) 2.4112 (3.3) 2.6638 (2.4) 1.1888 (3,4) 1.3119 (4.4) 2.4007 (3.5) 1.2870 • R = s p o n e s (S) — генерирует матрицу R той же разреженности, что и S, но заменяет на 1 все ненулевые элементы исходной матрицы. Пример: >> S = s p r a n d ( 3 , 2 , 0 . 3 ) 2— (3.1) 0.2987 (1.2) 0 . 1991 >> s p o n e s (S) ans = (3,1) 1
5.1.5. Функция spy визуализации разреженных матриц Визуализация разреженных матриц нередко позволяет выявить не только любопытные, но и полезные и поучительные свойства тех математических закономерностей, которые порождают такие матрицы или описываются последними. MATLAB имеет специальные средства для визуализации разреженных матриц, реализованные приведенными ниже командами: 194
5.1. Разреженные матрицы • spy (S) — графически отображает разреженность произвольной матрицы S; • spy (S,markersize) — графически отображает разреженность матрицы s, выводя маркеры в виде точек точно определенного размера markersize; • spy (S, 'LineSpec') — отображает разреженность матрицы в виде графика с точно определенным (с помощью параметра LineSpec) цветом линии и маркера. Параметр Linespec определяется так же, как параметр команды plot; • spy(S, ' LineSpec', markersize) — использует точно определенные тип, цвет и размер графического маркера. Обычно s — разреженная матрица, но допустимо использование и полной матрицы, когда расположение элементов, отличных от нуля, составляет график. Пример: » S = s p a r s e (sprandn (20,30,0.9)) ; spy (S, ' .г ' , 6) Построенный по этому примеру график показан на рис. 5.1. о 2 4 6 В 10 12 14 16 1В 20 0
5
~~
10
15 • :•.: ~20
25
•
П ю " ::
Рис. 5.1. Визуализация разреженной матрицы
5.1.6. Алгоритмы упорядочения Упорядочение — это еще одна характерная для разреженных матриц операция. Ее алгоритм реализуется несколькими функциями: • р = colmmd(S) —возвращает вектор упорядоченности столбцов разреженной матрицы s'. Для несимметрической матрицы s вектор упорядоченности столбцов р такой, что s (:, р) будет иметь более разреженные L и U в LU-разложении, чем S. Такое упорядочение автоматически применяется при выполнении операций обращения \ и деления /, а также при решении систем линейных уравнений с разреженными матрицами. Можно использовать команду spparms, чтобы изменить некоторые параметры, связанные с эвристикой в алгоритме colmmd; • j = colperm(S) — возвращает вектор перестановок j , такой что столбцы матрицы S (:, j) будут упорядочены по возрастанию числа ненулевых элементов. Эту функцию полезно иногда применять перед выполнением LU-разложения. Если S — симметрическая матрица, то j = colperm(S) 1
Функция colamd — более мощная и быстрая реализация colmmd. 195
Глава 5. Операции с массивами специального вида возвращает вектор перестановок j , такой, что и столбцы и строки s ( j , j ) упорядочены по возрастанию ненулевых элементов. Если матрица S положительно определенная, то иногда полезно применять эту функцию и перед выполнением разложения Холецкого. Пример: >> S = s p a r s e ( [ 2 , 3 , 1 , 4 , 2 ] , [ 1 , 3 , 2 , 3 , 2 ] , ans 0 4 0 0 >> t t = 4 >>
ans 0 0 0 0
— 5 7 0 0 =co
0 0 0 0 0 3 0 0 6 0 0 l p e r r r i(S)
5
1
full
[4,3,5,6,7],4,5);full(S)
с
2
(S ( : ,
3 t))
= 0
0
5
0
4
7
0
0
0
0
0
0
0 0 3 6
• p = dmperm(A) — возвращает вектор максимального соответствия р, такой, что если исходная матрица А имеет полный столбцовый ранг, то А(р, :) — квадратная матрица с ненулевой диагональю. Матрица А(р, :) называется декомпозицией Далмейджа—Мендельсона, или DM-декомпозицией. Если А — приводимая матрица 2 , линейная система Ах = b может быть решена приведением А к верхней блочной треугольной форме с неприводимым диагональным блоком. Решение может быть найдено методом обратной подстановки. • [ p , q , r ] = dmperm(A) — находит перестановку строк р и перестановку столбцов q квадратной матрицы А, такую, что A(p,q) — матрица в блоке верхней треугольной формы. Третий выходной аргумент г — целочисленный вектор, описывающий границы блоков. К-Й блок матрицы А (р, q) имеет индексы г (к) : г (к + 1 ) - 1. • [ p , q , r, s] = dmperm(A) — находит перестановки р и q и векторы индексов r n s , так что матрица А (р, q) оказывается в верхней треугольной форме. Блок имеет индексы (г (i) : r (i+1) - I , s (i) : s (i + 1) - 1 ) . В терминах теории графов диагональные блоки соответствуют сильным компонентам Холла графа смежности матрицы А. Примеры: » A=sparse([l,2,l,3,2], ans = 4 0 7 4 6 0 5 0 0 >> [ р , q, r ] = d m p e r m ( A ) 2
196
[3,2,1,1,1],
[7,6,4,5,4],3,3);full(A)
Квадратная матрица А называется приводимой, если она подобна клеточной матрице, квадратные элементы которой соответствуют индукции линейТюго оператора А в отдельные подпространства.
5.1. Разреженные матрицы р
1
—
2
3
q =
3 2 г = 1 2 >> f u l l ans = 0 0 6 0 0
1 3 (A
4
(p,q)
4 4 5
• symmmd (S) — возвращает вектор упорядоченности для симметричной положительно определенной матрицы S, так что s ( p , p ) будет иметь более разреженное разложение Холецкого, чем S. Иногда symmmd хорошо работает с симметрическими неопределенными матрицами. Такое упорядочение автоматически применяется при выполнении операций \ и /, а также при решении линейных систем с разреженными матрицами 3 . Можно использовать команду spparms, чтобы изменить некоторые опции и параметры, связанные с эвристикой в апгоритме. Алгоритм упорядочения для симметрических матриц основан на алгоритме упорядочения по разреженности столбцов. Фактически symmmd (S) только формирует матрицу к с такой структурой ненулевых элементов, что к ' * к имеет тот же график разреженности, что и S, и затем вызывает алгоритм упорядочения по разреженности столбцов для к. Пример: >> B=bucky;p=symmmd(В); >> R=B (p,p) ; >> subplot (1,2,1),spy(В);subplot(1,2,2), spy(R) На рис. 5.1 приводится пример применения функции symmmd к элементам разреженной матрицы.
20 40 nz=180
60
Рис. 5.2. Пример применения функции symmmd г = symrcm(S) — возвращает вектор упорядоченности для симметричной матрицы S и называется упорядочением Катхилла—Макки. Причем формируется такая перестановка г, что s (r, г) будет концентрировать ненулевые элементы вблизи диагонали. Это хорошее упорядочение как перед Ш-разФункция symamd работает значительно быстрее. 197
Глава 5. Операции с массивами специального вида ложением, так и перед разложением Холецкого. Упорядочение применимо как для симметрических, так и для несимметрических матриц. Для вещественной симметрической разреженной матрицы s (такой, что S = S1) собственные значения s ( r , r ) совпадают с собственными значениями s, но для вычисления e i g ( S ( r , r ) ) требуется меньше времени, чем для вычисления e i g (S). Пример: >> B=bucky;p=symrcm(В); » R=B(p,p); >> subplot (1,2,1) ,spy(В) ;subplot(1,2,2) ,spy(R) На рис. 5.3 приведен пример концентрации ненулевых элементов разреженной матрицы вблизи главной диагонали.
О••
20 40 nz= 160
Рис. 5.3. Пример применения функции symrcm
5.2. Применение разреженных матриц 5 . 2 . 1 . Смежные матрицы и графы Во многих приложениях математики используются графы. Графы можно определить как совокупность точек (узлов) со спецификацией соединений между ними. Графы можно экономно представлять с помощью разреженных смежных матрицы. Эти матрицы имеют в основном нулевые элементы, но часть последних имеет единичные значения и используются для факта соединения вершин графов, что и создает те или иные фигуры. Пример представления графа — фигуры ромба, имеющего 4 узла, с помощью смежной матрицы А представлен на рис. 5.4.
Рис. 5.4. Пример представления графа с помощью разреженной смежной матрицы 198
5.2. Применение разреженных
матриц
Полное описание графа требует кроме задания смежной матрицы указания списка ху координат узлов, например: А=[0
1 0 1; 1 0 1 0 ;
ху=[1
0 1 0 1 ;
1 0 1
0 ] 1 ;
2 ; 2 1; 3 3 ; 2 5]
Тогда с помощью графической функции gplot можно построить граф: gplot(А,ху) Узлы графа при этом будут построены по явно заданным координатам. 5.2.2. Пример построения фигуры bucky Аналогичным описанному способом можно строить довольно сложные фигуры. К примеру, рассмотренный ниже объект bucky описывает в виде графов молекулу С60, содержащую 60 атомов сферической конфигурации. Ее можно представить матрицей В и вектором v: »
[B,v]=bucky;
Вектор задает список xyz-координат для 60 точек единичной сферы. Задав в командном режиме команды: >> gplot(В,v) >> axis equal можно построить граф данной молекулы. Он представлен на рис. 5.5.
I Рис. 5.5. Пример построения графа фигуры bucky, представленной смежной матрицей В и вектором координат узлов v Граф фигуры bucky представляет собой сферическую поверхность, построенную из многоугольников. Она дает наглядное представление о структуре молекулы. 5 . 2 . 3 . Оцифровка узлов графа Иногда желательно построить граф, узлы которого оцифрованы. Это несложно сделать, используя конструкцию цикла for-end: 199
Глава 5. Операции с массивами специального вида » к = 1:30; >> g p l o t ( В ( к , к ) , v ) ; >> a x i s s q u a r e >> c f o r j = 1 : 3 0 , t e x t ( v ( j , 1 ) , v ( j , 2 ) ,
int2str(j));
end
Здесь задана оцифровка первых 30 узлов, что дает граф половины фигуры, представленной на рис. 5.5 — см. рис. 5.6. 5.2.4. Применение разреженных матриц в аэродинамике В описании и справке по системе MATLAB можно найти пример подобного описания для моделирования профиля воздушного потока, обтекающего крыло самолета (рис. 5.7). При решении этой задачи в NASA использовалось 4253 треугольные ячейки сетки, для описания которых потребовалась разреженная матрица, имеющая 28831 ненулевой элемент. При этом степень заполнения матрицы составляла всего 0.0016.
Рис. 5.6. Пример построения графа передней части фигуры bucky с оцифровкой узлов
Рис. 5.7. Представление графом воздушного потока, обтекающего крыло самолета
5.2.5. Визуализация разреженных матриц, возведенных в степень Команда >> spy(B) позволяет визуализировать матрицу В. Полученный с ее помощью вид матрицы уже был представлен на рис. 5.2 (слева). Любопытно просмотреть, как меняется вид разреженных матриц при математических операциях. Например, команда » spy(BA3) строит вид матрицы ВЛ3, представленный на рис. 5.8. Другая команда >> spy(B~5) 200
5.2. Применение разреженных
матриц
г"НУХ""'.А .8* : S 888' 8..8Ss. '* **•**•»• ' «* . . 8* *5st4. . ***** .•*•.*•*•• 8* *
•
8.'.
.:::.::' 8 X* .*.'..*.••'
* *.88.*8
эре • • •• . . . ••••• ..... •• • ... I •-••.*.• !."!t*. . *.*!s
SSS""
s*
8 ::.*:.*.. ••..*.*.
•*.*..*8888
Г
"••.•888 • • 0
•
• • • 10
-
I
•
•
- 2 0
'• • - . - : - ."•• • : * ] •'•
'
•• '
• 30
: ' - . ^ '
I
7
¥
••
40
•
>*..*«•„*.•
• 50
•
: ' } : ' . . ,
• 60
•
; - ; . v
Рис. 5.9. Визуализация матрицы В'5 Puc. 5.5. Визуализация матрицы В"3 А строит представление матрицы В 5. Оно представлено на рис. 5.9. Сравнение представлений матриц ВЛ3 и ВЛ5 с представлением матрицы В (рис. 5.2, слева) наглядно показывает, насколько меняется вид матрицы даже при таких простых преобразованиях, как возведение в целую степень.
5.2.6. Демонстрационные примеры на визуализацию разреженных матриц В разделе демонстрационных примеров на технику применения разреженных матриц можно найти ряд интересных примеров на их визуализацию. Например, в разделе справки Demos системы MATLAB 6.5 имеется пример Sparse Matrix, позволяющий просматривать представление различных разреженных матриц в режиме слайд-шоу. Первый кадр слайд-шоу иллюстрирует представление симметричной разреженной матрицы (рис. 5.10).
Iffi ЮЗ 300 4Ш flonzero3«7551 (3 291 %) <:!: 1
"rest the Slart' W t a n lo я » а d w r » « t i e L n n which tnowt Knel r c w d w n g Tnt low? end colufnnj о! а i o * s e matin S can alfect the lime and siaege requaed l a s тМпч uptiation such as factoing S n i o Is Choteiky Ьесотрои!«У1, S - L 1 ' 1 » spy(S). MH'A Sparse SynrndiK Main» ] -nnriSl 1 iti • spi|,
Л
Рас. 5.10. Визуализация матрицы В 5 201
Глава 5. Операции с массивами специального вида Нажимая кнопку Next или задав опцию AutoPlay, можно «вручную» или автоматически просмотреть представление для ряда других разреженных матриц.
5.3. Функции разреженных матриц 5 . 3 . 1 . Норма, число обусловленности и ранг разреженной матрицы Ниже представлены функции, позволяющие вычислять числа обусловленности и ранги для разреженных матриц. • с = condest (A) — использует метод Хейджера в модификации Хаема для оценки числа обусловленности матрицы по первой норме. Вычисленное значение с — нижняя оценка числа обусловленности матрицы А по первой норме. Для повторяемости результатов перед выполнением функции condest нужно обязательно выполнить rand('state',L), где L — одно и то же целое число; • [c,v] = condest (A) —возвращает число обусловленности и вектор v, такой, что выполняется условие norm(A*V, 1) = norm (А, 1) *norm(V, 1) /С. Таким образом, для больших значений с вектор v является аппроксимацией нуль-вектора матрицы А; • nrm = normest(S) — тогда, когда из-за чрезмерного числа элементов в матрице вычисление nrm = normest(S) занимает слишком много времени, то nrm = normest(S) возвращает оценку второй нормы матрицы S. Эта функция изначально предназначена для работы с разреженными матрицами, хотя она работает корректно и с разреженными матрицами; • nrm = normest (S, t o l ) — использует относительную погрешность t o l вместо используемого по умолчанию значения 10~6; • [nrm, count] = normest ( . . . ) — возвращает оценку второй нормы и количество использованных операций. Примеры: >> F=wilkinson (150) ; >> condest(sparse(F)) ans = 460.2219 >> normest(sparse(F)) ans = 75.2453 • r=sprank(S) — вычисляет структурный ранг разреженной матрицы S. В терминах теории графов он известен также под следующими названиями: максимальное сечение, максимальное соответствие и максимальное совпадение. Для величины структурного ранга всегда выполняется условие sprank (S) rank(S), а в точной арифметике с вероятностью 1 выполняется условие sprank (S) ==rank (spran-dn (S) ). Пример: » S = [ 3 0 0 0 4; 5 4 0 8 0; >> r = s p r a n k ( S ) г = 3 202
0 0 0 1 3 ] ;
5.3. Функции разреженных
матриц
5.3.2. Функции разложения Холецкого для разреженных матриц • c h o l i n c (X, ' 0 ') — возвращает неполное разложение Холецкого для действительной симметрической положительно определенной разреженной матрицы 4 . Результат представляет собой верхнюю треугольную матрицу; • R = c h o l i n c (X, ' 0 ' ) — возвращает верхнюю треугольную матрицу, которая имеет такую же разреженную структуру, как и верхний треугольник матрицы действительной положительно определенной матрицы X. Результат умножения R'*R соответствует х по своей разреженной структуре. Положительной определенности матрицы х недостаточно, чтобы гарантировать существование неполного разложения Холецкого, и в этом случае выдается сообщение об ошибке; • [R,p] = c h o l i n c (X, ' 0 ' ) — никогда не выдает сообщение об ошибке в ходе разложения. Если х — положительно определенная матрица, то р = О и матрица R — верхняя треугольная, в противном случае р — положительное целое число, R — верхняя треугольная матрица размера q x п, где q = р - 1. Разреженная структура матрицы R такая же, как и у верхнего треугольника размера q x n матрицы X, и произведение R'*R размера n x n соответствует структуре разреженности матрицы х по ее первым q строкам И столбцам X (1 :q, : ) И X ( : , 1 :q) . • R = c h o l i n c (x, d r o p t o l ) — возвращает неполное разложение Холецкого любой квадратной разреженной матрицы, используя положительный числовой параметр d r o p t o l . Функция c h o l i n c (X, d r o p t o l ) возвращает приближение к полному разложению Холецкого, вычисленному с помощью функции c h o l ( X ) . При меньших значениях d r o p t o l аппроксимация улучшается, пока значение d r o p t o l не станет равным 0. В этом случае c h o l i n c задает полное преобразование Холецкого ( c h o l (X)); • R = c h o l i n c (х, o p t i o n s ) — использует структуру с тремя переменными, которые могут быть использованы в любой из комбинаций: d r o p t o l , m i c h o l , r d i a g . Дополнительные поля игнорируются. Если michol = 1, c h o l i n c возвращает модифицированное разложение Холецкого. Если r d i a g = 1, то все нули на диагонали верхней треугольной матрицы заменяются квадратным корнем от произведения d r o p t o l и нормы соответствующего столбца матрицы X — s q r t ( d r o p t o l * n o r m ( X ( : , j ) ) ) . По умолчанию r d i a g = 0; • R = c h o l i n c (X, d r o p t o l ) и R = c h o l i n c (X, o p t i o n s ) — возвращают верхнюю треугольную матрицу R. Результат R ' * R — это аппроксимация матрицы; • R = c h o l i n c (X, ' i n f ' ) — возвращает разложение Холецкого в неопределенности, когда не удается получить обычное разложение. Матрица X может быть действительной квадратной положительно полуопределенной. Пример: >> S = delsq(numgrid('С , 4) ) 4
Проверить, является ли матрица разреженной, можно при помощи функции i s s p a r se. Она вернет 1, если матрица разреженная. Сама эта функция может применяться при использовании peg или подобных методов решения линейных уравнений, когда обе части уравнения умножаются c h o l i n c (S), где S — симметрическая матрица.
203
Глава 5. Операции с массивами специального вида S = 4 (1,1) _ 1 (2,1) (1,2) -1 (2,2) 4 (3,2) -1 -1 (2,3) 4 (3,3) >> R0 = cholinc(S,'0') R0 = 2.0000 (Ы) (1,2) -0.5000 (2,2) 1.9365 -0.5164 (2,3) (3,3) 1.9322 5.3.3. LU-разложение разреженных
матриц
Функция l u i n c осуществляет неполное LU-разложение и возвращает нижнюю треугольную матрицу, верхнюю треугольную матрицу и матрицу перестановок для разреженных матриц. Используется в следующих формах: • l u i n c (X, ' 0 ') — возвращает неполное LU-разложение уровня 0 квадратной разреженной матрицы. Треугольные факторы (множители) имеют такую же разреженность (т. е. график разреженности, см. s p y ) , как и матрица перестановок квадратной матрицы х, и их произведение имеет ту же разреженность, что и матрица перестановок X. Функция l u i n c (X, ' 0 ' ) возвращает нижнюю треугольную часть нижнего фактора (множителя) и верхний треугольный фактор в одной и той же результирующей матрице. Вся информация о матрице перестановок теряется, но зато число ненулевых элементов результирующей матрицы равно числу ненулевых элементов матрицы X с возможностью исключения некоторых нулей из-за сокращения; • [L,U] = l u i n c (х, ' 0 ' ) — где X — матрица размером n x п, возвращает нижнюю треугольную матрицу L и верхнюю треугольную матрицу и. Разреженности матриц L, и и х не сравнимы, но сумма числа ненулевых элементов в матрицах L и U поддерживается равной nnz (X) + п, с возможностью исключения некоторых нулей в L и и из-за сокращения; • [L, и, Р] = l u i n c (х, ' 0 ') — возвращает нижнюю треугольную матрицу L, верхнюю треугольную матрицу и и матрицу перестановок р. Матрица L имеет такую же разреженную структуру, как нижняя треугольная часть перестановленной матрицы X — spones (L)=spone,3 ( t r i l (P*X) ), с возможными исключениями единиц на диагонали матрицы L, где р*х может быть равно 0; • l u i n c (X, d r o p t o l ) — возвращает неполное LU-разложение любой разреженной матрицы, используя порог d r o p t o l . Параметр d r o p t o l должен быть неотрицательным числом; • l u i n c (х, d r o p t o l ) — возвращает приближение к полному LU-разложению, полученному с помощью функции l u ( X ) . При меньших значениях d r o p t o l аппроксимация улучшается, пока значение d r o p t o l не станет равным 0. В этом случае имеет место полное LU-разложение;
204
5.3. Функции разреженных матриц • l u i n c (X, options) — использует структуру с четырьмя переменными, которые могут быть использованы в любой из комбинаций: droptol, milu, udiag, t h r e s h . Дополнительные поля игнорируются. Если milu = 1, функция l u i n c возвращает модифицированное неполное LU-разложение. Если udiag = 1, то все нули на диагонали верхней треугольной части заменяются на локальную ошибку droptol; • l u i n c (х, options) — то же самое, что и l u i n c (X, d r o p t o l ) , если options содержит только параметр droptol; • [L,u] = luinc (X, options) — возвращает перестановку треугольной матрицы L и верхнюю треугольную матрицу и. Результат L*u аппроксимирует х; • [L,U,P] = l u i n c (X, options) — возвращает нижнюю треугольную матрицу L, верхнюю треугольную матрицу и и матрицу перестановок р. Ненулевые входные элементы матрицы и удовлетворяют выражению a b s ( U ( i , j ) ) > = d r o p t o l * n o r m ( ( X : , j ) ) , с возможным исключением диагональных входов, которые были сохранены, несмотря на неудовлетворение критерию; • [L,u,p] = l u i n c (X, options) — то же самое, что и [L,U,P] l u i n c (X, d r o p t o l ) , если options содержит только параметр droptol.
5.3.4. Собственные значения и сингулярные числа разреженных матриц Применение функции e i g s решает проблему собственных значений, состоящую в нахождении нетривиальных решений системы уравнений, которая может быть интерпретирована как алгебраический эквивалент системы обыкновенных дифференциальных уравнений в явной форме Коши: A*v = X*v\ Вычисляются только отдельные выбранные собственные значения, или собственные значения и собственные векторы: • [V,D] = e i g s (А) или [V,D] = e i g s ( ' Afun', п) — возвращает отдельные собственные значения для первого входного аргумента. Этот параметр может быть как квадратной матрицей (полной или разреженной, симметрической или несимметрической, вещественной или комплексной), так и строкой, содержащей имя m-файла, который применяет линейный оператор к столбцам данной матрицы. В последнем случае второй входной аргумент п определяет порядок задачи. В случае одного выходного параметра D — вектор, содержащий к собственных значений. В случае двух выходных аргументов D — диагональная матрица размера к х к и v — матрица, содержащая к столбцов, так что A*v = V*D ИЛИ A*V = B*V*D.
• [U,S,V] = svds (A, k) — возвращает к наибольших сингулярных чисел и сингулярных векторов матрицы А. По умолчанию к = 5. Если А — матрица размера m х п, то и — матрица размера m x к с ортонормальными столбца5
Усовершенствованный алгоритм e i g позволяет использовать e i g для расчета собственных значений и полных и разреженных матриц, но для получения собственных векторов разреженных матриц по-прежнему желательно использовать именно e i g s . 205
Глава 5. Операции с массивами специального вида ми, S — диагональная матрица размера к х к, v — матрицы размера n x к с ортонормальными столбцами; • [U,S,V] = svds (A. k,0) — возвращает к наименьших сингулярных чисел и сингулярных векторов; • s = svds (А, к, . . .) — возвращает только вектор сингулярных чисел. Как видно из приведенного материала, система MATLAB предлагает пользователям уникальный набор матричных операторов и функций, заметно более полный, чем у других математических систем. Это открывает широчайшие возможности в решении всех видов математических задач, в которых используются современные матричные методы. С рядом дополнительных примеров на операции с разреженными матрицами (с их визуализацией) можно ознакомиться по справке MATLAB по данному разделу (Sparse Matrix Operations). В нем приведена и библиография (зарубежная) по разреженным матрицам и их применению.
5.4. Многомерные массивы 5 . 4 . 1 . Понятие о многомерных массивах Многомерные массивы характеризуются размерностью более двух. Таким массивам можно дать наглядную интерпретацию. Так, матрицу (двумерный массив) можно записать на одном листе бумаги в виде строк (rows) и столбцов (columns), состоящих из элементов матрицы (рис. 5.И). [0|umn Тогда блокнот с такими листками можно считать трехмерным массивом ( 1 , 1) (1 ,2) (1 ,3) (1 ,4) (рис. 5.12), полку в шкафу с блокнотами — четырехмерным массивом, шкаф ( 2 , 1) (2 ,2) (2 ,3) (2 ,4) со множеством полок — пятимерным row массивом и т. д. В этой книге практи( 3 , 1) (3 ,2) (3 ,3) (3 ,4) чески нигде, кроме этого раздела, мы не будем иметь дело с массивами, раз( 4 , 1) (4 ,2) (4 ,3) (4 ,4) мерность которых выше двух, но знать о возможностях MATLAB в части задаРис ния и применения многомерных мае' 5 J L Представление двумерного р к массива (матрицы) сивов все же полезно. • '
(1
1 , 3)
1 , 2 , 3)
и , з, э; (1 ,4,,-S)
(2
1 , 3)
2 , 2 , 3)
(2
, з.,Я !
"(2 , 4 , 3 )
(3
1 , 3)
3,2j ЗУ '(3 , з, 3 !
13 , 4 , 3 )
, з, 3 )
(4 , 4 , 3 )
PUJB ^-*
'
uakifin (1, 1 И ) (1 i 2 ,1 ) 12, 2 (2, 1 (3, l, 1 ) (3, 2 (4, i, 1) (4, 2
1)
(1 ,3 .1)
(1
1 2}
1 , 2 , 2)
!1 , 3 2)
(2
1 2)
2 , 2 , 2)
(2, 3, 2J '(2 4 2)
(3
1 2)
3 . / j 2) "(3, 3 2)
(3 4 2)
4 , 2 , 2)
(4 4 2)
(1 ,4 ,1)
1) (2 ,3 ,1)
[2 ,4 , 1 )
1)
(3 ,3
1)
< 3 ,4 . ' )
1)
(4 ,3 .1)
(4 ,4 ,1)
(4, 3 2)
(1
ej
4,2, 3)
(4
„ •*
_,
-'
Puc. 5.12. Представление трехмерного массива, содержащего ряд страниц (pages) 206
5.4. Многомерные
массивы
В нашей литературе понятия «размер» и «размерность» массивов являются почти синонимами. Однако в литературе по системе MATLAB и в данной книге они имеют явно разный смысл. Под размерностью массивов понимается число измерений в пространственном представлении массивов, а под размером — число строк и столбцов ( т х п) в каждой размерности массива. С многомерными массивами могут выполняться те же операции и вычисления, что и с двумерными массивами (матрицами). В частности, это относится ко всем операциям, осуществляемым поэлементно, а также к функция sum, mean, cross и др. 5.4.2. Применение оператора «:» в многомерных массивах Для выделения отдельных страниц многомерных массивов можно использовать оператор «:» (двоеточие). Подобные операции наглядно иллюстрирует рис. 5.13.
А{2,3,2)
А ( : ,: , 1 ) = 1 4 8
0 -1 2
3 2 1
6 4 5
8 3 9
3 6 2
Рис. 5.13. Примеры работы с трехмерным массивом При обычном задании массивов (с помощью символа точки с запятой «;») число строк массива получается на 1 больше, чем число символов, но массив остается двумерным. Оператор «:» позволяет легко выполнять операции по увеличению размерности массивов. Приведем пример на формирование трехмерного массива путем добавления новой страницы. Пусть у нас задан исходный двумерный массив м с размером 3 x 2 : » М=[1 2 3; 4 5 6; 7 8 9] М= 1 2 3 4 5 6 7 8 9 Для добавления новой страницы с тем же размером можно расширить м следующим образом: »
М ( : , : , 2 ) = [ 1 0 11 12; 13 14 15; 16 17 18] 207
Глава 5. Операции с массивами специального вида М(:,
1) =
2 5 8
1 4 7 М(:,
•
3 6 9 2) =
/
10
11
13
14
16
17
12 15 18
Посмотрим , что теперь содержит массив м при явном его указании:
>> к М(:,
:
,
2 5 8
1 4 7 М(:,
10 13 16
1)
=
3
6 9 2) = 11 12 14 15 17 18
Как можно заметить, числа в выражениях м ( : , : , 1) и М ( : , : , 2) означают наличие в массиве двух страниц.
5.4.3. Удаление размерности у многомерного массива Мы уже отмечали возможность удаления отдельных столбцов присвоением им значений пустого вектора-столбца [ ]. Этот прием нетрудно распространить на страницы и вообще размерности многомерного массива. Например, первую страницу полученного массива м можно удалить следующим образом: >> М(
- г• •1)=[
]
м= 10
11
12
13
14
15
16
17
18
Нетрудно заметить, что в этом массиве осталась только вторая страница и что размерность массива уменьшилась на 1 — он стал двумерным.
5.4.4. Доступ к отдельному элементу многомерного массива Чтобы вызвать средний элемент сначала первой, а затем второй страницы, надо записать следующее: »
М ( 2 , 2 , 1)
ans
=
5 >> ans
М(2,2,2) =
14
Таким образом, в многомерных массивах используетс-i то же правило индексации, что и в одномерных и двумерных. Произвольный элемент, например, трехмерного массива, задается как м ( i , j , к ) , где i — номер строки, j — номер стол б208
5.4. Многомерные массивы ца и к — номер страницы. Этот элемент можно вывести, а можно присвоить ему заданное значение х: м ( i , j , к) =х. 5.4.5. Создание страниц, заполненных константами и случайными числами Если после знака присваивания стоит численная константа, то соответствующая часть массива будет содержать элементы, содержащие данную константу. Например, создадим из массива м (см. пример выше) массив, у которого вторая страница содержит единицы:
10 11 12 13 14 15 16 17 18 М(:, :,2) = 1 1 1 1 1 1 1 1 1
А теперь заменим первую страницу массива на страницу с нулевыми элементами:
0
0 0 0
с 0 0
0
I
1 1 1
1 1 1
1 1
с
5.4.6. Функции ones, zeros, rand и randn Функции ones (создание массивов с единичными элементами), zeros (создание массивов с нулевыми элементами) и rand или randn (создание массивов с элементами — случайными числами с равномерным и нормальным распределением) могут также использоваться для создания многомерных массивов. Примеры приводятся ниже:
M
ь-1
>> E = o n e s ( 3 , 3 , 2 ) 1) = 1 1 1 1 1 1 1 ( ; 2) = 1 1 1 1 1 1 n 1 1 ± > Z=zeros(2,2,3) ( : f • r 1) = 0 0
209
Глава 5. Операции с массивами специального вида О
О
Z(:, :,2) = О
О
о о Z(:,:,3) =
>>
0
О
о
о R=randn(3,2,2)
-1.6656
-1.1465
0.1253
1.1909
0.2877
1.1892
-0.0376
-0.1867
0.3273
0.7258
0.1746
-0.5883
Эти примеры достаточно очевидны и не требуют особых комментариев. Обратите, однако, внимание на легкость задания размеров массивов для каждой размерности. Кроме того, следует отметить, что если хотя бы одна размерность массива равна нулю, то массив будет пустым: >> A=randn(3,3,3,0) А= Empty a r r a y : 3-by-3-by-3-by-0 Как видно из данного примера, пустой массив возвращается с соответствующим комментарием. 5.4.7. Объединение многомерных
массивов
Для создания многомерных массивов служит описанная ранее для матриц специальная функция конкатенации c a t : • c a t (DIM, А, в) — возвращает результат объединения двух массивов А Й В вдоль размерности DIM; • c a t (2, А, В) — возвращает массив [А, в ] , объединенный по столбцам; • c a t ( 1 , А, в) — возвращает массив [А; в ] , объединенный по строкам; • B=cat (DIM, А1, А2, . . .) — объединяет множество входных массивов А1, А2, ... вдоль размерности DIM. Функции c a t (DIM, C{ : ]) и c a t (DIM, с . F I E L D ) обеспечивают объединение массива ячеек или массива записей (см. далее), содержащего числовые матрицы, в многомерный массив. Ниже приводятся примеры применения функции c a t : >> М1=[1 2;3 4] Ml = 1 2 3 4 » М2=[5 6;7 8] М2 = 5 6 7 8 » cat(l,Ml,M2)
210
5.4. Многомерные
массивы
ans — 2 1 3 4 5 6 7 8 >> c a t (2,M1,M2) ans 1 2 5 6 3 4 7 8 » M=cat(3,M1,M2)
3
2 4
5 7
6 8
2)
5.4.8. Функция преобразования размеров многомерного массива reshape Еще один путь создания многомерных массивов заключается в преобразовании их размеров. Для этого используется функция reshape в ряде форм записи: r e s h a p e ( A , m , п , р , . . . ) reshape(A,[m, n р . . . ] ) reshape(A,...,[],...) reshape(A,siz) К примеру, в первых двух конструкциях эта функция возвращает многомерный массив (размера m x n х p х ...), с ф о р м и р о в а н н ы й из элементов массива А. Рисунок 5.14 показывает пример выполнения функции reshape на примере с о здания массива размера 6 х 5 из двух массивов размера 3 x 5 . В другом примере, представленном на р и с . 15.15, массив размера 6 x 2 создается и з трех массивов размера 2 x 2 . и .-* 1 2 9 0 8 1 —
r e s h a p o ( M ,
7 S s,-
9 3 6 3 6 5
4 3 0
ь 7 2 , - •
8
5
8
. . - ' S
-4
3
[ 65 ) |
1
3
5
7
5
1
9
6
7
E
5
3
8
5
2
S
3
0
3
3
8
1
1
0
6
4
3
. - ' 2
-•
Р и с . 5 . 1 4 . П р и м е р с о з д а н и я м а с с и в а р а з м е р а 6 х 5 и зд в у х м а с с и в о в р а з м е р а
3 x 5
Treshape(C, [6 2))
Б ,8 7 .' 8
9 1.0 11-12
1 3 2 4 5 7
6 8 9 11 10 12
Р и с . 5 . 1 5 . П р и м е р с о з д а н и я м а с с и в а р а з м е р а 6 х 2 и зт р е х м а с с и в о в р а з м е р а
2 x 2 211
Глава 5. Операции с массивами специального вида Существовавшая в прежних версиях MATLAB функция создания многомерных массивов из блоков repmat в описываемых версиях исключена.
5.5. Работа с размерностями массивов 5.5.1. Вычисление числа размерностей массива Функция ndims (А) возвращает размерность массива А (если она больше или равна двум). Но если входной аргумент — массив Java, то, независимо от размерности массива, эта функция вернет 2. Следующий пример иллюстрирует применение функции ndims: >> M=rand(2:3 : 4 : 5) ; >> ndims(M) ans = 4
5.5.2. Перестановки размерностей массивов Если представить многомерный массив в виде страниц, то их перестановка является перестановкой размерностей массива. Для двумерного массива перестановка означает транспонирование — замену строк столбцами и наоборот. Следующие функции обеспечивают перестановку размерностей многомерных массивов: • permute (A, ORDER) — переставляет размерности массива А в порядке, определяемом вектором перестановок ORDER. Элементы вектора перестановок — числа от I до N, где N — размерность массива; • ipermute (A, ORDER) — делает то же, но в обратном порядке. Ниже приводятся примеры применения этих функций: » А=[1 2; 3 4] ; » В=[5 6; 7 8] ; » С=[9 10;11 12] ; >> D=cat(3,A,B,C) 1 3
2 4
5 7
6 8
9
10
11 12 >> size (D) ans = 2 2 3 » size (permute(D,[3 2 1])) ans = 3 2 2 >> size (ipermute (D, [2 1 3]) ans = 2 2 3
212
5.6. Тип данных -
структуры
5.5.3. Сдвиг размерностей массивов Сдвиг размерностей реализуется функцией shiftdim: • B=shiftdim (x,N) — сдвиг размерностей в массиве х на величину N. Если N > 0, то сдвиг выполняется влево по кругу. Если N < 0, сдвиг выполняется вправо, причем N первых размерностей становятся единичными; • [В,NSHIFTS] =shiftdim(X) — возвращает массив в с тем же числом элементов, что и у массива X, но с удаленными ведущими единичными размерностями. Выходной параметр NSHIFTS показывает число удаленных размерностей. Если х — скаляр, функция ничего не возвращает. Следующий пример иллюстрирует применение функции shiftdim: >> A=randn(1,2,3,4); >> [B,N]=shiftdim(A) В(:, :,1) -2.1707 -1.0106 0.5077 -0.0592 0.6145 1.6924 В(:, :,2) = 0.5913 0.3803 -0.0195 -0.6436 -1.0091 -0.0482 В(:, :,3) = 0.0000 1.0950 0.4282 -0.3179 -1.8740 0.8956 В (: , :, 4 ) = 0.7310 0.0403 0.5689 0.5779 0.6771 -0.2556 N =
5.5.4. Удаление единичных размерностей Функция squeeze (А) возвращает массив, в котором удалены все единичные размерности. Единичной называется размерность, в которой size(A, dim)==l. Но если А — одномерный или двумерный массив (матрица или вектор), то функция вернет тот же самый массив А. Следующий пример поясняет работу squeeze: >> A=randn(1,2,1,3,1); >> B=squeeze(A) В = 0.6145 1.6924 -0.6436 0.5077 0.5913 0.3803 Обратите внимание на то, что пятимерный массив А превращается в массив с размерностью 2 и размером 2 3.
5.6. Тип данных - структуры 5 . 6 . 1 . Структура записей Структуры относятся к сложным типам данных. В предшествующих версиях MATLAB они именовались записями, что приводило к неточностям в терминоло213
Глава 5. Операции с массивами специального вида гии системы MATLAB и баз данных. После того как в MATLAB были включены средства создания баз данных, этот тип данных стал именоваться структурами (structures). Они могут содержать разнородные данные, относящиеся к некоторому именованному объекту. Например, объект man (человек) может характеризоваться следующими данными: Поле
Значение
Комментарий
Имя записи
Man (i,...) . name
Иван
Имя человека
.surname
Петров
Фамилия
.date
1956
Год рождения
.height
170.5
Рост
.weight
70.34
Вес
Первые два столбца представляют схему структуры. Как нетрудно заметить, каждая /-я структура состоит из ряда полей, имеющих имена, например, man (i) .name, man (i) .date и т. д. Поля могут содержать данные любого типа — от пустого поля [ ] до массивов. Приведенная выше структура имеет размер 1 x 1 . MATLAB поддерживает и массивы структур, что позволяет создавать мощные базы данных. Поле структуры может содержать другую вложенную структуру или массив структур. Это позволяет создавать вложенные структуры и даже многомерные массивы структур. 5 . 6 . 2 . Создание структур и доступ к их компонентам Для задания структур на языке MATLAB можно использовать операторы присваивания, что иллюстрирует следующий пример: >> man.name='Иван'; >> man.surname='Петров'; >> man.date=1956; • >> man.height=170.5; >> man.weight=70.34; Здесь построена базовая структура без индексного указателя. Теперь можно просмотреть полученную структуру, просто указав ее имя: >> man man = name: 'Иван' surname: 'Петров' date: 1956 height: 170.5000 weight: 70.3400 Нетрудно догадаться, что компоненты структуры можно вызывать по имени и менять их значения. При этом имя компонента состоит из имени структуры и имени поля, разделенных точкой. Это поясняют следующие примеры: >> man.date 214
5.6. Тип данных — структуры ans = 1956 >> man.date=1964 man = name: 'Иван' surname: 'Петров' date: 1964 height: 170.5000 weight: 70.3400 ПРИМЕЧАНИЕ Как уже отмечалось, в MATLAB 6. * существует проблема с записью символов кириллицы в командном режиме. Так, в командном режиме нельзя вводить в аргументы записей малую букву «с» русского алфавита — она ведет л переводу строки. Этого ограничения нет при задании структур в программах, хотя и в этом случае ошибки не исключены. Для создания массива структур вводится их индексация. Например, вектор структур можно создать, введя индекс в скобках после имени структуры. Так, для создания новой, второй структуры, можно поступить следующим образом: >> m a n ( 2 ) . n a m e = ' П е т р ' ; >> m a n ( 2 ) . s u r n a m e ^ ' С и д о р о в ' ; >> m a n ( 2 ) . d a t e = 1 9 5 9 ; >> man(2) ans = name: 'Петр' surname: 'Сидоров' d a t e : 1959 height: [ ] weight: [ ] >> man(2).surname ans = Сидоров >> l e n g t h (man) ans = 2 Обратите внимание на то, что не все поля данной структуры заполнены. Поэтому значением двух последних компонентов структуры 2 оказываются пустые массивы. Число структур позволяет найти функция l e n g t h (см. последний пример).
5.6.3. Функция создания структур Для создания структур используется следующая функция: • s t r u c t С f i e l d l ' , VALUES 1, ' f i e l d 2 ' ,VALUES2, . . . ) — возвращает созданную данной функцией структуру, содержащую указанные в параметрах поля ' f i e l d n ' с их значениями ' VALUESn ' . Значением может быть массив ячеек; • s t r u c t (OBJ) — конвертирует объект OBJ в эквивалентную структуру или массив структур, OBJ может быть объектом или массивом Java. Пример: 215
Глава 5. Операции с массивами специального вида » S=struct('student','Иванов','grup',2,'estimate','good') S = student: 'Иванов' grup: 2 estimate: 'good'
5.6.4. Проверка имен полей и структур Выполнение операций с полями и элементами полей выполняется по тем же правилам, что и при работе с обычными массивами. Однако существует ряд функций, осуществляющих специфические для структур операции. Приведенные ниже функции служат для тестирования имен полей и структур записей: • i s f i e l d s (S, ' f i e l d ' ) — возвращает логическую 1, если ' f i e l d ' является именем поля структуры S; • i s s t r u c t (S) — возвращает логическую 1, если s — структура, и 0 в ином случае. Их применение на примере структуры man показано ниже: >> isfield(man,'name') ans = 1 >> isfield(man,'family') ans = 0 >> isstruct(man) ans = 1 >> isstruct(many) ??? Undefined function or variable 'many'. >> isstruct('many') ans = 0
5.7. Функции полей структур 5.7.1. Функция возврата имен полей Следующая функция позволяет вывести имена полей заданной структуры: • fieldnames (S) — возвращает имена полей структуры S в виде массива ячеек. Пример: >> fieldnames(man) ans = 'name' 1 surname' 'date' 'height' 'weight'
216
5.7. Функции полей структур 5.7.2. Функция возврата содержимого полей структуры В конечном счете работа со структурами сводится к выводу и использованию содержимого полей. Для возврата содержимого поля структуры s служит функция getf ield:
• g e t f i e l d ( S , ' f i e l d ' ) — возвращает содержимое поля структуры S, что эквивалентно S. f i e l d ; • g e t f i e l d ( S , { i , j }, ' f i e l d ' , { k } ) — эквивалентно F=S ( i , j ) . f i e l d (k). Пример: >> getfield(man(2),'name') ans = Петр 5.7.3. Функция присваивания значений полям Для присваивания полям заданных значений используется следующая функция: • s e t f i e l d ( S , ' f i e l d ' , V ) — возвращает структуру S с присвоением полю ' f i e l d ' значения V, что эквивалентно s. f i e l d = v; • s e t f i e l d ( S , {i, j } , ' f i e l d ' , {k} ,V) — эквивалентно S (i, j) . field(k) = V. Пример: >> setfield(man(2),'name','Николай') ans = name: 'Николай' surname: 'Сидоров' date: 1959 height: [ ] weight: [ ]
5.7.4. Удаление полей Для удаления полей структуры можно использовать следующую функцию: • rmfield(S, ' f i e l d ' ) 1
— возвращает структуру
S с удаленным полем
field1 .S;
• rmf i e l d (S, FIELDS) — возвращает структуру s с несколькими удаленными полями. Список удаляемых полей FIELDS задается в виде массива символов или строкового массива ячеек. Пример: >> rmfield(man(2),'surname') ans = name: 'Петр' d a t e : 1959 . h e i g h t : [] weight: [ ] 5.7.5. Применение массивов структур Массивы структур находят самое широкое применение. Например, они используются для представления цветных изображений. Известно, что цветные изоб217
Глава 5. Операции с массивами специального вида ражения формата RGB состоят из массивов интенсивности трех цветов — красного г, зеленого g и синего Ь. При этом каждый массив содержит данные о координатах точки (они определяются целочисленными индексами массива) и о ее яркости (число от 0 до 1 в формате чисел с плавающей точкой). Чтобы некоторое изображение, например, pic несло данные о цвете всех точек, придется представить изображение массивом записей с компонентами pier, pie.g и pic.b. Еще более сложные структуры (но, в принципе, вполне очевидные) нужны для разработки баз данных, например о работниках предприятия, службах города, городах страны и так далее. Во всех этих случаях особенно важна возможность доступа к отдельным ячейкам структур и возможность присвоения таким структурам уникальных имен. Может показаться, что этот тип данных имеет малое отношение к математическим возможностям системы MATLAB. Однако надо помнить, что поиск информации в больших базах данных, сортировка этой информации и прочие операции, не говоря уже о сложной обработке массивов изображений — все это примеры явно математических, хотя и достаточно специфических, операций. Причем операций нередко с многомерными структурами. Возможность MATLAB выполнять подобные операции быстро и эффективно (прежде всего с позиций минимальных затрат памяти) открывает перед этой системой большие возможности в этой области — впрочем, пока еще ждущие своей реализации. Не случайно на MATLAB созданы одни из лучших пакетов программ по обработке изображений и созданию больших баз данных.
5.8. Массивы ячеек 5 . 8 . 1 . Создание массивов ячеек Массив ячеек — наиболее сложный тип данных в системе MATLAB. Это массив, элементами которого являются ячейки, содержащие любые типы массивов, включая массивы ячеек. Отличительным атрибутом массивов ячеек является задание содержимого последних в фигурных скобках {). Создавать массивы ячеек можно с помощью оператора присваивания. Существует два способа присваивания данных отдельным ячейкам: • индексацией ячеек; • индексацией содержимого. Рассмотрим первый способ. Для этого создадим файл-сценарий с именем се.т: А (1, 1) = { 'Курить в р е д н о ! '} ; А (1, 2 ) = { [ 1 2 ; 3 4 ] } ; A(2,l)={2+3i}; А(2,2)={0:0.1:1}
ПРИМЕЧАНИЕ Уже отмечалось, что в командном режиме малая русская буква «с» в строках ведет к переводу строки ввода: Однако в файлах-сценариях, создаваемых в редакторе/отладчике М-файлов, эта недоработка не проявляется. Хотя гарантии в этом, увы, пока нет. В этом примере задан массив ячеек с четырьмя элементами: строкой символов, матрицей, комплексным числом и одномерным массивом Из 11 чисел. Теперь можно вызвать этот массив: 218
5.8. Массивы ячеек >> се А — 'Курить вредно!'[2x2 double] [2.0000+ 3.0000i] [lxll double] » A(l, 1) ans = 'Курить вредно! ' » А(2,1) ans = [2.0000+
3.0000i]
Заметим, что к ячейкам такого массива можно обращаться с помощью индексирования, например в виде А ( 1 , 1 ) , А (2,1) и т. д. При индексации содержимого массив ячеек задается следующим образом: А{1,1}='Курить вредно!'; А{1,2}=[1 2;3 4 ] ; А{2,l}=2+3i; А{2,2}=0:0.1:1;
Теперь можно ознакомиться с созданным массивом ячеек в командном режиме: >> А ans = 'Курить вредно!'[2x2 double] [2.0000+ 3.00001] [lxll double] » А{1,1} ans = Курить вредно! » А{2,1} ans = 2.0000 + 3.0000i При серьезной работе с массивами структур (записей) и массивами ячеек полезно иметь дополнительную информацию о списках значений. Для получения такой информации следует выполнить команду help l i s t . 5 . 8 . 2 . Создание ячеек с помощью функции cell Для создания массива ячеек может использоваться функция c e l l : • c e l l (N) — создает массив ячеек из N х N пустых матриц; • cell(M,N) или c e l l ([M,N]) — создает массив ячеек из м N пустых матриц; • c e l l (M, N, Р, . . .) или c e l l ([М N р . . . ]) — создает массив из м х N х р х ... пустых матриц; • c e l l (size (A) ) — создает массив ячеек из пустых матриц того же размера, что и массив А; • c e l l (объект Java) - автоматически преобразует объекты или массивы Java (javaarray) в массив ячеек, элементы которого являются объектами MATLAB. Следующие примеры поясняют применение данной функции: » c e l l (2) ans = 219
Глава 5. Операции с массивами специального вида М М [ ][ ] » С=се11(2,3)
>> CO=zeros(2,3) СО = 0 0 0 0 0 0 >> c e l l ( s i z e ( C O ) ) ans =
Созданные пустые ячейки можно заполнить, используя операции присваивания: » С { 1 , 1 } = 1 ; С { 1 , 2 } = ' П р и в е т ' ; С { 2 , 1 } = ' H e l l o ' ; С { 2 , 2 } = [1 2 ; 3 4] ; >> С С = [1] 'Привет' [ ] 'Hello' [2x2 d o u b l e ] [ ]
5.8.3. Визуализация массивов ячеек Для отображения массива ячеек с служит команда c e l l d i s p (С). Она дает рекурсивное отображение содержимого массива ячеек с. Например, для ранее созданного массива ячеек А получится следующее: >> celldisp(А) А{1,1} = Курить вредно! А{2,1} = 2.0000 + 3.0000i А{1,2} = 1 2 3 4 А{2,2} = Columns I through 7 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 Columns 8 through 11 0.7000 0.8000 0.9000 1.0000 Для более наглядного графического представления массива ячеек может использоваться команда c e l l p l o t : • c e l l p l o t (С) — строит структуру массива ячеек С; • c e l l p l o t (С, ' legend') — строит структуру массива ячеек С вместе с «легендой» — шкалой стилей представления данных; • H=cellplot (С) — возвращает вектор дескрипторов созданных графических объектов. На рис. 5.16 показано представление массива ячеек А, сформированного ранее. 220
5.8. Массивы ячеек
Рис. 5.16. Графическое представление массива с четырьмя ячейками Как видно на рис. 5.16, ячейки массива представлены квадратами. Векторы и матрицы с численными данными представляются массивами красного цвета с прямоугольными ячейками, при этом отображаются отдельные числа и текстовые данные. Справа от представления массива показана легенда, которая даже в монохромном изображении облегчает выделение типов компонент массива оттенками серого цвета.
5.8.4. Создание массива символьных ячеек из массива строк Для создания из массива символов s строкового массива ячеек может использоваться функция c e l l s t r (S). Каждый ряд массива символов превращается в отдельную ячейку. Следующий пример поясняет применение функции c e l l s t r : >> S = { ' П р и в е т ' ' д о р о г о й ' 'друг'}; » C=cellstr(S) С = 'Привет' 'дорогой' 'друг'
Это — еще один способ формирования массивов ячеек. Функция i s c e l l s t r (С) равна 1, если ее аргумент С — строковый массив ячеек, и 0, если это неверно.
5.8.5. Присваивание с помощью функции deal С помощью функции deal возможно множественное присваивание входных данных выходным: • [А, в, с, . . . ] =deal (x, Y, Z, . . .) — обеспечивает последовательное присваивание входных данных выходным, то есть А = х, в = Y, с = z и т. д.; • [А, в, с, . . . ]=deal(X) — присваивает единственный вход всем выходам, то есть А = х, в = х, с = х и т. д.; Возможен ряд полезных применений функции deal: • [S.FIELD] =deal (x) — присваивает всем полям FIELD структуры S значения х. Если S не существует, то нужно использовать конструкцию [S(1:М) . F I E L D ] = d e a l (X); •
[Х{ :} ] = d e a l (A. FIELD) — копирует поля FIELD структуры А в массив я ч е ек х. Если X не существует, следует использовать к о н с т р у к ц и ю [ Х ( 1 : М } ] = deal(A.FIELD);
221
Глава 5. Операции с массивами специального вида • [А, в , с , . . . ] = d e a l (Х{ : }) — копирует содержимое массива ячеек X в отдельные переменные А, в, с, ...; • [А, в , С, . . . ] = d e a l (S. FIELD) — копирует содержимое, поля FIELD массива структур S в отдельные переменные А, в, с, ...; Следующий пример иллюстрирует применение функции d e a l : >> [ X , Y , Z ] = d e a l ( I , 2 + 3 i , ' П р и в е т ! ' ) X= т Y= 2.0000 + 3.0000i Z = Привет! >> [X Y Z ] = d e a l ( ' П р и в е т ! ' ) X = Привет! Y= Привет! Z= Привет!
•
•
'
5.8.6. Тестирование имен массивов ячеек Ввиду обилия типов данных в системе MATLAB часто возникает необходимость в их тестировании. Для тестирования массивов ячеек может использоваться функция i s c e l l (С), которая возвращает логическое значение 1, если С — массив ячеек, и 0 в противном случае. Это поясняют следующие примеры: >> t=iscell(A) 1 » В=[1 2 3 ] ; » iscell(В) ans = 0
5.8.7. Функции преобразования типов данных При обработке сложных данных возникает необходимость в преобразовании их типов. Ниже представлены такие функции, имеющие отношение к массивам ячеек: • n u m 2 c e l l (A) — преобразует массив чисел А в массив ячеек и возвращает последний. Возвращаемый массив имеет тот же размер, что и исходный массив А; • n u m 2 c e l l (A, DIM) — преобразует массив чисел А в массив ячеек, помещая в отдельные ячейки фрагменты, соответствующие разным значениям индекса вдоль измерения, указанного параметром DIM. Примеры применения данной функции: >> А = [ 1 2 ; А = 1 2
222
3 4;
5 6]
. .
.
.' '
5.9. Многомерные массивы ячеек 3 4 5 6 >> num2cell(A,2) ans = [1x2 double] [1x2 double] [1x2 double] >> num2cell(A,[1 2]) ans = [3x2 double] • c e l l 2 s t r u c t (C, FIELDS, DIM) — преобразует массив ячеек С в массив структур вдоль размерности DIM, сохраняя размер массива с по этой размерности в записи структуры. Размерность 1 — столбцы. Размерность 2 — строки. Пример преобразования: >> С={'Привет!',123,2+3i) Г*
—
'Привет!'[123][2.0000+ 3.0000i] >> f={'name','number','complex'}; >> S=cell2struct (С,f,2) S = name: 'Привет!' number: 123 complex: 2.0000+ 3.0000i • s t r u c t 2 c e l l (S) — преобразует массив структур s размером т x п, в котором содержат p полей, в массив ячеек, так что возвращаемый массив будет иметь размер р х т х п. Если массив записей многомерный, то возвращаемый массив будет иметь размер, равный [р s i z e (S) ] . Пример такого преобразования приводится ниже: >> C=struct2cell(S) С = 'Привет!' [123] [ 2 . 0 0 0 0 + 3.0000л.]
5.9. Многомерные массивы ячеек 5 . 9 . 1 . Создание многомерных массивов ячеек С помощью функции c a t можно формировать многомерные массивы ячеек. Например, трехмерный массив с формируется следующим образом (m-файл с именем се2.т): А { 1 , 1} = ' К у р и т ь в р е д н о ! ' ; А {1, 2 } = [ 1 2 ; 3 4 ] ; А{ 2 , 1 } = 2 + 3 1 ; А { 2 , 2 } = 0 : 0 . 1 : 1 ; : В { 1 , 1 } = ' П и т ь тоже в р е д н о ! ' ; В{1,2} =[1 2 3 4 ] ; В{2,1}=2; 223
Глава 5. Операции с массивами специального вида B{2,2}=2*pi; C=cat(3,А,В);
Теперь можно просмотреть данный массив, имеющий две страницы: >> с е 2 >> С
'Курить вредно! ' [2x2 d o u b l e ] [2.0000+ 3 . 0 0 0 0 i ] [ l x l l d o u b l e ] 'Пить тоже в р е д н о ! ' [ 1 x 4 d o u b l e ] [2][6.2832] Этот многомерный массив можно просмотреть с помощью команды c e l l p l o t (С). Полученный результат показан на рис. 5.17, где многомерный массив отображается как стопка страниц.
I
-
•"
[-KVplUJL-ВПЕДяа U J
Рис. 5.17. Отображение трехмерного массива ячеек командой cellplot Доступ к ячейкам многомерных массивов очевиден и поясняется с примерами:
'ющими
>> с(1,1,1) ans = 'Курить вредно!' » С(1,1,2) ans = 'Пить тоже вредно!' 5 . 9 . 2 . В л о ж е н н ы е м а с с и в ы ячеек Содержимым ячейки массива ячеек может быть, в свою очередь, произвольный массив ячеек. Таким образом, возможно создание вложенных массивов ячеек — пожалуй, самого сложного типа данных. В следующем примере показано формирование массива ячеек А с вложенным в него массивом в (он был создан в примере выше): 224
5.9. Многомерные массивы ячеек » c l e a r А; » A(l,1)={{magic(3) , {'Hello! ' }}}; » А(1,2)={В}; >> А ans = {1x2 c e l l } {2x2 c e l l } » А{1} ans = [3x3 double] {lxl c e l l } » A{2} ans = 'Пить тоже вредно!' [1x4 double] [2][6.2832] >> c e l l p l o t ( A ) На рис. 5.18 показан рисунок с отображением массива А с вложенным в него массивом в.
Рис. 5.18. Графическое представление массива с вложенным в него другим массивом В данном случае вложенный массив отображается полностью как часть массива А.
225
Глава 6. Графическая визуализация вычислений 6 . 1 . Графики функций и данных Одно из достоинств системы MATLAB — обилие средств графики, начиная от команд построения простых графиков функций одной переменной в декартовой системе координат и кончая комбинированными и презентационными графиками с элементами анимации, а также средствами проектирования графического пользовательского интерфейса (GUI). Особое внимание в системе уделено трехмерной графике с функциональной окраской отображаемых фигур и имитацией различных световых эффектов. Эта глава посвящена описанию основных средств обычной графики. 6 . 1 . 1 . Построение графиков отрезками прямых Функции одной переменной у(х) находят широкое применение в практике математических и других расчетов, а также в технике компьютерного математического моделирования. Для отображения таких функций используются графики в декартовой (прямоугольной) системе координат. При этом обычно строятся две оси — горизонтальная Хи вертикальная К и задаются координаты хну, определяющие узловые точки функции у(х). Эти точки соединяются друг с другом отрезками прямых, то есть при построении графика осуществляется линейная интерполяция для промежуточных точек. Поскольку MATLAB — матричная система, совокупность точек у(х) задается векторами х и Y одинакового размера. Команда p l o t служит для построения графиков функций в декартовой системе координат. Эта команда имеет ряд параметров, рассматриваемых ниже. • p l o t (X, Y) — строит график функции у(х), координаты точек (х,у) которой берутся из векторов одинакового размера Y и х. Если х или Y — матрица, то строится семейство графиков по данным, содержащимся в колонках матрицы. Приведенный ниже пример иллюстрирует построение графиков двух функций — sin(x) и cos(x), значения функции которых содержатся в матрице у, а значения аргумента х хранятся в векторе х: >> х = [ 0 1 2 3 4 5 ] ; >> Y = [ s i n ( x ) ; c o s ( x ) ] ; >> p l o t ( x , Y )
На рис. 6.1 показан график функций из этого примера. В данном случае отчетливо видно, что график состоит из отрезков, и если вам нужно, чтобы отображаемая функция имела вид гладкой кривой, необходимо увеличить количество узловых точек. Расположение их ординат может быть произвольным. • p l o t (У) — строит график y(i), где значения у берутся из вектора У, а /' представляет собой индекс соответствующего элемента. Если у содержит комплексные элементы, то выполняется команда p l o t ( r e a l (Y), imag (Y) ). Во всех других случаях мнимая часть данных игнорируется. Вот пример использования команды p l o t (Y): 226
6.1. Графики функций и данных
D.8 0.6 0.4 0.2 .0 0.2 0.4 0.6 0.8
08
/ /
"ч.
0.$
\ \
7
I
х,
\
/ \
0.2
\ \
/ '
/
0
\
0.2
/ \ 1
0.4 0.6
А
08
-\
\
/
\
у
\
•
,1
-0.В
-0.6
-0.4
/
\
V
\
х/ \\ /
\
/
\ \
0.4
/
-0 2
0
02
1
\ 1
0.4
0.6
08
1
Рис. 6.2. График функции, представляющей вектор Y с комплексными элементами
Рис. 6.1. Графики двух функций в декартовой системе координат » x=-2*pi:0.02*pi:2*pi; >> y=sin(x) +i*cos(3*x) ; » plot(у)
Соответствующий график показан на рис. 6.2. • p l o t ( x , Y , s ) — аналогична команде p l o t ( x , Y ) , но тип линии графика можно задавать с помощью строковой константы S. Значениями константы s могут быть следующие символы.
Г
Цвет линии
Y
Желтый
М
Фиолетовый
С
Голубой
R
Красный
G
Зеленый
В
Синий
W
Белый
К
Черный Тип точки
Точка О
Окружность
X
Крест
+
Плюс Звездочка
S
I
1
Квадрат
D
Ромб
v
Треугольник(вниз)
л
Треугольник (вверх) 227
Глава 6. Графическая визуализация вычислений < >
Треугольник (влево)
р
Пятиугольник
н
Шестиугольник
Треугольник (вправо)
Тип линии
-
Сплошная Двойной пунктир
-.
Штрих-пунктир
-
Штриховая
Таким образом, с помощью строковой константы s можно изменять цвет линии, представлять узловые точки различными отметками (точка, окружность, крест, треугольник с разной ориентацией вершины и т. д.) и менять тип линии графика. • p l o t ( x i , Y l , S l , x 2 , Y 2 , S 2 , x 3 , Y 3 , S 3 , . . . ) — эта команда строит на одном графике ряд линий, представленных данными вида (х,, у,., s,), где х, и Y, — векторы или матрицы, a S, — строки. С помощью такой конструкции возможно построение, например, графика функции линией, цвет которой отличается от цвета узловых точек. Так, если надо построить график функции линией синего цвета с красными точками, то вначале надо задать построение графика с точками красного цвета (без линии), а затем графика только линии синего цвета (без точек). При отсутствии указания на цвет линий и точек он выбирается автоматически из таблицы цветов (белый исключается). Если линий больше шести, то выбор цветов повторяется. Для монохромных систем линии выделяются стилем. Рассмотрим пример построения графиков трех функций с различным стилем представления каждой из них: >> >> >> >> >>
x=-2*pi:0.l*pi:2*pi; yl = sin (x) ; y2=sin(x). Л 2; y3=sin(x). Л 3; plot(х,yl, ' - m ' , х , у 2 , ' - . + г ' , х , у З , ' — o k ' )
Графики функций для этого примера показаны на рис. 6.3.
Рис. 6.3. Построение графиков трех функций на одном рисунке с разным стилем линий 228
6.1. Графики функций и данных Здесь график функции y l строится сплошной фиолетовой линией, график у 2 строится штрих-пунктирной линией с точками в виде знака «плюс» красного цвета, а график уЗ строится штриховой линией с кружками черного цвета. К сожалению, на черно-белых рисунках этой книги вместо разных цветов видны разные градации серого цвета.
6.1.2. Графики в логарифмическом масштабе Для построения графиков функций со значениями х и у, изменяющимися в широких пределах, нередко используются логарифмические масштабы. Рассмотрим команды, которые используются в таких случаях. • l o g l o g ( . . . ) — синтаксис команды аналогичен ранее рассмотренному для функции p l o t ( . . . ) . Логарифмический масштаб используется для координатных осей X и Y. Ниже дан пример применения данной команды: >> x=logspace (-1,3); >> loglog (х,ехр (х) ./х) >> grid on На рис. 6.4 представлен график функции ехр(х)/х в логарифмическом масштабе. Обратите внимание на то, что командой g r i d on строится координатная сетка.
in
/iii
т
к
10"»
10
и!
III/
ю
10''
10"
10'
JO* '
10*
Рис. 6.4. График функции ехр(х) /х в логарифмическом
масштабе
Неравномерное расположение линий координатной сетки указывает на логарифмический масштаб осей.
6.1.3. Графики в полулогарифмическом масштабе В некоторых случаях предпочтителен полулогарифмический масштаб графиков, когда по одной оси задается логарифмический масштаб, а по другой — линейный. Для построения графиков функций в полулогарифмическом масштабе используются следующие команды: • s e m i l o g x ( . . . ) — строит график функции в логарифмическом масштабе (основание Ю) по оси X w линейном по оси Y; • s e m i l o g y ( . . .) — строит график функции в логарифмическом масштабе по оси У и линейном по оси X. Запись параметров ( . . . ) выполняется по аналогии с функцией p l o t ( . . . ) . Ниже приводится пример построения графика экспоненциальной функции: 229
Глава 6. Графическая визуализация »
х=0:0.5:10;
>>
s e m i l o g y ( x , е х р (х))
вычислений
График функции при логарифмическом масштабе по оси У представлен на рис. 6.5. Нетрудно заметить, что при таком масштабе график экспоненциальной функции выродился в прямую линию. Масштабной сетки теперь уже нет. 6 . 1 . 4 . Столбцовые диаграммы Рис. 6.5. График экспоненты в Столбцовые диаграммы широко полулогарифмическом масштабе используются в литературе, посвященной финансам и экономике, а также в математической литературе. Ниже представлены команды для построения таких диаграмм. • b a r (x,Y) — строит столбцовый график элементов вектора Y (или группы столбцов для матрицы Y) со спецификацией положения столбцов, заданной значениями элементов вектора х, которые должны идти в монотонно возрастающем порядке; • b a r (Y) — строит график значений элементов матрицы Y так же, как указано выше, но фактически для построения графика используется вектор x=l:m; • b a r (x, Y, WIDTH) или BAR (Y, WIDTH) — команда аналогична ранее рассмотренным, но со спецификацией ширины столбцов (при WIDTH > 1 столбцы перекрываются). По умолчанию задано WIDTH = 0 . 8 . Возможно применение этих команд и в следующем виде: bar (...,'Спецификация ' ) для задания спецификации графиков, например типа линий, цвета и т. д. по аналогии с командой p l o t . Спецификация 'stacked' задает рисование всех п столбцов друг на друге. Пример построения столбцовой диаграммы матрицы размером 12 х 3 приводится ниже: >> % Столбцовая диаграмма с вертикальными столбцами >> subplot ( 2 , 1 , 1), b a r ( r a n d ( 1 2 , 3 ) , ' s t a c k e d ' ) , colormap(cool) На рис. 6.6 представлен полученный график. Помимо команды b a r ( . . . ) существует аналогичная ей по синтаксису команда b a r h ( . . . ) , которая строит столбцовые диаграммы с горизонтальным расположением столбцов. Пример, приведенный ниже, дает построения, показанные на рис. 6.7. >> s u b p l o t ( 2 , 1 , 1 ) , b a r h ( r a n d ( 5 , 3 ) , ' s t a c k e d ' ) ,
colormap(cool)
Какое именно расположение столбцов выбрать, зависит от пользователя, использующего эти команды для представления своих данных.
230
6.1. Графики функций и данных
9 • 10 11 12 Рис. 6.6. Пример построения диаграммы с вертикальными столбцами
Рис. 6.7. Пример построения столбцовой диаграммы с горизонтальными столбцами
6.1.5. Гистограммы Классическая гистограмма характеризует числа попаданий значений элементов вектора Y в м интервалов с представлением этих чисел в виде столбцовой диаграммы. Для получения данных для гистограммы служит функция h i s t , записываемая в следующем виде: • N=hist(Y) — возвращает вектор чисел попаданий для Ю интервалов, выбираемых автоматически. Если Y — матрица, то выдается массив данных о числе попаданий для каждого из ее столбцов; • N = h i s t (Y,M) — аналогична вышерассмотренной, но используется м интервалов (м — скаляр); • N = h i s t (Y, X) — возвращает числа попаданий элементов вектора Y в интервалы, центры которых заданы элементами вектора х; • [N, х] =HIST ( . . . ) — возвращает числа попаданий в интервалы и данные о центрах интервалов. Команда h i s t ( . . . ) с синтаксисом, аналогичным приведенному выше, строит график гистограммы. В следующем примере строится гистограмма для 1000 случайных чисел и выводится вектор с данными о числах их попаданий в интервалы, заданные вектором х: » х=-3:0.2:3; >> y=randn(1000,1); >> hist(у,х) >> h=hist(y,x) h = Columns I through 12 0 0 3 7 8 9 11 23 33 43 57 55 Columns 13 through 24 70 62 83 87 93 68 70 65 41 35 27
21
[''_
"olumns 2 5 through 31 1^563210 Построенная гистограмма показана на рис. 6.8. Нетрудно заметить, что распределение случайных чисел близко к нормальному закону. Увеличив их количество, можно наблюдать еще большее соответствие этому закону.
^ so ;о ш о рис.
6.8. Пример построения гистограммы 231
Глава 6. Графическая визуализация вычислений 6.1.6. Лестничные графики Лестничные графики визуально представляют собой ступеньки с огибающей, представленной функцией у{х). Такие графики используются, например, для отображения процессов квантования функции у{х), представленной рядом своих отсчетов. При этом в промежутках между отсчетами значения функции считаются постоянными и равными величине последнего отсчета. Для построения лестничных графиков в системе MATLAB используются команды группы s t a i r s : • s t a i r s (Y) — строит лестничный график по данным вектора Y; • s t a i r s (X, Y) — строит лестничный график по данным вектора Y с координатами х переходов от ступеньки к ступеньке, заданными значениями элементов вектора х; • s t a i r s (. . ., S) — аналогична по действию вышеописанным командам, но строит график линиями, стиль которых задается строками S. Следующий пример иллюстрирует построение лестничного графика: » х=0:0.25:10; >> s t a i r s ( х , х . Л 2 ) ;
Результат построения представлен на рис. 6.9. Обратите внимание на то, что отсчеты берутся через равные промежутки по горизонтальной оси. Если, к примеру, отображается функция времени, то s t a i r s имеет вид квантованной по времени функции. Функция H=stairs (X, Y) возвращает вектор дескрипторов графических объектов. Функция
100 90
80 70 60 50 4D 30
20 10 ) , .
•...
;.•;
2
. ••.
. •; 4 ; :
.
:;
. 6 . •.;
а
1
Рис. 6.9 Лестничный график
функции х"2 сама по себе график не строит, а возвращает векторы хх и YY, которые позволяют построить график с помощью команды p l o t (xx, YY). [XX,YY]=stairs(X,Y)
6.1.7. Графики с зонами погрешности Если данные для построения функции определены с заметной погрешностью, то используют графики функций типа e r r o r b a r с оценкой погрешности каждой точки путем ее представления в виде буквы I, высота которой соответствует заданной погрешности представления точки. Команда e r r o r b a r используется в следующем виде: • e r r o r b a r (X, Y, L, и) — строит график значений элементов вектора Y в зависимости от данных, содержащихся в векторе х, с указанием нижней и верхней границ значений, заданных в векторах L и и; • errorbar(X,Y,Е) и errorbar(Y,Е) — строит графики функции Y(X) с указанием этих границ в виде [Y-E Y+E] , где Е — погрешность; • e r r o r b a r ( . . . , 'LineSpec') — аналогична описанным выше командам, но позволяет строить линии со спецификацией 'LineSpec', аналогичной спецификации, примененной в команде p l o t . 232
6.1. Графики функций и данных Следующий пример иллюстрирует применение команды e r r o r b a r : » х=-2:0.1:2; >> y=erf (x) ; >> е = rand(size(х))/10; >> errorbar(x,у,е); Построенный график показан на рис. 6.10.
-3
-2
-1
0
Рис. 6.10. График функции erf(x)
1
2
3
с зонами погрешности
Функция, записываемая в виде H=ERRORBAR ( . . . ) , возвращает вектор дескрипторов графических объектов.
6.1.8. Графики дискретных отсчетов функции Еще один вид графика функции у(х) — ее представление дискретными отсчетами. Этот вид графика применяется, например, при описании квантования сигналов. Каждый отсчет представляется вертикальной чертой, увенчанной кружком, причем высота черты соответствует j-координате точки. Для построения графика подобного вида используются команды stem ( . . . ) : • stem (Y) — строит график функции с ординатами в векторе Y В виде отсчетов; • stem (X, Y) — строит график отсчетов с ординатами в векторе у и абсциссами в векторе х; • s t e m ( . . . , ' f i l l e d ' ) — строит график функции с закрашенными маркерами; • s t e m ( . . . , ' L I N E - S P E C ) — дает построения, аналогичные ранее приведенным командам, но со спецификацией линий ' L I N E S P E C ' , подобной спецификации, приведенной для функции p l o t . Следующий пример иллюстрирует применение команды stem: »
х = 0:0.1:4;
>> у = s i n (х.~2) .*ехр (-х); >>
stem(x,y)
Полученный для данного примера график показан на рис. 6.11. Функция H=STEM ( . . . ) строит график и возвращает вектор дескрипторов графических объектов.
233
Глава 6. Графическая визуализация вычислений
05
О
1
1.5
2
25
3
3.5
4
Рис. 6.11. График дискретных отсчетов функции
6.2. Визуализация в полярной системе координат 6 . 2 . 1 . Графики в полярной системе координат В полярной системе координат любая точка представляется как конец радиус-вектора, исходящего из начала системы координат, имеющего длину RHO И угол ТНЕТА. Для построения графика функции RHO(THETA) используются приведенные ниже команды. Угол ТНЕТА обычно меняется от 0 до 2*pi. Для построения графиков функций в полярной системе координат используются команды типа p o l a r ( . . . ) : • polar (ТНЕТА, RHO) — строит график в полярной системе координат, представляющий собой положение конца радиус-вектора с длиной RHO И углом ТНЕТА; • polar (ТНЕТА, RHO, S) — аналогична предыдущей команде, но позволяет задавать стиль построения с помощью строковой константы S по аналогии с командой p l o t . Рисунок 6.12 демонстрирует результат выполнения команд: >> t=0:pi/50:2*pi; >> polar(t,sin (5*t) )
30
180
210
Puc. 6.12. График функции в полярной системе координат
234
6.3. Визуализация векторов Графики функций в полярных координатах могут иметь весьма разнообразный вид, порой напоминая такие объекты природы, как снежинки или кристаллики льда на стекле. Вы можете сами попробовать построить несколько таких графиков — многие получают от этого удовольствие. 6.2,2. Угловые гистограммы Угловые гистограммы находят применение в индикаторах радиолокационных станций, для отображения «роз» ветров и при построении других специальных графиков. Для этого используется ряд команд типа r o s e ( . . . ) : • r o s e (THETA) — строит угловую гистограмму для 20 интервалов по данным вектора ТНЕТА; • r o s e (ТНЕТА, N) — строит угловую гистограмму для N интервалов в пределах угла от 0 до 2 * p i по данным вектора ТНЕТА; • r o s e (ТНЕТА, X) — строит угловую гистограмму по данным вектора ТНЕТА со спецификацией интервалов, указанной в векторе х. Следующий пример иллюстрирует применение команды r o s e : »
rose(l:100,12)
На рис. 6.13 показан пример построения графика командой r o s e .
120
240 Рис. 6.13. Угловая гистограмма Ф у н к ц и я H = r o s e ( . . . ) строит график и возвращает вектор дескрипторов графических объектов, а ф у н к ц и я [ т , R] ==rose ( . . . ) сама по себе график не строит, но возвращает векторы т и R, которые нужны команде p o l a r ( T , R ) ДЛЯ построения подобной гистограммы.
6.3. Визуализация векторов 6 . 3 . 1 . Графики
векторов
Иногда желательно представление ряда радиус-векторов в их обычном виде, то есть в виде стрелок, исходящих из начала координат и имеющих угол и длину.
235
Глава 6. Графическая визуализация
вычислений
определяемые действительной и мнимой частью комплексных чисел, представляющих эти векторы. Для этого служит группа команд compass: • compass (U,V) — строит графики радиус-векторов с компонентами (U,v), представляющими действительную и мнимую части каждого из радиус-векторов; • compass (Z) —эквивалентно c o m p a s s ( r e a l (Z), i m a g ( Z ) ) ; • compass(U,v,LINESPEC) и compass(Z,LINESPEC) — аналогичны представленным выше командам, но позволяют задавать спецификацию линий построения LINESPEC, подобную описанной для команды p l o t . В следующем примере показано использование команды compass: » Z=[-l+2i,-2-3i,2+3i,5+2i]; >> compass(Z) Построенный в этом примере график представлен на рис. 6.14. 5.3852
120
60
210
240
300 270
Рис. 6.14. Построение радиус-векторов Функция H=COMPASS ( . . . ) ских объектов.
строит график и возвращает дескрипторы графиче-
6.3.2. График проекций векторов на плоскость Иногда полезно отображать комплексные величины вида z — х + yi в виде проекции радиус-вектора на плоскость. Для этого используется семейство графических команд класса f e a t h e r : • f e a t h e r (U,v) — строит график проекции векторов, заданных компонентами и и v, на плоскость; • f e a t h e r (Z) — для вектора Z с комплексными элементами дает построения, аналогичные f e a t h e r (REAL (Z) , 1МАЙ (Z) ); • f e a t h e r ( . . . , S) — дает построения, описанные выше, но со спецификацией линий, заданной строковой константой s по ан&чогии с командой p l o t . Пример применения команды f e a t h e r : >> 236
х=0:0.l*pi:3*pi;
6.4. Основы трехмерной
графики
» y=0.05+i; >> z=exp(х*у); » feather(z) График, построенный в этом последнем примере, показан на рис. 6.15.
{ V/
Рис. 6.15. График, построенный командой feather Функция H=FEATHER ( . . . ) строит график и возвращает вектор дескрипторов графических объектов.
6.4. Основы трехмерной графики 6.4.1. Контурные графики Контурные графики служат для представления на плоскости функции двух переменных вида z(x,y) с помощью линий равного уровня. Они получаются, если трехмерная поверхность пересекается рядом плоскостей, расположенных параллельно друг другу. При этом контурный график представляет собой совокупность спроецированных на плоскость (х,у) линий пересечения поверхности z(x,y) плоскостями. Для построения контурных графиков используются команды c o n t o u r : • c o n t o u r (Z) — строит контурный график по данным матрицы z с автоматическим заданием диапазонов изменения хну; • c o n t o u r (х, Y, Z) — строит контурный график по данным матрицы Z с указанием спецификаций для х и Y; • c o n t o u r (Z,N) и c o n t o u r (X, Y, Z,N) — дает построения, аналогичные ранее описанным командам, с заданием N линий равного уровня (по умолчанию N = 10); • c o n t o u r (z,v) и c o n t o u r (x, Y, z, v) — строят линии равного уровня для высот, указанных значениями элементов вектора v; • c o n t o u r (z, [v v]) или c o n t o u r (X, Y, z, [v v] ) — вычисляет одиночный контур для уровня v; • [С,Н] = c o n t o u r (. . . ) — возвращает дескрипторы — матрицу С и вектор-столбец н. Они могут использоваться как входные параметры для команды с l a b e l ;
237
Глава 6. Графическая визуализация
вычислений
• c o n t o u r ( . . . , ' LINESPEC') — позволяет использовать перечисленные выше команды с указанием спецификации линий, которыми идет построение. Пример построения контурного графика поверхности, заданной функций p e a k s : >> z=peaks (27) ; >> contour(z,15) Построенный в этом примере график показан на рис. 6.16. Заметим, что объект — функция p e a k s — задан в системе в готовом виде.
5
10
15
20
25
Рис. 6.16. Контурный график., построенный с помощью команды contour Графики этого типа часто используются в топографии для представления на листе бумаги (как говорят математики — на плоскости) объемного рельефа местности. Для оценки высот контурных линий используется их функциональная окраска. 6 . 4 . 2 . Создание массивов данных для трехмерной графики Трехмерные поверхности обычно описываются функцией двух переменных z(x,y). Специфика построения трехмерных графиков требует не просто задания ряда значений х и у, то есть векторов х и у. Она требует определения для X и Y двумерных массивов — матриц. Для создания таких массивов служит функция meshgrid. В основном она используется совместно с функциями построения графиков трехмерных поверхностей. Функция m e s h g r i d записывается в следующих формах: • [x,Y] = m e s h g r i d (х, у) — преобразует область, заданную векторами х и у, в массивы х и у, которые могут быть использованы для вычисления функции двух переменных и построения трехмерньлх графиков. Строки выходного массива х являются копиями вектора х; а столбцы Y — копиями вектора у; • [X,Y] = m e s h g r i d (x) —аналогична [X,Y] = m e s h g r i d (x, x) ; • [x,Y,z] = m e s h g r i d (x, у, z) —возвращает трехмерные массивы, используемые для вычисления функций трех переменных и построения трехмерных графиков. Пример: >> [X,Y] = meshgrid(l:4,13:17)
238
6.4. Основы трехмерной 1 1 1 1 1
2 2 2 2
3 3 3 3
о
з
графики
4 4 4 л 4
Y —
13 13 13 13 14 14 14 14 15 15 15 15 16 16 16 16 17 17 17 17 Приведем еще один пример применения функции meshgrid: >> [X,Y] = m e s h g r i d ( - 2 : . 2 : 2 , -2:.2:2); Такой вызов функции позволяет задать опорную плоскость для построения трехмерной поверхности при изменении х и у от —2 до 2 с шагом 0,2. Дополнительные примеры применения функции meshgrid будут приведены далее при описании соответствующих команд. Рекомендуется ознакомиться с также командами s u r f и s l i c e (ломтик). Функция n d g r i d является многомерным аналогом функции meshgrid: • [XI, Х2,ХЗ, . . . ] = n d g r i d ( x l , х2, х З , . . . ) — преобразует область, заданную векторами x l , x 2 , x 3 , . . . , в массивы Х1,Х2,ХЗ, . . . , которые могут быть использованы для вычисления функций нескольких переменных и многомерной интерполяции, /'-я размерность выходного массива x i является копией вектора x i ; • [ X I , Х 2 , . . . ] = ndgrid(x) — аналогична [ X I , Х 2 , . . . ] = n d g r i d ( x , x , . . . } . Пример применения функции ndgrid представлен ниже: [XI,Х2] = ndgrid{-2:.2:2, -2:.2:2); Z = XI .* ехр(-Х1.Л2 - Х2. Л 2); mesh (Z) Рекомендуем читателю опробовать действие этого примера. 6 . 4 . 3 . Графики поля градиентов Для построения графиков полей градиента служат команды quiver: • quiver (X,Y,U,V) — строит график поля градиентов в виде стрелок для каждой пары элементов массивов х и Y, причем элементы массивов и и v указывают направление и размер стрелок; • quiver (u,v) — строит векторы скорости в равнорасположенных точках на плоскости (х,у); • quiver (U, v, S) или quiver (X, Y, и, v, S) — автоматически масштабирует стрелки по сетке и затем вытягивает их по значению s. Используйте S = 0, чтобы построить стрелки без автоматического масштабирования; • quiver (. . . , LINESPEC) — использует для векторов указанный тип линии. Указанные в LINESPEC маркеры рисуются у оснований, а не на концах векторов. Для отмены любого вида маркера используйте спецификацию ' . '. Спецификации линий, цветов и маркеров были подробно описаны в разделе, посвященном команде p l o t ; 239
Глава 6. Графическая визуализация вычислений • q u i v e r ( . . . , ' f i l l e d ' ) — дает график с закрашенными маркерами; • H=quiver ( . . . ) — строит график и возвращает вектор дескрипторов. Ниже представлен пример применения команды q u i v e r : » х = -2:.2:2; у = -1:.2:1; >> [хх,уу] = m e s h g r i d ( x , у ) ; >> zz = х х . * е х р ( - х х . Л 2 - у у . Л 2 ) ; >> [рх,ру] = g r a d i e n t ( z z , . 2 , .2) ; >> q u i v e r ( x , y , p x , p y , 2) ; Построенный в этом примере график показан на рис. 6.17.
-2 5 -2 -1.5 -1 -0.5
0
0.5
1
1.5 2
Рис. 6.17. Пример построения графика поля градиентов Нетрудно заметить, что представление поля градиентов стрелками дает весьма наглядное представление о линиях поля, указывая области, куда эти линии впадают и откуда они исходят.
6.4.4. Графики поверхностей Команда p l o t 3 ( . . . ) является аналогом команды p l o t ( . . . ) , но относится к функции двух переменных z{x,y). Она строит аксонометрическое изображение трехмерных поверхностей и представлена следующими формами: • p l o t 3 (x, у, z) — строит массив точек, представленных векторами х, у и z, соединяя их отрезками прямых. Эта команда имеет ограниченное применение; • p l o t 3 (х, Y, Z), где X, Y и Z - три матрицы одинакового размера, строит точки с координатами X ( i , : ) , Y ( i , : ) и z ( i , :) и соединяет их отрезками прямых. Ниже дан пример построения трехмерной поверхности, описываемой функЛ Л цией z ( х , у ) = х 2 + у 2 : » [X,Y]=meshgrid( [-3:0.15:3]); >> Z=X. A 2+Y. A 2; >> plot3(X,Y,Z) График этой поверхности показан на рис. 6.18. • p l o t 3 (X, Y, z, S) — обеспечивает построения, аналогичные рассмотренным ранее, но со спецификацией стиля линий и точек, соответствующей 240
6.4. Основы трехмерной
графики
спецификации команды p l o t . Ниже дан пример применения этой команды для построения поверхности кружками: >> [X,Y]=meshgrid([-3:0.15:3]); >> Z = X . A 2 + Y . Л 2 ; >> p l o r 3 ( X , Y , Z , ' о ' )
График поверхности, построенный кружками, показан на рис. 6.19.
Рис. 6.18. График поверхности, построенный линиями
Рис. 6.19. График поверхности, построенный разноцветными кружками
• p l o t 3 ( x l , y l , z l ,s i , х 2 , y 2 , z 2 , s 2 , х З , у З , z 3 , s 3 , . . . ) — с т р о и т н а О Д НОМ р и с у н к е г р а ф и к и н е с к о л ь к и х ф у н к ц и й z l ( x l , y l ) , z 2 ( x 2 , y 2 ) и т . д .
со спецификацией линий и маркеров каждой из них. Пример применения последней команды дан ниже: » [X,Y]=meshgrid([-3:0.15:3] ) ; >> Z = X . " 2 + Y . Л 2 ; >> p l o t 3 ( X , Y , Z , ' - k ' , Y , X , Z ,' - k 1 )
График функции, соответствующей последнему примеру, представлен на рис. 6.20. В данном случае строится два графика одной и той же функции с взаимно перпендикулярными образующими линиями. Поэтому график имеет вид сетки без окраски ее ячеек (напоминает проволочный каркас фигуры).
Рис. 6.20. График функции в сетчатом представлении 241
Глава 6. Графическая визуализация
вычислений
6.4.5. Сетчатые ЗЭ-графики с окраской Наиболее представительными и наглядными являются сетчатые графики поверхностей с заданной или функциональной окраской. В названии их команд присутствует слово mesh. Имеется три группы таких команд. Ниже приведены данные о наиболее полных формах этих команд. Наличие более простых форм можно уточнить, используя команду h e l p Имя, где Имя — имя соответствующей команды. • mesh (X, Y, Z, С) — выводит в графическое окно сетчатую поверхность Z (X, Y) с цветами узлов поверхности, заданными массивом с; • mesh(X,Y,z) — аналог предшествующей команды при с = Z. В данном случае используется функциональная окраска, при которой цвет задается высотой поверхности. Возможны также формы команды m e s h ( x , y , Z ) , mesh (х, у, Z, С) , mesh(Z) и mesh (Z, С). Функция mesh возвращает дескриптор для объекта класса s u r f a c e . Ниже приводится пример применения команды mesh: » [X,Y]=meshgrid([-3:0.15:3] ) ; >> Z=X. A 2+Y."2; >> mesh(X,Y,Z) На рис. 6.21 показан график поверхности, созданной командой m e s h ( x , Y , z ) . Нетрудно заметить, что функциональная окраска линий поверхности заметно усиливает наглядность ее представления. MATLAB имеет несколько графических функций, возвращающих матричный образ поверхностей. Например, функция p e a k s (N) возвращает матричный образ поверхности с рядом пиков и впадин. Такие функции удобно использовать для проверки работы графических команд трехмерной графики. Для упомянутой функции p e a k s можно привести такой пример: >> z=peaks (25) ; >> mesh (z); График поверхности, описываемой функцией peaks, представлен на рис. 6.22. Рекомендуется ознакомиться с командами и функциями, используемыми совместно с описанными командами: a x i s , c a x i s , colormap,hold,shading и view.
15
5,
10
О
30
Рис. 6.21. График поверхности, созданный командой mesh(X,Y,Z) 242
Рис. 6.22. График поверхности, описываемой функцией peaks
6.4. Основы трехмерной
графики
6.4.6. Сетчатые ЗЭ-графики с проекциями Иногда график поверхности полезно объединить с контурным графиком ее проекции на плоскость, расположенным под поверхностью. Для этого используется команда meshc: • meshc ( . . . ) — аналогична mesh ( . . . ) , но помимо графика поверхности дает изображение ее проекции в виде линий равного уровня (графика типа contour). Ниже дан пример применения этой команды: >> [X,Y]=meshgrid( [-3:0.15:3]); >> г=Х. Л 2+У. Л 2; >> meshc(X,Y,Z) Построенный график показан на рис. 6.23. Нетрудно заметить, что график такого типа дает наилучшее представление об особенностях поверхности.
6.4.7. Построение поверхности столбцами Еще один тип представления поверхности, когда она строится из многочисленных столбцов, дают команды класса meshz: • meshz ( . . . ) — аналогична mesh виде столбиков.
, но строит поверхность как бы в
Следующий пример иллюстрирует применение команды mesh: >>
[X,Y]=meshgrid([-3:0.15:3]);
>> meshz(X,Y,Z) Столбцовый график поверхности показан на рис. 6.24. Графики такого типа используются довольно редко. Возможно, он полезен архитекторам или скульпторам, поскольку дает неплохое объемное представление о поверхностях.
A
. 15« 10. 5. ••4*
/
'
.
—
•
-
-
'
' '
'
•
•
•
-
'
/
•
•
•
"
^
,
—
"
4
•
2
0 -
2
-
4
.
-
4
Puc. 6.23. График поверхности и ее проекции на расположенную ниже плоскость
Рис. 6.24. Построение поверхности столбцами 243
Глава 6. Графическая визуализация вычислений
6.5.
Улучшенные средства визуализации 30-графики
6 . 5 . 1 . Построение поверхности с окраской Особенно наглядное представление о поверхностях дают сетчатые графики, использующие функциональную закраску ячеек. Например, цвет окраски поверхности z(x,y) может быть поставлен в соответствие с высотой z поверхности с выбором для малых высот темных тонов, а для больших — светлых. Для построения таких поверхностей используются команды класса s u r f ( . . . ) : • s u r f (X, Y, z,С) — строит цветную параметрическую поверхность по данным матриц х, Y и z с цветом, задаваемым массивом с; • s u r f (x,Y,z) — аналогична предшествующей команде, где с = Z, так что цвет задается высотой той или иной ячейки поверхности; • s u r f ( x , y , z ) и s u r f (x, у, z, С) с двумя векторными аргументами х и у — векторы х и у заменяют первые два матричных аргумента и должны иметь ДЛИНЫ
l e n g t h ( х ) = п И l e n g t h (у)
= т , г д е [rr.,n]
= s i z e ( Z ) .
В ЭТОМ
случае вершины областей поверхности представлены тройками координат (х ( j ) , у ( i ) , z ( i , j ) ) . Заметим, что х соответствует столбцам Z, а у соответствует строкам; • s u r f ( Z ) и s u r f (Z, С) используют х = 1 : п и у = 1:т. В этом случае высота Z — однозначно определенная функция, заданная геометрически прямоугольной сеткой; • h = s u r f ( . . . ) — строит поверхность и возвращает дескриптор объекта класса s u r f a c e . Команды a x i s , c a x i s , colormap, h o l d , s h a d i n g и view задают координатные оси и свойства поверхности, которые могут использоваться для большей эффектности показа поверхности или фигуры. Ниже приведен простой пример построения поверхности — параболоида: »
[X,Y]=meshgrid([-3:0.15:3]);
>>
Z=X. "-2 + Y. Л 2 ;
>>
surf(X,Y,Z)
Соответствующий этому примеру график показан на рис. 6.25. Можно заметить, что благодаря функциональной окраске график поверхности гораздо более выразителен, чем при построениях без такой окраски, представленных ранее (причем даже в том случае, когда цветной график печатается в черно-белом виде). В следующем примере используется функциональная окраска оттенками серого цвета с выводом шкалы цветовых оттенков: >> >> >> >> >> >>
[X,Y]=meshgrid([-3:0.1:3]); Z = sin (X) ./ (X."2 + Y. Л 2 + 0.3) ; surf(X,Y,Z) colormap(gray) shading interp colorbar
В этом примере команда colormap (gray) задает окраску тонами серого цвета, а команда shading i n t e r p обеспечивает устранение изображения сетки и задает 244
6.5. Улучшенные средства визуализации Зй-графики
Рис. 6.25. График параболоида с функциональной окраской ячеек
Рис. 6.26. График поверхности с функциональной окраской серым цветом
интерполяцию для оттенков цвета объемной поверхности. На рис. 6.26 показан вид графика, построенного в этом примере. Обычно применение интерполяции для окраски придает поверхностям и фигурам более реалистичный вид, но фигуры каркасного вида дают более точные количественные данные о каждой точке. 6 . 5 . 2 . Построение поверхности и ее проекции Для повышения наглядности представления поверхностей можно использовать дополнительный график линий равного уровня, получаемый путем проецирования поверхности на опорную плоскость графика (под поверхностью). Для этого используется команда surfc: • surfc ( . . . ) — аналогична команде surf, но обеспечивает дополнительное построение контурного графика проекции фигуры на опорную плоскость. Пример применения команды surfc приводится ниже: >> [X,Y]=meshgrid([-3:0.1:3]); >> Z = sin(X) ./ (X."2 + Y. Л 2 + 0.3) ; >> surfc(X,Y,Z)
На рис. 6.27 показаны графики, построенные в данном примере. Рассмотрим еще один пример применения команды surfc, на этот раз для построения поверхности, описываемой функцией peaks с применением интерполяции цветов и построением цветовой шкалы: >> >> >> >> >>
[X,Y]=meshgrid([-3:0.1:3]); Z=peaks(X,Y); surfc(X,Y,Z) shading interp colorbar
Рисунок 6.28 показывает график, построенный в этом примере. И здесь нетрудно заметить, что графики сложных поверхностей с интерполяцией цветовых оттенков выглядят более реалистичными, чем графики сетчатого вида и графики без интерполяции цветов. 245
Глава 6. Графическая визуализация вычислений
Рис. 6.27. График поверхности и ее проекции на опорную плоскость
Рис. 6.28. График функции peaks с проекцией и шкалой цветов
6.5.3. Построение освещенной поверхности Пожалуй, наиболее реалистичный вид имеют графики поверхностей, в которых имитируется освещение от точечного источника света, расположенного в заданном месте координатной системы. Графики имитируют оптические эффекты рассеивания, отражения и зеркального отражения света. Для получения таких графиков используется команда s u r f l : • s u r f l ( . . . ) — аналогична команде s u r f ( . . . ) , но строит график поверхности с подсветкой от источника света; • s u r f l (Z,S) или s u r f I (X, Y, z, S) — строит графики поверхности с подсветкой от источника света, положение которого в системе декартовых координат задается вектором s= [Sx, Sy, S z ] , а в системе сферических координат — вектором s = [ A Z , E L ] ; • s u r f l ( . . . , ' l i g h t ' ) — позволяет при построении задать цвет подсветки с помощью объекта L i g h t ; • s u r f l ( . . . , ' c d a t a ' ) — при построении имитирует эффект отражения; • s u r f 1 (х, Y, z, S, К) — задает построение поверхности с параметрами, заданными вектором к= [ka, kd, ks, s p r e a d ] , где ка — коэффициент фоновой подсветки, kd — коэффициент диффузного отражения, ks — коэффициент зеркального отражения и s p r e a d — коэффициент глянцевитости; • H=surf 1 ( . . . ) — строит поверхность и возвращает дескрипторы поверхности и источников света. По умолчанию вектор S задает углы азимута и возвышения в 45°. Используя команды c l a , h o l d on, view (AZ, EL), s u r f 1 (. . .) и h o l d of f, можно получить дополнительные возможности управления освещением. Надо полагаться на упорядочение точек в х, Y, и Z матрицах, чтобы определить внутреннюю и внешнюю стороны параметрических поверхностей. Попробуйте транспонировать матрицы и использовать s u r f 1 ( х 1 , Y', z ' ) , если вам не понравился результат работы этой команды. Для вычисления векторов нормалей поверхности s u r f l требует в качестве аргументов матрицы с размером по крайней мере 3 x 3 . Ниже представлен пример применения команды s u r f l : >> »
246
[X,Y]=meshgrid([-3:0.1:3]); Z=sin(X)./(X."2+Y.A2+0.3);
6.5. Улучшенные средства визуализации
ЗО-графики
» surfl(х,Y,z) >> colormap(gray) >> shading interp >> colorbar Построенная в этом примере поверхность представлена на рис. 6.29.
Рис. 6.29. График поверхности с имитацией ее освещения точечным источником. Сравните этот рисунок с рис. 6.26, на котором та же поверхность построена без имитации ее освещения. ПРИМЕЧАНИЕ
Нетрудно заметить определенную логику в названиях графических команд. Имя команды состоит из основного слова и суффикса расширения. Например, все команды построения поверхностей имеют основное слово surf (сокращение от surface — поверхность) и суффиксы: с — для контурных линий поверхности, 1 — для освещенности и т. д. Это правило облегчает запоминание многочисленных команд графики.
6 . 5 . 4 . Средства управления подсветкой и обзором фигур Рекомендуется с помощью команды help ознакомиться с командами, задающими управление подсветкой и связанными с ней оптическими эффектами: • diffuse — задание эффекта диффузионного рассеяния; • l i g h t i n g — управление подсветкой; • m a t e r i a l — имитация свойств рассеивания света различными материалами; • specular — задание эффекта зеркального отражения. . Следующие три команды позволяют управлять углами просмотра, под которыми рассматривается видимая в графическом окне фигура: • view — задание положения точки просмотра; • viewmtx — задание и вычисление матрицы вращения; • r o t a t e 3 d — задание поворота трехмерной фигуры. В ряде случаев применением этих команд можно добиться большей выразительности трехмерных объектов. Скорость построения таких графиков сильно зависит от аппаратной поддержки графики в конкретном ПК. Так, использование современных видеоадаптеров с графическим процессором и поддержкой средств OpenGL позволяет повысить скорость построения трехмерных графиков в несколько раз и добиться большей их выразительности. 247
Глава 6. Графическая визуализация
вычислений
6.5.5. Построение графиков функций трех переменных Графики сечений функций трех переменных строит команда s l i c e (в переводе — «ломтик»). Она используется в следующих формах: • s l i c e (X, Y, Z, V, Sx, Sy, Sz) — строит плоские сечения объемной фигуры V в направлении осей х, у, z с позициями, задаваемыми векторами Sx, Sy, Sz. Массивы х, Y, z задают координаты для v и должны быть монотонными и трехмерными (как возвращаемые функцией meshgrid) с размером М х N х Р. Цвет точек сечений определяется трехмерной интерполяцией в объемной фигуре V.; • s l i c e (X, Y, z,v, XI, Y I , zi) — строит сечения объемной фигуры V по поверхности, определенной массивами XI, Y I , Z I ; • s l i c e (V, Sx, Sy, Sz) или s l i c e (v, x i , YI, ZI) — подразумевается X = 1 : N , Y = 1 :M, Z = 1 : P ;
• s l i c e ( . . . , ' m e t h o d ' ) — при построении задается метод интерполяции, который может быть одним из следующих: ' l i n e a r ' , ' c u b i c ' или ' n e a r e s t 1 . По умолчанию используется линейная интерполяция — ' linear'; • H = s l i c e ( . . . ) — строит сечение и возвращает дескриптор объекта класса surface. График примера, приведенного ниже, представлен на рис. 6.30. >> >> »
[x,y,z] = m e s h g r i d ( - 2 : . 2 : 2 , - 2 : . 2 5 : 2 , - 2 : . 1 6 : 2 ) ; v = sin(x) .* е х р ( - х . А 2 - у . л 2 - г . л 2 ) ; s l i c e ( x , y , z , v , [-1.2 . 8 2 ] , 2 , [-2 -.2])
Рис. 6.30. График, показывающий сечения трехмерной поверхности
6.5.6. График трехмерной слоеной поверхности Иногда бывают полезны графики трехмерных слоеных поверхностей, как бы состоящие из тонких пластинок — слоев. Такие поверхности строит функция wat e r f a l l (водопад): • w a t e r f a l l ( . . . ) — строит поверхность как команда mesh ( . . . ) , но без показа ребер сетки. При ориентации графика относительно столбцов следует использовать запись w a t e r f a l l (Z ') или w a t e r f a l l (X 1 , Y' , Z ' ). Рассмотрим пример применения команды w a t e r f a l l : 248
6.5. Улучшенные средства визуализации
ЗБ-графики
» [X,Y]=meshgrid([-3:0.1:3]); >> Z=sin(X)./(X.A2+Y.л2+0.3); >> waterfall(X,Y,Z) >> colormap(gray) >> shading interp Соответствующий график показан на рис. 6.31.
05
-0 5 ,
Рис. 6.31. Трехмерная слоеная поверхность 6.5.7. Трехмерные контурные графики Трехмерный контурный график представляет собой расположенные в пространстве линии равного уровня, полученные при расслоении трехмерной фигуры рядом секущих плоскостей, расположенных параллельно опорной плоскости фигуры. При этом, в отличие от двумерного контурного графика, линии равного уровня отображаются в аксонометрии. Для получения трехмерных контурных графиков используется команда contour3: • contour3 ( . . . ) — имеет синтаксис, аналогичный команде contour ( . . . ) , но строит линии равного уровня в аксонометрии с использованием функциональной окраски (окраска меняется вдоль оси z). Полезные частные формы записи этой команды: • contour3(Z) — строит контурные линии для поверхности, заданной массивом Z, без учета диапазона изменения хну; • contour3 (Z, п) — строит то же, что предыдущая команда, но с использованием п секущих плоскостей (по умолчанию п = 10); • contour3 (х, Y, z) — строит контурные линии для поверхности, заданной массивом z, с учетом изменения х и у. Двумерные массивы X и Y создаются С ПОМОЩЬЮ функции m e s h g r i d ;
• contour3 (x, Y, z, n) — строит то же, что предыдущая команда, но с использованием п секущих плоскостей. Пример применения команды contour3: >> contour3(peaks,20) >> colormap(gray) Соответствующий данному примеру график представлен на рис. 6.32. В данном случае задано построение двадцати линий уровня. 249
Глава 6. Графическая визуализация
вычислений
Рис. 6.32. Трехмерный контурный график для функции peaks С командой contour3 связаны следующие одноименные функции (не выполняющие графические построения): • C=contour3 ( . . . ) — возвращает матрицу описания контурных линий с для использования командой clabel; • [С, Н] =contour3 (. . .) — возвращает массив с и вектор-столбец н дескрипторов объектов path для каждой линии уровня. Свойство UserData каждого объекта содержит значение высоты для соответствующего контура.
6.6. Текстовое оформление графиков 6.6.1. Установка титульной надписи После того как график уже построен, MATLAB позволяет выполнить его форматирование или оформление в нужном виде. Соответствующие этому средства описаны ниже. Так, для установки над графиком титульной надписи используется следующая команда: • t i t l e (' s t r i n g ' ) — установка на двумерных и трехмерных графиках титульной надписи, заданной строковой константой ' s t r i n g ' . Пример применения этой команды будет дан в следующем разделе.
6.6.2. Установка осевых надписей Для установки надписей возле осей х, у и z используются следующие команды: xlabel('String') ylabel('String') zlabel('String')
Соответствующая надпись задается символьной константой или переменной ' S t r i n g ' . Пример установки титульной надписи и надписей по осям графиков приводится ниже: >> >> >> >> >>
250
[X, Y]=meshgrid([-3:0.1:3]) ; Z = sin (X) ./(X. A 2+Y. Л 2 + 0.3) ; surf1 (X,Y,Z) colorbar colormap(gray)
6.6. Текстовое оформление
графиков
>> shading interp >> xlabel('Axis X 1 ) >> ylabel('Axis Y') >> zlabel('Axis Z') >> title('Surface graphic') Построенный в этом примере график трехмерной поверхности показан на рис. 6.33.
Рис. 6.53. График трехмерной поверхности с титульной надписью и надписями по координатным осям Сравните его с графиком, показанным на рис. 6.29. Надписи делают рисунок более наглядным. 6 . 6 . 3 . Ввод текста в любое место графика Часто возникает необходимость добавления текста в определенное место графика, например для обозначения той или иной кривой графика. Для этого используется команда t e x t : ч.^ • t e x t ( X , Y , ' s t r i n g ' ) — добавляет в двумерный график текст, заданный строковой константой ' s t r i n g ' , так что начало текста расположено в точке с координатами (X, У). Если х и Y заданы как одномерные массивы, то надпись помещается во все позиции [ x ( i ) , y ( i ) ] ; • t e x t ( X , Y , z , ' s t r i n g ' ) — добавляет в трехмерный график текст, заданный строковой константой ' s t r i n g ' , так что начало текста расположено в позиции, заданной координатами х, Y и z. A
В приведенном ниже примере надпись «График функции sin(x 3)» размещается под кривой графика в позиции (—4, 0.7): >> х = - 1 0 : 0 . 1 : 1 0 ; >> p l o t ( х , s i n ( x ) . Л 3 ) >> text(-4,0.7,'Graphic sin(x)A3') График функции с надписью у кривой показан на рис. 6.34. Математически правильной записью была бы sin3x. Попробуйте ввести самостоятельно 251
Глава 6. Графическая визуализация » х=-10:0.1:10; >> p l o t ( x , s i n ( х ) . А 3 ) >> t e x t ( - 4 , 0 . 7 , ' G r a p h i c
-
0 U» » x-10 » '
-
'
•
вычислений
(sin (x))Л3)
')
• ?
a.
МОИ
-
0.1:10:
'
'
Г
.£*>
••:Q
L* V
»' 1к1#|Л А 7 / .0.8
A
\
r e p h
C.S 02 0 Л.2
/
'л г
-D.4 -0 6
-1
1 /
у
1
"/ \ г
А/\
\1/ 11 V у 0 5
10,, г
Рис. 6.34. Пример ввода надписи в поле графика функции Функция h = t e x t ( . . . ) возвращает вектор-столбец h дескрипторов объектов класса t e x t , дочерних для объектов класса axes. Следующий пример вычисляет дескриптор h >> h = t e x t ( . 2 5 , . 5, ' \ i t e A { i \ o m e g a \ t a u } i sin(\omega\tau)') h = 3.0022
= cos(\omega\tau)
+ ...
и выводит в пустом графике математическую формулу в формате ТеХ вида: ер" = cos(co/) + sin(co/) Пары координат x,Y (или тройки X,Y,Z ДЛЯ трехмерных графиков) могут сопровождаться парами «имя параметра/значение параметра» для задания дополнительных свойств текста. Пары координат x,Y (или тройки X,Y,Z для трехмерных графиков) могут быть полностью опущены, при этом все свойства, в том числе и позиция текста, задаются с помощью пар «имя параметра/значение параметра», заданных по умолчанию. Используйте функцию g e t ( H ) , где н — дескриптор графического объекта (в нашем случае графического объекта класса t e x t ) , чтобы просмотреть список свойств объекта и их текущие значения. Используйте s e t (H), чтобы просмотреть список свойств графических объектов и их допустимых значений. 6.6.4. Позиционирование текста с помощью мыши Очень удобный способ ввода текста предоставляет команда g t e x t : • g t e x t (' s t r i n g ' ) — задает выводимый на график текст в виде строковой константы ' s t r i n g ' и выводит на график перемещаемый мышью маркер в виде крестика. Установив маркер в нужное место, достаточно щелкнуть любой кнопкой мыши для вывода текста. 252
6.6. Текстовое оформление графиков • g t e x t (С) — позволяет аналогичным образом разместить многострочную надпись из массива строковых переменных с. Пример применения команды g t e x t : » х=-15:0.1:15; Л >> p l o t ( x , s i n ( х ) . 3 )
>> gtext('Function з1п(х)лЗ') При исполнении этого примера вначале можно увидеть построение графика функции с большим крестом, перемещаемым мышью (рис. 6.35). Установив перекрестие в нужное место графика, достаточно нажать любую клавишу или любую кнопку мыши, и на этом месте появится надпись (рис. 6.36). Высокая точность позиционирования надписи и быстрота процесса делает данный способ нанесения надписей на графики одним из наиболее удобных.
Рис. 6.35. График функции с крестообразным маркером, перемещаемым мышью у,»* v.'({-, ;i^'4Si«1..l-,^;
D С»
JT •
•
Щ
?
JJ
curfm»«tMnr|Emeti«mi:)wo.b
o.ino;
'»" 0
л
£
с
V
й
O
i
e
w
i n t « « t
l
o
o
k
^
Й
О
*
Ц
'
0
4
0
.
2
S с' 'ч /--; v^ \ \ \ I
0
- 0
2
•
0
.
•
0
.
O
\
IГ
B
4
\j
6
B
-
j\ \ I \
/I I
B
D
-
В
1
0
у w
• i -
5
0
s
m
«1
Puc. 6.36. График функции с надписью, установленной с помощью мыши 253
Глава 6. Графическая визуализация
вычислений
6.7. Форматирование графиков 6 . 7 . 1 . Вывод пояснений и легенды Пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него, называется легендой. Для создания легенды используются различные варианты команды legend: • legend ( s t r i n g l , s t r i n g 2 , s t r i n g 3 , . . . ) — добавляет к текущему графику легенду в виде строк, указанных в списке параметров; • legend (H, s t r i n g l , s t r i n g 2 , s t r i n g 3 , . . . ) — помещает легенду на график, содержащий объекты с дескрипторами н, используя заданные строки как метки для соответствующих дескрипторов; • legend (АХ, . . .) — помещает легенду в осях (объект класса axes) с дескриптором АХ; • legend (м) — размещает легенду, используя данные из строковой матрицы м; • legend OFF — устраняет ранее выведенную легенду; • legend — перерисовывает текущую легенду, если таковая имеется; • legend (legendhandle) — перерисовывает легенду, указанную дескриптором legendhandle; • legend (. . . ,Pos) — помещает легенду в точно определенное место, специфицированное параметром Pos: О Pos=0 — лучшее место, выбираемое автоматически; О Pos=l — верхний правый угол; О Pos=2 — верхний левый угол; О Pos=3 — нижний левый угол; О Pos=4 — нижний правый угол; О Pos=-1 — справа от графика. Чтобы перенести легенду, установите на нее курсор, нажмите левую кнопку мыши и перетащите легенду в необходимую позицию. • [legh, objh] =legend (. . .) — эта функция возвращает дескриптор объекта для легенды (legh) и матрицу objh, содержащую дескрипторы объектов, из которых легенда состоит. Команда legend может использоваться с двумерной и трехмерной графикой и со специальной графикой — столбцовыми и круговыми диаграммами и т. д. Двойным щелчком можно вывести легенду на редактирование. Пример, приведенный ниже, строит график трех функций с легендой, размещенной в поле графика: >> >> >> >> >> >>
x=-2*pi:0.l*pi:2*pi; yl=sin(x); y2 = sin (x) . Л 2 ; y3 = sin (x) .~3; plot(x,yl,'-m',х,у2,'-.+г',х,уЗ,'-ok') legend('Function 1','Function 2','Function 3 ' ) ;
Полученный график представлен на рис. 6.37. Незначительная модификация команды legend (применение дополнительного параметра -1) позволяет построить график трех функций с легендой вне поля графика: 254
6.7. Форматирование графиков >> x=-2*pi:0.l*pi:2*pi; >> yl = sin (x) ; Л >> y2 = s i n (x) . 2 ; >> >>
y3=sin(x).Л3; plot(x,yl,'-m',x,y2,'-.+r',x,y3,'—ok')
>> l e g e n d t ' F u n c t i o n
1', 'Function
2', 'Function
3 ', - 1 ) ;
Соответствующий график показан на рис. 6.38. Функция 1 ,1 'S, • • Функция 2 N Ь —о— Функция 3 •* -r i I \ I k \A t h \ о $\ ' \ V / i \\ + X ч -f e" i\ '' Г; 9/ И ?/ // \ U */ \ /7
Ц 1
о.е 0.6 04 02 • 0
+
+
/'
1
1
-0-2 -0.4 -0 6
\
-0.8 ...1
\
/
/
•
''А */
Рис. 6.37. График трех функций с легендой в поле графика
1 4 V
ft
08
_j_ 4-
06 0.4 0.2 0 02
И
1 fI V ' ->•
1
'•i f *
<
%
1
|
пi
i
\ i jfi
0.4 06
Функция I Функция 2 Функция 3
i
f
•
ii
•
08 -1 0
-5
w
0
¥
5
1
Рис. 6.38. График трех функций с легендой, расположенной вне поля графика В данном случае недостатком можно считать сокращение полезной площади самого графика. Остальные варианты расположения легенды пользователю предлагается изучить самостоятельно. Следует отметить, что применение легенды придает графикам более осмысленный и профессиональный вид. При необходимости легенду можно переместить мышью в подходящее место графика. 6.7.2. Маркировка линий уровня на контурных графиках К сожалению, контурные графики плохо приспособлены для количественных оценок, если их линии не маркированы. В качестве маркеров используются крес-
255
Глава 6. Графическая визуализация
вычислений
тики, рядом с которыми располагаются значения высот. Для маркировки контурных графиков используются команды группы clabel: • c l a b e l (CS,H) — маркирует контурный график с данными в контурной матрице CS и дескрипторами объектов, заданными в массиве н. Метки вставляются в разрывы контурных линий и ориентируются в соответствии с направлением линий; • c l a b e l (CS,H,V) — маркируются только те уровни, которые указаны в векторе v. По умолчанию маркируются все контуры. Позиции меток располагаются случайным образом; • clabel (cs,H, 'manual') — маркирует контурные графики с установкой положения маркеров с помощью мыши. Нажатие клавиши Enter или кнопки мыши завершает установку маркера. При отсутствии мыши для перехода от одной линии уровня к другой используется клавиша пробела, а для перемещения надписи используются клавиши перемещения курсора; • c l a b e l (CS), clabel(CS,V) и clabel (CS, 'manual') —дополнительные возможности маркировки контурных графиков. При отсутствии аргумента h метки не ориентируются вдоль линий контуров; точную позицию метки отмечает значок «плюс» (далее на рис. 6.39 показан именно этот вариант). Пример применения команды clabel приводится ниже: >> [ X , Y ] = m e s h g r i d ( [ - 3 : 0 . 1 : 3 ] ) ; >> Z = s i n ( X ) . / ( X . Л 2 + У . Л 2 + 0 . 3) ; >> C = c o n t o u r (X, Y, Z, 10) ; >> c o l o r m a p ( g r a y ) >> c l a b e l ( С )
Рисунок 6.39 показывает построение контурного графика с маркированными линиями уровня.
Рис. 6.39. Контурный график с маркированными линиями уровня Функция н = c l a b e l ( . . . )
маркирует
график и возвращает дескрипторы
создаваемых при маркировке объектов класса TEXT (И, ВОЗМОЖНО, L I N E ) .
6.7.3. Управление свойствами осей графиков Обычно графики выводятся в режиме автоматического масштабирования. Следующие команды класса axis меняют эту ситуацию: 256
6.7. Форматирование графиков • a x i s ([XMIN XMAX YMIN YMAX]) — установка диапазонов координат по осям хну для текущего двумерного графика; • a x i s ( [XMIN XMAX YMIN YMAX ZMIN ZMAX] ) — установка диапазонов координат по осям х, у и z текущего трехмерного графика; • a x i s auto — установка параметров осей по умолчанию; • a x i s manual — «замораживает» масштабирование в текущем состоянии, чтобы при использовании команды hold on следующие графики использовали те же параметры осей; • a x i s t i g h t — устанавливает диапазоны координат по осям в соответствии с диапазонами изменения данных; • axis i j — задает «матричную» прямоугольную систему координат с началом координат в левом верхнем углу, ось i — вертикальная, размечаемая сверху вниз, ocbj — горизонтальная и размечается слева направо; • axis xy — устанавливает декартову систему координат с горизонтальной осью х, размечаемой слева направо, и вертикальной осью у, размечаемой снизу вверх. Начало координат размещается в нижнем левом углу; • a x i s equal — включает масштаб с одинаковым расстоянием между метками по осям х, у и г; • a x i s image — устанавливает масштаб, при котором пикселы изображения становятся квадратами; • axis square — устанавливает текущие оси в виде квадрата (или куба в трехмерном случае) с одинаковым расстоянием между метками и одинаковой длиной осей; • a x i s normal — восстанавливает масштаб, отменяя установки a x i s equal И a x i s square; • a x i s v i s 3d — «замораживает» пропорции осей для возможности поворота трехмерных объектов; • a x i s off — убирает с осей их обозначения и маркеры; • a x i s on — восстанавливает ранее введенные обозначения осей и маркеры; • v=axis — возвращает вектор-строку, содержащую коэффициенты масштабирования для текущего графика. Если текущий график двумерный, то вектор имеет 4 компонента, если трехмерный — 6 компонентов. Следующий пример иллюстрирует применение команды axis при построении двумерного графика функции одной переменной: » х=-5:0.1:5; >> plot(x,sin(х)); » axis ( [-10 10 -1.5 1.5] ) На рис. 6.40 показан рисунок, который строится в этом примере. Обратите внимание, что теперь масштабы осей заданы командой axis, а не диапазоном изменения значений х и у. Рис. 6.40. Пример задания масштаба осей двумерного графика 257
Глава 6. Графическая визуализация вычислений 6.7.4. Включение и выключение сетки В математической, физической и иной литературе при построении графиков в дополнение к разметке осей часто используют масштабную сетку. Команды g r i d позволяют задавать построение сетки или отменять это построение: • g r i d on — добавляет сетку к текущему графику; • g r i d off — отключает сетку; • g r i d — последовательно производит включение и отключение сетки. Команды g r i d устанавливают свойства объектов XGrid, Ygrid И Zgrid i для текущих осей. Ниже приведен пример из предшествующего раздела с до-г \ ! бавлением в него команды grid: » х=-5:0.1:5; \ \ >> plot(x,sin (x)); 1 \ >> axis ( [-10 10 -1.5 1.5]) 1 >> grid on \ \J 1 Построенный график показан на рис. 6.41. Сравните этот график с графиком на рис. 6.40, на котором сетка отсутствует. Нетрудно заметить, что наличие Рис. 6.41. График синусоиды с сеткой разметки сетки облегчает количественную оценку координат точек графика. 6.7.5. Наложение графиков друг на друга Во многих случаях желательно построение многих наложенных друг на друга графиков в одном и том же окне. Для этого служит команда продолжения графических построений hold. Она используется в следующих формах: • hold on — обеспечивает продолжение вывода графиков в текущее окно, что позволяет добавлять последующие графики к уже существующим; • nold off — отменяет режим продолжения графических построений; • hold — работает как переключатель, последовательно включая режим продолжения графических построений и отменяя его. Команда hold on устанавливает значение add для свойства NextPlot объектов figure и axes, a hold off устанавливает для этого свойства значение replace. Рекомендуется также ознакомиться с командами ishold, newplot, figure и axes. Приведенный ниже пример показывает, как с помощью команды hold on на график синусоиды накладывается еще три графика параметрически заданных функций: >> х = - 5 : 0 . 1 : 5 ; >> p l o t (х,sin(x)) >> >> >> >> >>
258
n o l d on p l o t ( s i n ( x ) , c o s (x)) p l o t ( 2 * s i n ( x ) , c o s (x)) p l o t ( 4 * s i n ( x ) , c o s (x))• hold off
6.7. Форматирование Графики построенных функций показаны на рис. 6.42. В конце приведенного фрагмента программы команда hold off отключает режим добавления графиков к ранее построенным графикам.
графиков
\ \
6 . 7 . 6 . Разбиение графического окна
I
X
\ V
Бывает, что в одном окне надо расположить несколько координатных осей с различными графиками без наложения их друг на друга. Для этого используются команды subplot, применяемые перед построением графиков:
Рис. 6.42. Графики синусоиды и трех Параметрических функций в одном окне
• subplot — создает новые объекты класса axes (подокна); • subplot (m,n,p) или subplot (mnp) — разбивает графическое окно на т х п подокон, при этом m — число подокон по горизонтали, п — число подокон по вертикали, а р — номер подокна, в которое будет выводиться текущий график (подокна отсчитываются последовательно по строкам); • subplot (Н), где Н — дескриптор для объекта axes, дает альтернативный способ задания подокна для текущего графика; • s u b p l o t ( ' p o s i t i o n ' , [ l e f t bottom width h e i g h t ] ) —создает подокно с заданными нормализованными координатами (в пределах от 0 . О до 1. 0); • subplot (111) и elf r e s e t — удаляют все подокна и возвращают графическое окно в обычное состояние. Следующий пример иллюстрирует применение команды subplot: » х=-5:0.1:5; subplot (2,2,1) ,plot(x,sin(x) ) subplot (2,2,2) , plot (sin (5*x),cos(2*x+0.2) ) subplot(2,2, 3) ,contour(peaks) subplot (2,2, ,surf(peaks) В этом примере последовательно строится четыре графика различного типа, размещаемых в разных подокнах (рис. 6.43).
1 0.5 \ 0 -0 5 ,1
С"'
/ \ / \
0
.
5
0
-
0
0
40 30 20 10
-
1
•
(
J
O
>
'
/
*
1
2
0
3
0
05
-41
^
^
0
I
5
10
-0.5 0
0
0
•
--'"'^
5
4
0
0
0 0
Рис. 6.43. Четыре графика различного типа, размещенных в подокнах одного окна 259
Глава 6. Графическая визуализация вычислений Следует отметить, что для всех графиков возможна индивидуальная установка дополнительных объектов, например титульных надписей, надписей по осям и т. д.
6.7.7. Изменение масштаба графика Для изменения масштаба двумерных графиков используются команды класса zoom:
• zoom — переключает состояние режима интерактивного изменения масштаба для текущего графика; • zoom (FACTOR) - устанавливает масштаб в соответствии с коэффициентом FACTOR;
• zoom on — включает режим интерактивного изменения масштаба для текущего графика; • zoom off — выключает режим интерактивного изменения масштаба для текущего графика; • zoom out — обеспечивает полный просмотр, то есть устанавливает стандартный масштаб графика; • z.oom xon или zoom yon — включает режим изменения масштаба только по оси х или по оси у; • zoom r e s e t — запоминает текущий масштаб в качестве масштаба по умолчанию для данного графика; • zoom ( F I G , OPTION) — применяется к графику, заданному дескриптором FIG, при этом OPTION может быть любым из перечисленных выше аргументов. Команда zoom позволяет управлять масштабированием графика с помощью мыши. Для этого надо подвести курсор мыши к интересующей вас области рисунка. Если команда zoom включена (on), то нажатие левой кнопки увеличивает масштаб вдвое, а правой — уменьшает вдвое. При нажатой левой кнопке мыши можно выделить пунктирным черным прямоугольником нужный участок графика — при отпускании кнопки он появится в увеличенном виде и в том масштабе, который соответствует выделяющему прямоугольнику. Рассмотрим работу команды zoom на следующем примере » х=-5:0.01:5; >> plot (x,sin (х.Л5)./(х.A5+eps)) >> zoom on Рисунок 6.44 показывает график функции данного примера в режиме выделения его участка с помощью мыши. После прекращения манипуляций левой кнопкой мыши график примет вид, показанный на рис. 6.45. Теперь в полный размер графического окна будет развернуто изображение, попавшее в выделяющий прямоугольник. Команда zoom, таким образом, выполняет функцию «лупы», позволяющей наблюдать в увеличенном виде отдельные фрагменты сложных графиков. Однако следует учитывать, что для наблюдения фрагментов графиков при высоком увеличении они должны быть заданы большим количеством точек. Иначе вид отдельных фрагментов и тем более особых точек (в нашем случае это точка при х вблизи нуля) будет существенно отличаться от истинного. 260
6.8. 0.15
0.1
0 613S . •4 . 0.2 0 -0.2
5 -
0.05
О -0.05 •
-0.1
та»-—i—
Рис. 6.44. Выделение части графика мышью при использовании команды zoom
-0.15 •
(овая окраска графиков
ъ, 1/
I-1 • ii
\ i
-0 2 •
Г
1.2
1.4
16
1.1
Рис. 6.45. График выделенного участка
6 . 8 . Цветовая о к р а с к а г р а ф и к о в 6 . 8 . 1 . Установка палитры цветов Поскольку графика MATLAB обеспечивает получение цветных изображений, в ней есть ряд команд для управления цветом и различными световыми эффектами. Среди них важное место занимает установка палитры цветов. Палитра цветов RGB задается матрицей MAP ИЗ трех столбцов, определяющих значения интенсивности красного (red), зеленого (green) и синего (blue) цветов. Их интенсивность задается в относительных единицах от 0 . 0 до 1.0. Например, [0 0 0] задает черный цвет, [1 1 1] — белый цвет, [0 0 1] — синий цвет. При изменении интенсивности цветов в указанных пределах возможно задание любого цвета. Таким образом, цвет соответствует общепринятому формату RGB. Для установки палитры цветов служит команда colormap, записываемая в следующих формах: • colormap (' d e f a u l t ' ) — устанавливает палитру по умолчанию, при которой распределение цветов соответствует радуге; • colormap (MAP) — устанавливает палитру RGB, заданную матрицей MAP; • C=colormap — функция возвращает матрицу текущей палитры цветов С. т-файл с именем colormap устанавливает свойства цветов для текущего графика. Команда help graph3d наряду с прочим выводит полный список характерных палитр, используемых графической системой MATLAB: • hsv — цвета радуги; • hot — чередование черного, красного, желтого и белого цветов; • gray — линейная палитра в оттенках серого цвета; • bone — серые цвета с оттенком синего; • • copper — линейная палитра с оттенками меди; j : • pink — розовые цвета с оттенками пастели; ''• ' • white — палитра белого цвета; • flag — чередование красного, белого, синего и черного цветов; • l i n e s — палитра с чередованием цветов линий; • colorcube — расширенная палитра RGB; 261
Глава 6. Графическая визуализация вычислений • j e t — разновидность палитры HSV; • prism — призматическая палитра цветов; • cool — оттенки голубого и фиолетового цветов; • autumn — оттенки красного и желтого цветов; • spring — оттенки желтого и фиолетового цветов; • winter — оттенки синего и зеленого цветов; • summer — оттенки зеленого и желтого цветов. Все эти палитры могут служить параметрами команды colormap, например colormap (hsv) фактически устанавливает то же, что и команда colormap ('def a u l t ' ) . Примеры применения команды colormap будут приведены в следующих разделах.
6.8.2. Установка соответствия между палитрой цветов и масштабом осей При использовании функциональной окраски важное значение имеет установка соответствия между палитрой цветов и масштабом координатных осей. Так, выбор ограниченного диапазона интенсивностей цветов может привести к тому, что цветовая гамма будет блеклой и функциональная закраска не будет достигать своих целей. С помощью команды caxis можно обеспечить соответствие между палитрой цветов и масштабом осей: • caxis (v) — с помощью двухэлементного вектора v со списком элементов [cmin cmax] устанавливает диапазон используемой палитры цветов для объектов surface и patch, создаваемых такими командами, как mesh, pcolor и surf. Пикселы, цвета которых выходят за пределы [cmin cmax], приводятся к граничным цветам диапазона; • caxis ('manual') — устанавливает шкалу цветов по текущему интервалу параметра, задающего цвет; • caxis ( ' a u t o ' ) — устанавливает типовое масштабирование шкалы цветов, при котором диапазон используемых цветов соответствует диапазону изменения данных от -Inf до Inf. Линии и грани с цветами, равными NaN, отсекаются. Функция caxis возвращает двухэлементный вектор с элементами [cmin cmax] для текущего светового эффекта, m-файл с именем caxis задает свойства CLim и CLimMode объекта axes (см. команду help axes).
6.8.3. Окраска поверхностей Для окраски поверхностей используется команда shading, которая управляет объектами surface (поверхность) и patch (заплата), создаваемыми командами и функциями surf, mesh, pcolor, f i l l и f i l l 3 . Команда shading (затенение) работает с параметрами и имеет следующий вид: • shading f l a t — задает окраску ячеек или граней в зависимости от текущих данных; • shading i n t e r p — задает окраску с билинейной интерполяцией цветов; • shading faceted — равномерная раскраска ячеек поверхности (принята по умолчанию). 262
6.8. Цветовая окраска графиков Эти команды устанавливают свойства EdgeColor и FaceColor для графических объектов surface и patch в зависимости от того, какая из команд — mesh (сетчатая поверхность) или surf (затененная поверхность) — используется. Примеры применения команд shading уже приводились. 6.8.4. Установка палитры псевдоцветов Довольно часто возникает необходимость представления той или иной матрицы в цветах. Для этого используют псевдоцвета, зависящие от содержимого ячеек. Такое представление реализуют команды класса pcolor: • pcolor (С) — задает представление матрицы с в псевдоцвете; • pcolor (X, Y, С) — задает представление матрицы с на сетке, формируемой векторами или матрицами х и Y. Функция pcolor возвращает дескриптор объекта класса surface. Пример применения команды pcolor приводится ниже: >> z=peaks (40) ; >> colormap(hsv) >> p c o l o r (z) График, построенный в этом примере, показан на рис. 6.46.
4Е « h
35
•;
• !•-
30
•+
25
н F4-44-
15 1U
4щ4- ma4
i! -
-_
•
• • •
4-
# # -
5
Рис. 6.46. Пример применения команды pcolor Характер расцветки поверхности командой pcolor существенно зависит от выбора палитры цветов. В приведенном примере она задается командой colormap. 6.8.5. Создание закрашенного многоугольника Для создания закрашенного пятна в виде многоугольника может использоватьi. i команда patch: • p a t c h (X, У, С) — создает закрашенный многоугольник, вершины которого заданы векторами х и Y в текущей системе координат, а спецификация окраски задана вектором цветовой палитры с. Можно также задавать цвет с помощью символьной переменной ' c o l o r ' вида ' г ' , ' д ' , ' Ь ' , ' с ' , ' т ' , ' у ' , ' w' или ' к ' . X и Y могут быть матрицами; • p a t c h (X, У, Z, С) — создает многоугольник в трехмерной системе координат, при этом матрица z должна иметь тот же размер, что X и Y. 263
Глава 6. Графическая визуализация
вычислений
Следующий пример поясняет применение команды patch: » Х=[1 2 3 2 1 ] ; » Y=[1 2 0 5 1 ] ; >> patch(X,Y, [1 0 0]) Построенный многоугольник показан на рис. 6.47.
Рис. 6.47. Многоугольник, построенный командой patch В данном случае многоугольник окрашен красным цветом, поскольку вектор цветов [ 1 0 0] указывает на наличие только красной составляющей цвета (другие составляющие представлены относительным уровнем 0).
6.8.6. Окраска плоских многоугольников Для построения окрашенных в заданный цвет плоских многоугольников может использоваться команда f i l l (заполнить): • fill(x,Y,C) — строит закрашенный плоский многоугольник, вершины которого задаются векторами х и Y с цветом, заданным с. Многоугольник должен быть замкнутым. Для построения нескольких прямоугольников параметры команды должны быть матрицами. • f i l l (XI, Yl,ci,X2, Y2, С2, . . .) — представляет собой другой способ построения нескольких закрашенных прямоугольников. Следующий пример показывает построение четырехугольника, закрашенного синим цветом: » Х=[1 2 3 2 1 ] ; » Y=[5 0.5 0 4 5 ] ; » f i l l ( X , Y , [ 0 0 1]) Построения, реализованные этим примером, показаны на рис. 6.48. Функция н = f i l l ( . . . ) строит график и возвращает вектор-столбец дескрипторов для созданных объектов класса patch, по одному дескриптору на каждый объект.
6.8.7. Вывод шкалы цветов При использовании функциональной окраски весьма полезным является вывод шкалы цветов командой colorbar. Ее варианты перечислены ниже: 264
6.8. Цветовая окраска
графиков
1.2 1.4 1.6 1 Рис. 6.48. Построение закрашенного четырехугольника на плоскости • c ol o r b a r ( ' v e r t ' ) — выводит вертикальную шкалу цветов на текущий график; • colorbar ( ' h o r i z ') — выводит горизонтальную шкалу цветов на текущий график; • c o l o r b a r (Н) — выводит шкалу цветов на график с дескриптором н с автоматическим размещением шкалы по вертикали или по горизонтали в зависимости от соотношения размеров графика; • c o l o r b a r — устанавливает в текущий график новую вертикальную шкалу цветов или обновляет уже имеющуюся. Следующий пример показывает применение команды colorbar совместно с командой f i l l 3 : » f i l l 3 ( r a n d ( 5 , 4 ) , r a n d ( 5 , 4 ) , r a n d ( 5 , 4 ) , rand(5, 4) ) >> c o l o r b a r ( ' v e r t ' ) Более подробно функция f i l l 3 будет рассмотрена ниже. На рис. 6.49 показана полученная при запуске этого примера картина. Следует отметить, что, поскольку многоугольники строятся со случайными значениями координат вершин, то при каждом запуске будет наблюдаться новая картина. Функция н = colorbar ( . . . ) возвращает дескриптор для объекта axes со шкалой цветов.
Рис. 6.49. Случайные многоугольники с функциональной окраской и вертикальной шкалой цветов 265
Глава 6. Графическая визуализация
вычислений
6 . 8 . 8 . Цветные плоские круговые диаграммы Закрашенные секторы часто используются для построения круговых диаграмм. Для этого в MATLAB служит команда p i e : • p i e (X) — строит круговую диаграмму по данным нормализованного вектора X / S U M ( X ) . SUM(X)
- сумма элементов вектора. Если S U M ( X ) < = 1 . 0 , то
значения в х непосредственно определяют площадь секторов; • p i e (х, EXPLODE) — строит круговую диаграмму, у которой отрыв секторов от центра задается вектором EXPLODE, который должен иметь тот же размер, что и вектор данных х. Следующий пример строит цветную круговую диаграмму с пятью секторами, причем последний сектор отделен от остальных: » Х=[1 2 3 4 5] ; >> p i e ( X , [0 0 0 0 2]) Построенная диаграмма показана на рис. 6.50.
20%
27% Рис. 6.50. Плоская круговая диаграмма Функция H=pie ( . . . ) строит график и возвращает вектор дескрипторов созданных объектов классов p a t c h и t e x t . 6 . 8 . 9 . Окрашенные многоугольники в пространстве Для закраски многоугольников, определенных в пространстве, служит команда f i l l 3 . Ниже представлены основные ее формы: • f i l l 3 (X, Y, z, С) — строит закрашенный многоугольник в пространстве с данными вершин, хранящимися в векторах х, Y и z, и цветом, заданным палитрой с. При построении нескольких закрашенных многоугольников параметры команды должны быть матрицами; • f i l l 3 (XI, Yl, z i , C1,X2, Y2, Z2, C2, . . .) — другой вариант построения нескольких закрашенных многоугольников в пространстве; • f i l l 3 — функция, возвращающая вектор-столбец дескрипторов объектов класса p a t c h . 266
6.8. Цветовая окраска
графиков
Следующий пример показывает действие команды f i l l 3 : >>
fill3(rand(5,4),rand(5,4),rand(5,4),rand(5,4))
На рис. 6.51 представлены построенные в этом примере закрашенные многоугольники. Поскольку координаты вершин многоугольников формируются с применением генератора случайных чисел, то наблюдаемая картина оказывается случайной и не будет повторяться при последующих запусках данного примера. Следует обратить внимание на то, что команда f i l l 3 дает функциональную закраску построенных фигур. 6 . 8 . 1 0 . Цветные объемные круговые диаграммы Иногда используются объемные круговые диаграммы. Для их построения служит команда pie3: • pie3 ( . . . ) — аналогична команде p i e ( . . . ) , но дает построение объемных секторов. В приведенном ниже примере строится объемная диаграмма с отделением двух секторов, показанная на рис. 6.52. >> Х= [1 2 3 4 5 ] ; >> p i e 3 ( X , [0 0 1 0
1])
Функция н = pie3 ( . . . ) строит график и возвращает вектор, содержащий дескрипторы созданных объектов классов patch, surface и text.
7%
Рис. 6.51. Закрашенные многоугольники в пространстве
Рис. 6.52. Объемная круговая диаграмма
6 . 8 . 1 1 . Другие команды управления световыми эффектами Здесь мы только отметим некоторые дополнительные команды, связанные с управлением цветовыми палитрами: • • • • • •
c o l s t y l e — выделение цвета и стиля графика из заданного массива; rgbplot — изображение палитры; hsv2rgb — преобразование палитры HSV в палитру RGB; rgb2hsv — преобразование палитры RGB в палитру HSV; b r i g h t e n — управление яркостью; c o n t r a s t — управление контрастом; 267
Глава 6. Графическая визуализация вычислений • hidden — управление показом невидимых линий; • whitebg — управление цветом фона. Рекомендуется ознакомиться с информацией об этих командах с помощью команды help.
6.9. Другие возможности графики 6 . 9 . 1 . Построение цилиндра Для построения цилиндра в виде трехмерной фигуры применяется функция cylinder:
• [X, Y, Z] = c y l i n d e r (R,N) — создает массивы X, Y и Z, описывающие цилиндрическую поверхность с радиусом R и числом узловых точек N для последующего построения с помощью функции s u r f (X, Y, Z); • [X, Y, z] = c y l i n d e r (R) и [X, Y, z] = c y l i n d e r — подобны предшествующей функции для N = 2 0 H R =
[11].
Пример построения объемного цилиндра: >> [X, Y, Z]=cylinder(10,30) ; >> surf(X,Y,Z,X) На рис. 6.53 показан результат построения цилиндра для данного примера.
Рис. 6.53. Построение цилиндра Естественность воспроизведения цилиндра существенно зависит от графической команды, используемой для его построения. Команда surf дает возможность задать функциональную окраску с цветом, определяемым вектором X, что делает представление цилиндра достаточно наглядным. 6 . 9 . 2 . Построение сферы Для расчета массивов х, Y и z координат точек сферы как трехмерной фигуры используется функция sphere: • [X, Y, Z] =sphere (N) — генерирует матрицы X, Y и Z размера (N + 1) х (N + 1) для последующего построения сферы с помощью команд SUrf(X,Y,Z)
268
ИЛИ s u r f 1 (X,Y,Z) ;
6.9. Другие возможности графики • [X,Y, Z]=sphere — аналогична предшествующей функции при N = 20. Пример применения этой функции: » »
[X,Y,Z]=sphere(30); surfl(X,Y,Z)
На рис. 6.54 показана построенная в этом примере сфера. Хорошо видны геометрические искажения (сфера приплюснута), связанные с разными масштабами по координатным осям.
Рис. 6.54. Построение сферы Обратите внимание на то, что именно функциональная окраска сферы придает ей довольно реалистичный вид. В данном случае цвет задается вектором z.
6.9.3. ЗО-графика с треугольными плоскостями К числу специальных видов графики относится построение объемных фигур с помощью плоских треугольников. Для построения таких фигур в виде каркаса (без окраски и отображения плоскостей) используется команда trimesh: • trimesh (TRI,X,Y, Z,С) — построение объемной каркасной фигуры с треугольниками, специфицированными матрицей поверхности T R I , каждая строка которой содержит три элемента и задает одну треугольную грань путем указания индексов, по которым координаты выбираются из векторов х, Y, z. Цвета ребер задаются вектором с; • trimesh ( T R I , X , Y, Z) — построение, аналогичное предшествующему при с = Z, то есть с цветом ребер, зависящим от значений высоты; • H=trimesh ( . . . ) — строит график и возвращает дескрипторы графических объектов; • t r i m e s h ( . . . , ' p a r a m ' , ' v a l u e ' , 'param', ' v a l u e ' . . . ) — добавляет значения ' v a l u e ' для параметров 'param 1 . Следующий пример иллюстрирует применение команды trimesh для построения случайной объемной фигуры, параметры которой задаются с помощью генератора случайных чисел: » х = rand(l,40) ; » у = rand(l,40) ; » z = sin(x.*y); >> t r i = delaunay(x,у);
269
Глава 6. Графическая визуализация вычислений >> trimesh(tri,x,у,z) Одна из построенных фигур показана на рис. 6.55.
Q4-. . 0.2...
:
у\"
i ^^
Рис. 6.55. Одна из объемных фигур, построенных командой trimesh Другая, абсолютно аналогичная по заданию входных параметров команда — t r i s u r f (. . .) — отличается только закраской треугольных областей, задающих трехмерную фигуру. Если в приведенном выше примере заменить функцию t r i mesh на t r i s u r f , то можно получить графики, подобные приведенному на рис. 6.56.
Рис. 6.56. Один из рисунков, построенных командой trisurf Обратите внимание на то, что рис. 6.56 также принадлежит к множеству случайных графических построений. Поэтому возможность его буквального повторения отсутствует.
270
,n^PHi ltf*o
a
340, .
rtJ
on
с
ода £
cO6ov\
rpa( 7/V.*'
np°
7.1. Анимационная графика 7.1.3. Основные средства анимации Для более сложных случаев анимации возможно применение техники мультипликации. Она сводится к построению ряда кадров изображения, причем каждый кадр появляется на некоторое время, затем стирается и заменяется на новый кадр, несколько отличающийся от предшествующего. Если это отличие незначительно, то создается иллюзия плавного перемещения объекта. Отметим кратко основные команды, реализующие анимацию в системе MATLAB: • capture — захват видеоизображения; • getf rame — создание кадра для анимации; • moviein — выполнение анимации; • r o t a t e — вращение фигуры; • f rame2im — преобразование кадра в графический образ; • im2 frame — преобразование графического образа в кадр. Применение некоторых из этих команд мы рассмотрим далее на конкретных примерах. К сожалению, серьезные задачи анимации обычно требуют применения программных средств — главным образом циклов. Мы рассмотрим их далее, но представляется, что читатели знакомы с понятием циклов, так что приведенные примеры не будут слишком сложны для их понимания. В крайнем случае, оставьте их разбор до знакомства с основами программирования в системе MATLAB (Глава 10).
7.1.4. Вращение фигуры — логотипа MATLAB Рассмотрим вначале не очень сложный пример вращения сложной трехмерной поверхности — логотипа системы MATLAB, который представлен файлами logo.m и logo.mat. Ниже представлен фрагмент программы, обеспечивающий вращение этой поверхности (фигуры) относительно осей системы координат: if -exist('MovieGUIFlag'), load logo
figNumber=0;
end;
h=surf1(L,source); colormap(M); ax=[7 52 7 5 2 -.5 .8]; axis(ax); axis on; shading interp; m=moviein (25); for n=l:25, rotate (h, [0 90],15, [21 21 0]); 1 h=surf1(get(h,'XData ),get(h,'YData'),get(h,'ZData'),source); axis(ax); axis on; shading i n t e r p ; m(:,n)=mvframe(figNumber,24); end; ravstore(figNumber,m); 273
Глава 7. Анимационная и дескрипторная графика Эта программа имеет два блока: в первом задается исходная функция и ее образ, а во втором (с циклом for) выполняется создание кадров и их последовательное воспроизведение, создающее эффект анимации. На рис. 7.3 показан стоп-кадр полученной анимации. 7.1.5. Волновые колебания мембраны Принцип мультипликации легко распространить на существенно более Рис. 7.3. Стоп-кадр программы, сложные задачи анимации. В качестве обеспечивающей вращение фигуры — иллюстрации можно рассмотреть сислоготипа MATLAB темный пример vibes, демонстрирующий волнообразные колебания тонкой пластины — мембраны. Ниже представлен переработанный файл данного примера, в котором сокращены подробные комментарии на английском языке и введены (только для пояснения) комментарии на русском языке: %Волновые колебания мембрань: %Переработка файла VIBES фирмы MathWorks, I n c . i f - e x i s t ( ' M o v i e G U I F l a g ' ) ; figNumber=O; end; hlpStr= . . . [ ' Это пример анимации — наблюдение колебаний ' 1 трехмерной поверхности — мембраны. ' ] ; mvinit(figNumber,hlpStr); % Загрузка данных функции load v i b e s d a t ; [ n,n] = s i z e ( L l ) ; nh = fix(n/2) ; x = (-nh:nh)/nh; % Вычисление коэффициентов clear с for k = 1:12 e v a l ( [ ' c ( k ) = L' num2str(k) ' (24, 13)/3; ' ]) end; % Установка графических параметров axis([-1 1 -1 1 -1 1] ) ; caxis(26.9*[-1.5 1] ) ; colormap(hot); hold on % Генерация кадров мультипликации delt = 0.1; nframes = 12; M = moviein(nframes); for k = 1:nframes, % Коэффициенты t = k*delt;
274
7.2. Основы дескрипторной графики s = с.*sin(sqrt(lambda)*t); % Амплитуды s(4)*L4 + s(5)*L5 L = s(l)*Ll + s(2)*L2 + s(3)*L3 s (6)*L6 + ... s(7)*L7 + s(8)*L8 + s(9)*L9 + s(10)*L10 s(12)*L12; % Скорость s
= s
.*
мультипликации lambda;
V = s(l)*Ll s (6)*L6
s(7)*L7 s
+ s(2)*L2
+
s(3)*L3
s(4)*L4 + s(5)*L5
+ . . . + s(8)*L8
+ s(9)*L9
+ s(10)*L10
+
s(l
(12)*L12;
% График поверхности; цвет задается V(l:nh,l:nh) = NaN*ones(nh,nh); Cla surf (x, x, L, V) ; axis off
скоростью
% Создание кадров мультипликации M(:,k) = mvframe(figNumber,nframes); end; hold off % Запись кадров мультипликации mvstore(figNumber,M);
Этот пример дан с целью иллюстрации, и подробно эту программу мы описывать не будем. Ограничимся приведением заключительного кадра (рис. 7.4) анимации, показывающей колебания мембраны. В конце этой главы описаны средства анимации низкоуровневой дескрипторной графики.
Рис. 7.4. Заключительный кадр анимации, демонстрирующей колебания мембраны
7.2. Основы дескрипторной графики 7 . 2 . 1 . Объекты дескрипторной графики Как уже отмечалось, графические средства MATLAB базируются на низкоуровневой графике, которая называется дескрипторной (описательной) или handle-графикой. По существу, эта графика обеспечивает объектно-ориентированное программирование как всех рассмотренных выше графических команд, так и пользовательского интерфейса. Графический редактор дескрипторной графики Property Editor в MATLAB 6.* является основным редактором графики и нами уже использовался. Хотя обычный пользователь может даже не знать о существовании дескрипторной графики ввиду того, что слово «дескрипторная» в сокращенное название графического ре275
Глава 7. Анимационная
и дескрипторная
графика
дактора не входит, все же надо учитывать, что именно дескрипторная графика дает новые, подчас уникальные возможности создания пользовательских графических программ MATLAB 6, не говоря уже о том, что она помогает понять, каким образом реализованы графические средства системы. Именно поэтому ниже дается достаточно краткое описание дескрипторной графики (более подробно о ней можно прочитать в [51]). Центральным понятием дескрипторной графики является графический объект. Имеются следующие типы таких объектов: • root (корень) — первичный объект, соответствующий экрану компьютера; • figure (рисунок) — объект создания графического окна; • u i c o n t r o l (элемент управления, определенный пользователем) — объект создания элемента пользовательского интерфейса; • axes (оси) — объект, задающий область расположения графика в окне объекта figure; • uimenu (определенное пользователем меню) — объект создания меню; • uicontextmenu (определенное пользователем контекстное меню) — объект создания контекстного меню; • image (образ) — объект создания растровой графики; • l i n e (линия) — объект создания линии; • patch (заплата) — объект создания закрашенных фигур; • r e c t a n g l e (прямоугольник) — объект создания закрашенных прямоугольников; • surface (поверхность) — объект создания поверхности; • t e x t (текст) — объект создания текстовых надписей; • l i g h t (свет) — объект создания эффектов освещенности. Объекты подчас взаимосвязаны и могут обращаться друг к другу для получения того или иного графического эффекта.
7.2.2. Создание графического окна и управление им Прежде чем мы рассмотрим применение дескрипторной графики на реальных примерах, отметим команды и функции, которые предназначены для создания графических окон и управления ими: • figure — открыть чистое графическое окно; • gcf — получить дескриптор текущего графического окна figure; • elf — очистить графическое окно; • shg — показать ранее свернутое графическое окно; • close (закрыть) — закрыть графическое окно; • r e f r e s h (обновить) — обновить графическое окно. Эти команды и функции достаточно очевидны, и мы не будем обсуждать их подробно. Заметим, что команды help name или doc name позволяют уточнить назначение той или иной команды или функции с обобщенным именем name.
7.2.3. Создание координатных осей и управление ими Еще одна группа простых команд служит для создания координатных осей и управления ими: 276
7.2. Основы дескриптор ной графики • • • • • •
axes (оси) — создать оси координат; box (ящик) — построить прямоугольник вокруг рисунка; c l a — убрать построения axes; gca — получить дескриптор графического объекта axes; hold — сохранить оси координат; i s h o l d — проверка статуса hold (1, если оси сохранены, и 0 в противоположном случае). Эти команды также достаточно очевидны. Заметим, что их можно использовать и в обычной (высокоуровневой) графике, например, для устранения осей из уже созданного графика. 7.2.4. Пример применения объекта дескрипторной графики Приведем пример задания и использования графического объекта. Пусть надо построить линию, проходящую через три точки с координатами (0,1), (2,4) и (5,-1). Для этого воспользуемся объектом l i n e , который порождается одноименной графической функцией: »
line([0 2 5],[1 4
-1],'Color'
На рис. 7.5 построена заданная линия с помощью дескрипторной команды l i n e , которая явно не входит в высокоуровневую графику. Однако нетрудно понять, что именно эта команда составляет основу высокоуровневой команды p l o t , описанной ранее. Особенность команды l i n e заключается в явном задании всех условий построения графика: координат конкретных точек, параметра цвета ' Color ' и самого цвета ' b l u e ' (синий). В итоге строятся два отрезка прямой, проходящие через заданные точки и имеющие синий цвет.
'blue') •:• 4 / /
/
3 : 2-5 :' " 2 •
\ \
\
N
/
/
\ \ \
35 xD -0 5
\
0
.
5
•
3
Э
3S
А
45
S л.
1
•
Рис. 7.5. Построение отрезков прямой объектом line
7.2.5. Дескрипторы объектов С понятием объектов дескрипторной графики связана особая характеристика объектов — дескриптор (описатель). Его можно понимать, как некое число — своеобразный идентификатор («распознаватель») объектов. Дескриптор объектов root всегда равен 0, а дескриптор объектов figure (рисунок) — это целое число, указывающее на номер графического окна. Дескрипторы других объектов — это числа с плавающей запятой. По значениям дескрипторов MATLAB идентифицирует объекты. Дескриптор одного такого объекта представляет собой одно число, а если объектов несколько — несколько чисел (вектор). Например, следующие команды строят пять графиков, представляющих значения элементов магической матрицы (магического квадрата), в одном окне: >> A=magic(5); » h=plot(A) h = 277
Глава 7. Анимационная и дескрипторная графика 3.0013 101.0009 102.0004 103.0004 104.0004
В данном случае вектор h содержит дескрипторы элементов графика, показанного на рис. 7.6. Мы еще раз обращаем ваше внимание на то, что дескрипторы дают лишь внутреннее описание того или иного объекта и ассоциировать их явно с Рис. 7.6. Графики пяти функций, привычными параметрами, например, представляющих значения элементов координатами или цветом объекта, не магической матрицы magic(5) следует. Более того, нет никаких оснований считать их одинаковыми для разных версий MATLAB, для разных компьютерных платформ и даже для одинаковых команд, но в разных местах сессии.
7.2.6. Операции над графическими объектами К графическим объектам применяется ряд операций: • • • • • •
set — установка свойств (параметров) графического объекта; get — вывод свойств графического объекта; r e s e t — восстановить свойства графического объекта по умолчанию; d e l e t e — удалить созданный графический объект; дсо — возвращает дескриптор текущего графического объекта; gebo — возвращает дескриптор объекта, чья функция в данный момент выполняется; • gcbf — возвращает дескриптор окна, содержащего объект, функция которого в данный момент выполняется; • drawnow — выполнить очередь задержанных графических команд; • findobj — найти объекты с заданными свойствами; • copyobj — скопировать объект и порожденные им объекты. Кроме того, имеются три утилиты, связанные с операциями над объектами: • closereq — закрыть окно по запросу; • ishandle — проверить дескриптор на истинность; • newplot — восстановить свойства объекта, измененные nextPlot. Назначение большинства этих операций достаточно очевидно. Мы остановимся на двух наиболее важных операциях, связанных с контролем и установкой свойств объектов. 7 . 2 . 7 . Свойства объектов — команда get Каждый объект дескрипторной графики имеет множество параметров, определяющих его свойства. Многие свойства задаются по умолчанию и определяют такие важные характеристики объекта, как его стиль, наличие и тип координатных 278
7.2. Основы дескрипторной графики осей и маркеров, цветовое и световое оформление и т. д. Для получения списка свойств и их значений объекта h используется команда get, например в формах: get(h),
g e t (h, ' P r o p e r t y N a m e ' ) , a = g e t ( h , ' D e f a u l t ' ) . . .
Рассмотрим ее применение. Для этого вернемся к нашему примеру с построением графика из двух отрезков линии и повторим этот пример в следующем виде: » h=line([0 h = 3.0010
2 5 ] , [ 14 - 1 ] , ' C o l o r ' , ' b l u e ' )
Теперь объект имеет дескриптор h, и его значение выведено наряду с построением графика. Команда get (h) выводит свойства объекта с заданным именем: >> get(h) Color = [ 0 0 1] EraseMode = normal LineStyle = LineWidth = [0.5] Marker = none MarkerSize = [6] . MarkerEdgeColor = auto MarkerFaceColor = none XData = [0 2 5] YData = [ 1 4 -1] ZData = [J BeingDeleted = off ButtonDownFcn = Children = [] Clipping = on CreateFcn = DeleteFcn = BusyAction = queue HandleVisibility = on HitTest = on Interruptible = on Parent = [100.001] Selected = off SelectionHighlight = on Tag = Type = line UIContextMenu = [] UserData = [] Visible = on
Вы видите, что эта команда выводит довольно обширный список свойств графического объекта (в нашем случае линии), заданных по умолчанию. Он содержит свойства, характерные и для других графических объектов.
7.2.8. Изменение свойств объекта — команда set С помощью команды s e t можно изменить отдельные свойства объекта h дескрипторной графики. Эта команда имеет ряд параметров, и с ними можно ознако279
Глава 7. Анимационная и дескрипторная графика миться с помощью команд h e l p s e t или doc s e t . Приведем некоторые варианты ее задания:
set (h, 'PropertyName',PropertyValue, . . . ) • set(h,a) set(h,pn,pv...) set(h,pn,<m-by-n c e l l array>) a= s e t ( h ) a= s e t (h, ' D e f a u l t ' ) a- set(h,'DefaultObjectTypePropertyName') = s e t (h, 'PropertyName') . . . С учетом значений слов, входящих в параметры (Property — свойство, Name — имя, Value — значение Default — по умолчанию и т. д.), их смысл вполне очевиден. В связи с этим ограничимся примером — допустим, нам надо сменить цвет линии с голубого по умолчанию на красный. Для этого достаточно выполнить следующую, первую из приведенных, команду: >> set (h, 'Color', ' r e d ' )
Обратите внимание, что при этом цвет сменится на ранее построенном рисунке с дескриптором h. Еще раз обращаем внимание читателя на то, что все свойства, заданные командой s e t и выводимые командой get, доступны при использовании редактора графики. 7.2.9. Просмотр свойств Подробное описание всех свойств графических объектов и возможных их значений выходит за рамки допустимого для данной главы объема материала. Да, что видно из изложенного ниже, оно и не очень необходимо. Ряд наиболее важных и не сразу понятных свойств описан в разделе этой главы, посвященном дескрипторной растровой графике. Надо отметить, что для большинства свойств их назначение вполне очевидно уже из их названия. Редактор свойств графических объектов позволяет оперативно экспериментировать со свойствами объектов, менять их и наблюдать результаты этого изменения. Это делает установку свойств интуитивно понятной и достаточно простой. С помощью команды s e t (h, ' P r o p e r t y ' ) можно вывести полный список значений того или иного свойства конкретного объекта h. Например, выясним, какого стиля можно выводить линии в нашем последнем примере: >> s e t (h, ' L i n e S t y l e ' ) [ !-}
I -
I : I -.
I none ]
Или выясним, какого вида может быть задан графический курсор (маркер): >> s e t (h, ' M a r k e r ' ) [ + I о | * | . I x | s q u a r e | diamond | v | p e n t a g r a m | hexagram | {none} ]
Л
| > | < |
Таким образом, команды set и get позволяют легко устанавливать, контролировать и менять свойства объектов дескрипторной графики без утомительного поиска нужных свойств по справке или весьма объемной технической документации. Для детального знакомства со свойствами и их параметрами надо обращаться к справке по ним (перевод ее можно найти в [51]). 280
7.2. Основы дескрипторной
графики
7.2.10. Примеры дескрипторной графики Теперь рассмотрим более сложные примеры, наглядно демонстрирующие возможности дескрипторной графики. Воспользовавшись командой File • New • M-File или e d i t msl .m, создадим файл msl.m следующего содержания: [x,y]
= meshgrid([-2:.4:2] ) ;
Z =sin(x.
Л
2 +у . Л 2 ) ;
fh = figure('Position', [350 275 400 300],'Color','w ' ) ; ah = axes('Color1, [-8 .8 .8], 'XTick', [-2 -1 0 1 2] , .. . 'YTick',[-2 -1 0 1 2]); sh = surface('XData',x,'YData',y,'ZData',Z,... 'FaceColor',get(ah,'Color')+.1,... 'EdgeColor','k','Marker','o',... 'MarkerFaceColor', [ .5 1 .85]); В этом файле заданы три объекта: прямоугольник fh — объект класса figure, оси с метками ah — объект класса axes и трехмерная поверхность sh — объект класса surface. При первом запуске файла msl появится плоская сетка, показанная на рис. 7.7. Она является результатом наложения объектов f h и ah друг на друга. При этом объект ah класса axes явно наследует свойства объекта fh класса figure. Наследование здесь проявляется в том, что при задании свойства «цвет граней» (FaceColor) объекта sh используется осветление (добавлением константы 0.1) цвета осей, полученного при помощи функции get (ah, c o l o r ) . Пока ничего неожиданного в полученной двумерной фигуре нет. Но, стоит исполнить команду >> view(3) как будет получен весьма любопытный рисунок, представленный на рис. 7.8. Команда view(3) изменяет точку обзора трехмерной поверхности. Раньше, когда параметры осей были жестко заданы (рис. 7.7), мы смотрели на поверхность строго сверху. Теперь команда view(3) установила точку обзора трехмерных графиков, принятую по умолчанию. Нетрудно заметить, что полученная трехмерная поверхность рис. 7.8. наследует узловые точки сетки, показанной на рис. 7.7. Та-
Ц
d d 3 d d 3 Z J d d d Z J d d d Z J dd d Z J d ZJ dd d d d Z J Z J Z J Z J Z J d d н J ZJZi ddZ d • 1 < / ddd dd
q d 1сZ J d d ZJ d Z j Пп 1 1d 3 ZJ
\
\
3
>—<,
3
ZJ ZJ Z J ZJ ZJ Z J Z J
d d d
ZJ
Z J d Zj сd d
Z j a
3
ZJZ J Z J Z J Z ZJd Z J Z J Z d d d d Z Zjd d ZJZ
d d
J Z J Z J JZ J d JZ J Z J J d d
j ' 1.
Z J Z J
0.5-
Z J Z J
Jl//АЯ 0- \ -0.5M HtY -1 , 2 ^ V < U 1 II \ 1 \ 1 ^^-JM /A-Q\ / c\
d Zjd
Z J Z J Z J Z J Z J ZZj Z J Z J ZJZ J Z J Z J ZJ Z J Z J Z J ZJZ J d d d Z J d d
.и
d d d d d d d d i _ j d Z jd d Zjd ZJZ J
в3a3 Zi
3
d d d d d d d d d d d d d d d d Z J zz^Z J d zz^d
a 3 3 a d 3 3 сi 1
Рис. 7.7. Результат наложения объектов fh и ah друг на друга
Z J Z J
2
j
\ V \ \\ x
Ж hi \ 1 I \ \ MOri \ \ \ \ \VL• -2-2 -1
Рис. 7.8. Трехмерная поверхность, унаследовавшая узловые точки плоской фигуры 281
Глава 7. Анимационная
и дескрипторная
графика
ким образом, здесь в явной форме проявляется такое качество объектов, как наследование свойств, производных от родительских объектов. Теперь создадим второй файл — ms2.m: h ( l ) = a x e s ( ' P o s i t i o n ' , [ О0 1 1 ] ) ; s p h e r e h(2) = axes ( ' P o s i t i o n ' , [О 0 .4 . 6 ] ) ; p e a k s ; h(3) = a x e s ( ' P o s i t i o n ' , [ 0 .5 .5 . 5 ] ) ; s p h e r e h(4) = axes ( ' P o s i t i o n ' , [ • 5 0 .4 . 4 ] ) ; s p h e r e h(5) = a x e s ( ' P o s i t i o n ' , [ . 5 .5 .5 . 3 ] ) ; c y l i n d e r ( [ 0 0 0 . 5 ] ) s e t (h, ' V i s i b l e ' , ' o f f ) set(gcf,'Renderer','painters Здесь задано 5 трехмерных объектов: три сферы разных размеров, поверхность peaks и цилиндр. Еще более интересную картину мы получим, запустив файл ms2. Заново будет вычислена величина z, а затем построены изображения еще пяти фигур: z = 3 * ( 1 - х ) . Л 2 . * е х р ( - ( х . Л 2 ) - ( у + 1 ) . л 2 ) ... - 10*(х/5 - х . л З - у . Л 5 ) . * е х р ( - х . л 2 - у . Л 2 ) ... ) •
-
1 / 3 * е х р ( - (х+1) . Л 2
-
у.А2)
Полученный в том же окне комбинированный рисунок показан на рис. 7.9. Он является результатом наложения новых построений трехмерных фигур на ранее построенный рис. 7.8, причем, поскольку объекты axes в диаграмме иерархии объектов (см. ниже) находятся ниже объектов figure, то они строятся на том же рисунке, но, поскольку они расположены на этой диаграмме выше объектов surface, то они находятся спереди. Последовательность наложения фиРис. 7.9. Комбинированный рисунок, гур, заданных в файле ms2, определяетполученный при запуске файла ms2.m ся последовательностью их описания в после запуска msl.т файле. Любопытен вид цилиндра — похоже, что произошедшее с ним преобразование связано с изменением системы координат с декартовой на сферическую. 7 . 2 . 1 1 . Иерархия объектов дескрипторной графики Чтобы понять, какие из объектов наследуют свойства других объектов, следует рассмотреть диаграмму иерархии объектов дескрипторной графики MATLAB, представленную на рис. 7.Ю сверху. Этот рисунок показывает окно справки, посвященное свойствам объектов дескрипторной графики для справки системы Обратите внимание, что трехмерная графика в этом примере строится с рендерингом MATLAB 4 (painters). В* MATLAB 5.3 по умолчанию был бы выбран рендеринг с использованием Z-буфера и на некоторых компьютерах были бы возможны искажения. В MATLAB 6.* при включенном режиме видеоадаптера TrueColor можно заменить последнюю команду на s e t (gcf, ' R e n d e r e r ' , ' o p e n g l ' ) или опустить ее. Но при необходимости вывода изображения на печать лучше выбрать рендеринг ^ p a i n t e r s ' . 282
7.2. Основы дескрипторной графики MATLAB 6.5. В ней (ранее этого не было) объекты диаграммы выполнены в виде гиперссылок, так что активизация любого объекта открывает страницу справки по его свойствам. £ite Edi View g o Wet) №***»* 1
w *• •
tf
f «"Л «••
j MATI AB functo i ns • Qucik Reference1 Root Propere tis Handle Graphics Object Properties Root Figure Axes
liicontrol
Image
Light
Root Properties
•
j
;
FixerjWicJthFontNarne Fgirnat
i
liiraenu Line
Patch
UicoiUextmenu Rectangle
Surface
Text
MATLAB Function Reference IS IB Root Properties Modifying Properties You can set and query graphics object properties in two ways: • The Property Editor is an inter active tool that enables you to see and cha object property values. • The jet and get commands enable you to set and query the values of properties To change the default value of properties see Setting Default Property Values. Root Properties
Puc. 7.10. Окно свойств дескрипторной графики MATLAB 6.5 с указанием иерархии объектов Из приведенной диаграммы видно, что объекты surface расположены ниже объектов axes, а те в свою очередь расположены ниже объектов класса figure. Поэтому ясно, что в случае запуска файла msl свойства сетки, построенной с применением объекта axes, будут унаследованы объектом sh, построенным командой surface. Все объекты второго файла — ms2 — относятся к классу axes. Именно поэтому они строятся поверх объектов, показанных на рис. 7.8. Координаты всех пяти трехмерных фигур (см. рис. 7.9) жестко заданы в соответствующих командах axes. 7.2.12. Справка по дескрипторной графике Для детального знакомства с дескрипторной графикой можно воспользоваться справкой системы MATLAB. Для MATLAB 6.5 это было уже описано — см. рис. 7.10. Для предшествующих версий вид окна справки несколько иной. Он показан на рис. 7.11. Здесь открыт раздел справки, посвященный основным объектам дескрипторной графики. Для перехода в тот или иной раздел достаточно активизировать гиперссылку соответствующего объекта. Например, на рис. 7.12 представлено полное окно справки по объекту axis (оси). По каждому объекту можно найти синтаксическую форму записи команды или функции, а также относящиеся к ней опции. В справке можно найти много дополнительных примеров на применение дескрипторной графики. К сожалению, в версии MATLAB 6.5, предоставленной автору корпорацией MathWorks в начале ее разработки, многие примеры оказались неработоспособными в командной строке 283
Глава 7. Анимационная и дескрипторная графика из-за отсутствия используемых в них графических файлов. В связи с этим в дальнейшем приведены примеры на дескрипторную графику MATLAB 6.0/6.1. Эта недоработка, несомненно, будет устранена при выпуске коммерческой версии MATLAB 6.5.
•,• g FWKwH
J :Q£_
Graphc is Overview of MATLAB С Basic Plotting i Creating Specialized I Formatlina Graphs j Displaying Bit-Mapp' asic Printing and E Handle Graphics Ob] Overview Graphics Object Tvpes of Graphic Object Properties
["•ЕГШЙЕ2ПЗ Setting and Cu le Setting Default P Accessing Object Controlling Graph aving Handles rooerties Chan
W
i
2
T
n
p
h
e
d
i
r
p
a
L
i
s
e
P
e
t
o
o
2
-
f
y
r
u
a
o
s
f
a
r
i
h
a
r
C
o
n
t
P
r
a
e
s
,
o
n
l
c
e
l
c
l
t
e
t
a
r
e
m
r
t
e
e
a
t
t
n
a
i
b
l
r
n
s
q
a
s
h
a
v
i
n
w
g
t
i
t
a
l
h
a
u
o
c
t
s
y
e
p
h
i
h
e
r
c
d
l
o
o
u
b
a
t
c
t
g
i
e
e
a
n
g
n
d
b
s
a
a
s
t
c
.
l
e
e
o
r
p
d
I
n
e
p
f
i
a
e
c
t
a
n
i
g
h
t
s
a
t
e
d
i
c
n
t
a
e
r
s
s
r
u
h
y
e
i
s
o
l
e
h
-
c
r
w
m
e
i
t
a
p
i
s
c
h
i
i
n
n
i
o
t
h
d
i
c
n
e
d
e
a
s
a
t
x
e
a
t
o
a
r
R
G
B
v
a
l
u
e
s
.
.
s
a
n
d
a
f
f
e
c
t
i
n
h
t
g
.
u
o
r
a
t
r
c
t
h
s
r
i
e
s
e
e
o
c
n
g
e
t
e
e
s
y
e
c
n
e
u
i
t
u
i
c
r
g
b
r
d
n
r
o
c
n
b
a
e
l
e
e
s
c
a
.
e
m
l
o
f
h
i
d
-
s
r
y
e
e
m
t
t
y
e
8
u
a
a
n
e
h
b
h
l
i
s
s
r
m
g
n
m
p
c
e
i
i
a
i
p
f
b
d
e
d
l
s
d
s
t
e
x
r
l
a
l
x
a
a
n
e
l
n
m
i
i
d
n
l
a
t
e
g
n
d
a
r
e
t
c
n
i
r
e
o
f
o
i
n
C
a
e
r
r
e
g
a
o
u
f
d
D
t o
t
t
t
m
o
f
c
a
h
e
g
w
i
c
c
n
c
m
o
D
D
S
d
-
a
f
a
c
o
c
i
e
p
l
b
h
e
s
s
a
r
f
v
e
d
x
n
a
e
c
l
o
e
e
d
a
w
i
l
u
t
h
s
t
r
i
n
a
i
g
h
n
e
n
g
e
f
i
a
n
e
.
r
d
h
u
c
o
m
n
t
h
e
.
d
t
c
n
a
i
s
h
o
o
w
,
c
g
r
s
c
t
e
a
y
n
p
s
i
e
l
a
c
t
g
a
a
a
o
c
i
v
n
d
p
e
c
e
i
t
a
a
t
i
e
e
o
o
d
i
e
t
h
r
f
r
a
t
u
e
r
r
e
a
t
o
e
a
g
n
c
p
t
p
n
e
i
e
n
n
o
e
a
t
h
f
d
t
o
m
b
e
h
a
r
e
r
s
a
y
i
r
n
t
e
e
r
s
y
s
t
e
m
g
r
a
p
h
i
p
u
s
h
b
u
c
p
r
a
e
n
t
i
g
l
n
g
j
e
e
.
c
t
t
s
t
o
o
n
b
c
t
.
,
Puc. 7.11. Окно раздела справки MATLAB 6.0/6.1 no дескрипторной графике
.
M
A
a
C
T
r
S
l
x
e
y
A
e
a
n
0
F
u
n
c
t
i
g
r
a
o
n
R
e
f
e
r
e
n
c
c
t
•
-
.
•
•
•
•
,
.
.
•
"
.
,
.
•
-
'
.
•
.
'
'
•
•
•
•
•
•
'
e
s
t
t
e
a
a
x
e
s
p
h
i
c
s
o
b
j
e
x
a
x
e
s
axes('Frop&xtyN&Mo 1 ,PropertyValue,...) axesth) h - Ахеэ(...) Description axes is the low-level function for creating axes graphics objects. axes creates an axes graphics object In the current figure using default property values.
I
ахез(' PropertyNnns',PropercyValue,...) creates .an axes object having the specified property values. MATLAB uses default values for any properties that you do not explicitly define at arguments. axes (h) makes existing axes h Ihe current axes, tt also makes h the first axes listed in the figure's Children property and sets the figure's CuKEer^neaPropertvto h. The current axes is tne targe! for functions that draw image, line, patch, surface, and text graphics objects.
Puc. 7.12. Окно раздела справки MATLAB 6.0/6.1 no объекту axis дескрипторной графики 284
7.3. Дескрипторная растровая графика
7.3. Дескрипторная растровая графика 7.3.1. Понятие о растровой графике Машинная графика подразделяется на векторную графику и растровую графику. В векторной графике графические построения состоят от линий — векторов, которые указываются координатами своих начальных и конечных точек, а также кривизной и иными геометрическими характеристиками. На экране специального векторного дисплея графики выглядят состоящими из непрерывных линий. Однако реализация такой графики требует дорогих и мало распространенных дисплеев векторной графики и иных технических средств, которые в арсенал обычных персональных компьютеров не входят. Более распространенной является растровая (точечная) графика, при которой изображение строится из множества точек и, как в телевидении, имеет структуру растра. При этом изображения линий выглядят ступенчатыми, но эта ступенчатость становится малозаметной при высоком разрешении графики. Растровая графика реализована в обычных персональных компьютерах, ее средства достаточно дешевы и хорошо проработаны. До сих пор мы применяли ее даже при построении таких «векторных» объектов, как отрезки прямых или дуги, не внимая в суть построений. Теперь пора разобраться с ней более полно. Основным понятием растровой графики является пиксель (pixel от словосочетания «picture elements»). Пиксель — это маленький прямоугольник (почти квадрат), имеющий растровые координаты и некоторые признаки — атрибуты. Такими признаками могут быть цвет пикселя, его прозрачность и т. д. Для системы MATLAB цвет пикселя характеризуется его глубиной d — она задается числом бит, нужным для задания любого цвета пикселя. Число пикселей по горизонтали и вертикали экрана задает разрешение графики. Наиболее часто используются значения разрешения, характерные для Super VGA дисплеев 640 х 480, 800 х 600 пикселей и т. д. Объем памяти'в битах, нужный для хранения изображения, равен с х г х d, а в байтах с х г х d/8. Здесь с — число столбцов (columns) изображения и г —'число строк (rows). Наиболее полный набор средств для работы с растровой графикой входит в пакет расширения Image Processing Toolbox [44, 54]. Ниже представлена та часть этих средств, которая реализуется в базовой системе MATLAB.
7.3.2. Типы растровых изображений Растровые изображения, применяемые в системе MATLAB, могут быть следующего типа: • полутоновые и бинарные; • палитровые; ; • полноцветные. **-. Пиксел бинарных изображений представлен всего двумя цветами — обычно белый (пиксел не виден на белом фоне) и черный (пиксел виден). Рисунок 7.13 поясняет структуру матрицы, хранящей бинарное изображения. Каждый элемент мат*рицы имеет значение 0 или 1 и может быть представлен в виде 1(г,с), где г — номер строки и с — номер столбца элемента, соответствующего заданному пикселу. Полутоновые изображения (grayscale) могут иметь пикселы с рядом оттенков серого цвета. Эти изображения хранятся в виде двумерных массивов — матриц 285
Глава 7. Анимационная и дескрипторная графика
Рис. 7.13. Структура матрицы бинарного изображения (рис. 7.14). Индексы матриц задают положение каждого пиксела на экране дисплея, а значение соответствующего элемента матрицы 1(г,с) задает его яркость — оттенок серого цвета. Бинарное изображение можно рассматривать как вариант полутонового изображения, в связи с чем в MATLAB оно самостоятельного значения не имеет. В цветных палитровых изображениях используются две матрицы (рис. 7.15). Одна хранит значения индексов, которые задают обращение к строке матрицы палитр. Матрица палитр, именуемая цветовой картой, имеет тип double и содержит три группы столбцов — красного R, зеленого G и синего В цветов со значениями элементов от 0 до 1.0. Они и задают цвет соответствующего пиксела. Цветовая карта или просто палитра изображения представляет собой массив вещественных чисел с плавающей точкой в диапазоне [0, 1.0] размера m x 3. В большинстве внешних файлов с графическим форматом цветовая карта сохраняется в целочисленном виде, однако MATLAB такой формат представления данных не поддерживает и при записи или считывании изображения из внешнего файла цветовая карта конвертируется автоматически. Полноцветные изображения, или RGB-изображения, строятся в формате RGB (Red, Green, Blue). В этом формате изображения хранятся в трехмерном массиве I, фактически содержащем три матрицы (рис. 7.16). Каждая из них содержит индексированные переменные со значением, соответствующим относительной яркости соответственно красного
0.4510 o.ssee
Рис. 7.14. Структура матрицы полутонового изображения 286
"0.6514 0.0627 0.1608
оТоэТТ 0 о.оег7
Рис. 7.15. Структура матриц цветного палитрового изображения
7.3. Дескрипторная
растровая
графика
(Red), зеленого (Green) и синего (Blue) цветов. Элемент массива I(r,c,n), где г /^5176 0.1Э22 0.0627 ^ г е е п 0.1922 0.2588 0.256S и с — номер строки и столбца, задаюfO.5176 0.1294 0.160В 0.1294 0.1294 0.2586 0.2568 0.5176 0.1608 0.0627 0.1608 0.1Э22 0.2588 0.256. щих положение пиксела, и п — номер [.5490 0.2235 0.549С Red 0.7412 0.7765 0.7765 матрицы, задает доступ к той или иной ,5490 0.3882 0.5176 0.5804 0.5S04 0.7765 0.7765 0.258В 0.2Э02 0.2588 0.2235 0.4824 0.2235 матрице трехмерного массива: 1 — для _ 0.2235 0.160В 0.2588 0.2588 0.1606 0.258 4530 0.1608 0.25S8 0.2588 0.25&8 R-матрицы, 2 — для G-матрицы и 3 — для В-матрицы. Полноцветное изображение не использует цветовую карту. В данном случае цвет каждого пиксела будет представлен триплетом RGB. Отметим, что свойство CData (цветовые данные) полноцветного изображения является трехмерным массивом размера m x n x 3. Этот массив состоит из трех матриц Рис. 7.16. Структура трехмерного размера m x п, содержащих, соответстмассива полноцветного венно, интенсивности красного, зелеRGB-изображения ного и голубого цветов каждого пиксела. Наиболее часто используются цветные изображения, имеющие 16, 256, 65536 (High Color) и 16,7 миллиона (True Color) цветов. Необходимо заметить, что изображения могут храниться в MATLAB в виде массивов целых чисел, имеющих 8 бит/пиксел и 16 бит/пиксел. Однако наиболее перспективный метод хранения — в виде массива чисел с плавающей запятой с двойной точностью 64 бит/пиксел. Перечисленные способы хранения изображений достаточно существенно отличаются между собой. Их сравнительный анализ приведен ниже — табл. 7.1. Таблица 7.1 41
Основные типы растровых изображений системы Тип изображения
Данные с двойной точностью 64 бит/пиксел (double-массив)
MATLAB
8 бит/пиксел (шптВ-массив) 16 бит/пиксел (шпПб-массив)
Палитровое
Изображение хранится в виде двумерного массива целых чисел в диапазоне [1, length (colormap)] размера m x n, палитра - матрица вещественных чисел в диапазоне [0,1] размера m x 3
Изображение хранится в виде двумерного массива целых чисел в диапазоне [0, 225] для unit8 и [0, 65535] для uint16 размера m х п, палитра - матрица вещественных чисел в диапазоне [0, 1] размера m x 3
Полноцветное (RGB)
Изображение хранится в виде трехмерного массива вещественных чисел с плавающей запятой в диапазоне [0,1] размера m x n x 3.
Изображение хранится в виде трехмерного) массива целых числе в диапазоне [0, 255] (unit8) или [0, 65535] (uint16) размера m x j П х 3.
7 . 3 . 3 . Координатные системы графики В MATLAB используются различные системы координат графики. Растровая или пикселная координатная система относится к прямоугольным системам коор287
Глава 7. Анимационная и дескрипторная графика динат и имеет пиксел с начальными коор2 3 1 динатами (1,1) в левом верхнем углу экрана дисплея (рис. 7.17). Нумерация пиксе1 лов идет по строкам слева направо, а по столбцам — сверху вниз. В пространственной системе координат 2 каждый пиксел представляется квадратом с размером 1 х 1 (рис. 7.18). Координаты центра каждого квадрата совпадают с ко3 ординатами пикселов в растровой системе координат. Координата левого верхнего угла равна (0,5, 0,5). В этой системе коорГ ,г динат возможны билинейная или бикубическая интерполяции. Рис. 7.17. Растровая (пикселная) С помощью двух двухкомпонентных система координат векторов XData и YData можно задать пространственную координатную систему с любым масштабом координатных осей. Для этого в эти векторы надо занести минимальные и максимальные значения координат по каждой из осей. Пример такого задания масштаба представлен ниже: А = magic(6);
x
=
image(А, 'XData',х,
[15
24];
у =
'YData',у),
[6.0 axis
12.0]; image,
colormap(jet
(25))
Полученное при этом изображение представлено на рис. 7.19. 0.5 0.5
1
1.5
2
2.5
3
3.5
1 1 .5 2 2.53 " 3.5
У Рис. 7.18. Пространственная система координат
Рис. 7.19. Представление матрицы в пространственной системе координат
7.3.4. Форматы чисел графики и их преобразование MATLAB использует стандартные классы (типы) целочисленных данных системы MATLAB: Класс данных uint8 uintl6 uint32 288
Число байт 1 2 4
Диапазон чисел 0..255 0..65535 0..4294967295
7.3. Дескрипторная растровая графика Для их преобразования используются функции: i = uint8(x)
i = uintl6(x)
i = uint32(x)
Для чисел с плавающей точкой одинарной и двойной точности также имеются функции преобразования: В = s i n g l e (х)
и
В = double(x)
Здесь х — массив чисел соответствующего типа, например, одиночное число, вектор или матрица. Выходной аргумент является также массивом с тем же размером, что и х, но содержащим числа заданного именем функции типа. Ввиду очевидности данных функций ограничимся несколькими примерами на их применение: »
х=[100
1000 100000]
X= 100 1000 >> u i n t 8 ( x ) ans = 100 255 255 >> u i n t l 6 ( x ) ans = 100 1000 >> u i n t 3 2 ( x ) ans = 100 1000 >> s i n g l e ( x ) ans = 100 1000 >> d o u b l e ( 1 . / x ) ans = 0.0100 0.0010
100000
65535
100000
100000
0.0000
Главное, на что здесь полезно обратить внимание, так это на ограничение максимальных и минимальных значений чисел в ходе преобразований. Это ограничение введено для того, чтобы избежать резкой смены цветов пиксела в случае, когда значение представляющего его элемента матрицы выходит за допустимое значение. Для палитровых изображений иногда возникает необходимость перехода из одного формата в другой, например, из uint8 или uintl6 в класс данных double, представляющих числа с плавающей точкой двойной точности. Для этого используются следующие выражения: Х64 = double(X8)
+ 1 или Х64 = double(X16) + 1.
Для перехода из формата double в uint8 или unitl6 используются следующие выражения: Х8 = u i n t 8 ( r o u n d ( X 6 4
- 1 ) ) или Х16 = u i n t l 6 ( r o u n d ( X 6 4
-1)).
Если возникает необходимость перехода из одного формата в другой для полноцветных изображений, например, из uint8 или uintl6 в double, можно использовать следующие выражения: RGB64 = double(RGB8)/255 ИЛИ RGB64 - double(RGB16)/65535
и обратно RGB8 = uint8(round(RGB64*255)) ИЛИ RGB16 = u i n t l 6 (round(RGB64*65535)) .
289
Глава 7. Анимационная и дескрипторная графика 7.3.5. Форматы растровых изображений В MATLAB используются различные форматы изображений и представляющих их файлов. Они даны в приведенной ниже таблице. Соответствующие типы файлов могут быть прочитаны функцией imread. Таблица 7.2 Форматы файлов растровых Формат
Глубина цвета
изображений Особенности
BMP
1-bit, 4-bit, 8-bit или 24-bit
Несжатые файлы, 4-bit и 8-bit - файлы с RLE-сжатием
CUR
1-bit, 4-bit или 8-bit
Несжатые файлы
HDF
8-bit или 24-bit
8-bit растровые изображения с цветовой картой и без цветовой карты 24-bit растровые изображения
ICO
1 -bit, 4-bit или 8-bit
Несжатые файлы
JPEG
8 или 24-bit
Сжатые с разной степенью сжатия файлы
PCX
1 -bit, 8-bit или 24-bit
Формат известной программы Paint Brush
PNG
1-bit, 2-bit, 4-bit, 8-bit, 16-bit, 24-bit или 48-bit
8-bit и 16-bit палитровые изображения;
1-bit, 2-bit, 4-bit, 8-bit, и 16-bit полутоновые изображения; 24-bit и 48-bit полноцветные изображения
TIFF
1-bit, 8-bit, 16-bit, 24-bit или 48-bit
XWD
1-bit или 8-bit
1 -bit, 8-bit и 24-bit несжатые файлы; 1 -bit, 8-bit, 16-bit и 24-bit с сжатием; i-bitcCCITT-сжатием; 16-bit полутоновые; 16-bit палитровые; 48-bit полноцветные изображения
Подробные данные о типах и форматах файлов, в которых хранятся изображения, а также средства для работы с файлами изображений представлены в главе 9. 7.3.6. Установка свойств изображения — set С некоторыми функциями, например, с функцией image, связана функция set, предназначенная для установки свойств изображения. Эта функция записывается в виде: s e t ( Р , ' DefaultlmageProperty ',PropertyValue. . .) где параметр р = 0, gcf или дса. Строка DefaultlmageProperty указывает свойство изображения, PropertyValue указывает значение этого свойства. Можно использовать функции s e t и get для настройки свойств изображения. Данные DefaultlmageProperty следующие: • Cdata — матрица или многомерный массив размера m x n x 3, значения которого указывают цвет каждой прямоугольной области, определяющей изображение. Функция image(C) определяет значения матрицы С в массив CData. • CdataMapping — свойство, определяющее, как MATLAB должен интерпретировать массив CData: в виде индексов цветовой карты colormap (по умолчанию) или масштабировать значения в соответствии со значением clim. 290
7.3. Дескрипторная
растровая
графика
• XData — свойство, которое контролирует положение изображения вдоль оси х и представляет собой вектор размером по умолчанию size(CData,2), определяющий положение центров элемента CData(l.l) и CData(m,n). Cdata — матрица размера m x п. Элемент CData(l,l) центрирован по координате, определенной первыми элементами векторов XData. и YData. Элемент CData(m,n) центрирован по координате, определенной последними элементами векторов XData и YData. Центрирование оставшихся элементов массива CData производится равномерным распределением между двумя описанными выше точками. Следует отметить, что свойство можно задавать в виде числа. В этом случае изображение центрирует первый элемент по координате XData, а все следующие элементы центрируются с шагом 1. • Ydata — свойство, которое контролирует положение изображения вдоль оси у и представляет собой вектор (размер по умолчанию size(CData,l), определяющий положение центров элемента CData(l,l) и CData(m,n). Cdata — матрица размера m х п. Элемент CData(l,l) центрирован по координате, определенной первыми элементами векторов XData и YData. Элемент CData(m,n) центрирован по координате, определенной последними элементами векторов XData и YData. Центрирование оставшихся элементов массива CData производится равномерным распределением между двумя описанными выше точками. Следует отметить, что свойство можно задавать в виде числа. В этом случае изображение центрирует первый элемент по координате YData, а все следующие элементы центрируются с шагом J. 7.3.7. Свойства, задающие вид изображения Для задания вида изображения служат следующие свойства: • c l i p p i n g — свойство, задающее отсечение изображения или графического примитива по границам осей. Возможные значения — on, off, по умолчанию — on; • S e l e c t i o n H i g h l i g h t — свойство подсветки изображения с выводом дескрипторов. Возможные значения on, off, по умолчанию — on; • V i s i b l e — свойство, делающее изображение видимым. Возможные значения on, off, по умолчанию — on; • EraseMode — свойство, предназначенное для создания анимации. Возможные значения normal, none, xor, background, ПО умолчанию — normal: • Режим normal — перестраивает анимируемую область изображения, используя трехмерный анализ, гарантирующий качественное воспроизведение деталей графического объекта. Свойство EraseMode в этом режиме работает наиболее медленно. Другие режимы более быстродействующие, но не обеспечивают точное воспроизведение графического объекта;. • None — не стирает изображение при его перемещении или изменении. При назначении этого режима изображение возможно распечатать; • режим хог — рисует и стирает изображение с использованием исключающего или (XOR) с цветом экрана ниже изображения. Этот режим не может повредить цвета объектов, расположенных ниже анимируемого изображения; • режим background стирает изображение, прорисовывая его цветом осей или фона. 291
Глава 7. Анимационная
и дескрипторная
графика
7.3.8. Контроль доступа к объектам Следующие два свойства дают контроль доступа к объектам графики: • H a n d l e v i s i b i l i t y — осуществляет контроль доступа к дескриптору объекта. (Возможные значения on, callback, off, по умолчанию — on.) В режиме on дескриптор всегда видим. Установка свойства H a n d l e v i s i b i l i t y в режим callback осуществляет вывод видимого дескриптора из рекурсивной подпрограммы или функции, а не из вводимой из командной строки функции. Это исключает возможность повреждения GUI-приложения. Установка свойства H a n d l e v i s i b i l i t y в режим off делает дескриптор невидимым. • HitTest — по щелчку мышью делает выделенный объект текущим. Возможные значения on, callback, off, по умолчанию — on.
7.3.9. Общая информация об изображении Для получения общей информации об изображении используется следующая группа свойств дескрипторной графики: • Children (дескриптор) — возвращает пустую матрицу, изображение не имеет потомков; • Parent (дескриптор) — возвращает дескриптор родительских осей; • Selected — определяет, является ли данный объект выделенным в данный момент. Когда это свойство находится в режиме on, MATLAB отображает выбранный дескриптор (возможные значения on, off, по умолчанию — on); • Tag — определяющая графический объект метка, определяемая пользователем (возможное значение — данные типа string, по умолчанию — пустая строка); • Туре — возвращает тип графического объекта (возможное значение — данные типа string); • UserData — присваивает данному изображению свойства, определяемые пользователем (возможное значение — матрица). 7 . 3 . 1 0 . Вывод на экран шкалы цветов — colorэаг Функция colorbar выводит на экран шкалу цветов данного изображения. При выводе шкалы цветов изменяется масштаб изображения и освобождается место для вывода цветовой палитры. Функция colorbar ( ' v e r t ' ) добавляет в текущее окно вертикально расположенную шкалу цветов, a colorbar (' horiz ') горизонтально расположенную в текущем окне шкалу цветов. Функция colorbar (h) для создания текущей шкалы цветов палитры использует ось п. Функция h = colorbar ( . . . ) возвращает в h дискриптор (handle) текущей шкалы цветов, а функция colorbar ( . . . , ' p e e r ' , axes_handle) возвращает шкалу цветов с осями-дескрипторами вместо текущих осей. В приведенном ниже примере функция imshow считывает изображение из файла rice.tif и строит его вместе со шкалой оттенков серого цвета (с помощью функции colorbar) (рис. 7.20): imshow r i c e . t i f ; colorbar ( ' v e r t ' ) ; 292
7.3. Дескрипторная растровая графика • > Figuie No. 1
£.le £d,l Vie» n l se.1Toosl • D а? У а и
Htlp
rice.tif
Яяс. 7.20. Изображение, полученное из файла rice.tif, со шкалой оттенков серого цвета 7 . 3 . 1 1 . Получение изображения из графического объекта — getimage Функция А = getimage (h) возвращает изображение А, содержащееся в графическом объекте с идентификатором h, причем исходный графический объект может быть графиком функции, изображением или текстурной поверхностью с идентификатором п. [х,у,А] = getimage(h) — возвращает дополнительно два двухэлементных вектора XData и YData, содержащих диапазоны изменения координат по осям х и у. [. . . ] = getimage — возвращает дополнительную информацию о текущем графическом объекте и эквивалентна функции [. . . ] = getimage (gca). [ . . . , A , f l a g ] = getimage (h) — возвращает дополнительно целое число-флаг, определяющее тип исходного изображения h. Ниже приведены допустимые значения для переменной flag: • f lag=0 — отсутствие исходного изображения, А — пустая матрица; • flag=l — полутоновое исходное изображение со значениями яркости в стандартных диапазонах ([0,1] для формата представления данных double [0,255] для uint8, [0,65535] для uintl6); • flag=2 — палитровое изображение; • f lag=3 — полутоновое изображение с нестандартным диапазоном яркости; • f lag=4 — полноцветное изображение (RGB). 7 . 3 . 1 2 . Вывод на экран графического объекта — image Функция дескрипторной графики image создает изображение, представляя каждый элемент входной матрицы в виде индекса текущей цветовой палитры или 293
Глава 7. Анимационная
и дескрипторная
графика
непосредственно как модель RGB, в зависимости от формы представления входных данных. Функция image представима в двух формах: 1. Функция высокого уровня, которая вызывает базовую функцию MATLAB newplot для определения местоположения нового графического объекта и установки свойств осей. 2. Функция низкого уровня, которая строит изображение без установки параметров осей и вызова функции newplot. В таком виде список аргументов данной функции может быть представлен в виде многомерного массива, состоящего из пар чисел, характеризующих каждый пиксель данного графического объекта. Имеются следующие формы записи функции image: image (С) — возвращает изображение, полученное из матрицы С. Каждый элемент матрицы с точно указывает цвет или прямоугольный сегмент изображения; image (x, у, С) — возвращает дополнительно два двухэлементных вектора х и у, содержащих диапазоны изменения координат по осям х и у; image(х,у,С,'PropertyName',PropertyValue,...) — как функция высокого уровня вызывает newplot для построения нового изображения и использует специальные параметры PropertyName, PropertyValue. При использовании функции НИЗКОГО уровня image('PropertyName',PropertyValue,...) также могут быть заданы параметры PropertyName, PropertyValue. handle = image ( . . . ) — возвращает дескриптор создаваемого изображения. Описание свойств, задаваемых при использовании данной функции, было описано выше. В следующем примере I=magic(10); image(I); можно наблюдать построение изображения для магической матрицы I размера 10 х 10. Исполнив команду >> image(25+5*peaks) можно наблюдать представление матрицы трехмерной поверхности peaks в наглядном «цветовом» масштабе (рис. 7.21). При этом цвет каждой точки поверхности задается ее высотой. Для достаточно представительного отображения матрицы peaks в данном случае пришлось ввести нормирующие множитель 5 и слагаемое 25. Другая команда — imagesc (A) — этого уже не требует. Результат исполнения команды >> imagesc(peaks) показан на рис. 7.22. 7 . 3 . 1 3 . Масштабирование изображения — zoom Функция масштабирования изображения zoom используется в следующих формах: zoom on — включает режим интерактивного масштабирования для текущего окна. В этом режиме щелчок левой клавиши мыши внутри области изображения приводит к увеличению или уменьшению окна в f a c t o r раз. Для двух- или трехкнопочной мыши увеличение изображения происходит при нажатии левой клавиши, а уменьшение — правой. Если перемещать курсор при нажатой левой клавише мыши, то можно указать прямоугольный фрагмент изображения, который следует увеличить до размеров всего окна. Двойной щелчок левой клавишей мыши приводит к возвращению начальных установок масштабирования; 294
7.4. Графическая поддержка цвета
•
Рис. 7.21. Представление матрицы peaks в виде растрового рисунка
Рис. 7.22. Представление матрицы с помощью команды imagesc
zoom off — выключает режим интерактивного масштабирования данного окна; zoom out — возвращает начальные установки масштабирования данного графического объекта; zoom r e s e t — запоминает текущие размеры изображения как его первоначальные размеры; zoom — переключает интерактивный режим масштабирования (включено/выключено); zoom xon и zoom yon — включают режим интерактивного масштабирования для оси х и у соответственно; zoom (factor) — устанавливает значение коэффициента масштабирования (по умолчанию — f a c t o r = 2); zoom (fig, option) — управляет режимом масштабирования для данного окна fig. Параметр option содержит один из описанных выше аргументов. Ввиду очевидности действия этой функции примеры на ее работу не приводятся.
7.4. Графическая поддержка цвета 7 . 4 . 1 . Цветовые системы При наблюдении объектов графики на экране дисплея (увы, на страницах книги этого не видно) нас приятно радует цветовая раскраска изображений. Она достигается средствами графической поддержки цвета и различных цветовых эффектов — начиная с автоматического или заданного пользователем цвета линий простейших графиков, до построения изображений с полупрозрачными элементами и объектов, имитирующих эффекты отражения света от их поверхностей. В графике компьютеров чаще всего используется цветовая система RGB (Red, Green, Blue) — наиболее распространенная, но далеко не единственная цветовая система, используемая в компьютерной графике. Достаточную известность имеет ряд других систем. Так, другая хорошо известная система HSV (hue — цветовой тон, saturationнасыщенность и value — яркость) соответствует особенностям человеческого глаза 295
Глава 7. Анимационная и дескрипторная
графика
лучше, чем система RGB. Поэтому система HSV отвечает особенностям подбора цветов, которые используются художниками. Еще одна цветовая система YIQ используется в стандартной для США, Японии и ряда других стран телевизионной системе NTSC. В системе YIQ используются три составляющие цветового кодирования: Y — яркостная составляющая, I — цветовой тон и Q — насыщенность — составляющие цветности. Преобразование из цветовой системы RGB в цветовую систему YIQ осуществляется с помощью следующего матричного выражения: 0.299 0.587 0.114 0.596 -0.274 -0.322 0.211 -0.522 0.311 Обратное преобразование помощью выражения:
из системы Y1Q в систему RGB выполняется с 1.000 1.000 1.000
0.956 0.621 -0.272 -0.647 -1.106 1.703
Преобразование в систему NTSC обычно используется не столько по прямому назначению, сколько для отделения информации о яркости от информации о цвете. Другие аналоговые и телевизионные системы отличаются от описанной выбором несколько иных коэффициентов в матрицах преобразований. Прямая поддержка их, в частности расширением Signal Processing Toolbox, не предусмотрена. Это, кстати, относится и к распространенной в ряде стран (в том числе в России, странах СНГ, Франции и др.) системе SECAM. Цветовая система YCbCr наиболее часто используется в цифровом видео и близка к системе SECAM. Эта система имеет следующие компоненты цвета: Y — яркостная составляющая и СЬ и Сг —цветоразностные составляющие. Преобразование из системы RGB, у которой составляющие трех цветов лежат в интервале от 0 до 1.0, в систему YCbCr осуществляется в соответствии со следующим матричным выражением: П 65.481 125.553 24.9661 Г/Г Y 16 СЬ = 128 + -37.797 -74.203 112.0 • С Сг ,128 112.0 -96.786 -18.214J [В
7 . 4 . 2 . Преобразования изображений На уровне ядра графических операций в системах MATLAB поддерживаются довольно очевидные функции преобразования цветовых моделей: • RGB=hsv2rgb (HSV) — преобразует матрицу изображения HSV в матрицу изображения RGB; • Hsv=rgb2hsv (RGB) — преобразует матрицу изображения RGB в матрицу изображения HSV. Работа этих функций наглядна лишь при цветной графике. Поскольку иллюстрации в книге черно-белые, мы ограничимся лишь упоминанием о данных функциях преобразования. 296
7.4. Графическая поддержка цвета 7 . 4 . 3 . У п р а в л е н и е р а б о т о й с р е д с т в OpenGL Одной из новинок систем MATLAB 6.* является поддержка графических средств OpenGL. Эти средства обычно используются чаще всего при реализации трехмерной графики, например при осуществлении сложной функциональной окраски поверхностей и трехмерных фигур с учетом характера освещения и структуры материала (рейдеринг), при осуществлении анимации для таких объектов, при построении поверхностей из многоугольников, осуществлении эффектов прозрачности и т. д. Целый ряд примеров этого уже приводился в главе 6. Средства OpenGL в MATLAB задействованы автоматически. Это значит, что они будут использованы, если видеокарта компьютера пользователя поддерживает их и если установлены соответствующие драйверы видеоадаптера. На уровне средств стандартной графики MATLAB никаких функций управления OpenGL нет. Однако дескрипторная графика такую возможность предоставляет с помощью команды opehgl selection mode Эта команда задает графические режимы осуществления рендеринга. Параметр selection_mode может принимать следующие значения: a u t o s e l e c t — задает автоматическое применение OpenGL и вводит в работу средства OpenGL при наличии возможностей для этого; n e v e r s e l e c t — отключает автоматическое применение OpenGL; advise — выводит сообщение о возможности применения OpenGL, но режим рендеринга (RenderMode) устанавливается вручную. Просто команда opengl выводит сообщение о текущем значении selection_mode, например: >> opengl i ans = AutoSelect А команда opengl info выводит данные о средствах OpenGL ПК, на котором установлена система MATLAB, например: >> opengl info Version = 1.1.0 Vendor = Microsoft Corporation Renderer = GDI Generic MaxTextureSize = 1024 Extensions = GL__WIN_swap_hint GL_EXT_bgra GL_EXT_paletted_texture Возможно также управление средствами рендеринга и OpenGL на уровне средств дескрипторной графики с помощью команды set, например: s e t ( g c f , 'Renderer ' , 'OpenGL') 7.4.4. Управление прозрачностью графических объектов Пожалуй, наиболее впечатляющие и внешне заметные результаты дает применение свойства прозрачности изображений (transparency), доступное при установке средств Open GL. Это свойство позволяет строить изображения полупрозрачных струй жидкостей или газов, в которых видны их сгустки или вкрапления твердых 297
Глава 7. Анимационная
и дескрипторная
графика
тел, изображения галактик со звездными вкраплениями, изображения клеток в биологических объектах и т. д. В книгу «MATLAB. Using MATLAB Graphics» введен обширный раздел, посвященный управлению прозрачностью объектов. Ниже представлена краткая «выжимка» из этого раздела. Плавное регулирование прозрачности пиксела обеспечивается только при использовании TrueColor и индустриального режима рендеринга (оклейки изображения реалистичными фотообоями) OpenGL. Этот режим был широко популяризирован его использованием в фильмах из серии «Парк Юрского периода». Прозрачность задается свойством alphadata, которое представляет собой матрицу размера m x n типа double или uint8 и определяет прозрачность каждого элемента. По умолчанию это значение 1, которое задает непрозрачное изображение элемента. Свойство alphadatamapping представляет собой метод представления карты прозрачности. (Возможные значения — none, d i r e c t , scaled, no умолчанию попе.) С помощью этого свойства MATLAB представляет индексированные альфа-данные следующими способами: • попе (по умолчанию) — значения прозрачности AlphaData находятся в пределах от 0 до 1 или искусственно помещены в этот интервал; • scaled — преобразует AlphaData таким образом, чтобы охватить часть карты прозрачности alphamap, указанной в свойстве Alim, масштабируя элементы AlphaData в диапазоне от минимального до максимального значений свойства ALim; • d i r e c t — использует AlphaData как индексы в карте прозрачности alphamap. Если данные не масштабированы, то они представляют собой целые числа от 1 до length(alphamap). Свойство прозрачности основано на представлении изображений в виде отдельных слоев, что обычно требует применения многомерных массивов. Данные о прозрачности размещаются в матрице размера m x n AlphaData, элементы которой должны иметь тип double или uint8 (элементы типа NaN недопустимы). Возможности задания прозрачности поддерживаются графическими файлами с расширением PNG. В изображениях, хранящихся в этих файлах, возможна поддержка кодирования цветов с разным разрешением — вплоть до 48 бит при RGB-графике. 7.4.5. Примеры построения изображений со свойствами прозрачности Приведем наглядный пример использования свойств прозрачности из описания графики системы MATLAB: [х у z v] = flow; p=patch(isosurface(x,y,z,v,-3)); isonormals(x,у,z,v,p); s e t (p, ' f a c e c o l o r ' , ' r e d ' , ' e d g e с о l o r ' , ' n o n e ' ) ; daspect ( [1 1 1 ] ) ; view(3); axis tight; grid on; camlight; lighting gouraud; Здесь для построения графика трехмерная фигура flow (течение). Она представлена тремя массивами своих точек х, е и z и дополнительным массивом класса А1298
7.5. Галерея трехмерной
графики
•"•']
Рис. 7.23. Трехмерная фигура в обычном представлении (без свойства прозрачности)
Рис. 7.24. Трехмерная фигура с установкой свойства прозрачности
phaData — v. При первом построении свойство прозрачности отсутствует (по умолчанию) и построенная фигура будет иметь вид, представленный на рис. 7.23. Если исполнить команду alpha(0.5), то в массиве AIphaData будут заданы элементы, обеспечивающие степень прозрачности 0.5. При этом изображение объекта будет иметь вид, представленный на рис. 7.24. Теперь на нем четко видна скрытая ранее твердая сердцевина фигуры и даже проглядывают координатные оси. Более подробные сведения об использовании свойства прозрачности можно найти в обширной документации по графике в формате PDF. Эта документация в виде файла graphg.pdf с объемом свыше 12 Мбайт поставляется с системой MATLAB 6.
7.5. Галерея трехмерной графики 7 . 5 . 1 . Доступ к галерее Для знакомства с возможностями трехмерной графики MATLAB имеет галерею (Gallery) в виде профессионально выполненных графических программ. Доступ к ним возможен как из режима демонстрации (команда Examples and Demos в меню Help командного окна MATLAB), так и путем запуска команды из командной строки с указанием имени соответствующего файла. Галерея представлена фигурами и файлами, список которых приведен в представленной ниже таблице. Таблица 7.3 Данные о фигурах галереи трехмерной графики Имя фигуры
!
Файл
Наименование фигуры
Knot
Knot.m
Завязанный узел
Quiver
Quivdemo.m
Векторное объемное поле
Klein II
Klein 1 .m
Объемное кольцо
299
Глава 7. Анимационная и дескрипторная графика Имя фигуры
Файл
Наименование фигуры
cruller
cruller.m
Объемное кольцо Мебиуса
hoops
tory4.m
Четыре объемных обруча
slosh
spharm2.m
Построение фигуры, напоминающей улитку
modes
modes.m
Демонстрация фаз анимации трехмерной поверхности
logo
logo.m
Построение логотипа системы MATLAB
Обратите внимание на то, что иногда имя файла не совпадает с именем фигуры в галерее.
7.5.2. Примеры построения фигур из галереи Ниже приведено несколько примеров, которые дают наглядное представление о возможностях дескрипторной графики системы MATLAB. Команда quivdemo выводит окно с демонстрацией построения пространственного векторного поля. Это окно показано на рис. 7.25. Полезно обратить внимание на то, что в этом примере сам по себе график — двумерный. Объемный вид поверхности достигается сочетанием функциональной окраски с изображением графика ЧИП' векторного поля с помощью стрелок. Команда k l e i n l строит график объемной ленты Мебиуса с одним перекручиванием. Вид этой фигуры показан на рис. 7.26. Этот график хорошо иллюстрирует хотя и одноцветную, но функциональную закраску фигуры с имитацией ее освещения источником света, расположенным вверху справа, и реализацией эффектов отражения света. Команда c r u l l e r строит объемное кольцо Мебиуса с двойным перекручиРис. 7.25. График пространственного ванием. Построенная фигура показана векторного поля на рис. 7.27. В данном случае использу-
Рис. 7.26. Объемная линия Мебиуса с одним перекручиванием 300
Рис. 7.27. Объемное кольцо Мебиуса
7.6. Расширенная техника визуализации вычислений
Рис. 7.28. Четыре тора в пространстве ется обычная функциональная окраска с сохранением линий каркаса фигуры. Команда tory4 строит четыре переплетающихся друг с другом тора (объемных Рис. 7.29. Фигура, напоминающая улитку кольца) в пространстве (рис. 7.28). Наглядности этой картины также способствует функциональная окраска торов и видимые линии каркаса. Обратите внимание, что невидимые линии удалены. Любопытную фигуру, напоминающую раковину улитки, строит команда spharm2. Вид фигуры показан на рис. 7.29. Здесь интересно применение многоцветной функциональной окраски с использованием интерполяции по цвету, а также имитация эффектов отражения при освещении фигуры источником точечного света. Отчетливо видны зеркальные блики на поверхности Рис. 7.30. Фазы анимации фигуры. трехмерной поверхности Еще одна команда — modes — иллюстрирует построение фаз анимации поверхности (рис. 7.30). Она генерирует 12 фигур, отражающих положение поверхности в пространстве в различные моменты времени. В целом указанный набор команд дает хорошее представление о возможностях трехмерной графики системы MATLAB. Команда type name, где name — имя соответствующей команды, выводит полный листинг программы, реализующей построение той или иной фигуры. Знакомство со свойствами этих фигур позволяет оценить возможности средств управления световыми и цветовыми эффектами трехмерной графики и применить их в своих целях.
ы
7.6. Расширенная техника визуализации вычислений Средства дескрипторной графики позволяют реализовать весьма эффектную визуализацию сложных объектов (прежде всего трехмерных) и многих физических 301
Глава 7. Анимационная
и дескрипторная
графика
явлений, например таких как струи газа и жидкости, электрические разряды и т. д. Объем данной книги не позволяет подробно описать все функции и опции данного раздела графики. Поэтому ниже представлены описания практических примеров на наиболее характерное применение таких функций. С деталями их синтаксиса и дополнительными возможностями заинтересованный читатель может ознакомиться по справке и документации для дескрипторнои графики. 7 . 6 . 1 . Задание Path-объектов Объект Patch может использоваться для построения закрашенных многоугольников (полигонов). Для этого служит специальная высокоуровневая команда Patch(хс,ус,[zc,]colordata)
В ней хс, ус и zc — массивы координат. Она может быть также задана на низком уровне, например, как: patch('XData',sin(t) , 'YData',cos(t)) Следующий пример строит закрашенный десятиугольник с интерполяцией закраски, дающей плавные переходы цвета (рис. 7.31): t = 0:pi/5:2*pi; a = t (1:length(t)-1); patch (sin (a) , cos (a) , 1: length (a) , ' FaceCol.or ' , ' interp ' ) colormap cool; axis equal
0.8 0.6 0.4 0.2 0 -0.2 •0 4 -0.6 -0 8 -1
-0E
0
05
1
Рис. 7.31. Закрашенный многоугольник, построенный командой patch
7.6.2. Построение среза черепной коробки человека В MATLAB с помощью массивов могут быть заданы достаточно сложные объекты. Например, файл mri содержит массив графических данных черепной коробки человека, вместе с ее «внутренностями». Приведенный пример показывает загрузку этого массива и выделение одного слоя из разрезанной горизонтальными плоскостями черепной коробки (рис. 7.32): load mri; D = squeeze(D); image_num = 8; image(D(:,:,image_num)) axis image; colormap(map) 302
7.6. Расширенная техника визуализации вычислений
100 ' 120 Рис. 7.32. Срез черепной коробки человека
Рис. 7.33. Несколько срезов черепной коробки человека
В другом примере строится уже несколько срезов черепной коробки (рис. 7.33): phandles = c o n t o u r s l i c e (D, [ ] , [ ] , [ 1,12,19,27],8); view(3); a x i s t i g h t ; d a s p e c t ( [ 1 , 1 , . 4 ] ) s e t (phandles, 'LineWidth',2) С деталями иного применения использованных в этих простых программных фрагментов функций можно ознакомиться по справке MATLAB, посвященной дескрипторной графике. 7.6.3. Расширенная визуализация трехмерных объектов Рассмотренные выше приемы можно распространить на существенно расширенную визуализацию трехмерных объектов. Приведенный ниже m-файл обеспечивает сглаживание данных массива черепной коробки командой smooth3 и построение реалистичного рисунка черепной коробки с удаленным сверху ее фрагментом: Ds = smooth3(D); hiso = patch(isosurface (Ds,5), 'FaceColor', [1, .75, .65], ... 1 EdgeColor', 'none ' ); neap = patch(isocaps(D,5),'FaceColor','interp1,... 1 EdgeColor ' , 'none'); colormap(map); view(45,30) ; axis tight ; daspect ([ 1,1,. 4]) lightangle (45,30); set(gef, 'Renderer', 'zbuffer'); lighting phong; isonormals(Ds,hiso); set (heap, 'AmbientStrength', .6) set (hiso, 'SpecularColorReflectance',0, . . . 1 SpecularExponent',50) Полученный с его помощью рисунок представлен на рис. 7.34. Этот пример наглядно показывает, что средства дескрипторной графики MATLAB могут эффективно применяться в медицине и в уроках по медицине для изучения внутреннего строения органов человека. 303
Глава 7. Анимационная и дескрипторная графика •.••
•
• •
•
..-У':
Рис. 7.34. Черепная коробки человека со срезом
7.6.4. Выделение части объема С помощью функций subvolume и isonormal можно выделить часть объема и наглядно ее представить. Следующий простой фрагмент программы делает это для массива файла, представляющего черепную коробка человека (рис. 7.35): load mri; D = squeeze(D) ;: [x,y,2,D] = subvolume(D, [60, 80,nan, 80, nan, nan]); pi = patch(isosurface(x,y,z,D, 5),... 1 FaceColor','red','EdgeColor','none'); isonormals(x,y,z,D,pl); p2 = patch(isocaps(x,y,z,D, 5),... 'FaceColor','interp','EdgeColor','none'); view(3); axis tight; daspect([1, 1, .4]); colormap(gray(100)) camlight right; camlight left; lighting gouraud
7.6.5. Визуализация струи в пространстве Дескрипторная графика обеспечивает эффективную визуализацию в пространстве струй жидкостей или газов. Такие задачи сплошь и рядом встречаются в гидродинамике и аэродинамике. Наглядный пример этого дает функция flow, создающая массивы представления струи: [ x , y , z , v ] = flow; Выполним нормализацию масштабов по осям координат и вспомогательные операции к подготовке представления струи: x m i n = m i n ( x ( : ) ) ; ymin = m i n ( y ( : ) ) ; zmin = m i n ( z ( : ) ) ; xmax = m a x ( x ( : ) ) ; ymax = m a x ( y ( : ) ) ; zmax = m a x ( z ( : ) ) ; hslice = surf(linspace(xmin,xmax,100),... 1inspace(ymin,ymax,100), zeros (100)); rotate(hslice,[-1,0,0],-4 5); xd = g e t ( h s l i c e , ' X D a t a ' ) ; zd = g e t ( h s l i c e , ' Z D a t a ' ) ; 304
yd = g e t ( h s l i c e , ' Y D a t a ' ) ; delete(hslice)
7.6. Расширенная техника визуализации вычислений
80
70
60
Рис. 7.35. Объемный вырез черепной коробки человека со срезами с разных сторон
Рис. 7.36. Визуальное представление струи в пространстве
Обратите внимание на то, что объемный массив hsplice в этом примере имеет вспомогательную роль. После получения из него массивов xd, yd и zd проекций массив hsplice удаляется во избежание перегрузки памяти компьютера. Теперь построим проекции струи на плоскости координатного ящика и диагональную плоскость: h = s l i c e(х,у,z,v,xd,yd,zd); set(h,'FaceColor','interp', 'EdgeColor','none', 1 DiffuseStrength1,.8) hold on; hx = slice(x,y,z,v,xmax,[],[]); set(hx, 'FaceColor', 'interp', 'EdgeColor','none') hy = slice(x,y,z,v, [],ymax,[]); set(hy,'FaceColor', 'interp','EdgeColor','none') hz = slice(x,y,z,v, [] , [],zmin) ; set (hz, 'FaceColor', 'interp', 'EdgeColor', 'none ' ) daspect([1,1,1]) axis tight; box on view(-38.5,16); camzoom(1.4); camproj perspective Добавим эффекты светового выделения и вывода шкалы цветов: lightangle (-45,45); colormap (jet(24)); set(gcf,'Renderer','zbuffer');"colormap (flipud(jet(24))); caxis ([-5,2.4832]); colorbar ( 'horiz') Собрав воедино представленные фрагменты m-файла и пустив его на исполнение, получим рис. 7.36, представляющий собой наглядную картину строения струи. Образ струи в пространстве имеет высокую наглядность (особенно в оригинале — в виде цветного изображения на экране дисплея) и прекрасно выделяет раз-
305
Глава 7. Анимационная и дескрипторная графика личные особенности струи, например ее турбулентность. Однако надо помнить, что представленная программа вовсе не моделирует струю, а лишь отображает готовый результат моделирования, представленный в тестовой функции flow в некоторый момент времени. 7.6.6. Визуализация электрических разрядов Файл wind хранит массив, представляющий развитие электрических разрядов а атмосфере. Приведенный ниже пример иллюстрирует технику визуализации этих явлений (рис. 7.37): l o a d wind; xmin = min(x ( : ) ) ; xmax = max (x (: ) ) ; ymax = max(y ( : ) ) ; zmin = m i n ( z ( : ) ) ; wind_speed = s q r t ( u . A 2 + v . A 2 + w . ~ 2 ) ; hsurfaces = s l i c e (x, y, z, wind_speed, [xm:_n, 100, xmax] , ymax, zmin) ; set(hsurfaces,'FaceColor','interp','EdgeColor','none'); hcont = c o n t o u r s l i c e ( x , y , z , w i n d _ s p e e d , . . . [xmin,100,xmax],ymax,zmin); s e t ( h c o n t , ' E d g e C o l o r ' , [.7, . 7 , . 7 ] , ' L i n e W i d t h ' , . 5 ) ; [sx,sy,sz] = meshgrid(80,2C:10:50,0:5:15); hlines = streamline(x,y,z,u,v,w,sx,sy,sz) ; set (hlines, 'LineWidth1,2, 'Color', ' r ' ) ; view(3); daspect ( [2,2,1]); axis t i g h t
Приведенная выше программа критична к применяемой видеокартой версии OpenGL. Если при ее выполнении появляется сообщение о некорректной версии OpenGL, то цветовая окраска будет отличаться от оригинальной и могут пропасть эффекты прозрачности. Тем не менее и в этом случае картина разрядов будет выглядеть достаточно эффектно и реалистично.
Рис. 7.37. Визуальное представление электрических разрядов
7.6.7. Анимация явления подъема предметов вихрями Жители Северной Америки нередко наблюдают сложные атмосферные явления, такие как вихри, торнадо и смерчи. Они нередко поднимают не только тучи пыли, но и различные предметы — от камней до автомобилей и домов. Уже упо306
7.6. Расширенная техника визуализации вычислений мянутый файл wind хранит данные не только о развитии атмосферных разрядов электричества, но и о сопровождающих их атмосферных вихрях (типа смерча). Представленный ниже фрагмент программы дает визуализацию этих эффектов: load wind; [sx sy sz] = meshgrid(100,20:2:50,5); v e r t s = stream3 (x, y, z, u, v, w, sx, sy, sz) ; si = streamline(verts); view(-10.5,18); daspect([2 2 0.125]); axis t i g h t ; box on; iverts = interpstreamspeed(x,y,z,u,v,w,verts,0.05); set(gca,'drawmode','fast'); streamparticles(iverts,15,... 'Animate',10, 'ParticleAlignment','on',... 1 MarkerEdgeColor','none', 'MarkerFaceColor','red', 'Marker','o'); то в течение нескольких секунд можно наблюдать весьма поучительную анимационную картину подъема «камней», представленных кружками (рис. 7.38). Еще один пример на анимацию подъема предметов вихрем (рис. 7.39) представлен следующим фрагментом программы: l o a d wind; [sx sy s z ] = m e s h g r i d ( 8 0 , 2 0 : 1 : 5 5 , 5 ) ; verts = stream3(x,y,z,u,v,w,sx,sy,sz); si = streamline(verts); iverts = interpstreamspeed(x,y,z,u,v,w,verts,.025); a x i s t i g h t ; view ( 3 0 , 3 0 ) ; d a s p e c t ( [ l 1 . 1 2 5 ] ) ; camproj p e r s p e c t i v e ; camva(8); s e t (gca, ' D r a w M o d e ' , ' f a s t ' ) box o n ; s t r e a m p a r t i c l e s ( i v e r t s , 3 5 , ' a n i m a t e ' , 1 0 , . . . 'ParticleAlignment','on') Вновь обращаем внимание читателей, что эти примеры лишь иллюстрирует (на этот раз в развитии) результаты моделирования. Само моделирование таких сложных явлений достаточно сложно и вряд ли разумно при использовании ПК.
Рис. 7.38. Анимация эффекта подъема камней при развитии смерча
Рис. 7.39. Анимация эффекта подъема камней при развитии смерча в ограниченном пространстве 307
Глава 7. Анимационная и дескрипторная графика 7.6.8. Применение «конусной» графики для визуализации струй Дети по наитию исследует течение ручейков воды, пуская по ним бумажные кораблики. Вышедшие из детского возраста физики тоже используют подобный подход — только вместо корабликов они запускают в струи воздуха маленькие конусы - их движение позволяет исследовать движение воздушных (газовых, жидкостных) струй. Приведенный ниже фрагмент программы дает представление о применении этой техники визуализации (рис. 7.40): l o a d wind; wind_speed = s q : r t ( u . ^ 2 + v / 2 + w . A 2 ) ; hiso = patch(isosurface(x,y,z,wind_speed,40)) ; i s o n o r m a l s ( x , y , z , wind s p e e d , h i s o ) ; s e t ( h i s o , 'FaceColor', ' r e d ' , 'EdgeColor', 'none') ; heap = p a t c h ( i s o c a p s (x, y, z,- wind_speed, 40) , . . . 'FaceColor','interp', 'EdgeColor','none'); colormap h s v ; d a s p e c t ( [ 1 , 1 , 1 ] ) ; [f v e r t s ] = . . . r e d u c e p a t c h ( i s o s u r f a c e (x, / , z , w i n d _ s p e e d , 3 0 ) , 0 . 0 7 ) ; hi c o n e p l o t (x, y, z, u, v, w, v e r t ; ; ( : , 1) , v e r t s ( : , 2) , v e r t s ( : , 3) , 3) ; s e t ( h i , 'FaceColor' , ' b l u e ' , EdgeColor', 'none') ; x r a n g e = l i n s p a c e ( m i n ( x ( : ) ) , m a x (x ( : ) ) , 1 0 ) ; yrange = l i n s p a c e ( m i n ( y ( : ) ) , m a x ( y ( : ) ) , 1 0 ) ; zrange = 3 : 4 : 1 5 ; [cx,cy,cz] = meshgrid(xrange,yrange,zrange); h2 = c o n e p l o t (x, y, z, u, v, w, ex, cy, c z , 2) ; s e t (h2, ' F a c e C o l o r ' , ' g r e e n ' , ' E d g e C o l o r ' , ' n o n e ' ) ; a x i s t i g h t ; box on; camproj p e r s p e c t i v e ; camzoom(1.25); v i e w ( 6 5 , 4 5 ) ; c a m l i g h t ( - 4 5 , 4 5 ) ; s e t (gef, ' R e n d e r e r ' , ' z b u f f e r ' ) ; l i g h t i n g p h o n g ; s e t (heap, '/>mbientStrength ' , .6) Возможно, некоторым читателям представленные выше программы могут показаться довольно сложными. Однако с позиций программирования это простейшие линейные программы, не содержащие никаких управляющих структур и входных параметров. Они реализуются в виде Script-файлов (m-фзйлов процедур) и могут быть исполнены в командной строке как целиком, так и по отдельным командам.
Рис. 7.40. Визуализация 308
потоков и струй с помощью конусов
7.7. Пакет прикладных программ Image Processing
Toolbox
7.7. Пакет прикладных программ Image Processing Toolbox 7.7.1. Знакомство с пакетом Основные средства по обработке изображений входят в пакет прикладных программ Image Processing Toolbox. С его возможностями можно детально ознакомиться, выполнив следующую команду: >> help images Image Processing Toolbox. Version 2.2.2 (R12) 10-Mar-2000 Release information. Readme- Display information about v e r s i o n s 2.0, 2 . 1 , and 2.2. Toolbox p r e f e r e n c e s . i p t g e t p r e f - Get value of Image Processing Toolbox p r e f e r e n c e , i p t s e t p r e f - Set value of Image Processing Toolbox p r e f e r e n c e . Demos. dctdemo- 2-D DCT image compression demo, edgedemo- Edge d e t e c t i o n demo. firdemo - 2-D FIR f i l t e r i n g and f i l t e r design demo, imadjdemo - I n t e n s i t y adjustment and histogram e q u a l i z a t i o n demo. landsatdemo - Landsat color composite demo, nrfiltdemo - Noise reduction f i l t e r i n g demo., qtdemo - Quadtree decomposition demo, roidemo - R e g i o n - o f - i n t e r e s t processing demo. В обширном списке (выше он дан лишь выборочно) содержится более сотни команд для работы с растровыми изображениями. Эти изображения могут быть получены со сканера, цифрового фотоаппарата либо от видеокамеры, подключенной к компьютеру через видеобластер или подобное устройство.
7.7.2. Возможности пакета Пакет Image Processing Toolbox поддерживает следующие возможности: • отображение рисунков различных графических форматов (в том числе с высоким разрешением) на экране дисплея; • расширенные функции записи рисунков в файл, считывание их из файла и получение информации о файле; • выполнение геометрических операций с графическими объектами, таких как разворот или интерполяция данных; • операции на уровне элементарных частей изображений — пикселов; • аналитические операции с изображениями; • осуществление компрессии и декомпрессии изображений; • выполнение различных видов фильтрации изображений и конструирование фильтров; • выполнение различных преобразований изображений; • поразрядные (битовые) операции с рисунками; • операции задания и преобразования цветов; 309
Глава 7. Анимационная
и дескрипторная
графика
• преобразование типов и форматов рисунков; • демонстрация возможностей пакета; • организация показа слайдов. Объем данной книги не позволяет описать данный пакет подробно, но в этом нет и особого смысла, поскольку пакет уже описан в книгах [44, 54]. Если вы уяснили методы работы с системой MATLAB, вам не составит особого труда ознакомиться с составом всех команд и функций пакета и опробовать их на практике. В связи с этим мы остановимся лишь на нескольких демонстрационных примерах. 7.7.3. Примеры применения пакета Есть ряд способов ознакомиться с весьма обширными и впечатляющими возможностями пакета Image Processing Toolbox: с помощью демонстрационных примеров (Demos) в справочной базе данных системы, путем непосредственного запуска этих примеров (список приводился выше), запуском отдельных команд и т. д. Пример реконструкции изображений с управлением оригиналом, создаваемым изображением и ошибкой реконструкции, представлен в файле dctdemo. Он выводит свое окно со средствами пользовательского интерфейса. Можно задать выбор той или иной исходной картинки, задать степень компрессии изображения и визуально наблюдать за характером преобразований (рис. 7.41). Для просмотра следует нажать кнопку Apply (Применить), кнопка Close (Закрыть) закрывает окно, а кнопка Info выводит информацию о примере. Другой важной сферой применения пакета Image Processing Toolbox является фильтрация изображений, например с целью их очистки от шумовых помех. Насколько эффективна такая фильтрация, наглядно показывает рис. 7.42, полученный при запуске демонстрационного примера nrfiltdemo. В качестве исходного изображения взят фотоснимок планеты Сатурн, затем с помощью генератора случайных чисел на него нанесены помехи в виде точек. Имеется возможность оценить степень очистки изображения от помех при использовании различных алгоритмов фильтрации, представленных в пакете Image Processing Toolbox рядом функций. Следующий пример иллюстрирует возможность изменения яркости изображения (рис. 7.43). Кривая яркости может устанавливаться перемещением ее точек с помощью мыши. Можно задавать линейный или нелинейный вид этой кривой и тут же наблюдать изменение характеристик изображения. Вид кривой существенно
Org in i al Trees m i age
DCT coefcie i nts i J jj 1 D I C.oefka.crt.sStai6 e ti4d •
Рис. 7.41. Окно компрессии и реконструкции изображения 310
Рис. 7.42. Окно демонстрации возможностей фильтрации изображений
7.7. Пакет прикладных программ Image Processing Toolbox
ЧП* Д *
Specy fi a regoin of niterest by ckckoig on h te
Г!»
*йн)*пвы
с™,
••;:
Unshaip Masking ' '
image on the letl to scteci vertices or а рсчудол Each click adds anothet veite* ShH-ciek I n R n f i l c k c k ] to select the Inal vertex and display the legion
_щ
• ContfW
'
„•
^ o ~ ~ ~
•ннннш ... WE. .•-••. "it • Owe '- • •
Рис. 7.43. Окно демонстрации изменения яркости изображения
Puc. 7.44. Окно демонстрации повышения четкости изображения в заданной зоне
влияет на яркость и контрастность изображений и позволяет выполнять тоновую коррекцию, например, осветлять слишком темные изображения или, наоборот, затемнять светлые изображения. Наконец, последний в этом разделе пример (остальные вы можете просмотреть самостоятельно) показывает действенность алгоритма повышения четкости изображения в произвольной его области (рис. 7.44). В нашем случае эта область ограничена треугольником. В окне можно наблюдать (и выбирать) исходное изображение, задавать область действия алгоритма и просматривать результирующее изображение. Даже эти примеры дают возможность оценить обширные возможности пакета Images в технике обработки реальных изображений. 7 . 7 . 4 . Примеры программирования задач Вы можете ознакомиться с каждым демонстрационным примером пакета Images, выполнив команду type fname, где fname — имя файла с демонстрационным примером. Однако следует отметить, что демонстрационные программы являются весьма сложными, поскольку создают окна в виде стандартных панелей с современными элементами пользовательского интерфейса и переключателями выбора вариантов. Мы рекомендуем читателю воздержаться от знакомства с этими программами до ознакомления с главой 10, в которой систематически описаны средства программирования системы MATLAB. А пока мы ограничимся парой характерных примеров, наглядно показывающих, что при работе с системой MATLAB вполне можно руководствоваться народной поговоркой о том, что не боги горшки обжигают. Рассмотрим, к примеру, задачу фильтрации искаженного помехами произвольного изображения, представленного некоторым файлом. Реализующая эту сложную и весьма эффективную операцию программа выглядит следующим образом: % Picture filter I = imread('saturn.tif'); h = [1 2 1; 0 0 0; -1 -2 - 1 ] ; 12 = filter2(h,I); imshow(I2,[ ]), colorbar В результате исполнения этой простой и вполне очевидной программы можно получить отфильтрованное изображение из файла saturn.tif (рис. 7.45). Хотите попробовать обработать какой-либо снимок? Все, что для этого нужно, — подгото311
Глава 7. Анимационная
и дескрипторная
графика
вить снимок в нужном формате (например, tif) и заменить во второй строке имя демонстрационного файла на имя вашего файла. Рассмотрим еще один достаточно простой пример — построение сферы в виде глобуса и наклеивание на полушарие этого глобуса изображения карты погоды: load e a r t h s p h e r e ; h = firdobj ( ' T y p e ' , ' s u r f а с е ' ) ; h e m i s p h e r e = [ones ( 2 5 7 , 1 2 5 ) , X , o n e s ( 2 5 7 , 1 2 5 ) ] ; s e t ( h , 'CData' , flipud(hemisphere) , 'FaceColor' , ' t e x t u r e m a p ' ) colormap(map) axis equal v i e w ( [ 9 0 0]) s e t ( g c a , 'CameraViewAngleMode' , ' m a n u a l ' ) view( [65 30]) Полученное при этом изображение показано на рис. 7.46. Пакет Images можно рассматривать как полезный инструмент для создания новых алгоритмов и методов обработки изображений и обучения специалистов. Применение его непосредственно для обработки изображений вполне возможно, но все же едва ли целесообразно. Дело в том, что обширнейшие, возможности по обработке изображений открывают профессиональные графические пакеты, например, Adobe Photoshop, Ulead PhotoImpact, Corel Draw [73] и другие, в которых реализованы самые современные методы обработки изображений и использованы последние новации пользовательского интерфейса. В этом случае достоинство средств MATLAB проявляется только в математиче__.., ской прозрачности реализаций алгэрит...'••'••••""•' •''•'.' мов обработки изображений. 1, '
. ;. . ' Рис. 7.45. Отфильтрованное изображение планеты Сатурн и шкала градаций серого цвета
Рис. 7 АС. Пример построения сложного изображения — реконструкция глобуса
7 . 8 . Графический и н т е р ф е й с пользователя GU5 7.8.2. Основные команды для создания GU! Опытные пользователи нередко используют MATLAB для создания своих собственных систем. Этому во многом способствует идеология системы — хранение большей части команд и функций в виде m-файлов. Простота коррекции файлов 312
7.8. Графический, интерфейс пользователя
GUI
и отсутствие необходимости явно объявлять создание новых команд и функций привели к появлению множества программных систем на базе MATLAB, особенно в таких областях, как решение задач линейной алгебры, моделирование различных систем и структур и т. д. В MATLAB дескрипторная графика позволяет конструировать детали графического пользовательского интерфейса — GUI (Graphic User Interface). При этом различные функции и m-файлы вызываются из графического окна общего стандартного вида. Однако наполнение окна элементами интерфейса (кнопками, меню, слайдерами, надписями и т. д.) задается пользователем. Полный список команд и функций для проектирования пользовательского интерфейса можно получить, выполнив команду help u i t o o l s . Ниже перечислены все команды и функции данного назначения. Функции пользовательского интерфейса GUI: • u i c o n t r o l — создание управляющего элемента; • uimenu — создание пользовательского меню; • ginput — графический ввод с помощью мыши. Перечень команд и функций пользовательского интерфейса: » d r a g r e c t — создание выделяющего прямоугольника с помощью мыши; • rbbox — растягивание прямоугольника мышью; • selectmoveresize — интерактивное выделение, перемещение и копирование объектов с помощью мыши; • w a i t f o r b u t t o n p r e s s — ожидание нажатия клавиши клавиатуры или кнопки мыши в окне; » waitfor — прекращение выполнения программы в ожидании уничтожения заданного графического объекта или изменения его свойств; • uiwait — прекращение выполнения программы в ожидании вызова функции uiresume или закрытия заданного графического окна; • uiresume — возобновить выполнение после блокировки; • uisuspend — прекращение интерактивного состояния фигуры; • u i r e s t o r e — возобновление интерактивного состояния фигуры. Средства проектирования пользовательского интерфейса: • guide — создание GUI; • a l i g n — выровнять положение объектов интерфейса; • cbedit — изменение повторного вызова объектов; • menuedit — изменение меню; » p r o p e d i t — изменение свойств объектов. Средства создания диалоговых окон: • dialog — создание диалогового окна; • axlimdlg — ограничение размеров диалогового окна; • e r r o r d l g — создание окна с сообщением об ошибке; • helpdlg — создание справочного окна; • inputdlg — создание окна диалога ввода; • l i s t d l g — создание окна диалога для выбора вариантов параметра из списка; • menu — создание меню диалогового ввода; • msgbox — создание окна сообщений; 313
Глава 7. Анимационная и дескрипторная графика • questdlg — создание окна запроса; • warndlg — создание окна предупреждения; • u i g e t f i l e — создание стандартного окна открытия файлов; • u i p u t f i l e — создание стандартного окна записи файлов; • u i s e t c o l o r — создание окна выбора цвета; • u i s e t f o n t — создание окна выбора шрифта; • pagedlg — создание диалогового окна параметров страницы; • p r i n t d l g — создание диалогового окна печати; • waitbar — создание окна с индикатором прогресса. Создание меню: • makemenu — создание структуры меню; • menubar — устанавливает типовые свойства для объекта MenuBar; • umtoggle — изменяет статус параметра "checked" для объекта uimenu; • winmenu — создает подменю для меню Window. Создание кнопок панели инструментов и управление ими: • btngroup — создать кнопку панели инструментов; • b t n s t a t e — запросить статус кнопки; • b t n p r e s s — управление кнопкой; • btndown — нажать кнопку; • btnup — отпустить кнопку. Утилиты задания свойств объектов figure/axes: • d r u p r o p — удалить свойство объекта; • getuprop — запросить свойство объекта; • setuprop — установить свойство объекта. Вспомогательные утилиты: • a l l c h i l d — запросить все порожденные объекты; • f i n d a l l — найти все объекты; • hidegui — скрыть/открыть объекты GUI; • edtext — интерактивное редактирование объектов t e x t ; • g e t s t a t u s — запросить свойства строки объекта figure; • s e t s t a t u s — установить свойства строки объекта figure; • popupstr — запросить свойства строки выпадающего меню; • remapfig — изменить положение объекта figure; • s e t p t r — установить указатель на объект figure; • g e t p t r — получить указатель на объект figure; • overobj — запросить дескриптор объекта, над которым находится курсор мыши. Таким образом, MATLAB содержит обширный набор команд и функций для создания типовых элементов пользовательского интерфейса. 7 . 8 . 3 . Простой пример создания объектов GUI Ниже представлена программа (распечатка m-файла с именем ui), которая при запуске создает 4 объекта интерфейса: 314
7.8. Графический интерфейс пользователя
GUI
kl=uicontrol('Style ', 'pushbutton', 'Units ', 'normalized', 'Position', [ .7 .5 .2 .1] 'String','click here'); k2=uicontrol ( 'Style', 'pushbutton', 'Units', 'normalized', 'Position' [.6 .3 .2 .1] 'String','click here'); 1 ck = uicontrol ('Style', 'pushbutton', 'String', 'Clear ,... 1 'Position', [150 150 100 70], 'Callback , ' d a ' ) ; hpop = uicontrol('Style', •popup 1 ,... •String 1 , 1 hsv|hot|cool|gray',... 'Position', [30 320 100 5 0 ] , . . . 'Callback 1 , 'setmap');
Первые два объекта kl и k2 это малые кнопки с надписью click here («щелкни здесь»). Объект ck это большая кнопка Clear (кстати, действующая). Объект hpop — выпадающий список (тоже действующий, хотя и содержащий поименованные позиции — пустышки). Для создания всех этих объектов используется команда u i c o n t r o l с соответствующими параметрами, задающими стиль (вид) объекта интерфейса, место его размещения и надпись (на кнопках). На рис. 7.47 построены все эти объекты, причем список показан в открытом состоянии. Дескрипторная графика MATLAB позволяет создавать любые детали современного пользовательского интерфейса. Более подробно с функциями создания и модификации пользовательского интерфейса и программированием задач с использованием GUI можно познакомиться в Главе 10 и в [51]. Однако надо отметить, что пока MATLAB не поддерживает визуально-ориентированное программирование, при котором генерация нужных кодов осуществляется автоматически визуальным выбором нужного объекта интерфейса и размещением его в необходимом месте. Такой вид программирования поддерживает пакет Simulink [41], который описан в этой книге достаточно подробно начиная с Главы 12.
t
.
штшм
.
: tutreni Dfedory: j
Nari leak
Edit ViEi-v
bv ~ ^•••• —
hoi •• sod" '
Ш
" 1
Cie* ——'
•
сккЬете
!-Г
Puc. 7.47. Пример построения объектов пользовательского интерфейса
315
Глава 8. Численные методы вычислений 8 . 1 . Решение систем линейных уравнений (СЛУ) В этой главе описываются функции системы MATLAB, предназначенные для реализации алгоритмов типовых численных методов решения прикладных задач. Наряду с базовыми операциями решения систем линейных и нелинейных уравнений рассмотрены функции вычисления конечных разностей, численного дифференцирования, численного интегрирования, триангуляции и аппроксимации Лапласиана. Отдельные разделы посвящены работе с полиномами и численным методам решения обыкновенных дифференциальных уравнений. 8 . 1 . 1 . Элементарные средства Решение систем линейных уравнений (СЛУ) относится к самой массовой области применения матричных методов, описанных в Главах 4 и 5. В этом разделе вы найдете ответы на вопросы, каким образом применяются указанные методы и какие дополнительные функции имеет система MATLAB для решения систем линейных уравнений. Как известно, обычная СЛУ имеет вид: « I , I * I + «1.2*2 + ••• + «i,A, =
bh
«2,1*1 + «2,2*2 + ... + « 2 . Л =
Ьъ
«„.1*1 + «,,.2*п + ••• + « „ . Л = Ь„.
Здесь а, |, а12, •••, а„„ — коэффициенты, образующие матрицу А, которые могут иметь действительные или комплексные значения, хи х2, •••, хп — неизвестные, образующие вектор х, и Ьи Ьг, ..., Ьп — свободные члены (действительные или комплексные), образующие вектор в. Эта система может быть представлена в матричном виде как АХ = в, где А — матрица коэффициентов уравнений, х — искомый вектор неизвестных и в — вектор свободных членов. В зависимости от вида матрицы А и ее характерных особенностей MATLAB позволяет реализовать различные методы решения. Для реализации различных алгоритмов решения СЛУ и связанных с ними матричных операций применяются следующие матричные операторы: +, —, *, /, \, л , '. Как отмечалось ранее, MATLAB имеет два различных типа арифметических операций — поэлементные и для массивов (векторов и матриц) в целом. Матричные арифметические операции определяются правилами линейной алгебры. Арифметические операции сложения и вычитания над массивами выполняются поэлементно. Знак точки «.» отличает операции над элементами массивов от матричных операций. Однако, поскольку операции сложения и вычитания одинаковы для матрицы и элементов массива, знаки «.+» и «.» не используются. Рассмотрим другие операторы и выполняемые ими операции. • * — матричное умножение; • с = А*в — линейное алгебраическое произведение матриц А й в : 316
8.1. Решение систем линейных уравнений
(СЛУ)
Для случая нескалярных А и в число столбцов матрицы А должно равняться числу строк матрицы в. Скаляр может умножаться на матрицу любого размера. • / — л^авое деление. Выражение х = в/А дает решение ряда систем линейных уравнений АХ = в, где А — матрица размера т х п и в — матрица размера п х к; • \ — левое деление. Выражение х = в\А дает решение ряда систем линейных уравнений ХА = в, где А — матрица размера т х п и в — матрица размера п х к. Если А — квадратная матрица, то А\В — примерно то же самое, что и inv(A)*B, в остальных случаях возможны варианты, отмеченные ниже. Если А — матрица размера п х п, а в — вектор-столбец с и компонентами или матрица с несколькими подобными столбцами, тогда х - А\В — решение уравнения АХ = в, которое находится хорошо известным методом исключения Гаусса. Если А — матрица размера т х п и т Ф п, а в представляет собой вектор-столбец с m компонентами или матрицу с несколькими такими столбцами, тогда система оказывается недоопределенной или переопределенной и решается на основе минимизации второй нормы невязок. Ранг к матрицы А находится на основе QR-разложения (Глава 11) с выбором ведущего элемента. Полученное решение х будет иметь не больше чем к ненулевых компонентов на столбец. Если к < я, то решение, как правило, не будет совпадать с p i n v (А) *в, которое имеет наименьшую норму невязок ||х||. — возведение матрицы в степень. х л р — это х в степени р, если р — скаляр. Если р — целое число, то степень матрицы вычисляется путем умножения х на себя р раз. Если р — целое отрицательное число, то х сначала инвертируется. Для других значений р вычисляются собственные значения и собственные векторы, так что если [V, D]=eig (X), то х л р=\/*о. ~p/v. Если X — скаляр и р — матрица, то Х Л Р — это скаляр х, возведенный в Л матричную степень Р. Если х и р — матрицы, то Х Р становится некорректной операцией и система выдает сообщение об ошибке. Возможный вариант решения матричного уравнения с применением оператора л можно представить как х = в*А л ~'. • ' — транспонирование матрицы, то есть замена строк столбцами и наобо1 рот. Например, А — транспонированная матрица А. Для комплексных матриц транспонирование дополняется комплексным сопряжением. Транспонирование при решении СЛУ полезно, если в матрице А переставлены местами столбцы и строки.
•
л
При записи СЛУ в матричной форме необходимо следить за правильностью записи матрицы А и вектора в. Пример (в виде т-файла): А=[2
1
1
-5 1
0 -6
0 2 -1
1; 4; -7;
2
6] ;
В=[8 9 - 5 0 ] ; Х1=В/А Х2=В*А" ч - 1
317
Глава 8. Численные методы, вычислений X3=B*inv(A) Эта программа выдает результаты решения тремя способами: XI = 3 .0000-4 .0000 Х2 = 3 .0000-4 .0000 хз = 3 .0000-4 .0000
.0000
1 .0000
-1 .0000
1 .0000
-1 .0000
1 .0000
_ 1
Как и следовало ожидать, результаты оказываются одинаковыми для всех трех методов. При решении систем линейных уравнений, особенно с разреженной матрицей коэффициентов, полезно применение функций colmmd, symmmd и symamd, описанных ранее в Главе 5. Подобным образом можно решать системы линейных уравнений с комплексными элементами матриц, которые широко используются в практике расчетов электро- и радиотехнических цепей на переменном токе.
8.1.2. Решение систем линейных уравнений с ограничениями Теперь рассмотрим функции, введенные для решения систем линейных уравнений с ограничениями методом наименьших квадратов: • х = i s c o v (А, в, V) — возвращает вектор X решения СЛУ вида А*х = в + е, где е — вектор шумов, который имеет ковариационную матрицу V. Реализуется метод наименьших квадратов в присутствии шумов с известной ковариацией. Прямоугольная матрица А должна быть размера т х п, где т > п. При решении минимизируется следующее выражение: (AX-b) ' *inv(V) * (АХ-Ь) . Решение имеет вид X = i n v ( A ' * inv (V) *A) *A' *inv(V) *B. Алгоритм решения, однако, построен так, что операция инвертирования матрицы v не проводится; • [X,dx] = 1 S C O V ( A , B , V ) — возвращает также стандартную погрешность х, помещая ее в переменную dx. Статистическая формула для стандартной погрешности вычисления коэффициентов имеет следующий вид: mse = В'*(inv(V)-inv(V)*A*inv(A'*inv(V)*A)*A'*inv(V)) *B./(m-n) dX = sqrt(diag(inv(A'*inv(V)*A)*mse)) • X = i s q n o n n e g (A, B) — решение СЛУ АХ = в методом наименьших квадратов с неотрицательными ограничениями. А — действительная прямоугольная матрица, В — действительный вектор. Вектор х содержит неотрицательные элементы ху-> 0, г д е у = I, 2, ... п. Критерий: минимизация второй нормы вектора В—АХ; • X = l s q n o n n e g (А, в, Х0) — решение СЛУ с явно заданным неотрицательным начальным значением х для итераций; • [X,W] = l s q n o n n e g ( . . . ) — вместе с решением возвращает вторую норму вектора остатков в квадрате; • [X,w,Wlj = l s q n o n n e g ( . . . ) — вместе с решением возвращает вторую норму вектора остатков в квадрате и вектор остатков W1; • [X, w, wi, e x i t f l a g ] = l s q n o n n e g ( . . . ) — вместе с решением возвращает вторую норму вектора остатков в квадрате, вектор остатков wi и флаг e x i t f l a g , равный I, если решение сходится после заданного по умолчанию числа итераций, и 0 — в противном случае; 318
8.1. Решение систем линейных
уравнений
(СЛУ)
•
[x,w, wi, e x i t f l a g , o u t p u t ] = lsqnonneg ( . . . ) — дополнительно возвращает число итераций в o u t p u t ; • [ X , W , W l , e x i t f l a g , o u t p u t , l a m b d a ] = l s q n o n n e g ( . . . ) —дополнительно возвращает вектор lambda, минимизирующий произведение lambda wi на последнем шаге итераций решения, lambda (i) близко к нулю, когда X(i) положительно, lambda (i) отрицательно, когда X(i) равно 0; • X=lsqnonneg(А,В,Х0,options) или[X, W, Wl, e x i t f l a g , o u t p u t , l a m b d a ] = l s q n o n n e g (А, В, Х0, o p t i o n s ) — обычно используется, если при предыдущей попытке решения системы e x i t f l a g = l или если необходимо изменить заданный по умолчанию порог отбора X tolX, равный lO*max(size(A))*norm(A, l)*eps (произведению первой нормы матрицы, большего из измерений матрицы, машинной точности и 10). Параметры o p t i o n s должны быть предварительно заданы при помощи команды o p t i m s e t . Lsqnonneg использует только параметры ' d i s p l a y 1 и ' tolX '. Поэтому наиболее часто используемая вместе с l s q n o n n e g форма записи команды — o p t i o n s = o p t i m s e t (' tolX ' , tolvalu.e) , где tolvalue - новое значение порога отбора по X. Применение ограничений позволяет избежать получения отрицательных корней, хотя и ведет к появлению несколько больших погрешностей решения, чем в случае решений без ограничений. Пример: >>
С=[4 3;12
5;3
12];Ь=[1,45,41];D=lsqnonneg(С,b')
D = 2.2242 2.6954
8.1.3. Решение систем линейных уравнений с комплексными элементами В ряде задач, например, при расчете электрических цепей символическим методом, нужно решение систем линейных уравнений с комплексными элементами матрицы и вектора свободных членов. Приведем пример такого решения для системы из трех уравнений: >> А
- 0 . 0 ! •0.09
А=[4+i
0.24
4 .0000
+ 1 .0000i
3 -0.15;
0.04
-0.08
4+i]
= 0.2400
-0.0800
0.0900
3.0000
-0.1500
0.0400
-0.0800
4.0000
В=[8
+
1.0000i
9 20]
В =
20 Х=В/А X = 1.7764
- 0.4319i
2.9870
+ 0.0020i
4.8427
-
1.2192i
Любопытно, что решение для этого примера заметно отличается от полученного с помощью системы Mathcad [21—23]. Тем не менее проверка показывает, что в среде MATLAB это решение верно: >> Х*А ans = 8.0000 9.0000 - O.OOOOi 20.0000
319
Глава 8. Численные методы вычислений Причина расхождения кроется в том, что вектор В задан как вектор-строка, так что решается по существу иная система уравнений. Далее мы приведем другой пример решения, при котором используется представление вектора В в виде вектора-столбца.
8.2. Решение СЛУ с разреженными матрицами Решение СЛУ с разреженными матрицами — хотя и не единственная, но несомненно одна из основных сфер применения аппарата разреженных матриц, описанного в Главе 5. Ниже приведены функции, относящиеся к этой области применения разреженных матриц. Большинство описанных методов относится к итерационным, то есть к тем, решение которых получается в ходе ряда шагов — итераций, постепенно ведущих к получению результата с заданной погрешностью или с максимальным правдоподобием. Описанные ниже функции MATLAB могут 1 и должны применяться и при решении обычных СЛУ — без разреженных матриц . 8 . 2 . 1 . Точное решение, метод наименьших квадратов и сопряженных градиентов Начнем описание точных решений СЛУ с приведенных ниже функций. • lsqr(A, В) — возвращает точное решение х СЛУ А*х = в, если оно существует, в противном случае — возвращает решение по итерационному методу наименьших квадратов. Матрица коэффициентов А должна быть прямоугольной размера т х п, а вектор-столбец правых частей уравнений в должен иметь размер т . Условие т > = п может быть и необязательным. Функция l s q r начинает итерации от начальной оценки, по умолчанию представляющей собой вектор длиной п, состоящий из нулей. Итерации производятся или до сходимости к решению, или до появления ошибки, или до достижения максимального числа итераций (по умолчанию равного min(20,m, n), либо 20, либо числу уравнений, либо числу неизвестных). Сходимость достигается, когда отношение вторых норм векторов norm(B-Ax) /norm (В) меньше или равно погрешности метода t o l (по умолчанию 1е-6); • l s q r (А, в, t o l ) — возвращает решение с заданной погрешностью (порогом отбора) t o l ; • l s q r (A,b, t o l , m a x i t ) — возвращает решение при заданном максимальном числе итераций maxit вместо, возможно, чересчур малого числа, заданного по умолчанию; • lsqr(A, b, tol,maxit,M) И lsqr(A,b,tol,maxit,Ml,M2) — при решении используются матрица предусловий м или м = М1*М2, так что производится решение системы inv(M)*A*x = inv(M)*b относительно х. Если Ml или М2 — пустые матрицы, то они рассматривается как единичные матрицы, что эквивалентно отсутствию входных условий вообще; Использование всех этих функций, кроме lsqr, как правило, ограничено системами уравнений, в которых А — нормальная квадратная матрица, т. е. А*А = АА* — где А* — сопряженная (эрмитова) матрица А. 320
8.2. Решение СЛУ с разреженными матрицами • l s q r (А, в, tol,maxit,Ml,M2,X0) — точно задается начальное приближение хо. Если хО — пустая матрица, то по умолчанию используется вектор, состоящий из нулей; • х = l s q r (А,в, tol,maxit,Ml,M2,XO) — при наличии единственного выходного параметра возвращает решение х. Если метод l s q r сходится, выводится соответствующее сообщение. Если метод не сходится после максимального числа итераций или по другой причине, на экран выдается относительный остаток norm(B-A*x) /погт(В) и номер итерации, на которой метод остановлен; • [х-, flag] = l s q r (A,x, t o l , m a x i t М1,М2,Х0) — возвращает решение X и флаг flag, описывающий сходимость метода; • [X, flag, r e l r e s ] = lsqr (A, X, tol,maxit,Ml,M2,X0) — также возвращает относительную вторую норму вектора остатков relres=norm(B-A*X) /norm (В). Если флаг flag равен 0, то r e l r e s < t o l ; • [ X , f l a g , r e l r e s , i t e r ] = bicg(A,B,tol,maxit,M1,M2,ХО) — также возвращает номер итерации, на которой был вычислен х. Значение i t e r всегда удовлетворяет условию 0 < i t e r < maxit; • [X, f l a g , r e l r e s , i t e r , r e s v e c ] = lsqr(A, B,tol,maxit,Ml,M2,XO) — также возвращает вектор вторых норм остатков resvec для каждой итерации, начиная с resvec (1) = norm(B-A*X0). Если флаг flag равен 0, то resvec имеет длину i t e r + 1 и resvec (end) < tol*norm(B). Возможны значения flag, равные 0, 1, 2, 3 и 4. Значения f l a g предоставляют следующие данные о сходимости решения: 0 — решение сходится при заданной точности t o l и числе итераций не более заданного maxit; 1 — число итераций равно заданному maxit, но сходимость не достигнута; 2 — матрица предусловий М плохо обусловлена; 3 — процедура решения остановлена, поскольку две последовательные оценки решения оказались одинаковыми; 4 — одна из величин в процессе решения вышла за пределы допустимых величин чисел (разрядной сетки компьютера), Если флаг больше нуля, то возвращается не последнее решение, а то решение, которое имеет минимальное значение отношения вторых норм векторов norm(B-A*x)/norm(В) . Пример: » А=[0 0 1 2 ; 1 3 0 0;0 1 0 1;1 0 1 0 ] ; » В=[11; 7; 6; 4];
Введенные в этом примере матрица А и вектор в будут использованы и в других примерах данного раздела. В приведенном ниже примере процесс итераций сходится на пятом шаге с относительным остатком (отношением вторых норм 13 векторов невязки и свободных членов) 1.9 1(П : >> lsqr(А,В,1е-6,5) lsqr converged at iteration 5 to a solution with relative residual 1.9e-013
321
Глава 8. Численные методы вычислений ans = 1.0000 2.0000 3.0000 4.0000 А теперь проверим работу функции lsqr на решении системы из трех линейных уравнений с частично комплексными элементами: » A=[4+i 0.24 -0.08;0.09 3 -0.15; 0.04 -0.08 4+i] А = 4.0000 + 1.OOOOi 0.2400 -0.0800 0.0900 3.0000 -0.1500 0.0400 -0.0800 4.0000 + 1.0000i >> В=[8 9 20] В = 8 9 20 >> lsqr(А,В1) lsqr stopped at iteration 3 without converging to the desired tolerance le-006 because the maximum number of iterations was reached. The iterate returned (number 3) has relative residual 3.5e-017 ans = 1.7870 - 0.4677i 3.1839 - 0.0452i 4.7499 - 1.1837i >> A*X ans = 8.0000 - 0.OOOOi 9.0000 - 0.OOOOi 20.0000 + 0.OOOOi На этот раз результат практически совпадает с полученным системой Mathcad [21—23]. Этот пример наглядно показывает, что неопытному пользователю надо внимательно относиться к получаемым результатам. И особенно внимательным надо быть при задании типа векторов, поскольку вектор-столбец и вектор-строка это разные типы векторов. 8 . 2 . 2 . Двунаправленный метод сопряженных градиентов
Решение СЛУ с разреженной матрицей возможно также известным двунаправленным методом сопряженных градиентов. Он реализован указанной ниже функцией. • bicg(A, в) — возвращает решение х СЛУ А*Х = в. Матрица коэффициентов А должна быть квадратной размера п х п, а вектор-столбец правых частей уравнений в должен иметь длину п. Функция bicg начинает итерации от начальной оценки, по умолчанию представляющей собой вектор длиной п, состоящий из нулей. Итерации производятся или до сходимости к решению, или до появления ошибки, или до достижения максимального числа итераций (по умолчанию равно min(20,n) — либо 20, либо числу уравнений). Сходимость достигается, когда относительный остаток norm(B-A*x) /norm (В) меньше или равен погрешности метода (по умолчанию 1е-6). Благодаря использованию двунаправленного метода сопряжен322
8.2. Решение СЛУ с разреженными матрицами ных градиентов bicg сходится за меньшее число итераций, чем l s q r (в нашем примере быстрее на одну итерацию), но требует квадратную матрицу А, отбрасывая информацию, содержащуюся в дополнительных уравнениях, в то время как l s q r работает и с прямоугольной матрицей; • bicg (А, В, t o l ) — выполняет и возвращает решение с погрешностью (порогом отбора) t o l ; • bicg (A,b, t o l , m a x i t ) — выполняет и возвращает решение при заданном максимальном числе итераций maxit; • bicg(A,b,tol,maxit,M) иbicg(A,b,tol,maxit,Ml,M2) —при решении используются матрица предусловий м или м = М1*М2, так что производится решение системы inv(M)*A*x = inv(M)*b относительно х. Если Ml или М2 — пустые матрицы, то они рассматривается как единичные матрицы, что эквивалентно отсутствию входных условий вообще; • bicg (А, В, t o l , maxit, Ml,M2,X0) — точно задается начальное приближение хо. Если хО — пустая матрица, то по умолчанию используется вектор, состоящий из нулей; • х = bicg (А, В, t o l , m a x i t , Ml, M2, ХО) — при наличии единственного выходного параметра возвращает решение X. Если метод bicg сходится, выводится соответствующее сообщение. Если метод не сходится после максимального числа итераций или по другой причине, на экран выдается относительный остаток norm(B-A*X) /norm(B) и номер итерации, на которой метод остановлен; • [X, flag] = bicg (A, X, t o l , maxit, Ml, M2, ХО) — возвращает решение X и флаг flag, описывающий сходимость метода; • [X, flag, relres] = bicg (A, X, t o l , maxit,Ml, M2, хО) — также возвращает относительную вторую норму вектора остатков relres=norm(B-A*X) /norm (В). Если флаг flag равен 0, то r e l r e s t o l ; • [X, f l a g , r e l r e s , i t e r ] = bicg(А,В, tol,maxit,Ml,M2,ХО) — также возвращает номер итерации, на которой был вычислен х. Значение i t e r всегда удовлетворяет условию 0 < i t e r < maxit; • [X, flag, relres', i t e r , resvec] = bicg (A, B, t o l , maxit, Ml, M2 , XO) — также возвращает вектор вторых норм остатков resvec для каждой итерации, начиная с resvec (1) = norm(B-A*X0). Если флаг flag равен 0, то resvec имеет длину i t e r + 1 и resvec (end) < tol*norm(B). Возможны значения flag, равные 0, 1, 2, 3 и 4. Значения flag предоставляют следующие данные о сходимости решения: 0 — решение сходится при заданной точности tol и числе итераций не более заданного maxit; 1 — число итераций равно заданному maxit, но сходимость не достигнута; 2 — матрица предусловий М плохо обусловлена; 3 — процедура решения остановлена, поскольку две последовательные оценки решения оказались одинаковыми; 4 — одна из величин в процессе решения вышла за пределы допустимых величин чисел (разрядной сетки компьютера). Пример: >> bicg(А,В) BICG converged at i t e r a t i o n 4 to a solution with relative residual 2.3e-015 323
Глава 8. Численные методы вычислений ans = 1.0000 2.0000 3.0000 4.0000
8.2.3. Устойчивый двунаправленный метод Еще один двунаправленный метод, называемый устойчивым, реализует функция bicgstab: • b i c g s t a b (А, В) — возвращает решение х СЛУ А*х = в. А — квадратная матрица. Функция b i c g s t a b начинает итерации от начальной оценки, по умолчанию представляющей собой вектор длиной п, состоящий из нулей. Итерации производятся либо до сходимости метода, либо до появления ошибки, либо до достижения максимального числа итераций. Сходимость метода достигается, когда относительный остаток norm (B-A*X)/norm (В) меньше или равен погрешности метода (по умолчанию 1е-6). Функция b i c g s t a b (...) имеет и ряд других форм записи, аналогичных описанным для функции bicg (...). Пример: >> bicgstab(А,В)
BICGSTAB converged at iteration 3.5 to a solution with relative residual 6.5e-012 ans = 1.0000 2.0000 3.0000 4.0000
8.2.4. Метод сопряженных градиентов Итерационный метод сопряженных градиентов реализован функцией peg: • peg (А, В) возвращает решение х СЛУ А*х=в. Матрица А должна быть 2 3 квадратной, симметрической и положительно определенной . Функция peg начинает итерации от начальной оценки, представляющей собой вектор длиной п, состоящий из нулей. Итерации производятся либо до сходимости решения, либо до появления ошибки, либо до достижения максимального числа итераций. Сходимость достигается, если относительный остаток norm(b-A*X) /norm (В) меньше или равен погрешности метода (по умолчанию 1е-6). Максимальное число итераций — минимум из п и 20. Функция рсд(...) имеет и ряд других форм записи, описанных для функции bicg (...). Пример: »
peg(А,В)
Warning: PCG stopped after the maximum 4 iterations without converging to the desired tolerance le-006 The iterate returned (number 4) has relative residual 0.4 6 2 3
324
В нашем примере матрица А — несимметрическая, т. е. A(i,j)~=A(j,i). Матрица называется положительно определенной, если все ее собственные значения (характеристические числа) действительные и положительные.
8.2. Решение СЛУ с разреженными матрицами > In C:\MATLAB\toolbox\matlab\sparfun\pcg.m at l i n e 347 ans = 1.7006 1.2870 -2.0535 8.2912 В данном случае решение к успеху не привело, поскольку матрица А — не симметрическая. Новая функция m i n r e s не требует, чтобы матрица А была положительно определенной. Достаточно, чтобы она была квадратной и симметрической. В отличие от peg минимизируется не относительная невязка, а абсолютная. Но и эта функция не может решить наш пример. >> minres(А,В,1е-6,1000000) minres stopped at i t e r a t i o n 1000000 without converging to the desired tolerance le-006 because the maximum number of i t e r a t i o n s was reached. The i t e r a t e returned (number 1000000) has r e l a t i v e residual ans = -1.9669 3.7757 3.0789 1.9367
0.011
Начиная с MATLAB 6 появилась еще одна новая функция symmlq, которая использует LQ-алгоритм итерационного метода сопряженных градиентов и также не требует, чтобы квадратная симметрическая матрица А4 была положительно определенной.
8.2.5. Квадратичный метод сопряженных градиентов Квадратичный метод сопряженных градиентов реализуется с' помощью функции c g s : • c g s (А, в) — возвращает решение х СЛУ А*х = в. А — квадратная матрица. Функция cgs начинает итерации от начальной оценки, по умолчанию представляющей собой вектор размера п, состоящий из нулей. Итерации производятся либо до сходимости метода, либо до появления ошибки, либо до достижения максимального числа итераций. Сходимость метода достигается, когда относительный остаток norm (B-A*X) /norm (В) меньше или равен погрешности метода (по умолчанию 1е-6). Функция c g s (...) имеет и ряд других форм записи, аналогичных описанным для функции b i c g (...). Пример: >> cgs(А,В) CGS converged at iteration 4 to a solution with relative residual 4e-014 ans = 1.0000 2.0000 4
Это связано с тем, что в примере матрица А — несимметрическая, т. е. A(i,j)~=A(j,i). 325
Глава 8. Численные методы вычислений
3.0000 4.0000 8.2.6. Метод минимизации обобщенной невязки Итерационный метод минимизации обобщенной невязки также реализован в системе MATLAB. Для этого используется функция gmres: • gmres (А, в , r e s t a r t ) — возвращает решение X СЛУ А*х = в. А—квадратная матрица. Функция gmres начинает итерации от начальной оценки, представляющей собой вектор размера п, состоящий из нулей. Итерации производятся либо до сходимости к решению, либо до появления ошибки, либо до достижения максимального числа итераций. Сходимость достигается, когда относительный остаток norm(B-A*X) /norm (В) меньше или равен заданной погрешности (по умолчанию 1е-6). Максимальное число итераций — минимум из n / r e s t a r t и 10. Функция gmres (...) имеет и ряд других форм записи, аналогичных описанным для функции b i c g ( . . . ) . Пример: >> gmres(А,В) GMRES(4) converged a t i t e r a t i o n 1(4) r e l a t i v e r e s i d u a l le-016 ans = 1.0000 2.0000 3.0000 4.0000
to a solution
with
8.2.7. Квазиминимизация невязки — функция qmr Метод решения СЛУ с квазиминимизацией невязки реализует функция qmr: • qmr (А, В) — возвращает решение х СЛУ А*х = Ь. Матрица А должна быть квадратной. Функция qmr начинает итерации от начальной оценки, представляющей собой вектор длиной п, состоящий из нулей. Итерации производятся либо до сходимости метода, либо до появления ошибки, либо до достижения максимального числа итераций. Максимальное число итераций — минимум из п и 20. Функция qmr (...) имеет и ряд других форм записи, аналогичных описанным для функции b i c g (...). Пример: >> q m r ( А , В )
QMR converged at iteration 4 to a solution with relative residual l.le-014 ans = 1.0000 2.0000 3 .0000 4.0000
8.3. Вычисление корней функции одной переменной Ряд функций системы MATLAB предназначен для работы с функциями (function functions — по терминологии фирменного описания системы). Под функциями 326
8.3. Вычисление корней функции одной переменной понимаются как встроенные функции, например sin(x) или ехр(х), так и функции пользователя, например fs(x), задаваемые как М-файлы функции. Может использоваться также класс handle-функций, задаваемых с помощью символа @, например: >> fe=@exp; Такие функции вычисляются с помощью функции f e v a l : » feval(fe,1.0) ans = 2.7183 Довольно часто возникает задача решения (нахождения корней) нелинейного уравнения вида.Д*) = 0 или/|(х) = /2(х). Последнее, однако, можно свести к виду J[x) =/|(х) — /2(х) = 0. Таким образом, данная задача сводится к нахождению значений аргумента х функции J{x) одной переменной, при котором значение функции равно нулю. Соответствующая функция MATLAB, решающая данную задачу, приведена ниже: • f z e r o (fun,x) — возвращает уточненное значение х, при котором достигается нуль функции fun, представленной строкой, при начальном значении аргумента х. Возвращенное значение близко к точке, где функция меняет знак, или равно NaN, если такая точка не найдена; • f z e r o (fun, [xl x2]) — возвращает значение х, при котором f u n ( x ) = 0 с заданием интервала поиска с помощью вектора x = [ x l х 2 ] , такого, что знак fun (x (1) ) отличается от знака fun (x (2) ). Если это не так, выдается сообщение об ошибке. Вызов функции f z e r o с интервалом гарантирует, что f z e r o возвратит значение, близкое к точке, где fun изменяет знак; • f z e r o (fun, x, t o l ) — возвращает результат с заданной погрешностью t o i ; • f z e r o (fun, х, t o l , t r a c e ) — выдает на экран информацию о каждой итерации; • f z e r o (fun, x, t o l , t r a c e , P I , P2,...) — предусматривает дополнительные аргументы, передаваемые в функцию fun ( х , Р 1 , Р2,...). При задании пустой матрицы для t o l или t r a c e используются значения по умолчанию, например f z e r o ( f u n , x , [ ] , [ ] , Р 1 ) . Для функции f z e r o ноль рассматривается как точка, где график функции fun пересекает ось х, а не касается ее. В зависимости от формы задания функции f z e ro реализуются следующие хорошо известные численные методы поиска нуля функции: деления отрезка пополам, секущей и обратной квадратичной интерполяции. Приведенный ниже пример показывает приближенное вычисление л/2 из решения уравнения cos(x) = 0 с представлением косинуса handle-функцией: >> х = f z e r o ( @ c o s , [ I
3])
х = 1.5708
В более сложных случаях настоятельно рекомендуется строить график функции Дх) для приближенного определения корней и интервалов, в пределах которых они находятся. Ниже дан пример такого рода (следующий листинг представляет собой содержимое m-файла funi.m): %Функция, к о р н и к о т о р о й ищутся function f=funl(x) f=0.25*x + sin (x)-1;
327
Глава 8. Численные методы вычислений Построим график функции (рис. 8.1): » х=0:0.1:10; >> p l o t ( x , f u n l ( х ) ) ; g r i d on;
Рис. 8.1. График функции
funl(x)
Из него нетрудно заметить, что значения корней заключены в интервалах [0.5 1], [2 3] и [5 6 ] . Найдем их, используя функцию f zero: >> x l = f z e r o (@funl, [0.5 1]) xl = 0.8905 » x2=fzero(@funl,[2 3]) x2 = 2.8500 » x3=fzero ( d f u n l , [ 5 , 6 ] ) x3 = 5.8128 » x3=fzero(@funl,5,0.001) x3 = 5.8111 Обратите внимание на то, что корень хЗ найден двумя способами и что его значения в третьем знаке после десятичной точки отличаются в пределах заданной погрешности t o l = 0 . 001. К сожалению, сразу найти все корни функция f zero не в состоянии. Решим эту же систему при помощи функции f s o l v e из пакета Optimization Toolbox, которая решает систему нелинейных уравнений вида f(x) = 0 методом наименьших квадратов, ищет не только точки пересечения, но и точки касания. f s o l v e имеет почти те же параметры (дополнительный параметр — задание якобиана) и почти ту же запись, что и функция lsqnonneg, подробно рассмотренная ранее. Пример: » f s o l v e CO. 2 5 * x + s i n ( x ) - l ' ,0:10 ) ans = Columns 1 through 1 0.8 90 50.89052.85002.85002.85005.81285.8128 Columns 8 through 11 5.812 82.850 02.850010.7429
328
8.4. Вычисление минимумов функций Для решения систем нелинейных уравнений следует также использовать функцию solve из пакета Symbolic Math Toolbox. Эта функция способна выдавать результат в символьной форме, а если такого нет, то она позволяет получить решение в численном виде. Пример: >> s o l v e ( ' 0 . 2 5 * х + s i n (х) - I 1 ) ans = .8 904 870807 4 4 38001001103173059554
8.4. Вычисление минимумов функций 8.4.1. Минимизация функции одной переменной Еще одна важная задача численных методов — поиск минимума функции J{x) в некотором интервале изменения х — от х, до х2 [39]. Если нужно найти максимум такой функции, то достаточно поставить знак «минус» перед функцией. Для решения этой задачи используется следующая функция: [X, fval, e x i t f lag, output] = fminbnd (fun, xl, x2, options, pl,p2,...) • fminbnd (fun, xl, x2) — возвращает значение х, которое является локальным минимумом функции fun (х) на интервале xl < х < х2; • fminbnd (fun, xl, x2, options) — сходна с описанной выше формой функции, но использует параметры t o l x , maxfuneval, maxiter, d i s p l a y из вектора options, предварительно установленные при помощи команды optimset (смотрите описание lsqnonneg); • fminbnd (fun, xl, x2, o p t i o n s , PI, P2,...) — сходна С описанной выше, НО передает в целевую функцию дополнительные аргументы: Р1,Р2,.... Если требуется использовать параметры вычислений по умолчанию, то вместо options перед PI, P2 необходимо ввести [ ] (пустой массив); • [x,fval] = fminbnd(...) — дополнительно возвращает значение целевой функции fval в точке минимума; • [х, f v a l , e x i t f l a g ] = fminbnd(...) — дополнительно возвращает параметр e x i t f lag, равный 1, если функция сошлась с использованием o p t i o n s . t o l x , и 0, если достигнуто максимальное число итераций options.maxiter. В этих представлениях используются следующие обозначения: xl,x2 — интервал, на котором ищется минимум функции; Р1,Р2... — дополнительные, помимо х, передаваемые в функцию аргументы; fun — строка, содержащая название функции, которая будет минимизирована; options — вектор параметров вычислений, В зависимости от формы задания функции fminbnd вычисление минимума выполняется известными методами золотого сечения или параболической интерполяции [4]. Пример: >> options=optimset('tolX',l.e-10);[x]=fminbnd(@cos,3,4,options) X= 3.1416
8.4.2. Минимизация функций ряда переменных Значительно сложнее задача минимизации функций нескольких переменных y(x,,x2,...). При этом значения переменных представляются вектором х, причем на329
Глава 8. Численные методы вычислений чальные значения задаются вектором х0. Для минимизации функций ряда переменных MATLAB обычно использует разновидности симплекс-метода Нелдера—Мида. Этот метод является одним из лучших прямых методов минимизации функций ряда переменных, не требующим вычисления градиента или производных функции. Он сводится к построению симплекса в «-мерном пространстве, заданного п + 1 вершиной. В двумерном пространстве симплекс является треугольником, а в трехмерном — пирамидой. На каждом шаге итераций выбирается новая точка решения внутри или вблизи симплекса. Она сравнивается с одной из вершин симплекса. Ближайшая к этой точке вершина симплекса обычно заменяется этой точкой. Таким образом, симплекс перестраивается и обычно позволяет найти новое, более точное положение точки решения. Решение повторяется, пока размеры симплекса по всем переменным не станут меньше заданной погрешности решения. Реализующая симплекс-методы Нелдера—Мида функция записывается в виде: • fminsearch (fun, xO) — возвращает вектор х, который является локальным минимумом функции fun(x). Вблизи хО.хО может быть скаляром, вектором (отрезком при минимизации функции одной переменной) или матрицей (для функции нескольких переменных); • fminsearch (fun, xO, options) — аналогична описанной выше функции, но использует вектор napaMeTpoBoptions точно так же, как функция fminbnd; • fminsearch (fun, xO, options, PI, P2,...) — сходна с описанной выше функцией, но передает в минимизируемую функцию нескольких переменных fun (x, PI, P2,...) ее дополнительные аргументы Pi, P2,.... Если требуется использовать параметры вычислений по умолчанию, то вместо options перед PI, P2 необходимо ввести [ ]; • [x,fval] = fminsearch (...) — дополнительно возвращает значение целевой функции fval в точке минимума; • [х, fval, e x i t f lag] = fminsearch (...) — дополнительно возвращает параметр e x i t f l a g , положительный, если процесс итераций сходится с ис• пользованием options . t o l x , отрицательный, если итерационный процесс не сходится к полученному решению х, и 0, если превышено максимальное число итераций options .maxiter; • [х, fval, e x i t f lag, output] = fminsearch (...) возвращает структуру (запись) output; • o u t p u t . algorithm — использованный алгоритм; • o u t p u t . f uncCount — число оценок целевой функции; • o u t p u t . i t e r a t i o n s — число проведенных итераций. Пользователям, имеющим опыт работы со старыми версиями MATLAB, следует учитывать различия в именах функций минимизации. Они представлены ниже: Версия 4 и ниже
Версия 5 и выше
fmin fmins
fminbnd fminsearch
foption
soptimget,
nnls
lsqnonneg
330
optimsetfzero
8.4. Вычисление минимумов функций 8.4.3. Минимизация тестовой функции Розенброка Классическим примером применения функции f m i n s e a r c h является поиск минимума тестовой функции Розенброка, точка минимума которой находится в «овраге» с «плоским дном»: тЪ(х„х2,а) = 100*(х2 - х, 2 ) 2 + (a- х,) 2 . Минимальное значение этой функции равно нулю и достигается в точке [а а2]. В качестве примера уточним значения х, и х2 в точке [—1.2 1]. Зададим функцию (в файле rb.m): % Тестовая функция Розенброка function f=rb(x,a) if nargin<2 a=l; end f=100*(x(2)-x(l)Л2)A2+(a-x(l))Л2; Теперь решим поставленную задачу: >>options=optimset('tolX',1.е-6); [xmin, opt, rosout]=fminsearch(@rb,[-1.2 1],options) xmin = 1.00001.0000 opt = 4.1940e-014 rosexflag = rosout = i t e r a t i o n s : 101 funcCount: 189 algorithm: 'Nelder-Mead simplex d i r e c t
rosexflag,
search'
Для лучшего понимания сути минимизации функции нескольких переменных рекомендуется просмотреть пример минимизации этой функции, имеющийся в библиотеке демонстрационных примеров Demos (рис. 8.2). И*
t
Рис. 8.2. Графическая иллюстрация минимизации функции Розенброка симплекс-методом 331
Глава 8. Численные методы вычислений
8.4.4. Минимизация функций нескольких переменных Для минимизации функций нескольких переменных можно использовать также функцию MATLAB fminunc и функцию lsqnonlin из пакета Optimization Toolbox. Первая из них позволяет использовать предварительно заданные командой optimset порог сходимости для значения целевой функции, вектор градиентов options .gradobj, матрицу Гесса, функцию умножения матрицы Г^сса или график разреженности матрицы Гесса целевой функции, lsqnonlin реализует метод наименьших квадратов и, как правило, дает наименьшее число итераций при минимизации. Ограничимся приведением примеров их применения для минимизации функции Розенброка: >> options=optimset('tolX',le-6,'TolFun',le-6); >>[xmin, opt, exflag, out, grad, hessian ]=fminunc(@rb, [-1.21],options) Warning: Gradient must be provided for trust-region method; using line-search method instead. > In C:\MATLABR12\toolbox\optim\fminunc.m at line 211 Optimization terminated successfully: Current search direction is a descent direction, and magnitude of directional derivative in search direction less than 2*options.TolFun xmin = 1.0000 1.0000 opt = 1.9116e-011 exflag = 1 out =
iterations: 26 funcCount: 162 stepsize: 1.2992 firstorderopt: 5.0020e-004 algorithm: 'medium-scale: Quasi-Newton line search' grad = 1.0e-003 * -0.5002 -0.1888 hessian = 820.4028-409.5496 -409.5496 204.7720 firstorderopt — мера оптимальности для первой нормы градиента целевой
функции в найденной точке минимума;
>>options=optimset('toIX',le-6, 'maxFunEvals' , 162); >>[xmin, opt]=lsqnonlin(@rb,[-1.2 l],[0 le-6],[0 le-6],options) Warning: Large-scale method requires at least as many equations as variables; switching to line-search method instead. Upper and lower bounds will be ignored. > In C:\MATLABR12\toolbox\optim\private\lsqncommon.m at line 155
332
8.4. Вычисление минимумов функций In C:\MATLABR12\toolbox\optim\lsqnonlin.m at line 121 Maximum number of function evaluations exceeded Increase OPTIONS.maxFunEvals xmin = 0.61200.3715 opt = 0.1446 Обратите внимание на то, что, вопреки ожиданиям, функция l s q n o n l i n к успеху не привела. Выдано сообщение о превышении лимита числа итераций, а значения xmin явно далеки от верных. Можно попытаться применить функцию fminsearch для поиска минимума функций и с большим числом переменных. Определим в виде m-файла функцию трех переменных three_var: function b = three_var(v) x = v ( l ) ; у = v(2) ; z = v(3) ; b = х.л2 + 2.5*sin(y) - гл2*хл2*ул2; А теперь найдем минимум этой функции при разных начальных значениях переменных: » v = [-0.6 -1.2 0 . 1 3 5 ] ; а = fminsearch(@three_var,v) а = 0.0000 -1.5708 0.1803 >> t h r e e _ v a r ( a ) ans = -2.5000 » v = [-1 -1.2 0]; >> a = fminsearch (@three__var, v) 0.0000 -1.5708 0.0015 >> three_var(a) ans = -2.5000 » v = [-1 -1.2 0.2] ; >> a = fminsearch(@three_var,v) a 0.0000 -1.5708 0.25 >> three_var(a) ans = -2.5000 Обратите внимание на то, что минимум по первым двум переменным находится один и тот же при разных начальных значениях переменных. Однако минимум по третьей переменной существенно зависит от начальных значений переменных. Тем не менее само значение функции во всех случаях одно и то же. А теперь приведем случай, когда решение не достигается: » v = [-1 -1.2 1]; >> а = fminsearch(@three_var,v) Exiting: Maximum number of function evaluations has been exceeded -. increase MaxFunEvals option. 333
Глава 8. Численные методы вычислений
Current function value: -Inf a =
1.0e+051 * -0.5630 -7.3469
3.8861
В библиотеке примеров Demos вы найдете дополнительные наглядные примеры применения данных функций.
8.5. Аппроксимация производных 8 . 5 . 1 . Аппроксимация лапласиана Для выполнения аппроксимации лапласиана в MATLAB используется следующая функция: • del2(U) — возвращает матрицу L дискретной аппроксимации дифференциального оператора Лапласа, примененного к функции и: У^м__1_ГЛ/ сРи_
4 " 4 [±г + dy2
Матрица L имеет тот же размер, что и матрица и, и каждый ее элемент равен разности элемента массива и и среднего значения четырех его соседних элементов (для узлов сетки во внутренней области). Для вычислений используется пятиточечная формула аппроксимации лапласиана. Другие формы этой функции также возвращают матрицу L, но допускают дополнительные установки: • L = d e l 2 (U,h) — использует шаг h для установки расстояния между точками в каждом направлении (h — скалярная величина). По умолчанию h=l; • L = d e l 2 (U,hx,hy) — использует hx и hy для точного определения расстояния между точками. Если hx — скалярная величина, то задается расстояние между точками в направлении оси х, если hx — вектор, то он должен иметь размер, равный числу столбцов матрицы и, и точно определять координаты точек по оси х. Аналогично, если hy — скалярная величина, то задается расстояние между точками в направлении оси у, если hy — вектор, то он должен иметь размер, равный числу строк матрицы U, и точно определять координаты точек по оси у; • L = d e l 2 (U, hx, hy, hz,...) — если и является многомерным массивом, то расстояния задаются с помощью параметров hx, hy, hz, .... Пример: >> [х,у]
>> и и= 41 34 29 26 25
334
= meshgrid(-5:5,-4:4); =х . *х + у •*У
32 25 2С 17 16
25 18 13 10 9
20 13 8 5 4
17 10 5 2 1
16 9 4 1 0
17 10 5 2 1
20 13 8 5 4
25 18 13 10 9
32 25 20 17 16
41 34 29 26 25
8.5. Аппроксимация производных 26 17 10 5 29 20 13 8 34 2 5 18 13 41 32 25 20 >> V = d e l 2 ( U )
2 5 10 17
1 4 9 16
2 5 10 17
5 8 13 20
10 13 18 25
17 26 20 29 25 34 32 41
V =
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >> subplot (1 , 2М ) » surfl(U) >> subplot (1 ! , 2 ) >> surf1(V) На рис. 8.3 представлены графики поверхностей и иV. Эти графики 1юстроены завершающими командами данного примера.
Рис. 8.3. Графики функций U и V
8.5.2. Аппроксимация производных конечными разностями Одним из важнейших приложений конечно-разностных методов является приближенное представление производных функций — численное дифференцирование. Оно реализуется следующей функцией: • d i f f (X) — возвращает конечные разности смежных элементов массива х. Если X — вектор, то d i f f (X) возвращает вектор разностей соседних элементов [Х(2)-х(1) х ( 3 ) - х ( 2 ) ... х (n) - x ( n - l ) ] , у которого количество элементов на единицу меньше, чем у исходного вектора х. Если х — матрица, то d i f f (X) возвращает матрицу разностей столбцов: [X (2 : т , :) -X (1 : т - 1 , :) ] ; • d i f f ( X , n ) — возвращает конечные разности порядка п. Так, d i f f (х, 2) — это то же самое, что и d i f f ( d i f f (X) ) . При вычислениях используется рекуррентное уравнение d i f f (x, n) = d i f f (х, п - 1 ) ; • Y = d i f f (X, n, dim) — возвращает конечные разности для матрицы X по строкам или по столбцам, в зависимости от значения параметра dim. Если порядок п равен величине dim или превышает ее, то d i f f возвращает пустой массив. Примеры: >> Х=[1 2 4 6 7 9 3 45 6 7] X= 1 2 4 3 45 >> s i z e ( X ) ans = 1 10 335
Глава 8. Численные методы вычислений » Y = diff (X) Y = 1 2 2 ]. 2 -6 42 -391 >> size(Y) ans = 1 9 » Y = diff (X,2) Y = 1 0 -1 1 - 8 •48 -8140 >> X=magic(5) X = 17 24 1 8 15 7 14 16 23 5 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 >> Y = diff (X,2) Y = -25 20 0 0 5 25 5 0 -5 -25 -5 0 0 -20 25 >> Y = diff (X,2,3) Y = Empty array: 5-by-5-by-0 Используя функцию diff, можно строить графики производных заданной функции. Пример этого показан ниже: » >> » >>
Х=0:0.05:10; S=sin(X); D=diff (S); plot(D/0.05)
Для получения приближенных численных значений производной от функции sin(x) вектор конечно-разностных значений D поделен на шаг точек по х. Как и следовало ожидать, полученный график очень близок к графику функции косинуса (рис. 8.4). Обратите внимание, что по оси х от-
„t „ , Рис. 8.4. Приближенный график производной от функции sin(x)
ложены номера элементов вектора х, а не истинные значения х. Пакет расширения Symbolic Math Toolbox позволяет выполнять дифференцирование функций в аналитическом виде, то есть точно. Это, однако, не всегда нужно. 8 . 5 . 3 . Вычисление градиента функции Вычисление конечно-разностным методом градиента функций следующей функцией:
336
реализуется
8.6. Численное
интегрирование
• FX = g r a d i e n t (F) — возвращает градиент функции одной переменной, заданной вектором ее значений F. FX соответствует конечным разностям в направлении х; • [ F X , F Y ] = g r a d i e n t (F) — возвращает градиент функции F (X, Y) двух переменных, заданной матрицей F, в виде массивов FX и FY. Массив FX соответствует конечным разностям в направлении х (столбцов). Массив FY соответствует конечным разностям в направлении у (строк); • [FX, FY, FZ,...] = g r a d i e n t (F) — возвращает ряд компонентов градиента функции нескольких переменных, заданной в виде многомерного массива F' • [...] = g r a d i e n t (F, h) —использует шаг h для установки расстояния между точками в каждом направлении (h — скалярная величина). По умолчанию h = 1; • [...] = g r a d i e n t (F, h i , h2,...) — если F является многомерным массивом, то расстояния задаются с помощью параметров h i , h2, h3, .... Пример: >> F= [1 3 5 7 9 5 6 7 8 ] F = 1 3 5 7 9 5 6 7 8 >> FX = gradient(F) FX = Columns 1 through 7 1.0000 2. 0000 2.0000 2 0 0 0 0 2 . 0 0 0 0 - 1 . 0 0 0 0 - 1 . 5 0 0 0 Columns 8 through 9 1. 0000 1.0000 » F= [1 2 3 6 7 8; 1 5 7 9 3 , - 5 9 5 2 5 7 ] F = 1 2 3 6 7 8 1 4 5 7 9 3 5 9 5 2 5 7 >> [FX,FY] = g r a d i e n t ( F ) FX = 1.0000 1.0000 2.0000 2.0000 1.0000 1.0000 3.0000 2.0000 1.5000 2.0000 -2.0000 -6.0000 4.0000 0 -3.5000 02.5000 2.0000 FY = 0 2.0000 2.0000 1.0000 2.0000 -5.0000 2.0000 3.5000 1.0000 -2.0000 -1.0000 -0.5000 4.0000 5.00000 -5.0000 -4.0000 4.0000 Функция g r a d i e n t часто используется для построения графиков полей градиентов.
8.6.
Численное интегрирование
Численное интегрирование традиционно является одной из важнейших сфер применения математического аппарата. В данном разделе приводятся функции 337
Глава 8. Численные методы вычислений для численного интегрирования различными методами. Численное интегрирование заключается в приближенном вычислении определенного интеграаа вида )y{x)dx
(8.1)
а
одним из многочисленных численных методов.
8 . 6 . 1 . Интегрирование методом трапеций Приведенные ниже функции выполняют численное интегрирование методом трапеций и методом трапеций с накоплением. • t r a p z (Y) — возвращает определенный интеграл, используя интегрирование методом трапеций с единичным шагом между отсчетами. Если Y — вектор, то t r a p z (Y) возвращает интеграл элементов вектора Y, если Y — матрица, то t r a p z (Y) возвращает вектор-строку, содержащую интегралы каждого столбца этой матрицы; • t r a p z (X,Y) — возвращает интеграл от функции Y по переменной х, используя метод трапеций (пределы интегрирования в этом случае задаются начальным и конечным элементами вектора х); • t r a p z (. . . ,dim) — возвращает интеграл по строкам или по столбцам для входной матрицы, в зависимости от значения переменной dim. Примеры: » у=[1,2,3,4] Y= 1 2 3 4 >> t r a p z ( у ) . ans = 7.5000 » X=0:pi/70:pi/2; >> Y=cos (X); >> Z = t r a p z ( Y ) Z= 22.2780 • cumtrapz (Y) — возвращает численное значение определенного интеграла для функции, заданной ординатами в векторе или матрице Y с шагом интегрирования, равным единице (интегрирование методом трапеций с накоплением). В случае, когда шаг отличен от единицы, но постоянен, вычисленный интеграл достаточно умножить на величину шага. Для векторов эта функция возвращает вектор, содержащий результат интегрирования с накоплением элементов вектора Y. Для матриц — возвращает матрицу того же размера, что и Y, содержащую результаты интегрирования с накоплением для каждого столбца матрицы Y; • cumtrapz (x, Y) — выполняет интегрирование с накоплением от Y по переменной х, используя метод трапеций. X и Y должны быть векторами одной и той же длины, или х должен быть вектором-столбцом, a Y — матрицей; • cumtrapz (. . . , dim) — выполняет интегрирование с накоплением элементов по размерности, точно определенной скаляром dim. Длина вектора X должна быть равна s i z e (Y, dim). 338
8.6. Численное
интегрирование
Примеры: >> cumtrapz(у) ans = 0 1.5000 4.0000 ' 7 .5000 >> Y=magic(4) Y — 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> Z = cumtrapz (Y, 1) 2 — 0 0 0 0 10.5000 6.5000 6.5000 10.5000 17.5000 15.5000 14.5000 20.5000 24.0000 26.0000 25.0000 27.0000
8.6.2. Интегрирование методом квадратур Приведенные ниже функции осуществляют интегрирование и двойное интегрирование, используя квадратурную формулу Симпсона или метод Гаусса—Лобатто. Квадратура — численный метод нахождения площади под графиком функции f[x), то есть вычисление определенного интеграла вида (8.1). В приведенных ниже формулах подынтегральное выражение fun обычно задается или в прямых апострофах, или в форме handle-функции. Функции quad и quadl используют два различных алгоритма квадратуры для вычисления определенного интеграла. Функция quad выполняет интегрирование по методу низкого порядка, используя рекурсивное правило Симпсона [4, 40]. Но она может быть более эффективной при негладких подынтегральных функциях или при низкой требуемой точности вычислений. Алгоритм quad в MATLAB 6 изменен по сравнению с предшествовавшими версиями, точность по умолчанию по сравнению с версиями 5.3х повышена в 1000 раз (с 10~3 до 10~6). Новая функция quadl (квадратура Лобатто) использует адаптивное правило квадратуры Гаусса — Лобатто очень высокого порядка. Устаревшая функция quad8 выполняла интегрирование, используя квадратурные формулы Ньютона — Котеса 8-го порядка [40]. Достижимая точность интегрирования гладких функций в MATLAB 6 поэтому также значительно выше, чем в предшествующих версиях. • quad (fun, а, Ь) — возвращает численное значение определенного интеграла от заданной функции @fun на отрезке [а Ь]. Используется значительно усовершенствованный в MATLAB 6 адаптивный метод Симпсона; • quad (fun, a,b, t o l ) — возвращает численное значение определенного интеграла с заданной относительной погрешностью t o l . По умолчанию t o l = l . е-6. Можно также использовать вектор, состоящий из двух элементов t o l = [ r e l _ t o l a b s _ t o l ] , чтобы точно определить комбинацию относительной и абсолютной погрешности; • quad (fun, a, b, t o l , t r a c e ) — возвращает численное значение определенного интеграла и при значении t r a c e , не равном нулю, строит график, показывающий ход вычисления интеграла; 339
Глава 8. Численные методы вычислений • quad (fun, a,b, t o l , t r a c e , PI, P2, . . .) — возвращает численное значение определенного интеграла по хот???? подинтегральной функции fun, использует дополнительные аргументы PI, P2, ..., которые напрямую передаются в подинтегральную функцию: G = fun (X, PI, P2,...). Примеры: >> quad('ехр ( х ) - 1 ' , 0 , 1 , 1 е - 5 ) ans = 0.7183 >> q = quad (@exp,0,2,le-4) q= 6.3891 >> q = quad(@sin,0,pi,le-3) q= 2.0000 • dblquad (fun, inmin, inmax, outmin, outmax) — вычисляет и возвращает значение двойного интеграла для подынтегральной функции fun (inner, o u t e r ) , по умолчанию используя квадратурную функцию quad, inner — внутренняя переменная, изменяющаяся от inmin до inmax, a outer — внешняя переменная, изменяющаяся от outmin до outmax. Первый аргумент @fun — строка, описывающая подынтегральную функцию. Эта функция должна быть функцией двух переменных вида fout=fun (inner, o u t e r ) . Функция должна брать вектор inner и скаляр outer и возвращать вектор fout, который является функцией, вычисленной в outer и в каждом значении inner; • dblquad(fun,inmin,inmax,outmin,outmax,tol,trace) — передает В функцию dblquad параметры t o l и t r a c e . Смотрите справку по функции quad для получения информации о параметрах t o l и t r a c e ; • dblquad(fun,inmin,inmax,outmin,outmax,tol,trace,order) — передает параметры t o l и t r a c e для функции quad или quadl в зависимости от значения строки order. Допустимые значения для параметра order — Squad , gquadl или имя любого определенного пользователем квадратурного метода с таким же вызовом и такими же возвращаемыми параметрами, как у функций quad и quadl. (Например, при проверке старых программ можно использовать @quad8 для большей совместимости с прежними версиями MATLAB.) По умолчанию (без параметра order) вызывается gquad, поскольку подынтегральные функции могут быть негладкими. Пример: пусть m-файл integl.m описывает функцию 2*y*sin (x) +x/2*cos (у), тогда вычислить двойной интеграл от той функции можно следующим образом: >> r e s u l t = dblquad(gintegl,pi,2*pi,0, 2*pi) result = -78.9574
8.6.3. Ф у н к ц и я вычисления тройных интегралов triplequad В систему MATLAB 6.5 была введена новая функция для вычисления тройных интегралов. Она имеет четыре формы записи: triplequad(fun,xmin,xmax,ymin,ymax,zmin, zmax) triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol) 340
8.7. Математические операции с полиномами triplequad(fun,xmin,xmax,ymin,углах,zmin,zmax,tol,method) t r i p l e q u a d (fun, xmin, xmax, ymin, ymax, zmin, zmax, t o l , method, p l , p 2 , . . . ) Параметры этой функции уже были определены выше (добавлены только пределы для новой переменной г). Пример: » Q
Q = triplequad('x+y*z',0,pi,0,1,
- 1 , 1, 0 . 0 0 1 )
=
9.8696
К сожалению, проверка данной функции на ряде тройных интегралов показала, что она не всегда обеспечивает вычисления. Возможны ситуации, когда данная функция выводит ряд сообщений об ошибках даже для берущихся интегралов.
8.7. Математические операции с полиномами 8.7.1. Определение полиномов Полиномы (у нас их принято называть также степенными многочленами) — широко известный объект математических вычислений и обработки данных. Обычно полином записывается в виде р(х) = а,Х + я„_,л" ' + ... + а2х* + atx + а0, и так обычно принято в MATLAB для п, отрицательных по умолчанию, хотя и возможны иные формы записи, например р{х) = я,х" + а2х"~' + ... + a,j + an+l. Последняя запись обычно принята в MATLAB для п, по умолчанию целых и положительных. Широкое применение полиномов отчасти обусловлено большими возможностями полиномов в представлении данных, а также их простотой и единообразием вычислений. В этом разделе описаны основные функции для работы с полиномами. При этом полиномы обычно задаются векторами их коэффициентов.
8.7.2. Умножение и деление полиномов Ниже приведены функции, осуществляющие умножение и деление полиномов, или, что то же самое, свертку двух входных векторов, в которых находятся коэффициенты полиномов, и операцию, обратную свертке. • w = conv(u,v) — возвращает свертку векторов и и v. Алгебраически свертка — то же самое, что и произведение полиномов, чьи коэффициенты — элементы векторов и и v. Если длина вектора и равна т, а длина вектора v — л, то вектор w имеет длину т + п — I, а его k-й элемент вычисляется по формуле j
Пример: »
f=[2,3,5,6];d=[7,8,3];r=conv(f,d) 14
37
65
91
63
18 341
Глава 8. Численные методы вычислений • [q,r] = deconv(v,u) — возвращает результат деления полинома v на полином и. Вектор q представляет собой частное отделения, а г — остаток от деления, так что выполняется соотношение v = conv(u,q) + г. Пример: »
t=[14,37,65,91,63,18];г=[7,8,3];[w,e]=deconv(t,г)
W= 2.0000 3.0000 5.0000 6.0000 е = 1.Ое-013 0 0 0.1421-0.1421 -0.2132 -0.1066 8.7.3. Вычисление полиномов В этом разделе приведены функции вычисления коэффициентов характеристического полинома, значения полинома в точке и матричного полинома. • poly (А) — для квадратной матрицы А размера п х п возвращает вектор-строку размером п + 1, элементы которой являются коэффициентами характеристического полинома d e t ( A - s l ) , где I — единичная матрица и s — оператор Лапласа. Коэффициенты упорядочены по убыванию степеней. Если вектор состоит из п + 1 компонентов, то ему соответствует полином вида CfS" + ... + cns + с„+1; • p o l y (г) — для вектора г возвращает вектор-строку р с элементами, представляющими собой коэффициенты полинома, корнями которого являются элементы вектора г. Функция r o o t s (p) является обратной, ее результаты, умноженные на целое число, дают p o l y ( r ) . Примеры: А = 2 3 6 3 8 6 1 7 4 >> d=poly(A) d = 1 .0000 -14 0000 - 1 . 0 0 0 0 - 4 0 . 0 0 0 0 >> A=[3 , 6,8;1 2 , 2 3 , 5 ; 1 1 , 1 2 , 3 2 ] А — 6 3 8 12 23 5 11 12 32 >> poly (A) ans = 1. 0000 -58 0000 681.0000 818.0000 polyval (p, x) — возвращает значения полинома р, вычисленные в точках, заданных в массиве х. Полином р — вектор, элементы которого являются коэффициентами полинома в порядке уменьшения степеней, х может быть матрицей или вектором. В любом случае функция polyval вычисляет значения полинома р для каждого элемента х; [ у , d e l t a ] = polyval (p,х,S) или [ у , d e l t a ] = polyval(p,x,S,mu) — использует структуру s, возвращенную функцией p o l y f i t , и данные о среднем значении (mu(l)) и стандартном отклонении (mu(2)) генеральной совокупности для оценки погрешности аппроксимации (y±delta).
342
8.7. Математические операции с полиномами Пример: » р=[3,0,4,3];d=polyval(p,[2,6]) d = 35 6 7 5
• polyvalm(p,x) — вычисляет значения полинома для матрицы. Это эквивалентно подстановке матрицы х в полином р. Полином р — вектор, чьи элементы являются коэффициентами полинома в порядке уменьшения' степеней, а х — квадратная матрица. Пример: >> D = p a s c a l ( 5 ) D = 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 1 5 15 35 f=poly (d)
1 5 15 35 70
-F —
1 .0000 •-99. 0000 626. 0000 -626.0000 » ]Dolyvalm(f , D) arts = 1. 0e-006 -0 .0003 -0 .0011 -0 .0038 -0.0059 -0 .0012 -0 .0048 -0 .0163 -0.0253 -0 .0034 -0 .0131 -0 .0447 -0.0696 -0 .0288 -0 .0076 -0 .0983 -0.1529 -0 .0145 -0 .0551 -0 .1883 -0.2929
99. oooc
-0 -0 -0 -0 -0
-1.0000
.0162 .0692 .1897 .4169 .7984
Данный пример иллюстрирует также погрешности численных методов, поскольку точное решение дает нулевую матрицу. 8.7.4. Вычисление корней полинома Приведенная ниже функция вычисляет корни (в том числе комплексные) для полинома вида • r o o t s (с) — возвращает вектор-столбец, чьи элементы являются корнями полинома с. Вектор-строка с содержит коэффициенты полинома, упорядоченные по убыванию степеней. Если с имеет п + 1 компонентов, то полином, представленный этим вектором, имеет вид c,.s" + ... + clfs + с„+1. Пример: >> х = [ 7 , 4 5 , 1 2 , 2 3 ] ; d = r o o t s ( x ) d = -6.2382 -0.0952+0.7195i -0.0952 -0.7195i A = [ - 6 . 2 3 8 2 - 0 . 0 9 5 2 + 0 . 7 1 9 5 i - 0 . 0 952 B = P o l y (A)
-0.7195i]; 343
Глава 8. Численные методы вычислений В=[1.00006.42861.71453.2859] В*7 ans
=
7.0000
45.0002
12.0015
23.0013
С погрешностью округления получен тот же вектор. 8.7.5. Вычисление производной полинома Ниже приведена функция, возвращающая производную полинома р: • polyder(p) —возвращает производную полинома р; • polyder (a, b) — возвращает производную от произведения полиномов а и Ь; • [q, d] = polyder (b, a) — возвращает числитель q и знаменатель d производной от отношения полиномов Ь/а. Примеры: » а=[3, 5,8];Ь=[5,3,8];dp=polyder dp = 6 5
(а)
>> dt=polyder(a,b) dt = 60 102 158 64 >> [q,p]=polyder(b,a) q = 16 32 -16 P = 9 30 73 80 64 8.7.6. Решение полиномиальных матричных уравнений Приведенная ниже функция вычисляет собственные значения матричного полинома. • [х,е] = polyeig (АО, А1, . . .Ар) — решает задачу собственных значений для матричного полинома степени р вида (Аа + 1А1+...+ХрАр)х
= 0,
где степень полинома р — целое неотрицательное число, аА0,Аь ..., Ар — входные матрицы порядка п. Выходная матрица х размера п х пр содержит собственные векторы в столбцах. Вектор е размером пр содержит собственные значения. Пример: » А=[1:4;5:8;9:12;13:16] А = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 » В=[4:7;2:5;10:13;23:26] В = 4 5 6 7 2 3 4 5 10 11 12 13 23 24 25 26 344
8.8. Решение обыкновенных дифференциальных уравнений »
(ОДУ)
[F, a ] = p o l y e i g ( А , В )
F
= 0.4373
0.0689
-0.5426
-0.3372
-0.4969
0.6675
-0.1314
-0.6375
0.7870
0.2927
0.3771
0.5374
-0.3591
-0.4176
0.5136
а
-0.7594
= 4.4048 0.4425 -0.3229 -1.0000
8 . 7 . 7 . Разложение полиномов на простые дроби Для отношения полиномов b и а функция [r,p,k] = residue(b,a) возвращает вычеты, полюса и многочлен целой части отношения двух полиномов b ( s ) и a ( s ) в виде b(s)
_ b{ + b2s~l +
a(s)
biS~2+...+bm^s~'"
a, + a2s~ + tf3.s~2+...+a,,+|.y~" [
• [ b , a ] = r e s i d u e ( r , p , k) — выполняет обратную свертку суммы простых дробей (см. более подробное описание в справочной системе) в пару полиномов с коэффициентами в векторах b и а. Пример: >> Ь = [ 4 , 3 , 1 ] ; а = [ 1 , 3 , 7 , 1 ] ; [ r , p , k ] = r e s i d u e ( b , a ) JT — 1.9484
+
0.8064i
I.9484
-
0 . 8064i
0.1033 P = -1.4239 -1.4239
+
2.1305i
-
2.1305i
-0.1523 k = [ >> bl
] [ Ы , a l ] = r e s i d u e ( r , p , k) =
4.0000 al
1.0000
8.8.
3.0000
1.0000
3.0000
7.0000
= 1.0000
Решение обыкновенных дифференциальных уравнений (ОДУ)
8 . 8 . 1 . Определение ОДУ Анализ поведения многих систем и устройств в динамике, а также решение многих задач в теории колебаний и в поведении упругих оболочек обычно базиру345
Глава 8. Численные методы вычислений ется на решении систем обыкновенных дифференциальных уравнений (ОДУ) или в оригинале ordinary differential equations (ODEs). Их, как правило, представляют в виде системы из дифференциальных уравнений первого порядка в форме Коши:
с граничными условиями y(t0 tend, p) = b, где tcnd, t0 — начальные и конечные точки интервалов. Параметр t не обязательно означает время, хотя чаще всего решение дифференциальных уравнений ищется во временной области. Вектор р задает начальные условия. Наряду с ОДУ MATLAB может оперировать с дифференциальными алгебраическими уравнениями (ДАУ) или differential-algebraic equations (DAEs). ОДУ и ДАУ являются основой математического моделирования динамических нелинейных (и линейных) систем. Автоматическое их составление и решение реализовано в специальном расширении Simulink. Ниже коротко описаны численные методы решения обыкновенных дифференциальных уравнений (ОДУ) и некоторые вспомогательные функции, полезные для решения систем ОДУ. Дается представление о пакете расширения, решающем дифференциальные уравнения в частных производных. 8 . 8 . 2 . Решатели ОДУ Для решения систем ОДУ в MATLAB реализованы различные методы. Их реализации названы решателями ОДУ. ВНИМАНИЕ! В этом разделе обобщенное название solver (решатель) означает один из возможных численных методов решения ОДУ: ode4 5, ode2 3, o d e l l 3 , odel5s, ode23s, ode23t, ode23tb, bvp4c или pdepe. Решатели реализуют следующие методы решения систем дифференциальных уравнений, причем для решения жестких систем уравнений рекомендуется использовать только специальные решатели odel5s, ode23s, ode23t, ode23tb: • ode45 — одношаговые явные методы Рунге— Кутта 4-го и 5-го порядка. Это классический метод, рекомендуемый для начальной пробы решения. Во многих случаях он дает хорошие результаты; • ode23 — одношаговые явные методы Рунге—Кутта 2-го и 4-го порядка. При умеренной жесткости системы ОДУ и низких требованиях к точности этот метод может дать выигрыш в скорости решения; • o d e l l 3 — многошаговый метод Адамса—Башворта—Мултона переменного порядка. Это адаптивный метод, который может обеспечить высокую точность решения; • odel5s — многошаговый метод переменного порядка (от 1 до 5, по умолчанию 5), использующий формулы численного дифференцирования. Это адаптивный метод, его стоит применять, если решатель ode4 5 не обеспечивает решения; • ode23s — одношаговый метод, использующий модифицированную формулу Розенброка 2-го порядка. Может обеспечить высокую скорость вычислений при низкой точности решения жесткой системы дифференциальных уравнений; 346
8.8. Решение обыкновенных дифференциальных уравнений
(ОДУ)
• ode23t — метод трапеций с интерполяцией. Этот метод дает хорошие результаты при решении задач, описывающих колебательные системы с почти гармоническим выходным сигналом; • ode23tb — неявный метод Рунге—Кутта в начале решения и метод, использующий формулы обратного дифференцирования 2-го порядка в последующем. Несмотря на сравнительно низкую точность этот метод может оказаться более эффективным, чем odel5s; • bvp4c служит для проблемы граничных значений систем дифференциальных уравнений вида у' = f(t,y), F(y(a),y(b),p) = 0 (полная форма системы уравнений Коши); • pdepe нужен для решения систем параболических и эллиптических дифференциальных уравнений в частных производных, введен в ядро системы для поддержки новых графических функций OpenGL, пакет расширения Partial Differential Equations Toolbox содержит более мощные средства. Все решатели могут решать системы уравнений явного вида у = F(t,y). Решатели odel5s и ode23t способны найти корни дифференциально-алгебраических уравнений M(t)y' = F(t,y), где М называется матрицей массы. Решатели odel5s, ode2 3s, ode23t и ode23tb могут решать уравнения неявного вида M(t,y) / = F(t,y). И, наконец, все решатели, за исключением ode23s, который требует постоянства матрицы массы, и bvp4c, могут находить корни матричного уравнения вида M(t,y) у = F(t,y). ode23tb, ode23s служат для решения жестких дифференциальных уравнений, odel5s — жестких дифференциальных и дифференциально-алгебраических уравнений, ode23t — умеренно жестких дифференциальных и дифференциально-алгебраических уравнений. 8.8.3. Использование решателей систем ОДУ В описанных далее функциях для решения систем дифференциальных уравнений приняты следующие обозначения и правила: • tspan — вектор, определяющий интервал интегрирования [to t f i n a l ] . Для получения решений в конкретные моменты времени to, t l , ..., t f i n a l (расположенные в порядке уменьшения или увеличения) нужно использовать tspan = [tO t l . . . t f i n a l ] ; • у0 — вектор начальных условий; • options — аргумент, создаваемый функцией odeset (еще одна функция — odeget или bvpget (только для bvp4c) — позволяет вывести параметры, установленные по умолчанию или с помощью функции odeset/bvpset); • pi, р2, ... — произвольные параметры, передаваемые в функцию F; • т, Y — матрица решений У, где каждая строка соответствует времени, возвращенном в векторе-столбце т. Перейдем к описанию функций для решения систем дифференциальных уравнений: • [T,Y] = solver (@F, tspan, yO) — где вместо solver подставляем имя конкретного решателя — интегрирует систему дифференциальных уравнений вида У = F(t,y) на интервале tspan с начальными условиями yO. @F — дескриптор ODE-функции (можно также задавать функцию в виде ' F ' ) . Каждая строка в массиве решений Y соответствует значению времени, возвращаемому в векторе-столбце т; 347
Глава 8. Численные методы вычислений •
[T,Y] = s o l v e r (@F,tspan,yO,options) — дает решение, подобное описанному выше, но с параметрами, определяемыми значениями аргумента o p t i o n s , созданного функцией o d e s e t . Обычно используемые параметры включают допустимое значение относительной погрешности RelTol (по умолчанию l e - З ) и вектор допустимых значений абсолютной погрешности AbsTol (все компоненты по умолчанию равны 1е-6);
• [T,Y] = solver (@F, t s p a n , yO, o p t i o n s , p l , p 2 . . . ) — дает решение, подобное описанному выше, передавая дополнительные параметры p i , р2, ... в m-файл F всякий раз, когда он вызывается. Используйте o p t i o n s = [ ] , если никакие параметры не задаются; [Т, Y,ТЕ,YE,IE] = solver(@F,tspan,yO,options) — в дополнение к описанному решению содержит свойства Events, установленные в структуре o p t i o n s ссылкой на функции событий. Когда эти функции событий от (t,y) равны нулю, производятся действия в зависимости от значения трех векторов v a l u e , i s t e r minal, d i r e c t i o n (их величины можно установить в m-файлах функций событий). Для i-й функции событий v a l u e (i) — значение функции, i s t e r m i n a l (i) — прекратить интеграцию при достижении функцией нулевого значения, d i r e c t i o n (i) = 0 , если все нули функции событий нужно вычислять (по умолчанию), + 1 — только те нули, где функция событий увеличивается, —1 — только те нули, где функция событий уменьшается. Выходной аргумент ТЕ — вектор-столбец времен, в которые происходят события (events), строки YE ЯВЛЯЮТСЯ соответствующими решениями, а индексы в векторе IE определяют, какая из i функций событий (event) равна нулю в момент времени, определенный ТЕ. Когда происходит вызов функции без выходных аргументов, по умолчанию вызывается выходная функция o d e p l o t для построения вычисленного решения. В качестве альтернативы можно, например, установить свойство OutputFcn в значение ' odeph a s 2 ' или ' o d e p h a s 3 ' для построения двумерных или трехмерных фазовых плоскостей. •
[T,X,Y]
= s o l v e r (@model, t s p a n , yO, o p t i o n s , u t , p i , p 2 , ...) — ИСПОЛЬ-
зует модель SIMULINK, вызывая соответствующий решатель из нее. Пример: [T,X,Y] = s i m ( s o l v e r , @model,...) . Параметры интегрирования ( o p t i o n s ) могут быть определены и в m-файле, и в командной строке с помощью команды o d e s e t . Если параметр определен в обоих местах, определение в командной строке имеет приоритет. Решатели используют в списке параметров различные параметры: RelTol - относительный порог отбора [положительный скаляр ]. По умолчанию 1е—3 (0,1% точность) во всех решателях; оценка ошибки на каждом шаге интеграции e(i) <= max(RelTol*abs(y(i)), AbsTol(i)); AbsTol — абсолютная точность [положительный скаляр или вектор {1е—6}]. Скаляр вводится для всех составляющих вектора решения, а вектор указывает на компоненты вектора решения. AbsTol по умолчанию 1е—6 во всех решателях; NormControl — управление ошибкой в зависимости от нормы вектора решения [on | {off}]. Установите 'on', чтобы norm(e) <= max(RelTol*norm(y),AbsTol). По умолчанию все решатели используют более жесткое управление по каждой из составляющих вектора решения; Refine — фактор уточнения вывода [положительное целое число] — умножает число точек вывода на этот множитель. По умолчанию всегда равен 1, кроме ODE45, где он 4. Не применяется, если tspan > 2;
348
8.8. Решение обыкновенных дифференциальных уравнений
(ОДУ)
OutputFcn — дескриптор функции вывода [function] — имеет значение в том случае, если решатель вызывается без явного указания функции вывода, OutputFcn по умолчанию вызывает функцию odeplot. Эту установку можно поменять именно здесь; OutputSel - индексы отбора [вектор целых чисел]. Установите компоненты, которые поступают в OutputFcn. OutputSel по умолчанию выводит все компоненты; S t a t s - установите статистику стоимости вычислений [on | {off}]; Jacobian — функция матрицы Якоби [function | constant matrix]. Установите это свойство на дескриптор функции FJac (если FJac(t,y) возвращает dF/dy) или на имя постоянной матрицы dF/dy; J p a t t e r n - график разреженности матрицы Якоби [имя разреженной матрицы]. Матрица S с S(ij) = 1, если составляющая i F(t,y) зависит от составляющей j величины у, и 0 в противоположном случае; Vectorized - векторизованная ODE-функция [on | {off}]. Устанавливается на 'on', если ODE-функция F F(t,[yl y2 ...]) возвращает вектор [F(t,yl) F(t,y2) ...]; Events - [function] — введите дескрипторы функций событий, содержащих собственно функцию в векторе value и векторы i s t e r m i n a l и d i r e c t i o n (см выше); Mass — матрица массы [constant matrix [ function]. Для задач М*у' = f(t,y) установите имя постоянной матрицы. Для задач с переменной М введите дескриптор функции, описывающей матрицу массы; MstateDependence - зависимость матрицы массы от у [none | {weak} | strongj — установите 'попе' для уравнений M(t)*y' = F(t,y). И слабая ('weak') и сильная ('strong') зависимости означают M(t,y), но 'weak' приводит к неявным алгоритмам решения, использующим аппроксимации при решении алгебраических уравнений; MassSingular — матрица массы М сингулярная [yes | no | {maybe}] (да/нет/может быть); MvPattern — разреженность (dMv/dy), график разреженности (см. функцию spy) — введите имя разреженной матрицы S с S(ij) = 1 для любого к, где (i,k) элемент матрицы массы M(t,y) зависит от проекции j переменной у, и 0 в противном случае; i n i t i a l S l o p e - вектор начального уклона урО = F(tO,yO)/M(tO,yO); I n i t i a l S t e p — предлагаемый начальный размер шага, по умолчанию каждый решатель определяет его автоматически по своему алгоритму; MaxStep — максимальный шаг, по умолчанию во всех решателях равен одной десятой интервала tspan; BDF (Backward Differentiation Formulas) [on | {off}] — указывает, нужно ли использовать формулы обратного дифференцирования (методы Gear) вместо формул численного дифференцирования, используемых в ode 15s по умолчанию; MaxOrder — максимальный порядок ODE15S [1 | 2 | 3 | 4 | {5}]. Решатели используют в списке опций различные параметры. В приведенной ниже таблице они даны для решателей обычных (в том числе жестких) дифференциальных уравнений. Ode45
Odc23
ode113
Ode15s
ode23s
+
+
+
+
+
OutputFcn, OutputSel, Refine, S t a t s
+
+
+
+
+
Events
+
+
+
+
+
Параметры RelTol,
AbsTol
349
Глава 8. Численные методы вычислений Ode45
Ode23
ode113
Odd 5s
ode23s
InitialStep
+
+
+
+
+
Jconstant, Jacobian, J p a t t e r n , Vectorized
-
-
-
+
+
Mass
-
-
-
+
+
MassConstant
-
-
-
+
-
-
-
Параметры MaxStep,
MaxOrder, BDF
-
Решатель bvp4c имеет очень небольшое число параметров, но при работе с ним можно вводить не только матрицу Якоби интегрируемой функции, но и матрицу Якоби, содержащую частные производные функции граничных условий по границам интервала и по неизвестным параметрам. Покажем применение решателя ОДУ на ставшем классическим примере — решении уравнения Ван-дер-Поля, записанного в виде системы из двух дифференциальных уравнений: У\ = Уг
у\ = = ц*(1 ц*(1 -
У\
при начальных условиях у,(0) = 0;Л ( 0 ) = 1. Это уравнение описывает колебания в нелинейной системе второго порядка, например в LC-генераторе на электронной лампе или полевом транзисторе и является классическим примером математического моделирования этих устройств. Поведение системы Ван-дер-Поля существенно зависит от параметра \х, который задает степень влияния нелинейности на возникновение и развитие колебаний. Пока мы возьмем значение \х = 100. При больших представленные ОДУ являются жесткими. Перед решением нужно записать систему дифференциальных уравнений в виде ODE-функции. Для этого в главном меню выберем File • New • M-File и введем function dydt = vdpl00(t,y) dydt = z e r o s ( 2 , 1 ) ; % a column v e c t o r d y d t ( l ) =у ( 2 ) ; dydt(2) = 100*(l - у(1)Л2)*у(2) - y ( l ) ;
Сохраним данный m-файл-функцию. Тогда решение решателем odel5s и сопровождающий его график (рис. 8.5) можно получить, используя следующие команды: » [ T , Y ] = o d e l 5 s ( g v d p l O O , [0 >>
3 0 ] , [2 0 ] ) ;
plot(T,Y)
>> hold on;gtext('yl'),gtext ( 'y2') Последние команды позволяет с помощью мыши нанести на графики решений у, = у(\) и у2 — у(2) помечающие их надписи.
350
8.8. Решение обыкновенных дифференциальных уравнений (ОДУ) Л У2
i
1 !
\ •
\
\
.
\
1 \У \ У 1 ! \ j \. \ l \ j j
1
) 1
у
,
/К ••' /j \ у •
\ \ \
/
к
.
, •
У
г j
"'•> v
f S'N '1 l\ \
/1 / ' /
,•'"'
/
• /
ij
•
Puc. 8.5. Пример решения системы дифференциальных уравнений численным методом
8.8.4. Описание системы ОДУ Можно использовать m-файл типа odefunction (или m-файл типа odefile для совместимости с прежними версиями, но последний случай мы рассматривать не будем, поскольку он изложен в книге [38]), чтобы определить систему дифференциальных уравнений в одной из явных (первая формула) или неявных форм: у'-
F(t,y), My'= F(t,y) или
' = F(t,y),
где г — независимая переменная (скаляр), которая обычно представляет время; у — вектор зависимых переменных; F — функция от / и у, возвращающая вектор-столбец такой же длины как и у; М и М(/) — матрицы, которые не должны быть вырожденными. М может быть и константой. Рассмотрим пример решения уравнения Ван-дер-Поля при ц = 2 вида у'\ = 2*(1 — У\2)*У\ — у\. Оно сводится к следующей системе уравнений: У\ = Уъ / 2 = 2*(1
-yl2)*yl-y2.
Подготовим m-файл ode-функции vdp.m: function [outl,out2,out3] = vdp(t,у,flag) if nargin < 3 | isempty(flag) Л outl = [2.*y(2) .* (l-y(2) . 2)-у(1) ; y d ) ] ; else switch(flag) case 'init' % Return tspan, yO and options outl = [020]; out2 = [2; 0]; our3 = [ ]; otherwise error(['Unknown request ''' flag '''.']); end end 351
Глава 8. Численные методы вычислений Тогда решение системы с помощью решателя ode2 3 реализуется следующими командами: » »
[T,Y]= ode23(@vdp,[0 20],[2 0 ] ) ; plot(T,Y(:,l),'-',T,Y(:,2),'-.')
График решения для последнего примера показан на рис. 8.6.
Рис. 8.6. Пример решения системы ОДУ
Еще проще работать с решателями нового поколения. Рассмотрим систему уравнений: у' + abs(y) = 0; у(0) = 0; у(4) = —2. Для решения в пределах отрезка [0;4] с помощью bvp4c достаточно привести эту систему к виду: у' = —abs(y), y(0) = 0; у(4) + 2 = 0. Затем создаем две ODE-функции twoode и twobc в разных т-файлах: function dydx = twoode (x,у) dydx = [ у(2) -abs(y(l))]; function r e s = twobc(ya,yb) res = [ y a ( l ) yb (1) + 2 ] ; Теперь наберите в командной строке type twobvp и посмотрите само решение уравнения, которое содержится в уже имеющемся в системе файле twobvp. А исполнив команду twodvp, можно наблюдать результат решения в виде графиков. В решении вы найдете структуру узлов начальной сетки решения, которая поясняется ниже. s o l i n i t — это структура узлов начальной сетки решения (в любой шкале), но такая что solinit.х, = a, solinit.x e ] l d = b. И функция у, и функция у' должны быть непрерывны на участке [а Ь]. Догадка для начальной итерации s o l i n i t = b v p i n i t (x, y i n i t , params) в bvp4c отличается тем, что ваше начальное представление о функции у y i n i t можно вводить не только в виде вектора, но и как символьную функцию. Рекомендуется просмотреть также пример mat4bvp и дополнительные примеры решения систем дифференциальных уравнений, приведенные в файле odedemo. Во многих случаях решение задач, сводящихся#к решению систем дифференциальных уравнений, удобнее осуществлять с помощью пакета расширения Simulink. 352
8.8. Решение обыкновенных дифференциальных уравнений
(ОДУ)
8.8.5. Дескрипторная поддержка параметров решателя При помощи перечисленных ниже функций можно получить и создать или изменить параметры решателя: • o=odeget (options, ' name') — извлекает значение свойства, определенного строкой 'name', из структуры параметров options; возвращает пустую матрицу, если значение данного свойства в структуре options не определено. Можно ввести только первые буквы, которые однозначно определяют имя свойства. Пустая матрица [ ] — допустимый аргумент options;
Пример: >> options = odeset('RelTol' , [le-6 le-7],'AbsTol',6e-3); >> odeget(options,'Rel') ans = 1.0e-006 * 1.00000.1000 >> o d e g e t ( o p t i o n s , ' A b s ' ) ans = 0.0060 • options=odeset (' namel', v a l u e l , ' name2 ', value2,...) — создает структуру параметров, в которой указанные свойства по имени 'name...' принимают следующие за ними значения. Вместо 'name...' можно ввести только первые буквы, которые однозначно определяют имя свойства (abs — Abstol, maxit — maxiter и т. д.); • options=odeset (oldopts, 'namel', valuel,...) — изменяет в существующей структуре параметров соответствующие.значения; • options=odeset (oldopts, newopts) — изменяет существующую структуру параметров oldopts путем объединения ее с новой структурой newopts. Все новые параметры, не равные пустой матрице, заменяют соответствующие параметры в структуре oldopts. Пример: oldopts 1
F 1 [ -]4 's' 's [ ] [ ] [ ] newopts Т 3 F [ ] ' ' [ ] [ ] [ ] [ ] _ odeset(oldopts,newopts) Т 3 F 4 ' ' 's' [ ] [ ] [ ]
Функция odeset без параметров возвращает все имена свойств и их допустимые значения. Пример: >> odeset AbsTol: [ positive scalar or vector {le-6} ] RelTol: [ positive scalar {le-3} ] NormControl: [ on | {off} ] OutputFcn: [ function ] OutputSel: [ vector of integers ] Refine: [ positive integer ] Stats: [ on | {off} ] InitialStep: [ positive scalar ] MaxStep: [ positive scalar ]
353
Глава 8. Численные методы вычислений BDF: [ on | {off} ] MaxOrder: [ 1 | 2 | 3 | 4 | { 5 } ] Jacobian: [ matrix | function ] JPattern: [ sparse matrix ] Vectorized: [ on | {off} ] Mass: [ matrix | function ] MStateDependence: [ none | weak | strong ] MvPattern: [ sparse matrix ] MassSingular: [ yes | no ] {maybe} ] InitialSlope: [ vector ]
8.8.6. Доступ к примерам на решение дифференциальных уравнений Можно ознакомиться с множеством интересных демонстрационных примеров на решение дифференциальных уравнений, исполнив в командной строке следующую команду: >> odeexamples
При этом откроется окно GUI с перечнем демонстрационных примеров, представленное на рис. 8.7. С помощью списка разделов примеров, показанного в открытом виде на рис. 8.7, можно перейти в один из пяти разделов — от решения одиночных дифференциальных уравнений до решения ОДУ в частных производных. В каждом из разделов представлен ряд примеров, список которых имеется в поле Examples of. Кнопка Run под этим списком запускает пример и выводит окно с результатом, как правило, графическим. На рис. 8.8 показан пример на решение системы жестких дифференциальных уравнений, описывающих процесс диффузии в химическом реакторе. Результатом решения является сложная поверхность, представляющая процесс диффузии одной фракции в другую.
Examples
Ordinary Differential Equationa^»
£
fem2ode hblode
- 3tif£ problem with a constant mass matrix - Stiff problem solved on a very long interval
Рис. 8.7. Окно демонстрационных примеров на решение ОДУ 354
8.8. Решение обыкновенных дифференциальных уравнений (ОДУ) Из окна редактора, нажав кнопку view Code, можно просмотреть листинг программы на языке MATLAB, описывающей тот или иной пример. Так, для представленного выше примера этот листинг в окне редактора программ дан на рис. 8.9.
atonode
- ODE with time- and state-dependent гпазд matrix
burgecsode
-
ODE
fem2ode
-
S t i f "
• lode bitode rigidode vdpode
- 3 t i f jj D -0 Щ Ф \ ^ A V* / j - Adva - Nons - Stif
ЩЧ^^ПШПШШ
'
'** " ^
•~°
Рис. 8.8. Пример решения жестких дифференциальных уравнений, диффузию в химическом реакторе
View
D Q* 2S 28
W<& Wsidcw
2d 4
• 3 2 - l£ f. 35; 36;37138]
1Ы fiebug Breafepants
описывающих
f!ai:k a. Reichftlr; and Lwteace
Г. ^ а в р :
ПвЕ31П<1 Ы - 20;
tspan * [ 0 ; 1 0 ] ; yO - [ l + s i n ( [ 2 * p l / ( S + l ) ) * ( l : H > ) ; repmat(3,.l,H) ] ;
-
[t,ji
Ml
t.tspan,yO,options,N);
u - у : Д : 2 : end) ; x - ( : K ) /(H + 1 ) ; figuE
<5 411 <7 48 49 -
•F
vievf 4 0 , iU) xlabe ( ' з p a r e 1 ) ; ylabe ( ' t i to-' ) ; zlabe ( ' s o l i. t i o n u
1
) ;
53 ! 54
•
56:-!
5c : i 53i
|
ao: | Ready
Puc. S.9. Листинг программы для примера рис. 8.8 355
Глава 8. Численные методы вычислений 8.8.7. Решения дифференциальных уравнений в частных производных Особый интерес представляют примеры на решение дифференциальных уравнений в частных производных. Они имеются в разделе Partial Differential Equations. Эти уравнения часто используются при моделировании поверхностей с ограничениями, например, таких как оболочки или волны. Рисунок 8.10 показывает результат выполнения одного из примеров — pdexl.
Examples . of"
' ''
[Partial Differential '
• '
J S
Equations
^
|pdex2 - One PDE—example with d i a c o n t i n u i t i
Рис. 8.10. Выполнение примера pdexl В этом примере результат представлен трехмерными изображениями поверхности (оболочки) и ее сечением в виде двумерного графика. Еще один, имеющий важное прикладное значение, пример — pdex3 демонстрирует решение важной физической проблемы из области электроники. Он дает решение во времени и пространстве для распределения тока эмиттера биполярного транзистора. Сравниваются решения двумя методами — с использованием модели на основе системы ОДУ в частных производных и аппроксимации решения временным рядом. Рис. 8.11 дает представление о визуализации решения в пространственной и временной областях. На рис. 8.12 представлено начало листинга программы этого примера. В нем содержится описание постановки задачи. Нетрудно заметить, что эти, как и другие, примеры применения системы MATLAB наглядно иллюстрируют полную открытость этой системы — любой пример доступен для тщательного изучения, модификации и исполнения. С остальными примерами нетрудно познакомиться самостоятельно. При необходимости их можно использовать в качестве заготовок для своих примеров, готовящихся на языке программирования системы MATLAB. Для решения дифференциальных уравнений с частными производными можно также использовать пакет расширения Partial Differential Equations Toolbox. Он описан во второй книге данного трехтомника. 356
8.8. Решение обыкновенных дифференциальных уравнений (ОДУ)
»1 9
t
П1» fcdit Vir.\' Jf,i«i bc!s y/>Wo.) Uslp Ч с* Ы S i
•* А г
/
0 0 О •••••• Emiiter discharge current i(t) Г From PDEPE I j — From series [•
0.9 '
o . u •••••"*"
!.•••••••"
0.8
0.08.
0.7 .
.
.
;
•
-
-
•
•
•
"
• •
j
j
e
^
v
•
0.6
0.06.
0.5
0,04, J
m
1
0.4
0.07.
0,3
0, 1
0.2 0.1
.
.
:
.
:
.
•
.
.
•
'
!
.
. :
j
V D,2
0.4
06
0.8
Puc. 8.11. Выполнение примера pdex3 lie Ed* JD f i : «»*
D function pdex3 •> PDEX3
p(0,t,ul 'me right be
Puc. 5./2. Листинг примера pdex3
357
Глава 9. Математическая обработка и сохранение данных 9 . 1 . Обработка данных массивов Эта глава посвящена традиционной обработке данных и их сохранению в виде файлов. В ней приведены основные функции для обработки данных, представленных массивами. Они широко используются для анализа данных физических, химических, экономических и иных экспериментов. Описаны также средства работы с файлами различных форматов, в том числе изображений. 9 . 1 . 1 . Нахождение максимального и минимального элементов массива К простейшему анализу данных, содержащихся в некотором массиве, относится поиск его элементов с максимальным и минимальным значениями. Для этого определены следующие функции для нахождения максимальных элементов массива: • max (А) — возвращает наибольший элемент, если А — вектор; или возвращает вектор-строку, содержащую максимальные элементы каждого столбца, если А — матрица; • max (А, в) — возвращает массив того же размера, что А и в, каждый элемент которого есть максимальный из соответствующих элементов этих массивов; • max (А, [ ] , dim) — возвращает наибольший элемент по столбцам или по строкам матрицы в зависимости от значения скаляра dim. Например, max (А, [ ],1) возвращает максимальные элементы каждого столбца матрицы А; • [ C , l ] = max (А) — кроме максимальных значений возвращает вектор индексов этих элементов. Примеры: >> A=magic(7) А —
3 0 39 48 38 47 7 46 6 8 5 14 16 13 15 24 21 23 32 22 31 40 >> С = max(A) г =
1 9 17 25 33 41 49
46 47 48 49 >> С = m a x ( A , [ ] 46
358
47
48
49
10 18 26 34 42 43 2
19 27 35
43 1)
44
43
36 44 3 11
44
28 29 37 45 4 12 20
45
9.1. Обработка данных массивов » С = max (А, [ ],2) С = 48 47 46 45 44 43 49 >> [С,I] = max(A) С = 46 47 48 49 43 I = 3 2 1 7 6
44
45
5
4
Для нахождения элемента массива с минимальным значением служит следующая функция: • min (А) — возвращает минимальный элемент, если А — вектор; или возвращает вектор-строку, содержащую минимальные элементы каждого столбца, если А — матрица; • min (А, В) — возвращает массив того же размера, что А Й В , каждый элемент которого есть минимальный из соответствующих элементов этих массивов; • min (А, [ ] , dim) — возвращает наименьший элемент по столбцам или по строкам матрицы в зависимости от значения скаляра dim. Например, max (А, [ ] ,1) возвращает максимальные элементы каждого столбца матрицы А; • [ C , i ] = min (А) — кроме максимальных значений возвращает вектор индексов этих элементов. Пример: >> A=magic (4) А = 16 2 3 13 11 10 8 5 7 9 6 12 4 14 15 1 [С,1] = min(A) Ч 2 т -
3
1
Работа указанных функций базируется на сравнении численных значений элементов массива А, ЧТО И обеспечивает высокую скорость выполнения операций. 9.1.2. Сортировка элементов массива Многие операции статистической обработки данных выполняются быстрее, надежнее и точнее, если данные предварительно отсортированы. Кроме того, не359
Глава 9. Математическая обработка и сохранение данных редко представление данных в отсортированном виде более наглядно и ценно. Ряд функций служит для выполнения сортировки элементов массива. Они представлены ниже. • s o r t (A) — в случае одномерного массива А сортирует и возвращает элементы по возрастанию их значений; в случае двумерного массива происходит сортировка и возврат элементов каждого столбца. Допустимы вещественные, комплексные и строковые элементы. Если А принимает комплексные значения, то элементы сначала сортируются по абсолютному значению, а затем, если абсолютные значения равны, по аргументу. Если А включает NaN-элементы, s o r t помещает их в конец; • [В, INDEX] = s o r t (A) — наряду с отсортированным массивом возвращает массив индексов INDEX. О Н имеет размер s i z e (A), с помощью этого массива можно восстановить структуру исходного массива; • s o r t (A, dim) — для матриц сортирует элементы по столбцам или построкам в зависимости от значения переменной dim. Примеры: >> A=magic(5) А = 17 24 1 15 8 7 23 5 14 16 13 20 22 4 6 10 12 19 21 3 11 18 25 2 9 » [В,INDEX] = sort(A) В = 1 3 4 5 2 7 10 6 8 9 11 12 13 14 15 17 18 19 20 16 23 24 25 21 22 INDEX = 3 2 1 5 4 4 3 2 1 5 5 4 3 2 1 1 5 4 3 2 2 1 5 4 3 • s o r t r o w s (A) — выполняет сортировку строк массива А по возрастанию и возвращает отсортированный массив, который может быть или матрицей, или вектором-столбцом; • s o r t r o w s (A, column) — возвращает матрицу, отсортированную по столбцам, точно указанным в векторе column. Например, s o r t r o w s (А, [2 3]) сортирует строки матрицы А сначала по второму столбцу и затем, если его элементы равны, по третьему; • [В, i n d e x ] = s o r t r o w s (A) — также возвращает вектор индексов index. Если А — вектор-столбец, то в = А ( i n d e x ) . Если А — матрица размера т х И, ТО В=А(index, : ) .
Примеры: 360
9.1. Обработка данных массивов 3 5 6 8 9; 5 7 1 2 3 5
>> А=[2 А = 2 3
5 1 2 8
с. X
5 >>
В = 1 2 5 5
>> 3 = 5 1 2 5
3 0
6
2 1 8
8 3 5 4
, - 1 3 2 1 5 1 ;
5 0 8 8 4 3 ]
9 5 1 3
в =sortrows (А) 3 2 3 5
1 6 8 2
5 8 4 3
1 2 5 8
2 1 6 8
3 5 8 4
1 9 3 0 8 7 1 5 В = sortrows (А, 7 3 3 0
5 1 9 3
• c p l x p a i r (A) — сортирует элементы по строкам или столбцам комплексного массива А, группируя вместе комплексно-сопряженные пары. Затем найденные пары сортируются по возрастанию действительной части. Внутри пары элемент с отрицательной мнимой частью является первым. Действительные элементы следуют за комплексными парами. Заданный по умолчанию порог 100*eps относительно abs(A(i) ) ) определяет, какие числа являются действительными и какие элементы являются комплексно-сопряженными. Если А — вектор, cplxpair (А) возвращает А вместе с комплексно-сопряженными парами. Если А — матрица, cplxpair (А) возвращает матрицу А с комплексно-сопряженными парами, сортированную по столбцам; • c p l x p a i r (A, t o l ) — отменяет заданный по умолчанию порог и задает новый t o l ; • c p l x p a i r (A, [ ], dim) — сортирует матрицу А по строкам или по столбцам в зависимости от значения параметра dim; • c p l x p a i r (A, t o l , dim) — сортирует матрицу А по строкам или по столбцам в зависимости от значения параметра dim, используя заданный порог tol.
Пример: » A=[23+12i,34-3i,45;23-12i,-12,2i;-3, 34 + 3i,-2i] А=
23.0000 + 12.0000i 34.0000 - 3.0000i 45.0000 23.0000 - 12.0000i -12.0000 0 + 2.0000i -3.0000 34.0000 + 3.0000i 0 - 2.0000i >> cplxpair(A) ans = 23.0000 - 12.0000i 34.0000 - 3.0000i 0 - 2.0000i 23.0000 +'12.0000i 34.0000 + 3.0000i 0 + 2.0000i -3.0000
-12.0000
45.0000
361
Глава 9. Математическая
обработка и сохранение данных
9.1.3. Нахождение средних и срединных значений К элементарной статистической обработке данных в массиве обычно относят нахождение их среднего значения, медианы (срединного значения) и стандартного отклонения [62, 63]. Для этого определены следующие функции: • mean (A) — возвращает арифметическое среднее значение элементов массива, если А — вектор; или возвращает вектор-строку, содержащую средние значения элементов каждого столбца, если А — матрица. Арифметическое среднее значение есть сумма элементов массива, деленная на их число; • mean (A, dim) — возвращает среднее значение элементов по столбцам или по строкам матрицы в зависимости от значения скаляра dim (dim = 1 по столбцам и dim = 2 по строкам соответственно). Примеры: » А = [1 2 б 4 8; 6 7 13 5 4; 7 9 0 8 12; 6 6 7 1 2] А = 1 2 6 4 8 6 7 13 5 4 7 9 0 8 12 6 6 7 1 2 >> m e a n ( A ) ans = 5.0000 6.0000 >> m e a n ( A , 2 ) ans = 4.2000 7.0000 7.2000 4.4000
6.5000
4.5000
6.5000
• median (A) — возвращает медиану, если А — вектор; или вектор-строку медиан для каждого столбца, если А — матрица; • median (A, dim) — возвращает значения медиан для столбцов или строк матрицы в зависимости от значения скаляра dim. Примеры: >> A=magic(6) А = 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11 >> M=median(A) М = 19.0000 18. 5000 18.0000 >> M=median (A,2) М = 21.5000 22.0000 362
19.0000
18.5000 18.0000
9.1. Обработка
данных
массивов
21.0000 16.0000 15.0000 15.5000
9.1.4. Вычисление стандартного отклонения • s t d ( X ) — возвращает стандартное отклонение элементов массива, вычисляемое по формуле
если X — вектор. Если х — матрица, то std(X) возвращает вектор-строку, содержащую стандартное отклонение элементов каждого столбца (обратите внимание, что оно отличается от среднеквадратического отклонения); • s t d ( x , f l a g ) — возвращает то же значение, что и s t d ( X ) , если f l a g = 0; если f l a g = 1, функция s t d ( x , l ) возвращает среднеквадратическое отклонение (квадратный корень из несмещенной дисперсии), вычисляемое по формуле
• s t d (X, f l a g , dim) — возвращает стандартное или среднеквадратическое отклонения по строкам или по столбцам матрицы х в зависимости от значения переменной dim. Примеры: >> X =
linspace(0,3*pi,10)
X = Columns 1 t h r o u g h 7 0 1.0472 2.0944 3.1416 C o l u m n s 8 t h r o u g h 10 7.3304 8.3776 9.4248 >> s = s t d ( X ) s = 3.1705
4.1888
5.2360
6.2832
9.1.5. Вычисление коэффициентов корреляции Под корреляцией понимается взаимосвязь некоторых величин, представленных данными — векторами или матрицами. Общепринятой мерой линейной корреляции является коэффициент корреляции. Его близость к единице указывает на высокую степень идентичности сопоставляемых зависимостей. Приведенная ниже функция позволяет вычислить коэффициенты корреляции для входного массива данных. • c o r r c o e f (X) — возвращает матрицу коэффициентов корреляции для входной матрицы, строки которой рассматриваются как наблюдения, а столбцы — как переменные. Матрица s = c o r r c o e f (X) связана с матрицей ковариаций с = cov(X) следующим соотношением: s ( i , j) = С ( i , j) / s q r t (С ( i , i ) С ( j , j) ), • Функция S = c o r r c o e f (x, у ) , где х и у — векторы-столбцы, аналогична функции c o r r c o e f ( [ х у ] ) . 363
Глава 9. Математическая
обработка и сохранение
данных
Пример: >> M=magic(5 ) VI .1 —
8 15 17 24 1 14 16 7 23 5 4 6 13 20 22 10 12 19 21 3 9 11 18 25 2 >> S=corrcoef(M) S = -0 .5455 0. 0856 1.0000 1 .0000 -0 .0981 0.0856 -0.5455 -0 .0981 1. 0000 -0.3210 -0 .6731 -0 .0981 -0.0238 -0 .3210 -0 .5455
-0 .3210 -0 .6731 -0 .0981 1. 0000 0. 0856
-0 .0238 -0 .3210 -0 .5455 0 .0856 1 .0000
В целом корреляция данных в этом примере довольно низкая, за исключением данных, расположенных по диагонали, — здесь коэффициенты корреляции равны 1. 9 . 1 . 6 . Вычисление матрицы ковариации Приведенная ниже функция позволяет вычислить матрицу ковариации для массива данных. • cov(x) — возвращает смещенную дисперсию элементов вектора х. Для матрицы, где каждая строка рассматривается как наблюдение, а каждый столбец — как переменная, cov(x) возвращает матрицу ковариации. d i a g (cov (x) ) — вектор смещенных дисперсий для каждого столбца и s q r t ( d i a g (cov (x) ) ) — вектор стандартных отклонений. • Функция с = cov (х, у ) , где х и у — векторы-столбцы одинаковой длины, равносильна функции c o v ( [ х у ] ) . Пример: D=[2 -3 6;3 6 -
8 5];C=cov(D)
14.3333 16.3333 3.6667 16.3333 34.3333 -10.3333 3.6667 -10.3333 14.3333 >> diag(cov(D)) ans = 14.3333 34.3333 14.3333 >> sqrt(diag(cov(D))) ans = 3.7859 5.8595 3.7859 >> std(D) ans = 3.7859 5.8595 3.7859
364
9.2. Геометрический анализ
данных
9.2. Геометрический анализ данных Далее мы рассмотрим функции геометрического анализа данных. Такой анализ не относится к достаточно распространенным средствам анализа данных, но для специалистов он представляет несомненный интерес. 9 . 2 . 1 . Триангуляция Делоне Пусть есть некоторое число точек. Триангуляция Делоне — это множество линий, соединяющих каждую точку с ее ближайшими соседними точками. Диаграммой Вороного называют многоугольник, вершины которого — центры окружностей, описанных вокруг треугольников Делоне. В системе MATLAB определены функции триангуляции Делоне, триангуляции Делоне для ближайшей точки и поиска наилучшей триангуляции. Рассмотрим функции, реализующие триангуляцию Делоне. • TRI = delaunay (х, у) — возвращает матрицу размера т х 3 множества треугольников (триангуляция Делоне), такую что ни одна из точек данных, содержащиеся в векторах х и у, не попадают внутрь окружностей, проходящих через вершины треугольников. Каждая строка матрицы TRI определяет один такой треугольник и состоит из индексов векторов х и у; • TRI = delaunay (х, у, ' s o r t e d 1 ) — при расчетах предполагается, что точки векторов х и у отсортированы сначала по у, затем по х и двойные точки уже устранены. Пример: >> r a n d ( ' s t a t e ' , 0) ; >> x = r a n d ( l , 2 5 ) ; >> y = r a n d ( 1 , 2 5 ) ; >> TRI = d e l a u n a y ( x , у ) ; >> t r i m e s h (TRI', x , y, z e r o s ( s i z e (x) ) ) >> a x i s ( [ 0 »
1 0 1]);
p l o t (x,y,
hold
on;
'o')
Построенная по этому примеру диаграмма представлена на рис. 9.1.
0 .
.
.
.
.
.
.
. . . '
02 .
•
:
.
.
:
04 . .
•
'
,
0 6 '
.
.
.
.
.
.
.
09 . .
I ...
'..
Рис. 9.1. Пример применения функции delaunay 365
Глава 9. Математическая
обработка
и сохранение
данных
• d s e a r c h (x, у, TRI, x i , y i ) — возвращает индекс точки из числа содержащихся в массивах х и у, ближайшей к точке с координатами ( x i , y i ) , используя массив данных триангуляции T R I (триангуляция Делоне для ближайшей точки); • d s e a r c h (х, у, T R I , x i , y i , S) — делает то же, используя заранее вычисленную разреженную матрицу триангуляции s: S = s p a r s e ( T R I ( : , [1 1 2 2 3 3 ] ) ,TRI(:,[2
3 1 3 1 2 ] ) , 1 , n x y , n x y ) , г д еn x y - p r o d ( s i z e ( x ) ) ;
• t s e a r c h (x, y, TRI, x i , yi) — выполняет поиск наилучшей триангуляции, возвращает индексы строк матрицы триангуляции TRI для каждой точки с координатами (xi,yi). Возвращает NaN для всех точек, находящихся вне выпуклой оболочки. Триангуляция трехмерных и n-мерных массивов (п>=2) осуществляется при помощи функций delaunay3 и delaunayn соответственно. Эти функции используют не алгоритм вычисления диаграмм Вороного, как delaunay, а алгоритм qhull национального научно-технического и исследовательского центра визуализации и вычисления геометрических структур США.
9.2.2. Вычисление выпуклой оболочки В системе MATLAB определена функция вычисления точек выпуклой оболочки: • c o n v h u l l (х, у) — возвращает индексы тех точек, задаваемых векторами х и у, которые лежат на выпуклой оболочке; • c o n v h u l l (x,y,TRi) — использует триангуляцию, полученную в результате применения функции триангуляции Делоне d e l a u n a y , вместо того, чтобы вычислять ее самостоятельно. Пример: >> х х = - 0 . 8 : 0 . 0 3 : 0 . 8 ; >> уу = a b s ( s q r t ( x x ) ) ; >> [х,у] = p o l 2 c a r t ( x x , у у ) ; >> k = c o n v h u l l ( х , у ) ; >> p l o t ( х ( к ) ,у (к) , ' г : ' , х , у , ' д * ' ) Рис. 9.2 иллюстрирует применение функции c o n v h u l l для построения выпуклой оболочки. Функция c o n v h u l l n вычисляет n-мерную выпуклую поверхность, основана на алгоритме qhull.
.-•-Л
06 QA
0.2 0
0.2
' • • •
*
*
*
*
*
*
•
-
04
о.е •0 8
'•••••-у 0.2
0.3
0.4
0.5
0,6
• 07
Рис. 9.2. Пример использования функции convhull 366
9.2. Геометрический анализ
данных
9 . 2 . 3 . Вычисление площади полигона В системе MATLAB определены функции, вычисляющие площадь полигона и анализирующие нахождение точек внутри полигона. Для вычисления площади полигона используется функция p o l y a r e a : • p o i y a r e a (X, Y) — возвращает площадь полигона, заданного вершинами, находящимися в векторах х и Y. Если X и Y — матрицы одного размера, то p o l y a r e a возвращает площадь полигонов, определенных столбцами X и Y; • p o l y a r e a (X, Y, dim) — возвращает площадь полигона, заданного столбцами или строками х и Y в зависимости от значения переменной dim. Пример: >> >> >> >> A
L = linspace (0,3*pi,10) ; X = s i n (L) ' ; Y=cos (L) ' ; A = polyarea(X,Y)
3.8971 >> p l o t ( X , Y , ' m ' )
Построенный по этому примеру многоугольник представлен на рис. 9.3.
Рис. 9.3. Область многоугольника, для которого вычислена площадь В данном примере использована функция l i n s p a c e ( x l , x2,N), генерирующая N точек в промежутке от xl до х2 с последующим формированием векторов х и Y для построения многоугольника в полярной системе координат. 9.2.4. Анализ попадания точек внутрь полигона Функция i n p o l y g o n точки внутрь полигона:
используется для анализа того, попадают ли заданные
• lN=inpolygon (X, Y, xv, yv) — возвращает матрицу IN того же размера, что х и Y. Каждый элемент матрицы IN принимает одно из значений — 1, 0.5 или 0 — в зависимости от того, находится ли точка с координатами (X(p,q) ,Y(p,q) ) внутри полигона, вершины которого определяются векторами xv и yv: О i N ( p , q ) = 1 — если точка (х (р, q) , Y (p, q) ) лежит внутри полигона; 367
Глава 9. Математическая обработка и сохранение данных О I N ( p , q)
=0.5
— если точка (X ( р , q) , Y ( p , q) ) л е ж и т на г р а н и ц е по-
лигона; 0 iN(p,q)
= 0 — если т о ч к а (X ( р , q) , Y ( p , q) ) л е ж и т вне полигона.
Пример:
>> L = linspace (0,2*pi,8) ; >> yv = sin (L) '; >> xv = cos (L) '; >> x = randn (100,1) ; у = randn (100,1) ; >> IN = inpolygon(x,y,xv,yv); » plot(xv,yv, 'k',x(IN),y (IN), 'r*',x(~IN),y(~IN), 'bo') Построенные в этом примере массив точек и полигон представлены на рис. 9.4.
Рис. 9.4. Пример применения функции inpolygon Точки, попавшие внутрь полигона, обозначены символом звездочки, а точки вне полигона обозначены кружками.
9.2.5. Построение диаграммы Вороного Для построения диаграммы Вороного служит следующая команда: • voronoi(x,y) — строит диаграмму Вороного для точек с координатами (х,у). Функция voronoi (х, у, TRI) использует триангуляцию TRI; • voronoi (..., 'LineSpec') — строит диаграмму с заданным цветом и стилем линий; • [vx,vy] = voronoi (...) — возвращает вершины граней Вороного в векторах vx и vy, так что команда p l o t (vx, vy, ' - ' , х, у, ' . ') создает диаграмму Вороного. Пример: >> r a n d ( ' s t a t e ' , 0 ) ; »
х
= rand (1,15);
>> T R I =
у
= гand(1,15),•
delaunay(x,у);
>> s u b p l o t
(1,2,1),...
>> t r i m e s h ( T R I , х , у , z e r o s ( s i z e ( x ) ) ) ; >> a x i s ( [ 0
368
1 0 1]);
hold
on;
view(2),...
9.3. Преобразование Фурье » >> >> >> >>
plot(х,у,'о'); [vx, vy] = v o r o n o i ( х , у , T R I ) ; s u b p l o t ( 1 , 2,2) ,... p l o t (x, у, ' r + ' , vx, vy, ' b - ') ,... a x i s ([0 1 0 1])
Рисунок 9.5 (слева) иллюстрирует построение треугольников Делоне.
Рис. 9.5. Связь триангуляции Делоне с диаграммой. Вороного На рис. 9.5 (справа) знаками «плюс» изображены центры окружностей, проведенных вокруг треугольников Делоне. Функция [V,C] = voronoin(X) служит для построения диаграмм Вороного n-мерных данных. V — массив граней, С — массив клеток диаграмм Вороного. При п = 2 вершины граней Вороного возвращаются в порядке смежности, при п > 2 — в порядке убывания.
9.3. Преобразование Фурье 9.3.1. Основные определения Разработка преобразований Фурье сыграла огромную роль в появлении и развитии ряда новых областей науки и техники. Достаточно отметить, что электротехника переменного тока, электрическая связь и радиосвязь базируются на спектральном представлении сигналов. Ряды Фурье также можно рассматривать как приближение произвольных функций (определенные ограничения в этом известны) тригонометрическими рядами бесконечной длины. При конечной длине рядов получаются наилучшие среднеквадратические приближения. Несмотря на разработку в последние годы более общего и привлекательного вейвлет-приближения функций и сигналов на основе масштабируемых и перемещаемых «коротких волн» самого различного вида, приближения рядами Фурье остаются практически важными и фундаментальными возможностями. MATLAB содержит функции для выполнения быстрого одномерного и двумерного быстрого дискретного преобразования Фурье. Для одномерного массива х с длиной N прямое и обратное преобразования Фурье реализуются по следующим формулам: 369
Глава 9. Математическая
обработка и сохранение
данных
J-A
Прямое преобразование Фурье переводит описание сигнала (функции времени) из временной области в частотную, а обратное преобразование Фурье переводит описание сигнала из частотной области во временную. На этом основаны многочисленные методы фильтрации сигналов. 9.3.2. Одномерное прямое быстрое преобразование Фурье В описанных ниже функциях реализован особый метод быстрого преобразования Фурье — Fast Fourier Transform (FFT или БПФ), позволяющий резко уменьшить число арифметических операций в ходе приведенных выше преобразований. Он особенно эффективен, если число обрабатываемых элементов (отсчетов) составляет 2"\ где т — целое положительное число. Для одномерного преобразования используется следующая функция: • f f t (X) — возвращает для вектора х дискретное преобразование Фурье, по возможности используя алгоритм быстрого преобразования Фурье. Если х — матрица, функция f ft возвращает преобразование Фурье для каждого столбца матрицы; • fft(X,n) — возвращает n-точечное преобразование Фурье. Если длина вектора х меньше п, то недостающие элементы заполняются нулями. Если длина х больше п, то лишние элементы удаляются. Когда X — матрица, длина столбцов корректируется аналогично; • fft(X, [ ],dim) и f ft (х, n, dim) — применяют преобразование Фурье к одной из размерностей массива в зависимости от значения параметра dim. Для иллюстрации применения преобразования Фурье создадим трехчастотный сигнал на фоне сильного шума, создаваемого генератором случайных чисел: >>t=0:0.0005:1; >>x=sin(2*pi*200*t)+0.4*sin(2*pi*150*t)+0.4*sin(2*pi*250*t) ; >> y=x+2*randn(size(t)); >> plot(y(1:100),'b') Этот сигнал имеет среднюю частоту 200 рад/с и два боковых сигнала с частотами 150 и 250 рад/с, что соответствует амплитудно-модулированному сигналу с частотой модуляции 50 рад/с и глубиной модуляции 0,8 (амплитуда боковых частот составляет 0,4 от амплитуды центрального сигнала). На рис. 9.6 показан график этого сигнала (по первым 100 отсчетам из 2000). Нетрудно заметить, что из него никоим образом не видно, что полезный сигнал — амплитудно-модулированное колебание, настолько оно забито шумами. Теперь построим график спектральной плотности полученного сигнала с помощью прямого преобразования Фурье, по существу переводящего временное представление сигнала в частотное. Этот график (см. рис. 9.6) в области частот до 300 Гц строится следующими командами: >> Y=fft(у,1024); >> Pyy=Y.*conj (Y)/1024; >> f=2000* (0 : 150)/1024; >> plot (f,Pyy (1:151) ),grid
370
9*3. Преобразование
Фурье
У* fc* &*xfc*i i
10
.
20 •
30
40
• 5 0 ... 6 0 '
70
80
90
:
100
Рис. 9.6. Форма затупленного сигнала
Puc. 9.7. График спектральной плотности приведенного на рис. 9.6 сигнала
График спектральной плотности сигнала, построенный в этом примере, представлен на рис. 9.7. Даже беглого взгляда на рис. 9.7 достаточно, чтобы убедиться в том, что спектрограмма сигнала имеет явный пик на средней частоте амплитудно-модулированного сигнала и два боковых пика. Все эти три частотные составляющие сигнала явно выделяются на общем шумовом фоне. Таким образом, данный пример наглядно иллюстрирует технику обнаружения слабых сигналов на фоне шумов, лежащую в основе работы радиоприемных устройств. 9 . 3 . 3 . Многомерное прямое преобразование Фурье Для двумерного прямого преобразования Фурье используется функция fft2: • f f t2 (X) — возвращает для массива данных х двумерное дискретное преобразование Фурье; • fft2 (X,m,n) — усекает массив х или дополняет его нулями, чтобы перед выполнением преобразования Фурье создать матрицу размера т х п. Результат — матрица того же размера. Для многомерного прямого преобразования Фурье также существует функция: • fftn (X) — возвращает результат УУ-мерного дискретного преобразования для массива X размерности N. Если х — вектор, то выход будет иметь ту же ориентацию; • f f t n ( x , s i z ) — возвращает результат дискретного преобразования для массива х с ограничением размера, заданным переменной siz. 9.3.4. Перегруппировка массивов Функция Y = f f t s h i f t (X) перегруппировывает выходные массивы функций fft и fft2, размещая нулевую частоту в центре спектра, что иногда более удобно. Если х — вектор, то у — вектор с циклической перестановкой правой и левой половин исходного вектора. Если X — матрица, то у — матрица, у которой квадран371
Глава 9. Математическая обработка и сохранение данных ты I и III меняются местами с квадрантами II и IV'. Рассмотрим следующий пример. Вначале построим график спектральной плотности мощности (рис. 9.8) при одномерном преобразовании Фурье: » rand ( 'state',0); >> t=0:0.001:0.512; » x=sin(2*pi*50*t)+sin(2*pi*120*t); >> y=x+2*randn(size(t))+0.3; >> Y=fft(y); >> Pyy=Y.*conj (Y)/512; » f=1000*(0:255)/512; >> plot(f,Pyy(1:256)),grid Здесь мы ограничились 512 отсчетами с тем, чтобы использовать эффективный метод быстрого преобразования Фурье, при котором число отсчетов должно быть 2N, где N — целое число. Теперь воспользуемся функцией f f t s h i f t : >> Y=fftshift (Y) ; >> Pyy=Y.*conj (Y)/512; » plot(Pyy),grid Полученный при этом график представлен на рис. 9.9.
:
4 It I 3 1
2
v-HJ-"i Й30i0 400 . 6 0
Рис. 9.8. График, спектральной плотности сигнала после одномерного преобразования Фурье
Рис. 9.9. График спектральной плотности того же сигнала после применения функции fftshift
Надо отметить, что этот график дает значения спектральной плотности состав-, ляющих спектра не явно от частоты, а как распределение ее значений для элементов вектора Руу. 9.3.5. Одномерное быстрое обратное преобразование Фурье Возможно одномерное обратное преобразование Фурье, реализуемое следующей функцией: • i f f t ( F ) — возвращает результат дискретного обратного преобразования Фурье вектора F. Если F.— матрица, то if ft возвращает обратное преобразование Фурье для каждого столбца этой матрицы; 1
Для одно- и двумерных массивов функция f f t s h i f t (X) эквивалентна функции r o t 9 0 (X,2).
372
9.4. Свертка и дискретная
фильтрация
• i f f t ( F , n ) — возвращает результат n-точечного дискретного обратного преобразования Фурье вектора F; • i f f t ( F , [ ],dim) и у = i f ft (X, n, dim) — возвращают результат обратного дискретного преобразования Фурье массива F по строкам или по столбцам в зависимости от значения скаляра dim. Для любого х результат последовательного выполнения прямого и обратного преобразований Фурье i f ft (f f t (x) ) равен х с точностью до погрешности округления. Если X — массив действительных чисел, if f t (f f t (x) ) может иметь малые мнимые части. Пример: » V=[1 1 1 1 0 0 0 0]; » fft(V) ans =
Columns 1 through 4 4.0000 1.0000 - 2.4142iO Columns 5 through 8 0 1.0000 + 0 . 4 1 4 2 Ю » ifft(fft(V)) ans = 1 1 1 1 0 0 0 0
1.0000 - 0.4142i
1.0000 + 2 . 4 1 4 2 i
Аналогичные функции есть для двумерного и многомерного случаев: • i f f t 2 ( F ) — производит двумерное дискретное обратное преобразование Фурье для матрицы F; • i f f t 2 (F,m,n) — производит обратное преобразование Фурье размерности т х п для матрицы F; • i f f t n ( F ) — возвращает результат jY-мерного обратного дискретного преобразования Фурье для jV-мерного массива F; • i f f t n ( F , s i z ) — возвращает результат обратного дискретного преобразования Фурье для массива F с ограничением размера, заданным вектором s i z . Если любой элемент s i z меньше, чем соответствующая размерность F, то массив F будет урезан до размерности siz.
9.4. Свертка и дискретная фильтрация В этом разделе рассмотрены базовые средства для проведения операций свертки и фильтрации сигналов на базе алгоритмов быстрого преобразования Фурье. Многие дополнительные операции, относящиеся к этой области обработки сигналов, можно найти в пакете прикладных программ Signal Processing Toolbox.
9.4.1. Свертка прямая и обратная Для двух векторов х и у с длиной т и п определена операция свертки: min(kyn)
z(k)=
2lx(j)y(k - j + l). y = max( \,k-n+\)
В ее результате получается вектор z с длиной (т + п — 1).Для осуществления свертки используется функция conv (x, у).
373
Глава 9. Математическая
обработка и сохранение
данных
Обратная свертке функция определена как [q, r ] = deconv ( z , x ) . Она фактически определяет импульсную характеристику фильтра. Если z = c o n v ( x , y ) , то q = у и г = 0. Если х и у — векторы с коэффициентами полиномов, то свертка эквивалентна перемножению полиномов, а обратная операция — их делению. При этом вектор q возвращает частное (фактор), а вектор г — остаток от деления полиномов.
9.4.2. Свертка двумерных массивов HZ
Для двумерных массивов также существует ф у н к ц и я свертки: z = c o n v 2 (x, Y) = conv2(X,Y,'option').
Для двумерных массивов х и Y с размером тх х пх и ту х пу, соответственно, результат двумерной свертки порождает массив размера (тх + ту — 1) х (пх + пу — 1). Во второй форме функции параметр o p t i o n может иметь следующие значения: • ' f u l l ' — полноразмерная свертка (используется по умолчанию); • ' same ' — центральная часть размера тх х пх; • ' v a l i d ' — центральная часть размера (тх — ту + 1) х (пх — пу + 1), если (тх х пх) > (ту х пу).
Возможность изменить решение или трактовку данных с помощью параметров является свойством ряда функций системы MATLAB. Позже мы столкнемся с этой возможностью еще не раз.
9.4.3. Дискретная одномерная фильтрация MATLAB может использоваться для моделирования работы цифровых фильтров. Для обеспечения дискретной одномерной фильтрации используется функция f i l t e r в следующих формах записи: • f i l t e r (в, А, X) — фильтрует одномерный массив данных х, используя дискретный фильтр, описываемый следующим конечно-разностным уравнением: а(1)*у(п)
= b ( l ) * x ( n ) + Ь ( 2 ) * х ( п - 1 ) + ... + b (nb+1) *х ( n - n b ) - a ( 2 ) * y ( n - l ) - ... - a ( n a + 1 ) *y ( n - n a ) .
-
Если a ( l ) не равно 1, то коэффициенты уравнения нормализуются относительно а (1). Когда х — матрица, функция f i l t e r оперирует столбцами х. Возможна фильтрация многомерного (размерности N) массива. • [Y, zf ] = f i l t e r (в, А, х, z i ) — выполняет фильтрацию с учетом ненулевого начального состояния фильтра z i ; возвращает, помимо выходного сигнала Y, конечное состояние фильтра Zf; • f i l t e r (в, А, X, [ ],dim) или f i l t e r (в, А, X, z i , dim) — работают в направлении размерности dim. Рассмотрим типовой пример фильтрации гармонического сигнала на фоне других сигналов — файл с именем filtdem.m из пакета расширения Signal Processing Toolbox. На рис. 9.10 представлен кадр примера, на котором показано формирование входной совокупности сигналов в виде трех сигналов с частотами 5, 15 и 30 Гц. Показана временная зависимость сигнала и под ней фрагмент программы, включающий команды, которые надо выполнить для этого этапа примера.
374
9.4. Свертка и дискретная фильтрация Ей £* И * * * Нйв
U wV
J
К
I
(1
\
s
г
1
I J *•"
У'
02
Ivre't an twt^M "
I
I
1
;
1
;
*V
;
1
М
1 1
VI
04 • T m i e /seconds) •
/ Freauenev (Hr)
Ы l i e m g M h 'he Signal Proce? ' equenc*! ol 5. 15. «nd 30 H i l
Puc. 9.10. Формирование сигнала и построение его графика
Рис. 9.11. Конструирование фильтра с заданной полосой частот и построение графика его АЧХ
Следующий кадр (рис. 9.11) иллюстрирует конструирование фильтра с достаточно плоской вершиной амплитудно-частотной характеристики (АЧХ) и полосой частот, обеспечивающего выделение сигнала с частотой 15 Гц и подавление сигналов с частотами 5 и 30 Гц. Для формирования полосы пропускания фильтра используется функция e l l i p , а для построения АЧХ — функция freqz (обе — из пакета Signal Processing Toolbox). Это позволяет построить график АЧХ созданного фильтра. Следующий кадр примера (рис. 9.12) иллюстрирует эффективность выделения сигнала заданной частоты (15 Гц) с помощью операции фильтрации — функции f i l t e r , описанной выше. Можно заметить два обстоятельства — полученный стационарный сигнал практически синусоидален, что свидетельствует о высокой степени фильтрации побочных сигналов. Однако нарастание сигнала во времени идет достаточно медленно и занимает несколько периодов частоты полезного сигнала. Характер нарастания сигнала во времени определяется переходной характеристикой фильтра. Заключительный кадр (рис. 9.13) показывает спектр исходного сигнала и спектр сигнала на выходе фильтра (он показан линиями другого цвета, что, к со-
Рис. 9.12. Фильтрация и ее результат в виде временной зависимости сигнала на выходе фильтра
Рис. 9.13. Анализ спектров сигналов на входе и на выходе фильтра и построение их спектров
375
Глава 9. Математическая обработка и сохранение
данных
жалению, не видно на черно-белом рисунке). Для построения спектров используется прямое преобразование Фурье — функция fft. Этот пример наглядно иллюстрирует технику фильтрации. Рекомендуется просмотреть дополнительные примеры, которые есть в разделе Demos системы применительно к пакету расширения Signal Processing (если этот пакет установлен).
9.4.4. Двумерная фильтрация Для осуществления двумерной фильтрации служит функция f i l t e r 2 : • f i l t e r 2 (в, X) — фильтрует данные в двумерном массиве X, используя дискретный фильтр, описанный матрицей в. Результат У имеет те же размеры, что и х; • f i l t e r 2 ( B , x , ' o p t i o n ' ) — выполняет то же, но с опцией, влияющей на размер массива Y: О 'same' — s i z e (Y) =size (X) (действует по умолчанию); О ' v a l i d ' — size(Y) < size (X), центральная часть двумерной свертки, при вычислении которой не приходится дополнять массивы нулями; О ' f u l l ' — size(Y) > s i z e (X), полная двумерная свертка.
9.4.5. Коррекции фазовых углов Фазовые углы одномерных массивов испытывают разрывы при переходе через значения, кратные 2л. Функции unwrap(P) и unwrap (P, cutoff) устраняют этот недостаток для одномерного массива р, дополняя значения углов в точках разрыва значениями ±2я. Если р — двумерный массив, то данная функция применяется к столбцам. Параметр cutoff (по умолчанию равный л) позволят назначить любой критический угол в точках разрыва. Функция используется при построении фазочастотных характеристик (ФЧХ) фильтров. Поскольку они строятся редко, оставим за читателем изучение практического применения данной функции.
9.5. Интерполяция и аппроксимация данных Под аппроксимацией обычно подразумевается описание некоторой, порой не заданной явно, зависимости или совокупности представляющих ее данных с помощью другой, обычно более простой или более единообразной зависимости. Часто данные находятся в виде отдельных узловых точек, координаты которых задаются таблицей данных. График аппроксимирующей функции может не проходить через узловые точки, но приближать их с некоторой (по возможности малой) среднеквадратической погрешностью. Это характерно для регрессии — реализации метода наименьших квадратов (МНК). Основная задача интерполяции — оценить значение представляемой данными зависимости в промежутках между ее узловыми точками. Для этого используются подходящие функции, значения которых в узловых точках совпадают с координатами этих точек. Например, при линейной интерполяции зависимости у(х) узловые' точки просто соединяются друг с другом отрезками прямых и считается, что искомые промежуточные точки расположены на этих отрезках. Для повышения точности интерполяции применяют параболы (квадратичная интерполяция) или полиномы более высокой степени (полиномиальная интерпо-' 376
9.5. Интерполяция
и аппроксимация
данных
ляция). Для обработки данных MATLAB использует различные функции интерполяции и аппроксимации данных. Набор таких функций вместе с несколькими вспомогательными функциями описан в этом разделе. 9 . 5 . 1 . Полиномиальная регрессия Одна из наиболее известных аппроксимаций — полиномиальная. В системе MATLAB определены функции аппроксимации данных полиномами по методу наименьших квадратов — полиномиальной регрессии. Это достаточно универсальный вид аппроксимации. Например, при степени полинома I мы имеем линейную регрессию, при степени полинома 2 — квадратичную и т. д. Полиномиальную регрессию реализует функция, приведенная ниже: • p o l y f i t (х, у,п) — возвращает вектор коэффициентов полинома р (х) степени п, который с наименьшей среднеквадратичной погрешностью аппроксимирует функцию у ( х ) . Результатом является вектор-строка длиной п + 1, содержащий коэффициенты полинома в порядке уменьшения степеней х и у равно п+1, то реализуется обычная полиномиальная аппроксимация, при которой график полинома точно проходит через узловые точки с координатами (х, у ) , хранящиеся в векторах х и у. В противном случае точного совпадения графика с узловыми точками не наблюдается; • [p/S] = p o l y f i t (х, у, п) — возвращает коэффициенты полинома р и структуру S для использования вместе с функцией p o l y v a l с целью оценивания или предсказания погрешности; • [p,S] = p o l y f i t (x, у, n,mu) возвращает коэффициенты полинома р и структуру S для использования вместе с функцией p o l y v a l с целью оценивания или предсказания погрешности, но так, что присходит центрирование (нормирование) и масштабирование х, xnorm = (х - m u d ) ) /mu(2), где m u d ) = mean (х) и т и ( 2 ) = s t d (x). Центрирование и масштабирование не только улучшают свойства степенного многочлена, получаемого при помощи p o l y v a l , но и значительно повышают качественные характеристики самого алгоритма аппроксимации. Пример (полиномиальная регрессия для функции sin(x)): >> х= ( - 3 : 0 . 2 : 3 ) ' ; y = s i n (x) ; p = p o l y f i t ( x , у , 3 ) Р = -0.0953 >>
0.0000
0.8651
-0.0000
х=(-4:0.2:4)';y=sin(х);
>> f = p o l y v a l ( p , x ) ; p l o t ( х , у , ' о ' , х , f )
Рисунок 9.14, построенный в этом примере, дает наглядное представление о точности полиномиальной аппроксимации. Следует помнить, что она достаточно точна в небольших окрестностях от точки х = О, но может иметь большие погрешности за их пределами или в промежутках между узловыми точками. График аппроксимирующего полинома третьей степени на рис. 9.14 показан сплошной линией, а точки исходной зависимости обозначены кружками. К сожалению, при степени полинома свыше 5 и обычной для ПК точностью вычислений погрешность полиномиальной регрессии (и аппроксимации) сильно возрастает и ее применение без центрирования и масштабирования становится рискованным. 377
Глава 9. Математическая
обработка и сохранение данных
Обратите внимание на то, что при полиномиальной регрессии узловые точки не ложатся точно на график полинома, поскольку их приближение к нему является наилучшим в смысле минимального среднеквадратического отклонения. Об этом уже говорилось. Однако, если степень полинома на 1 меньше числа узлов зависимости f(x), то полученный полином в узловых точках дает значения, точно совпадающие (в пределах точности машинных вычислений) со значениями ординат узловых точек Дх,).
9.5.2. Фурье-интерполяция периодических функций Под интерполяцией обычно подразумевают вычисление значений таблично заданных функции Дл:,) в промежутках между узловыми точками х,. Линейная, квадратичная и полиномиальная интерполяция реализуются при полиномиальной аппроксимации. А вот для периодических (и особенно для гладких периодических) функций хорошие результаты может дать их интерполяция тригонометрическим рядом Фурье. Для этого используется следующая функция: • i n t e r p f t ( х , п у — возвращает вектор у, содержащий значения периодической функции, определенные в п равномерно расположенных точках. Если length (х) = m и х имеет интервал дискретизации dx, то интервал дискретизации для у составляет dy = dx*m/n, причем п не может быть меньше чем т. Если X — матрица, i n t e r p f t оперирует столбцами х, возвращая матрицу Y с таким же числом столбцов, как и у х, но с п строками. Функция у = i n t e r p f t (x, n, dim) работает либо со строками, либо со столбцами в зависимости от значения параметра dim. Пример: >> х = 0 : 1 0 ; y = s i n (х) . А 3 ; >> x l = 0 : 0 . 1 : 1 0 ; y l = i n t e r p f t ( у , 1 0 1 ) ; >> х 2 = 0 : 0 . 0 1 : 1 0 ; y 2 = s i n ( х 2 ) . А 3 ; >> p l o t ( x l , y l , ' - ' ) , h o l d o n , p l o t ( х , у , ' о ' , х 2 , у 2 )
Рисунок 9.15 иллюстрирует эффективность данного вида интерполяции на примере функции s i n ( x ) . A 3 , которая представляет собой сильно искаженную синусоиду. Исходная функция на рис. 9.15 представлена сплошной линией с кружками, а интерполирующая функция — штрихпунктирной линией.
-4 -3 -2 Рис. 9.14. Пример использования функции polyfit 378
Рис. 9.15. Пример использования функции interpft
9.5. Интерполяция и аппроксимация данных 9.5.3. Интерполяция на неравномерной сетке Для интерполяции на неравномерной сетке используется функция, приведенная ниже: = g r i d d a t a (х, у, z, XI, YI) — преобразует поверхность вида z = f ( x , y ) , которая определяется векторами ( x , y , z ) с (обычно) неравномерно распределенными элементами. Функция g r i d d a t a аппроксимирует эту поверхность в точках, определенных векторами (XI, Y I ) в виде значений z i . Поверхность всегда проходит через заданные точки. XI и YI обычно формируют однородную сетку (созданную с помощью функции meshgrid).
Zl
XI может быть вектором-строкой, в этом случае он определяет матрицу с постоянными столбцами. Точно также YI может быть вектором-столбцом, тогда он определяет матрицу с постоянными строками. • [ X i , Y l , z i ] = g r i d d a t a (х, у, z, x i , y i ) — возвращает аппроксимирующую матрицу z i , как описано выше, а также возвращает матрицы XI и Y I , сформированные из вектора-столбца x i и вектора-строки y i . Последние аналогичны матрицам, возвращаемым функцией meshgrid; • [...] = g r i d d a t a (..., method) — использует определенный метод интерполяции: О О О О
' n e a r e s t ' — ступенчатая интерполяция; ' l i n e a r ' — линейная интерполяция (принята по умолчанию); ' c u b i c ' — кубическая интерполяция 'v4 ' — метод, используемый в MATLAB 4.
Метод определяет тип аппроксимирующей поверхности. Метод ' c u b i c ' формирует гладкие поверхности, в то время как ' l i n e a r ' и ' n e a r e s t ' имеют разрывы первых и нулевых производных соответственно. Метод ' v 4 ' включен для обеспечения совместимости с версией 4 системы MATLAB. Пример: >> x = r a n d ( 1 2 0 , 1 ) * 4 - 2 ; y = r a n d ( 1 2 0 , 1 ) * 4 - 2 ; z = x . * у . * е х р ( - х . А 2 - у . А 2 ) ; >> t = - 2 : 0 . 1 : 2 ; [ X , Y ] = m e s h g r i d ( t , t ) ; Z = g r i d d a t a ( x , y , z , X , Y ) ; >> mesh(X, Y , Z ) , h o l d o n , p l o t 3 ( x , y , z , 'ok ' ) Рисунок 9.16 иллюстрирует применение функции g r i d d a t a .
Рас 9.16. Пример использования функции griddata 379
Глава 9. Математическая обработка и сохранение данных Функции griddata3 и griddatan работают аналогично griddata, но для для трехмерного и n-мерного случая. Используются, в частности, при трехмерной и n-мерной триангуляции.
9.5.4. Одномерная табличная интерполяция В ряде случаев очень удобна сплайновая интерполяция и аппроксимация таблично заданных функций. При ней промежуточные точки ищутся по отрезкам полиномов третьей степени — это кубическая сплайновая интерполяция. При этом обычно такие полиномы вычисляются так, чтобы не только их значения совпадали с координатами узловых точек, но также чтобы в узловых точках были непрерывны производные первого и второго порядков. Такое поведение характерно для гибкой линейки, закрепленной в узловых точках, откуда и происходит название spline (сплайн) для этого вида интерполяции (аппроксимации). Для одномерной табличной интерполяции используется функция i n t e r p l : • yi = i n t e r p l (x,Y, xi) — возвращает вектор yi, содержащий элементы, соответствующие элементам xi и полученные интерполяцией векторов х и Y. Вектор х определяет точки, в которых-задано значение Y. Если Y — матрица, то интерполяция выполняется для каждого столбца Y и yi имеет длину l e n g t h ( x i ) - by - s i z e (Y,2); • yi = i n t e r p l (x, Y, xi, method) — позволяет с помощью параметра method задать метод интерполяции: О ' n e a r e s t ' — ступенчатая интерполяция; О ' l i n e a r ' —линейная интерполяция (принята по умолчанию); О ' s p l i n e ' — кубическая сплайн-интерполяция; О ' c u b i c ' или ' p c h i p ' — интерполяция многочленами Эрмита; О 'vScubic' — кубическая интерполяция MATLAB 5. • yi = interpl(x,Y,xi,method, значение величин вне пределов изменения х) — позволяют отобразить особенные точки на графике; • yi = i n t e r p l (x, Y, xi, method, ' сообщение ') —позволяют изменить сообщение об особенных точках на графике. Все методы интерполяции требуют, чтобы значения х изменялись монотонно. Когда х — вектор равномерно распределенных точек, для более быстрой интерполяции лучше использовать методы ' * l i n e a r ' , ' * c u b i c ' , ' * n e a r e s t ' или ' * s p l i n e ' . Обратите внимание, 4fo в данном случае наименованию метода предшествует знак звездочки. Пример (интерполяция функции косинуса): >> х = 0 : 1 0 ; y = c o s ( х ) ;
>> x i = 0 : 0 . 1 : 1 0 ; >> y i = i n t e r p l ( х , у , x i ) ; >> p l o t ( х , у , ' х ' , x i , y i , ' g ' ) , h o l d on >> y i = i n t e r p l ( x , у , x i , ' s p l i n e ' ) ; >> p l o t (x,y, ' o ' , x i , y i , ' m ' ) , g r i d , h o l d off Результаты интерполяции иллюстрирует рис. 9.17. Узловые точки на рис. 9.17 обозначены кружками с наклонными крестиками. Одна из кривых соответствует линейной интерполяции, другая — сплайн-интерполяции. Нетрудно заметить, что сплайн-интерполяция в данном случае дает гораздо лучшие результаты, чем линейная интерполяция. При последней точки про380
9.5. Интерполяция и аппроксимация данных
ч
;
Рис. 9.17. Пример применения функции interpl сто соединяются друг с другом отрезками прямых, так что график интерполирующей кривой при линейной интерполяции получается негладким.
9.5.5. Двумерная табличная интерполяция Двумерная интерполяция существенно сложнее, чем одномерная, рассмотренная выше, хотя смысл ее тот же — найти промежуточные точки некоторой.зависимости z(x,y) вблизи расположенных в пространстве узловых точек. Для двумерной табличной интерполяции используется функция i n t e r p 2 : • ZI = i n t e r p 2 (X, Y, z, XI, Yl) —возвращает матрицу z i , содержащую значения функции в точках, заданных аргументами XI и Y I , полученные путем интерполяции двумерной зависимости, заданной матрицами х, Y и z. При этом X и Y должны быть монотонными и иметь тот же формат, как если бы они были получены с помощью функции m e s h g r i d (строки матрицы X являются идентичными; то же можно сказать о столбцах массива Y). Матрицы х и Y определяют точки, в которых задано значение Z. Параметры XI и YI могут быть матрицами, в этом случае i n t e r p 2 возвращает значения z, соответствующие точкам (XI ( i , j ) , YI ( i , j ) ) . В качестве альтернативы можно передать в качестве параметров вектор-строку x i и вектор-столбец y i . В этом случае i n t e r p 2 представляет эти векторы так, как если бы использовалась команда m e s h g r i d ( x i , yi) ; • ZI = i n t e r p 2 (Z,XI, YI) — подразумевает, что X = l : n H Y = l:m, где [m, n ] = s i z e (Z); • ZI = i n t e r p 2 (Z, n t i m e s ) — осуществляет интерполяцию рекурсивным методом с числом шагов n t i m e s ; • ZI = i n t e r p 2 (X, Y, Z, XI, YI, method) — позволяет с помощью опции method задать метод интерполяции: О О О О
' n e a r e s t ' —интерполяция по соседним точкам; ' l i n e a r ' — линейная интерполяция; ' c u b i c ' — кубическая интерполяция (полиномами Эрмита); ' s p l i n e ' — интерполяция сплайнами.
Все методы интерполяции требуют, чтобы х и Y изменялись монотонно и имели такой же формат, как если бы они были получены с помощью функции meshgrid.
381
Глава 9. Математическая
обработка и сохранение
данных
Когда х и Y — векторы равномерно распределенных точек, для более быстрой интерполяции лучше использовать методы ' * l i n e a r ' , ' * c u b i c ' или ' * n e a r e s t ' . Пример: >> [X,Y]=meshgrid(-3:0.25:3);Z=peaks(X/2,Y*2); >> [Xl,Yl]=meshgrid(-3:0.1:3);Zl=interp2(X,Y,Z,XI,Yl); >> m e s h ( X , Y , Z ) , h o l d o n , m e s h ( X I , Y l , Z l + 1 5 ) , h o l d off Рисунок 9.28 иллюстрирует применение функции i n t e r p 2 для двумерной интерполяции (на примере функции peaks).
20. to о •10,
Рис. 9.18. Применение функции interp2 В данном случае поверхность снизу — двумерная линейная интерполяция, которая реализуется по умолчанию, когда не указан параметр method. 9.5.6. Трехмерная табличная интерполяция Для трехмерной табличной интерполяции используется функция i n t e r p 3 : • VI = i n t e r p 3 (X, Y, z, v , x i , Yl, Zl) — интерполирует, чтобы найти VI, значение основной трехмерной функции v в точках матриц XI, YI и ZI. Матрицы х, Y и Z определяют точки, в которых задано значение v. x i , Y I и ZI могут быть матрицами, в этом случае i n t e r p 3 возвращает значения z, соответствующие точкам (xi U , j ) , Y l ( i , j ) , z l ( i , j ) ) . В качестве альтернативы можно передать векторы x i , y i и z i . Векторы-аргументы, имеющие неодинаковый размер, представляются, как если бы использовалась команда m e s h g r i d ; • v i = i n t e r p 3 (V,XI, YI, ZI) — подразумевает X = 1:N, Y = 1:M, Z = 1: p, где [M,N,P] = size(V); • VI = i n t e r p 3 (v, ntimes) — осуществляет интерполяцию рекурсивным методом с числом шагов ntimes; • v i = i n t e r p 3 (...,method) — позволяет задать метод интерполяции: 0 0 0 0
' n e a r e s t ' —ступенчатая интерполяция; ' l i n e a r ' — линейная интерполяция; ' c u b i c ' — кубическая интерполяция (полиномами Эрмита); ' s p l i n e ' — интерполяция сплайнами.
Все методы интерполяции требуют, чтобы х, Y и z изменялись монотонно и имели такой же формат, как если бы они были получены с. помощью функции 382
9.5. Интерполяция и аппроксимация данных
meshgrid. Когда X, Y и Z — векторы равномерно распределенных в пространстве узловых точек, для более быстрой интерполяции лучше использовать методы 1
'•linear , '*cubic' ИЛИ ' * n e a r e s t ' .
9.5.7. N-мерная табличная интерполяция MATLAB позволяет выполнить даже и-мерную табличную интерполяцию. Для этого используется функция interpn: • VI = interpn (XI, Х2,ХЗ, ...,V, Y1,Y2, Y3,...) — интерполирует, чтобы найти VI, значение основной многомерной функции v в точках массивов Y1, Y2, Y3, .... Функции interpn должно передаваться 2N + 1 аргументов, где N — размерность интерполируемой функции. Массивы xi, X2, хз, ... определяют точки, в которых задано значение V. Параметры Yl, Y2, Y3, ... могут быть матрицами, в этом случае interpn возвращает значения VI, соответствующие точкам (Yl ( i , j ) , Y2 ( i , j ), Y3 ( i , j ) , . . . ) . В качестве альтернативы можно передать векторы yl, y2, уЗ, ... В этом случае interpn интерпретирует их как если бы использовалась команда ndgrid (yl, у2, уЗ,...); • VI = i n t e r p n (V,Y1,Y2,Y3,...) — подразумевает xi = l : s i z e (V, 1), X2=l:size(V, 2), X3=l: s i z e (V, 3) и т. д.; • VI = i n t e r p n (V, ntimes) — осуществляет интерполяцию рекурсивным методом с числом шагов ntimes; • VI = i n t e r p n (..., method) — позволяет указать метод интерполяции: О ' n e a r e s t ' — ступенчатая интерполяция; О ' l i n e a r ' — линейная интерполяция; О ' c u b i c ' — кубическая интерполяция. В связи с редким применением такого вида интерполяции, наглядная трактовка которой отсутствует, примеры ее использования не приводятся.
9.5.8. Интерполяция кубическим сплайном Сплайн-интерполяция используется для представления данных отрезками полиномов невысокой степени — чаще всего третьей. При этом кубическая интерполяция обеспечивает непрерывность первой и второй производных результата интерполяции в узловых точках. Из этого вытекают следующие свойства кубической сплайн-интерполяции: • график кусочно-полиномиальной аппроксимирующей функции проходит точно через узловые точки; • в узловых точках нет разрывов и резких перегибов функции; • благодаря низкой степени полиномов погрешность между узловыми точками обычно достаточно мала; • связь между числом узловых точек и степенью полинома отсутствует; • поскольку используется множество полиномов, появляется возможность аппроксимации функций с множеством пиков и впадин. График интерполирующей функции при этом виде интерполяции можно уподобить кривой, по которой изгибается гибкая линейка, закрепленная в узловых точках. Реализуется сплайн-интерполяция следующей функцией: 383
Глава 9. Математическая обработка и сохранение данных • yi = s p l i n e (k,y,xi) — использует векторы х и у, содержащие аргументы функции и ее значения, и вектор xi, задающий новые точки; для нахождения элементов вектора y i используется кубическая сплайн-интерполяция; • рр = s p l i n e (х, у) — возвращает рр-форму сплайна, используемую в функции ppval и других сплайн-функциях. Пример: » х=0:10; y=3*cos(x); » xl=0:0.1:11; >> y l = s p l i n e ( х , у , x l ) ; » plot(х,у,'o',xl,yl,'-')
Результат интерполяции показан на рис. 9.19. Сплайн-интерполяция дает неплохие результаты для функций, не имеющих разрывов и резких перегибов. Особенно хорошие результаты получаются для i монотонных функций. Однако при не. .. • •< 4 удачном выборе узлов сплайн-интерпо/ \ Я ляция может давать большую ошиб/ \ i ' \ ку — например, выброс выгиба апо N 1• \ f ' ' проксимирующей функции может \, \ ' i ' ' • оказаться значительным. / * / ' Ввиду важности сплайн-интерполя\ .г ции и аппроксимации в обработке и 4 •3 представлении сложных данных в состав системы MATLAB входит пакет ' 4 2 6 • 1 .• 10 12 ••• расширения Spline Toolbox, содержащий около 70 дополнительных функций, относящихся к реализации Рис- 919- Пример применения функции сплайн-интерполяции и аппроксимаspline ции, а также графического представления сплайнами их результатов. Для вызова данных об этом пакете (если он установлен) используйте команду help s p l i n e s . 2
1
0
:
•
.
.
/
•
<
v
9.6. Обработка данных в графическом окне 9.6.1. Средства обработки данных в графическом окне Решение большинства задач интерполяции и аппроксимации функций и табличных данных обычно сопровождается их визуализацией. Она, как правило, заключается в построении узловых точек функции (или табличных данных) и в построении функции аппроксимации или интерполяции. Для простых видов аппроксимации, например полиномиальной, желательно нанесение на график формулы, полученной для аппроксимации. В MATLAB 6.* совмещение функций аппроксимации с графической визуализацией доведено до логического конца — предусмотрена аппроксимация рядом методов точек функции, график которой построен. И все это выполняется прямо в окне редактора графики Property Editor. Для этого в позиции Tools графического окна имеется две новые команды:
384
9.6. Обработка данных в графическом окне Basic Fitting — основные виды аппроксимации (регрессии); Data Statistics — статистические параметры данных. Команда Basic Fitting открывает окно, дающее доступ к ряду видов аппроксимации и регрессии: сплайновой, эрмитовой и полиномиальной со степенями от 1 (линейная аппроксимация) до 10. В том числе со степенью 2 (квадратичная аппроксимация) и 3 (кубическая аппроксимация). Команда Data Statistics открывает окно с результатами простейшей статистической обработки данных. 9 . 6 . 2 . Полиномиальная регрессия для табличных данных Рассмотрим самый характерный пример обработки данных, примерно представляющих некоторую (например экспериментальную зависимость) вида у(х). Пусть она задана в табличной форме, причем колонки таблицы соответствуют элементам векторов X и Y одинакового размера в следующем примере: »
Х=[2,4,6,8,10,12,14] ;
»Y=[3.76,4.4,5.1,5.56,6,6.3,6.7]; >> p l o t ( X , Y , ' о ' ) ;
Напомним, что последняя команда строит график узловых точек кружками (без соединения их отрезками прямых). Рис. 9.20 показывает пример выполнения полиномиальной регрессии (аппроксимации) для степеней полинома 1, 2 и 3 (дальнейшее повышение степени полинома в данном случае уже лишено смысла, поскольку графики полиномиальной регрессии со степенью выше 3 почти не различаются). ВНИМАНИЕ При проведении полиномиальной аппроксимации надо помнить, что максимальная степень полинома на 1 меньше числа точек, то есть числа элементов в векторах X и Y. •™- ч А ^ / &£
)• = 0.24'K + 3 5 -
j = - 0.0096V + 0 4 x • 3 ! 3 2 у = 0.00049*x • 0 02Гх + 0 4
P cubic П 4th degree polynomial f~ 5th degree polynomial
.
,.
.
...
О —
data 1 linear quadratic cubic x mm
—
x mean
<
. . ШШШ
Statistics for (data 1
_£J
, Checkto plot statistics on figure . : . . . . X »ax mean • median std raaoe
1 | .15, 14 17 6 [7 ВГ 4.32 Г 12
SavBioworkspacB,,,]
• Help
T
. |
1
' P 6.7 ! f ? ] | 5.403 j Ш ! 5.5б!Н 1.054! Г ] | 2.94! j l j
Close
j
Puc. 9.20. Пример обработки табличных данных в графическом окне 385
Глава 9. Математическая
обработка и сохранение
данных
Поясним, что же показано на рис. 9.20. В левом верхнем углу сессии MATLAB видна запись приведенных выше исходных векторов и команды построения заданных ими точек кружками. Справа показано большое окно графики с построенными в нем кружками узловыми точками. Исполнив команду Tools • Basic Fitting, можно получить окно регрессии. Оно показано на рис. 9.20 слева прямо под записью исходных команд в командной строке. В этом окне птичкой отмечены три вида полиномиальной регрессии — порядка 1 (linear — линейная), 2 (quadratic — квадратичная) и 3 (cubic — кубическая). Стоит отметить какой либо вид регрессии, как соответствующая кривая функции регрессии (аппроксимации) появится в графическом окне. Установив птичку у параметра Show equations (Показать уравнения), можно получить в графическом окне запись уравнений регрессии (аппроксимации). Наконец, можно сместить выводимую по умолчанию легенду в место, где она не закрывала бы другие детали графика — на рис. 9.20 легенда несколько сдвинута вниз мышью. Наконец, исполнив команду Tools • Data Statistics, можно получить окно с рядом статистических параметров данных, представленных векторами X и Y. Отметив птичкой тот или иной параметр в этом окне (оно показано на рис. 9.20 под окном графики), можно наблюдать соответствующие построения на графике, например, вертикалей с минимальным, средним и максимальным значением у и горизонталей с минимальным, средним и максимальным значением х. ПРИМЕЧАНИЕ Безусловно, эта новинка понравится большинству пользователей системы MATLAB 6.O. Однако нельзя не отметить, что статистические данные более чем скупы. 9 . 6 . 3 . Оценка погрешности аппроксимации Средства обработки данных из графического окна позволяют строить столбцовый или линейчатый графики погрешностей в узловых точках и наносить на эти графики норму погрешности. Норма дает статистическую оценку среднеквадратической погрешности. Чем она меньше, тем точнее аппроксимация. Для вывода графика погрешности надо установить птичку у параметра Plot residuals (График погрешностей) и в меню ниже этого параметра выбрать тип графика. На рис. 9.21 показано построение графика погрешности вместе с графиком исходных точек и функций аппроксимации в одном графическом окне. Обратите внимание на следующий момент. На рис. 9.21 приведены данные по полиномиальной аппроксимации степени 1, 2, 3 и 6. Последний случай предельный, поскольку у нас имеется 7 точек, а предельная степень полинома должна быть на 1 меньше числа точек. В этом случае регрессия вырождается в обычную (без статистической обработки) полиномиальную аппроксимацию. При ней линии графика аппроксимирующей функции точно проходят через узловые точки, а погрешность в узловых точках равна 0. Из рис. 9.21 видно, что действительно норма погрешности для степени полинома 6 практически очень мала. Рис. 9.22 демонстрирует построение графика погрешности отрезками линий. Кроме того, параметром Separate figure (Разделить фигуры) задано построение графика погрешности в отдельном окне — оно расположено под графиком узловых точек и функций аппроксимации. Таким образом, интерфейс графического окна позволяет выполнять эффективную обработку данных наиболее распространенными способами. 386
9.6. Обработка данных в графическом окне О >. • • • • »• £•:•»> !«'
See lct data: jdata 2 Г Center and scale X data Plot tils rttsynts en figu e
г г
spline i terpolant hermite nterpolant
и quadra г
С
cubic
_
4№ degее polynomial
Г
5th degее polvnomial
Р
6th dea ее polynomial
Ur ear. norm ot esiduals = 0.37002 Quadtalic ncrrr of re&id als = D 1092f Ou iic: norm of esiduals = 0 093145 61 degree, «or n of residuals= 1.0901 e-013
).15 0.1 005 Q
1 I I I
Я
POfi
1
•0.1 0.15
| 1
f 1
1 "
Show norm of residuals Help
| Cicise j
More
Puc. 9.21. Пример вывода данных обработки со столбцовым графиком погрешности и яа
•> Х-[2,4,6,8,10,12,1-1]; >> Y-[Э, 76,4.4,5.1.5.56.6 plot(X,Y,'o');
See l ct Dsa l ; [data 2
У = 0 24*х + 3 5 2 у = - 0.0096-х 0 4 3 у = 0 0С049** • 0 02
" 3
Г cenier ала stale X data Piotffis V ' - > If. •••••:! I». П'-.r Ид
•
^
spline interpolanl
-
у
-
•
-
f S ' x 5 " * 0.032*x 4 - • З Г » 3 + 1 . 6 - х 2 - 3 . 4 - х + б О data 2 •— linea quad alic cubic i ,, K t h П gree
= 3.4е-ОО5*«^,
-
j *
hermite interpolant (
17 linear
10
•
quad, P" cub
Г ГГ" 5th degree g polynomial y . 17 6thdeqreepolvnomisl , ^ J P : ign.ll г ,, и j . g и J P ptot residuals
esiduals = D 37CO2 0.15 \ L i n e a r : Quadra of residuals = 0 10928 01 CuBter orm of rssiduals» 0 093146 6lh d e > ее; nom of residuals-1.09O1 e-013 0 05 0 nm
[separ
figure y\ ..
P Shi Help i
•0.1 ^).15
Close j
Mo;e
\
'"
/ |j ear q adratic - — с jbic -—- Б h degree
Puc. 9.22. Пример обработки табличных данных с выводом графиков погрешностей в отдельном окне 9.6.4. Сплайновая интерполяция в графическом окне Теперь рассмотрим пример сплайновой интерполяции в графическом окне. Зададим 50 точек синусоидальной функции, как это показано в левом верхнем углу рис. 9.23. Как видно из рис. 9.23, при построении исходной функции по точкам невозможно судить о ее форме. Точки оказываются разбросанными по полю рисунка, и 387
Глава 9. Математическая обработка и сохранение данных
Dtf:.'
Г •
• К
? ,
X-1:SO; plot(X,sin(X),'o'):
И 4th degree polynomial
|
Г" 5th degree polynomial
i|
П 6lh degree porynom Г: 7th degree porynomi p
8th degree polynomial
Г
9th
Д{;£*:/
•
.
Рис. 9.23. Пример аппроксимации синусоиды в графическом окне создается впечатление (кстати, абсолютно ложное) об их случайном расположении. Попытка аппроксимации полиномом 8-й степени не дает положительного результата — кривая проходит внутри облака точек, совершенно не интерполируя это облако. Однако если применить сплайновую интерполяцию, то картина кардинально меняется. На этот раз кусочная линия интерполяции (рис. 9.24) прекрасно проходит через все точки и поразительно напоминает синусоиду. Даже ее пики со значениями 1 и —1 воспроизводятся удивительно точно, причем и в случаях, когда на них не попадают узловые точки.
Г
4th degree polynomial
Г: 5m degree polynomial Г
?th.
Я
3r«w eignKnntUgM
Г
nwrii,.iuli.
у. ,у . У, у. У .У , у . У1.. i i
Рис. 9.24. Пример сплайновой интерполяции в графическом окне 388
9.6. Обработка данных в графическом окне Причина столь великолепного результата кроется в уже отмеченных ранее особенностях сплайновой интерполяции — она выполняется по трем ближайшим точкам, причем эти тройки точек постепенно перемещаются от начала точечного графика функции к ее концу. Кроме того, непрерывность первой и второй производных при сплайновой интерполяции делает кривую очень плавной, что характерно и для первичной функции — синусоиды. Так что данный пример просто является удачным случаем применения сплайновой интерполяции. Однако мы не можем практически называть этот подход полноценной аппроксимацией, поскольку в данном случае нет единого выражения для аппроксимирующей функции. На каждом отрезке приближения используется кубический полином с новыми коэффициентами. Поэтому и вывода аппроксимирующей функции в поле графика не предусмотрено. 9.6.5. Эрмитовая многоинтервальная
интерполяция
MATLAB в.* дает возможность в графическом окне использовать еще один вид многоинтервальной интерполяции на основе полиномов третьей степени Эрмита. Техника интерполяции здесь та же, что и в случае сплайновой интерполяции. Это показывает рис. 9.25.
~ 3
X-l:50; ploc[X,sin[XI ,'
, П F7 Г П Г Г || Г J Г
spline mierpolanl hermite interpolate linear quadratic cubic «th degree polynomial 5th degree polynomial 6thdeqree polynomial
J
jdt
.
. ffi '
Г Т Т 1, ~ T ^ T r^s^
3.f j 1 . zl
Puc. 9.25. Пример эрмитовой интерполяции синусоиды в графическом окне Полиномы Эрмита имеют более гибкие линии, чем сплайны. Они точнее следуют за отдельными изгибами исходной зависимости. Это хорошо видно из рис. 9.25. Однако при этом в узловых точках могут наблюдаться изломы, хотя и менее выраженные, чем при кусочно-линейной интерполяции. 9.6.6. Сравнение сплайновой и эрмитовой одномерной интерполяции Рис. 9.26 дает сравнение двух описанных выше видов интерполяции. Оба вида интерполяции в данном случае дают превосходные результаты, поскольку представляемая ими кусочная функция практически почти точно прохо389
Глава 9. Математическая обработка и сохранение данных
О
dtnsleprpol a lyftaisnt on fg i.£ure ' inei I?spl te mterpoiant ;|| wherrni inear rг lquadr atic г cubic
— г 4th degree polynomial *.' г 5th dsgree polynomial г
Г" Snow equations •'
...ИГ01
к Л f\ h !\ ^ 0.5 a1 i 1 П ! It [ i 1! п 0 i 0.5 1 i 4 ч \i УУ. у .У . t
I
Sisnificant cjigita' [2 Г" Piotresiduais •
data 1 spline
• ••• '
.zl .
I
•
Г snow norm of residuals
Рис. 9.26. Сравнение сплайновой и эрмитовой интерполяции синусоиды дит через все заданные точки. Однако, если учесть, что эти точки принадлежат синусоиде, то в данном случае результаты сплайновой интерполяции оказываются явно лучшими. Особенно это характерно для экстремальных точек. Поскольку в этих двух методах интерполяции кривая интерполяции проходит точно через узловые точки, в этих точках погрешности интерполяции равны нулю. Вы можете проверить это, задав вывод графика погрешности. В целом можно заключить, что сплайновая интерполяция лучше, когда нужно эффективное сглаживание быстро меняющихся от точки к точке данных и когда исходная зависимость описывается линиями, которые мы наблюдаем при построении их с помощью гибкой линейки. Эрмитова интерполяция лучше отслеживает быстрые изменения исходных данных, но имеет худшие сглаживающие свойства. Все это говорит о том, что надо внимательно подходить к оценке приемлемости того или иного вида интерполяции (или аппроксимации) для конкретных типов исходных данных.
9.7. Специальные виды интерполяции 9 . 7 . 1 . Сравнение видов двумерной интерполяции поверхности Двумерная интерполяция чаще всего выполняется для поверхностей. Возьмем, к примеру, поверхность, которую задает встроенная в MATLAB функция peaks (пики). Для ее построения исполним (в командной строке или в m-файле) следующие команды: [х,у] = meshgrid(-3:1:3); z = peaks(x,у); surf(х,у,z) Построенная поверхность представлена на рис. 9.27. 390
9.7. Специальные виды
интерполяции
Рис. 9.28. Построение поверхности peaks при ступенчатой интерполяции — опция 'nearest'
Рис. 9.27. Грубое построение поверхности, peaks
Очевидно, что вид поверхности получился слишком грубым, поскольку выбрано мало линий для ее представления. Увеличим число линий, задав меньший шаг [xi,yi]
= meshgrid(-3:0.25:3) ;
и проведем построение поверхности с опцией 'nearest', задающей ступенчатую интерполяцию: zil = interp2(х,у, z,xi,yi, 'nearest'); surf(xi, yi, zil) Построенная для этого случая поверхность представлена на рис. 9.28. Поверхность теперь выглядит более представительно, но состоит как бы из прямоугольных кирпичиков. Теперь построим ту же поверхность, используя билинейную интерполяцию: zi2
= interp2(x,y,z,xi,yi,'
bilinear
');
surf (xi,yi,zi2)
Эта поверхность представлена на рис. 9.29. Представляется, что для данного вида поверхности (пики) она выглядит более привлекательно, отображая острые пики. Однако тут явный перебор — пики выглядят неестественно остро. Можно предположить, что заметно лучшие результаты даст сплайновая интерполяция с применением кубических сплайнов. Для ее реализации надо выполнить следующие команды: zi3 = interp2(х,у,z,xi surf(xi,yi,zi3)
bicubic ')
Построенная для этого случая поверхность представлена на рис. 9.30. Теперь уже несмотря на небольшое число линий сетки поверхности она выглядит вполне реалистически, что свидетельствует о высокой эффективности сплайновой двумерной интерполяции. Единственно, что сдерживает ее монопольное применение, — относительно большое время выполнения. И если на современных ПК с процессорами Pentium III или 4 это время мало при небольшом числе линий сетки, то в более сложных случаях, когда число линий сетки достигает десятков и сотен, это время может оказаться весьма значительным. 391
Глава 9. Математическая обработка и сохранение данных
Рис. 9.29. Построение поверхности peaks при билинейной интерполяции — опция ' bilinear'
Рис. 9.30. Построение поверхности peaks при кубической сплайновой интерполяции — опция 'bicubic'
9.7.2. Сравнение видов интерполяции при контурных графиках Часто поверхности представляют контурными графиками в виде линий равного уровня. Для таких графиков также полезно применение интерполяции. Представленный ниже фрагмент программы (или просто набор команд) строит контурные графики для трех уже рассмотренных выше видов двумерной интерполяции: subplot (1,3,1), subplot (1,3,2), subplot (1,3,3),
contour contour contour
(xi,yi,zil), (xi,yi,zi2), (xi,yi,zi3),
title title title
('nearest') ('bilinear') (' b i c u b i c ')
Эти графики (рис. 9.31) строятся в одном окне с титульными надписями, указывающими на вид интерполяции. nearest" [""'"•'
2 1 0 -1 -2 -3
тi •
—
ПI
Ш:
з
bilnear ' '
bc i ubc i
2
.1 С
-1 • -2
-3
Рис. 9.31. Построение поверхности peaks при кубической сплайновой интерполяции — опция 'bicubic' Преимущество сплайновой интерполяции в смысле качества построения здесь также вполне очевидно. 9.7.3. Пример многомерной интерполяции Хороший пример многомерной интерполяции можно найти в справке MATLAB по разделу Interpolation and Multidimensional Arrays: 392
9.7. Специальные виды интерполяции xl
= -2:0.2:2;
[Х1,Х2,ХЗ]
=
х2 = - 2 : 0 . 2 5 : 2 ;
хЗ =
-2:0.16:2;
ndgrid(xl,x2,x3);
z = Х2.*ехр(-Х1.л2
-Х2.Л2
slice(X2,XI,X3,z, [-1.2
-ХЗ.Л2);
0.8
2 ] , 2 , [-2 0 . 2 ] )
Построенный этим фрагментом программы график представлен на рис. 9.32.
Рис. 9.32. Построение графика, представленного многомерным массивом 9.7.4. ЗО-геометрический анализ и интерполяция Рассмотренные выше в этой главе средства геометрического анализа также можно отнести к специальным видам интерполяции и распространить на случай многомерных данных. Описание реализующих геометрический анализ функций уже было дано, так что мы примером на переход к ЗО-геометрическому анализу и интерполяции. Следующие команды строят точки тестовой поверхности seamount (рис. 9.33): load seamount; plot(х,у,'.','markersize',12) xlabel('Longitude'), ylabel ( 'Latitude') grid on Теперь выполним триангуляцию Делоне, представляющую проекцию поверхности на плоскости с треугольными ячейками (рис. 9.34):
•: *
•• • • -
1
. .. 1"
Ш
...
-
-«,35 .~*B.
~2iO9 :
• . •' •.•'••
HI
in~i
•
iTTj
ГП1 ; I H
Lo^gitutJe •
in 5
'."
;ТТь
г7Т7
;ц s
„
Рис. 9.33. Построение исходных точек поверхности
i^
•Я0«
2109
!»
JII.1
Рис. 9.34. Проведение триангуляции Делоне на плоскости 393
Глава 9. Математическая обработка и сохранение
данных
tri = delaunay(x,у); hold on, triplot(tri,x,у), hold off
Наконец, построим поверхность в трехмерном представлении (рис. 9.35) figure; hidden on; trimesh(tri,х,у,z); grid on xlabel('Longitude'); ylabel ( 'Latitude'); zlabel('Depth in Feet 1 ) Несмотря на ограниченное число точек поверхности ее вид вполне реалистичен. Теперь построим контурный график данной поверхности (рис. 9.36): f i g u r e ; [ x i , y i ] = m e s h g r i d ( 2 1 0 . 8 : . 01 : 2 1 1 . 8 , - 4 8 . 5 : . 0 1 : - 4 7 . 9 ) ;• zi = g r i d d a t a ( x , y , z , x i , y i , ' c u b i c ' ) ; [c,h] = contour(xi,yi,zi,'b-'); clabel(c,h); xlabel('Longitude'), ylabel('Latitude')
Е-ЭОГС -«Юр.,
Рис. 9.35. Поверхность, построенная с применением треугольных ячеек
Рис. 9.36. Поверхность seamount, представленная контурным графиков
Как нетрудно заметить, контурный график поверхности также достаточно представителен. Разумеется, чем больше треугольных ячеек используется в ходе триангуляции Делоне, тем лучше выглядят представления поверхностей (но они дольше строятся). 9.7.5. Другие представления сложных фигур Все представления фигур на основе геометрического анализа могут использоваться для построения ЗО-фигур. Мы ограничимся двумя примерами. В первом примере для построения куба используется функция convhulln задания выпуклой оболочки: d = [-1 1 ] ; [ x , y , z ] = m e s h g r i d ( d , d , d ) ; X = [x ( :) ,у(:) ,z ( : ) ] ; С = convhulln (X) ; figure, hold on; d = [ 1 2 3 1] for i = 1: size(C,l) j= C(i,d) ; h(i)=patch(X(j,l),X(j,2),X(j,3),i,'FaceAlpha',0.9); end hold off; view(3), axis equal, axis off; camorbit (90,-5); title('Convex hull of a cube')
394
9.8. Обработка символьных данных Построенная этой программой фигура представлена на рис. 9.37. В другом примере строится сфера на основе мозаики Делоне с эффектами ее освещения: п = 5000; X = 2 * r a n d ( n , 3 ) - 1 ; v = sum(X.' 1,2) ; d e l t a = 0.1; d = - 1 : d e l t a : 1 ; [x0,y0,z0] = meshgrid(d,d,d); XO = [xO( ' , У О ( : ) , z 0 ( : vO = griddatan(X,v,XO); vO = reshape (vO, s i z e ( x O ) ) ; p = patch(isosurface(xO,yO,zO,vO,0.6)); isonormals(xO,yO,z0,v0,p); set (p, 'FaceColor', ' r e d ' , 'EdgeColor', 'none') ; view(3); camlight; l i g h t i n g phong; axis equal t i t l e ( ' I n t e r p o l a t e d sphere from s c a t t e r e d d a t a ' ) Построенная картина выглядит довольно реалистично (рис. 9.38) и хорошо отражает игру света на поверхности сферы (особенно при представлении в цвете). Interpolated sphere from scattered data
0.5
Рис. 9.37. Фигура куба, построенная с помощью функции convhulln
Рис. 9.38. Сфера, освещаемая источником света с бликами света на поверхности
Следует отметить, что построения, подобные представленному на рис. 9.38, выполняются довольно медленно и при ограниченных аппаратных ресурсах ПК могут даже вызвать его зависание. Не случайно подобные построения в настоящее время возлагаются на математические и графические сопроцессоры, которые имеют намного более высокие скорости работы, чем даже система MATLAB.
9.8. Обработка символьных данных Функции обработки массивов символов или рядов этих массивов (строкой в терминологии MATLAB называется любой массив символов или ряд массива символов) для математической системы могут показаться второстепенными. Однако это не так. Строковое представление данных лежит в основе символьной математики. 395
Глава 9. Математическая обработка и сохранение данных арифметики произвольной точности и многочисленных программных конструкций, не говоря уже о том, что оно широко применяется в базах данных и массивах ячеек. Этот урок посвящен возможностям обработки символьных переменных и выражений в системе MATLAB.
9.8.1. Основные функции символьных данных В основе представления символов в строках лежит их кодирование с помощью сменных таблиц кодов. Такие таблицы ставят в однозначное соответствие каждому символу некоторый код со значением от 0 до 255. Вектор, содержащий строку символов, в системе MATLAB задается следующим образом: • S = 'Any C h a r a c t e r s ' — вектор, компонентами которого являются числовые коды, соответствующие символам2. Первые 127 чисел — это коды ASCII, представляющие буквы латинского языка, цифры и спецзнаки. Они образуют основную таблицу кодов. Вторая таблица (коды от 128 до 255) является дополнительной и может использоваться для представления символов других языков, например русского. Длина вектора s соответствует числу символов в строке, включая пробелы. Апостроф ' внутри строки символов должен вводиться как два апострофа ". ВНИМАНИЕ Правильная работа строковых функций с дополнительной кодовой таблицей ASCII возможна, но не гарантируется для систем, не прошедших адаптацию под тот или иной язык. В частности, проблемы работы с символами кириллицы (например перевод строки при наборе малой буквы «с» в командной строке) уже обсуждались. Поэтому примеры в этой главе даны для строк с символами основной кодовой таблицы. К основным строковым функциям относятся следующие: • char (X) — преобразует массив х положительных целых чисел (числовых кодов от 0 до 65535) в массив символов системы MATLAB (причем только первые 127 кодов — английский набор ASCII, со 128 до 255 — расширенный набор ASCII) и возвращает его, на платформе Windows при значении выше 65535 выдает предупреждение об ошибке, но возвращает русскую букву «я» (я повторяется также как char(255+256n), где п — целые неотрицательные числа)3; » X=reshape ( 3 2 : 1 2 7 , 3 2 , 3 ) ; >> S = c h a r ( X ' ) S ~ !"#$%&' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < + > ? SABCDEFGHIJKLMNOPQRSTUVWXYZ[\ ] Л_ ' a b c d e f g h i j k l m n o p q r s t u v w x y z { | } -• > tl='computer' » t2='for'; » t3='home'; >> t 4 = ' u s e r s ' ; » S = char ( t l f t 2 , t 3 , t 4 ) S= 2 3
396
Символ ' внутри такой строки дублируется (заменяется на " ) . Результат char(x) при х > 65535 зависит от платформы, русификации и т. д.
9.8. Обработка символьных данных computer for home users • char (С) — преобразует каждый элемент строкового массива ячеек в ряды массива символов, если строки массива ячеек разного размера, к ним в конце добавляются пробелы (осуществляется набивка (padding) в терминах MATLAB) так, чтобы в каждом ряде массива символов было одинаковое число символов; • char (Tl, T2, ТЗ), где Т — строки, возвращает массив символов, при этом копии строк Tl, T2, ТЗ преобразуются в ряды массива символов добавлением, при необходимости, пробелов в конце рядов массивов символов, как описано выше; • char (java. lang. s t r i n g ) — преобразует объект класса j a v a . lang. s t r i n g В массив символов MATLAB; • char (javaarray of java . lang. s t r i n g ) - единственный случай, когда выходным аргументом функции является не массив символов, а строковый массив ячеек, в который преобразуется массив строк Java; • double (S) — преобразует символы строки S в числовые коды 0—65535 и возвращает вектор с этими числовыми кодами; • ischar"(S) — возвращает логическую единицу, если s является символьной переменной, и логический ноль в противном случае; • d e b l a n k ( s t r ) — возвращает строку, полученную из аргумента, — строки s t r с удаленными из ее конца пробелами; • deblank(c) — применяет функцию deblank к каждому элементу строкового массива ячеек с. Примеры: >> S = 'computer' S= computer >> X = double(S) X= 99 111 109 112 117 116 101 114 >> i s c h a r ( S ) ans = 1 >> с { 1 , 1 } = ' М у ' ; » с{1,2}='home'; >> c { l , 3 } = ' c o m p u t e r ' ; >> с с = 'My''home''computer' >> с = d e b l a n k ( с ) с = 'My''home''computer' Функция i s s t r из прежних версий MATLAB возвращает то же значение, но применять ее более не рекомендуется. 397
Глава 9. Математическая обработка и сохранение данных 9.8.2. Операции над строками К операциям над строками обычно относят поиск вхождений одних строк в другие, замену регистров символов, объединение строк и т. д. Следующие функции осуществляют операции над строками: • f i n d s t r ( s t r l , s t r 2 ) — обеспечивает поиск начальных индексов более короткой строки внутри более длинной и возвращает вектор этих индексов. Индексы указывают положение первого символа более короткой строки в более длинной строке. Пример: >> s t r l ='Example of t h e function i s t h e f i n d s t r >> s t r 2 = ' t h e ' ; >> k = f i n d s t r ( s t r l , s t r 2 ) k~ 12 28
function';
• lower ( ' s t r ' ) — возвращает строку символов s t r , в которой символы верхнего регистра переводятся в нижний регистр, а все остальные символы, остаются без изменений. Пример: >> str='Example Of The F u n c t i o n ' ; » t = lower(str) r
=
example of the function • upper (' s t r ' ) — возвращает строку символов s t r , в которой все символы нижнего регистра переводятся в верхний регистр, а все остальные символы остаются без изменений. Пример: >> s t r = ' d a n g e r ! ' ; >> t = u p p e r ( s t r ) DANGER!
• s-trcat ( s i , s2, s3,...) — выполняет горизонтальное объединение соответствующих рядов массивов символов s i , s2, s3 и т. д., причем пробелы в конце каждого ряда отбрасываются, и возвращает объединенную строку (ряд) результирующего массива символов, пробелы добавляются заново после анализа строк в полученном массиве. Все входные массивы должны иметь одинаковое число строк (в частном случае должны быть представлены в виде одной строки символов), но если один из входных аргументов — не массив символов, а строковый массив ячеек, то любой из других входных аргументов может быть скаляром или любым массивом той же размерности и того же размера. Если входной массив состоит только из символов, то выходной массив также будет являться массивом символов. Если любой из входных массивов является строковым массивом ячеек, то функция s t r c a t возвращает строковый массив ячеек, сформированный из объединенных соответствующих элементов массивов s i , s2, s3, при этом любой из элементов может быть скаляром и т. д. Примеры: >>
si{1,1}='Home';
>>
si{1,2}='book';
»
si
si
398
=
9.8. Обработка символьных
данных
'Home''book' » s2{1,1) = 'home' ; >> s2{1,2}='reading'; >> s2 s2 = 'home''reading' >> t = strcat (si,s2) t = 'Homehome''bookreading' >> sl=['wri'] si = wri >> s2=['ter'] s2 = ter >> t = strcat(si,s2) writer • s t r v c a t ( t l , t 2 , t3,...) — выполняет вертикальное объединение строк t l , t2, t 3 , ... в массив символов s аналогично char ( t l , t 2 , t3,...). Пример: >> t l = [ ' s t r i n g ' ] ; >> t2=['concatenation']; >> S = strvcat(tl,t2) S = string concatenation • strcmp ( ' s t r l ' , ' s t r 2 ' ) — возвращает логическую единицу, если две сравниваемые строки s t r l и s t r 2 идентичны, и логический ноль в противном случае; • TF = strcmp (S,T) —возвращает строковый массив ячеек TF, содержащий единицы для идентичных элементов массивов s и т и нули для всех остальных, причем если один из массивов — не массив символов, а строковый массив ячеек, то перед сравнением из сравниваемых копий рядов массива символов удаляются пробелы в конце строк. Массивы S и Т должны иметь одинаковый размер, или один из них может быть скалярной ячейкой; Примеры: >> str1='computer'; >> str2='computer'; >> k = strcmp(strl,str2) k = 1 >> S{1,1}='first'; >> S{1,2}='second'; » S 3 — 'first''second' » T{1,1} ='third' ; >> TF = strcmp(S,T)
399
Глава 9. Математическая обработка и сохранение данных TF = О О >> Т { 1 , 1 } = ' s e c o n d ' ; >> TF = s t r c m p ( S , T ) TF = О 1 • strncmp (' s t r l ' , ' s t r 2 ' , n) — возвращает логическую единицу, если две сравниваемые строки s t r l и s t r 2 содержат п первых идентичных символов, и логический ноль в противном случае. Аргументы s t r l и s t r 2 могут быть также строковыми массивами ячеек. • TF = strncmp (s, т, п) —возвращает строковый массив ячеек TF, содержащий единицы для идентичных (до п символов) элементов массивов s и т и нули для всех остальных. Примеры: >> s t r l = ' c o m p u t e r ' strl = computer >> strl='computer for me'strl = computer for me >> k = strncmp(strl,str2,3) k= 1 >> k = s t r n c m p ( s t r l , s t r 2 , 1 2 ) k= 0 • s t r j u s t (S) — возвращает выровненный вправо массив символов (т. е. перемещает пробелы в конце рядов массива символов, если они есть, в начало тех же рядов)5; • strmatch (' s t r ' , STRS) — просматривает массив символов или строковый массив ячеек STRS по строкам, находит строки символов, начинающиеся с строки s t r , и возвращает соответствующие индексы строк; • strmatch (' s t r ' , STRS, ' e x a c t ' ) — возвращает только индексы строк символов массива STRS, ТОЧНО совпадающих со строкой символов s t r . Пример: >> STRS{1,1}='character'; » STRS{1,2)='array'; >> STRS{2,1}='character array'; >> STRS(2,2}='string'; >> STRS STRS = 'character''array' 'character array''string' >> i = strmatch('charac',STRS) 5
400
s t r j u s t (S, ' l e f t ' ) возвращает массив символов, где все строки выровнены влево, a s t r j u s t (S, ' c e n t e r ' ) — где все строки выровнены по центру.
9.8. Обработка символьных данных
1 2 >> i = strmatch('character', STRS, 'exact') i =
• s t r r e p ( s t r l , s t r 2 , str3) — заменяет все подстроки s t r 2 , найденные внутри строки символов s t r l , на строку s t r 3 ; • s t r r e p ( s t r l , s t r 2 , str3) — возвращает строковый массив ячеек, полученный в результате выполнения функции s t r r e p над соответствующими рядами входных массивов символов или ячеек, если один из аргументов s t r l , s t r 2 или s t r 3 — строковый массив ячеек. В этом случае любой из аргументов может быть также скалярной ячейкой; Пример: >> strl='This is a good example for me.'; >> str2='good'; » str3='best'; >> str = strrep(strl,str2,str3) str = This is a best example for me. • s t r t o k (' s t r ' , d e l i m i t e r ) — возвращает часть текстовой строки s t r , ограниченную с ее конца разделителем d e l i m i t e r . Символы-разделители в начале строки игнорируются. Вектор d e l i m i t e r содержит возможные символы -раздел ител и; • s t r t o k ( ' s t r ' ) — использует символ-разделитель по умолчанию («белое пространство»). Реальными символами-разделителями при этом являются символ табуляции (ASCII-код 9), символ возврата каретки (ASCII-код 13) и пробел (ASCII-код 32); • [token, rem] = s t r t o k (...) — возвращает остаток rem исходной строки. Примеры: >> s t r = ' T h i s i s a good example for m e . ' ; >> token = s t r t o k ( s t r ) token = This >> token = s t r t o k ( s t r , ' f ) token = This is a good example >> [token,rem] = strtok(str) token = This rem = is a good example for me.
9.8.3. Преобразование символов и строк • i n t 2 s t r (X) — округляет элементы массива X до целых чисел и возвращает массив символов, содержащих символьные представления округленных целых чисел. Аргумент X может быть скаляром, вектором или матрицей. 401
Глава 9. Математическая обработка и сохранение данных Пример: >> X=magic(3) 8 1 6 3 5 7 4 9 2 Х=Х+О.05 X= 8.0500 1.0500 6.0500 3.0500 5.0500 7.0500 4.0500 9.0500 2.0500 >> s t r = i n t 2 s t r ( X ) str = 8 1 6 3 5 7 4 9 2 • mat2str (A) — преобразует матрицу А в единую строку; если элемент матрицы не скаляр, то он заменяется на [ ], при этом учитываются 15 знаков после десятичной точки; • mat2str (A, n) — преобразует матрицу А в строку, используя точность до п цифр после десятичной точки. Функция eval ( s t r ) осуществляет обратное преобразование. Пример: >> r a n d ( ' s t a t e ' ) ; >> A=rand(4,3) А= 0.9501 0.8913 0.8214 0.2311 0.7621 0.4447 0.6068 0.4565 0.6154 0.4860 0.0185 0.7919 >> s t r = m a t 2 s t r ( A , 2 ) str = [ 0 . 9 5 0 . 8 90 . 8 2 / 0 . 2 3 0 . 7 60 . 4 4 ; 0 . 6 1 0 . 4 60 . 6 2 ; 0 . 4 9 0 . 0 1 9 " 0 . 7 9 ] • num2str(A) — выполняет преобразование массива А в строку символов s t r с точностью до четырех десятичных разрядов и экспоненциальным представлением, если требуется. Обычно используется при выводе графиков совместно с t i t l e , xlabel, ylabel или t e x t ; • num2str (A, p r e c i s i o n ) — выполняет преобразование массива А в строку символов s t r с максимальной точностью, определенной аргументом p r e c i s i o n . Аргумент p r e c i s i o n определяет число разрядов в выходной строке; • num2str (A, format) — выполняет преобразование массива чисел А, используя заданный формат format. По умолчанию принимается формат, который использует четыре разряда после десятичной точки для чисел с фиксированной или плавающей точкой. Пример: >> str = num2str (pi,7)
402
9.8. Обработка символьных
данных
srr = 3.141593 >> rand('state'); >> A=rand(3, 5) A — 0.9501 0.4860 0.4565 0.44470.9218 0.2311 0.8913 0.0185 0.61540.7382 0.6068 0.7621 0.8214 0.79190.1763 >> str = num2str(A,l) str = 0.5 0.4 1 0 0.9 0.9 0.02 0.6 0.2 0.7 0.8 0.8 0.8 0.6 0.2
• str2double (' s t r ' ) — выполняет преобразование численной строки s, которая представлена в ASCII-символах, в число с двойной точностью. При этом + и — могут быть только в начале строки. Пример: >> х = str2double('5.45+2.67i') 5.4500 + 2.6700i
Обратите особое внимание на последнюю функцию, поскольку именно она в MATLAB 6 обычно обеспечивает переход от символьного представления математических выражений к их вычисленным численным значениям; • str2num(s) — выполняет преобразование численного массива символов — матрицы или строки s, который представлен в ASCII-символах, в матрицу (массив размерности 2). Пример: >> х = str2num("5.45 + 2 . 67 ' ) 8.1200
Обратите особое внимание, что при этом можно вводить знаки + и — в любом месте строки. Предыдущая функция выдала бы NaN. Но фирма MathWorks рекомендует использовать str2num с осторожностью и, по возможности, заменять ее на scr2double. 9.8.4. Функции преобразования систем счисления Некоторые строковые функции служат для преобразования систем счисления. Ниже представлен набор этих функций. • bin2dec ( ' b i n a r y s t r ' ) — возвращает десятичное число, эквивалентное строке двоичных символов b i n a r y s t r . Пример: >> b i n 2 d e c ( ' 1 0 1 ' ) ans = 5 • dec2bin(d) — возвращает строку двоичных символов (0 и 1), эквивалентную десятичному числу d. Аргумент d должен быть неотрицательным целым числом, меньшим, чем 252; • dec2bin(d,n) — возвращает строку двоичных символов, содержащую по меньшей мере п бит. Пример:
403
Глава 9. Математическая обработка и сохранение
данных
» s t r = dec2bin (12) str = 1100 • dec2base (d,n) — возвращает строку символов, представляющих десятичное число d как число в системе счисления с основанием п; Пример: >> s t r = d e c 2 b a s e (1234,16) str = 4D2
• dec2hex(d) — возвращает шестнадцатеричную строку символов, эквивалентную числу d. Аргумент d должен быть неотрицательным целым числом, меньшим, чем 252; • s t r = dec2hex(d,n) — возвращает шестнадцатеричную строку, содержащую по меньшей мере п цифр. Пример: >> s t r = dec2hex (1234) str = 4D2
• base2dec (S, В) преобразует строку символов S, представляющих число в системе счисления по основанию В, в символьное представление десятичного числа. Пример: » d = base2dec('4D2',16) d = 1234; • hex2dec ('hex_value') — возвращает число d, представленное строкой шестнадцатеричных символов hex_value. Если аргумент hex_value является массивом символов, то каждая строка этого массива интерпретируется как шестнадцатеричное представление числа. Пример: >> d = hex2dec('4D2') d= 1234 • hex2num('hex_value') — возвращает десятичное число f с удвоенной точностью, эквивалентное шестнадцатеричному числу, находящемуся в строке символов hex_value. Пример: » f
f = hex2num('4831fb52al8') =
6.1189е+039
9.8.5. Вычисление строковых выражений Строковые выражения обычно не вычисляются, так что, к примеру, вывод строки ' 2 + 3 ' просто повторяет строку:
»
'2+3'
ans 2+3
404
9.5. Обработка символьных данных Однако с помощью функции eval('строковое выражение') строка, представляющая математическое выражение, может быть вычислена: » e v a l ('2 + 3 ' ) ans = 5 » eval('2*sin(l)') ans = 1.6829
Ниже использование eval возвращает 12 матриц, представляющих магические квадраты чисел от 1 до 12: for
n =1:12 eval(['M' end
num2str(n)
' = magic(n)'])
eval (SI, S2) — в случае ошибки в вычислении выражения si оценивает выражение s2; T=evalc (S) выполняет то же, что и функция eval (s), но то, что выводится в командное окно, записывается также и в массив Т; Еще одна функция — feval (@имя_функции, x l , x 2 , ...) 6 — имеет важное достоинство — она позволяет передавать в вычисляемую функцию список ее аргументов. При этом вычисляемая функция задается только своим именем. Это поясняют следующие примеры: » feval(@prod, [ 1 2 3]) ans = 6 » feval(@sum,[1 2 3; 4 5 6 ] , 2 ) ans = 6 15
Рекомендуется применять функцию feval при вычислении значений функций, записанных в виде строки, m-файлы, содержащие функцию feval, корректно компилируются компилятором системы MATLAB. Для выполнения вычислений, представленных строкой expression в заданной рабочей области, ws служит функций e v a l i n (ws, expression). Переменная ws может иметь два значения: 'base' — для основной рабочей области и 'caller' — для рабочей области вызванной функции. В приведенном ниже примере в рабочей области записаны переменные а и b и вычисляется символьное значение 'а + Ь' » а=2;Ь=3; >> e v a l i n ( ' b a s e ' , 'a+b') ans = 5
Функция может также записываться в виде [al, а2, аЗ,...] = evalin (ws, expression) где al, а2, аЗ, ... — переменные, возвращающие результаты вычислений. А функция 6
Существовавшая в прежних версиях MATLAB форма f e v a l (х имя функции' , x l , х2,...) по-прежнему работает, но применять ее не рекомендуется. 405
Глава 9. Математическая обработка и сохранение данных evalin(ws,expression, catch expr) позволяет проверить правильность выражения expression в рабочей области и сформировать сообщение, заданное в строке catch_expr. Например (в продолжение последнего примера): >> h = ' E r r o r in e x p r e s s i o n ' ; >> e v a l i n ( ' b a s e ' , ' a + b ' , ' h ' ) ; ans = 5 » evalin('base' , 'a+c', ' h ' ) ; h= Error in expression Здесь выражение а + с ошибочно (переменная с не определена), поэтому выдана переменная h с ее значением в виде строки.
9.9. Работа с файлами При обработке данных возникает необходимость хранения как исходных данных, так и результатов вычислений. Для этого обычно используются файлы. Файлы — это довольно распространенные объекты системы MATLAB. Последнее, в частности, относится к файлам данных. О некоторых типах файлов уже говорилось в предшествующих главах. Ниже рассматриваются свойства файлов, которые не зависят от их типа и относятся к любым файлам.
9.9.1. Открытие и закрытие файлов Файл обычно является некоторой совокупностью данных, объединенных одним именем. Тип файла, как правило, определяется его расширением. Мы рассматриваем файл как некое целое, хотя физически на диске он может быть представлен несколькими областями — говорят, что в этом случае файл фрагментирован. Перед использованием любого файла он должен быть открыт, а по окончании использования — закрыт. Много файлов может быть открыто и доступно для чтения одновременно. Рассмотрим команды открытия и закрытия файлов. Команда open имя, где имя должно содержать массив символов или символьную переменную, открывает файлы в зависимости от анализа параметра имя и расширения в имени имя: переменная — открывает массив, названный по имени, в редакторе массивов (Array Editor); .mat — открывает файл, сохраняет переменные в структуре в рабочей области; .fig — открывает его в редакторе дескрипторонй графики Property Editor; .m — открывает m-файл в редакторе-отладчике; .mdl — открывает модель в Simulink; .р — открывает, если он есть, m-файл с тем же именем; .html — открывает HTML-документ в браузере помощи. Если файлы с расширением существуют в пути MATLAB, то открывается тот файл, который возвращается командой which имя, если нет — то файл из файловой системы. Если файл не имеет расширение имени, то он открывается той программой, формат файлов которой был бы обнаружен функцией which ('имя фай406
9.9. Работа с файлами л а ' ) . По умолчанию для всех файлов с окончаниями, отличными от вышеперечисленных, вызывается openother. Open вызывает функции орепххх, где ххх — расширение файла. Исключение — переменные рабочей области, для которых вызывается openvar, и рисунки, для работы с которыми вызывается openim. Создавая m-файлы с именем орепххх, пользователи могут изменять обработку файлов и добавлять новые расширения в список. Закрывать файлы, открытые при помощи open, нужно из редакторов, вызываемых орепххх. • [FILENAME, PATHNAME] = uigetfile(FILTERSPEC, T i t l e ) . Открывает диалог с именем T i t l e и фильтром FILTERSPEC (например, массивом ячеек, содержащим расширения файлов) и возвращает файл, выбранный пользователем, и путь к нему. Возвращает FILENAME = 0, если файл не существует или если пользователь нажал на Cancel, [FILENAME, PATHNAME] = u i g e t f i l e (FILTERSPEC, T i t l e , X, Y) размещает окно диалога в точке X, Y (координаты в пикселях). Пример: [filename, pathname] = u i g e t f i l e ( ' * . m ; * . f i g ; * . m a t ; * . m d l ' , ' A l l MATLAB F i l e s ( * . m , * . f i g , * . m a t , * . m d l ) ' ; ... •
[FILENAME,
PATHNAME]
= uiputfile(FILTERSPEC,
TITLE)
сохраняет
файл в диалоге, управляемом пользователем. Параметры аналогичны таковым в функции u i g e t f i l e . Команда uiopen открывает диалог и, если пользователь выбрал файл с известным расширением, вызывает его, используя open, или, если имя файла имеет неизвестное расширение, то вызывается u i g e t f i l e . Входными аргументами uiopen могут быть matlab, load, figure, simulink, e d i t o r . Без входных аргументов или с входным аргументом matlab в окне диалога предлагается выбрать *.m, *.fig, *.mat, *.mdl (если Simulink установлен),*. cdr(eonH Stateflow установлен), *.rtw, *.tmf, *.tlc, *.c, *.h, *.ads, *.adb (если установлен Real-Time Workshop). С аргументом load — *.mat. С аргументом figure предлагаются *.fig; simulink — *.mdl, edit o r — *.m, *.mdl, *.cdr, *.rtw, *.tmf, *.tlc, *.c, *.h, *.ads, *.adb. Пример: uiopen figure. Команда u i l o a d открывает файл в диалоге, управляемом пользователем, с использованием команды load. Функция uiimport запускает Мастер импорта (Import Wizard), импортирующий из файла в текущей папке или буфера обмена Windows. Она соответствует выбору Import Data из меню File или выбору Paste Special из меню Edit MATLAB. • uiimport (FILENAME) запускает Мастер импорта, открывая файл FILENAME. Мастер импорта показывает данные для предварительного просмотра. В окне предварительного просмотра появляются данные и их представление в виде переменных MATLAB. Собственно данные, текст и заголовки представляются разными переменными MATLAB. Для данных ASCII вы должны удостовериться, что Мастер импорта распознал разделители столбцов. Самостоятельно он может распознать только символ табуляции, пробел, запятую или точку с запятой. Нужно щелкнуть мышью на кнопке Next и в следующем окне либо подтвердить выбор разделителя, сделанный Мастером, либо выбрать Other и ввести любой разделитель; • uiimport ( ' - f i l e ' ) вначале выводит диалог выбора файла; • uiimport ( ' - p a s t e s p e c i a l ' ) вначале выводит для предварительного просмотра содержимое буфера обмена Windows; • s = uiimport (...) хранит результирующие переменные как поля структуры S. 407
Глава 9. Математическая
обработка и сохранение
данных
Команда uisave - управляемое пользователем сохранение (команда save описана в уроке 2) с Windows-диалогом. Функция saveas сохраняет рисунок или модель Simulink в желаемом формате на носителе информации или на устройстве, разрешенном p r i n t . Функция saveas (Н, 'FILENAME' ) сохраняет данные в соответствии с командой дескрипторной графики Н в файле FILENAME. Формат файла определяется расширением имени FILENAME. Функция saveas (H, 'FILENAME','FORMAT') — выполняет то же, но с параметром FORMAT (формат задается тем же способом, что и расширение имени файла и может от него отличаться). FORMAT имеет приоритет перед расширением имени файла. Параметры 'fig' — сохранить рисунок (график) в двоичном fig-файле; 'т' или 'mfig' — сохранить рисунок в двоичном fig-файле и создать m-файл для его загрузки; 'mmat' — сохранить рисунок в m-файле как последовательность команд создания рисунка. Может не поддерживать новейшие графические функции. Примеры: saveas(gcf, 'output', 'fig') saveas(gcf, 'output', 'bmp') Команда или функция delete удаляет файл или объект графики, d e l e t e имя файла удаляет файл текущей папки. Может быть использована *. Предпочтительно использование с записью в форме функции d e l e t e ('имя файла'), когда имя файла — строка. Команда d e l e t e (H) удаляет графический объект с дескриптором Н. Если этот объект — окно, то оно предварительно закрывается. Функция c l o s e (H) закрывает только графические окна. Для закрытия файлов необходимо использовать команду fclose. Для записи файлов на диск служит команда save, используемая в довольно очевидных формах: save save filename save filename v a r l var2 . . . save . . . option save('filename', ...) Соответственно для считывания файлов с диска служит команда load: load load filename load filename X Y Z load filename - a s c i i load filename -mat S = load(...) В этих командах имя файла указывается по правилам, принятым в операционных системах класса MS-DOS. Эти команды обычно дублируются кнопками панелей инструментов и браузером файлов.
9.9.2. Операции с двоичными файлами Двоичными или бинарными называют файлы, данные которых представляют собой машинные коды. Основные операции с такими кодами перечислены ниже. • fopen(filename, permission) — открывает файл с именем filename и параметром, определенным в permission, и возвращает идентификатор fid со значением: 0 — чтение с клавиатуры (permission установлено в ' г ' ) ; 1 — вывод на дисплей (permission установлено в ' а ' ) ; 2 — вывод сообщения об ошибке (permission установлен в ' а ' ) ; —1 — неудача в открытии файла с выводом сообщения message о типе ошибки. Идентификатор fid часто используется в качестве аргумента другими функциями и 408
9.9. Работа с файлами программами ввода-вывода. Имя файла filename может содержать путь к файлу. Если открываемый для чтения файл не найден в текущем каталоге, то функция f open осуществляет поиск файла по пути, указанному в MATLAB. Параметр permission может принимать одно из следующих основных значений (другие см. в справочной системе): • ' г ' — открытие файла для чтения (по умолчанию); • ' г + ' — открытие файла для чтения и записи; • 'w' — удаление содержимого существующего файла или создание нового и открытие его для записи; • ' а' — создание и открытие нового файла или открытие существующего для записи с добавлением в конец файла. Добавление к этой строке ' Ь ' (подразумевается по умолчанию) предписывает системе открыть файл в двоичном режиме. Добавление же вместо Ь к этой строке ' t ' , например ' r t ' , в операционных системах, которые имеют различие между текстовыми и двоичными файлами, предписывает системе открыть файл в текстовом режиме. Например, во всех версиях MATLAB для Windows/MS-DOS и VMS нельзя открыть текстовый файл без параметра ' r t ' . При вводе файлов с использованием fopen в текстовом режиме удаляются все символы «возврат каретки» перед символом новой строки. • [fid,message] = fopen(filename,permission,format) — открывает файл, как описано выше, возвращая идентификатор файла и сообщение. Кроме того, значение параметра format позволяет точно определить числовой формат. Возможно 8 форматов, описание которых можно найти в справочной системе. В частности, строка format может иметь значения ' n a t i v e ' (формат компьютера, на котором установлена система), 'vax', 1 c r a y ' (компьютеры VAX и Cray) и т. д. Определенные вызовы функций fread или fwrite могут отменить числовой формат, заданный при вызове функции fopen. • f i d s = fopen ( ' a l l ' ) — возвращает вектор-строку, содержащую идентификаторы всех открытых файлов, не включая стандартные потоки 0, 1 и 2. Число элементов вектора равно числу открытых пользователем файлов; • [filename,permission,format] = fopen(fid) — возвращает полное имя файла, строку permission и строку format. При использовании недопустимых значений fid возвращаются пустые строки для всех выходных аргументов. Команда f c l o s e закрывает файл. Она имеет следующие варианты. • s t a t u s = f c l o s e ( f i d ) — закрывает файл, если он открыт. Возвращает статус файла s t a t u s , равный 0, если закрытие завершилось успешно, и —1 в противном случае. Аргумент f i d — это идентификатор, связанный с открытым файлом (см. функцию fopen для более подробного описания); • s t a t u s = fclose ( ' a l l 1 ) закрывает все открытые файлы. Возвращает 0 в случае успешного завершения, и —1 — в противном случае. Пример открытия и закрытия файла: >> f i d = f o p e n ( ' c : \ e x ' , ' а + ' ) fid
=
409
Глава 9. Математическая обработка и сохранение данных 4 » fclose(4) ans = О
• [A,count] = fread ( f i d , s i z e , p r e c i s i o n ) — считывает двоичные данные из заданного файла и помещает их в матрицу А. Выходной аргумент count содержит число удачно считанных элементов. Значение идентификатора fid — это целое число, возвращенное функцией fopen; s i z e — аргумент, определяющий количество считываемых данных. Если аргумент s i z e не определен, функция f read считывает данные до конца файла. Используются следующие параметры s i z e : • п — чтение п элементов в вектор-столбец; • inf — чтение элементов до конца файла и помещение их в вектор-столбец, содержащий такое же количество элементов, что и в файле; • [т, п] — считывает столько элементов, сколько нужно для заполнения матрицы т х п. Заполнение происходит по столбцам. Если элементов в файле мало, то матрица дополняется нулями. Если считывание достигает конца файла, не заполнив матрицу необходимого размера, то матрица дополняется нулями. Если происходит ошибка, чтение останавливается на последнем считанном значении. Параметр p r e c i s i o n — строка, определяющая числовую точность считывания значений, она контролирует число считанных бит для каждого значения и интерпретирует эти биты как целое число, число с плавающей запятой или как символ. • [A,count] = f read (fid, s i z e , p r e c i s i o n , skip) —включает произвольный аргумент skip, который определяет число байтов, которые необходимо пропустить после каждого считывания. Это может быть полезно при извлечении данных в несмежных областях из записей фиксированной длины. Если p r e c i s i o n имеет битовый формат, такой как ' b i t N ' или ' u b i t N ' , значение skip определяется в битах. Обширный список возможных значений параметра p r e c i s i o n можно найти в справочной системе MATLAB; • count = fwrite (fid, A,precision) —записывает элементы матрицы А в файл, представляя их с заданной точностью. Данные записываются в файл по столбцам, выходной аргумент count содержит число удачно записанных элементов. Значение идентификатора fid — это целое число, полученное при использовании функции fopen. Добавляет символы «возврат каретки» перед началом новой строки; • count = fwrite (fid,A, p r e c i s i o n , skip) — делает то же, но включает произвольный аргумент skip, который определяет число байтов, которые надо пропустить перед каждой записью. Это полезно при вставке данных в несмежные области в записях фиксированной длины. Если p r e c i s i o n 1 имеет битовый формат, такой как ' b i t N или ' u b i t N ' , значение skip определяется в битах. Примеры: >> fid = fopen('с:\prim','а+') fid = 3 >> A=magic(7)
410
9.9. Работа с файлами А = 30 38 46 и,
13 21 22
39 47 6 14 15 23 31
48 7 8 16 24 32 40
1 9 17 25 33 41 49
10 18 26 34 42 43 2
19 27 35 36 44 3 11
28 29 37 45 4 12 20
>> count = fwrite(3,A) count = 49 >> status = fclose(3) status = 0 >> fid = fopen('с:\prim' r 1 ) fid = 3 >> [B,count] = fread(3, [7, 7] 30 38 46 5 13 21 22
39 47 6 14 15 23 31 ount = 49
48 7 8 16 24 32 40
1 9 17 25 33 41 49
10 18 26 34 42 43 2
19 27 35 36 44 3 11
28 29 37 45 4 12 20
9.9.3. Операции над форматированными
файлами
Файлы, содержащие форматированные данные, называют форматированными файлами. Ниже представлены функции, которые служат для работы с такими файлами. • l i n e = f g e t l (fid) — возвращает строку из файла с идентификатором fid с удалением символа конца строки. Если функция f g e t l обнаруживает конец файла, то она возвращает значение —1 (см. функцию fopen с более подробным описанием fid); • l i n e = f g e t s ( f i d ) — возвращает строку из файла с идентификатором fid, не удаляя символ конца строки. Если функция fgets обнаруживает конец файла, то она возвращает значение —1; • l i n e = fgets (fid,nchar) — возвращает не больше чем nchar первых символов строки. После признака конца строки или конца файла никакие дополнительные символы не считываются (см. примеры к функции f scanf); • count = f p r i n t f (fid, format, A,...) — форматирует данные, содержащиеся в действительной части матрицы А, под контролем строки format и записывает их в файл с идентификатором fid. Функция f p r i n t f возвра411
Глава 9. Математическая обработка и сохранение
данных
щает число записанных байтов. Значение идентификатора fid — целое число, возвращаемое функцией fopen. Если опустить идентификатор fid в списке аргументов функции fprintf, то вывод будет осуществляться на экран, так же как при использовании стандартного вывода (fid = 1). • f p r i n t f (format, A,...) — запись осуществляется на стандартное устройство — экран (но не в файл). Строка format определяет систему счисления, выравнивание, значащие цифры, ширину поля и другие атрибуты выходного формата. Она может содержать обычные буквы алфавита наряду со спецификаторами, знаками выравнивания и т. д. Функция f p r i n t f ведет себя как аналогичная функция f p r i n t f О языка ANSI С с некоторыми исключениями и расширениями. В табл. 9.1 описаны специальные символы, встречающиеся в строке format. Таблица 9.1 Специальные символы в строках формата Символ
Описание
\п
Новая строка
\t
Горизонтальная табуляция
ht
Возврат на один символ
\b
Возврат каретки
\r \f
Новая страница
\\
Обратный слеш
\"
или
w
%%
Одиночная кавычка Процент
Для вывода числовых или символьных данных в строке формата необходимо использовать спецификаторы, перечисленные в табл. 9.2. Таблица 9.2 Спецификаторы формата вывода данных Спецификатор
412
Описание
j
%с
Одиночный символ
%d
Десятичная система обозначений (со знаком)
%е
Экспоненциальное представление чисел с использованием символа «е» в нижнем регистре, например 3 . 1 4 1 5 е + 00
%Е
Экспоненциальное представление чисел с использованием символа «Е» в верхнем jj регистре, например 3 . 1 4 1 5 Е + 00
%f
Система обозначений с фиксированной точкой
%g
Наиболее компактный вариант из %е и % f . Незначащие нули не выводятся
%G
То же самое, что и %д, но используется верхний регистр для символа «Е»
9.9. Работа с файлами Спецификатор 'i
Описание Восьмеричная система обозначений (без знака)
%о %s
Строка символов
%u
Десятичная система обозначений (без знака)
%х
Шестнадцатеричная система обозначений с использованием символов нижнего регистра («a»...«f»)
%Х
Шестнадцатеричная система обозначений с использованием верхнего регистра символов («A»...«F»)
Между знаком процента и буквой в спецификатор могут быть вставлены дополнительные символы. Их значение поясняет табл. 9.3. Таблица 9.3 Параметры спецификаторов Символ
формата
Описание
Пример
Знак «минус» (-)
Выравнивание преобразованных аргументов по левому краю
%-5.2d
Знак «плюс» (+)
Всегда печатать знак числа (+ или -)
%+5.2d
Ноль (0)
Заполнение нулями вместо пробелов
%05.2d
Цифры
Определяет минимальное число знаков, которые будут напечатаны
%6f
Цифры (после точки)
Число после точки определяет количество символов, печатаемых справа от десятичной точки
%6.2f
• A = fscanf (fid, format) —читает все данные из файла с идентификатором fid, преобразует их согласно значению параметра format и возвращает в виде матрицы А. Значение идентификатора fid — целое число, возвращаемое функцией fopen. Параметр format представляет собой строку, определяющую формат данных, которые необходимо прочитать; • [A, count] = fscanf (fid, format, size) — считывает количество данных, определенное параметром size, преобразует их в соответствии с параметром format и возвращает вместе с количеством успешно считанных элементов count. Параметр s i z e — это произвольный аргумент, определяющий количество считываемых данных. Допустимы следующие значения: On — чтение п элементов в вектор-столбец; О inf — чтение элементов до конца файла и помещение их в вектор-столбец, содержащий такое же количество элементов, что и в файле; О [m,n] — считывает столько элементов, сколько требуется для заполнения матрицы размера т х п. Заполнение происходит по столбцам. Величина п (но не т!) может принимать значение inf. Строка format состоит из обычных символов и (или) спецификаторов. Спецификаторы указывают тип считываемых данных и включают символ %, опцию ширины поля и символы формата. Возможные символы формата перечислены в табл. 9.4. 413
Глава 9. Математическая обработка и сохранение данных Таблица 9.4 Символы формата, используемые функцией fscanf Символ
Описание
%с L ;
Последовательность символов; параметр ширины поля определяет количество считываемых символов
ar%d
!
Десятичное число
%е, %f, %g
Число с плавающей точкой
%i
Целое число со знаком
%о
Восьмеричное число со знаком
%s
Последовательность непробельных символов
%u
Десятичное целое число со знаком
%x
Шестнадцатеричное целое число со знаком
[...]
Последовательность символов
Между символом % и символом формата допустимо вставлять следующие символы: • звездочка (*) означает, что соответствующее значение не нужно сохранять в выходной матрице; • строка цифр задает максимальную ширину поля; • буква обозначает размер полученного объекта: h для короткого целого числа (например %hd), 1 для длинного целого числа (например %ld) или для числа с двойной точностью с плавающей запятой (например %lg). Примеры: >> х = 0 : p i / 1 0 : p i ; y = [ x ; s i n ( x ) ] ; >> f i d = f o p e n ( ' с : \ s i n . t x t ' , ' w ' ) ; » fprintf(fid,'%5.3f 0.000 0.000000 0.314 0.309017 0.628 0.942 1.257 1.571 1.885 2.199 2.513 2.827
0.587785 0.809017 0.951057 1.000000 0.951057 0.809017 0.587785 0.309017
3.142
o.aooooo
>> » >> ans
fid = fopen('c:\sin.txt1,'r'); q = f s c a n f ( f i d , '%g', [2,10] ) ; q' =
0 0 0.3140
414
%10.6f\n',y);fclose(fid);
•
0.3090
•
•
•
•
.
9.9. Работа с файлами 0.6280 0.5878 0.9420 0.809C 1.2570 0.9511 1.5710 1.0000 1.8850 0.9511 2.1990 0.8090 2.5130 0.5878 2.8270 0.3090 >> fgetl (fid) ans = 3.142 0 .000000 >> fgets (fid) ans = -1 » fclose(fid) ans = 0
9.9.4. Позиционирование файла При считывании и записи файлов они условно представляются в виде линейно расположенных данных, наподобие записи на непрерывной магнитной ленте. Место, с которого идет считывание в данный момент (или позиция, начиная с которой идет запись), определяется специальным указателем. Файлы последовательного доступа просматриваются строго от начала до конца, а в файлах произвольного доступа указатель может быть размещен в любом месте, начиная с которого ведется запись или считывание данных файла. Таким образом, указатель обеспечивает позиционирование файлов. Имеется ряд функций позиционирования: • e o f s t a t = feof (fid) — проверяет, достигнут ли конец файла с идентификатором fid. Возвращает 1, если указатель установлен на конец файла, и 0 — в противном случае; • message = f e r r o r ( f i d ) — возвращает сведения об ошибке в виде строки message. Аргумент fid — идентификатор открытого файла (см. функцию f open с ее подробным описанием); • message = f e r r o r ( f i d , ' c l e a r ' ) — очищает индикатор ошибки для заданного файла; • [message, errnura] = ferror(...) возвращает номер ошибки errnum последней операции ввода-вывода для заданного файла. Если последняя операция ввода-вывода, выполненная для определенного значением fid файла, была успешной, значение message — это пустая строка, a e r rnum принимает значение 0. Значение errnum, отличное от нуля, говорит о том, что при последней операции ввода-вывода произошла ошибка. Параметр message содержит строку, содержащую информацию о характере возникшей ошибки. Пример: >> fid=fopen('с:\examplel','а+') fid = 3
415
Глава 9. Математическая обработка и сохранение данных »
t = fread(3,[4,5])
Empty matrix: 4-by-0 >> ferror(3) ans = Is the f i l e open for reading? . . .
• f rewind (fid) — устанавливает указатель позиции в начало файла с идентификатором fid; • s t a t u s = f seek (fid, of f s e t , origin) — устанавливает указатель в файле с идентификатором f i d в заданную позицию — на байт, указанный параметром o f f s e t относительно origin. Аргументы: • f i d — идентификатор файла, возвращенный функцией fopen; • o f f s e t — значение, которое интерпретируется следующим образом: О offset>0 — изменяет позицию указателя на o f f s e t байт в направлении к концу файла; О of f set=0 — не меняет позицию указателя; О offset<0 — изменяет позицию указателя на o f f s e t байт в направлении к началу файла; • o r i g i n — аргумент, принимающий следующие значения: О 'bof' или —1 — начало файла; О ' cof' или 0 — текущая позиция указателя в файле; О ' e o f ' или 1 — конец файла; • s t a t u s — выходной аргумент. Принимает значение 0, если операция fseek произошла успешно, и —1 в противном случае. Если произошла ошибка, используйте функцию f e r r o r для получения более подробной информации; • p o s i t i o n = f t e l l (fid) — возвращает позицию указателя для файла с идентификатором fid, полученным с помощью функции fopen. Выходной аргумент p o s i t i o n — неотрицательное целое число, определяющее позицию указателя в байтах относительно начала файла. Если запрос был неудачным, p o s i t i o n принимает значение —1. Используйте функцию f e r r o r для отображения характера ошибки. Примеры: >> fid=fopen('с:\example','а+') fid = 3 >> count = fwrite(3,magic(6)) count = 36 >> ftell (3) ans = 36 >> frewind(3);ftell(3) ans = 0 » fseek(3,12,0)/ftell(3)
416
9.9. Работа с файлами ans = 12 ' >> feof (3) ans = О >> f c l o s e (3) ans = О • s = s p r i n t f (format, A,...) — форматирует данные в матрице А в формате, заданном параметром format, и создает из них строковую переменную s; • >[s,errrmsg] = s p r i n t f (format, A,...) — аналогична ранее описанной функции, но дополнительно возвращает строку ошибки errmsg, если ошибка имела место, или пустую строку в противном случае. Строка format определяет систему счисления, выравнивание, значащие цифры, ширину поля и другие атрибуты выходного формата. Она может содержать обычные символы наряду со спецификаторами, знаками выравнивания и т. д. Функция f p r i n t f ведет себя, как и аналогичная функция f p r i n t f () языка ANSI С а некоторыми исключениями и расширениями. Примеры: >> sprintf ( '%0.5g', (1 + sqrt(7))/4) ans = 0.91144 >> sprintf ('Is1, 'привет') ans = привет Функция sscanf аналогична функции fscanf за исключением того, что она считывает данные из символьной переменной системы MATLAB, а не из файла. • А = sscanf (s, format) — считывает данные из символьной переменной s, преобразует их согласно значению format и создает на основе этих данных матрицу А. Параметр format определяет формат данных, которые нужно считать; • А = sscanf (s, format, size) — считывает количество данных, определенное параметром s i z e , и преобразует их согласно строке format. Параметр s i z e представляет собой аргумент, определяющий количество данных для чтения. Допустимы следующие значения: On — чтение п элементов в вектор-столбец; 0 inf — чтение элементов до конца символьной переменной и помещение их в вектор-столбец, содержащий такое же количество элементов, как и в строковой переменной; 0 [т, п] — считывает столько элементов, сколько требуется для заполнения матрицы размера т х п. Заполнение происходит по столбцам. Величина п (но не т!) может принимать значение inf. • [A, count, errmsg, nextindex] = sscanf (...) — считывает данные из символьной переменной s, преобразует их согласно значению format и возвращает в матрицу А. Параметр count — выходной аргумент, который возвращает число успешно считанных элементов; errmsg — выходной аргумент, который возвращает строку ошибки, если ошибка произошла, и 417
Глава 9. Математическая
обработка и сохранение
данных
пустую строку в противном случае; n e x t i n d e x — выходной аргумент, который содержит число, на единицу большее, чем количество символов BS._ Строка format состоит из обычных символов и спецификаторов. Спецификаторы указывают тип данных и включают в себя символ %, опцию ширины поля и символы формата. Пояснения можно найти в описании функции fscanf. Пример: >> s = ' 4 . 8 3 3 . 1 6 >> [ A , n , e r r , n e x t ]
22 4 5 ' ; = sscanf(s,'%f')
A =
4.8300
3.1 600 22 . 0000 45. 0000 n = 4 err = next = 16 9.9.5. Специализированные файлы Приведенные ниже функции относятся к некоторым специализированным файлам: • М = dlmread (filename, d e l i m i t e r ) — считывает данные из файла filename с ASCII-разделителем, используя разделитель d e l i m i t e r , в массив м. Используйте ' \ t ' , чтобы определить в качестве разделителя символ табуляции; • М = dlmread (filename, d e l i m i t e r , г, с) — считывает данные из файла filename с ASCII-разделителем, используя разделитель d e l i m i t e r , в массив м, начиная со смещения г (по строкам) и с (по столбцам). Параметры г и с отсчитываются начиная с нуля, так что г = 0, с = 0 соответствует первому значению в файле; • М = dlmread (filename, d e l i m i t e r , г, с, range) — импортирует индексированный или именованный диапазон данных с разделителями в формате ASCII. Для использования диапазона ячеек нужно определить параметр range в следующем виде: range = [ВерхняяСтрока, ЛевыйСтолбец, НижняяСтрока, ПравыйСтолбец] Аргументы функции dlmread следующие: d e l i m i t e r — символ, отделяющий отдельные матричные элементы в электронной таблице формата ASCII, символ запятой (,) — разделитель по умолчанию, г, с — ячейка электронной таблицы, из которой берутся матричные элементы, соответствующие элементам в верхнем левом углу таблицы, range — вектор, определяющий диапазон ячеек электронной таблицы. Команда dlmwrite преобразует матрицу MATLAB в файл с ASCII-разделителями, читаемый программами электронных таблиц: • dlmwrite (filename, A, d e l i m i t e r ) — записывает матрицу А в верхнюю левую ячейку электронной таблицы filename, используя разделитель 418
9.10. Работа с файлами изображений d e l i m i t e r для отделения элементов матрицы. Используйте ' \ t ' для создания файла с элементами, разделенными табуляцией. Все элементы со значением 0 опускаются. Например, массив [1 0 2] появится в файле в виде ' 1,, 2 ' (если разделителем является запятая); • dlmwrite (filename, A, d e l i m i t e r , r, с) — записывает матрицу А в файл filename, начиная с ячейки, определенной г и с, используя разделитель delimiter; • М = wklread (filename) — считывает электронную таблицу Lotusl23 (WK1) в матрицу м; • м = wklread (filename, г, с) —считывает данные, начиная с ячейки, определенной значениями (г,с). Параметры г и с отсчитываются от нуля, так что г = 0, с = 0 определяют первую ячейку в файле; • м = wklread (filename, г, с, range) —считывает диапазон значений, определенный параметром range, где range может быть представлен в одной из следующих форм: О вектор с четырьмя элементами, определяющий диапазон ячеек в формате [верхняя_строка, левый_столбец, нижняя строка, правый_столбец] О диапазон ячеек, определенный строкой, например ' А1. . . С5 '; О имя диапазона, определенное в виде строки, например ' S a l e s '. • wklwrite (filename,M) — записывает значения матрицы м в файл filename электронной таблицы Lotusl23 WK.1; • wklwrite (filename, м, г, с) —записывает данные, начиная с ячейки, определенной значениями (г,с). Параметры г и с отсчитываются от нуля, так что г = 0, с = 0 определяют первую ячейку в электронной таблице. Необходимо отметить, что большинство рассмотренных выше функций редко применяются пользователями. Но они довольно широко используются в системных целях и представляют большой интерес для специалистов.
9.10. Работа с файлами изображений 9 . 1 0 . 1 . Информация о графическом файле — imfinfo Функция info = imfinfo (filename, fmt) возвращает структуру info, в полях которой содержится информация об изображении в графическом файле с именем filename и форматом fmt. Заметим, что файл с именем filename должен находиться в текущей директории или директории с явно указанным (по обычным правилам) путем, в противном случае будет произведен поиск файла с именем filename и расширением fmt. В табл. 9.5 показаны возможные значения для аргумента fmt. Таблица 9.5 Поддерживаемые графические форматы и их обозначения Формат ' bmp '
Тип файла Windows Bitmap (BMP)
419
Глава 9. Математическая обработка и сохранение
Формат
данных
Тип файла
'hdf '
Hierarchical Data Format (HDF)
' j p g ' или ' j p e g '
Joint Photographic Experts Group (JPEG)
'рсх'
Windows Paintbrush (PCX)
1
Tagged Image File Format (TIFF)
t i f ' ИЛИ ' t i f f
' xwd'
X Windows Dump (XWD)
Если filename — TIFF- или HDF-файл, содержащий более одного изображения, то info представляет собой массив структур с отдельным элементом (то есть с индивидуальной структурой) для каждого изображения в файле. Например, info(3) будет в таком случае содержать информацию о третьем изображении в файле. Множество полей в info зависит от конкретного файла и его формата. Однако первые девять полей всегда одинаковы. В табл. 9.6 перечислены эти поля и описаны их значения. Таблица 9.6 ПОЛЯ Поле |
!
|
Filename
информационной структуры и их значения Значение Строка, содержащая имя файла; если файл находится не в текущей •директории, строка содержит полный путь к файлу
FileModDate
Строка, содержащая дату последнего изменения файла
FileSize
Целое число, указывающее размер файла в байтах
Format
Строка, содержащая формат файла, заданный параметром f mt; для JPEG- и TIFF-файлов возвращается значение, состоящее из трех символов
FormatVersion
Строка или число, описывающее версию формата
Width
Целое число, указывающее ширину изображения в пикселях
Height
Целое число, указывающее высоту изображения в пикселях
BitDepth
Целое число, указывающее число битов на пиксель
ColorType
Строка, описывающая тип изображения: ' t r u e c o l o r ' для RGB изображения, ' g r a y s c a l e ' д л я полутонового изображения или ' i n d e x e d ' для изображения с индексированными цветами
|
Функция info = imfinfo (filename) возвращает информацию о формате файла по его содержанию. В приведенном ниже примере показан вывод информации о файле rice.tif: imf info ( ' r i c e . t i f ) ans = Filename:
420
'E:\MATLABR12\toolbox\images\imdemos\rice.tif FileModDate: '26-Oct-1996 0 2 : 1 1 : 5 8 ' F i l e S i z e : 65966 Format: 'tif FormatVersion: []
9.10. Работа с файлами изображений Width: 256 Height: 256 BitDepth: 8 ColorType: 'grayscale' FormatSignature: [73 73 42 0] ByteOrder: ' little-endian' NewSubfileType: 0 BitsPerSample: 8 Compression: 'Uncompressed' Photometriclnterpretation: 'BlacklsZero' StripOffsets: [8x1 double] SamplesPerPixel: 1 RowsPerStrip: 32 StripByteCounts: [8x1 double] XResolution: 72 YResolution: 72 ResolutionUnit: 'Inch' Colormap: [] PlanarConfiguration: 'Chunky' TileWidth: [] TileLength: [] TileOffsets: [] TileByteCounts: [] Orientation: 1 FillOrder: 1 GrayResponseUnit: 0.0100 MaxSampleValue: 255 MinSampleValue: 0 Thresholding: 1 ImageDescription: [1x166 char] 9.10.2. Чтение изображения из файла — imread Функция • А = imread (filename, fmt) — читает из файла с именем filename полутоновое или полноцветное изображение и создает А. Если исходное изображение полутоновое, то А — двумерный массив, если исходное изображение полноцветное, то А — трехмерный массив размера m x n x 3. Другие формы этой функции: • [X,map] = imread (filename, fmt) — читает из файла с именем filename палитровое изображение в массив А с цветовой картой тар; • [. . . ] = imread (filename) — пытается определить информацию о формате файла по его содержанию. Параметры filename и fmt были подробно рассмотрены в описании функции imfinfo; • [. . . ] = imread (. . ., idx) — читает одно изображение из TIFF-файла. idx — целое число — номер изображения по порядку. Описываемая функция имеет ряд особенностей для PNG-файлов, содержащих прозрачные пикселы (хотя и не всегда). Прозрачные пикселы, если они существу421
Глава 9. Математическая
обработка и сохранение
данных
ют, идентифицируются одним или двумя компонентами: часть данных прозрачности и альфа-канал. Часть данных прозрачности определяет прозрачные пикселы напрямую, например, если часть данных прозрачности 8-битового изображения равна 0.5020, то все пикселы изображения с цветом 0.5020 будут выведены на экран как прозрачные. Заметим, что PNG-файл может содержать только один компонент — альфа-канал. Альфа-канал представляет собой массив с таким же числом пикселов, как и исходное изображение, который определяет признак прозрачности каждого пиксела (прозрачный или непрозрачный). И, наконец, последний компонент PNG-файла — это данные цвета фона, которые определяют значение цвета, который «просвечивает» из-под прозрачных пикселов. Ниже описывается поведение IPT по умолчанию при чтении PNG-изображений, содержащих или часть данных прозрачности, или альфа-канал. • [...] = imread( . . ., ' BackgroundColor ' , bg) — считывает изображение из PNG-файла, и пикселы прозрачности скомбинированы против определенного цвета. Форма параметра bg зависит от формата входного файла. Если входное изображение палитровое, то параметр bg должен быть целым числом порядка [1,Р], где Р — длина массива цветовой карты. Если входное изображение полутоновое, то параметр bg должен быть целым числом порядка [0,1]. Если входное изображение полноцветное, то параметр bg должен быть трехэлементным вектором со значениями порядка [0,1]. • [A, map, alpha] = imread (. . .) — возвращает А — шаблон для указания способа, который используется для определения информации о прозрачности. • [A,map,alpha] = imread(filename) или [А,тар,alpha] imread (filename, fmt) — считывает изображение из PNG-файла, если не применяется комбинирование, и альфа-канал сохраняется отдельно от изображения. • [. . . ] = imread (. . ., ref) — считывает одно изображение из HDF-файла. Параметр ref — целое число, определяющее справочное число, идентифицирующее изображение. • [...] = imread ( . . . , idx) — считывает одно изображение из CUR- и ICO-файлов. Праметр idx — это целое число, определяющее порядок изображения в файле. Примеры применения этой функции мы уже приводили. Таблица 9.7 содержит форматы изображений, доступных для чтения функцией imread. Таблица 9.7 Форматы файлов и их краткое описание Г
Формат
422
Варианты
BMP
1 -битовые, 4-битовые, 8-битовые и 24-битовые несжатые изображения; 4-битовые и 8-битовые изображения со сжатием RLE
HDF
8-разрядные растровые изображения, содержащие или не содержащие цветовую палитру; 24-разрядные растровые изображения
JPEG
Любые JPEG-изображения; JPEG-изображения с некоторыми обычно используемыми расширениями
9.10. Работа с файлами изображений Варианты
Формат
PCX
1 -битовые, 8-битовые и 24-битовые изображения Любые TIFF-изображения, включая 1 -битовые, 8-битовые и 24-битовые несжатые изображения; 1-битовые, 8-битовые и 24-битовые изображения с packbit-сжатием; 1 -битовые изображения со сжатием CCITT
XWD
1 -битовые и 8-битовые Zpixmaps; XYBitmaps; 1 -битовые XYPixmaps
9 . 1 0 . 3 . Запись изображения в файл — imwrite Для записи массива с изображением в файл служит функция imwrite. Она имеет следующие формы: • imwrite (A, filename, fmt) — записывает изображение в файл с именем filename в формате fmt из массива А. А может быть матрицей размера М х N для полутонового изображения, и массивом размера М х N х 3 для полноцветного изображения. Если А относится к классу uint8 или uintl6, то функция imwrite записывает фактические значения из массива в файл. Если А относится к классу double, то функция imwrite перемасштабирует значения в исходном массиве перед записью по формуле uint8(round(255*A)). При этом числа с плавающей запятой в диапазоне [0,1] преобразуются в 8-битовые целые числа в диапазоне [0,255]. • imwrite (X,map, filename, fmt) — записывает палитровое изображение в файл с именем filename в формате fmt из массива X и соответствующей цветовой карты тар. Если х ОТНОСИТСЯ К классу uintS или uifit 16, то функция imwrite записывает фактические значения из массива в файл. Если X относится к классу double, то функция imwrite смещают значения в исходном массиве перед записью по формуле uint8(X — 1). Массив тар должен быть цветовой картой MATLAB класса double, функция imwrite перемасштабирует исходные значения массива тар по формуле uint8(round(255*map)). Заметим, что большинство графических файлов не поддерживают цветовые карты с количеством ячеек больше чем 256. • imwrite ( . . . , filename) — аналогична описанным выше функциям, но формат файла определяется по расширению filename. В таблице 9.8 приведены параметры, используемые при записи графических файлов функцией imwrite. Таблица 9.8 Параметры, используемые при записи графических файлов Параметр
Значение
Значение по умолчанию ; i:
Параметры для HDF-файлов 1 | 'Compression' 'Quality'
Одно из следующих значений: ' п о п е ' , ' г 1 е ' , ' j p e g '
'rle'
Число между 0 и 100; параметр поддерживается для 75 1 C o m p r e s s i o n ' = ' j p e g ' ; чем больше число, тем выше качество файла (меньше искажений файла при сжатии) и тем больше его размер
423
Глава 9. Математическая обработка и сохранение данных Параметр 'WriteMode'
Значение Одно из следующих значений: ' o v e r w r i t e ' , 'append'
Значение по умолчанию 'overwrite'
Параметры для JPEG-файлов 'Quality'
Число между 0 и 100; чем больше число, тем выше 75 качество файла (меньше искажений при сжатии файла) и тем больше его размер. Параметры для TIFF-файлов
'Compression'
Одно из следующих значений: ' п о п е ' , 1 p a c k b i t s ' , ' c c i t t ' ; значение ' c c i t t ' допустимо только для двоичных (двухцветных) изображений
' c c i t t ' для двоичных (двухцветных) изображений; ' p a c k b i t s 1 для всех остальных
1
Любая строка; значение поля I m a g e D e s c r i p t i o n возвращается командой i m f i n f о
Пустая строка
Скалярное значение для разрешения в направлениях хиу
72
Description'
'Resolution'
J
Еще одна таблица — табл. 9.9 описывает параметры для PNG-файлов. Таблица 9.9 Параметры для PNG-файлов Параметр
Возможные значения Value
Значение Value по умолчанию
'Author'
Строка
Пустая строка Empty
'Description'
Строка
Пустая строка Empty
'Copyright'
Строка
Пустая строка Empty
'CreationTime'
Строка
Пустая строка Empty
'Software'
Строка
Пустая строка Empty
1 'Disclaimer'
Строка
Пустая строка Empty
'Warning' 1 | Source'
Строка
Пустая строка Empty
Строка
Пустая строка Empty
'Comment'
Строка
Пустая строка Empty
'InterlaceType'
'попе' или 'adam7'
'none'
'BitDepth'
Скалярное значение глубины цвета. Для полутонового изображения может принимать значения 1,2,4,8 или 16. Для полутонового изображения с альфа-каналом может принимать значения 8 или 16. Для палитрового изображения - 1,2,4 или 8. Для полноцветного изображения с или без альфа-канала - 8 или 16.
8 bits/pixel для изображения double или uint8; 16 bits/pixel для изображения типа uint16; 1 bit/pixel для изображения logical
424
|
9.10. Работа с файлами изображений
Параметр 'Transparency'
Возможные значения Value Этот параметр используется для указания прозрачности только без альфа-канала. Для палитрового изображения представляет собой Q-элементный вектор со значениями в интервале [0,1], где Q не больше размера цветовой карты и каждое значение указывает прозрачность, связанную с ячейкой цветовой карты.
Значение Value по умолчанию Пустая ячейка или пустой вектор
Для полутонового изображения - скаляр в интервале [0,1]. Значение параметра указывает опенок серого, который должен быть прозрачным. Для полноцветного изображения - трехэлементный вектор со значениями в интрвале [0,1]. Каждое значение определяет RGB-цвет, который должен быть прозрачным 'Background'
Значение определяет цвет фона, используемый для композиции прозрачного пиксела. Для палитрового изображения представляет собой целое число в интервале [1,Р], где Р - длина цветовой карты. Для полутонового изображения - скаляр в интервале [0,1]. Для полноцветного изображения - трехэлементный вектор со значениями в интервале [0,1]
Пустая ячейка или пустой вектор
'Gamma'
Меотрицательное скалярное число, указывающее файл gamma
Пустая ячейка
'Chromaticities'
Восьмиэлементный вектор [wx wy rx ry gx gy bx by], определяющий опорную белую точку и основную хроматичность
Пустой вектор
'Xresolution'
Скаляр, определяющий разрешение по горизонтали
Пустая ячейка
'Yresolution'
Скаляр, определяющий разрешение по вертикали
Пустая ячейка
'ResolutionUnit'
'unknown' или 'meter'
Пустая строка
'Alpha'
Матрица, определяющая прозрачность каждого пиксела отдельно. Количество строк и столбцов должно быть таким же, как и в массиве данных формата uint8, uint16 или double, значения находятся в диапазоне [0,1 ]
Пустая матрица
'SignificantBits'
Скалярное число или вектор, определяющий размер исходного массива данных в битах.*Значения должны находиться в пределах [1 .BitDepth]. Для палитровых изображений - это трехэлементный вектор. Для полутонового изображения - скалярное число. Для полутонового изображения с альфа-каналом двухэлементный вектор. Для полноцветного изображения - трехэлементный вектор. Для полноцветного изображения с альфа-каналом четырехэлементный вектор
Пустая ячейка или пустой вектор
425
Глава 9. Математическая
обработка и сохранение
данных
В приведенном ниже примере считывается файл kids.tif затем его массив I записывается в файл другого формата kids.jpg с сжатием в 20 раз, после чего проверяется тип нового файла : I=imread('kids.tif'); imwrite(I,'kids.jpg','Quality',20) imfinfo('kids.jpg') ans = Filename: 'kids.jpg' FileModDate: '31-Jul-2001 19:02:52' F i l e S i z e : 3251 Format: ' j p g ' FormatVersion: ' ' Width: 318 Height: 400 BitDepth: 8 ColorType: ' g r a y s c a l e ' FormatSignature: ' ' Здесь уместно отметить, что новый файл помещается в директорию WORK. Интересно отметить, что исходный цветной файл превратился в полутоновый типа grayscale.
9 . 1 1 . Работа со звуковыми данными Этот небольшой раздел посвящен довольно экзотической возможности математической системы MATLAB — работе со звуковыми данными. Стоит напомнить, что для этого компьютер должен быть оснащен звуковой картой и звуковыми колонками. Средства поддержки звука в MATLAB имеют рудиментарный характер, но все же они есть и позволяют разнообразить выполнение некоторых примеров.
9.11.1. Функции для работы со звуками Начиная с версии MATLAB 5.0 в системе несколько расширены средства для работы со звуком. До этого система имела единственную звуковую команду. • sound (Y, FS) — воспроизводит сигнал из вектора Y с частотой дискретизации FS с помощью колонок, подключенных к звуковой карте компьютера. Компоненты Y могут принимать значения в следующих пределах - 1 . 0<=у<=1. 0. Для воспроизведения стереозвука на допускающих это компьютерных платформах у должен быть матрицей размера N х 2; • sound (Y) — функционирует аналогично, принимая частоту дискретизации по умолчанию равной 8192 Гц; • sound (Y, FS, BITS) — функционирует аналогично с заданием разрядности звуковой карты: B I T S = 8 или BITS = 16.
9.11.2. Функции звука в MATLAB 6.1/6.5 В версиях MATLAB 6.1/6.5 появились дополнительные команды воспроизведения звука: 426
9.11. Работа со звуковыми данными • soundsc (Y,...) — масштабирует и воспроизводит сигнал из массива Y. По синтаксису команда аналогична sound (Y,...); • soundsc (Y,..., SLIM) — аналогична предшествующей команде, но позволяет задать параметр SLIM = [SLOW SHIGH], определяющий тот диапазон значений у, который будет соответствовать полному динамическому диапазону звука. По умолчанию SLIM = [MIN(Y) MAX(Y)]. • beep on или off — соответственно, разрешают или запрещают гудок; • s=beep — возвращает состояние on|off; • beep — при s = on издает гудок. Кроме того, введены команды для считывания и записи файлов звукового формата .WAV, стандартного для операционных систем класса Windows: wavwrite (Y,WAVEFILE) — записывает файл типа WAVE под именем WAVEFILE. Данные по каждому каналу в случае стерео записывются в разных столбцах массива. Величины должны быть в диапазоне [—1;1]; wavwrite (Y, FS, WAVEFILE) — делает то же с заданием частоты дискретизации FS (в герцах); • wavwrite (у, FS,NBITS, WAVEFILE) — делает то же с заданием числа бит на отсчет NBITS, причем N B I T S < = 1 6 ; • Y=wavread (FILE) — считывает файл типа WAVE с именем F I L E и возвращает данные в массиве у; • [Y, FS, BITS] =wavread (FILE) — считывает файл типа WAVE с именем FILE и возвращает массив данных у, частоту дискретизации FS (в герцах) и разрядность B I T S кодирования звука (в битах); • [...] =wavread(FILE,N) — возвращает только первые N отсчетов из каждого канала файла; • [...] =wavread (FILE, [Nl N2]) — возвращает только отсчеты с номерами от N1 до N2 из каждого канала; • siz=wavread ( F I L E , ' s i z e ') — возвращает объем аудиоданных в виде вектора SIZ = [samples channels] (samples — число отсчетов, channels — число каналов); • auwrite — записывает файл в соответствии со звуковым форматом фирм Sun и Next; auread воспроизводит файлы в MATLAB 6 на Sun и в MATLAB 5 на Next. 9 . 1 1 . 3 . Демонстрация возможностей работы со звуком Для комплексной демонстрации возможностей работы со звуком служит файл-команда xpsound. Рисунок 9.39 показывает результат ее выполнения. Эта команда выводит диалоговое окно, которое позволяет выбрать несколько видов звукового сигнала, создать для них массив данных звука и воспроизвести звук (если компьютер оснащен звуковой картой, совместимой с Sound Blaster). Кроме того, имеется возможность графически отобразить временную зависимость звукового сигнала, его частотный спектр и спектрограмму. На рис. 9.39 приведен пример временной зависимости звукового сигнала. На рис. 9.40 представлен частотный спектр выбранного звукового сигнала. Он отражает относительный уровень звука в зависимости от частоты. Еще один весьма наглядный способ представления массива данных звуковых сигналов — это показ их спектрограммы. Звуковой сигнал при этом делится на 427
Глава 9. Математическая обработка и сохранение данных
i
\ I I 1.
1
;
i * i & .. 1
Рис. 9.39. Окно демонстрации воспроизведения звука с показом графика временной зависимости звукового сигнала
Рис. 9.40. Окно демонстрации возмо ности воспроизведения звука с выводом графика частотного спектра звукового сигнала
множество фрагментов, а спектрограмма дает представление о распределении частот спектра в разные моменты времени. Представление о том, насколько любопытной бывает спектрограмма сложного звукового сигнала, можно получить на примере рис. 9.41. Подобные спектрограммы могут быть использованы при разработке методов распознавания звуков. Г.* t* у*« tart 1«ь *
Рис. 9.41. Окно демонстрации возмо ности звуковоспроизведения спектрограммы звукового сигнала
с показом
Демонстрационные примеры можно просмотреть с помощью команды type xpsound. Вы получите доступ к более подробной информации по работе со звуком в системе MATLAB.
428
Глава 10. Типовые средства программирования 10.1. Основные понятия программирования В этой главе мы рассмотрим еще одно замечательное свойство системы MATLAB — возможность эффективного программирования решаемых задач. Для этого система MATLAB имеет один из лучших встроенных языков программирования высокого уровня. Это язык проблемно-ориентированный на решение прежде всего математических задач. Практически все описанные выше операторы и функции системы MATLAB являются средствами его программирования. По числу математических и графических операторов и функций язык программирования MATLAB значительно превосходит универсальные языки программирования, даже такие как FORTRAH, ALGOL и PLL Но, MATLAB содержит и все необходимые типовые средства программирования, такие как условные выражения, циклы, операторы ввода/вывода и др. Им и посвящена эта глава.
10.1.1. Назначение языка программирования MATLAB Практически невозможно предусмотреть в одной, даже самой большой и мощной, математической системе возможность решения всех задач, которые могут интересовать пользователя. Программирование в системе MATLAB является эффективным средством ее расширения и адаптации к решению специфических проблем. Оно реализуется с помощью языка программирования системы. Большинство объектов этого языка, в частности, все команды, операторы и функции, одновременно являются объектами входного языка общения с системой в командном режиме работы. Так что фактически мы приступили к описанию языка программирования системы MATLAB с первых строк данной книги, описав многие средства (прежде всего операторы и функции) входного языка MATLAB. Так в чем же отличие входного языка от языка программирования? В основном — в способе фиксации создаваемых ими кодов. Сессии в командном режиме работы не сохраняются в памяти компьютера (ведение дневника не в счет). Хранятся только определения созданных в ходе их выполнения переменных и функций. А вот программы на языке программирования MATLAB сохраняются в виде текстовых m-файлов. При этом могут сохраняться как целые программы в виде файлов-сценариев, так и отдельные программные модули — функции. Кроме того, важно, что программа может менять структуру алгоритмов вычислений в зависимости от входных данных и данных, создаваемых в ходе вычислений. С позиций программиста язык программирования системы является типичным проблемно-ориентированным языком программирования высокого уровня интерпретирующего типа. Точнее говоря, это даже язык сверхвысокого уровня, содержащий сложные операторы и функции, реализация которых на обычных языках (например Бейсике, Паскале или Си) потребовала бы много усилий и времени. К таким функциям относятся матричные функции, функции быстрого преобразования Фурье (БПФ) и другие, а к операторам — операторы построения разнообразных графиков, генерации матриц определенного вида и т. д. 429
Глава 10. Типовые средства
программирования
10.1.2. Основные средства программирования Итак, программами в системе MATLAB являются m-файлы текстового формата, содержащие запись программ в виде программных кодов. Язык программирования системы MATLAB имеет следующие средства: • данные различного типа; • константы и переменные; • операторы, включая операторы математических выражений; • встроенные команды и функции; • функции пользователя; • управляющие структуры; • системные операторы и функции; • средства расширения языка. Коды программ в системе MATLAB пишутся на языке высокого уровня, достаточно понятном для пользователей умеренной квалификации в области программирования. Язык программирования MATLAB является типичным интерпретатором. Это означает, что каждая инструкция программы распознается и тут же исполняется, что облегчает обеспечение диалогового режима общения с системой. Этап компиляции всех инструкций и линковки, то есть создания полной программы, отсутствует. Высокая скорость выполнения программ обеспечена наличием заведомо откомпилированного ядра, хранящего в себе критичные к скорости выполнения инструкции, такие как базовые математические и иные функции, а также тщательной отработкой системы контроля синтаксиса программ в режиме интерпретации. Интерпретация означает, что MATLAB не создает исполняемых конечных программ в виде машинных кодов. Программы существуют лишь в виде т-файлов. Для выполнения программ необходима среда MATLAB. Однако для программ на языке MATLAB созданы компиляторы, транслирующие программы MATLAB в коды языков программирования С и C++. Это решает задачу создания исполняемых программ, первоначально разрабатываемых в среде MATLAB. Компиляторы для системы MATLAB являются вполне самостоятельными программными средствами и в данной книге не рассматриваются. Следует особо отметить, что не все инструкции MATLAB могут компилироваться, так что перед компиляцией программы нуждаются в некоторой доработке. Зато скорость выполнения откомпилированных программ порою возрастает в 10—15 раз (правда, это достигается, как правило, для простых примеров с большими циклами). Начальное представление о переменных, встроенных константах и функциях уже было дано в предшествующих главах. В этой главе эти представления будут существенно расширены с позиций пользователя-программиста.
10.1.3. Основные типы данных Обработка данных — важнейшая задача программирования. Для ее эффективного решения надо ознакомиться с основными типами данных. Структура типов данных системы MATLAB представлена на рис. \0.\. Она соответствует типовой структуре данных объектно-ориентированного программирования. Типы данных array и numeric являются виртуальными («кажущимися»), поскольку к ним нельзя отнести какие-либо переменные. Они служат для определения и комплектования некоторых типов данных. Таким образом, в MATLAB 430
10.1. Основные понятия
программирования
ARRAY [full or sparse]
logical
NUMERC I
cructurel
function handle
user classes Java classes I int8. uint8, int16, uint16, int32, Uint32, int64, uint64
single
double
Рис. 10.1. Структура типов данных определены следующие основные типов данных, представляющих собой многомерные массивы: • • • • •
s i n g l e — числовые массивы с числами одинарной точности; double — числовые массивы с числами удвоенной точности; char — строчные массивы с элементами-символами; logical — данные логического тира; sparse — наследует свойства double, разреженные матрицы с элементами-числами удвоенной точности; • c e l l — массивы ячеек; ячейки, в свою очередь, тоже могут быть массивами; • s t r u c t — массивы структур с полями, которые также могут содержать массивы; • Java classes — объекты Java-класса; • function_handle — дескрипторы функций: • i n t 6 4 , uint64 — массивы 64-разрядных чисел со знаком и без знаков; • i n t 3 2 , uint32 — массивы 32-разрядных чисел со знаком и без знаков; • i n t l 6 , u i n t l 6 — массивы 16-разрядных целых чисел со знаком и без знаков; • i n t 8 , uint8 — массивы 8-разрядных целых чисел со знаками и без знаков. Кроме того, предусмотрен еще один тип данных — UserObject, который относится к типам данных (объектом), определяемым пользователем. Типы данных double, char и sparse были рассмотрены ранее, так что в этой главе будут детально рассмотрены оставшиеся типы. Что касается чисел класса u i n t 8 , то они представляют значения от 0 до 255 и занимают в памяти 1/8 часть от размера одного числа с двойной точностью. В основном этот тип данных применяется в служебных целях. Каждому типу данных можно соотнести некоторые характерные для него операции, называемые методами. Дочерние типы данных, расположенные на приведенной диаграмме ниже родительских типов, наследуют от последних их методы, что является признаком наследования объектов. Поскольку в иерархии типов данных сверху находятся данные типа array, это значит, что все виды данных в MATLAB являются массивами. 10.1.4. Виды программирования На рынке программного обеспечения система MATLAB позиционируется как язык высокого уровня для научно-технических расчетов. Язык программирования 431
Глава 10. Типовые средства программирования системы MATLAB вобрал в себя все средства, необходимые для реализации различных видов программирования: • процедурного; • операторного; • функционального; • логического; • структурного (модульного); • объектно-ориентированного; • визуально-ориентированного. В основе процедурного, операторного и функционального типов программирования лежат процедуры, операторы и функции, используемые как основные объекты языка. Эти типы объектов присутствуют в MATLAB. Логическое программирование реализуется в MATLAB с помощью логических операторов и функций. Это позволяет реализовать основные идеи логического программирования, хотя на выдающуюся роль в этом классе языков программирования MATLAB не претендует. Зато MATLAB представляет собой яркий пример плодотворности структурного программирования. Подавляющее большинство функций и команд языка представляют собой вполне законченные модули, обмен данными между которыми происходит через их входные параметры, хотя возможен обмен данными и через глобальные переменные. Программные модули оформлены в виде текстовых m-файлов, которые хранятся на диске и подключаются к программам по мере необходимости. Важно отметить, что, в отличие от многих языков программирования, применение тех или иных модулей не требует предварительного объявления, а для создания и отладки самостоятельных модулей MATLAB имеет все необходимые средства. Подавляющее большинство команд и функций системы MATLAB поставляется в виде таких модулей. Их можно читать (как с помощью редактора MATLAB, так и любого текстового редактора), разбирать по смыслу, модифицировать и исполнять. Объектно-ориентированное программирование также широко представлено в системе MATLAB. Оно особенно актуально при программировании задач графики. Что касается визуально-ориентированного программирования, то в MATLAB оно представлено в основном в пакете моделирования заданных блоками устройств и систем Simulink. Этот пакет будет рассмотрен в конце книги. В ядре системы в данный момент визуально-ориентированное программирование не используется. 10.1.5. Двойственность операторов, команд и функций Для языка системы MATLAB различие между командами (выполняемыми при вводе с клавиатуры) и программными операторами (выполняемыми из программы) является условным. И команды, и программные операторы могут выполняться как из программы, так и в режиме прямых вычислений. Под командами далее в основном понимаются средства, управляющие периферийным оборудованием, под операторами — средства, выполняющие операции с операндами (данными). Функция преобразует одни данные в другие. Для многих функций характерен возврат значений в ответ на обращение к ним с указанием списка входных параметров — аргументов. Например, говорят, что функция sin(x) в ответ на обращение к ней возвращает значение синуса аргумента х. Поэтому функцию можно использовать в арифметических выражениях, например 2*sin(x + l). Для команд, не
432
10.1. Основные понятия программирования возвращающих значения, такое применение обычно абсурдно. В данной книге все функции, возвращающие единственное значение (или один массив), записываются малыми (строчными) буквами в виде f_name(Список_параметров) Тем самым мы исключаем искусственное выделение имен функций большими (заглавными) буквами, принятое в справочной системе MATLAB. Напоминаем, что как в командной строке, так и в текстах m-файлов функции записываются только малыми буквами. Для функций, возвращающих ряд значений или массивов (например х, Y, z, ...), запись имеет следующий вид: [X, Y, Z,...] =f_name (Список_параметров) Важное значение имеет двойственность операторов и функций. Многие операторы имеют свои аналоги в виде функций. Так, например, оператор «+» имеет аналог в виде функции sum. Команды, записанные в виде Command argument нередко имеют форму записи и в виде функции: Command('argument') Примеры: >> help s i n SINSine. SIN(X) i s the sine of the elements of X. Overloaded methods help sym/sin.m » help('sin') SINSine. SIN(X) i s the sine of the elements of X. Overloaded methods help sym/sin.m >>
type('sin')
sin is a built-in function. >> type sin sin is a built-in
function.
Указанная двойственность лежит в основе выбора между процедурным и функциональным типами программирования, каждый из которых имеет своих поклонников и противников и может (в той или иной мере) подходить для решения различных классов задач. При этом переход от одного типа программирования к другому возможен в пределах одной программы и происходит настолько естественно, что большинство пользователей даже не задумывается над тем, каким же типом (или стилем) программирования они преимущественно пользуются.
10.1.6. Некоторые ограничения Поскольку язык программирования системы MATLAB ориентирован на структурное программирование, в нем нет номеров строк (присущих до недавнего времени Бейсику) и программных операторов безусловного перехода GO TO. Имеются лишь управляющие структуры следующих типов: условные выражения if...else. ..elseif...end, циклы for...end и while...end. Их форма похожа на ту, которая используется в языке Pascal (то есть область действия управляющих структур начи-
433
Глава 10. Типовые средства программирования нается их заголовком, но без слова begin, а заканчивается словом end). С позиций теории структурного программирования этих средств достаточно для решения любых задач. В MATLAB имеются также операторы-переключатели типа case, облегчающие создание программных конструкций с множественным ветвлением. Однако в MATLAB исключены те средства, возможности которых можно реализовать уже имеющимися средствами. Зато резко увеличен набор средств для программирования решения математических задач, прежде всего сводящихся к матричным вычислениям и реализации современных численных методов. Программирование простых задач в среде MATLAB очень напоминает программирование на Бейсике [2, 6, 7]. Во многих случаях программы на Бейсике можно почти дословно перевести на язык системы, учтя небольшие отличия в синтаксисе этих языков. Это нельзя трактовать как отсутствие у языка MATLAB индивидуальных черт. Любители С, Pascal или Fortran также заметят сходство этих языков с языком программирования MATLAB. Так что правильнее считать, что этот язык имеет вполне самостоятельное значение. Он вобрал в себя лучшие средства наиболее известных универсальных языков программирования. 1 0 . 1 . 7 . Исполнение программных объектов Как уже отмечалось, m-файлы сценариев (script-файлы) и функций должны иметь уникальные имена. Длина имен не ограничивается, но только первые 31 символ учитываются при идентификации имени. При исполнении программного объекта его имя сравнивается со списком имен, хранящихся в рабочей области и в директориях m-файлов. Если имя оказывается не уникальным, соответствующий программный объект не исполняется и выводится сообщение об ошибке. Если же имя уникально, то программный объект исполняется в интерпретирующем режиме.
10.2. М-файлы сценариев и функций 1 0 . 2 . 1 . Структура и свойства файлов сценариев Итак, мы установили, что работа в командном режиме (сессия) не является программированием. Внешним атрибутом последнего в MATLAB служит задание последовательности действий по программе, записанной в виде m-файла. В главе 2 было показано, что для создания m-файлов может использоваться как встроенный редактор, так и любой текстовый редактор, поддерживающий формат ASCII. Подготовленный и записанный на диск m-файл становится частью системы и его можно вызывать как из командной строки, так и из другого m-файла. Есть два типа m-файлов: файлы-сценарии и файлы-функции. Важно, что в процессе своего создания они проходят синтаксический контроль с помощью встроенного в систему MATLAB редактора/отладчика m-файлов. Файл-сценарий, именуемый также Script-файлом, является просто записью серии команд без входных и выходных параметров. Он имеет следующую структуру: %0сновной комментарий %Дополнительный комментарий Тело файла с любыми выражениями Важны следующие свойства файлов-сценариев: • они не имеют входных и выходных аргументов; 434
10.2. М-файлы сценариев и функций • работают с данными из рабочей области; • в процессе выполнения не компилируются; • представляют собой зафиксированную в виде файла последовательность операций, полностью аналогичную той, что используется в сессии. Основным комментарием (в фирменной документации он назван HI) является первая строка текстовых комментариев, а дополнительным — последующие строки. Основной комментарий выводится при выполнении команд lookfor и help имя_каталога. Полный комментарий выводится при выполнении команды help Имяфайла. Рассмотрим следующий файл-сценарий: %Plot with color red %Строит график синусоиды линией красного цвета %с выведенной масштабной сеткой в интервале [xmin,xmax] x=xmin:0.1:xmax; plot(x,sin (x), 'г') grid on Первые три строки здесь — это комментарий, остальные — тело файла. Обратите внимание на возможность задания комментария на русском языке. Знак % в комментариях должен начинаться с первой позиции строки. В противном случае команда help name не будет воспринимать комментарий (иногда это может понадобиться) и возвратит сообщение вида No help comments found in name.rn. Будем считать, что файл записан под именем р_сг. Работа с ним представлена на рис. 10.2. Показана подготовка к запуску файла (задание конкретных значений для xmin и xmax), запуск файла, получение рисунка (окно внизу) и вызов комментария командой help per. Командой type per можно вывести полный листинг файла.
Using Toolbox Potli Cache.
Type "help tor
To get . t . r t e d , s e l e c t "MATIAB Help" f t o .
,,.,,, •
j
»
,
.
I* Ы
Л
"
'
#
«
>
.
. .
.
.
.
0
§
iPJot eiU) color: i:e.d
per PI o t « ith colo r ted Строит ppatMK синусоиди ли имей красного ui
»
pec
05
. . . / „ ; ......
0 L.. -0.5 • V - -
/
:
1 •
•
•
•-Г\ - \
/:
\ •
г/: J -•---]---
i j
\
\
И
Ф Stort |
Puc. 10.2. Пример работы с файлом per 435
Глава 10. Типовые средства программирования Обратите внимание на то, что такой файл нельзя запустить без предварительной подготовки, сводящейся к заданию значений переменным xmin и хтах, использованным в теле файла. Это следствие первого свойства файлов сценариев — они работают с данными из рабочей области. Переменные, используемые в файлах-сценариях, являются глобальными, то есть они действуют одинаково в командах сессии и внутри программного блока, которым является файл-сценарий. Поэтому заданные в сессии значения переменных используются и в теле файла. Имена файлов-сценариев нельзя использовать в качестве параметров функций, поскольку файлы-сценарии не возвращают значений. Можно сказать, что файл-сценарий — это простейшая программа на языке программирования MATLAB. 1 0 . 2 . 2 . Структура М-файла-функции М-фанл-функция является типичным объектом языка программирования системы MATLAB. Одновременно он является полноценным модулем с точки зрения структурного программирования, поскольку содержит входные и выходные параметры и использует аппарат локальных переменных. Структура такого модуля с. одним выходным параметром выглядит следующим образом: function var=f_name(Список_параметров) %0сновной комментарий %Дополнительный комментарий Тело файла с любыми выражениями
М-файл-функция имеет следующие свойства: • он начинается с объявления function, после которого указывается имя переменной var — выходного параметра, имя самой функции и список ее входных параметров; • функция возвращает свое значение и может использоваться в виде name (Список_параметров) в математических выражениях; • все переменные, имеющиеся в теле файла-функции, являются локальными, то есть действуют только в пределах тела функции; • файл-функция является самостоятельным программным модулем, который общается с другими модулями через свои входные и выходные параметры; • правила вывода комментариев те же, что у файлов-сценариев; • файл-функция служит средством расширения системы MATLAB; • при обнаружении файла-функции он компилируется и затем исполняется, а созданные машинные коды хранятся в рабочей области системы MATLAB. Последняя конструкция var = выражение вводится, если требуется, чтобы функция возвращала результат вычислений. Приведенная форма файла-функции характерна для функции с одним выходным параметром. Если выходных параметров больше, то они указываются в квадратных скобках после слова function. При этом структура модуля имеет следующий вид: function [ v a r l , var2,...] =f_name (Список_параметров) ^Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями
436
10.2. М-файлы сценариев и функций varl=Bbipa3KeHMe var2=Bbipa»;eHMe
Такая функция во многом напоминает процедуру. Ее нельзя слепо использовать непосредственно в математических выражениях, поскольку она возвращает не единственный результат, а множество результатов — по числу выходных параметров. Если функция используется как имеющая единственный выходной параметр, но имеет ряд выходных параметров, то для возврата значения будет использоваться первый из них. Это зачастую ведет к ошибкам в математических вычислениях. Поэтому, как отмечалось, данная функция используется как отдельный элемент программ вида: [varl,va2,...]=f_name(Список_параметров) После его применения переменные выхода v a r l , var2, ... становятся определенными и их можно использовать в последующих математических выражениях и иных сегментах программы. Если функция используется в виде fname (Список_параметров), то возвращается значение только первого выходного параметра — переменной v a r l .
10.2.3. Статус переменных в функциях Переменные, указанные в списке параметров функции, являются локальными и служат для переноса значений, которые подставляются на их место при вызовах функций. Эта особенность переменных-параметров хорошо видна при разборе примера, показанного на рис. 10.3. Здесь (признаемся, что неточно) задана некоторая функция двух переменных fun(xj>). В этом примере в окне редактора создана функция fun двух переменных х и у, вычисляющая z = х2 + у2. Поскольку переменные хну указаны как параметры •
.!*
с
Q & j: % »
-I
> f
•
i
•
>
1 ,J
Ciffrenl Directory: C.1 rtATLAB65lww
*
wfun(2. 3) ^
^
J
^
z•
« *
a of ы
13
I
w13 »
•!"• • a
Whdow Н ф '
1* л г.«-
7€ Л
X
.
X -
С
» У
«1
у .
!ln2
Col 10
0
» z ed E'Uictioti or v a r i a b l e ' ; ' . ?••;• Undefin
«Г.: «
S
t
> a
n
|
Puc. 10.3. Пример, поясняющий действие локальных и глобальных переменных при задании файла-функции 437
Глава 10. Типовые средства
программирования
функции плп(л-,у), то они являются локальными. В примере вне тела функции им заданы нулевые значения. Очевидно, что при вычислении значения fun(2,3) в теле функции задается х = 2 и у = 3. Поэтому результат — z = 13. Однако после выхода из тела функции переменные х и у принимают свои исходные значения, равные нулю. Так что эти переменные меняют свои значения на значения параметров функции только локально — в пределах тела функции. А каков статус переменной z в нашем примере? Она, как и любая переменная, определенная в теле функции, также будет локальной. Изначально ее значение не определено. В теле функции переменная принимает значение z = 13. А после возврата из функции, как нетрудно увидеть из рис. 10.3, переменная z, несмотря на ее применение в теле функции, остается неопределенной. На это указывает сообщение, отображаемое после попытки вывода значения переменной z. Возврат из функции производится после обработки всего тела функции, то есть при достижении конца файла функции. При использовании в теле функции условных операторов, циклов или переключателей иногда возникает необходимость осуществить возврат функции раньше, чем будет достигнут конец файла. Для этого служит команда return. В любом случае результатом, возвращаемым функцией, являются значения выходных параметров (в нашем случае выходным параметром является переменная z), присвоенные им на момент возврата. У нашей функции имеется один недостаток — вывод на индикацию значения z = 13 из тела функции, хотя после этого z остается равным 0. Чтобы убрать побочный эффект вывода значения z, достаточно установить знак ; после математического выражения, определяющего z. Таким образом, окончательно наша функция должна записываться следующим образом: function z=fun(x,y) z=xA2+y"2;
Этот пример наглядно показывает, что пропуск любого слова или даже простого оператора (вроде знака ;) может привести к не сразу понятным побочным эффектам и даже неверной работе функции. Программирование требует особой точности и педантичности, именно поэтому далеко не все могут быть хорошими программистами. 10.2.4. Команда глобализации переменных global Итак, из сказанного ясно, что переменные в файлах-сценариях являются глобальными, а в файлах-функциях — локальными. Нередко применение глобальных переменных в программных модулях может приводить к побочным эффектам. Применение локальных переменных устраняет эту возможность и отвечает требованиям структурного программирования. Однако передача данных из модуля в модуль в этом случае происходит только через входные и выходные параметры, что требует тщательного планирования такой передачи. В жизни мы далеко не всегда едим черную икру (локальные переменные) и часто хотим отведать черного хлебушка (глобальные переменные). Так и при создании файлов-функций порой желательно применение глобальных переменных. Ответственность за это должен брать на себя программист, создающий программные модули. Команда global varl var2...
438
10.2. М-файлы сценариев и функций позволяет объявить переменные модуля-функции глобальными. Таким образом, внутри функции могут использоваться и такие переменные, если это нужно по условиям решения вашей задачи. Чтобы несколько программных модулей могли совместно использовать глобальную переменную, ее идентификатор должен быть объявлен в составе global во всех модулях. 1 0 . 2 . 5 . Использование подфункций Начиная с версии 5.0 в функции системы MATLAB можно включать подфункции. Они объявляются и записываются в теле основных функций и имеют идентичную им конструкцию. Не следует путать эти функции с внутренними функциями, встроенными в ядро системы MATLAB. Ниже представлен пример функции с подфункцией: function [mean,stdev] = statv(x) %STATV Interesting statistics. %Пример функции с встроенной подфункций n = length(x); mean = avg (x,n); stdev = sqrt(sum((x-avg (x,n)) . Л 2)/n); function m = avg(x,n) %Mean subfunction m = sum(x)/n; В этом примере среднее значение элементов вектора х вычисляется с помощью подфункции avg(x,n), тело которой записано в теле основной функции s t a t v . Пример использования функции s t a t v представлен ниже; » V=[l 2 3 4 5] V= 1 2 3 4 5 >> [a,m]=statv(V) а = 3 m= 1 .4142 >> statv(V) ans = 3 >> help s t a t v STATV I n t e r e s t i n g s t a t i s t i c s . Пример функции с встроенной подфункций
Подфункции определены и действуют локально, то есть только в пределах m-файла, определяющего основную функцию. Команда help name выводит комментарий, относящийся только к основной функции, тогда как команда type name выводит весь листинг m-файла. Так что заданные в некотором m-файле подфункции нельзя использовать ни в командном режиме работы, ни в других т-файлах. При обращении к функции интерпретатор системы MATLAB прежде всего просматривает m-файл на предмет выявления подфункций. Если они обнаружены, то задаются как локальные функции. Благодаря локальному действию под439
Глава 10. Типовые средства программирования функций их имена могут совпадать с именами основных функций системы. Если в функции и подфункциях должны использоваться общие переменные, их надо объявить глобальными как в функции, так и в ее подфункциях. 1 0 . 2 . 6 . Частные каталоги Для записи m-файлов используются каталоги, называемые родительскими каталогами. Они содержат группы файлов определенного функционального назначения, например, по статистическим расчетам, матричным операциям, вычислению определенных классов функций и т. д. Однако начиная с версии MATLAB 5.0 появилась возможность в родительских каталогах создавать частные каталоги с именем PRIVATE. Расположенные в них т-файлы доступны только файлам родительского каталога. Файлы частных каталогов просматриваются интерпретатором системы MATLAB в первую очередь. Применение частных каталогов позволяет изменять исходные файлы, сохраняя оригиналы в родительском каталоге в неизменном виде. Если вы решили отказаться от применения измененного файла, достаточно стереть его в частном каталоге. Такая возможность связана с тем, что интерпретатор при поиске т-файла прежде всего просматривает частный каталог и интерпретирует найденный в нем файл. И только если файл не найден, ищется файл в родительском каталоге.
10.3. Обработка ошибок и комментарии 1 0 . 3 . 1 . Вывод сообщений об ошибках Часто в ходе вычислений возникают ошибки. Например, мы уже сталкивались с проблемой вычисления функции sin(x)/x — при х = 0 имеет место ошибка вида «деление на ноль». При появлении ошибки вычисления могут завершиться досрочно с выводом сообщения об ошибке. Следует, однако, отметить, что не все ошибки вызывают остановку вычислений. Некоторые сопровождаются только выдачей предупреждающей надписи. Такие ситуации должны учитываться программистом, отмечаться как ошибочные и по возможности устраняться. Для вывода сообщения об ошибке служит команда error('Сообщение об ошибке') при выполнении которой вычисления прерываются и выдается сообщение об ошибке, заданное в апострофах. Ниже дан пример вычисления функции sd(x) = sin(x)/x, в котором задано сообщение об ошибке на русском языке: function
f=sd(x)
if x==0 error('Ошибка — деление на 0'), end f=sin(x)/x Для выявления ситуации об ошибке использован оператор условного перехода if, который будет описан детально несколько позднее. Результат выполнения данной функции приводится ниже: >>
440
sd(l)
10.3. Обработка ошибок и комментарии 0.8415 ans = 0.8415 >> s d ( 0 ) ??? E r r o r u s i n g ==> sd Ошибка — деление на 0
Если остановка программы при появлении ошибки нежелательна, то может использоваться команда вывода предупреждающего сообщения: warning('Предупреждающее сообщение') Эта команда выводит стоящее в апострофах сообщение, но не препятствует дальнейшей работе программы. Признаком того, что является ошибкой, а что предупреждением, являются символы ??? и слово Warning в соответствующих сообщениях.
10.3.2. Функция lasterr и обработка ошибок Опытные программисты должны предусматривать ситуации с появлением ошибок. К примеру, при х = 0 выражение sin(x)/x = 0/0 = I и правильным решением было бы вместо его вычисления использовать значение I. В данном простом примере приводится функция sdO, исключающая вычисление sin(x)/x при х = 0: function f=sdO(x) if x==0 f = l ; e l s e f=sin(x)/x; return
end
При этом вычисления пройдут корректно при любом х: » sdO(1) ans = 0.8415 » sdO (0) ans = 1
Для вывода сообщения о последней произошедшей ошибке служит функция l a s t e r r (см. пример ниже): >> а а а
??? Undefined function or variable 'aaa'. » 2+3 ans = 5 » 1/0 Warning: Divide by zero, ans = Inf >> l a s t e r r ans = Undefined f u n c t i o n
or v a r i a b l e
'aaa'.
Как нетрудно заметить, функция l a s t e r r возвращает текстовое сообщение, следующее за знаками ??? сообщения об ошибке.
441
Глава 10. Типовые средства программирования В общем случае программы могут содержать обработчики ошибок, направляющие ход вычислений в нужное русло, даже если появляется ошибка. Но для этого требуются средства индикации и обработки ошибок. Основными из них являются функции eval и l a s t e r r . О функции l a s t e r r уже говорилось, а функция eval('try','catch') в отличие от ранее рассмотренной формы (Глава 18) имеет два входных аргумента. Один из них — это строчное выражение, которое преобразуется в исполняемую форму и выполняется при отсутствии ошибки. Если же происходит ошибка, то строка ' c a t c h ' вызывает обращение к функции обработки ошибки. 1 0 . 3 . 3 . Комментарии Как отмечалось, команда help name, где name — имя m-файла, обеспечивает чтение первой строки с текстовым комментарием и тех строк с комментариями, которые следуют непосредственно за первой строкой. Комментарий, расположенный за пределами этой области, не выводится. Это позволяет создавать невыводимый программный комментарий, например: Z=X+Y %Массив Z является суммой массивов X и Y Пустая строка прерывает вывод комментария при исполнении команды help name. Команда type name выводит текст программы со всеми комментариями, в том числе и следующими после пустых строк. Надо быть осторожными с вводом русскоязычных комментариев — нередко это является причиной неустойчивой работы программ. С англоязычными комментариями такой проблемы нет. Команда help catalog, где c a t a l o g — имя каталога с m-файлами, позволяет вывести комментарий, общий для всего каталога. Такой комментарий содержится в файле contents.m, который пользователь может создать самостоятельно с помощью редактора m-файлов. Если такого файла нет, то будет выведен список первых строк комментариев для всех m-файлов каталога.
10.4. Функции с переменным числом аргументов 1 0 . 4 . 1 . Функции подсчета числа аргументов При создании функций со специальными свойствами весьма полезны две приведенные ниже функции: • nargin — возвращает число входных параметров данной функции; • nargout — возвращает число выходных параметров данной функции. Пусть, к примеру, мы хотим создать функцию, вычисляющую сумму квадратов до пяти аргументов xl, х2, хЗ, х4 и х5. Обычный путь состоит в следующем — создаем функцию с именем sum2_5: function f=sum2_5(xl,x2,x3,x4,x5); A A f=xl 2+x2~2+x3 2+x4~2+x5~2; Теперь проверим ее в работе: >> sum2__5 ( 1 , 2 , 3 , 4 , 5 ) ans = 55 442
10.4. Функции с переменным числом
аргументов
» sum2_5(1,2) ??? Input argument 'хЗ' is undefined. Error in ==> C:\MATLAB\bin\sum2_5.m On line 2 ==> f=xl A 2+x2 A 2+x3 A 2+x4 A 2+x5 A 2; Итак, при наличии всех пяти аргументов функция работает корректно. Но если аргументов менее пяти, она выдает сообщение об ошибке. С помощью функции nargin можно создать функцию sum2_5m, которая работает корректно при любом числе заданных входных аргументов в пределах от 1 до 5: function f=sum2m_5(xl,x2,x3,x4,x5); n=nargin; if n==l f=xlA2; end if n==2 f=xlA2+x2A2;end if n==3 f=xl"2+x2'v2+x3A2; end if n==4 f=xl A 2+x2 A 2+x3 A 2+x4 A 2; end if n==5 f=xlA2+x2A2+x3A2+x4A2+x5A2;end В данной функции используется условный оператор i f . . .end, который будет детально описан далее. Но и без этого ясно, что благодаря применению функции n a r g i n и условного оператора вычисления всякий раз идут по формуле с числом слагаемых, равным числу входных аргументов — от одного до пяти. Это видно из приведенных ниже примеров: >> su ans = I » sum2_5m(l,2) ans = 5 >> sum2_5m(l,2,3) ans = 14 >> sum2_5m(l,2,3,4) ans = 30 >> sum2_5m(l,2,3,4,5) ans = 55 >> sum2_5m(l,2,3,4,5,6) ??? Error using ==> sum2_5m Too many input arguments. Итак, при изменении числа входных параметров от 1 до 5 вычисления проходят корректно. При большем числе параметров выводится сообщение об ошибке. Это уже действует встроенная в интерпретатор MATLAB система диагностики ошибок. 10.4.2. Переменные varargin и varargout Для упрощения записи аргументов функций их можно представить списком, который определяет специальная переменная varargin, являющаяся массивом ячеек. Она должна записываться строчными буквами и может включать в себя как аргументы, так и опции функций. Например, в приведенных ниже примерах 443
Глава 10. Типовые средства программирования function myplot (x, va'rargin) plot(x,varargin{:}) function [s,varargout] = mysize(x) nout = max (nargout,1)-1; s = s i z e (x) ; for
i=l:nout,
varargout(i)
= (s(i)}; end
эта переменная вбирает в себя все входные параметры и опции, начиная со второго аргумента. При обращении к данной функции m y p l o t ( s i n ( 0 : . 1 : 1 ) , ' c o l o r ' , [ . 5 ч. 7 . 3 ] , ' l i n e s t y l e 1 , ' : ' )
varargin представляет массив ячеек размера 1 х 4, включающий в себя значения ' c o l o r ' , [.5 .7 . 3 ] , ' l i n e s t y l e ' И ' : ' . Аналогично varagin переменная varargout объединяет любое число выходных параметров в массив ячеек. Эта переменная, кстати, как и varargin, должна быть последней в списке аргументов. Обычно эта переменная не создается при вызове функций. Приведенный ниже пример поясняет ее создание с помощью цикла: function [ s , v a r a r g o u t ] = mysize(x) nout = max(nargout,1)-1; s = size(x); for i = l : n o u t , varargout(i) = {s(i)}; end
Более подробно циклы будут рассмотрены в дальнейшем описании. В данном случае цикл использован для объединения всех параметров, начиная со второго, в значение переменной varargout.
10.5. Особенности работы с т-файлами 10.5.1. Выполнение т-файлов функций М-файлы-функции могут использоваться как в командном режиме, так и вызываться из других М-файлов. При этом необходимо указывать все входные и выходные параметры. Исключением является случай, когда выходной параметр единственный — в этом варианте функция возвращает единственный результат и может использоваться в математических выражениях. При использовании глобальных переменных они должны быть объявлены во всех m-файлах, используемых в решении заданной задачи, и во всех входящих в них встроенных подфункциях. Имена функций должны быть уникальными. Это связано с тем, что при обнаружении каждого нового имени MATLAB проверяет, относится ли это имя к переменной, подфункции в данном m-файле, частной функции в каталогах PRIVATE или функции в одном из каталогов пути доступа. Если последняя встречается, то будет исполнена именно эта функция. В новой версии MATLAB возможно переопределение функции, но это не рекомендуется делать подавляющему большинству пользователей системы. Если аргумент функции используется только для вычислений и его значения не меняются, то аргумент передается ссылкой, что уменьшает затраты памяти. В других случаях аргумент передается значением. Для каждой функции выделяется своя (рабочая) область памяти, не входящая в область, предоставляемую систе-
444
10.5. Особенности работы с т-файлами ме MATLAB. Глобальные переменные принадлежат ряду областей памяти. При их изменении меняется содержимое всех этих областей. При решении задач с большим объемом данных может ощущаться нехватка оперативной памяти. Признаком этого становится появление сообщения об ошибке «Out of memory». В этом случае может быть полезным применение следующих мер: • стирание ставших ненужными данных, прежде всего больших массивов; • увеличение размеров файла подкачки Windows; • уменьшение размера используемых данных; • снятие ограничений на размеры используемой памяти; • увеличение объема физической памяти компьютера. Чем больше емкость ОЗУ компьютера, на котором используется система MATLAB, тем меньше вероятность возникновения указанной ошибки. Опыт показывает, что даже при решении задач умеренной сложности свободная емкость ОЗУ не должна быть менее 16—32 Мбайт.
10.5.2. Создание Р-кодов Когда встречается сценарий или функция в виде m-файла, то всякий раз выполняется трансляция файлов, создающая так называемые Р-коды (псевдокоды). Она связана с синтаксическим контролем сценария или функции, который несколько замедляет вычисления. Временные Р-коды хранятся в памяти только до использования команды c l e a r или завершения сеанса работы. Кроме того, MATLAB позволяет явно создавать и хранить Р-коды сценариев и функций с помощью команды pcode: pcode имена_М-файлов pcode * .m создает файлы р-кодов для всех m-файлов данной папки. pcode с дополнительным параметром - i n p l a c e хранит эти файлы в тех же папках, что и исходные т-файлы. Особенно полезно применение этой команды в том случае, когда используется сложная дескрипторная графика и средства создания GUI. В этом случае выигрыш по скорости выполнения вычислений может быть заметным. Переход к Р-кодам полезен, если пользователь желает скрыть созданный им m-файл и реализованные в нем идеи и алгоритмы. Файл с Р-кодами имеет расширение .р. Размер файла с Р-кодами обычно больше, чем размер т-файла. Рассмотрим следующий пример — создадим файл-сценарий pp.m следующего содержания: told=cputime; х=-15:.0001:15; plot(x,sin(x)) t=cputime-told Эта программа строит график функции sin(x) по большому числу точек. Кроме того, она вычисляет время выполнения данного сценария в секундах. При первом пуске получим: » рр t =
0.4400 445
Глава 10. Типовые средства программирования Теперь выполним создание Р-кодов и вновь запустим программу: >> pcode pp » РР 0.3900 » РР 0.3300 Нетрудно заметить, что после преобразования в Р-коды время построения графика несколько уменьшилось. Но гораздо важнее то, что теперь вы можете стереть файл pp.m (но оставить рр.р!) и снова запустить программу. Ваши слишком любопытные коллеги едва ли разберутся с тем, что записано в машинных кодах файла рр.р, хотя с помощью специальных программ (декомпиляторов) такая возможность в принципе реализуется.
1 0 . 6 . Управляющие структуры Помимо программ с линейной структурой (см. примеры, например, в главе 7), инструкции которых исполняются строго по порядку, существует множество программ, структура которых нелинейна. При этом ветви программ могут выполняться в зависимости от определенных условий, иногда с конечным числом повторений — циклов, иногда в виде циклов, завершаемых при выполнении заданного условия. Практически любая серьезная программа имеет нелинейную структуру. Для создания таких программ необходимы специальные управляющие структуры. Они имеются в любом языке программирования и, в частности, в MATLAB.
10.6.1. Диалоговый ввод Приведем простой пример диалоговой программы, которую легко поймут приверженцы доброго старого Бейсика: % Вычисление длины окружности с диалоговым вводом радиуса г=0; while r>=0,
r=input('Введите радиус окружности г='); if r>=0 disp(' Длина окружности 1='); disp(2*pi*r), end end Эта программа служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса г. Обратите внимание на то, что здесь мы впервые показываем пример организации простейшего диалога. Он реализован с помощью команды input: r=input('Введите радиус окружности г = ' ) ; При выполнении этой команды вначале выводится запрос в виде строки, затем происходит остановка работы программы и ожидается ввод значения радиуса г (в общем случае числа). Ввод, как обычно, подтверждается нажатием клавиши Enter, после чего введенное число присваивается переменной г. Следующая строка if r> = 0 disp ( ' Длина окружности 1='); disp (2*pi*r), end
446
10.6. Управляющие
структуры
с помощью команды disp при г>=0 выводит надпись «Длина окружности !=» и вычисленное значение длины окружности. Она представляет собой одну из наиболее простых управляющих структур типа if...end. В данном случае она нужна для остановки вычислений, если вводится отрицательное значение г (прием, который любят начинающие программисты). Приведенные строки включены в управляющую структуру while...end. Это необходимо для циклического повторения вычислений с вводом значений г. Пока г>=0, цикл повторяется. Но стоит задать г < 0, вычисление длины окружности перестает выполняться, а цикл завершается. Если данная программа записана в виде m-файла circ.m, TO работа с ней будет выглядеть следующим образом: >>
circ
Введите радиус окружности R=l Длина окружности 1= 6.2832 Введите радиус окружности R=2 Длина окружности 1= 12.5664 Введите радиус окружности R=-l >> Итак, на примере даже простой программы мы видим пользу применения управляющих структур типа if...end и while...end, а также функций диалогового ввода input (' S t r i n g ' ) и вывода disp. Обратите внимание на завершение работы программы при вводе любого отрицательного числа для радиуса окружности. Функция input может использоваться и для ввода произвольных строковых выражений. При этом она задается в следующем виде: input('Комментарий','s') При выполнении этой функции она останавливает вычисления и ожидает ввода строкового комментария. После ввода возвращается набранная строка. Это иллюстрирует следующий пример: >> S = i n p u t ( ' В в е д и т е выражение ' , ' s ' ) Введите выражение (Вводим) 2 * s i n ( l ) S = 2 * s i n (1) >> e v a l (S) ans = 1.6829
Обратите внимание на то, что функция eval позволяет вычислить выражение, заданное (полученное от функции input) в символьном виде. Вообще говоря, возможность ввода любого символьного выражения в сочетании с присущими языку программирования MATLAB управляющими структурами открывает путь к созданию диалоговых программ любой сложности. 10.6.2. Условный оператор if...elseif...else...end Условный оператор i f в общем виде записывается следующим образом: i f Условие Инструкции_1 e l s e i f Условие 447
Глава 10. Типовые средства программирования Инструкции_2 else Инструкции_3 end Эта конструкция допускает несколько частных вариантов. В простейшем, типа if ...end if Условие Инструкции end пока Условие возвращает логическое значение 1 (то есть «истина»), выполняются Инструкции, составляющие тело структуры if...end. При этом оператор end указывает на конец перечня инструкций. Инструкции в списке разделяются оператором , (запятая) или ; (точка с запятой). Если Условие не выполняется (дает логическое значение 0, «ложь»), то Инструкции также не выполняются. Еще одна конструкция if Условие Инструкции_1 e l s e Инструкции_2 end выполняет Инструкции_1, если выполняется Условие, или Инструкции_2 в противном случае. Условия записываются в виде: Выражение__1 Оператор отношения Выражение_2 причем в качестве Операторов_отношения используются следующие операторы: ==, <, >, <=, >= или ~=. Все эти операторы представляют собой пары символов без пробелов между ними. Действие операторов отношения, логических операторов и функций, используемых при записи условий, подробно описано в главе 3. Мы уже неоднократно показывали применение этой общеизвестной управляющей структуры в программных модулях. Читателю предлагается опробовать собственные варианты программ с условным оператором.
10.6.3. Циклы типа for...end Циклы типа for...end обычно используются для организации вычислений с заданным числом повторяющихся циклов. Конструкция такого цикла имеет следующий вид: for var=Bbipa»ceHHe, Инструкция, ..., Инструкция end Выражение чаще всего записывается в виде s : d : e , где s — начальное значение переменной цикла var, d — приращение этой переменной и е — конечное значение управляющей переменной, при достижении которого цикл завершается. Возможна и запись в виде s:e (в этом случае d = 1). Список выполняемых в цикле инструкций завершается оператором end. Следующие примеры поясняют применение цикла для получения квадратов значений переменной цикла: » for i = l : 5 i A 2 , end; ans = 1 ans = 4 ans = 9 ans = 16 448
10.6. Управляющие структуры ans = 25 л >> for x = 0 : . 2 5 : l х 2 , ans = О ans = 0.0625 ans = 0.2500 ans = 0.5625 ans = 1
end;
Возможны вложенные циклы, например: for for
i=l:3 j=l:3
end end
В результате выполнения этого цикла (файл for2.m) формируется матрица А: >> f o r 2 >> А А= 2 3 3 4 4 5 >>
4 5 6
Следует отметить, что формирование матриц с помощью оператора : (двоеточие) обычно занимает намного меньше времени, чем с помощью цикла. Однако применение цикла нередко оказывается более наглядным и понятным. MATLAB допускает использование в качестве переменной цикла массива А размера т х п. При этом цикл выполняется столько раз, сколько столбцов в массиве А, и на каждом шаге переменная var представляет собой вектор, соответствующий текущему столбцу массива А: » А=[1 2 3;4 5 6] А= 1 2 3 4 5 6 >> for var=A; var, end var = 1 4 var = 2 5 var = 3 6
449
Глава 10. Типовые средства программирования 10.6.4. Циклы типа while...end Цикл типа while выполняется до тех пор, пока выполняется Условие: while Условие Инструкции end Пример применения цикла while уже приводился. Досрочное завершение циклов реализуется с помощью операторов break или continue. 1 0 . 6 . 5 . Конструкция переключателя switch...case...end Для осуществления множественного выбора (или ветвления) используется конструкция с переключателем типа switch: switch switch Выражение case сазе_Выражение Список инструкций case {case Выражение]., Сазе_выражение2, сазе_ВыражениеЗ, ...} Список инструкций otherwise, Список инструкций end Если выражение после заголовка switch имеет значение одного из выражений сазе_Выражение..., то выполняется блок операторов case, в противном случае — список инструкций после оператора otherwise. При выполнении блока case исполняются те списки инструкций, для которых сазе_Выражение совпадает со switch_Bbipa3KeHMeM. Обратите внимание на то, что сазе_Выражение может быть числом, константой, переменной, вектором ячеек или даже строчной переменной. В последнем случае оператор case истинен, если функция strcmp (значение, выражение) возвращает логическое значение «истинно». Поясним применение оператора switch на примере m-файла swi.m: switch var case {1,2,3} disp('Первый квартал1) case {4,5,6) disp('Второй квартал') case {7,8,9} disp ('Третий квартал') case {10,11,12} disp('Четвертый квартал') otherwise disp('Ошибка в задании') end Эта программа в ответ на значения переменной var — номера месяца — вычисляет, к какому кварталу относится заданный месяц, и выводит соответствующее сообщение: >> var=2; >> swl Первый квартал 450
10.6. Управляющие структуры >> var=4;swl Второй квартал >> var=7;swl Третий квартал >> var=12;swl Четвертый квартал >> var=-l;swl Ошибка в задании 1 0 . 6 . 6 . Конструкция try...catch...end В MATLAB 6.* введена новая конструкция блока вывода ошибок try...catch...end: try, Список инструкций • *• / Список инструкций catch, Список инструкций •• • I Список инструкций end Эта конструкция выполняет все списки инструкций. Если в каком-то списке до оператора c a t c h появляется ошибка, то выводится сообщение об ошибке, но системная переменная последней ошибки l a s t e r r не меняется. В сообщениях после c a t c h сообщения об ошибке не выводятся. В следующем примере задано появление ошибки (переменная ааа не определена) после чего выполняется блок try...catch...end: ааа ??? Undefined function or variable 'aaa'. try 2 + 3; 3 + 4; 2/0; catch 4 + 5; end; Warning: Divide by z e r o . >> i a s t e r r ans = Undefined f u n c t i o n or v a r i a b l e ' a a a ' . Обратите внимание, что в конце блока команда l a s t e r r выводит ее начальное значение. А в другом примере ошибка задана в блоке try...catch...end уже после оператора catch: >> t r y 2 + 3; 3 + 4; 4 + 5; catch 5/0; 451
Глава 10. Типовые средства программирования end; >> l a s t e r r ans = Undefined function or variable
'aaa 1 .
Как нетрудно заметить, на этот раз ошибка в вычислении 5/0 не выводится, а значение l a s t e r r осталось тем, что было изначально.
10.6.7. Операторы break, continue и return В управляющих структурах, в частности в циклах for и while, часто используются операторы, влияющие на их выполнение. Так, оператор break может использоваться для досрочного прерывания выполнения цикла. Как только он встречается в программе, цикл прерывается. Пример: for i=l:10 i, i = 1 i = 2
if
i==5 break, end, end;
3 4 i = 5
Оператор continue передает управление в следующую итерацию цикла, пропуская операторы, которые записаны за ним, причем во вложенном цикле он передает управление на следующую итерацию основного цикла. Следующий пример обеспечивает подсчет числа строк в файле magic.m: fid = f o p e n ( ' m a g i c . m 1 , ' г ' ) ; while - f e o f ( f i d ) line = fgetl(fid);
count = 0;
if isempty(line) | strncmp(line,'%',1) continue end count = count + 1; end disp(sprintf('%d lines',count)); 25 lines Оператор r e t u r n обеспечивает нормальный возврат в вызывающую функцию или в режим работы с клавиатурой. Пример применения оператора r e t u r n : function d = det(A) %DET det(A) is the determinant of A. if isempty(A) d = 1; return else end
452
10.7. Основы объектно-ориентированного программирования В данном примере, если матрица А пустая, будет выведено значение 1, после чего управление будет передано в блок else...end. 10.6.8. Пустые матрицы в структурах if и while В управляющих структурах if и while в качестве условия могут применяться пустые матрицы. Такое условие возвращает логическое значение false (0). Пример фрагмента программы с пустой матрицей: A=ones ( 1 0 , 0 , 4 ) ; i f A SI e l s e SO e n d
10.6.9. Создание паузы в вычислениях Для остановки программы используется оператор pause. Он используется в следующих формах: • pause — останавливает вычисления до нажатия любой клавиши; • pause (N) — останавливает вычисления на N секунд; • pause on — включает режим отработки пауз; • pause off — выключает режим отработки пауз. Следующий пример поясняет применение команды pause: for
i=l:20; х =rand(l,40) ; у =rand(l,40) ; z = s i n (x . * у) ; t r i = delaunay(x,y); trisurf(tri,x,y,z) pause(1);
end
Команда pause (1) здесь обеспечивает показ 20 рисунков — построений трехмерных поверхностей из треугольных окрашенных областей со случайными параметрами.
10.7. Основы объектно-ориентированного программирования 10.7.1. Основные понятия Мы уже много раз упоминали различные объекты языка программирования системы MATLAB. Это является одним из признаков объектно-ориентированного программирования (ООП), причем чисто внешним. В основе объектно-ориентированного программирования лежат три основных положения: • инкапсуляция — объединение данных и программ и передачу данных через входные и выходные параметры функций. В результате появляется новый элемент программирования — объект; • наследование — возможность создания родительских объектов и новых дочерних объектов, наследующих свойства родительских объектов. Возможно также множественное наследование, при котором класс наследует свойства 453
Глава 10. Типовые средства программирования нескольких родительских объектов. На наследовании основаны система задания типов данных, дескрипторная графика и многие другие приемы программирования. Примеры наследования мы уже неоднократно отмечали; • полиформизм — присвоение некоторому действию одного имени, которое в дальнейшем используется по всей цепочке создаваемых объектов сверху донизу, причем каждый объект выполняет это действие присушим ему способом. В дополнение к этим положениям объектно-ориентированное программирование в MATLAB допускает агрегирование объектов, то есть объединение частей объектов или ряда объектов в одно целое. 10.7.2. Классы объектов Объект можно определить как некоторую структуру, принадлежащую к определенному классу. В MATLAB определены следующие семь основных классов объектов: • double — числовые массивы с элементами-числами двойной точности; • sparse — двумерные числовые или комплексные разреженные матрицы; • спаг — массивы символов; • s t r u c t — массивы структур (записей); • c e l l — массивы ячеек; • j a v a a r r a y — массивы Ява; • function_handle — дескрипторы функций. С объектами этих классов мы многократно встречались, особо не оговаривая их принадлежность к объектно-ориентированному программированию. Для MATLAB вообще характерно, что никакие классы объектов (в том числе заново создаваемые) не требуют объявления. Например, создавая переменную пате='Иван', мы автоматически получаем объект в виде переменной name класса char. Таким образом, для переменных принадлежность к тому или иному классу определяется их значением. Является ли переменная объектом, можно определить при помощи функции isobject(MMH переменной). Аналогичная функция i s j a v a определяет, является ли переменная объектом Java. Для создания новых классов объектов служат конструкторы классов. По существу это m-файлы, имена которых совпадают с именами классов @Имя_класса, но без символа @. Этим символом помечаются поддиректории системы MATLAB, в которых имеются конструкторы классов. Множество таких директорий с примерами конструкторов классов вы найдете в поддиректориях MATLABVTOOLBOX. В качестве примера рассмотрим поддиректорию @SYM в директории TOOLBOX/SYMBOLIC. В этой поддиректории можно найти конструкторы для более чем сотни объектов пакета символьной математики. К примеру, конструктор функции, вычисляющей арктангенс, выглядит следующим образом: >> help @sym/atan.m ATANSymbolic inverse tangent. >> type @sym/atan.m function Y = atan(X) %ATANSymbolic inverse tangent. %Copyright (c) 1993-98 by The MathWorks, Inc. %$Revision: 1.10 $ $Date: 1997/11/29 01:05:16 $ Y = maple('map','atan',X);
454
10.7. Основы объектно-ориентированного
программирования
В данном случае для конструирования нужного объекта используется функция maple, дающая вход в ядро системы символьной математики Maple, которое поставляется в составе системы MATLAB по лицензии фирмы MapIeSoft, Inc. Этот пример, кстати, наглядно показывает, что пользователь системы MATLAB может существенно расширить число объектов класса sym, поскольку ядро системы Maple содержит намного больше определений, чем пакет символьной математики системы MATLAB. Для создания новых классов объектов служит функция c l a s s , описанная ниже. Пакеты прикладных программ системы MATLAB позволяют разработчикам с большим успехом использовать возможности объектно-ориентированного программирования путем создания новых классов и объектов. М-файлы системы представляют собой массу наглядных примеров объектно-ориентированного программирования на языке MATLAB. Это дает основание ограничиться справочным описанием основных средств такого программирования с приведением минимума простых примеров.
10.7.3. Создание класса или объекта Для создания класса объектов или объектов, а также для их идентификации служит функция c l a s s . Формы ее применения представлены ниже: • c l a s s (OBJ) — возвращает класс указанного объекта 0BJ. Типы стандартных классов double, sparse, char, cell, struct, function_handle были перечислены выше. int8 — 8-разрядный массив целых чисел со знаком; uint8 — 8-разрядный массив целых чисел без знака; int16 — 16-разрядный массив целых чисел со знаком; uint 16 — 16-разрядный массив целых чисел без знака; int32 — 32-разрядный массив целых чисел со знаком; uint32 — 32-разрядный массив целых чисел без знака; int64 — 64-разрядный массив целых чисел со знаком; uint64 — 64-разрядный массив целых чисел без знака; — класс, определенный пользователем; <java_class> — имя класса Ява; • 0BJ=class(S,'class_name',PARENTl,PARENT2,...) — создает объект класса 'class_name' на базе структуры S и родительских объектов PARENTl, PARENT2, ... При этом создаваемый объект наследует структуру и поля родительских объектов. Объекту OBJ в данном случае присуще множественное наследование; • OBJ=class (struct [ ] , ' class_name ', PARENTl , PARENT2, ...) — не может
иметь никаких полей, кроме унаследованных от родительских объектов. Обратите внимание на то, что эта функция обычно используется в составе m-файлов конструкторов классов объектов.
10.7.4. Проверка принадлежности объекта к заданному классу Для контроля принадлежности заданного объекта к некоторому классу служит функция isa: • i s a (OBJ, 'Имя_класса ') — возвращает логическую I, если 0BJ принадлежит классу с указанным именем. Дополнительно к вышеописанным выделяет классы numeric и single. Но не обнаруживает класс logical. Нужно использовать функцию i s l o g i c a l , чтобы проверить принадлежность к этому классу. Примеры применения этой функции: 455
Глава 10. Типовые средства программирования » Х=[1 2 3 ] ; >> isa(X,'char') ans = О » isa(X,'double') ans = 1
10.7.5. Другие функции объектно-ориентированного программирования Для получения списка методов данного класса объектов сейчас чаше используются функции methodsview и methods. Отличиями от what имя класса является то, что эти функции возвращают информацию также и о классах Java, но информация выводится в отдельном окне, не сообщается информация о папках, все методы из всех папок собраны вместе и повторяющиеся имена методов удалены: • methodsview имя класса или methods имя класса - f u l l — В отдельном окне возвращают полное описание методов класса, включая информацию о наследовании, а для классов Java — и о подписях и атрибутах; • M=methods ('имя к л а с с а ' , ' - f u l l ') - возвращает ту же информацию в массиве ячеек м; • M=methods (' имя класса ') — возвращает массив ячеек с перечислением методов, относящихся к заданному классу объектов; • methods имя класса возвращает перечень методов в отдельном окне. Например: >> methods char Methods for class char: delete diffint Следующие две функции могут использоваться только внутри конструкторов классов: inferiorto('CLASS1','CLASS2',...) superiorto('CLASS1','CLASS2',...)
и
Они определяют низший и высший приоритеты классов по отношению к классу конструктора. Для дескрипторов перегружаемых функций существует функция functions F=functions (дескриптор функции), возвращающая массив структур F.METHODS, вложенный в массив F, при этом именем поля в массиве F.METHODS является имя класса, а значением поля — название метода, который вызывается тогда, когда входной аргумент принадлежит этому классу. Дополнительно functions возвращает следующие структуры: F.function — строка, используемая для создания дескриптора функция (существует также отдельная функция func2str для получения этой информации и обратная ей функция str2func, превращающая строку в дескриптор функции); F.type содержит simple (простая), overloaded (перегружаемая) или subfunction (подфункция), т. е. указывает тип функции; F.default указывает путь к тому файлу, который первый в алгоритме поиска MATLAB и не определен никаким классом. 456
10.8. Handle- и inline-функции Функция which имя метода находит загруженный Java-класс и все классы MATLAB, которым принадлежит данный метод,; Функция which - a l l имя метода находит все классы, которым принадлежит данный метод. Любой оператор в системе MATLAB можно переопределить (т. е. сделать его функцию перегружаемой) путем задания m-файла с новым именем в соответствующем каталоге классов. В частности, в Главе 8 отмечалось, что все арифметические операторы имеют представления в виде соответствующих функций. При написании книги не ставилась цель детального знакомства с техникой объектно-ориентированного программирования. Дополнительные сведения имеются в книге [49], содержащей перевод фирменного описания раздела по объектно-ориентированному программированию. Поэтому ограничимся приведенным выше справочным описанием его средств.
10.8. Handle- и inline-функции 10.8.1. Задание handle-функции MATLAB позволяет создавать особые объекты, называемые handle-функциями (дескрипторными функциями). В этих функциях могут использоваться все объекты структурного программирования. Для конструирования handle-функции используется описатель в виде единичного символа @. Создадим, к примеру, handle-функцию с именем fhsin, вычисляющую значение синуса: » fhsin=@sin fhsin = @sin
В том, что эта функция вовсе не обычная функция sin(x), убеждает следующий пример на неудачную попытку вычисления значения sin(l): » fhsin=(l) ans = @sin
Нетрудно заметить, что вычисления не произошло и просто выдано определение handle-функции. Итак, handle-функция характеризуется своим именем — в нашем случае fhsin. Однако она не имеет списка параметров в круглых скобках (в общем случае handle-функция может иметь несколько аргументов). На имена handle-функций накладываются те же ограничения, что и на имена функций в виде m-файлов. В частности, число допустимых символов в имени не ограничено, но интерпретатор MATLAB распознает только до 31 символа (надо быть большим чудаком в программировании, чтобы использовать имена с большим числом символов). С помощью команд save и load можно записывать handle-функции на диск и считывать их в рабочую область.
10.8.2. Вычисление и применение handle-функций Для вычисления handle-функций служит функция feval (fhandle,
a l , a 2 , a3,...)
457
Глава 10. Типовые средства
программирования
Здесь???? — имя handle-функции без описателя @, al, a2, аЗ, ... — список аргументов handle-функции. Теперь мы можем вычислить нашу handle-функцию: » feval(fhsin,1) ans = 0.8415 Можно также построить график handle-функции, например, в нашем случае используя команду: » plot(feval(fhsin,0:.01:2*pi)) Handle-функция часто используется в качестве функции пользователя — см. примеры в Главе 1, помещенные в разделе функций пользователя.
10.8.3. lnline-функции Как уже отмечалось в Главе I, в MATLAB имеется еще один важный класс функций, способных задавать функции пользователя. Это так называемые inliпе-функции: g = inline(expr) g = inline(expr,n)
g =
inline(expr,argl,arg2,...)
Здесь expr — выражение, al, a2, ... — аргументы, п — число параметров вида Pl,p2, ... В функциях пользователя особенно удобно задавать expr в виде строкового выражения в апострофах. Например: >> sc2=inline ( 'sin(x) . Л 2 + соз (у)Л.2') sc2 = Inline function: sc2(x,y) = sin (x) . A 2 + cos(у) . Л 2 В апострофах определения inline могут быть записаны любые допустимые математические выражения, что открывает простор для задания функций пользователя на основе этих выражений. 10.8.4. Преобразования handle- и inline-функций На основе inline-функций можно создавать handle-функции. Например: >> fh=@sc2; Для преобразования handle-функции в функцию, заданную именем, используется функция преобразования func2str. Пример: >> func2str(fhsin) ans = sin Для обратного преобразования (функции, заданной именем, в handle-функцию) служит функция преобразования str2func, например: >> str2func ( 'cos ' ) ans = @cos
458
10.9. Отладка программ Для дополнительного знакомства с особенностями применения handle-функций стоит посмотреть материалы и примеры по ним в справке MATLAB.
1 0 . 9 . Отладка программ Отладка программ — не менее серьезный этап, чем их подготовка. К сожалению, это редко учитывают начинающие программисты, ослепленные успехом работы первых простеньких программ. Однако по мере усложнения программ необходимость в средствах их отладки возрастает. Этот раздел посвящен тем средствам отладки, которые имеются в системе MATLAB.
10.9.1. Общие замечания по отладке т-файлов Основным средством отладки m-файлов в системе MATLAB является встроенный редактор/отладчик (M-File Editor/Debuger) с современным графическим интерфейсом. Однако MATLAB предусматривает основные возможности отладки и в командном режиме. Именно они и рассматриваются в данном разделе. Вообще говоря, отладка программ — процесс сугубо индивидуальный и творческий. Большинство пользователей средней квалификации обычно отлаживают программы, не обращаясь к специальным средствам отладки, требующим дополнительного времени для освоения и приобретения навыков использования. Если алгоритм решения задачи достаточно прост, то после нескольких модернизаций программы ее удается довести до нужной «кондиции», то есть заставить работать корректно. Для этого часто бывает достаточно ввести в программу режим просмотра результатов промежуточных вычислений, разблокировав их вывод снятием операторов ; (точка с запятой) или введя дополнительные переменные, значения которых отражают ход вычислений. После отладки можно вновь ввести блокирующие вывод операторы и убрать указанные переменные. Серьезная необходимость в применении средств отладки возникает при отладке сложных программ опытными программистами, которые наверняка имеют практику работы с универсальными языками программирования с использованием развитых отладочных средств.
10.9.2. Команды отладки программ Для перехода в командный режим отладки в т-файл следует включить команду keyboard. Ее можно запустить и в командном режиме: >> keyboard К» type swl switch var case {1,2,3} disp('Первый квартал') case {4,5,6} disp ('Второй квартал') case {7,8,9} disp('Третий квартал') case {10,11,12} disp('Четвертый квартал')
459
Глава 10. Типовые средства программирования otherwise disp('Ошибка в задании') end К» return >>
Признаком перехода в режим отладки становится появление комбинированного символа к». Он меняется на символ » после возврата командой r e t u r n в обычный командный режим работы. То же самое происходит при использовании команды dbquit, также прекращающей режим отладки, но прекращающей и выполнение m-файла. Если команда r e t u r n находится в самом m-файле, она прекратит его выполнение и передаст управление туда, откуда был вызван этот файл.
10.9.3. Вывод листинга m-файла с пронумерованными строками Один из способов отладки m-файлов — размещение в них точек прерывания. Однако в командном режиме нельзя задать установку таких точек с помощью курсора мыши (как в отладчике Windows)?rlo3TOMy необходимо иметь листинг программы с пронумерованными строками. Он создается с помощью команды dbtyре, действие которой иллюстрирует следующий пример: >> keyboard К>> dbtype swl 1 switch var 2 case (1,2,3) 3 disp('Первый квартал') 4 case {4,5,6} 5 disp('Второй квартал') 6 case {7,8,9} 7 disp('Третий квартал') 8 case {10,11,12} 9 disp('Четвертый квартал') 10 otherwise 11 disp('Ошибка в задании') 12 end К»
10.9.4. Установка, удаление и просмотр точек прерывания Для установки в тестируемый m-файл точек прерывания используются следующие команды: • dbstop i n M-file a t lineno — установить точку прерывания в заданной строке; • dbstop i n M-file a t subfun — установить точку прерывания в подфункции; • dbstop i n M-file — установить точку прерывания в т-файле; • dbstop i f e r r o r — установить точку прерывания при сообщении об ошибке, но не при ошибках внутри цикла try...catch; • dbstop i f a l l e r r o r — установить точку прерывания при сообщении о любой ошибке; • dbstop i f warning — установить точку прерывания при предупреждении; 460
10.9. Отладка программ • dbstop i f infnan или naninf—установить точку прерывания при результате Inf или NaN. Можно использовать упрощенный ввод этих команд без использования слов in, a t и if. При установке контрольной точки она появляется в окне редактора/отладчика m-файлов. Для удаления точек прерывания используется команда dbclear с тем же синтаксисом, что и dbstop, например: • dbclear м - f i l e a t lineno — удалить точку прерывания в заданной строке заданного файла. Команда d b s t a t u s выводит список установленных в данной сессии точек прерывания, например: К» dbstatus Breakpoint for C:\MATLAB\bin\demol.m i s on l i n e 2. Breakpoint for C:\MATLAB\bin\sd.m i s on l i n e 3.
В системе MATLAB 6 значительно изменен синтаксис программ по сравнению с предыдущими версиями. Поэтому полезно перед отладкой старых программ выполнить команду f e a t u r e ( ' o r A n d E r r o r ' , 0 ) или просто feature('orAndErr o r ' ) — для выдачи предупреждений об ошибке при выполнении тех конструкций, интерпретация которых в новой версии изменилась, feature ('orAndError ' , 1) выдает сообщение об ошибке вместо предупреждения об ошибке.
10.9.5. Управление исполнением т-файла После установки точек прерывания начинается собственно процесс тестирования m-файла. Он заключается в исполнении одного или нескольких шагов программы с возможностью просмотра содержимого рабочей области, то есть значений переменных, меняющихся в ходе выполнения программы. Для пошагового выполнения программы используется команда dbstep в следующих формах: • dbstep — выполнение очередного шага; • dbstep n l i n e s — выполнение заданного числа строк программы; • dbstep in — если следующая выполняемая строка текущего m-файла является вызовом функции из другого m-файла, эта форма позволяет перейти к первой исполняемой строке вызываемой функции и остановиться там; • dbstep out — если следующая выполняемая строка текущего m-файла является вызовом функции из другого m-файла, эта форма позволяет перейти к вызываемой функции и остановиться сразу же после ее выполнения. Для перехода от одной остановки программы к другой используется команда dbcont.
10.9.6. Просмотр рабочей области В точках прерывания пользователь имеет возможность просмотреть состояние рабочей области с помощью ранее описанных команд who и whos. Кроме того, для перемещения по рабочим областям стека вызванных функций вверх или вниз используются следующие команды: • dbdown — перемещение в стеке вызываемых функций сверху вниз; • dbup — перемещение в стеке вызываемых функций снизу вверх. 461
Глава 10. Типовые средства
программирования
Находясь в рабочей области, можно не только просматривать значения переменных, но и менять их в ходе отладки программы. С помощью команды dbstack можно просматривать стек функций. Для завершения отладки используется команда dbquit. В заключение еще раз обращаем внимание читателя на то, что все возможности отладки реализованы в редакторе/отладчике m-файлов, который характеризуется удобным графическим интерфейсом и средствами визуализации отладки программ. К ним относятся возможность выделения различными цветами элементов m-файла (ключевых слов, переменных, комментариев и т. д.), наглядное представление точек прерывания, простота их установки и т. д. Щелкнув мышью справа от колонки с номерами строк, вы можете установить/снять точку прерывания при помощи мыши в окне редактора/отладчика. После остановки в точке прерывания вы можете просмотреть значения всех переменных, подведя курсор мыши к символьному обозначению переменной в окне редактора/отладчика. В этом отношении некоторые описанные выше приемы отладки в командном режиме выглядят несколько архаично. Скорее всего, они ориентированы на пользователей, привыкших к командному режиму работы с системой. 10.9.7. Профилирование т-файлов Вообще говоря, достижение работоспособности программы — лишь один из этапов ее отладки. Не менее важным вопросом является оптимизация программы по минимуму времени исполнения или по минимуму объема кодов. Современные компьютеры, в которых используется система MATLAB, имеют достаточные резервы памяти, так что размеры программы, как правило, не имеют особого значения. Намного важнее проблема оптимизации программы в части быстродействия. Оценка времени исполнения отдельных частей программы называется ее профилированием. Для выполнения такой процедуры служит команда p r o f i l e , имеющая ряд опций: • p r o f i l e fun — запуск профилирования для функции fun; • p r o f i l e r e p o r t — вывод отчета о профилировании; • p r o f i l e p l o t — графическое представление результатов профилирования в виде диаграммы Парето; • p r o f i l e filename — профилирование файла с заданным именем и путем; • p r o f i l e r e p o r t N — вывод отчета по профилированию заданных N строк; • p r o f i l e r e p o r t fгас — выводит отчет по профилированию тех строк, относительная доля выполнения которых в общем времени выполнения составляет не менее чем f гас (от 0.0 до 1.0); • p r o f i l e on — включение профилирования; • p r o f i l e off — выключение профилирования; • p r o f i l e r e s e t — выключение профилирования с уничтожением всех накопленных данных; • INFO = p r o f i l e — возвращает структуру со следующими полями: О f i l e — полный путь к профилируемому файлу; 0 i n t e r v a l — интервалы времени в секундах; 0 count — вектор измерений; 0 s t a t e — состояние профилировщика: ' o n ' (включен) или 'off' (выключен). 462
10.9. Отладка программ Следует отметить, что средства профилирования MATLAB позволяют анализировать только m-файлы функций, но не сценариев. Чтобы получить профиль выполнения сценария, приходится преобразовывать его в функцию (как правило, не имеющую входных и выходных параметров), добавляя соответствующий заголовок function. Ниже приводится пример на профилирование m-файла e l l i p j (эллиптическая функция Якоби): >> profile on >> profile ellipj >> ellipj ( [0:0.01:1],0.5) ; >> profile report Total time in «C:\MATLAB\toolbox\matlab\specfun\ellipj.m»: 0.16 seconds 100% of the total time was spent on lines: [96 97 86] 85:if ~isempty(in) 0.01s, 6%86:phin (i,in) = 0.5 * ... 8 7: (asin (c (i + 1,in) .*sin(rem(phin(i + 1,in),2*pi)) ./a(i + 1,in)) 95: ml = find(m==l);
0.11s, 69%96: sn(ml) = t a n h ( u ( m l ) ) ; 0.04s, 25%97: en(ml) = seen (u(ml) ) ; 98: dn(ml) = s e e n ( u ( m l ) ) ; >> INFO=profile INFO = file: 'C:\MATLAB\toolbox\matlab\specfun\ellipj.m' i n t e r v a l : 0.0100 count: [98x1 double] s t a t e : 'off' >> p r o f i l e p l o t Нетрудно заметить, что при профилировании выводятся номера строк программы, у которых время выполнения превосходит 0,01 с. С использованием этого интервала и оценивается время исполнения программного кода. Последняя команда выводит графическую диаграмму профилирования, показанную на рис. 10.4. При графическом представлении профилирования по горизонтальной оси указываются номера строк, а по вертикальной — время их выполнения. Сначала показываются строки с наибольшим временем выполнения. Таким образом, программист, отлаживающий работу программы, имеет возможность наглядно оценить, где именно находятся критические по Рис. 10.4. Графическое представление быстродействию фрагменты. результатов профилирования e of eliipj m * Total й т е 0 16 s
463
Глава 10. Типовые средства программирования
10.9.8. Создание итогового отчета Для создания суммарного отчета о профилировании служит команда prof sum, которая используется в нескольких формах: • profsumm — вывод полного отчета о результатах профилирования ш-файла. Выводятся данные о времени выполнения для строк, суммарное время выполнения которых составляет 95% от общего времени (если таких строк много, выводятся данные о 10 строках, выполнение которых заняло наибольшее время); • profsumm (FRACTION) — выводит часть отчета для строк, относительное время выполнения которых составляет FRACTION (от 0.0 до 1.0) от общего времени выполнения файла; • profsumm (N) — выводится отчет по N строкам с максимальным временем выполнения; • profsumm (STR) — выводит отчет только по тем строкам, в которых встречается строковое выражение STR; • profsumm(INFO) , profsumm(INFO, FRACTION), profsumm(INFO, N) И profsumm ( I N F O , STR) — выводят итоговый отчет по строкам, заданным массивом INFO. Пример применения команды profsumm: >> p r o f i l e e r f c o r e » z = erf(0:.01:100); >> profsumm, p r o f i l e d o n e Total time i n «C:\MATLAB\toolbox\matlab\specfun\erfcore.m»: 0.16 seconds 94% o f t h e t o t a l t i m e was s p e n t on l i n e s : [99 109 108 97 95 94 92 86 71 48] 47: % 0 . 0 1 s , 6%48:k = f i n d ( ( a b s ( x ) > x b r e a k ) & ( a b s ( x ) <= 4 . ) ) ; 49:if ~isempty(k) 70:del = (y-z).*(y+z); 0 . 0 1 s , 6 % 7 1 : r e s u l t ( k ) = e x p ( - z . * z ) .* e x p ( - d e l ) .* r e s u l t ( k ) 72:end 85: 0 . 0 1 s , 6%86:y = a b s ( x ( k ) ) ; 8 7 : z = 1 ./ (y . * y) ; 91:xnum = (xnum + p ( i ) ) . * z ; 0 . 0 1 s , 6%92:xden = (xden + q ( i ) ) . * z ; 93:end 0.01s, 6%94:result(k) = z .* (xnum + p(5)) ./ (xden + q(5)); 0.01s, 6%95:result(k) = (l/sqrt(pi) - result (k)) ./ y; 96:if jint ~= 2 0.01s, 6%97:z = fix(y*16)/16; 98:del = (y-z) .*(y+z) ; 0.06s, 38%99:result(k) = exp(-z.*z) .* exp(-del) .* result(k) 100:k = find(~isfinite (result)); 107:if jint == 0 0.01s, 6% 108:k = find(x > xbreak); 0.01s, 6% 109:result(k) = (0.5 - result(k)) + 0.5; 110:k = find(x < -xbreak);
464
10.9. Отладка программ
10.9.9. Построение диаграмм Парето Команда p r o f i l e p l o t использует для построения диаграммы Парето графическую команду p a r e t o . Диаграмма Парето представляет собой столбцы, расположенные в порядке убывания отображаемых значений. С другими возможностями команды p a r e t o можно ознакомиться, выполнив команду help p a r e t o . • pareto (Y, NAMES) — строит диаграмму Парето с пометкой столбцов значений вектора Y соответствующими именами, содержащимися в векторе NAMES; • p a r e t o (Y,x) — строит диаграмму Парето для значений вектора У в зависимости от значений вектора х; • p a r e t i (Y) — строит диаграмму Парето для значений вектора у в зависимости от индексов его элементов; • [н, АХ] =pareto (...) — возвращает вектор дескрипторов графических объектов диаграммы н и их осей АХ. Пример построения диаграммы Парето был рассмотрен выше (см. рис. Ю.4).
10.9.10. Работа с системой контроля версий MATLAB поддерживает системы контроля версий кода Visual Source Safe фирмы Microsoft (вместе с Visual Studio), PVCS фирмы Merant (упрощенные версии этой системы бесплатно поступают с продуктами Borland), Clear Case фирмы Rational Software (в особенности на UNIX-Linux версиях MATLAB), RCS и имеет настраиваемый пользовательский интерфейс, так что вы можете подключить свою любимую систему. Функция cmopts выводит информацию об установленной системе контроля версий. Первоначально установленная система MATLAB реагирует следующим образом >> cmopts ans = none Для подключения PVCS или ее варианта вам нужно отредактировать т-файл cmopts.m в папке C:\matlabrl2\toolbox\local. Введите комментарий %begin customization s e c t i o n и введите на следующей строчке m-файла, если файл конфигурации проекта Proj.cfg. DefaultConfigFile='с:\\pvcs\pvcsproj\projmgrprj W P r o j . c f g ' , Проверим правильность нашей установки >> cmopts('DefaultConfigFile') DefaultConfigFile = с:\\pvcs\pvcsproj\projmgrprj\\Proj.cfg Команда checkin(filename, 'COMMENTS', Текст комментариев, OPTIONl, VALUEI, 0PTI0N2, VALUE2 ) включает ваши файлы в систему контроля версий. Filename — полный путь к файлу или строковый массив ячеек, где каждая ячейка указывает путь к файлам, Текст комментариев — массив символов, в данной версии option может быть только lock, value может быть on (замкнута) или off (позволяет доступ к файлу без checkout). Команда checkout (filename, 0PTI0N1, VALUEI, 0PTI0N2, VALUE2 ) извлекает файлы из системы контроля версий, OPTION могут быть lock - аналогично checkin - и ревизия, т. е. указание конкретной версии файла. Команда undocheckout (Filename) —отменяет действие checkout, например замыкание файлов. 465
Глава 10. Типовые средства
программирования
10.10. Общение MATLAB с операционной системой 10.10.1. Работа с папками Общение системы MATLAB с операционной системой MS-DOS многим покажется рудиментарной возможностью. Так, во время написания данной книги такое общение вообще не потребовалось. Однако это очень важно для систем, работающих в реальном масштабе времени, причем наличие, наряду с командами, вводимыми знаком «!», возможности явного задания ОС (dos, unix, vms) позволяет программировать для ОС на управляющем компьютере, отличающемся от ОС пользователя MATLAB. Так что, как говорится, из песни слов не выкинешь — MATLAB позволяет из командной строки пользоваться основными услугами старушки MS-DOS и Windows. Есть возможность общения и с другими операционными системами и даже с глобальной сетью Интернета, в том числе и с помощью собственного HTML-браузера MATLAB (браузера помощи). Для перехода в новую папку служит команда cd: • cd wd — переход в указанную папку wd; • cd (или произвольное имя переменной ad ad = cd) — возвращает строку с полным именем текущей папки; • cd . . — переход к папке, родительской по отношению к текущей. Примеры (предполагается, что MATLAB установлен на диске Е): >> cd Е:\matlabRl2\toolbox >> cd E:\matlabR12\tool ??? Name is nonexistent or not a directory >> cd E:\matlabR12\toolbox\ >> cd E:\matlabR12\toolbox Для указания пути к текущей папке может использоваться функция pwd: >> pwd ans = Е:\matlabR12\toolbox Для получения информации о содержимом текущей папки используется команда d i r : » са E:\matlabR12\toolbox\matlab >> dir datatypes funfun graphics ops specgraph v e r c t r l demos general iofunpolyfun . strfun winfun audio elfun graph2d lang s parfun timefun datafun elmat graph3d matfun specfun u i t o o l s Обратите внимание, что в последнем примере выведено содержимое подпапки matlab одной из самых важных папок системы MATLAB — TOOLBOX. В папке TOOLBOX содержатся 46 самых важных подпапок с хранящимися в них пакетами расширения системы MATLAB, например, comm — папка пакета проектирования средств телекоммуникаций, compiler — компилятор программ в коды языка С, symbolic — символьные (аналитические) вычисления и т. д. Впрочем, надо отметить, что в разных поставках системы число подпапок может различаться. 466
10.10. Общение MATLAB с операционной
системой
10.10.2. Выполнение команд !,dos, unix и vms Из командной строки MATLAB возможно выполнение команд наиболее распространенных операционных систем: • ! команда — выполнение заданной команды из набора операционной системы, в среде которой установлена система MATLAB; • dos команда — выполнение заданной команды из набора команд MS-DOS или установленной ОС семейства Windows, в последнем случае команда выполняется в фоновом режиме; Выведем блокнот Windows для редактирования т-файла. dos 'notepad myfile.m1 ИЛИ
[s w]=dos('notepad myfile.m 1 ) s = 0, когда команда выполнена успешно, в противном случае s = I, w содержит сообщение DOS. • unix команда — выполнение заданной команды из операционной системы UNIX или UNIX-подобных систем (версии Linux ); • vms команда — выполнение заданной команды из операционной системы VMS (Open VMS).
10.10.3. Общение с Интернетом из командной строки Для общения с Интернетом служит команда web: • web спецификация — дает связь с Web-сервером. Полезно отметить, что команда web с параметром -browser (например, web http://www.raathworks.com -browser) вызывают вместо браузера помощи MATLAB браузер HTML, установленный в ваших настройках операционной системы Windows как браузер по умолчанию. В UNIX (Linux) браузер, вызываемый командой web с параметром —browser, определяется командой MATLAB [doccmd, options, ] = docopt, где doccmd — наименование браузера, например netscape, вместо options можно подставить параметры браузера. Можно также отредактировать файл docopt в каталоге matlabrl2/toolbox/local и указать в нем браузер по умолчанию. Примеры применения команды web: • web http://www.mathworks.com — загружает Web-страницу MathWorks Web в браузер помощи (команда support сразу открывает страницу технической поддержки MATLAB); • web m a i l t o : email_address — использует программу для отправки электронной почты, установленную по умолчанию в настройках операционной системы; • все формы команды web могут использоваться в функциях. Например, функция s = web('www.mathworks.com', '-browser') - запускает браузер Интернета операционной системы и выдает s = О, если браузер запущен, даже если браузер Интернет открывает страницу в автономном режиме (off-line) или не может ее найти, s = 1, если браузер Интернета не был обнаружен, s = 2, если браузер был обнаружен, но не был запущен. 467
Глава 10. Типовые средства
программирования
Такой выход в Интернет иначе, чем экзотикой назвать трудно, благо в Windows 95/98/Me/2000/NT4/XP есть куда более простые способы выхода в Интернет. Отнесем эту возможность к числу приятных мелочей, которых в MATLAB очень много. Например, приятной мелочью является также собственный Web-сервер MATLAB (только в версиях для Microsoft Windows NT4/2000/XP, Linux и Sun Solaris) с возможностью ограничения доступа к нему только компьютерами, перечисленными в списке файла hosts.conf.
10.10.4. Некоторые другие команды Есть еще несколько команд для общения с операционными системами: • d e l e t e name — стирание файла с заданным именем name (имя записывается по правилам операционной системы); • getenv ('name ') — возвращает значение переменной 'name' среды окружения. Пример: >> getenv('temp') ans = C:\TEMP Команда tempdir дает информацию о папке для хранения временных файлов: >> tempdir ans = С: \ТЕМР\ Еще одна команда — computer — используется в двух формах: >> computer ans = PCWIN и
>> [С S]=computer С= PCWIN S= 2.1475е+009 Во втором случае, помимо сообщения о типе компьютера, выводится максимально возможное число элементов в массивах. Оно зависит от объема памяти и свойственных операционной системе ограничений. Приведенные данные получены при использовании компьютера с процессором Pentium II, емкостью ОЗУ 128 Мбайт и установленной ОС Windows 98. Однако на ПК на новейшем Pentium 4 НТ и ОЗУ с емкостью 512 Мбайт они не изменились. Для установки типа терминала может использоваться еще одна команда — t e r m i n a l . Возможные типы терминалов можно найти в справке по этой команде, выводимой командой h e l p t e r m i n a l . На этом рассмотрение команд прямого общения с операционными системами можно считать законченным. Все эти команды могут успешно использоваться в сложных программах, задающих общение системы MATLAB с операционной системой и внешними устройствами. Разумеется, подготовка таких программ сложнее, чем программ чисто вычислительного характера, использующих только стандартные возможности системы MATLAB, как вычислительной системы. 468
10.11. Поддержка Java
1 0 . 1 1 . Поддержка Java 1 0 . 1 1 . 1 . Информация о средствах поддержки Java При прямом использовании системы MATLAB не требуется знания средств реализации системы, в частности языков программирования С и Java. Однако роль Java усиливается от версии к версии системы MATLAB. С новейшей версией MATLAB поставляется виртуальная машина Java уже версии 1.3.1. Для проверки того, какая версия Java установлена на вашем ПК, можно воспользоваться командой: >> version -java ans = Java 1.3.1_01 with Sun Microsystems Inc. Java HotSpot(TM) Client VM (mixed mode)
Для получения детальной информации о языке программирования Java и возможностях JVM можно обратиться к Интернет-сайтам: www.javasoft.com и www.java.sun.com/jdk Немало полезного можно найти в книге [83]. Однако для пользователей MATLAB большую часть необходимых сведений о поддержке Java системой MATLAB можно найти в справке. На рис. 10.5 показано окно справки по Java в разделе индексного указателя системы MATLAB 6.5. Кстати, в предшествующих реализациях этого раздела не было, что также указывает на то, что в новейшей реализации MATLAB 6.5 поддержке Java уделено существенно большее внимание. Тем не менее надо помнить, что знание Java не нужно на уровне обычной работы с системой MATLAB. Основное назначение Java и JVM заключается в представлении средств для создания пользовательского интерфейса и обработки данных (например, массивов), представленных в Java-формате. JDlXl . FSe
b S t '• View. Go • Web . Window. Help .
•JHelpJN^vigatq^ •
1
Proc*jctt#er (• A« С Selected a* .-'
•1 Contents I
Index | Search ] Demos j
Search index lor: •'•.••.•:
• ."
API class packages archive (JAR) files MATLAB - Exten ; MAILAO- Ffefei [ class names |1] MATLAB -Refer-': class names |2| MATLAB-Exten development kil Java Virtual Machine (J...MATLAB- Etten objects 11J
MATLAB • Refei
objects (2J
MATLAB- Refer
packages
MATLAG- Exteri ••
lava and MATLAB OOP
MATLAB - Progr
•ava Database Connectiv... Database Tool! lava Image class creating instance of Java import iisl
j External n Iterfaces/AP:I Can ilg Java rfom MATLAB'Usnig Ja* External n Iterfaces/API [•] [ Using Java from MATLAB: An Overview I Java Interface Is Integral to MATLAB Every n i staa l to i n of MATLAB niculdes a Java Vritual Machnie (JVM), so that you can use the Java niterpreter va i MATLAB commands, and you cai I create and run programs that create and access Java obejcts. For niformao tin on MATLAB n i staa l to i n, see the MATLAB n i staa l to in j documena toitn for your paltform Benefits of the MATLAB Java Interface
The MATLAB Java interface enables you to. • Access Java API (application programming interface) class packages that support essential activities such as I/O and networking For example, the URL class provides convenient access to resources on the internet • Access third-party Java classes • Easily construct Java objects in MATLAB • Call Java object methods, using either Java or MATLAB syntax • Pass data between MATLAB variables and Java objects
Рис. 10.5. Окно справки системы MATLAB no средствам поддержки Java
469
Глава 10. Типовые средства
программирования
1 0 . 1 1 . 2 . Java-объекты Средства Java в MATLAB представлены как Java-объекты объектно-ориентированного языка программирования MATLAB. Для знакомства со всеми этими объектами можно вызвать окно Java-объектов, исполнив команду: » methodsview Java.awt.Menultem Окно со списком Java-объектов представлено на рис. Ю.6. Для каждого объекта приводится его имя, тип возвращаемого результата и форма записи аргумента. ') Methods of da** lava-awr-MemriKem bi.jijm.Jii1:
(
J
Menultem
(
)
void
addActionListener
(
j
«oid
addNotif/ )
synchronized
void
delete Shortcut
(
>tJid
disable
0
void
dispalchEvent
O
void
enable
(
b
void
enable
{
)
boolean
equal:-
syncnronizeo
synchronized
java lang String lava lang
Class
••
lava lang.String
getLabel
lava.util.EventListenerC
getListeners
lava lang.String
getName
lava
getParenl
lava.awt.peer.MenuComponeritPee!
getPeer
lava.awt.MenuShortcut
getShortcui
mt
hashCode
boolean
isEnabled
•
a
j
a
a
v
o
a
a
o
v
.
.
a
l
a
n
g
a
w
t
.
.
a
w
t
l
e
a
n
)
.
l
a
n
g
S
e
v
A
W
.
t
r
e
T
O
i
n
n
b
g
t
E
v
e
j
e
c
j
a
v
a
A
c
t
i
n
t
t
.
o
a
n
w
L
t
i
.
s
M
t
e
e
n
n
e
u
r
S
h
o
r
t
c
u
t
)
)
)
)
getClass getFont
awt.MenuContainer
(
v
v
getActi o n C o m m a n d
lava awt Font
void .1
a
a
О .(java lang Class) О О
о
notify
• '
•
"
"
"
"
•
Рис. 10.6. Окно Java-объектов системы MATLAB Java-объекты в MATLAB можно создавать с использованием класса Java, например: >> methodsview j a v a . a w t . M e n u l t e m >> f = j a v a . a w t . F r a m e ( ' M y T i t l e 1 ) •f — java.awt.Frame[frameO,0,0,0x0,invalid,hidden, layout=;java . awt. Border Layout, r e s i z a b l e , title=My T i t l e ] Методы объектов Java могут быть вызваны как с использованием синтаксиса Java, так и синтаксиса MATLAB. Например в последнем случае: >> setTitle(f,'new title') >> t=getTitle(f) t= new title Тот же пример с использованием синтаксиса Java выглядит следующим образом: >> f.setTitle('modify title') >> t=f.getTitle modify title 4 7 0
10.11. Поддержка Java >> whos f Name Size Bytes Class f 1x1 Java.awt.Frame Grand total is 1 element using 0 bytes
10.11.3. Специфика применения Java-объектов Пользователь, рискнувший использовать средства Java, должен учитывать многочисленные тонкости как в форматах записи программных конструкций, так и в интерпретации их типов и результатов исполнения. Поясним это на простом примере задания строковой переменной, хранящей фразу, на языке MATLAB: >> s = Hello my friend! » size(s) ans = 1 16
Нетрудно заметить, что строка s здесь интерпретируется как одномерный массив с числом элементов 16. Таким образом, каждая буква фразы трактуется как элемент массива, представленный своим кодом. А теперь зададим строку string средствами Java и определим ее тип: >> string=java.lang.String('Hello my friend!') string = Hello my friend! >> size (string) ans = 1 1 Нетрудно заметить, что отдельные символы в этом случае не рассматриваются как элементы массива string. Однако мы все же можем выявить структуру массива: >> C=char(string) С=
Hello my friend! >> [m,n]=size(C)
16 whos С Name С
Size 1x16
Bytes Class 32 char array Grand t o t a l i s 16 elements using 32 bytes
Итак, используя преобразование объекта класса Java.lang.string в массив символов MATLAB, мы все же нашли число символов в строке обычными средствами MATLAB. Но, оставаясь в среде MATLAB, мы можем сделать это и средствами Java: >> string.length ans = 16 или даже так:
471
Глава 10. Типовые средства программирования >> e=j ava.lang.StringBuffer(string) e= Hello my friend! >> e.length ans = 16
Следующий пример показывает задание Java-структуры многоугольника (полигона): >> polygon=java.awt.Polygon([14 42 98 124], [55,12,-2,62],4) polygon = Java.awt.Polygon@9b6a4 6 Обратите внимание на дескриптор Java-объекта после знака @. Он не имеет жесткого значения и зависит от обстоятельств задания Java-структуры. Скорее всего, читатель, повторивший пример, получит совсем иное значение дескриптора. Для выявления структуры Java-объекта может использоваться функция s t r u c t ( o b j e c t ) , которая преобразует объект в структуру или в массив структур MATLAB с потерей информации о класса: >> struct(polygon) ans = npoints: 4 xpoints: [4x1 int32] ypoints: [4x1 int32]
Следует отметить, что задание имени объекта с большой буквы (кстати, как это задано в определении класса) ведет к ошибке, поскольку сам объект, преобразуемый в структуру по правилам MATLAB (в них регистры различаются) называется polygon: >> struct(Polygon) ??? Undefined function or variable
'Polygon'.
Эти примеры, и их можно привести множество, свидетельствуют о том, что при применении средств Java нужно знать этот язык программирования. 1 0 . 1 1 . 4 . Java-массивы Наиболее часто в практике программирования на языке MATLAB используются Java-массивы. Это связано как с широким применением их в справочной системе MATLAB, так и в Интернете и в средствах общения с внешними программами и устройствами. Java-массивы существенно отличаются от обычных массивов, применяемых в системе MATLAB. Прежде всего они одномерные, но возможно вложение массивов в массив без ограничения размерности. Однако для таких массивов функция ndims MATLAB всегда возвращает значение 2. Форма Java-массивов может отличаться от прямоугольной, т. е. число элементов в строках (рядах) и в столбцах может быть различным. В Java индексация элементов массивов идет с 0, но в MATLAB она начинается с I — как в обычных, так и в Java-массивах. Все это требует повышенного внимания к созданию и применению Java-массивов и делает их особыми объектами. Приведем пример задания прямоугольного Java-массива для чисел с двойной точностью — dblArray:
472
10.12. Программирование задач пользователя с GUI » dblArray=javaArray('Java.lang.Double',3,4) dblArray = Java.lang.Double[] [] :
Нетрудно заметить, что этот массив содержит 34 пустых ячейки. С помощью следующего фрагмента программы выполним заполнение ячеек массива: >> f o r i = l : 3 for j = l : 4
dblArray(i, j) = Java.lang.Double((i*5) + j ) ; end end Этот пример демонстрирует доступ к каждой ячейке Java-массива для занесения в нее того или иного значения — в нашем случае чисел (5*i + j). Теперь можно просмотреть весь массив или содержимое его отдельной ячейки: >> d b l A r r a y dblArray = J a v a . l a n g . D o u b l e [ ] [] : [6] [7] [8] [11] [12] [13] [16] [17] [18] >> d b l A r r a y ( 2 , 3 ) ans = 13.0
[9] [14] [19]
Из сказанного можно сделать вывод, что поддержка Java представляет интерес для системных программистов, но не для обычных пользователей, использующих MATLAB по своему прямому назначению — выполнению математических расчетов.
10.12. Программирование задач пользователя с GUI 10.12.1. Примеры программирования GUI В директории TOOLBOX/MATLAB/DEMOS можно найти множество как простых, так и сложных примеров программирования GUI для решения разнообразных задач. Доступ к этим примерам довольно прост — надо в справке выйти в раздел демонстрационных примеров Demos и подобрать нужный пример. Мы остановимся на паре характерных примеров, наглядно демонстрирующих возможности программирования задач, для визуализации которых используются элементы графического пользовательского интерфейса GUI. Доступ к одному из таких примеров представлен на рис. Ю.7. В правой части окна справки видно описание примера. В верхней строке его имеется имя файла с полным путем к нему из директории MATLAB и команда пуска примера. Активизируя гиперссылку файла, можно открыть окно редактора и отладчика m-файлов и увидеть листинг выбранного файла в этом окне. Оно также показано на рис. 10.7.
473
Глава 10. Типовые средства программирования
N avyi atat isucttser: f? Al С Seiecteti
,.---•
y - C j Graphics : :
. -ф Overview of features (I ing L-shaped rneirfcrane.
;• -Ф Plot . ••••§•• 2-D Plots
•
'--ф- 3-DPIolS
arenev ;• -$•Splash Vo u lm uazilaton -0' se reen po lt e l — •9' Klein bottle example
Щ
•§• Teapot 9
• ||
Lorenz atttacloranimati' 1 - 1
I
*» / .
. j * :
•'
'
C
-
lambda - [9.6397238445, 15.19725192, 2'pi A 2. 29.S214811, 31.9126360, 41.4745099, 44.9464
9 1 P'ots oi complex lunctio • •'Э' Visualizing sound
.5;
•§•• Line plotting
Ы
• "9- 3-D surtace plots
|
tot к . 1:12 L i V.! • meu end
•^- Axis properties ф Axis aspect ratio
'1
-§•• Earth's topography
•"
• •
|
• к - 1:12 c()t) - L{k) ( 2 5 , Z 3 ) / 3 ;
i : J -
Puc. 10.7. Доступ к одному из примеров
10.12.2. Программирование анимации поверхности с разной скоростью Файл vibes.m создает графическое окно GUI, в котором можно наблюдать анимацию некоторой поверхности. В этом окне строятся три кнопки faster (быстрее), slower (медленнее) и done (дальше) и видна меняющаяся во времени поверхность. Листинг этого m-файла с краткими комментариями представлен ниже: function vibes % Eigenvalues lambda = [9.6397238445, 15.19725192, 2*pi A 2, ... 29.5214811, 31.9126360, 41.4745099, 44.948488, ... 5*pi A 2, 5*pi A 2, 56.709610, 65.376535, 71.057755]; % Eigenfunctions for k = 1:12 L{k) = membrane(k); end % Get coefficients from eigenfunctions. for k = 1:12 c(k) = L{k} (25,23)/3; end % Set graphics parameters, fig = figure; set ( fig, 'color', 'k') x = (-15:15)/15; h = surf(x,x,L{1}); La,ej = view; view(a+270,e); axis([-l 1 - 1 1 - 1 1 ] ) ; caxis (26.9*[-1.5 1 ] ) ; coiormap(hot); axis off % Buttons 474
10.12. Программирование задач, пользователя с GUI uicontrol ( 'pos', [20 20 60 20],'string','done','fontsize',12, ... 'callback', 'close (gcbf) ' ) ; uicontrol('pos', [20 40 60 20],'string','slower','fontsize',12, ... 'callback', 'set(gcbf, ' 'userdata' ',sqrt (0.5)*... get(gcbf,''userdata''))'); uicontrol ('pos', [20 60 60 20],'string','faster','fontsize',12, ... 'callback','set(gcbf,''userdata'',sqrt(2.0)*get(gcbf,''userdata''))'); % Run t = 0; dt = 0.025; set (fig, 'userdata',dt) while ishandle (fig) % Coefficients dt = get (fig, 'userdata'); t = t + dt; s = с*sin(sqrt(lambda)*t); % Amplitude A = zeros(size(L{l})); for к = 1:12 A = A + s(k)*L{k}; end % Velocity s = lambda .*s; V = zeros(size(L{1))); for к = 1:12 V = V + s (к) *L{ k} ; end V(16:31,l:15) = NaN; % Surface plot of height, colored by velocity. set (h, 'zdata',A, 'cdata',V); drawnow end; Читателю несложно разобраться с этим простым примером. Вид окна GUI для этого примера представлен на рис. 10.8. Все три кнопки этого примера — действующие.
Рис. 10.8. Окно GUI примера на анимацию поверхности 475
Глава 10. Типовые средства программирования 10.12.3. Программирование визуализации звукового сигнала Теперь рассмотрим еще один пример — на визуализацию звукового сигнала. В этом примере используется целый ряд элементов GUI, включая кнопки, раскрывающиеся списки и слайдер. Листинг файла xpsound.m с короткими комментариями, поясняющими действие фрагментов программы, представлен ниже: function xpsound(action); global SD_V0LUME SD_NAMES SD_DISP SD_PLOTCMD global funcs func_titles if nargin < 1, action = 'initialize'; end; if strcmp(action,'initialize') oldFigNumber=watchon; % Set all the global variables comp=computer; if comp(1:2)-='PC & comp(1:2)~='MA', SD_NAMES = [ 'chirp ' 'gong ' 'handel '... 'splat ' 'train ' 'laughter']; else SDJNAMES = [ 'chirp ' 'splat ' 'train ' ] ; end; SD_PLOTCMD = str2mat('plot(t,y); xlabel(''Time in seconds'');',... ['p=spectrum(y,1024);specplot(p,Fs); h=get(gca,''children'');',... ' delete (h (1: 2) ) ;xlabel (''Frequency in H e r t z " ) ; ' ] ; ••• ['specgram(y);set (gca, ' 'XTickLabel'',[]);', ... 'set (gca, ''YTickLabel'',[]);xlabel(''Time'');',... 'ylabel (' 'Frequency' ' ) ; ' ] ) ; SD^DISP = 1; S = brighten([[zeros (8,2) (3:10) '/10]; prism(56)],1/3); if (get (0, 'ScreenDepth') = = 1 ) S = gray(64); end % specify functions funcs = str2mat('Fs=8192;t=0:1/Fs:2;... у = (sin(300*2*pi*t)+sin(330*2*pi*t))/2;',... 'Fs=8192;t=0:l/Fs:2;y = sin (2*pi*440*erf (t)); ' ) ; func_titles = str2mat(' (sin (a*t)+sin (b*t))/2',... 'sin(c*erf (t)) ' ) ; figNumber = ... figure('colormap', S,'visible','on','NumberTitle','off', ... 1 Name', 'Sound', 'pointer', 'watch'); wids = 0.26; axes ('position',... [0.1 .22 .9*(.9-wids) .68], 'vis','off'); g
__,
.
__ —
% Information for all buttons labelColor=192/255* [1 1 1 ] ; top=0.92; bottom=0.06; left=0.75; yInitLabelPos=0.90; left=0.73; labelWid=0.23; labelHt=0.053; btnWid=0.23; btnHt=0.0535; % Spacing between the label and the button for the same % command btnOffset=0.003; % Spacing between the button and the next command's label spacing=0.055;
476
10.12. Программирование задач пользователя с GUI
% The CONSOLE frame frmBorder=0.02; yPos=0.05-frmBorder; frmPos=[left-frmBorder yPos btnWid+2*frmBorder ... 0.9+2*frmBorder]; 1 h=uicontrol ( 'Style , 'frame', 'Units','normalized', ... 1 Position',frmPos, 'BackgroundColor ' , [0.5 0.5 0.5]); % The SOUND command popup menu % Menu label info btnNumber=l; yLabelPos = top-(btnNumber-1)*(btnHt + labelHt + spacing) ; labelPos=[left yLabelPos-labelHt labelWid labelHt]; uicontrol ( 'Style','text', 'Units','normalized',... 'Position',labelPos, 'BackgroundColor',labelColor, .. . 1 HorizontalAlignment', 'left' , 'String',' Sound'); % Pop-up menu info btnPos=[left yLabelPos-labelHt-btnHt-btnOffset... btnWid btnHt]; if comp(l:2)~='PC' & comp(1:2)~='MA', popupStr = str2mat(' Bird chirps',' Chinese Gong',... ' Hallelujah', ' Dropping Egg 1 ,' Train Whistle',... 1 Laughter',' Beats',' FM'); else popupStr = str2mat(' Bird chirps', ... ' Dropping Egg',' Train Whistle',' Beats',' FM'); end; uicontrol('Style','popup', 'Units','normalized',... 'Position', btnPos, 'String',popupStr,... 'Callback','xpsound(''sound'')'); g
.
_^
% The DISPLAY command popup menu % Menu label info btnNumber=2; yLabelPos=top- (btnNumber-1)*(btnHt+labelHt+spacing) ; labelPos=[left yLabelPos-labelHt labelWid labelHt]; uicontrol( 'Style','text', 'Units','normalized', 'Position',labelPos, ... 'BackgroundColor',labelColor, 'HorizontalAlignment','left', 'String',' Display'); % Pop-up menu info btnPos=[left yLabelPos-labelHt-btnHt-btnOffset... btnWid btnHt]; % Signal Processing Toolbox is on the path if exist ('specgram') uicontrol('Style','popup', 'Units',... 'normalized', 'Position', btnPos, ... 'String',str2mat('Time Sequence','Spectrum',... 1 Spectrogram'), 'Callback', 'xpsound ( ' 'display'')'); % Signal Processing Toolbox is not on the path
477
Глава 10. Типовые средства программирования else uicontrol('Style','text', 'Units','normalized', ... 'Position', btnPos, 'String',str2mat('Time ... Sequence')); end; % The PLAY button btnNumber = 3; yLabelPos=top-(btnNumber-1)*(btnHt+labelHt+spacing); btnPos=[Ieft yLabelPos-labelHt-btnHt-btnOffset... btnWid 2*btnHt]; btnHndl=uicontrol ( 'Style', 'pushbutton', 'Units', 'normalized', 'Position', btnPos,.1 String',-•• 'Play Sound', 'Callback','xpsound(''play'')'); % use try-catch to hide the PLAY button if sound is % unavailable soundFlag= 'on'; eval ( ' sound (0) ' , ' soundFlag= " o f f " ; 1 ) ; set (btnHndl, 'Visible',soundFlag) ; % The INFO button uicontrol ( 'Style', 'pushbutton', 'Units', ... 'normalized', 'Position',[left bottom+2*btnHt+spacing... btnWid 2*btnHt], 'String','Info', Callback',... 'xpsound(''info'')'); % The CLOSE button uicontrol( 'Style','pushbutton', 'Units','normalized', 'Position',[left bottom btnWid 2*btnHt], 'String',... 'Close ', 'Callback', 'xpsound(' 'close'')'); % The VOLUME slider SD_VOLUME = uicontrol( 'Units','normal',... 'Position',[0.125 .09 .8*(.9-wids) .04], ... 1 Style','slider', 'Visible',soundFlag, ... 'Mm',0.01, 'max',1, 'Value', IK'S label volume control pos = [0.55 0.04 0.15 0.04] ; 1 uicontrol('style , 'text', 'Units', 'normal', . . . 'Position',pos,'String','Volume', 'BackgroundColor',... get(gcf,'color'), 'Visible',soundFlag,... 'ForegroundColor', get(gca,'xcolor'),'Horizontal',... 'left'); % Initialize the demo to Bird Chirps with Time Sequence % set(gcf,'pointer','watch'); drawnow; load ( 'chirp', 'Fs', 'у') ; y=y/max(abs(y));t= (0:length (y)-1)/Fs; set(gcf,'UserData',[t(:) у(:)]); n = SD_DISP; eval ( [SD__PLOTCMD(n, :) ] ) ; title([int2str(length (y) ) ' Samples 1 ]); drawnow; set(gcf,'pointer','arrow'); watchoff(oldFigNumber); % END of INITIALIZE section % Sound callback, elseif strcmp(action, 'sound')
478
10.12. Программирование задач пользователя с GUI hndl=gco; popStr=get(hndl,'String'); value=get (hndl, 'Value'); selectStr=deblank(popStr (value, :)); nfiles = size(SD_NAMES,1); 1 set (gcf, 'pointer , ' watch ' ) ; .drawnow; % Load file, if available. Otherwise, use FUNCS to do a % fnct evaluation if value <= nfiles file = SD_NAMES(value,:); % get rid of extra blanks in filename file(file == ' •) = []; load(file,'Fs','y'); y=y/max(abs(y));t=(0:length (y)-1)/Fs; else eval(deblank(funcs(value-nfiles,:))); end set(gcf, 'UserData', [t ( :) у (:)]); n = SD_DISP; eval([SD_PLOTCMD(n,:)]); if value <= nfiles title([int2str(length(y)) ' Samples']); else title(deblank(func_titles(value-nfiles, : ) ) ) ; end drawnow; set (gcf, 'pointer', 'arrow') ; 9 6 Display callback, elseif strcmp(action,'display') hndl=gco; popStr=get(hndl,'String'); value=get (hndl,'Value'); selectStr=deblank(popStr(value, :)) ; Fs = 8192;% Sampling rate is the same for all files! SD_DISP = value; у = get (gcf,'UserData'); if -isempty (y),t = y(:,l); у = y(:,2); set(gcf,'pointer','watch');drawnow; titl = get (get(gca, 'title'), 'String'); eval([SD_PLOTCMD(value, : ) ] ) ; 1 set(gcf, 'pointer , 'arrow'); title (titl),drawnow,end; % Play callback, elseif strcmp(action,'play') set(gcf,'pointer','watch 1 ); try, Fs = 8192; % Sampling rate is the same for all files! dat = get(gcf,'UserData 1 ); у = dat(:,2); sound (y*get (SD__VOLUME, 'value'), Fs) ; catch end set(gcf, 'pointer', 'arrow'); elseif strcmp(action,'info'), helpwin(mfilename) elseif strcmp(action,'close'), close (gcf) ;
479
Глава 10. Типовые средства программирования c l e a r g l o b a l SD_VOLUME SDJSIAMES SD_DISP SD__PLOTCMD; c l e a r g l o b a l funcs f u n c _ t i t l e s ; end; Окно этого примера показано на рис. 10.9. lm £drt Veiw n Isert loot*tfn idow Hep l : 13129 Sample»
500
2000 2500 3000 Frequency in Heru
Э500
4000
4500
Рис. 10.9. Окно GUI примера на анимацию поверхности Стоит еще раз обратить внимание читателей на то, что в MATLAB имеется огромное число примеров на решение самых разнообразных задач с применением техники GUI. Поэтому у достаточно настойчивого читателя опыт программирования таких задач, без сомнения, будет успешным.
480
Глава 11. Обзор расширений MATLAB 1 1 . 1 . Состав расширений MATLAB 1 1 . 1 . 1 . К л а с с и ф и к а ц и я р а с ш и р е н и й с и с т е м ы MATLAB+Simulink Система MATLAB поставляется совместно с главным расширением Simulink, обеспечивающим визуально-ориентированную подготовку имитационных моделей систем различного назначения и ^ ^ выполнение их моделирования. По MATLAB Extension существу это расширение является • MATLAB Compiler неотъемлемой частью системы MAT• MATLAB C/C++ Math Libraries LAB + Simulink, полная структура • MATLAB Web Serwer компонентов которой представлена • MATLAB Report Generator на рис. I l.l. В соответствии с фирменными Toolboxes наименованиями расширения систе• Control System • Communication мы MATLAB входят в большой «ин• Database струментальный ящик» Toolbox, a • Financial расширения Simulink в блок расши• Frequency Domain System Identification рений Blockset. Версии расширений • Fuzzy Logic различны для разных версий системы • Higher Order Spectral Analysis MATLAB + Simulink. Представлен• Image Processing ный на рис. ll.l набор расширений • LMI Control • Model Predictive Control является типовым и достаточно пол• ц-Analysis and ным. Однако для различных поставок Synthesis • NAG® Foundation системы MATLAB + Simulink он моSimulink Extension • Neural Network жет существенно отличаться от при• Simulink Accelerator • Optimization веденного — как правило, в сторону • Real-Time Workshopr • Partial Differenzial • Real-Time Wn i dows Equation уменьшения числа пакетов расширеTarget • QFT Control Design ния. Следует учитывать, что многие • Robust Control • Stateflow® • Signal Processing Blocksets пакеты расширения стоят дорого, по• Spline • DSP этому при легальном их применении • Statistics • Fixed-Point • Sumbolic Math «аппетиты» по их закупке приходится • Nonlinear Control Design • System Identification • Power Systems заметно ограничивать. • Wavelet В настоящее время сравнение различных реализаций системы MATPuc. 11.1. Структура системы LAB + Simulink по вариантам версий MATLAB + Simulink (реализация 13) пакетов расширения становится практически бесполезным — корпорация MathWorks так быстро меняет состав и версии пакетов расширения, что в них можно легко запутаться даже самому искушенному пользователю. Ниже рассматриваются только избранные пакеты расширения, вошедшие в версию системы MATLAB 6.5 SPl + Simulink 5.1. Для новейшей реализации MATLAB 7 + Simulilk 6 отмечаются лишь наиболее важные отличия. 1 1 . 1 . 2 . Г л а в н ы й п а к е т р а с ш и р е н и я Simulink 5/6 Главное расширение системы MATLAB 6.5/7 — Simulink 5/6 служит для имитационного моделирования моделей, состоящих из графических блоков с заданны481
Глава 11. Обзор расширений MAT LAB ми свойствами (параметрами). Компоненты моделей, в свою очередь, являются графическими блоками и моделями, которые содержатся в ряде библиотек и с помощью мыши могут переноситься в основное окно и соединяться друг с другом необходимыми связями. В состав моделей могут включаться источники сигналов различного вида, виртуальные регистрирующие приборы, графические средства анимации. В системе MATLAB 6.5 SP1 используется версия пакета расширения Simulink 5.1. Ее основные отличия от версии Simulink 4 следующие: • • • • •
добавлен раздел библиотек Model Verifucation (верификация моделей); добавлен раздел библиотек Subsistcms (субсистемы); добавлен блок создания сигналов; расширена библиотека дискретизируюших устройств; улучшена выделением цвета индикация некорректных циклов и условий ветвления; • улучшена работа редактора масок и диагностического вьювера; • введена возможность ввода в блоки специальных символов и греческих букв. Для начала работы с Simulink 5.1 достаточно активизировать кнопку Simulink в панели инструментов (см. рис. 2.7). Откроется окно браузера библиотеки Simulink Library Browser, показанное на рис. 11.2 внутри окна системы MATLAB. Пакет Simulink основан на визуально-ориентированном программировании решаемых задач моделирования. Построение блочных схем (моделей) выполняется путем переноса мышью блоков из библиотеки компонентов в окно редактирования создаваемой пользователем модели и соединением блоков линиями. Затем модель запускается на выполнение (кнопкой в виде темного треугольника в панели инструментов). Е Using Toolbox Path Cache.
% ? Curentftrectc" '
Type "help toolbox; c ^ ^ -Щ
» ver HATLAB Version 6.5.1.199709 (F.13) S HATLAB License Humbei: 0
Wink
Щ
Aerospace Sodcset
Ц
CDMA Reference Blodset
•ice Paclc
f: DSP isugss B glockset
Java VH Version: Java 1.3.1_01 with Siin Hictosy
Щ
Embedded
get for Motorola MPCS5S
| ^ Embedded
HATLAB i d ink
Щ
Ftxed-P
Щ
Fuziv Logic Toolbox
Щ
MPC Blocks
•Щ
NCD Btocksei
Щ> Neurai Network Biodrset
unications Toolbox onttol System Toolbox
%t Real-Tme WindQ'/ra Target i - Щ Reel-Time Workshop Щ 1
Report Generator
•• ^ ' S-fwcQ&ti demos
erS /stems i- Щ
Embedded Та Excel Link
Щ
Simulink Extras Statefiow
I Щ
System ID Biocks
!- Щ
Virtual Reality Toolbox
! Щ
vF-C Target
в
+LMo-okUha-tpOTpaeobaerintlss
ModelVe h trcaUor Mod W -eid*i Lc fB eis t ш Po st 4 Subs S > m «' s Sg ira .i M nie D tjsi S gina; Ro n u g it П.
ф Start j
. 11.2. Вызов окна библиотеки блоков Simulink (версия 5) 482
11.2. Примеры работы с Simulink
1 1 . 2 . Примеры работы с Simulink 1 1 . 2 . 1 . Пример моделирования системы Ван-дер-Поля С помощью кнопки Open в панели инструментов MATLAB или Simulink можно вызвать обычное для Windows-приложений окно загрузки файлов и загрузить одну из моделей множества демонстрационных примеров на моделирование с помощью Simulink. На рис. П.З представлено окно выполнения контрольного примера на решение дифференциального уравнения Ван-дер-Поля. •-.
!
•:•;
• • • : •
•
о а а я
•
• • '
> . . . :
:
••:•
* ч» ••
гГ *
van der Pol EquaEion
J
3
^
I
IDI xi EL" Э
Щ
1
I
i
I
1
Рис. 11.3. Пример моделирования нелинейной системы системы Ван-дер-Поля Двойной щелчок мышью на блоке модели выводит окно со списком его параметров, которые пользователь может менять. Запуск имитации обеспечивает математическое моделирование построенной модели с наглядным визуальным представлением результатов. Simulink составляет и решает уравнения состояния модели и позволяет подключать в нужные ее точки разнообразные виртуальные измерительные приборы. Поражает наглядность представления результатов моделирования. Основным нововведением в Simulink 4 стала обработка матричных сигналов. Добавлены отдельные пакеты повышения производительности Simulink, такие как Simulink Accelerator для компиляции кода моделей, Simulink profiler для анализа кода и др. В разделе приложений Simulink 5 имеются пакеты расширения, относящиеся к разделу Blockset и небольшое число пакетов расширений из «ящика инструментов» Toolbox. Это те пакеты, которые могут работать совместно с Simulink. Одной из замечательных особенностей Simulink является возможность создания моделей из блоков, содержащих встроенные подмодели (субблоки). Рис. 11.4 дает пример на использование этой возможности, входящий в число демонстрационных примеров последней версии Simulink 5. 483
Глава 11. Обзор расширений MAT LAB Ш
„
Рис. 11.4. Пример моделирования для модели с субблоками В этом примере в основной модели используются два субблока для выполнения операций вычисления абсолютного значения сигнала Abs и задания его ограничения Saturation. Субблоки представлены над схемой основной модели. Они отличаются от основной модели только наличием портов ввода In и вывода Out. С их помощью субблоки подключаются к основной модели. Справа показаны осциллограммы работы модели после ее запуска. 11.2.2. Nonlinear Control Design Blockset Пакет Nonlinear Control Design (NCD) Blockset реализует метод динамической оптимизации для проектирования систем управления. Этот инструмент, разработанный для использования с пакетом Simulink, автоматически настраивает системные параметры, основываясь на определенных пользователем ограничениях на временные характеристики. Рис. П.5 показывает пример работы с этим пакетом. В данном случае вычисляются параметры интегрирующе-дифференцирующего устройства (PID-регулятора), переходная характеристика которого имеет колебательный характер и перед оптимизацией явно выходит за пределы заданных ограничений. При пуске модели параметры PID-регулятора автоматически меняются так. чтобы его переходная характеристика попала в заданные области ограничений. Исходная и оптимизированная переходные характеристики представлены на рис. 11.5. Пакет NCD использует перенос объектов мышью для изменения временных ограничений прямо на графиках, что позволяет легко настраивать переменные и указывать неопределенные параметры, обеспечивает интерактивную оптимизацию, реализует моделирование методом Монте-Карло, поддерживает проектирование SISO- (один вход — один выход) и MIMO-систем управления, позволяет моделировать подавление помех, слежение и другие типы откликов, поддерживает проблемы повторяющегося параметра и задачи управления системами с запазды484
11.2. Примеры работы с Slmulink
Hep l Navg iator > Product filter. {• Al С See lcted ! •.•-:; I : Cortents ! tnde* j Search Demos ] fa ;|: -y- Radar trackn ig demonst. 'A : • . •-§• Generan tig an optc ial m i; ; ]
lie £dt %m S^uldt О
i^ У В
Fernet Iods ttefe» ••••' '. •
•
n c d d e m o l (Simu
•$• Hydraulic Svstern МсмЧн?.
!
-
•
-ф- Ли traffic control radar Oe;
| '
- i j ' Lunar Module digital auto - 9 - Three degrees of freedon
':
|
:
-g. Electrohydraulic Servome^" j
;
:••'•• Щ Blocksets :
••*' Щ CDMA Reference
|
in Щ Communications
• ; . |
• | "
И %
! .;
w %, Developer's K i t f o r T e x a s tnst
DSP
i-i
i •.:;
i*t l¥ Dials & Gauges
1
i-l Jft Nonlinear Control D e s i g n
• • •
ft
Fixed Point
• -Q LQR with Feedforward Cc.:. • § - MIMOP! Controller •ф. Inverted Pendulum on T r f . \-Щ
Real-TimeWorkshop
! % Stateftow
Puc. //.5. Пример моделирования PID-регулятора с помощью пакетов Simulink и NCD ванием, позволяет осуществлять выбор между удовлетворенными и недостижимыми ограничениями. 1 1 . 2 . 3 . Digital Signal Processing (DSP) Blockset Пакет прикладных программ для проектирования устройств, использующих процессоры цифровой обработки сигналов. Это прежде всего высокоэффективные цифровые фильтры с заданной или адаптируемой к параметрам сигналов частотной характеристикой (АЧХ). В частности, это могут быть фильтры с конечной и бесконечной импульсной характеристиками. Результаты моделирования и проектирования цифровых устройств с помощью этого пакета могут использоваться для построения высокоэффективных цифровых фильтров на современных микропроцессорах цифровой обработки сигналов. В качестве примера применения пакета DSP на рис. II.6 представлен пример осуществления короткого (именуемого также оконным) быстрого преобразования Фурье. Этот вид преобразований позволяет анализировать нестационарные сигналы за счет вычисления спектра в разных временных окнах. Благодаря этому можно строить сложные спектры в области «частота—время», которые обеспечивают детальный анализ особенностей сигналов, недоступный для обычного быстрого преобразования Фурье. Альтернативой короткому быстрому преобразованию Фурье в наше время являются вейвлет-преобразования, которые предполагают разложение произвольного сигнала по новому базису «коротких волн» [86]. Он представлен совокупностью коротких волновых пакетов — вейвлетов, которые способны перемещаться по времени и масштабироваться (сжиматься и расширяться по оси времени t или по оси х). Ограниченный набор средств вейвлет-преобразований включен и в пакет DSP.5. 485
Глава 11. Обзор расширений MAT LAB Рисунок 11.7 показывает технику осуществления дискретных диадических быстрых вейвлет-преобразований на основе алгоритма Малла, реализованного в частотной области с помощью банков вейвлет-фильтров. Этот пример иллюстрирует
Puc. 11.6. Пример осуществления быстрого (оконного) преобразования с применением пакетов Simulink и DSP Blockset
Фурье
О ; и: g fi tP.rt.ctR.c.n.tructlon
' \ t
L
Рис. 11.7. Пример осуществления прямого и обратного сигнала типа «визг»
486
вейвлет-преобразований
11.2. Примеры работы с Simulink прохождение явно нестационарного сигнала (типа «визг»), представляющего собой амплитудно- и частотно-модулированную синусоиду с шумовой компонентой, через фильтры, задающие вначале прямое, а затем обратное вейвлет-преобразование. В результате этого сигнал восстанавливается абсолютно точно. На это указывает полное соответствие графиков сигналов на входе и выходе, а также нулевое значение погрешности для любого значения времени. Таким образом, в данном случае осуществляется разложение сигнала и затем его точная реставрация. Куда более обширной реализации вейвлет-преобразований посвящен пакет расширения Wavelet Toolbox [45, 86]. 11.2.4. Пакет расширения Fixed-Point Blockset Этот специальный пакет ориентирован на моделирование цифровых систем управления и цифровых фильтров в составе пакета Simulink. Специальный набор компонентов позволяет быстро переключаться между вычислениями с фиксированной и плавающей запятой (точкой). Можно указывать 8-, 16- или 32-битовую длину слова. Пакет обладает рядом полезных свойств: • • • • • • •
применение беззнаковой или двоичной арифметики; выбор пользователем положения двоичной точки; автоматическая установка положения двоичной точки; просмотр максимального и минимального диапазона сигнала модели; переключение между вычислениями с фиксированной и плавающей точкой; коррекция переполнения; наличие ключевых компонентов для операций с фиксированной точкой, включая сложение, вычитание и умножение, запаздывание, суммирование; • логические операторы, одно- и двумерные справочные таблицы. Основное назначение этого пакета — создание оптимизированных фильтров и устройств, в максимальной степени использующих аппаратные возможности ПК. 1 1 . 2 . 5 . Пакет расширения Stateflow Stateflow — пакет моделирования событийно-управляемых систем, основанный на теории конечных автоматов. Этот пакет предназначен для использования вместе с пакетом моделирования динамических систем Simulink. В любую Simulink-модель можно вставить Stateflow-диаграмму (или SF-диаграмму), которая будет отражать поведение компонентов объекта (или системы) моделирования. SF-диаграмма является анимационной. По ее выделяющимся цветом блокам и связям можно проследить все стадии работы моделируемой системы или устройста и поставить его работу в зависимость от тех или иных событий. Рисунок П.8 иллюстрирует моделирование поведения автомобиля при возникновении чрезвычайного обстоятельства на дороге. Под моделью автомобиля видна SF-диаграмма (точнее, один кадр ее работы). Пакет Stateflow значительно расширяет возможности моделирования сложных систем, содержащих специальные типы данных, например, динамически изменяющиеся очереди. Кстати, построение такой очереди видно сверху SF-диаграммы, приведенной на рис. 11.8. Для создания SF-диаграмм пакет имеет удобный и простой редактор, а также средства пользовательского интерфейса. 487
Глава 11. Обзор расширений
MATLAB
Puc. //.S. Моделирование поведения автомобиля с применением SF-диаграммы 1 1 . 2 . 6 . П а к е т р а с ш и р е н и я SimPower S y s t e m SimPower System (ранее Power System Blockset) — новый пакет моделирования мощных энергетических (в основном электротехнических) систем, таких как линии передачи, силовые ключи, регуляторы напряжения и тока, устройства управления электродвигателями различного типа и нагревательными системами. Пакет органично связан с расширением Simulink, имеет свою библиотеку компонентов и позволяет проектировать и моделировать мощные устройства на уровне их функциональных и даже принципиальных электрических схем — см. пример на рис. П.9. Этот пакет обеспечивает моделирование широкого спектра энергетических систем и устройств — начиная с анализа простейших электрических цепей и кончая моделированием сложных преобразовательных устройств и даже целых электрических систем. Результаты моделирования отображаются разнообразными виртуальными измерительными приборами, такими как графопостроители, осциллографы и др.
11 . 2 . 7 . R e p o r t G e n e r a t o r для MATLAB и Simulink Генераторы отчетов — средство, введенное еще в MATLAB 5.3.1, дает информацию о работе системы MATLAB и пакета расширения Simulink. Это средство очень полезно при отладке сложных вычислительных алгоритмов или при моделировании сложных систем. Генераторы отчетов запускаются командой R e p o r t . Отчеты могут быть представлены в виде программ и редактироваться — см. пример на рис. II.10, где показано окно редактирования отчета работы Simulink. Генераторы отчетов могут запускать входящие в отчеты команды и фрагменты программ и позволяют проконтролировать поведение сложных вычислений. 488
11.2. Примеры работы с Simulink
D . С* Н S . * Ч» **
1 Ф
• U US I
*
И Is ous machine fed by PWM inve Mf* v ::! ! r p H ^ ; D : , . r : r i
"
Li
- н 1 3 , i -.
?;•
Puc. 11.9. Пример моделирования асинхронной электрической машины
C\MATUB65\o l otlo i x\rr-Jger\isn ip il ATLAB65Mootl.*i:\rLg i f\in li Jes ATLAB65VooLil> i :\r-j]li-M' w~,
"
-
3
iФ
J
| С \MATLAB65\toolbox\rpta.
P J -
Raining component Sysle Running component Syste R unning component Sj>ste RLrming component 8bck Riming component Bbck Running component Nest Running component Chart Warning (Chart Loop): repot Beginning html output trans Outpul liafisfofm complete. Output file is ТЛМАТЬЗДе File vieww foj "CAMATLABI Report comoiete
edit W^dow Heb [•|i(fisempti'ihn,W-ie'r-,[Seirr . [ j E v a l s t r i n g %& n o m o d e l : £ I j Title P a g e - S i m u l i n k D e f a u l t [•] M o d e l L o o p - c u r r e n t . [
) Simulate
. [ • ] Chapter-<Title .
. I
1M o d e l N a m e
]ModelLinkingAnchorJSi ] M o d e l Functions (Simulm
.(
[ M o d e l Variables-Variabl.
. .( .
.[
. .[ .
Report Options . Report File Location •-
from SubC( (SimulinM
I .[
. . ( 1Model Pmp Table
*}
model
model
: г Same at setup lile(C:SMATLAB65M.x>box\rptgene>^} f? Present working directory (C. WAT LAB65Work)
j
-%<-\\<
] Block Summaiy Table ] Signal Summary Table ] System Hierarchy
[•] System L o o p
[] i ] Svs rr. Name f"=.ir.•• j|i> [ ] Sys m LmhrigAncn [ 1 SystemSSnapshot h .[ ] System Prop Table-: | •] System Filter [ ] System Piop Table J [ ] Slockiype Count — I [Scope Snapshot- All .
! Filename. ,-;• S a
setup file (smuink-defauft)
Other j • to cremewU. ent to jrevin en) ove г \\ lepari daeddf Report F webH l TML ills Genea i tin Opo tins descrp i to in or M ' O (he
od.l
m l
j HTML on «single page
Puc. 11.10. Пример работы с отчетом
1 1 . 2 . 8 . Real Time W i n d o w s T a r g e t и W o r k s h o p Подключающаяся к Simulink мощная подсистема имитационного моделирования в реальном масштабе времени (при наличии дополнительных аппаратных средств в виде плат расширения компьютера), представленная пакетами расшире489
Глава 11. Обзор расширений
MATLAB
ния Real Time Windows Target и Workshop, — мощное средство управления реальными объектами и системами. Кроме того, эти расширения позволяют создавать исполняемые коды моделей. Достоинством такого моделирования является его математическая и физическая наглядность. В компонентах моделей Simulink можно задавать не только фиксированные параметры, но и математические соотношения, описывающие поведение моделей. Однако надо учитывать, что данные расширения являются очень дорогими и нужны лишь при использовании MATLAB в качестве управляющей программы для внешних устройств, например таких как роботы, самоходные средства и др.
11.3. Пакеты математических вычислений В MATLAB входит множество пакетов расширения, существенно усиливающих математические возможности системы, повышающих скорость, эффективность и точность математических вычислений. 1 1 . 3 . 1 . Symbolic Math Toolbox Пакет прикладных программ, дающих системе MATLAB принципиально новые возможности — возможности решения задач в символьном (аналитическом) виде, включая реализацию точной арифметики произвольной разрядности. Пакет базируется на применении ядра символьной математики одной из самых мощных систем компьютерной алгебры — Maple. Обеспечивает выполнение символьного дифференцирования и интегрирования, вычисление сумм и произведений, разложение в ряды Тейлора и Маклорена, операции со степенными многочленами (полиномами), вычисление корней полиномов, решение в аналитическом виде нелинейных уравнений, всевозможные символьные преобразования, подстановки и многое другое. Имеет команды прямого доступа к ядру системы. Предшествующие версии пакета описаны в книгах [37, 38, 42]. Пакет позволяет готовить процедуры с синтаксисом языка программирования системы Maple и устанавливать их в системе MATLAB. К сожалению, по возможностям символьной математики пакет сильно уступает специализированным системам компьютерной алгебры, таким как новейшие версии Maple и Mathematica. 1 1 . 3 . 2 . NAG Foundation Toolbox Одна из самых мощных библиотек математических функций, созданная специальной группой The Numerical Algorithms Group, Ltd. Пакет содержит сотни новых функций. Названия функций и синтаксис их вызова заимствованы из известной библиотеки NAG Foundation Library. Вследствие этого опытные пользователи NAG Fortran могут без затруднений работать с пакетом NAG в MATLAB. Библиотека NAG Foundation предоставляет свои функции в виде объектных кодов и соответствующих m-файлов для их вызова. Пользователь может легко модифицировать эти МЕХ-файлы на уровне исходного кода. Пакет обеспечивает следующие возможности: • корни многочленов и модифицированный метод Лагерра; • вычисление суммы ряда: дискретное и эрмитово-дискретное преобразование Фурье; 490
11.3. Пакеты математических
вычислений
• • • •
обыкновенные дифференциальные уравнения: методы Адамса и Рунге—Кутта; уравнения в частных производных; интерполяция; вычисление собственных значений и векторов, сингулярных чисел, поддержка комплексных и действительных матриц; • аппроксимация кривых и поверхностей: полиномы, кубические сплайны, полиномы Чебышева; • минимизация и максимизация функций: линейное и квадратичное программирование, экстремумы функций нескольких переменных; • разложение матриц; • решение систем линейных уравнений; • линейные уравнения (LAPACK.); • статистические расчеты, включая описательную статистику и распределения вероятностей; • корреляционный и регрессионный анализ: линейные, многомерные и обобщенные линейные модели; • многомерные методы: главных компонент, ортогональные вращения; • генерация случайных чисел: нормальное распределение, распределения Пуассона, Вейбулла и Коши; • непараметрические статистики: Фридмана, Крускала—Уоллиса, Манна— Уитни; • временные ряды: одномерные и многомерные; • аппроксимации специальных функций: интегральная экспонента, гамма-функция, функции Бесселя и Ганкеля. Наконец, этот пакет позволяет пользователю создавать программы на Fortran, которые динамически линкуются с MATLAB. 1 1 . 3 . 3 . Spline Toolbox Это пакет прикладных программ для работы со сплайнами. Поддерживает одномерную, двумерную и многомерную сплайн-интерполяцию и аппроксимацию. Обеспечивает представление и отображение сложных данных и поддержку графики. Пакет позволяет выполнять интерполяцию, аппроксимацию и преобразование сплайнов из В-формы в кусочно-полиномиальную, интерполяцию кубическими сплайнами и сглаживание, выполнение операций над сплайнами: вычисление производной, интеграла и отображение поверхностей (см. пример на рис. 11.11). Пакет Spline оснащен программами работы с В-сплайнами, описанными в работе «A Practical Guide to Splines» Карлом Дебуром, создателем сплайнов и автором пакета Spline. Функции пакета, в сочетании с языком MATLAB и подробным руководством пользователя, облегчают понимание сплайнов и их эффективное применение в решении разнообразных задач. В пакет включены программы для работы с двумя наиболее широко распространенными формами представления сплайнов: В-формой и кусочно-полиномиальной формой. В-форма удобна на этапе построения сплайнов, в то время как кусочно-полиномиальная форма более эффективна во время постоянной работы со сплайном. Пакет включает функции для создания, отображения, интерполяции, аппроксимации и обработки сплайнов в В-форме и в виде отрезков полиномов. 491
Глава 11. Обзор расширений
MATLAB
Fe i Edti Veiw Insert Toosl W nidow Hefo DatafromFranke functo in
jEXAHFLE
LEAST-EQUARES APPROXIMATION TO GRIDDED DATA
z(i,D) - t (x(i),y(j>), 1 - 1 I. D " 1. -,J • Here are some gndded data, taken from Franke's sample function Ho t e tna t I have chosen th^ grid somewhat denser п^эг tne boundary• to h'sl p pin down the approximation there.
zl
Рис. 11.11, Пример применения сплайновой интерполяции для поверхностей 1 1 . 3 . 4 . Statistics Toolbox
Пакет прикладных программ по статистике, резко расширяющий возможности системы MATLAB в области реализации статистических вычислений и статистической обработки данных. Содержит весьма представительный набор средств генерации случайных чисел, векторов, матриц и массивов с различными законами распределения, а также множество статистических функций. Следует отметить, что наиболее распространенные статистические функции входят в состав ядра системы MATLAB (в том числе функции генерации случайных данных с равномерным и нормальным распределением). Основнвге возможности пакета: • • • • • • • • • • • • • • • 492
описательная статистика; распределения вероятностей; оценка параметров и аппроксимация; проверка гипотез; множественная регрессия; интерактивная пошаговая регрессия; моделирование Монте-Карло; аппроксимация на интервалах; статистическое управление процессами; планирование эксперимента; моделирование поверхности отклика; аппроксимация нелинейной модели; анализ главных компонент; статистические графики; графический интерфейс пользователя.
11.3. Пакеты математических
вычислений
Пакет включает 20 различных распределений вероятностей, включая t (Стъюдента), F и Хи-квадрат. Подбор параметров, графическое отображение распределений и способ вычисления лучших аппроксимаций предоставляются для всех типов распределений. Предусмотрено множество интерактивных инструментов для динамической визуализации и анализа данных. Имеются специализированные интерфейсы для моделирования поверхности отклика, визуализации распределений, генерации случайных чисел и линий уровня. Предшествующая версия пакета описана в книге [39J. 1 1 . 3 . 5 . Optimization Toolbox Пакет прикладных задач для решения оптимизационных задач и систем нелинейных уравнений. Поддерживает основные методы оптимизации функций ряда переменных: • безусловная оптимизация нелинейных функций; • метод наименьших квадратов и нелинейная интерполяция; • решение нелинейных уравнений; • линейное программирование; • квадратичное программирование (рис. П.12); • условная минимизация нелинейных функций; • метод минимакса; • многокритериальная оптимизация. Разнообразные примеры (рис. 11.12 — лишь один из них) демонстрируют эффективное применение функций пакета. С их помощью также можно сравнить, как одна и та же задача решается разными методами. Описание предшествующей версии пакета дано в книге [39]. Fie Edti Vrev. Insert Toosl W nidow Hep i Startn i g Surface
Нои obta RESHAPE
solution bv back to Then plot thi s solution in bli e *esh.
Sou l to i n Surface
el order ing и ing
>> S » r eshapefx.30 30) >> delet e(findobi(0
me','Algori thm Pi rformsnee Statist! s'U
Рис. 11.12. Пример оптимизации поверхности методом квадратичного программирования 493
Глава 11. Обзор расширений
MATLAB
11.3.6. Partial Differential Equations Toolbox Весьма важный пакет прикладных программ, содержащий множество функций для решения систем дифференциальных уравнений в частных производных. Дает эффективные средства для решения таких систем уравнений, в том числе жестких. В пакете используется метод конечных элементов. Команды и графический интерфейс пакета могут быть использованы для математического моделирования уравнений в частных производных применительно к широкому классу инженерных и научных приложений, включая задачи сопротивления материалов, расчеты электромагнитных устройств, задачи тепломассопереноса и диффузии. Основные возможности пакета: • полноценный графический интерфейс для обработки уравнений с частными производными второго порядка; • автоматический и адаптивный выбор сетки; • задание граничных условий: Дирихле, Неймана и смешанных; • гибкая постановка задачи с использованием синтаксиса MATLAB; • полностью автоматическое сеточное разбиение и выбор величины конечных элементов; • нелинейные и адаптивные расчетные схемы; • возможность визуализации полей различных параметров и функций решения, демонстрация принятого разбиения и анимационные эффекты. Пакет интуитивно следует шести шагам решения PDE с помощью метода конечных элементов. Эти шаги и соответствующие режимы пакета таковы: определение геометрии (режим рисования), задание граничных условий (режим граничных условий), выбор коэффициентов, определяющих задачу (режим PDE), дискретизация конечных элементов (режим сетки), задание начальных условий и решение уравнений (режим решения), последующая обработка решения (режим графика). В разделе демонстрационных примеров Demos справки системы MATLAB 6.5 имеется раздел, посвященный применению пакета PDE в командном режиме работы. При его активизации открывается окно GUI (рис. 11.13) с восемью примерами применения этого пакета. Активизация мышью кнопки одного из примеров запускает его в работу из командной строки. Нажимая любую клавишу, можно наблюдать отдельные стадии выполнения примера и просматривать фрагменты реализующей вычисления программы в окне командного режима MATLAB (рис. 11.14). В этом примере можно наблюдать анимационную картину изменения поверхности типа «шляпа», реализованную средствами пакета PDE. 1 1 . 3 . 7 . Fuzzy Logic Toolbox Пакет прикладных программ Fuzzy Logic относится к теории нечетких (размытых) множеств. Это новое перспективное направление математической логики. Пакетом обеспечивается поддержка современных методов нечеткой кластеризации и адаптивных нечетких нейронных сетей. Графические средства пакета позволяют интерактивно отслеживать особенности поведения системы. Основные возможности пакета: • определение переменных, нечетких правил и функций принадлежности; • интерактивный просмотр нечеткого логического вывода; 494
11.3. Пакеты математических
вычислений
£<* %
I The bultons in this wn i dow wil launch "Command LI Demos". These « е demo? that urn the MATLAB | Command Window for input and output. M ake suit the command window к visible before you run these demos.
Рис. 11.13. Окно демонстрационных примеров пакета PDE
0 с*
Щ !
?
EMuJLA65b\wo.k
Current
,u);caxis [umin u iiax]) E l ах 1-110 £.le Edrt y«w Ime. i]);-.. Hv : ,1) - getfram a:, a 3U t[ ' , u ) ; c a x i s [main u uax]) ах s ( 1-110 Hv 1 = getttam
«u-
:!5J,tn
Xooh
—
i»/indow Ца1р
H A ' > / j Д> Э 0
I'D
из;-..
f( ax s ( ) Hv u * t i -g SU £( ax 3 ([ Hv : . 3 > SU
f,U);caxis 1-110 • getfEam id(p,t,ul ,u);caxis 1 - 1 0 = ge f taiu
[umin u naxj) l ] ) : . •. 1 ^ a2,a [umin u nax]) 1]);. ..
£ i x , , u ) ; axis [umin u и х ] ) ax з t [ - 1 - 1 0 l ] ) ; . - . Hv : , J J = ge fcam
0.8-
ШШ
0.6-
SU
SU
ax Hv
£ (x. r,u); з (r _ 1 = ge c i 2 g id |p £ (X, s( - 1 W J J - ge
su ax Hv end H Show в о 7 i e UiCiV! (Hv, 0)
si
axis([umin u max]) 1 0 1 ]);...
:
0.4^ 0.2-
к•••••:-..
. MnXVwm /ШклЛпХ
;
..
""'••••1.
i
1
0> t , u l ( : , i ) , t n ,a2,a axis([umin u maxjj 1 0 1]);... frame;...
0.5
-1
-1
_ 1
г
Рис. 11.14. Пример на анимацию поверхности типа «шляпа» (Head equation) пакета PDE • современные методы: адаптивный нечеткий вывод с использованием нейронных сетей, нечеткая кластеризация; • интерактивное динамическое моделирование в Simulink; • генерация переносимого Си-кода с помощью Real Time Workshop. 495
Глава 11. Обзор расширений MAT LAB Рисунок 11.15 показывает применение пакета Fuzzy Logic для получения мультипликационного фильма. Моделируется поведение упругого шарика, перекатывающегося по доске, установленной на клине. Когда шарик оказывается у опоры, положение системы становится неопределенным и применение правил нечеткой логики позволяет смоделировать выход из такого положения. w
а
w в *> <§> •
Г
Show Tub
Cleat Trails Г
Targel Potifon: I Square W«v« -I
Рис. 11.15. Пример работы с пакетом нечетких множеств Этот пример наглядно показывает отличия в поведении модели при учете нечеткой логики и без такого учета. Описание предшествующей версии пакета дано в [39J. 1 1 . 3 . 8 . Neural Networks Toolbox Пакет прикладных программ, содержащих средства для построения нейронных сетей, базирующихся на поведении математического аналога нейрона. Пакет обеспечивает эффективную поддержку проектирования, обучения и моделирования множества известных сетевых парадигм, от базовых моделей персептрона до самых современных ассоциативных и самоорганизующихся сетей. Пакет может быть использован для исследования и применения нейронных сетей к таким задачам, как обработка сигналов, нелинейное управление и финансовое моделирование. Обеспечена возможность генерации переносимого С-кода с помощью Real Time Workshop. В пакет включены более 15 известных типов сетей и обучающих правил, позволяющих пользователю выбирать наиболее подходящую для конкретного приложения или исследовательской задачи парадигму. Для каждого типа архитектуры и обучающих правил имеются функции инициализации, обучения, адаптации, создания и моделирования, демонстрации и пример приложения сети. Для управляемых сетей можно выбрать прямую или рекуррентную архитектуру, используя множество обучающих правил и методов проектирования, таких как 496
11.4. Пакеты анализа и синтеза систем
управления
персептрон, обратное распространение, обратное распространение Левенберга, сети с радиальным базисом и рекуррентные сети. Вы можете легко изменять любые архитектуры, обучающие правила или переходные функции, добавлять новые, и все это без написания хоть единой строки на Си или ФОРТРАН. На рис. 11.16 показан пример па построение нейронных сетей различного вида, отличающихся их передаточной характеристикой. Меню в нижнем левом углу окна этого примера задает выбор типа сети. С помощью ползунковых регуляторов над этим меню можно менять параметры передаточной характеристики.
ь Neo l Navg i ati :
Product ttftet
Contents
\VM AP TC LABTo Ro esl M l Mapp nig
•sis andSynthesi etworks
V Neuo rn wthi veco tr niput "9 Decso in Boundaeris § Perceuro tn elarnnig ruel V Calsscfiao tin wth i a 2-n t •9 Oueitlr niput actors
-^*- Normalised perception п. 9 1 Linearly non-separable "J- Pattern association she •Q Training a linear neuro1 •9 Linear classification sv '3 Actaotive noise cancella •O- '\ddptt«-- noit.c cai4c-!i5
Puc. 11.16. Пример работы с пакетом нечетких множеств Детальное описание некоторых версий этого пакета (до входящих в MATLAB 6.0) можно найти в книгах [43, 46—48, 87]. Однако следует отметить, что в последующих реализациях MATLAB этот пакет существенно переработан и дополнен. Это относится, кстати, и к демонстрационным примерам пакета по нейронным сетям.
11.4. Пакеты анализа и синтеза систем управления
11.4.1. Control System Toolbox Пакет Control System предназначен для моделирования, анализа и проектирования систем автоматического управления — как непрерывных, так и дискретных. Функции пакета реализуют традиционные методы передаточных функций и современные методы пространства состояний. Частотные и временные отклики, диаграммы расположения нулей и полюсов могут быть быстро вычислены и отображены на экране. В пакете реализованы: 497
Глава 11. Обзор расширений
MATLAB
• полный набор средств для анализа Ml МО-систем (множество входов — множество выходов); • временные характеристики: передаточная и переходная функции, реакция на произвольное воздействие; • частотные характеристики: диаграммы Боде, Николса, Найквиста и др.; • разработка обратных связей; • проектирование LQR/LQE-регуляторов; • характеристики моделей: управляемость, наблюдаемость, понижение порядка моделей; • поддержка систем с запаздыванием. Дополнительные функции позволяют конструировать более сложные модели. Временной отклик может быть рассчитан для импульсного входа, единичного скачка или произвольного входного сигнала. Имеются также функции для анализа сингулярных чисел. Интерактивная среда для сравнения временного и частотного отклика систем предоставляет пользователю графические управляющие элементы для одновременного отображения откликов и переключения между ними. Можно вычислять различные характеристики откликов, такие как время разгона и время регулирования. Возможности и интерфейс пакета можно проиллюстрировать на одном из примеров — управления двигателем постоянного тока (Control DC Motor) — рис. 11.17. Нажимая клавишу Next окна интерфейса данного примера, можно просмотреть различные варианты блок-схем систем управления двигателем постоянного тока и соответствующие их характеристики. На рис. 11.18 показан пример просмотра одной из таких блок-схем системы управления, под которой представлены ее параметры. * •
•
•
- . -
••
Hep l Navi lct»; Producfliter ^ AjT See Contents o n t r o l
R L C
M o d e l D o ' s
P h a s e
Filter
G e t t i n g
*
i;ontrol\cttldemQs\dcdemD.m
M a r t
D i s c r e t i z s
A n a l y s i s a n d D o n l s
W e b - B a s e d
:
» page
s t a r t e d
-\j
F e e d b a c k
- 0
D i g i t a l Y a w
h K l
C i t c u i t R e s p o n s a n d
N o t c h
9
•&
S y s t e m
• G a n
-
•
j PemoHelp dcdemo
D e m o s
A m p l i f i e r
S e r v o
D a m p e r
D
C o n t r o l for
a
7 4
•ф- Heat Exchanger Gont 9- Steel Beam Thicknes D^ta Acquisition Database *(fl Filter Design . Financial
1 T his derno shows two techniques lo( leducmg the se 1 to load variations (changes in the loroue opposed by I load)
Puc. II .17. Пример моделирования системы управления двигателем постоянного тока 498
11.4. Пакеты анализа и синтеза систем
управления
На рис. 11.19 представлен конечный кадр данного примера. Он демонстрирует временные зависимости основных параметров системы управления при динамическом изменении нагрузки двигателя. £Ув £сй yeiw Imefl Joosi i^dw/ tidp
-•ш
Aodse m il pbfe iladdm oudrb elanocfesth.eYoD C motoi si i zsie howthneasbpo ved. T he tosrque Td ee va raito in nm iducesd by sd uscith dsiturbanceu s. must mnim FoR r th=si e I e% physO cih am l sconstants are: 25xa;m 0;pel, h L = G * H e n r y s Km-0.-2K b - 0.m 1; % torque and back ernf constants JKt-D .D2., XN %skg m"2/s"2
Рас. 11.18. Блок-схема одной из систем управления двигателем постоянного тока
Jie £d* Ve iw Insert loots ^n i/dow Hefe 1
•
г
к-.:=
Setparnt tracking and disturbance с ejection
г
-
•
f
1
•'
f
/
/
—
e
e
d
f
o
r
w
a
f
f
e
e
d
b
a
c
k
(
f
e
e
d
b
a
c
k
(
d
t
i
L
o
Q
c
u
R
)
s
)
V
Finally we compare the three designs on our simulation test case. >> lsim(cLH.cl_rtoc,clJqr.u.t) Thanks to its additional degrees ol treedom, the LQR compensator per I or ms best at rejecting toad disturbances (among the three designs discussed here].
Рис. 11.19. Конечный кадр моделирования системы управления двигателем постоянного тока
499
Глава 11. Обзор расширений
MATLAB
Пакет Control System содержит средства для выбора параметров обратной связи. Реализованы различные методы анализа систем: анализ особых точек, определение коэффициента усиления и затухания, линейно-квадратичное регулирование и др. Пакет Control System включает большое количество алгоритмов для проектирования и анализа систем управления. Кроме того, он обладает настраиваемым окружением и позволяет создавать свои собственные т-файлы. 1 1 . 4 . 2 . Robust Control Toolbox Пакет Robust Control включает средства для проектирования и анализа многопараметрических устойчивых систем управления. Это системы с ошибками моделирования, динамика которых известна не полностью или параметры которых могут изменяться в ходе моделирования. Мощные алгоритмы пакета позволяют выполнять сложные вычисления с учетом изменения множества параметров. Панель демонстрационных примеров этого пакета, выполняемых в командном режиме, представлена на рис. П.20. Несколько примеров дано и на основе использования средств GUI этого пакета. Возможности пакета Robust Control: • синтез LQG-регуляторов на основе минимизации равномерной и интегральной нормы (рис. II.21); • многопараметрический частотный отклик; • построение модели пространства состояний; • преобразование моделей на основе сингулярных чисел; • понижение порядка модели; • спектральная факторизация. 'J Co£d* mmaView nd Lininsert e Delook moa \*Mow
Help
H-n i fn i yi Control
IQGAJR Loop Tiamfer Recovery
Mixed-Sensitivity Loop-Shaping
MUSOU tea/lcorT^w lM n ' MU
Model Reduction: BALANCED
Fe l xb ie l Space Stиге rut
I Г Model Reduction' HANKEL
Double Integrator Ftari
Model Reduction:
BST
ACC Benchmark: Mu Synthest;
Model Reduction; Comparsi on
ACC Benchmafk; Locip Shaping
The buttons in this wn i dow wil launch "Command Line | Demos". These are demos that use (he MATLAB Command Window tor input and output Make suie the command wn i dow is visible before you lun these demos
Г
-
I
T
i
:T^
.
I
Puc. 11.20. Панель демонстрационных примеров пакета Robust Control 500
11 А. Пакеты анализа и синтеза систем • » " • , 1 Т ••••>...
• • .... - •
управления
• •••
О ; b* В <Э
L
- - '\U Qut Oup lort
Рис. 11.21. GUI пакета Robust Control и средства контроля за работой системы Пакет Robust Control базируется на функциях пакета Control System, одновременно предоставляя усовершенствованный набор алгоритмов для проектирования систем управления. Пакет обеспечивает переход между современной теорией управления и практическими приложениями. Он имеет множество функций, реализующих современные методы проектирования и анализа многопараметрических poGacTi 1 ых ре гул яторов. Проявления неопределенностей, нарушающих устойчивость систем, многообразны — шумы и возмущения в сигналах, неточность модели передаточной функции, немоделируемая нелинейная динамика. Пакет Robust Control позволяет оценить многопараметрическую границу устойчивости при различных неопределенностях. Среди используемых методов: алгоритм Перрона, анализ особенностей передаточных функций и др. Пакет Robust Control обеспечивает различные методы проектирования обратных связей, среди которых: LQR, LQG, LQG/LTR и др. Необходимость понижения порядка модели возникает в нескольких случаях: понижение порядка объекта, понижение порядка регулятора, моделирование больших систем. Качественная процедура понижения порядка модели должна быть численно устойчива. Процедуры, включенные в пакет Robust Control, успешно справляются с этой задачей. 1 1 . 4 . 3 . M o d e l P r e d i c t i v e Control Toolbox Пакет Model Predictive Control содержит полный набор средств для реализации стратегии предиктивпого (упрежлающего) управления. Эта стратегия была разработана для решения практические задач управления сложными многоканальными процессами при наличии офанпченпп на переменные состояния и управление. Методы предиктного управления используются в химической промышленности и для управления другими непрерывными процессами. Пакет обеспечивает: 501
Глава 11. Обзор расширений
MATLAB
• моделирование, идентификацию и диагностику систем; • поддержку MISO (много входов — один выход), MIMO, переходных характеристик, моделей пространства состояний; • системный анализ; • конвертирование моделей в различные формы представления (пространство состояний, передаточные функции); • предоставление учебников и демонстрационных примеров. Предиктный подход к задачам управления использует явную линейную динамическую модель объекта для прогнозирования влияния будущих изменений управляющих переменных на поведение объекта. Проблема оптимизации формулируется в виде задачи квадратичного программирования с ограничениями, решаемой на каждом такте моделирования заново. Пакет позволяет создавать и тестировать регуляторы как для простых, так и для сложных объектов. Пакет содержит более полусотни специализированных функций для проектирования, анализа и моделирования динамических систем с использованием предиктного управления. Он поддерживает следующие типы систем: импульсные, непрерывные и дискретные по времени, пространство состояний. Обрабатываются различные виды возмущений. Кроме того, в модель могут быть явно включены ограничения на входные и выходные переменные. Средства моделирования позволяют осуществлять слежение и стабилизацию. Средства анализа включают вычисление полюсов замкнутого контура, частотного отклика, другие характеристики системы управления. Для идентификации модели в пакете имеются функции взаимодействия с пакетом System Identification. Пакет также включает две функции Simulink, позволяющие тестировать нелинейные модели. 1 1 . 4 . 4 . C o m m u n i c a t i o n s Toolbox Пакет прикладных программ для построения и моделирования разнообразных телекоммуникационных устройств: цифровых линий связи, модемов, преобразователей сигналов и др. Предшествующие версии этого пакета имели богатейший набор моделей самых различных устройств связи и телекоммуникаций. Он содержал ряд интересных примеров моделирования коммуникационных средств, например модема, работающего по протоколу v34, модулятора для обеспечения однополосной модуляции и др. В настоящее время пакет, похоже, находится в далеко незавершенной стадии пересмотра. Прежде всего надо отметить, что теперь появилось два варианта пакета с названием Communication — один в наборе Toolbox и другой в наборе Blockset. При этом последний существенно расширен и в него включены многочисленные библиотеки коммуникационных устройств. В связи с этим мы воздержимся от более подробного описания этого пакета (точнее, пакетов). Заинтересованный читатель может просмотреть их возможности в той реализации, которая ему доступна. 1 1 . 4 . 5 . p-Analysis and Synthesis Пакет u-Analysis and Synthesis содержит функции для проектирования устойчивых систем управления. Пакет использует оптимизацию в равномерной норме и сингулярный параметр д. В этот пакет включен графический интерфейс для упро502
11.4. Пакеты анализа и синтеза систем
управления
щения операций с блоками при проектировании оптимальных регуляторов. Свойства пакета: • проектирование регуляторов, оптимальных в равномерной и интегральной норме; • оценка действительного и комплексного сингулярного параметра \х\ • D-K-итерации для приближенного ц-синтеза; • графический интерфейс для анализа отклика замкнутого контура; • средства понижения порядка модели; • непосредственное связывание отдельных блоков больших систем. Модель пространства состояний может быть создана и проанализирована на основе системных матриц. Пакет поддерживает работу с непрерывными и дискретными моделями. Пакет обладает полноценным графическим интерфейсом. включающим в себя: возможность устанавливать диапазон вводимых данных, специальное окно для редактирования свойств D-K-итераций и графическое представление частотных характеристик. Имеет функции для матричного сложения, умножения, различных преобразований и других операций над матрицами. Обеспечивает возможность понижения порядка моделей. 1 1 . 4 . 6 . Q u a n t i t a t i v e F e e d b a c k T h e o r y Toolbox Пакет содержит функции для создания робастных (устойчивых) систем с обратной связью. QFT (количественная теория обратных связей) — инженерный метод, использующий частотное представление моделей для удовлетворения различных требований к качеству при наличии неопределенных характеристик объекта. В основе метода лежит наблюдение, что обратная связь необходима в тех случаях, когда некоторые характеристики объекта неопределенны и/или на его вход подаются неизвестные возмущения. Возможности пакета: • оценка частотных границ неопределенности, присущей обратной связи; • графический интерфейс пользователя, позволяющий оптимизировать процесс нахождения требуемых параметров обратной связи; • функции для определения влияния различных блоков, вводимых в модель (мультиплексоров, сумматоров, петель обратной связи) при наличии неопределенностей; • поддержка моделирования аналоговых и цифровых контуров обратной связи, каскадов и многоконтурных схем; • разрешение неопределенности в параметрах объекта с использованием параметрических и непараметрических моделей или комбинации этих типов моделей. Теория обратных связей является естественным продолжением классического частотного подхода к проектированию. Ее основная цель — проектирование простых регуляторов небольшого порядка с минимальной шириной полосы пропускания, удовлетворяющих качественным характеристикам при наличии неопределенностей. Пакет позволяет вычислять различные параметры обратных связей, фильтров, проводить тестирование регуляторов как в непрерывном, так и в дискретном пространстве. Имеет удобный графический интерфейс, позволяющий создавать простые регуляторы, удовлетворяющие требованиям пользователя. 503
Глава 11. Обзор расширений MAT LAB QFT позволяет проектировать регуляторы, удовлетворяющие различным требованиям, несмотря на изменения параметров модели. Измеряемые данные могут быть непосредственно использованы для проектирования регуляторов, без необходимости идентификации сложного отклика системы. 1 1 . 4 . 7 . LMI Control Toolbox Пакет LMI (Linear Matrix Inequality) Control обеспечивает интегрированную среду для постановки и решения задач линейного программирования. Предназначенный первоначально для проектирования систем управления, пакет позволяет решать любые задачи линейного программирования практически в любой сфере деятельности, где такие задачи возникают. Основные возможности пакета: • решение задач линейного программирования: задачи совместности ограничений, минимизация линейных целей при наличии линейных ограничений, минимизация собственных значений; • исследование задач линейного программирования; • графический редактор задач линейного программирования; • задание ограничений в символьном виде; • многокритериальное проектирование регуляторов; • проверка устойчивости: квадратичная устойчивость линейных систем, устойчивость по Ляпунову, проверка критерия Попова для нелинейных систем. Пакет LMI Control содержит современные симплексные алгоритмы для решения задач линейного программирования. Использует структурное представление линейных ограничений, что повышает эффективность и минимизирует требования к памяти. Пакет имеет специализированные средства для анализа и проектирования систем управления на основе линейного программирования. С помощью решателей задач линейного программирования можно легко выполнять проверку устойчивости динамических систем и систем с нелинейными компонентами. Ранее этот вид анализа считался слишком сложным для реализации. Пакет позволяет даже такое комбинирование критериев, которое ранее считалось слишком сложным и разрешимым лишь с помощью эвристических подходов. Пакет является мощным средством для решения выпуклых задач оптимизации, возникающих в таких областях, как управление, идентификация, фильтрация, структурное проектирование, теория графов, интерполяция и линейная алгебра. Пакет LMI Control включает два вида графического интерфейса пользователя: редактор задачи линейного программирования (LMI Editor) и интерфейс Magshape. LMI Editor позволяет задавать ограничения в символьном виде, a Magshape обеспечивает пользователя удобными средствами работы с пакетом.
11.5. Пакет идентификации систем Пакет System Identification содержит средства для создания математических моделей динамических систем на основе наблюдаемых входных и выходных данных. Он имеет гибкий графический интерфейс, помогающий организовать данные и создавать модели. Методы идентификации, входящие в пакет, применимы для решения широкого класса задач, от проектирования систем управления и обработки сигналов до анализа временных рядов и вибрации. Основные свойства пакета: 504
11.5. Пакет идентификации систем • простой и гибкий интерфейс; • предварительная обработка данных, включая предварительную фильтрацию, удаление трендов и смещений; • выбор диапазона данных для анализа; • методы авторегрессии; • анализ отклика во временной и частотной области; • отображение нулей и полюсов передаточной функции системы; • анализ невязок при тестировании модели; • построение сложных диаграмм, таких как диаграмма Найквиста и др. Графический интерфейс упрощает предварительную обработку данных, а также диалоговый процесс идентификации модели. Возможна также работа с пакетом в командном режиме (рис. 11.22) и с применением расширения Simulink. Операции загрузки и сохранения данных, выбора диапазона, удаления смещений и трендов выполняются с минимальными усилиями и находятся в главном меню.
Bud i sm i pel modesl
Data and mode! obejcts
Specn li
ШШй Ve iw Insert Tods Wnidow Hep l Nyquis! Plot From Power to Temperature . /
*
=
•
—
„
•
1 V \
1
\
\
Theemobsu".ton sesin he nim doow D TW h eowta isiforw dnie s that C o m m a n d n i d p command wnidow si vsib iue lt abnedfo
\
\
f
I
\Ы V/
«
\
i
(
-0.5
V
0
0.5 Real Axis
Рас. 11.22. Пример работы с пакетом идентификации систем в командном режиме Представление данных и идентифицированных моделей организовано графически таким образом, что в процессе интерактивной идентификации пользователь легко может вернуться к предыдущему шагу работы. Для новичков существует возможность просматривать следующие возможные шаги. Специалисту графические средства позволяют отыскать любую из ранее полученных моделей и оценить ее качество в сравнении с другими моделями. Начав с измерения выхода и входа, можно создать параметрическую модель системы, описывающую ее поведение в динамике. Пакет поддерживает все традиционные структуры моделей, включая авторегрессию, структуру Бокса—Дженкинса и др. Он поддерживает линейные модели пространства состояний, которые мо505
Глава 11. Обзор расширений
MATLAB
гут быть определены как в дискретном, так и в непрерывном пространствах. Эти модели могут включать произвольное число входов и выходов. В пакет включены функции, которые можно использовать как тестовые данные для идентифицированных моделей. Идентификация линейных моделей широко используется при проектировании систем управления, когда требуется создать модель объекта. В задачах обработки сигналов модели могут быть использованы для адаптивной обработки сигналов. Методы идентификации успешно применяются и для финансовых приложений.
11.6. Пакеты для обработки сигналов и изображений 11.6.1. Signal Processing Toolbox Пакет Signal Processing обеспечивает чрезвычайно обширные возможности создания программ обработки сигналов для современных научных и технических приложений. В пакете используется разнообразная техника фильтрации и новейшие алгоритмы спектрального анализа. Пакет содержит модули для разработки линейных систем и анализа временных рядов. Пакет будет полезен, в частности, в таких областях, как обработка аудио- и видеоинформации, телекоммуникации, геофизика, задачи управления в реальном режиме времени, экономика, финансы и медицина. Основные свойства пакета: • моделирование сигналов и линейных систем; • проектирование, анализ и реализация цифровых и аналоговых фильтров; • быстрое преобразование Фурье, дискретное косинусное и другие преобразования; • оценка спектров и статистическая обработка сигналов; • параметрическая обработка временных рядов; • генерация сигналов различной формы. Пакет Signal Processing — идеальная оболочка для анализа и обработки сигналов. В нем используются проверенные практикой алгоритмы, выбранные по критериям максимальной эффективности и надежности. Пакет содержит широкий спектр алгоритмов для представления сигналов и линейных моделей. Этот набор позволяет пользователю достаточно гибко подходить к созданию сценария обработки сигналов. Пакет включает алгоритмы для преобразования модели из одного представления в другое. Рисунок 11.23 показывает вид окна справки системы MATLAB 6.5 с полным перечнем демонстрационных примеров новейшей версии пакета Signal Processing. В правой части окна видно окно одного из примеров на конструирование полосового фильтра трех типов. Представлены АЧХ этих фильтров. Этот рисунок дает представление о типичном GUI данного пакета. Пакет Signal Processing включает полный набор методов для создания цифровых фильтров с разнообразными характеристиками. Он позволяет быстро разрабатывать фильтры верхних и нижних частот, полосовые пропускающие и задерживающие фильтры, многополосные фильтры, в том числе фильтры Чебышева, Юла—Уолкера, эллиптические и другие. 506
п.6. %
Пакеты для обработки сигналов и изображений "."JDJXI
••••"•'
Л Slidethow Plnyct lew imerl lools tfmdow Help РгосШ Шт. (• Аи (~ Selected | mde« j search
. :*
uleWalk, Butterworih and Chebyshev filters
Demos j Favorite
^ Signal Processing
1.2 1
•••-•$• Interactive Lowpass Filter Des -9' Filtering a Signal : -ф-Savitzky-Golay Filtering •-ф- Second-Order Sections --y- Chirp-z Transform ••• -ф- Continuous Founer Transform -§•• Discrete Fourier Transform : - § • Spectral Analysis of DTMF : •-•§• Spectrogram Demo i -ф- Modulation :
-.§• Vector Transition Processing usin l ^ Sitnulink Report Generator i ^ Spline l ф. Statistics \ ^(.Symbolic Math i ^V. System Identification 3 ^.Virtual Reality \ ^.Wavelet - ^XxPC Target
1 0.8
0.6 0.4
j
0.2
It
0
J 100
П ' tl\i
200 ЗШ Frequency (Hz)
400
:
500
wi let's design Butterworth and Chebyshev Ьandpass (liters h the same passband (defined between 0.0and 1.01. re we compare all thiee frequency response
•
N * &; passband - [.4.61; tipple - .1; !8bAb] = bLJtier|N, passband); IBcAc) - chebyKN, npple, passband); h = [abs(hh) 4bs[freqz(BbAb n]| abs|iieq:(BcAcn])]; plot(H.h) titlefYuleWalk, Butterworth and Chebyshev filters')
Рис. 11.23. Окно справки с перечнем примеров пакета Signal Processing и окном GUI примера на конструирование полосового фильтра Графический интерфейс позволяет проектировать фильтры, задавая требования к ним в режиме переноса объектов мышью. В пакет включены следующие новые методы проектирования фильтров: • обобщенный метод Чебышева для создания фильтров с нелинейной фазовой характеристикой, комплексными коэффициентами или произвольным откликом. Алгоритм разработан Макленаном и Карамом в 1995 г.; • метод наименьших квадратов с ограничениями позволяет пользователю явно контролировать максимальную ошибку (сглаживание); • метод расчета минимального порядка фильтра с окном Кайзера; • обобщенный метод Баттерворта для проектирования низкочастотных фильтров с максимально однородными полосами пропускания и затухания. Основанный на оптимальном алгоритме быстрого преобразования Фурье, пакет Signal Processing обладает непревзойденными характеристиками для частотного анализа и спектральных оценок. Пакет включает функции для вычисления дискретного преобразования Фурье, дискретного косинусного преобразования, преобразования Гильберта и других преобразований, часто применяемых для анализа, кодирования и фильтрации. В пакете реализованы такие методы спектрального анализа как метод Вельха, метод максимальной энтропии и др. Новый графический интерфейс позволяет просматривать и визуально оценивать характеристики сигналов, проектировать и применять фильтры, производить спектральный анализ (рис. 11.24), исследуя влияние различных методов и их параметров на получаемый результат. Графический интерфейс особенно полезен для визуализации временных рядов, спектров, временных и частотных характеристик, расположения нулей и полюсов передаточных функций систем. 507
Глава //. Обзор расширений
MATLAB
4 Spectrogram Dao
Puc. 11.24. Пример выполнения спектрального анализа в области частота—время с помощью пакета Signal Processing Пакет Signal Processing является основой для решения многих других задач. Например, комбинируя его с пакетом Image Processing, можно обрабатывать и анализировать двумерные сигналы и изображения. В паре с пакетом System Identification пакет Signal Processing позволяет выполнять параметрическое моделирование систем во временной области. В сочетании с макетами Neural Network и Fuzzy Logic может быть создано множество средств для обработки данных или выделения классификационных характеристик. Средство генерации сигналов позволяет создавать импульсные сигналы различной формы. 1 1 . 6 . 2 . Image P r o c e s s i n g Toolbox Пакет Image Processing (версия 2 в MAI LAB 6.0 и 3 в VI AT LA В 6.1/6.5) предоставляет ученым, инженерам и даже художникам широкий спектр средств для цифровой обработки и анализа изображений. Будучи тесно связанным со средой разработки приложений MATLAB, пакет Image Processing Toolbox освобождает вас от выполнения длительных операций кодирования и отладки алгоритмов, позволяя сосредоточить усилия на решении основной научной или практической задачи. Основные свойства пакета: • • • • • • • 508
восстановление и выделение деталей изображений; фильтрация сигналов изображения (рис. П.25); работа с выделенным участком изображения: анализ изображения; линейная фильтрация; преобразование изображений; геометрические преобразования:
11.6. Пакеты для обработки сигналов и изображений • • • • • •
увеличение контрастности важных деталей; бинарные преобразования; обработка изображений и статистика; цветовые преобразования; изменение палитры; преобразование типов изображений. .) 2 D FIR Filtering Demo File Edit Ve i w Insert lools Wn i dow Hep l Original Quarter image
Filtered Image
Filter Coefficients
Frequency Response
Рис. 11.25. Пример фильтрации сигналов изображения монеты и построение изображения по отфильтрованному сигналу с помощью пакета Image Processing Пакет Image Processing дает широкие возможности для создания и анализа графических изображений в среде MATLAB. Этот пакет обеспечивает чрезвычайно гибкий интерфейс, позволяющий манипулировать изображениями (рис. 11.26), интерактивно разрабатывать графические картины, визуализировать наборы данных и аннотировать результаты для технических описаний, докладов и публикаций. Гибкость, соединение алгоритмов пакета с такой особенностью MATLAB, как матрично-векторное описание, делает пакет очень удачно приспособленным для решения практически любых задач по разработке и представлению графики. На рис. 11.27 представлен пример решения еще одной распространенной задачи обработки сигналов изображений — очистка их от шума. В MATLAB входят специально разработанные процедуры, позволяющие повысить эффективность графической оболочки. Можно отметить, в частности, такие особенности: • интерактивная отладка при разработке графики; • профилировщик для оптимизации времени выполнения алгоритма; • средства построения интерактивного графического интерфейса пользователя (GUI Builder) для ускорения разработки GUI-шаблонов, позволяющие настраивать его под задачи пользователя. 509
Глава 11. Обзор расширений MAT LAB
£8* £ *
ш end Intensity Adjmtnonl Р м м Yew Insert, l o d i ^fmdew Original [mags
* Siighriww
•
•
Corrupted
•B«gh'riess •• Conirasl :. -Gamma
Info
Close
Рис. 11.26. Пример проведения гамма-коррекции изображения интегральной микросхемы с помощью пакета Image Processing
Рис. 11.27. Пример очистки изображения от шума с помощью пакета Image Processing
Этот пакет позволяет пользователю тратить значительно меньше времени и сил на создание стандартных графических изображений и, таким образом, сконцентрировать усилия на важных деталях и особенностях изображений. MATLAB и пакет Image Processing максимально приспособлены для разpecfyi ane lg o i rlei fo l me telrecttbvyertcicekskn i g on th e вития, внедрения новых идей и метоm iS ed Eaacghe tio ck thad s tanto othelre vertex. Shtf-iocffcka(p ooiylgon дов пользователя. Для этого имеется набор сопрягаемых пакетов, направленных на решение всевозможных специфических задач и задач в нетрадиционной постановке. Примером может служить задача изменения свойств Рис. 11.28. Пример повышения изображения в некоторой произвольконтрастности изображения в заданной (треугольной) области ной выделенной области (рис. 11.28). с помощью пакета Image Processing Пакет Image Processing в настоящее время интенсивно используется в более чем 4000 компаниях и университетах по всему миру. При этом имеется очень широкий круг задач, которые пользователи решают с помощью данного пакета, например: космические исследования, военные разработки, астрономия, медицина, биология, робототехника, материаловедение, генетика и т. д. Версия пакета Image Processing 3.1 в MATLAB 6.1/6.5 существенно расширена в основном за счет расширения числа функций расширенных морфологические операций, обработки пространственных изображений, целочисленной арифметики, фильтрации изображений, регистрации изображений и др. Right-dickl to select the final vertex Ы dtplay the legion.
11.6.3. Wavelet Toolbox Пакет Wavelet Toolbox предоставляет пользователю полный набор программ для исследования многомерных нестационарных явлений с помощью вейвлетов 510
11.6. Пакеты для обработки сигналов и изображений (коротких волновых пакетов) [45, 86]. Новейшие методы пакета Wavelet расширяют возможности пользователя в тех областях, где обычно применяется техника Фурье-разложения. Пакет может быть полезен для таких приложений, как обработка речи и аудиосигналов, телекоммуникации, геофизика, финансы и медицина. Вейвлет-преобразования уже нашли широкое практическое применение — в стандартах сжатия видеосигналов МР4 и JPEG 2000, в графических системах Corel Draw 9/10 и др. Выпускаются даже интегральные микросхемы для выполнения вейвлет-преобразований. Основные свойства пакета Wavelet Toolbox следующие: • усовершенствованный графический пользовательский интерфейс и набор команд для анализа, синтеза, фильтрации сигналов и изображений; • преобразование многомерных непрерывных сигналов; • дискретное преобразование сигналов; • декомпозиция и анализ сигналов и изображений; • широкий выбор базисных функций, включая коррекцию граничных эффектов; • пакетная обработка сигналов и изображений; • анализ пакетов сигналов, основанный на энтропии; • фильтрация с возможностью установления жестких и нежестких порогов; • оптимальное сжатие сигналов. Доступ к средствам пакета возможен как из командной строки, так и раздела Demos справки. В первом случае достаточно в командной строке набрать команду wavemenu, которая выводит окно средств пакета (рис. 11.29). В этом окне представлены основные разделы вейвлет-преобразований для вейвлетов различного типа, например непрерывных, дискретных и пакетных. Нажатие той или иной кнопки вызывает появление окна GUI соответствующего раздела, в котором можно выбрать тип сигнала для вейвлет-преобразований и в широких пределах менять набор средств для таких преобразований. На рис. 11.30 представлено применение техники непрерывных вейвлет-преобразований для получения спектрограммы сигнала, представляющего собой .1 Wavelet Tooliros Man i Menu последовательность двух гармоничеFe li Wnidow JHel ских колебаний со скачком частоты. One-Dm i ensoins Speca iziled Toosl 1-D Полученная спектрограмма хорошо SWT De-nosin ig ik) Wavee l t!-D выявляет периодичность каждой части Wavee l t Packet 1-D Denstyi Estm i ato i n ]-D сигнала и наличие скачка частоты. Его Regresso in Estm i ato i n 1 -0 легко обнаружить как по вейвлет-спекCompelx Conn tiuous WaVee lt 1-D Wavee l t Coefcie i ntselS e l cto i n 1-D tjcetio трограмме, так и по поведению вейTwo-Dm i emoinel Speca iziled Toosl 2-D влет-коэффициентов и по линиям ло. Wavee l t 2-D j SWT De-m i mg ^D кальных максимумов (Local Maxima Wavee l t Packet 3-D Wavee l t Coefcie i ntselS iciiu Lines). Обнаружение локальных осоDsipaly • Extenso in бенностей сигналов и функций — одна Sg i nal Extenso in" 1 из наиболее распространенных задач Wavee l t Packet Dsi m I age Extenso in вейвлет-анализа. Пример, представленный на рис. 11.31, хорошо поясняет суть вейвлет-преобразований. Здесь задан Рис. 11.29. Окно средств пакета Wavelet Toolbox сложный сигнал, характерный для 511
Глава 11. Обзор расширений MAT LAB электронных схем. Этот сигнал представляется совокупностью аппроксимирующих (грубых) вейвлет-коэффициентов ai и детализирующих (точных) di, где i — номер коэффициентов. Использовано представление с помощью вейлетов Добеши db3 при уровне декомпозиции и реставрации сигнала L = 5.
Рис. 11.30. Вейвлет-анализ
и спектрограммы сигнала в виде синусоиды со скачком частоты
Рис. 11.31. Вейвлет-декомпозиция и реставрация с/южного сигнала с применением вейвлетав Добеши 512
11.6. Пакеты для обработки сигналов и изображений Вейвлеты Добеши представляют один из многих типов ортогональных вейвлетов, которые теоретически обеспечивают точную реставрацию сигналов после прямого и обратного вейвлет-преобразований сигнала. При этом ограничение числа вейвлет-коэффициентов по существу означает процесс фильтрации сигнала, сопровождаемый его компрессией. Фильтрация сигнала позволяет, в частности, очищать сигналы от шума. При этом вейвлет-фильтрация и очистка от шума более эффективны, чем обычная фильтрация и очистка от шума на основе применения преобразований Фурье — как обычных (включая дискретные и быстрые), так и оконных. Пользуясь пакетом, можно анализировать такие особенности, которые упускают другие методы анализа сигналов, то есть тренды, выбросы, разрывы в производных высоких порядков. Пакет позволяет сжимать и фильтровать сигналы без явных потерь, даже в тех случаях, когда нужно сохранить и высоко- и низкочастотные компоненты сигнала. Имеются алгоритмы сжатия и фильтрации и для пакетной обработки сигналов. Программы сжатия выделяют минимальное число коэффициентов, представляющих исходную информацию наиболее точно, что очень важно для последующих стадий работы системы сжатия. Рисунок 11.32 показывает технику математической обработки изображений. Здесь выполняется экстраполяция области изображения, размещенного в квадрате, в области за пределами этого квадрата. В пакет включены следующие базисные наборы вейвлетов: ортогональные Добеши, биортогональные, Хаара, «Мексиканская шляпа», Майера и др. Вы также можете добавить в пакет свои собственные базисы. Обширное руководство пользователя объясняет принципы работы с методами пакета, сопровождая их многочисленными примерами и полноценным разделом ссылок. Первое в нашей литературе описание пакета Wavelet Toolbox дано в книге [45].
Рис. 11.32. Вейвлет-экстраполяция двумерного представляющего изображение
сигнала, 513
Глава 11. Обзор расширений
MATLAB
11.7. Прочие пакеты прикладных программ 11.7.1. Financial Toolbox Довольно актуальный для нашего периода рыночных реформ пакет прикладных программ по финансово-экономическим расчетам Financial Toolbox содержит множество функций по расчету сложных процентов, операций по банковским вкладам, вычисления прибыли и многое другое. К сожалению, из-за многочисленных (хотя в общем-то не слишком принципиальных) различий в финансово-экономических формулах его применение в наших условиях не всегда разумно — есть множество отечественных программ для таких расчетов — например, «Бухгалтерия 1С». Но если вы хотите подключиться к базам данных агентств финансовых новостей — Bloomberg, IDC через пакет Datafeed Toolbox MATLAB, то конечно, обязательно пользуйтесь и финансовыми пакетами расширения MATLAB. Пакет Financial является основой для решения в MATLAB множества финансовых задач, от простых вычислений до полномасштабных распределенных приложений. Пакет Financial может быть использован для расчета процентных ставок и прибыли, анализа производных доходов и депозитов, оптимизации портфеля инвестиций. Основные возможности пакета: • обработка данных; • дисперсионный анализ эффективности портфеля инвестиций; • анализ временных рядов; • расчет доходности ценных бумаг и оценка курсов; • статистический анализ; • анализ чувствительности рынка; • калькуляция ежегодного дохода и расчет денежных потоков; • методы начисления износа и амортизационных отчислений. Учитывая важность даты той или иной финансовой операции, в пакет Financial включены несколько функций для манипулирования датами и временем в различных форматах. Пакет Financial позволяет рассчитывать цены и доходы при инвестициях в облигации. Пользователь имеет возможность задавать нестандартные, в том числе нерегулярные и несовпадающие друг с другом графики дебитных и кредитных операций и окончательного расчета при погашении векселей. Экономические функции чувствительности могут быть вычислены с учетом разновременных сроков погашения. Алгоритмы пакета Financial для расчета показателей движения денежных средств и других данных, отражаемых в финансовых счетах, позволяют вычислять, в частности, процентные ставки по займам и кредитам, коэффициенты рентабельности, кредитные поступления и итоговые начисления, оценивать и прогнозировать стоимость инвестиционного портфеля, вычислять показатели износа и т. п. Функции пакета могут быть использованы с учетом положительного и отрицательного денежного потока (cash-flow) (превышения денежных поступлений над платежами или денежных выплат над поступлениями, соответственно). Пакет Financial содержит алгоритмы, которые позволяют анализировать портфель инвестиций, динамику и экономические коэффициенты чувствительности. В частности, при определении эффективности инвестиций функции пакета позволяют сформировать портфель, удовлетворяющий классической задаче Г. Марковица. Пользователь может комбинировать алгоритмы пакета для вычисления ко514
11.7. Прочие пакеты прикладных
программ
эффициентов Шарпе и ставок дохода. Анализ динамики и экономических коэффициентов чувствительности позволяет пользователю определить позиции для стреддл-сделок, хеджирования и сделок с фиксированными ставками. Пакет Financial обеспечивает также обширные возможности для представления и презентации данных и результатов в виде традиционных для экономической и финансовой сфер деятельности графиков и диаграмм. Денежные средства могут по желанию пользователя отображаться в десятичном, банковском и процентном форматах. Описание пакета можно найти в [56]. 1 1 . 7 . 2 . Mapping Toolbox Пакет Mapping предоставляет графический и командный интерфейс для анализа географических данных, отображения карт и доступа к внешним источникам данных по географии. Кроме того, пакет пригоден для работы с множеством широко известных атласов. Все эти средства в комбинации с MATLAB предоставляют пользователям все условия для продуктивной работы с научными географическими данными. Основные возможности пакета: • • • • •
визуализация, обработка и анализ графических и научных данных; более 60 проекций карт (прямые и инверсные); проектирование и отображение векторных, матричных и составных карт; графический интерфейс для построения и обработки карт и данных; глобальные и региональные атласы данных и сопряжение с правительственными данными высокого разрешения; • функции географической статистики и навигации; • трехмерное представление карт со встроенными средствами подсветки и затенения; • конвертеры для популярных форматов географических данных: DCW, TIGER, ETOPO5. Пакет Mapping включает более 60 наиболее широко известных проекций, включая цилиндрическую, псевдоцилиндрическую, коническую, поликоническую и псевдоконическую, азимутальную и псевдоазимутальную. Возможны прямые и обратные проекции, а также нестандартные виды проекции, задаваемые пользователем. В пакете Mapping картой называется любая переменная или множество переменных, отражающих или назначающих численное значение географической точке или области. Пакет позволяет работать с векторными, матричными и смешанными картами данных. Мощный графический интерфейс обеспечивает интерактивную работу с картами, например возможность подвести указатель к объекту и, щелкнув на нем, получить информацию. Графический интерфейс MAPTOOL — полная среда разработки приложений для работы с картами. Рисунок П.33 показывает применение пакета Mapping Toolbox для построения анимированных орбит спутника Земли на фоне ее карты. Наиболее широко известные атласы мира, Соединенных Штатов, астрономические атласы входят в состав пакета. Географическая структура данных упрощает извлечение и обработку данных из атласов и карт. Географическая структура данных и функции взаимодействия с внешними географическими данными форматов Digital Chart of the World (DCW), TIGER, TBASE и ЕТОР05 объединены воедино, чтобы обеспечить мощный и гибкий инструмент для доступа к уже существующим и будущим географическим базам данных. 515
Глава 11. Обзор расширений MATLAB
9
Рис. 11.33. Пример остроения анимационных орбит спутника Земли на фоне ее карты (пакет Mapping) Тщательный анализ географических данных часто требует математических методов, работающих в сферической системе координат. Пакет Mapping снабжен подмножеством географических, статистических и навигационных функций для анализа географических данных. Функции навигации дают широкие возможности для выполнения задач перемещения, таких как позиционирование и планирование маршрутов. 1 1 . 7 . 3 . Data Acquisition Toolbox и Instrument Control Toolbox Data Acquisition Toolbox — пакет расширения, относящийся к области сбора данных через блоки, подключаемые к внутренней шине компьютера. В нем сосредоточены средства для создания функциональных генераторов (рис. П.34), виртуальных осциллографов (рис. П.35), анализаторов спектра — словом, приборов, широко используемых в исследовательских целях для получения данных. Они поддержаны соответствующей вычислительной базой. Новый блок Instrument Control Toolbox позволяет подключать приборы и устройства с последовательным интерфейсом и с интерфейсами Канал общего пользования и VXI. 1 1 . 7 . 4 . Database toolbox Более чем в 100 раз повышена скорость работы Database toolbox, при помощи которого осуществляется обмен информацией с целым рядом систем управления базами данных через драйверы ODBC или JDBC: • • • • 516
Oracle 7.3.3; Access 95 или 97 Microsoft; Microsoft SQL Server 6.5 или 7.0; Sybase Adaptive Server 11;
11.7. Прочие пакеты прикладных программ
Contents j n Idex | Search Demo [ + i1 ^Communc iato i ns 'К ф Control System 4
j
i j Data Acquisition Demo, daqftngen I
View code (or datifcnqen
|
E x a m p l e F u n c t i o n Generator
" 3
h Ф Curve Fitting .-] ф Data Acquisition Ф Data Acquisition Tutorials
|
:
••
• -<j- Handel Demo
Che Data Acquisition Toolbox's analog output obje
>•- -Q- FFT Display of an incoming Si
g UlLUIiil.tiii.l.WlM.i'i
,ij . . ' -Q-Example Oscilosi * ф. Database •' ф Filter Design +, <ф Financial
Г 5a
•\ . i+; ф image Processing \
:
>• ф. Instrument Control
:
!
:+; ф LMI Control
I
j 500
* ф MATLAB Link tot CotJ i+; -ф Mapping
. .
*: -ф Model Predictive Cor
undO
Select output channel:
;+; ф Fuzzy Logic
:
Frequency IHzl po"
DC Offset i
Amplitude A 2Л
Puc. 11.34. Пример построения функционального
: ^
генератора
MATLAB Link for Code Campo
j ф Mapping : -a(^ Model Predictive Contro ^
_ J
Рис. 11.35. Пример построения осциллографа и наблюдения зашумленного • • • •
сигнала
Sybase (бывший Watcom) SQL Server Anywhere 5.0; IBM DB2 Universal 5.0; Informix 7.2.2; Computer Associates Ingres (все версии). 517
Глава 11. Обзор расширений
MATLAB
Все данные предварительно преобразуются в массив ячеек. Визуальный конструктор (Visual Query Builder) (только при соединении через ODBC-драйверы) позволяет составлять сколь угодно сложные запросы на диалектах языка SQL этих баз данных даже без знания SQL. В одном сеансе может быть открыто много неоднородных баз данных. 1 1 . 7 . 5 . Excel Link Пакет расширения Excel Link позволяет использовать широко известный табличный процессор Microsoft Excel 97 как процессор ввода-вывода MATLAB. Для этого достаточно установить в Excel как add-in функцию поставляемый MathWorks файл excllink.xla. В Excel нужно набрать Сервис • Надстройки • Обзор, выбрать файл в каталоге \matlabrl2\toolbox\exlink и установить его. Теперь при каждом запуске Excel появится командное окно MATLAB, а панель управления Excel дополнится кнопками getmatrix, putmatrix, evalstring. Для закрытия MATLAB из Excel достаточно набрать =MLClose () в любой ячейке Excel. Для открытия после выполнения'этой команды нужно либо щелкнуть мышью на одной из кнопок getmatrix, putmatrix, evalstring, либо набрать в Excel Сервис • Макрос • Выполнить m a t l a b i n i t . Выделив мышью диапазон ячеек Excel, вы можете щелкнуть на getmatrix и набрать имя переменной MATLAB. Матрица появится в Excel. Заполнив числами диапазон ячеек Excel, вы можете выделить этот диапазон, щелкнуть на putmatrix и ввести имя переменной MATLAB. Работа, таким образом, интуитивно понятна. В отличие от MATLAB, Excel Link не чувствителен к регистру, так что ввод I и i или J и j равноценны. 1 1 . 7 . 6 . V i r t u a l Reality T o o l b o x Пакет виртуальной реальности доступен начиная с версии MATLAB 6.1. Позволяет осуществлять трехмерную анимацию и мультипликацию, в том числе моделей Simulink. Язык программирования — VRML — язык моделирования виртуальной реальности (Virtual Reality Modeling Language). Просмотр анимации возможен с любого компьютера, оснащенного браузером с поддержкой VRML. Подтверждает, что математика — наука о количественных соотношениях и пространственных формах любых действительных или виртуальных миров. 1 1 . 7 . 7 . MATLAB C o m p i l e r Компилятор для программ, создаваемых на языке программирования системы MATLAB. Транслирует коды этих программ в программы на языке Си++. Применение компилятора обеспечивает возможность создания исполняемых кодов (полностью законченных программ), время выполнения которых для программ с большим числом циклических операций уменьшается в 10—15 раз. Помимо него, вы можете использовать и другие компиляторы Си++.
1 1 . 8 . Н о в ы е п а к е т ы р а с ш и р е н и я MATLAB 6.5 11.8.1. Curve Fitting Toolbox Новый математический пакет для подгонки кривых под данные (аппроксимации) Curve Fitting Toolbox расширяет возможности базовой системы по подгонке 518
11.8. Новые пакеты расширения MATLAB 6.5 (подбору) кривых в графическом окне. Работа с пакетом (вызов командой cftool) и предусматривает 4 основных шага: • импорт данных; • проведение подгонки; • анализ результатов подгонки; • запись сессии на диск. Рисунок 11.36 показывает выполнение квадратичной регрессии для тестовых данных pop. Здесь представлено начало подгонки кривых под заданные данные с применением окна подгонки Fitting (оно видно на фоне основного окна Curve Fitting Toolbox). Для начала подгонки и выбора первой аппроксимирующей функции в окне подгонки надо нажать клавишу New Fit. Данные о полученной функции аппроксимации представлены в поле результатов Result.
Newfitj Copyfit[ Fit Name: jfiti Data set. (pop Typeofftl: P j ovlnoH nal Poylnoma il ;linear poylnomail kubc i poylnomai l 4th degree poylnodirn :^[irfpmpp nr,h,.;nrr,
jj] J
"3 Г centt, ane sea
i" !.!?rUfc'.d
J
pi
=
0.6541
(0.6124,
p2 p3
= -
-2.233 7.162
(-3.178, -1.289) ( 2 . 6 5 1 , 11.67)
Tab el ofFtsi
jName
I
Data set
j
0.6958]
1 J
Тур.
P i ovlnoma i l 1159.0293 10.99871
Рис. II .36. Пример выполнения квадратичной регрессии для данных популяции pop Для одного и того же набора данных возможно проведение нескольких видов подгонки (например выполнение регрессии полиномами от первой до девятой степени). Нужные виды подгонки выбираются из списка, вводятся нажатием кнопки Apply и фиксируются в списке нажатием кнопки Copy Fit. Действие этих и других кнопок окна подгонки Fitting очевидно и фиксируется на графике точек исходных данных. По завершении подгонки можно получить графики кривых и точек исходных данных (рис. 11.37). Для проведения анализа выполненной подгонки достаточно в окне Fitting нажать кнопку Analysis... Появится окно анализа (рис. 11.38), в котором надо задать виды анализа — на рис. 11.38 установлены все виды анализа, включающие вычисление первой и второй производной и интеграла от функций подгонки. Пакет Curve Fitting Toolbox может помочь в решении ряда типовых задач приближения данных. Однако его возможности назвать выдающимися пока трудно — во многом они повторяют возможности подгонки данных в графическом окне. 519
Глава 11. Обзор расширений
MATLAB
<Э
* pop copyi fl, 2 fififilll 222copy 2 соруЗ copy 4
Рис. П.37. Пример построения графиков кривых подгонки и исходных точек И D c* t
S I
k
400 200
A
/"
/
| &
£>
Г-
Г Г Analyssi of fit "fit 1"fordataset "ppp' ' ' .
Fit 0
-
; . . .
-
'
-
•
-
*
p Evaluate fit atXi Prediction bounds:
, !
1st d
<* None • — •
41 h
XI
Filtn artalwn Г Ч И Щ ^ Я И Ш -j
. . — .
J.
i 3 5 9 11
. Г Forfuncfion <^ for new observation Level 1 95 %
I 19 21
Г
| ;:
^ 5 zi Щ i dX •35 8442 i ? l ; ?] -11.5296 12 1573 12.7849 121573 37 0995"" ~ 12 1573 61.414 121573 85.7286 121573 1? 157? 110.043 1347358 12 157 3 158672 12.1573 182.987 121573 207 301 12 1 573 ;
j
d2f(X})/clX2.
Ю ifj ;q .0 :
0
;0
• D i-47.3730 j-46 1184 13.76597 {101279^ ; 249422 .445194 689 595
\0
1324 28
о
И714 57
J 1 : ! ]
P 1st derivafive at XI |5 2nd derivative at xi p integrate to XI f* Start from mtrttXI)
J woo с -1000
Г" start ftom j p Plot results Я Plot data sef pop •
Save to workspace...
|
Apply | ClOS
Рис. 11.38. Пример выполнения анализа по результатам подгонки 1 1 . 8 . 2 . Instrument Control Toolbox
Инструментальный пакет, предназначенный для работы с внешними устройствами. Обеспечивает: • поддержку графического инструментального интерфейса GPIB (включая IEEE-488 и HPIB); • поддержку стандарта VISA и последовательных интерфейсов (RS-232, RS-422 и RS-485); 520
11.8. Новые пакеты расширения MAT LAB 6.5 • поддержку данных бинарного и текстового форматов; • управление внешними инструментами с помощью средств MATLAB; • поддержку стандартных команд для управления инструментами SCPI (Standard Commands for Programmable Instruments). Взаимодействие MATLAB с Instrument Control Toolbox и внешними устройствами (например, осциллографом) представлено на рис. 11.39.
MATLAB J
Interactive M-file functions r Instrument Control Toolbox M-file functions Disl- file;
Interactive dr ver adaptors i t
Us Property values, data, and ever
GPIB driver * r
Property values, data, and events
GPIB controller
WWVl
ID D D D D Dl о ооо
Рис. П.39. Взаимодействие MATLAB с Instrument Control Toolbox и внешними устройствами Итак, пакет Instrument Control Toolbox предназначен для создания программно-управляемых от системы MATLAB инструментальных систем и комплексов. Для их реализации нужны специальные GPIB-драйверы и GPIB-контроллеры. 1 1 . 8 . 3 . Developer's Kit for Texas Instruments DSP Еще один новый пакет расширения для поддержки аппаратных средств — на этот раз знаменитых своей мощностью и популярностью цифровых сигнальных процессоров (DSP) корпорации Texas Instruments. Эти программируемые процессоры находят широкое применение в обработке различных сигналов (в том числе звуковых и видео) в реальном масштабе времени. Developer's Kit for Texas Instruments DSP имеет набор программных утилит и функций для программирования DSP и их испытания. Он весьма полезен специалистам, занятым разработкой средств связи, телевидения, телекоммуникаций и иных устройств и систем, использующих современную технику обработки сигналов. 521
Глава 11. Обзор расширений MAT LAB 1 1 . 8 . 4 . Dials & G a u g e s B l o c k s e t Новый пакет для разработки сложных моделей устройств и систем с повышенной степенью визуализации. Наиболее характерными устройствами такого рода могут быть: • приборные доски автомобилей и самолетов; • диспетчерские пульты электростанций и аэропортов; • пульты управления коммуникационным и медицинским оборудованием и т. д. Этот пакет предназначен для работы с рядом других пакетов расширения системы MATLAB 6.5 + Simulink 5: • Data Acquisition Toolbox; • DSP Blockset; • Fixed-Point Blockset; • Control ToolboxTool; • Power System Blockset; • Real-Time Windows Target; • Real-Time WorkshopTool; • StateflowTool; • Virtual Reality ToolboxTool; • xPC Target. Отличительная черта этого пакета — повышенная реалистичность отображения блоков, из которых строятся модели устройств и систем. Например, регистрирующий напряжение или ток блок представляется уже не простым прямоугольником, а реалистично выглядящим вольтметром или амперметром с четкой шкалой и движущейся стрелкой. В версии MATLAB 6.5 SPl пакет исчез. 11.8.5. Mechanical System Blockset Новый набор средств для моделирования механических систем. Содержит специфические для таких систем средства подготовки и запуска модели. В представленной автору версии MATLAB + Simulink демонстрационных примеров на применение этого пакета не было, как и не было самого пакета. Однако обширное описание его в формате PDF-файлов представлено. Отсюда можно сделать, что этот пакет находится в развитии. В заключение надо отметить, что система MATLAB + Simulink интс ICIIBIIP развивается и • кдый год появляется по несколько новых пакетов расширения. В связи с этиг едставленный в этой главе материал является лишь информационным и слу>. для начальной ориентации пользователя в доступных и наиболее распространеь .ых пакетах расширения. Многие пакеты расширений настолько обширны и глубоки, что им нужно посвящать отдельные главы книг или даже отдельные книги.
Глава 12. Simulink — система математического моделировании 1 2 . 1 . Основные понятия математического моделирования 1 2 . 1 . 1 . Роль м а т е м а т и ч е с к о г о м о д е л и р о в а н и я Моделирование можно рассматривать как замещение исследуемого объекта (оригинала) его условным образом, описанием или другим объектом, именуемым моделью и обеспечивающим адекватное с оригиналом поведение в рамках некоторых допущений и приемлемых погрешностей. Моделирование обычно выполняется с целью познания свойств оригинала, путем исследования его модели, а не самого объекта. Разумеется, моделирование оправдано в том случае, когда оно проще создания самого оригинала или когда последний по каким-то причинам лучше вообще не создавать. Математическое моделирование это область науки и техники, которая обеспечивает выявление закономерностей протекания различных явлений окружающего нас мира или работы систем и устройств путем их математического описания и моделирования без проведения натурных испытаний. При этом используются фундаментальные положения и законы математики, описывающие моделируемые явления, системы или устройства на некотором уровне их идеализации. Таким образом, математическая модель системы или устройства это или иное математическое описание их, обеспечивающее имитацию работы систем или устройств на уровне, достаточно близком к реальному поведению их, получаемому при натурных испытаниях систем или устройств. Критерием корректности модели мы будем считать достаточно матую погрешность (чаще всего среднеквадратическую) результатов моделирования. Математическое моделирование общественных, экономических, биологических и физических явлений, объектов, систем и различных устройств — важнейшее средство познания природы и проектирования самых разнообразных систем и устройств. Хрестоматийными стали примеры эффективного использования моделирования в создании ядерных технологий, авиационных и аэрокосмических систем, в прогнозе атмосферных и океанических явлений, погоды и так далее. Однако для таких серьезных сфер моделирования нередко нужны суперкомпьютеры и годы работы крупных коллективов ученых по подготовке данных для моделирования и его отладки. Тем не менее и в этом случае математическое моделирование сложных систем и устройств не только экономит средства на проведение исследований и разработок их, но и порой спасает жизни людей и устраняет экологические катастрофы. Здесь примером может служить отказ от испытания ядерного и термоядерного оружия в пользу его математического моделирования или моделирование аэрокосмических систем перед их реальными полетами. Между тем математическое моделирование на уровне решения более простых задач, например из области механики, электротехники, электроники и радиотехники (и многих других областей науки и техники) в настоящее время стало доступным многим пользователям современных ПК. А при использовании обоб523
Глава 12. Simulink — система математического
моделировании
щенных моделей становится возможным моделирование и достаточно сложных систем, например электроэнергетических систем или промышленных комплексов. Как известно, сложные электрические цепи постоянного тока легко описываются системами линейных уравнений, составленными на основе законов Кирхгофа, — например методами узловых потенциалов и контурных токов. Для цепей переменного тока придется составлять такие уравнения с комплексными элементами. А для моделирования динамических систем и устройств придется составлять и решать системы дифференциальных уравнений, чаще всего нелинейных. Матричная система MATLAB — идеальное средство для реализации такого моделирования. В данном описании мы под моделью будем подразумевать блочную (функциональную) диаграмму системы или устройства, содержащую ее компоненты в виде отдельных блоков и подсистем с соответствующим описанием их свойств. Это описание, как правило, носит внутренний характер и количественно может корректироваться изменением параметров в списке параметров каждого компонента. С помощью подсистем пользователь может составлять свои собственные сложные компоненты. Набор виртуальных регистрирующих устройств позволяет контролировать поведение созданной модели. 12.1.2. Аналитическое моделирование Следует различать аналитическое моделирование и численное моделирование. При аналитическом моделировании его результаты представляются в виде аналитических выражений — проще говоря, формул. Например, подключив ЛС-цепь к источнику постоянного напряжения Е (R, С и £ — компоненты данной модели), мы можем составить аналитическое выражение для временной зависимости напряжения u{t) на конденсаторе С: R
C
E
dt
Это линейное дифференциальное уравнение и является аналитической моделью данной простой линейной цепи. Его аналитическое решение, при так называемом начальном условии и(0) = 0, означающем разряженный перед моделированием конденсатор С, позволяет найти искомую зависимость — результат моделирования в виде формулы: u(t) = E(\-e"RC).
(12.2)
Однако даже в этом простейшем примере нам потребуются умственные усилия для решения дифференциального уравнения (12.1) или для применения СКМ с символьными вычислениями — систем компьютерной алгебры. Для этого вполне тривиального случая решение задачи моделирования линейной RC-цепи дает аналитическое выражение (12.2) достаточно общего вида — оно пригодно для описания работы цепи при любых номиналах компонентов /?, С и Е и описывает экспоненциальный заряд конденсатора С через резистор R от источника постоянного напряжения Е. Безусловно, нахождение аналитических решений при аналитическом моделировании оказывается исключительно ценным для выявления общих теоретических закономерностей простых линейных цепей, систем и устройств. Однако сложность его резко нарастает по мере усложнения воздействий на модель и увеличения порядка и числа уравнений состояния, описывающих моделируемый объект. Можно получить более или менее обозримые результаты при моделировании объ-
524
12.1. Основные понятия математического
моделирования
ектов второго или третьего порядка, по уже при большем порядке аналитические выражения становятся чрезмерно большими, сложными и трудно осмысляемыми. Между тем даже простой электронный усилитель нередко содержит десятки компонентов. Тем не менее многие современные СКМ, например системы символьной математики Mathcmatica или Maple, способны в значительной мере автоматизировать решение сложных задач аналитического моделирования. 12.1.3. Численное моделирование Численное моделирование заключается в получении необходимых количественных данных о поведении систем или устройств каким-либо подходящим численным методом. Например, для решения дифференциального уравнения (12.1) или систем дифференциальных уравнений в более сложных случаях могут использоваться хорошо известные численные методы Эйлера или Рунге—Кутта (см. Главу 8). В этом случае решение в аналитическом виде не получается, но по данным численного моделирования можно получить достаточно полные данные о поведении моделируемых систем и устройств, а также построить графики описывающих это поведение зависимостей. MATLAB первично не является системой символьной математики. В этом смысле название книги [38], подправленное издательством без ведома авторов, оказалось забавным курьезом. MATLAB — типично численная матричная система. Она может, в принципе, использоваться для решения задач моделирования аналитическими методами, путем применения специального расширения Symbolic Math Toolbox. Последнее использует ядро символьных операций системы Maple. приобретенное у корпорации Waterloo Maple Inc. и входящее в мощные системы символьной математики класса Maple [31—36J. Однако это применение носит достаточно ограниченный характер, хотя бы потому, что из более чем 3000 операторов и функций этого ядра данное расширение системы MATLAB обеспечивает доступ примерно к сотне. Означает ли все это ущербность системы MATLAB в решении задач математического моделирования. Конечно же нет! Все обстоит совсем наоборот. Как уже отмечалось, трудности аналитического моделирования даже линейных объектов и систем стремительно нарастают по мере роста порядка моделей и числа ее компонентов. В реальных задачах, когда моделируемая система состоит из десятков и сотен (а подчас и тысяч) компонентов модели, результаты аналитического моделирования становятся совершенно необозримыми, бесполезными и зачастую ошибочными. Составление исходной системы уравнений вручную, табличными методами или с помощью графов превращается в сложную задачу даже для самых опытных математиков. При этом ошибки становятся скорее правилом, чем исключением. MATLAB, будучи мощной матричной системой, открывает обширные возможности в выполнении численного моделирования как линейных, так и нелинейных систем и устройств, описываемых большими системами уравнений. Такое моделирование предполагает решение системы уравнений состояния достаточно апробированными и хорошо известными численными методами — в том числе на основе рекуррентных и итерационных алгоритмов. Уравнения состояния реальных систем и устройств часто содержат множество нулевых коэффициентов, что порождает разреженные матрицы и массивы. Их аппарат прекрасно представлен в базовой системе MATLAB. 525
Глава 12. Simulink — система математического
моделировании
Как известно, нелинейные системы и устройства описываются алгебраическими или дифференциальными нелинейными уравнениями, которые принципиально не имеют аналитических решений. Наиболее универсальная модель объекта имеет вид дифференциального уравнения
где па — порядок модели {па > nb), а, и /;, — постоянные коэффициенты (параметры модели), u{J\t) и y(l)(t) — производные соответственно входного и выходного сигналов. Поэтому на практике моделирование нелинейных систем и устройств на основе использования численных методов оказывается намного более полезным, чем аналитическое моделирование отдельных частных линейных цепей, систем или устройств. Это также выдвигает MATLAB на роль лидера среди средств моделирования. В настоящее время известно множество программных средств моделирования частного характера. Например, для моделирования электронных схем применяются программы схемотехнического моделирования MicroCAP, MicroLOGlC, Pspise, Design Center, Electronics WorkBench и др. Они обычно содержат обширные библиотеки полупроводниковых и схемных компонентов и представляют результаты в привычном для пользователя виде — например в виде осциллограмм их виртуальных осциллографов или показаний виртуальных вольтметров и амперметров. Однако применение таких систем носит частный и потому довольно ограниченный характер, хотя в своей области многие такие программы являются подлинным шедевром изобретательности их создателей. Разработчики системы MATLAB + Simulink отказались от конкуренции с разработчиками подобных программ узкого назначения. Они сосредоточили свое внимание на решении куда более важной и сложной задачи —- моделирования блочных динамических систем и устройств произвольного назначения. Это физические и химические системы и устройства, электротехнические устройства (и даже целые энергетические системы), механические системы и устройства и т. д. и т. п. Для этого пришлось существенно расширить библиотеки компонентов таких систем и устройств, с одной стороны, а с другой стороны, применить укрупненные модели ряда компонентов. Именно благодаря этому возможно моделирование сложных систем и устройств. Одной из самых сложных проблем в реализации математического моделирования в среде системы MATLAB стала подготовка модели моделируемой системы или устройства. Модель обычно представляется в форме графического, табличного или таблично-топологического описания. При этом необходимо предусмотреть организацию связей между компонентами и установку их, подчас многих, параметров. После этого надо запустить созданную модель на исполнение, т. е. задать решение автоматически составленной системы уравнений состояния и вывод результатов решения. Это также представляет собой достаточно сложную проблему. Вес эти проблемы блестяще решены введением в MATLAB второй важной части системы — расширения Simulink. Это расширение реализует по существу визуально-ориентированное программирование задач автоматического составления графической модели системы или устройства, составления и решения ее уравнений состояния и наглядного представления результатов моделирования. 526
12.2. Основные возможности пакета 12,1.4. Имитационное и ситуационное
Simulink
моделирование
Уже в силу своего названия Simulink выполняет как бы симуляции работы моделируемых систем и устройств. У нас это принято называть имитационным моделированием. Однако новые версии Simulink интенсивно развиваются в направлении развития техники моделирования систем и устройств, структура которых может изменяться под воздействием ситуаций, которые характерны для работы устройств в те или иные моменты времени. Другими словами, развивается направление ситуационного моделирования. Специальное расширение StateFlow BlockSet обеспечивает расширенные возможности ситуационного моделирования — в частности, позволяет динамике отслеживать связи между блоками моделей и строить наглядные SF-диаграммы.
1 2 . 2 . О с н о в н ы е в о з м о ж н о с т и п а к е т а Simulink 1 2 . 2 . 1 . Назначение пакета В состав системы MATLAB 6.5 SP1 входит пакет моделирования динамических систем — Simulink 5.1 (R13 SP1), выпущенный в конце августа 2003 г. Это сравнительно новая и существенно доработанная версия популярного пакета, который уже давно считается одним из лучших пакетов моделирования блочно заданных динамических систем. Она используется и в версии MATLAB 6.5 SPl. Однако в систему MATLAB 7 вошла новейшая и расширенная реализация этого пакета Simulink 6. Далее обе версии описываются под именем Simulink паралельно с выделением, где это необходимо, новых возможностей Simulink 6. При этом ради компактности описания заметно сокращено описание тех демонстрационных примеров, которые доступны в системе MATLAB + Simulink и описаны в книге [42], впервые давшей достаточно полное описание Simulink 4.0, и в ряде других книг [43-48]. Как уже отмечалось, пакет Simulink является ядром интерактивного программного комплекса, предназначенного для математического моделирования линейных и нелинейных динамических систем и устройств, представленных своей функциональной блок-схемой, именуемой S-моделыо или просто моделью. При этом возможны различные варианты моделирования: во временной области, в частотной области, с событийным управлением, на основе спектральных преобразований Фурье, с использованием метода Монте-Карло (реакция на воздействия случайного характера) и т. д. Для построения функциональной блок-схемы моделируемых устройств Simulink имеет обширную библиотеку блочных компонентов и удобный редактор блок-схем. Он основан на графическом интерфейсе пользователя и по существу является типичным средством визуально-ориентированного программирования. Используя палитры компонентов (наборы), пользователь с помощью мыши переносит нужные блоки с палитр на рабочий стол пакета Simulink и соединяет линиями входы и выходы блоков. Таким образом, создается блок-схема системы или устройства, то есть модель. Simulink автоматизирует следующий, наиболее трудоемкий этап моделирования: он составляет и решает сложные системы алгебраических и дифференциальных уравнений, описывающих заданную функциональную схему (модель), обес-
527
Глава 12. Simulink — система математического
моделировании
печивая удобный и наглядный визуальный контроль за поведением созданного пользователем виртуального устройства. Вам достаточно уточнить (если нужно) вид анализа и запустить Simulink в режиме симуляции (откуда и название пакета — Simulink) созданной модели системы или устройства. В дальнейшем мы будем использовать термин «моделирование» как более благозвучный и привычный для нашей литературы. Средства визуализации результатов моделирования в пакете Simulink настолько наглядны, что порой создается ощущение, что созданная в виде блок-схемы модель работает «как живая». Более того, Simulink практически мгновенно меняет математическое описание модели по мере ввода ее новых блоков, даже в том случае, когда этот процесс сопровождается сменой порядка системы уравнений и ведет к существенному качественному изменению поведения системы. Впрочем, это является одной из главных целей пакета Simulink. Ценность Simulink заключается и в обширной, открытой для изучения и модификации библиотеке компонентов (блоков). Она включает источники сигналов с практически любыми временными зависимостями, масштабирующие, линейные и нелинейные преобразователи с разнообразными формами передаточных характеристик, квантующее устройство, интегрирующие и дифференцирующие блоки и т. д. В библиотеке имеется целый набор виртуальных регистрирующих устройств — от простых измерителей типа вольтметра или амперметра до универсальных осциллографов, позволяющих просматривать временные зависимости выходных параметров моделируемых систем — например, токов и напряжений, перемещений, давлений и т. п. Имеется даже графопостроитель для создания фигур в полярной системе координат, например фигур Лиссажу и фазовых портретов колебаний. Simulink имеет средства анимации и звукового сопровождения. А в дополнительных библиотеках можно отыскать и такие «дорогие приборы», как анализаторы спектра сложных сигналов, многоканальные самописцы и средства анимации графиков. Программные средства моделирования динамических систем известны давно, к ним относятся, например, программы Tutsim и LabVIEW for Industrial Automation. Однако для эффективного применения таких средств необходимы высокоскоростные решающие устройства. Интеграция одной из самых быстрых матричных математических систем — MATLAB с пакетом Simulink открывает новые возможности использования самых современных математических методов для решения задач динамического и ситуационного моделирования сложных систем и устройств. Средства графической анимации Simulink позволяют строить виртуальные физические лаборатории с наглядным представлением результатов моделирования. Возможности Simulink охватывают задачи математического моделирования сложных динамических систем в физике, электро- и радиотехнике, в биологии и химии — словом, во всех областях науки и техники. Этим объясняется популярность данного пакета как в университетах и институтах, так и в научных лабораториях. И, наконец, важным достоинством пакета является возможность задания в блоках произвольных математических выражений, что позволяет решать типовые задачи, пользуясь примерами пакета Simulink или же просто задавая новые выражения, описывающие работу моделируемых пользователем систем и устройств. Важным свойством пакета является и возможность задания системных функций (S-функций) с включением их в состав библиотек Simulink. Необходимо отметить также возможность моделирования устройств и систем в реальном масштабе времени. 528
12.2. Основные возможности пакета
Simulink
Как программное средство Simulink — типичный представитель визуально-ориентированных языков программирования. На всех этапах работы, особенно при подготовке моделей систем, пользователь практически не имеет дела с обычным программированием. Программа в кодах автоматически генерируется в процессе ввода выбранных блоков компонентов, их соединений и задания параметров компонентов. Важное достоинство Simulink — это интеграция не только с системой MATLAB, но и с рядом других пакетов расширения, что обеспечивает, по существу, неограниченные возможности применения Simulink для решения практически любых задач имитационного и событийного моделирования. 1 2 . 2 . 2 . Общие возможности Simulink Уже версия пакета Simulink 3.1 обладала следующими важными возможностями: • • • • • • • • • • • •
интегрированный браузер моделей (Windows 95/98/NT); возможность увеличения блок-схем (zooming); блок Scope, способный работать с несколькими портами; интегрированные возможности линейного анализа; графический интерфейс для описания свойств сигнала; интегрированный браузер библиотек (только Windows 95/98/NT); новые блоки Subsystem, Round Sum, Enhanced Mux, Bus Selector и Model Info; поддержка различных типов данных и их преобразований; поддержка комплексных чисел при работе с базовыми блоками и комплексно-вещественные преобразования; оптимизация скорости и использования памяти при моделировании; многоцветные изображения, метки портов и маскированных блоков; блоки, определяемые пользователем, с поддержкой множества портов и различными интервалами дискретизации.
1 2 . 2 . 3 . Дополнительные возможности Simulink В версии Simulink 4.0 добавился еще ряд возможностей. Ниже они перечислены по категориям. Совершенствование пользовательского интерфейса: • новый графический отладчик для интерактивного поиска и диагностики ошибок в модели; • усовершенствован навигатор (браузер) моделей (Model Browser); • новый однооконный режим для открытия подсистем; • контекстное меню для блок-диаграмм (открывается щелчком правой кнопки мыши) как для версий Windows, так и для Unix; • новый диалоговое окно Finder для поиска моделей и библиотек. Расширенная поддержка крупных приложений: • с помощью новых Simulink-объектов данных можно создавать специфические для приложений типы данных MATLAB; • новый графический пользовательский интерфейс Simulink Explorer для наблюдения и редактирования объектов данных Simulink; 529
Глава 12. Simulink
— система математического
моделировании
• усовершенствование блока Configurable Subsystems; • новое меню выбора блока конфигурируемой подсистемы; • поддержка зашиты интеллектуальной собственности с помощью S-функций (требуется Real-Time Workshop 4.0); • поддержка S-функций, кодируемых в языке ADA. Новые и улучшенные возможности блоков: • поддержка матричных сигналов многими Simulink-блоками; • блоки Product. Multiplication, Gain и Math Function теперь поддерживают матричные операции на матричных сигналах; • блоки Мих и Demux теперь поддерживают мультиплексирование матричных сигналов; • новый блок Reshape изменяет размерность своего входного сигнала; • блок Probe теперь по умолчанию выводит размерность сигнала, подаваемого на вход; • новый блок Bitwise Logical Operator маскирует, обращает или расщепляет биты целочисленного сигнала без знака; • четыре новых блока Look-Up Table; • новый блок Polynomial выводит полиномиальную функцию от входного сигнала. Все зго говорит о том, что система Simulink 4 подверглась не «косметической», а самой серьезной переработке, выдвигающей эту систему на новый уровень развития и применения. 12.2,4
Н о в ы е в о з м о ж н о с т и Simulink 5/6
Реализации Simulink 5 пополнились следующими новыми возможностями: • • • • • • • •
введена цветовая индикация ошибочных циклов; улучшено исполнение ветвлений входа; введен новый блок конструирования источников (сигналов); введено средство обзора моделей; расширены возможности браузера диагностики; расширены возможности редактора масок; введен редактор включения специальных символов и греческих букв; расширены возможности модели дискретизатора.
Эти возможности трудно назвать заметными, за исключением, пожалуй, блока задания источников (сигналов) Однако в MATLAF3 6.5 Service Pack I Simulink 5 был существенно переработан и практически превратился в Simulink 6. Simulink 6 — это существенно обновленная платформа для эмуляции и модельного блочного проектирования динамических систем. Она обеспечивает интерактивную графическую среду и настраиваемый набор библиотек блоков, которые позволяют с высокой точностью проектировать, моделировать, реализовывать и тестировать см-.-;.-.. :,. мления, обработки сигналов, связи и т. п. Версия Simulink 6 улучшает : ф " по.аптельность, скорость реакции, точность моделирования и эффективность , \я процессов при моделировании больших систем. Simulink 6 содержит •<•> >; средства для повышения скорости работы моделей систем управления, СР:-.• :>с:аботки сигналов:
530
12.3. Запуск Simulink и основы работы с пакетом • компонентное моделирование больших систем; • возможность сегментирования модели на несколько файлов, каждый из которых представляет собой отдельную модель; • возможность моделировать, тестировать и реализовывать каждый компонент отдельно, еще до его вставки в общую модель системы; • улучшенная интеграция моделей с существующими системами управления файлами и контроля версий; • инкрементальная загрузка моделей и генерация кода; • увеличена скорость обновления диаграмм и моделирования для больших моделей; • созданы рабочие пространства моделей (Model Workspaces), обеспечивающие отдельные области памяти для хранения параметров и переменных каждой модели; • улучшена поддержка шин для задания интерфейсов, поддержки операций над сигналами шины и описания шин как структур при генерации кода; • реализована интеграция Simulink и Stateflow; • унифицированный браузер моделей (Model Explorer) позволяет просматривать, создавать, конфигурировать все сигналы, параметры и свойства моделей; • объединены и унифицированы настройки параметров моделирования и генерации кода; • введена поддержка создания и сохранения конфигураций параметров моделирования и генерации кода; • введена возможность управления данными и их визуализацией; • добавлены новые объекты данных для задания структур, шин и типов данных; • введены возможности протоколирования данных и добавления контрольных точек без добавления блоков к модели: • средство Signal & Scope Manager позволяет подключать к модели источники и приемники сигналов без добавления блоков; • поддержка языка MATLAB; • генерация С-кода и реализация приложений на основе внедряемых М ATLAB-ал горитмов; • улучшена функциональность для создания S-функций в виде М-файлов. Эти отличия Simulink 6 от Simulink 5.1 практически не влияют на практику подготовки моделей и приемы математического моделирования, описанные в этой и в последующих главах. Поэтому их материал в равной мере относится как к Simulink 5.1, так и Simulink 6. В конце этой главы мы обсудим главные новинки Simulink 6 более подробно.
12.3. З а п у с к Simulink и основы работы с пакетом 1 2 . 3 . 1 . И н т е г р а ц и я п а к е т а Simulink с с и с т е м о й MATLAB После инсталляции Simulink (отдельно от MATLAB или в его составе) он автоматически интегрируется с MATLAB. Внешне это выражается появлением кнопки Simulink в панели инструментов (перед кнопкой ?) системы MATLAB (см. 531
Глава 12. Simulink — система математического моделировании рис. 1.18). При нажатии этой кнопки открывается окно интегрированного браузера библиотек, показанное на рис. 12.1. Ш
.
y
e
< • • - [ .
w
Q gj
- A y ,
.
" f* * '• $^ , ? i Curent Driectory; I c. WATLAB654c<>blox
Fe li Edti Veiw Hep l New • • Co lse " ' P
•
r
e
f
e
Э •Ш
r
e
n
c
e
s
.
.
ё***3"
•
Sm>!irw
c
o
n
t
D
i
s
c
r
e
t
i
n
u
i
t
i
e
s
e
Look-Up ТаЫев |r+-
.•• i h j SigneJ Attrbutes Ъ4 Signal Routing
;
s
Model Verification
- i " j Ports aSubsy-stems =
i
*
• ЪА Modet-Wide Utiiibes
;
D
\ •
*>3 Math Operations ,-- - ^
~""
:•
bfi Discontinuities ± H Look-Up Tabtes
s
'
j * .
Ъ^ Discrete I
~
.
±3^ Conbiuous 1
,711 -J
Math Operations
\m
-
f
x
:.... * ^ Sinks ^ 4 Sources
Mode! Vertftcafcon
j
&
Ъ-i User-Defined Functions i+l"SN Aerospace Biockset Ш в
. ;
M
•-Щ
i
t
i
s
Mode-Wide UlAties
c
CDMA Reference Blockset
i+1 1 ^ Conmunications Blod-^et Controt Svstem Toolbox
И Open a Simulink model
Л
£
Ports I SubsyS^is
;..
*||Е
1 •! • • -.
.
.
I
f
.
?
.
.
.
.
.
.
.
^
Рис. 12.1. Окно браузера библиотек Simulink 5.1 Нетрудно заметить, что пользовательский интерфейс окна браузера выполнен в общем стиле, характерном для Проводника Windows 95/98/2000/XP. Это позволяет отказаться от детального описания его особенностей. Отметим лишь главные возможности работы с браузером. В окне браузера содержится дерево компонентов библиотек Simulink. Для просмотра того или иного раздела библиотеки достаточно выделить его мышью — в правой части окна Simulink Browser Library появится набор пиктограмм компонентов активного раздела библиотеки. На рис. 12.1 показан основной раздел библиотеки Simulink. У версии Simulink 5.0 число разделов библиотеки возросло с 8 до 10 по сравнению с Simulink 4. Новыми являются подразделы верификации моделей Model Verification и построения субсистем Subsystems. Но уже в версии 5.1, в основном описанной в этой книге, число разделов библиотеки выросло до 13. С помощью меню браузера или кнопок его панели инструментов можно открыть окно для создания новой модели или загрузить существующую. Работа с Simulink происходит на фоне открытого окна системы MATLAB, в котором нередко можно наблюдать за выполняемыми операциями — если их вывод предусмотрен программой моделирования. Интеграция пакета Simulink с системой MATLAB имеет глубокий смысл. Решение большинства задач моделирования базируется на автоматическом составлении сложных конечно-разностных систем для линейных, нелинейных и дифференциальных уравнений, называемых уравнениями состояния модели. Все это обеспечивает пакет Simulink. Наиболее эффективное решение таких систем уравнений достигается за счет применения аппарата матричных вычислений, реализованого в системе MATLAB. 532
12.3. Запуск Simulink и основы работы с пакетом Вот почему сочетание Simulink с MATLAB оказалось столь плодотворным. К этому стоит добавить, что Simulink использует практически любые операторы и функции системы MATLAB (а также язык программирования MATLAB). 12.3.2. Запуск моделей Simulink из среды MATLAB Обычно Simulink запускается соответствующей кнопкой из панели инструментов окна MATLAB, что было описано выше, после чего все последующие действия выполняются в среде MATLAB + Simulink. Можно также запустить Simulink, исполнив в командной строке MATLAB команду » simulink
Для вывода полного перечня команд Simulink надо выполнить команду » help simulink
Список команд для версии Simulink 5.1 будет дан в следующей форме: >> nelp simulink Simulink
Version 5.1 (R13SP1) 22-Aug-2003 Model analysis and construction functions. Simulation sim — Simulate a Simulink model. sldebug — Debug a Simulink model. simset — Define options to SIM Options structure. simget — Get SIM Options structure Linearization and trimming. linmod — Extract linear model from continuoustime system. Iinmod2 — Extract linear model, advanced method. dlinmod — Extract linear model from discrete-time system. trim — Find steady-state operating point. Model Construction. close_system — Close open model or block. new_system — Create new empty model window. open_system — Open existing model or block. load_system — Load existing model without making model visible. save_system — Save an open model. add_block — Add new block. add_line — Add new line. delete_block — Remove block. delete_line — Remove line. find_system — Search a model. hilite_system — Hilite objects within a model. replace block — Replace existing blocks with a new block. set param — Set parameter values for model or block. get_param — Get simulation parameter values from
533
Глава 12. Simulink — система математического
моделировании
model. — Add a user-defined s t r i n g parameter to a model. delete •.arr. — Delete a user-defined parameter from a model. bdclosf — Close a Simulink window, bdroot — Root level model name. gcb — Get the name of the current block, gcbh — Get the handle of the current block, gcs — Get the narr.e of the current system, getfullname - get the full path name of a block slupdate — Update older 1.x models to 3.x. addterms — Add terminators to unconnected ports, boolean — Convert numeric array to boolean, slhelp — Simulink user's guide or block help. Masking, hasmask —• Check for mask. hasmaskdlg - Check for mask dialog, hasmaskicon - Check for mask icon, iconedit — Design block icons using ginput function. maskpopups — Return and change: masked block's popup menu items. movemask — Restructure masked built-in blocks as masked subs Library. libinfо Get library information for a system. Diagnostics. sllastdiagnostic — Last diagnostic array. silasterror — Last error array. sllastwarning — Last warninc array. si diagnosti. с я — Get block ccunt and compile stats for a model. Hardcopy and printing. frameedit — Edit print frames for annotated model printout s . print — Print graph or Simulink system; or save graph to M-file. printopt. — Printer' defaults. orient — Set paper orientation. S e e a l s o BLOCKS a n d SIMDEMOS. add param
В новейшей версии Simulink 6 исполнение этой команды также приводит к выдаче списка команд. Ниже приведено только начало списка: >> help simulink Simulink Version 6.0 :R14) 05-May-2004 Model analysis and construction functions. Simulation sim — Simulate a Simul i r-k model.
534
12.3. Запуск Simulink и основы работы с пакетом — Debug a Simulink model. — Define options to SIM Options structure. — Get SIM Options structure Имена команд представлены в виде гиперссылок, и их активизация выводит в командном режиме справку по соответствующей команде. Приведенные выше команды используются для обеспечения связи (интерфейса) между двумя в сущности разными программами — MATLAB и Simulink. Практически они используются автоматически в ходе визуально-ориентированного проектирования моделей. Однако опытные пользователи могут воспользоваться этими командами при решении специфических задач применения Simulink. Дополнительную информацию можно получить, используя команды help blocks и help simdemos. Первая команда дает информацию об основных библиотеках Simulink и примерах применения S-функций, а вторая выводит список демонстрационных примеров. Запуск этих примеров дает возможность практически познакомиться с возможностями пакета Simulink и оценить степень сложности систем и устройств, которые могут моделироваться с помощью этого пакета. 12.3.3. Особенности интерфейса Simulink Интерфейс Simulink полностью соответствует стилю интерфейса типичных приложений Windows 95/98/NT/2000 (для Simulink 5/6 возможна работа и в Windows ХР), в том числе интерфейсу системы MATLAB. В то же время он концептуально строг, чтобы не досаждать пользователю многочисленными «излишествами» стандартного интерфейса Windows 95/98/NT/2000/XP. Меню системы содержит следующие пункты: • File — работа с файлами моделей и библиотек (их создание, сохранение, считывание и печать); • Edit — операции редактирования, работа с буфером обмена и создание подсистем; • View — управление отображением панели инструментов и строки состояния; • Simulation — управление процессом моделирования (старт, пауза, вывод окна настройки параметров моделирования); • Format — операции форматирования модели (смена шрифтов, редактирование надписей, повороты блоков, использование тени от блоков, операции с цветами линий блоков, их фоном и общим фоном; • Tools — управление видом анализа (в линейной области и в режиме реального времени RTW). Первые три пункта главного меню содержат общепринятые для Windows-приложений команды и операции, поэтому мы не будем их обсуждать. Остальные будут рассмотрены по мере знакомства с системой Simulink. Как уже отмечалось, вместе с рабочим окном Simulink выводится окно с перечнем разделов основной библиотеки компонентов. Это окно — важная часть интерфейса Simulink. Оно открывает доступ к другим пакетам компонентов (Blocksets&Toolboxes) и примерам их применения (Demos). Это дает пользователю возможность постепенно знакомиться с новыми областями применения Simulink. 535
Глава 12. Simulink — система математического
моделировании
12.4. Работа с демонстрационными примерами 1 2 . 4 . 1 . Поиск и загрузка модели аттрактора Лоренца Даже незнакомый с Simulink пользователь может быстро оценить возможности этого пакета, воспользовавшись интересными и поучительными примерами, входящими в поставку Simulink. Они находятся в папке MATLAB/TOOLBOX/SIMUL1NK/ SIMDEMOS. Попутно отметим, что в папке MATLAB/SIMULINK располагаются служебные файлы. Для загрузки примеров, наряду с вкладкой Demos справки, используется Папка: | О simdemos С? ЕЬ (как обычно) команда Open в меню File браузера библиотеки Simulink (рис. 12.1). В окне с названием Open (рис. 12.2) надо войти в указанную папку и выбрать подходящий пример. I При открытии нужного примера (в Имя Фвйлв: jlorems данном случае — файл lorenzs) появляТип Файлэв: j Model fmdi) ется окно редактирования графической модели устройства (рис. 12.3). Puc. 12.2. Окно с перечнем файлов Как можно заметить из примера, демонстрационных примеров пакета графическая модель содержит ряд блоSimulink ков. Каждый блок имеет наглядное общепринятое обозначение в виде прямоугольника, треугольника и т. д. Блоки имеют входы и выходы и описываются различными математическими зависимостями. Блоки соединяются друг с другом 1ЕГТГИ D| £ У
г»
• " ' I
Р
1 • ,:
3 ЫФ -
\ •/. :; Add or subtract n i put*. SpeOfyoneof^fofc lwn i g: ds im lg i contarnng -or -for each n iput port. Ifor spacer between port) (
Ready
..
. •" -
Н
)
jiOO%
|
7-
j '.•
Iode23 '
Puc. 12.3. Модель аттрактора Лоренца в окне редактирования 536
.
пакета
Simulink
12.4. Работа с демонстрационными
примерами
линиями со стрелками, причем стрелка указывает направление от выходов одних блоков ко входам других. Имеются также текстовые комментарии и средства для вывода подсказок и открытия окон справочной системы. Аттрактор Лоренца является типичной замкнутой колебательной системой с положительной обратной связью, в которой развиваются колебания очень сложной формы, демонстрирующие явление хаоса. Модель содержит ряд вычислительных модулей, отражающих ее нелинейность и основные особенности структуры, а также два регистрирующих прибора — виртуальные осциллограф и графопостроитель.
12.4.2. Установка параметров компонентов модели Для пользователя, имеющего хотя бы начальное представление о моделировании, вполне ясно, что любой компонент модели имеет какие-то параметры или хотя бы один параметр (впрочем, есть компоненты и без параметров). Из самой графической модели не видно, какими параметрами обладает тот или иной компонент. Каким же образом узнать, что за параметры компонентов установлены в той или иной модели? Для того чтобы вызвать окно модификации параметров компонента, нужно навести курсор мыши на изображение компонента и дважды щелкнуть левой кнопкой мыши. На рис. 12.3 справа от модели показаны два таких окна для компонентов с именами у-х и Sigma(y-x). Кроме того, можно просто просмотреть параметры компонента. Для этого нужно, указав курсором мыши интересующий вас компонент, задержать курсор на 2—3 секунды. Под ним появится подсказка с указанием параметров этого компонента.
12.4.3. Установка параметров моделирования Прежде чем запустить загруженную модель, стоит ознакомиться с установкой общих параметров моделирования. Для этого выполним команду Simulation Parameters... в меню Simulation окна Simulink. Появится окно установки параметров моделирования, показанное на рис. 12.4 Это окно имеет ряд вкладок с довольно большим числом параметров. Мы постепенно рассмотрим их все. Но пока остановимся на вкладке, открытой по умолчанию, — Solver (Решатель). Эта вкладка позволяет установить параметры решающего устройства системы моделирования Simulink. К числу важнейших параметров решателя относится время моделирования — Simulation time. Оно задается начальным временем Start time (обычно 0) и конечным временем Stop time (в нашем случае бесконечность inf). Равенство Stop time бесконечности означает, что моделирование будет происходить бесконечно долго, пока мы не прервем его. Однако в этом случае трудно получить различимые осциллограммы работы устройства, поэтому рекомендуется задавать конечные значения Stop time. Стоит отметить, что время моделирования — величина довольно условная. Не следует думать, что Stop time = 50 означает моделирование в течение 50 секунд. Точного соответствия между временем моделирования в секундах и заданным значением нет. Реальное время моделирования сильно зависит от быстродействия компьютера, на котором выполняется моделирование. Первостепенное значение имеют две опции решателя в поле Solver options: тип решения и метод решения. Возможно два типа решения: 537
Глава 12. Simulink — система математического
моделировании
31 a # (ft iftra-iSofcerj Wwkp j acerlt)} Da ignosc ilt| Advanced Rea-lTn*Wok tshop
Puc. 12.4. Установка параметров модели аттрактора Лоренца • Variable-step solvers — решение с переменным шагом. • Fixed-step solvers — решение с фиксированным шагом.
Как правило, лучшие результаты дает решение с переменным шагом (обычно по времени, но не всегда). В этом случае шаг автоматически уменьшается, если скорость изменения результатов в процессе решения возрастает. И, напротив, если результаты меняются слабо, шаг решения автоматически увеличивается. Это исключает (опять-таки, как правило) расхождение решения, которое нередко случается при фиксированном шаге. Метод с фиксированным шагом стоит применять только тогда, когда фиксированный шаг обусловлен спецификой решения задачи, например, если ее цель заключается в получении таблицы результатов с фиксированным шагом. Этот 4 SmutoUen Parameters ккей» метод дает неплохие результаты, если Sovler j Workspace /IO | Da i gnostc i s| Advanced] ReaT l «neWorkshop| поведение системы описывается почти Sm i ua lto in m ti e монотонными функциями. В противStop time: 100 Start tm i e: | 0.0 ном случае шаг времени придется сиSovler opto i ns льно уменьшать для описания наиболее Type: .a il be l -step j j | ode23 (Bogack-iShampn ie] disciete (no continuous states) быстрых участков изменения результаods45 IDoimand-Piince) Max step size: тов моделирования, что ведет за собой odel 13 (Adams) Min step size: | auto ode15s (stiff/NDF) значительное возрастание времени моode23$ (stiff/Mod. Rosenbiock) Initial step size: j auto делирования. ode23l (mod stiff/Tiapezoida!) ode23lb(stiff/TR-BDF2) Output opti o ns Вторая из указанных опций — вы| Refine output Refine factor: бор метода моделирования. Рисунок 12.5 показывает окно установки параметров моделирования отдельно с открытым меню выбора метода моделирис J2.5. Установка метода рования. моделирования 538
12.4. Работа с демонстрационными
примерами
Для решения дифференциальных уравнений можно выбрать следующие методы: discrete (дискретный). ode45, ode23 (три варианта, включая метод Розенброка), rk45 (метод Дорманда—Принса), ode113 (метод Адамса) и od 15s. Методы, в наименовании которых имеется слово stiff, служат для решения жестких систем дифференциальных уравнений. Подробное описание указанных методов решения дифференциальных уравнений можно найти в Главе 8. ВНИМАНИЕ!
Выбор метода моделирования имеет решающее значение в достижении успеха моделирования. В этом отношении демонстрационные примеры Simulink, будучи заранее тщательно отлаженными, играют злую шутку с начинающими пользователями. У последних складывается совершенно неверное представление о легкости моделирования. На самом деле подготовка модели далее не очень сложной сне • /-:ы требует серьезных знаний и немалых трудов по ее отладке.
Следующие три параметра — значения опции auto — обычно задаются автоматически, но в особых случаях их можно ввести явно. • Max step size — максимальный шаг интегрирования сиг. г-мы однородных дифференциальных уравнений; • Min step size — минимальный шаг интегрирования; • Initial step size — начальный шаг интегрирования. Важен и такой параметр моделирования, как точность интегрирования: • Relative tolerance — относительная погрешность интегрирования; • Absolute tolerance — абсолютная погрешность интегрирования. По умолчанию они заданы, соответственно, равными КГ 3 и !0~fl. Если, например, графики результатов моделирования выглядят составленным» явно из отдельных фрагментов, это указывает на необходимость уменьшения указанных значений погрешности. Однако слишком малые погрешности могут вызвать значительное увеличение времени вычислений. Не оптимально выбранные значения погрешности (как очень малые, так и очень большие) могу••ызкэть неустойчивость и даже «зацикливание» процесса моделирования. С остальными параметрами и вкладками окна параметре'»- У- делирования мы познакомимся в дальнейшем. 12.4.4. Запуск процесса
моделирования
В конце панели инструментов Simulink находятся две важньи: кнопки управления моделированием. Одна из них, в виде черного треугольник- ^'Start/Pause Simulation), запускает или приостанавливает начатый процесс моделирования, а другая, в виде черного квадратика (Stop), останавливает его. Все, что нужно для запуска моделирования, — это нажать кнопку с изображением треугольника. Рисунок 2.6 показывает результат запуска выбранной модели. Вместо кнопок можно использовать команды Start и Pause в меню Simulation окна модели. В данном случае результаты моделирования представлен;.: в виде довольно сложного и неординарного фазового портрета колебаний, построенного с помощью виртуального графопостроителя, и осциллограммы временной зависимости колебаний, полученной с помощью виртуального осциллограф;-, .Результат моделирования показывает, что даже в такой сравнительно простой нелинейной системе, каковой является аттрактор Лоренца, возникают сложные и отчасти хаотические колебания. 539
Глава 12. Simutink
— система математического
моделировании
Рис. 12.6. Результаты моделирования аттрактора Лоренца 1 2 . 4 . 5 . Решение дифференциальных уравнений Ван-дер-Поля Продолжим рассмотрение моделирования колебательных систем. Системы второго порядка, описываемые дифференциальными уравнениями второго порядка, занимают важное место в таком фундаментальном разделе физики, как теория колебаний. Именно на базе таких систем созданы многочисленные генераторы периодических колебаний самого различного типа — от LC-генераторов до лазерных и иных квантовых генераторов. Пример моделирования типовой системы второго порядка есть в наборе демонстрационных примеров пакета Simulink. Модель такой системы представлена на рис. 12.7. Эта система описывается хорошо известным нелинейным дифференциальным уравнением второго порядка Ван-дер-Поля (или двумя уравнениями первого порядка). Как нетрудно заметить, данная модель представляет собой усилитель с нелинейным элементом Fen, позволяющим задать тип нелинейности, с положительной обратной связью и имеет в своем тракте блоки, ослабляющие как высокие, так и низкие частоты. Колебания в такой системе возникают на некоторой частоте, для которой фазовый сдвиг тракта равен нулю, а малосигнальный петлевой коэффициент передачи превышает 1. Характер развития колебательного процесса в решающей мере зависит от характера нелинейности, заданного в блоке Fen. На рис. 12.7 показан и результат моделирования. В данном случае виртуальный осциллограф отображает две кривые, соответствующие выходным портам Out 1 и Out 2. Для этого перед осциллографом размещен блок мультиплексора Мих с двумя входами. Результат моделирования отображается в виде временных зависимостей выходных сигналов. Они представляют собой периодические колебания, форма которых заметно отличается от синусоидальной, что является следствием нелинейности моделируемой системы. 540
12.4. Работа с демонстрационными
примерами
я D
s на
• • [KSS~
/an ce lrPO
3
e
йв
if f
Equation
EE23E
< !
1В: 0
: General «фгем*Я1 b"5c«. ' Example: sn{i.i['] * «ю£2 3
Sample tHie f-1! for inherited}:
OK I Caned j Heo t Puc. /2.7. Модель колебательной системы второго порядка
12.4.6. Изменение характера нелинейности модели Результат на рис. 12.7 получен для зависимости вида Дм) = I — и*и (окно задания нелинейности представлено на рис. 12.7 в левом нижнем углу). Допустим, нас интересует поведение системы для иной нелинейности, скажем flu) = I — ехр(«). Для замены нелинейности достаточно сделать двойной щелчок на блоке Fen. В появившемся окне параметров надо вместо функции по умолчанию ввести новую функцию, отражающую нелинейность модели. Это и показано на рис. 12.8. После уточнения нелинейности и закрытия окна параметров можно запустить измененную модель. Результаты также представлены на рис. 12.8. Сравнение временных диаграмм (осциллограмм) выходных сигналов на рис. 12.7 и 12.8 показывает существенные изменения в характере поведения системы. Во втором варианте предварительная стадия занимает больше времени и колебания во время переходного процесса имеют существенно большую амплитуду, чем в стационарном режиме.
12.4.7. Как добавить в модель графопостроитель Иногда поведение системы второго порядка удобно представить фазовым портретом колебаний — как в нашем первом примере (рис. 12.6). Фазовый портрет двух временных зависимостей (например, напряжения и тока в электрической цепи) строится в виде параметрически заданного графика. В случае его построения осциллографом или графопостроителем на вход Y подается сигнал одной временной зависимости, а на вход X — другой. В нашем втором примере вывод фазового портрета не предусмотрен. Добавить его очень просто — надо отредактировать имеющуюся модель. Эту модель достаточно дополнить графопостроителем, входы которого подключаются к выходным 541
Глава 12. Simulink
— система математического
моделировании
о E5 a а van tier Pol Equation
SB
I : X"* ... \
PPP
ABE
В
.;
0< j CM 1 H«p l |___J
Puc. /2.5. Изменение функции нелинейности в модели системы второго порядка портам Out 1 и Out 2. Для этого сначала выведем на передний план окно браузера библиотек Simulink и откроем в нем раздел Sinks (Регистрирующие устройства). Найдя в нем компонент XY-Graph, перенесем его в окно модели и расположим справа от осциллографа. Этот момент работы поясняет рис. 12.9. Теперь надо подключить входы графопостроителя к выходным портам. Для этого, нажав клавишу Ctrl и удерживая ее, уцепитесь курсором мыши за провод,
van der Pol Equato in
. 12.9. Перенос графопостроителя в модель 542
12.4. Работа с дели
... щиош'ъ.ми примерами
подходящий к порту 1. Начните перемешать курсор мыши к верхнему входу графопостроителя при нажатой левой кнопке мыши. Всл'\:; за курсором мыши будет тянуться создаваемое соединение. Указав вход графою роителя, отпустите кнопку мыши и клавишу Ctrl. Первое соединение еден,': Если оно пересекает какой-то блок, то, захватив линию соединения и на:*:"1 -вую к: •нку мыши, отведите соединение в нужное место. Аналогичным обра-..ч соедините порт 2 с нижним входом графопостроителя. Модель примет вид, показанный па рис. 12.10. •
.
,
'
.
• .
Si
Puc. 12.10. Модель с подключенным Г
Теперь скорректируем нелинейность: F(u) = 1 данном случае параметры нелинейности подобраны таким образе?,:, что колебательный процесс возникает только в начале включения системы. Затем за несколько периодов колебания затухают. Увеличим до 50 время моделирования и перейдем к моделированию с фиксированным шагом 0,1, что сделает кривые переходных процессов более плавными. Для моделирования используем решатель Рунге—Кутта. Запустив модель, нетрудно убедиться в этом: результаты моделирования на рис. 12.10 наглядно показывают, что фазовый портрет колебаний — это сворачивающаяся спираль, а временные зависимости — затухающие во времени колебания. В этих примерах мы столкнулись с принципиально важным достоинством пакета Simulink — аналитическое описание MHOI моделей можно оперативно менять, причем оно выполняется по правилам, принятым в системе MATLAB. Благодаря этому математическая сущность модели оказывается вполне понятной, а результаты моделирования наглядно и адекватно описывают работу сложных моделей при введении в их описание самых разных математических закономерностей.
543
Глава 12. Simulink — система математического
моделировании
12.5. Работа с редактором дифференциальных уравнений 1 2 . 5 . 1 . Решение уравнений Ван-дер-Поля Приведенный выше пример является характерным для ситуации, когда моделируется система или устройство, поведение которого описывается дифференциальными уравнениями известного вида — в нашем случае уравнениями Ван-дер-Поля. Однако Simulink имеет специальный, редактор дифференциальных уравнений, с помощью которого можно задать систему дифференциальных уравнений первого порядка явно в общепринятой форме Коши и тут же начать ее решение с помощью решателя. Для получения доступа к решателю надо загрузить файл dee, который находится в папке MATLAB/TOOLBOX/SIMULINK/DEE. Загрузка файла приводит к появлению окна с набором демонстрационных примеров, показанного на рис. 12.11 в левом верхнем углу. Ограничимся примером с именем ddedemol. Он выводит окно всего с двумя блоками: блоком vdp и осциллографом х1. Первый блок решает заданное уравнение Ван-дер-Поля, а второй просто отображает решение в виде временной зависимости. Двойной щелчок на блоке vdp открывает редактор дифференциальных уравнений, окно которого показано на рис. 12.11 в правой части. В этом окне можно модифицировать решаемые уравнения или ввести новые. Окно осциллографа также представлено на рис. 12.11.
Рис. 12.11. Решение системы дифференциальных уравнений Ван-дер-Поля 1 2 . 5 . 2 . Решение уравнений аттрактора Лоренца Теперь вернемся к уже описанному аттрактору Лоренца. Файл deedemo2 дает пример задания системы дифференциальных уравнений для аттрактора Лоренца в явном виде и их решения (рис. 12.12). 544
12.6. Дополнительные примеры моделирования iliiliiiiiiiliiliiiSii D I
и аз • • Р
JtlJl
' | ft IB !> Ф
I OHfesenaill Equdm i £dto ir fen be tck s^axj Narr»: JLoienzAltractof «of inputs: • JO • •.
.
Rfst order equaliont, rfx.uj:
••
jai_*J
.
I ...'...
'
-.
x O
Total-3
•
1
-sigma*x[11* sigma"x(21
к[11"х(2]-Ьв1а"я[3) +х(1)
dx^dt1 Humbef of states • 3
. ;;.. Outpulgquetont.ifx.uj: У-
x(1] x(3)
Help
j
| si#« И6А0У
• Rebuid j
Undo
I
Done
•
|
:
1
Puc. 12.12. Решение системы дифференциальных уравнений аттрактора Лоренца
Нетрудно заметить, что результат решения совпадает с результатом моделирования, представленным на рис. 12.6. В системе MATLAB одну и ту же задачу можно решать рядом способов. В этом случае получение одинаковых результатов (в том числе при решении средствами Simulink) дает дополнительную гарантию правильности решения и корректности создаваемых моделей.
12.6. Дополнительные примеры моделирования 1 2 . 6 . 1 . Моделирование кубика с пружинкой Теперь рассмотрим следующий пример из области физики. Пусть кубик, сбоку которого прикреплена пружинка, лежит на гладкой поверхности. Как будет вести себя кубик, если мы, ухватившись за свободный конец пружинки, будем дергать его туда-сюда? Знающий физику человек сразу скажет, что если трение не очень велико (а у нас поверхность гладкая), го кубик будет перемещаться из одного положения в другое с затухающими колебаниями. Затухание колебаний обусловлено демпфированием вследствие трения кубика о поверхность, на которой он лежит. Это, кстати, напоминает поведение аттрактора Лоренца (на его фазовом портрете тоже видны два характерных состояния), но в данном случае перемещение кубика обходится без хаотических движений. Файл этого примера — onecart — находится в папке simgeneral. Рисунок 2.13 показывает модель этого примера и результат моделирования. В данном случае результат моделирования отображается в. виде анимационного видеоклипа. Наглядность представления поведения устройства в данном случае вполне очевидна. К сожалению, рис. 12.13 показывает лишь один кадр анима-
545
Глава 12. Simulink — система математического
Rie Edit View йтиЫюп
Format Tools heto t
4^Н
моделировании
#
^ Tods W nidow Hrp i
•
Рис. 12.13. Модель кубика с пружинкой ЦИИ — на деле отчетливо видны рывки палочки, на которой закреплен свободный конец пружины, и затухающие колебания кубика. 12.6.2. Информационное обеспечение примера Помимо самой модели в окне ее редактирования можно вводить текстовые комментарии (аннотации) и гиперссылки в виде прямоугольников разного размера с надписями. Две гиперссылки показаны под моделью на рис. 12.13. При активизации гиперссылки выводится информационное окно (рис. 12.14). В остальном работа с этой моделью и коррекция ее параметров аналогична описанной выше. 12.6.3. Моделирование системы терморегулирования дома Рис. 12.15 показывает модель системы терморегулирования для отдельного дома. Система терморегулирования представляет собой замкнутую релаксационную систему. Температура в доме контролируется с помощью датчика температуры. Его сигнал сравнивается с опорным сигналом температуры, и разность используется для импульсного управления нагревателем. В системе предусмотрен контроль расходов на обогрев дома (в долларах). Осциллограммы работы модели, полученные с помощью виртуального осциллографа, представлены на рис. 12.15. 12.6.4. Использование субмоделей В этом примере мы сталкиваемся с новой принципиально важной и эффективной возможностью пакета Simulink — использованием субмоделей. Субмодель строится практически так же, как и модель системы. Она имеет обозначенные цифрами порты входа и выхода, через которые соединяется с основной моделью. 546
12.6. Дополнительные
примеры
моделирования
3 ! И Ф И ! I* В 'it
[f
:
' -i: ,. I ...: J •Sirmiimk info fgr the system orracsut.
With any Sm i uNnk system, you can start the simulation by selecting "Start" from the "Simulation" menu. Once you have started, you can always terminate a simulation by selecting "Stop" trorn the same menu. Some simulations me; each their pie-set stop time and terminate automatically. You can set the simulation stop time, step si;e, and other simulation parameters by editing ihe "Parameters" dialog box under the "Simulation" menu. You can select and move any block on a Simulink block diagram by clicking once and dragging. You can generally open a Simuiink block by double-clicking on ii For example, demo systems will often have a box marked with a question mark (?). By double-clicking on this block, you can reveal an explanatory note contained inside it. When you have finished with a Simulink system, you can ciose it by selecting "Close" from the "File" menu
1100%
Рас. 12.14. Активизация гиперссылок
D i a a m \ ..*
D ' с£ U в
& и |» в •* Ф
- I 1 1 1 * • [fw
3; И Ф
Рис. 12.15. Система терморегулирования дома На рис. 12.15 показана одна из новинок версии Simulink 4.0 — браузер субмоделей. Он находится внизу экрана. В левом окне браузера расположена древовидная файловая структура субмоделей, а в правой — выделенная субмодель, в нашем случае это термодинамическая модель дома. 547
Глава 12. Simulink
— система математического
моделировании
На рис. 12.16 представлена другая субмодель — субмодель термостата. Она представляет собой типичное релейное устройство, срабатывающее, если температура достигает заданного значения. Н thermo/Thermostat Не D •a
Edit ^ew Simulation Format lools Heip ! с* В IE'
# V'
; >' *
e
• >_• \z ; •
»
.• X
H thermo ±hj House b j Moie Info JMyT
[166%
Puc. 12.16. Субмодель термостата 1 2 . 6 . 5 . Моделирование работы унитаза Для тех, кому приведенные выше примеры кажутся слишком далекими от обыденной жизни, приведем еще один пример — моделирование работы столь известного устройства первейшей необходимости, как унитаз. Модель сливного бачка унитаза представлена на рис. 12.17. Эти типичная модель импульсной гидравлической системы релаксационного типа с внешним запуском — ручкой слива воды из сливного бачка. В этом примере моделируется процесс заполнения водой сливного бачка унитаза с ограничением уровня заполнения, а затем процесс слива воды при открывании соответствующего клапана. Слив сопровождается анимационным видеоклипом и звуковым комментарием, буквально воспроизводящим звуки слива воды в унитазе.
_ .» ..... 0 ;B:"H"S *
ЕЬ
в v ;j >
GD~4- J •; vl""'.'"~
Puc. 12.17. Модель сливной системы унитаза 548
12.7. Дополнительные
возможности
Несмотря на то что унитаз кажется довольно примитивным устройством по сравнению, скажем, с самолетом или космическим кораблем, его модель не так уж и проста. Как видно из рис. 12.17, в модель унитаза входит ряд субмоделей — на этот раз они показаны не в среде браузера подмоделей, а в разных окнах. Этот пример, как и предшествующий, дает хорошее представление о технике применения субмоделей. Деление на субмодели позволяет создавать основную модель более простого и более наглядного вида, чем в том случае, когда субмодели не применяются. Данный пример демонстрирует всю мощь Simulink в смысле контроля за виртуальной работой моделируемого устройства. Рисунок 2.18 показывает визуальные средства контроля для этого примера. Ч . Pu lmbn ig Sm i ua lto in О
20
40
60
20
40
ВО
ЙЙ
I 1ПП
ГапкВамДгеа
|
Mriknuo) Height Limft
2
100
120
140
1БС
100
1?Л
140
1fifl
Push Start to begin
Рис. 12.18. Модель сливной системы унитаза Уже говорилось, что слив воды в нашем виртуальном унитазе сопровождается воспроизведением звука. Разумеется, для прослушивания звука компьютер должен иметь звуковую карту и подключенные к ней акустические колонки. Словом, надо располагать мультимедийным компьютером. Это пригодится и для более серьезных задач по обработке звуковых сигналов в Simulink. На рис. 12.18 видна целая гамма средств визуального контроля — это и осциллограмма уровня воды в баке, и детальные графические диаграммы процессов накопления и слива воды, и, наконец, окно с анимационным рисунком, показывающим, в какой момент какая задвижка открывается или закрывается и как происходит наполнение бака водой и ее слив в нужный момент.
1 2 . 7 . Дополнительные возможности 1 2 . 7 . 1 . Применение логических операций Многие системы и устройства содержат блоки логических операций, которые подробно описывались в главе 1. Рисунок 12.19 показывает процесс моделирова549
Глава 12. Simulink — система математического
моделировании
ния системы, в которой блоки логических операций AND (И) и NOT (HE) используются для генерации трех последовательной прямоугольных импульсов с частотами повторения, кратными 1, 2 и 3.
Рис. 12.19. Модель генератора трех последовательностей прямоугольных импульсов
1 2 . 7 . 2 . Визуальный контроль типов данных Simulink, как и MATLAB, работает с данными различного типа. Чаще других используются данные в формате чисел с плавающей точкой и двойной длиной — double. Могут использоваться и 8-разрядные целые числа двойной длины и прочие типы данных. Форматы данных на входах и выходов блоков будут выводиться (рис. 12.20), если установить флажок Plot data type в меню Tools окна модели Simulink. В большинстве случаев отображение типов данных лишь загромождает модель. Однако при отладке сложных моделей он может быть полезным. Пример, приведенный на рис. 12.20, весьма поучителен. Он показывает, насколько выбор данных может повлиять на результат вычислений. Помимо обрезания верхушек синусоиды из-за ограничения чисел типа unitS можно наблюдать обре-, зание нижних полуволн синусоиды при использовании данных Unsignet (числа без знака). Это говорит о том, что в выборе специальных данных и при их преобразованиях нужно соблюдать известную осторожность. 1 2 . 8 . О б щ и е замечания по моделированию систем Испытание готовых и отлаженных демонстрационных примеров, в том числе описанных в данной книге, может создать у малоопытного читателя иллюзию простоты моделирования. Набрал себе нужные блоки модели, соединил их друг с 550
Дополнительные
D а; И а
* ft i
> * |h»ml
J:
возможности
a ® ;•;.: U IS i *
Data Type Demonstration
Doube l Unsg i ned S Bti fne i gsr Unsg i ned 8 Bit Integer Do .
. • • • .
•
!
D
C
a
o
t
n
e
T
v
e
a
r
y
•
p
x
i
e
n
C
s
u
o
l
n
s
i
v
g
e
n
n
a
l
o
t
r
o
»
-
s
p
:
e
o
f
l
e
d
d
a
t
a
t
y
p
e
.
;
p 1
r
a
f
n
e
t
e
r
s
,
j Datatype- jmts
click Of on en station
ч
s }• Saturate on inlegar uverflew
; i' 1 • OK
1
.Cared
• • • tJ*.
Ready . 1004 RxedStepOscrete Puc. 12.20. Модель с указанием типов примененных в ней данных другом, запустил в режиме моделирования — и почивай на лаврах, списывая результаты и перенося их в свою курсовую или дипломную работу, диссертацию, отчет или статью. Или (как сделано в этой книге) копируя их в буфер обмена Windows и затем редактируя в подходящем графическом редакторе. Увы, близкая к этой идиллия возможна только при работе достаточно опытного пользователя, реально поработавшего с тем или иным пакетом расширения не один десяток часов и интуитивно чувствующего правоту (или неправоту) своих действий. Малоопытный пользователь, скорее всего, при переходе к моделированию своих систем или устройств столкнется с множеством неожиданных ошибок. Наиболее характерными из них являются: неверное задание параметров моделей, нестыковка входных, выходных и управляющих параметров блоков, несоответствие блоков по типу, ошибочные записи математических выражений, неверный выбор метода моделирования и т. д. Никакая, даже самая обширная фирменная документация не способна отразить все нюансы ошибочного применения системы MATLAB с ее пакетами расширения. Поэтому и автор данной книги был вынужден ограничиться лишь некоторыми общими рекомендациями. Довольно часто причиной ошибок является несоответствие типов блоков и их входных и выходных параметров. В таких случаях надо предусматривать переходные элементы. Наглядный пример — переход от тока к напряжению включением резистора 1 Ом в цепь тока. Особенно часто нестыковка блоков наблюдается при совместном использовании блоков из разных пакетов расширения, например из пакетов Power System и Simulink. Размерные величины, используемые в пакете Power System Blockset, зачастую недопустимы для блоков Simulink, использующих безразмерные величины (например, при задании функций). В связи с этим стоит отметить, что многие из 551
Глава 12. Simulink — система математического
моделировании
этих недостатков у MATLAB 6.0/6.1/6.5 и тем более MATLAB 7 с пакетами расширения уже устранены. По-видимому, стоит разумно ограничить применение компонентов из различных пакетов расширения. Как показывает практика, каждый из пакетов расширения имеет довольно широкую сферу применения и позволяет решать множество практически полезных задач. Совместное применение нескольких пакетов расширения системы MATLAB + Simulink — это уже «высший пилотаж», и он достигается только долгими тренировками и практикой. Наименьший риск натолкнуться на трудности моделирования имеет место при использовании пакетов расширения группы BlockSet, отнесенной к сфере прямого применения с расширением Simulink. Утешением для большинства пользователей MATLAB с пакетами расширений является то обстоятельство, что система тщательно диагностирует подготовленную модель и допускает ее исполнение только после устранения всех обнаруженных ошибок. Сообщения об ошибках появляются в специальных окнах системы. Они достаточно подробны и позволяют наметить меры по устранению ошибок. Поэтому стоит отметить, что примеры, приведенные в книге и в справочной базе данных MATLAB, нуждаются не просто в просмотре, а во внимательном анализе их назначения и получаемых в результате моделирования результатов. Очень полезно модифицировать примеры, создавая на их основе новые (пусть даже и некорректные) модели и изучая их поведение. Все это и дает опыт, необходимый для полноценного и эффективного применения пакетов расширения системы MATLAB + Simulink.
1 2 . 9 . О с о б е н н о с т и н о в е й ш е й р е а л и з а ц и и Simulink 6 1 2 . 9 . 1 . Новые разделы библиотеки Simulink 6 Новейшая версия Simulink 6 отличается от Simulink 5 некоторой доработкой библиотеки. Окно браузера библиотек Simulink 6 представлен на рис. 12.21. Общее представление о разделах библиотеки Simulink 6 дает главное окно библиотек, представленное на рис. 12.22. В нем показаны пиктограммы всех разделов библиотеки. В нем новые разделы библиотеки представлены снизу отдельной группой. Это облегчает работу с библиотекой тем пользователям, которые сменили версию Simulink 5 на новую Simulink 6. Первое, что бросается в глаза, это наличие нового большого раздела библиотеки Commonly User Blocks, в который вынесены наиболее часто применяемые пользователями блоки. Окно этого раздела показано на рис. 12.21 справа. Самостоятельного значения этот раздел не имеет, поскольку его блоки есть в более специальных разделах библиотеки. Тем не менее этот блок удобен при моделировании наиболее типичных задач. В Simulink 6 введены еще 2 новых раздела библиотеки блоков: • Logic and Bit Operation — логические и побитовые операции; • Additional Math & Discrete — расширенные математические и дискретные блоки. Мы рассмотрим все блоки этих разделов в Главе 16. 552
12.9. Особенности новейшей реализации Simulink 6
D с* -и
its input;. But Creator: Thsi bolck creae ts am b us sginali
• ±>j Commo ynlUsed Socks iu tso snnitueits : •SbjCon D icuo
1 •
! : ;
| 1
i !
!+! iS
Ъ% Discrete ^-] Logic and Bit Operations *>-] Lookup Tables •••• :bj Math Operations ; Й:] Model Verification ! fe-j Model-Wide Utilities - i > ] Ports 8. Subsystems ; :bj Signal Attributes +£j Signal Routing . • Й Sinks ifr-j Sources *J-j User-Defined Functions ij'i ^ J Additional Math & Discrete Ц Aerospace Blockset W^ CDMA Reference Blockset
«Г '
l
i
I
He Edit Ve iw " ' ' Hep l CominonryUsedBlQcKs
Bus Creator Bus See l ctor Constant
• tr 1Cow
l
i
l
t
s
S
Data Type Conve
j К Ts 1
Dsicrete-Tm i e Inte
Го> Gam pa Ground T
|
.Г
(D
M
Рис. 12.21. Окна браузера библиотек Simulink 6 и раздела Commonly User Blocks H Library: simulink File Edit View Format Help
\ Sources
Sinks
Continuous
Discrete
Discontinuities
Signal Routing
Signal Attributes
л
Msic Mah t Logo i andBti Lookup Ussr-Den fied Model Porfe& Mode-lWdie OpBeolraco tkisnests&Operaco tim nsmonylTabe ls i nFaulnM co tints Verficato in S Sm syn tmB solckUtiLb litierasry6.0 iubu ilske opyrg iht (0)1990-2004 lcks AdSdto Dsicreteah Toob loxes used bo Demos CT he MahlWorks. Inc. <=
Q)
Puc. 12.22. Главное окно библиотек Simulink 6 12.9.2. Подборка блоков из ящиков Blockset и Toolbox В ряде пакетов расширения из ящиков Blockset и Toolbox имеются свои блоки для построения ряда специальных моделей, например, механических или электрических устройств и т. д. Они разбросаны по многочисленным пакетам расширения, что затрудняло построение комбинированных моделей устройств. В Simulink 6 эта трудность блестяще преодолена — в библиотеке появился раздел Blocksets & Toolboxed, в котором собраны такие блоки. Окно этого раздела показано на рис. 12.23.
553
Глава 12. Simulink
— система математического
моделировании -iDlxl
И Library: Blacksets_and_T°olboxe$ File Edit View Format Help LTI Aerospace Blockset
CDMA CDMA Reference Blockset
Co mm Blockset
Control System Toolbox
Dials & Gauges
MPC Block
Neural Network Blockset
Signal Processing Blockset
ui о d e 1S i m
Fuzzy Logic System Identificatihmk for ModelSim Toolbox Toolbox
SimMechanic
riVvlib Report \/Vv SimPouuerSystems
RF Blockset
Report Generator
HC12
MPC555
OSEK
Motorola® HC12
Motorola® MPC555
OSEK-VDX
xPC Target
Simulink Extras
Real-Time Workshop
C166
Infineon C16Seeal-Time Works MicrocontrollsrsEmbedded Cot
TIC2000 Real-Time Windows Target
Simulink Parameter Estimation
RTW-EC
Ticeooo
Embedded Т а r g E m b e d d e d Tar for Tl C2000 DSffor Tl C6000 D:
Simulink Response Optimization
Stateflow
Virtual Reality
Рас. 12.23. Окно раздела библиотек Simulink 6 Blocksets & Toolboxed
1 2 . 9 . 3 . Новое о к н о у с т а н о в к и параметров моделирования Simulink 6 Окно установки параметров моделирования Simulink 5 выполнено в несколько старомодной манере — рис. 12.4 справа. В Simulink 6 это окно заметно осовременено и показано на рис. 12.24 (снизу). Мы не будем рассматривать все 18 вкладок этого окна. Отметим, что по сути (а не по внешнему оформлению) содержимое главной вкладки Solver (установка параметров решателей дифференциальных уравнений) ничем не отличается от аналогичного для подобной вкладки окна установки параметров Simulink 5. С назначением установок на других вкладках нетрудно ознакомиться самостоятельно. Большое число вкладок позволило разнести установки по характерным для них признакам. 554
12.9. Особенности новейшей реализации Simulink 6 .
X У Plut
Н Configuration Parameters: lorenzs/tonfiguratfatt Select; !•- Sotv« • I Data Import/Export [•••Optimization - I - Diagnostics | I-Sample Time j 1-Data Integrity ; ;-• Conversion | :-• Connectivity I • ;••• Compatibility I -Model Reteiencmg • •-Hardware Impiernentatior I -Model Referencing Щ" Real-Time Workshop • Comments j - Symbols [-• Custom Code (•-Debug — Interlace
Simulation time Start ti e: |o.O Solver oplions j Variable-step Max step dze:
^
Solver:
| ode23 iBogacki-ShampineJ
P
Relative tolerance: |1e-3
Min step size;
[auto
Absolutetolerance: fie-6
Initial step size:
jaulo
Zeio crossing control: j l_he local settings
zl
Puc. 12.24 Окна установки параметров моделирования Simulink 6 1 2 . 9 . 4 . Новые кнопки на панели инструментов Simulink 6 Небольшой доработке в Simulink 6 подверглась панель инструментов. В ней появились новые кнопки: • Ready — считывание данных; • Refresh Model blocks — обновление (перерисовка) модели; • Launch Model Explorer — вывод окна навигатора модели. Применение новых кнопок облегчает работу с Simulink 6. 1 2 . 9 . 5 . Новый навигатор моделей Model Explorer Из новых средств Simulink 6 стоит выделить новое средство — навигатор модели Model Explorer. Он запускается кнопкой Launch Model Explorer в панели инструментов. Окно навигатора модели показано на рис. 12.25 Навигатор модели дает полную информацию о всех блоках модели. В левой части окна навигатора представлено дерево модели, в середине список всех блоков и справа окно параметров или описание выделенного блока. При отладке сложных моделей возможности навигатора трудно переоценить. Все указанные выше нововведения Simulink 6 и многие иные приятные мелочи его реализации практически не влияют на процесс подготовки, отладки и запуска моделей на моделирование. Поэтому последующие главы по этому расширению в равной мере относятся к версиям Simulink 5 и Simulink 6.
555
Глава 12. Simulink — система математического моделировании Щ Model explorer
Ee li Edti £e tw o l os l fiddb || 5 o^fTifett x mm Search: j by 8o lck TypejType: Contents of. lorenzs Mode) Heirarchy eQsm i un il k Root |Nanw 1
!- Щ Base Workspace
^j Щ *9 "p f$Jj
Configuration (Active] Model Workspace XY Graph Advice for lorenzs Code for lorenzs
• lD(x Model Properties | BlockTyp *
!
•
13 Beta";
ш&-. Ё
П 13 13 13
>.^!! ;•:"-• it f ,i itjug: *:~ Щ US ., i
-Bz+xy Integrator Integrator! Integrator
И Rho'x
G*-,
13 Scope И Sigmaly-x) 13 x "У
>-vr>
Шуя
5 *i
Main | Callbacks | History | Description | M o d e l Information for: lorenzs Source file: C:\MATHB7\toolbo*\simulir+Asimrlfimos\brenzs.mt Last Saved: Wed Apr 21 03:43.11 2004 Created Drr: WedJul2205:30:07 199B Is Modified: yes Model Version: 16
| •;
'' ''
T=y "C ydot
Contents 1 Search Results j
j
_
1 ••• ;•••
•
Revert
Рис. 12.25. Окно навигатора модели Simulink 6
556
Help
1 »Г 1 Appyl
Глава 13. Работа Simulink с файлами 1 3 . 1 . Интерфейс браузера библиотек 1 3 . 1 . 1 . Окно браузера библиотек Simulink 5 Библиотеки Simulink представляют собой обширный набор поименованных блоков, имеющих графическое изображение (пиктограмму) и содержащихся в отдельных файлах. Для их просмотра служит браузер библиотек. Как уже отмечалось в Главе 12, после запуска Simulink выводится окно браузера библиотек (рис. 12.1). На рис. 13.1 это окно показано еще раз с выделенным разделом библиотеки. Блоки этого раздела видны в правой части окна. Окно имеет заголовок, меню, панель инструментов, поле информационных сообщений, окна с деревом библиотек и компонентами выделенного раздела библиотек и строку состояния (внизу окна). Если в левом окне выделен какой-то раздел библиотек, то щелчок правой кнопкой мыши выводит контекстное меню с одной командой, позволяющей вывести данный раздел в отдельном окне. В нашем случае это команда Open the 'Look-Up Table' Library (Открыть библиотеку Simulink). Окно соответствующего раздела библиотеки Simulink появится на экране — на рис. 13.1 оно показано справа. Как видно из рис. 13.1, перед именем каждого раздела библиотеки имеется прямоугольная кнопка со знаком +. Нажатие на нее ведет к раскрытию дерева раздела библиотеки. При этом в правом окне появляется набор компонентов этого раздела библиотеки.
t L o o k - U p Т а Ы е Jr>-D): Tabte member selection Input? are геге: based o i e e s into the table, e.g., an input of 2 retims the fourth element in thai ! dimension Block can also be used to select a column or 2-D matmc out of the i labe The f rat select-on index corresponds to the lop {or left) tnpdi port
•-•*>! Math Oper • bj
S
O
S
Model Verification
i b j Model -Wide Unities • ±£j Ports • i b j Signal Attributes Ъ$ Signal Routing • - i d Sinks $ d Sources
A eM o rsA paceRee B o tnc k setBo C O f r e c e ttcraer. C o m m u n c o i a i n t s B o l c c f s e CS o ntrolBo yse te m biox D P fSd s tugesToo D e s l & G a B o fM cbe ttro E m b e d d e d T a r g e t for o o al6»3 C5 Embedded TargetforTT C iMPD SP !TJ i i j - | User-Defined Function
л-
_J
: Lookup
T.tle, _)
Рис. 13.1. Окно браузера библиотек. Simulink 5 с открытым разделом Look-Up Table 557
Глава 13. Работа Simulink
с файлами
Из любого окна (браузера или отдельного окна раздела библиотеки) можно перетаскивать компоненты мышью в окно модели.
13.1.2. Состав основной библиотеки блоков Версия пакета Simulink 5 имеет существенно обновленную и расширенную библиотеку блоков (компонентов). Она размещается в папке MATLAB/TOOLBOX/ SIMULINK/BLOCKS. Основная палитра компонентов представлена файлом simulink. mdl. Как основная, так и дополнительные библиотеки Simulink представлены файлами разного формата: с расширением dll, в виде mex-файлов и файлов с расширением .т. Последние могут при необходимости редактироваться и модифицироваться опытными пользователями. Как уже отмечалось выше, для вывода специального окна с разделами основной библиотеки Simulink (рис. 12.1) надо выделить эту библитеку в браузере библиотек и выполнить команду Open the «Simulink» Library контекстного меню. Каждая пиктограмма этого окна представляет группу компонентов определенного класса. Как видно из рис. 13.2, в этом окне содержатся следующие библиотеки: • • • • • • • • • • • • • • • • •
Continuous — компоненты с непрерывными характеристиками; Discontinious — компоненты с разрывными характеристиками; Discrete — дискретные компоненты; LookUp Table — табличное задание зависимостей; Math Operations — математические компоненты; Model Verifications — верификация моделей; Model-Wide Utilities — дополнительные утилиты; Port & Subsystem — порты и подсистемы; Signal Attributes — блоки атрибутов сигналов; Signal Routing — блоки маршрутизации сигналов; Functions&Tables — функции и таблицы; Nonlinear — нелинейные компоненты; Connections — соединительные компоненты; Signals&Systems — сигналы и системы; Sinks — регистрирующие устройства; Sources — источники сигналов и воздействий; User-Defined Functions — функции, задаваемые пользователем.
Постепенно мы рассмотрим состав каждого из упомянутых раздела основной библиотеки блоков. Уместно отметить, что состав разделов библиотеки Simulink 6 существенно отличается от состава разделов библиотеки Simulink 5. Эти отличия отмечены в конце этой главы.
13.1.3. Заголовок и строка состояния Окно браузера библиотек имеет такие стандартные для окон Windows элементы, как заголовок и строка состояния. Заголовок имеет кнопку, открывающую стандартное меню управления окном: восстановление окна в размерах, перемещение, изменение размера, свертывание и развертывание и закрытие. Строка состояния служит для вывода коротких сообщений о состоянии системы. Эти сообщения контекстно-зависимые. 558
13.1. Интерфейс браузера
библиотек
13.1.4. Меню окна браузера библиотек Меню браузера библиотек содержит следующие пункты: • File — работа с файлами библиотек; • Edit — добавление компонентов и их поиск; • View — управление показом элементов интерфейса; • Help — вывод окна справки по браузеру библиотек. Позиция меню File меню имеет всего три команды: • New — создание S-модели (команда Model) или библиотеки (команда Library); • Open... — загрузка файлов S-модели и их поиск в файловой системе; • Preferences — настройка Simulink. Создание пользователем своей Simulink-модели (S-модели) мы рассмотрим далее в Главе 14. Команда File • New • Library позволяет создать библиотеку, в которую пользователь может поместить нужные ему компоненты. Действие команды File • Open... рассмотрено в Главе 12 на примере загрузки ряда демонстрационных примеров.
13.1.5. Настройка параметров Simulink Команда File • Preferences выводит окно установки ряда параметров системы MATLAB + Simulink. Это окно показано на рис. 13.2. Здесь мы рассмотрим только те его возможности, которые относятся к пакету Simulink. Окно Preferences с открытой ветвью дерева параметров Simulink и панелью установки шрифтов Simulink Font Preferences показано на рис. 13.3. Установки в этом окне вполне очевидны — они относятся к выбору шрифтов для различных компонентов библиотек Simulink. То же окно, но с панелью установок параметров моделирования Simulink Simulation Preferences показано на рис. 13.4. Эта панель имеет четыре вкладки: • Solver — установка параметров решателя дифференциальных уравнений; • Workspace — установка параметров рабочего пространства;
nerai flk Preferences m i mand wn idow Sknun m i mana Hs io lrv Wmdow reus d or/Debugger e n i Showmaskeo subsystem r ert Driector* i Г* Shcrwtibrarylinks Workspace j V Srowser initially visible Aray Edtior GUD IE ; Display fg i ure Copy Tempa lte i f~ Wide nonscalar lines
!;-General Command Wnidow Command Hsitory Eao lirroebuggei If Hep l Workspace Aray Edtior GUD IE Fg iue iCopyTempa i
Smajinkfwits Preference* Bo lcks ] Ln ies | Annotato i JMonos - Sampl a c e d
!
**•'
v
_ ^ J
jPlair*
J - j
I E
» :
9
1 2
• I " Show port data types
OK
I
Car
Puc. 13.2. Окно Preferences с разделом Simulink
Puc. 13.3. Окно Preferences с установками шрифтов 559
Глава 13. Работа Simulink с файлами • Diagnostics — установка параShnuhnk Sm i ua lto in Prefei encet метров диагностики Sovler "'Command Hsitory • Advanced — расширенные уста• '•Edto ir/Debugger ! Start tin joo >• Hep l новки. • Cutreni Driectory Stop tin Наиболее важные параметры уста- Aray Edtior навливаются на вкладке Solver. Прежде GUD IE Jl! i f Fg iure Copy Tempalte zl \ всего это выбор начального и конечно>• Sm i un ilk г»; jauto i j- Fonts го условного времени моделирования и выбор типа решателя дифференциальных уравнений. Назначение этих (и остальных) параметров мы уже обсуждали в Главе 12. Вкладка Workspace J. имеет всего две опции — записи времени и выхода в рабочее пространство. Рис. 13.4. Окно Preferences Они задают сохранение в рабочем прос установками параметров моделирования странстве времени и выход модели. По умолчанию обе эти опции включены. Вкладка Diagnostics также имеет всего две опции, устанавливающие тип диагностических ошибок из двух списков. Все эти вкладки были и в окне Simulink 4. В Simulink 5 появилась еще одна вкладка — Advanced. Она содержи две опции: Block Reduction (редукция блока) и Boolean Logic signals (сигналы с логикой Буля). We ttespate i
Solver о DUOfl
! Type:
DJ6 5
j Mode:
Fued s eps
1 3 . 1 . 6 . Меню Edit браузера библиотек В меню Edit браузера библиотек имеется три команды: • Add to the current model — добавить выделенный блок в текущую модель; • Find block... — найти блок с заданным именем; • Find next block... — найти следующий блок с заданным именем. Первая команда очевидна. Надо лишь отметить, что если текущего окна нет, то появится окно с предложением создать новое окна модели. Команда Find block... выводит окно с запросом имени блока (рис. 13.5). Команда Find next block... служит для поиска следующего блока, в который входит заданное слово (рис. 13.6). Эту же операцию выполняет и команда Find next в окне задания слова для поиска. Если в результате повторного поиска больше блоков не обнаруживается, то выводится небольшое окно с сообщением об этом — оно также показано на рис. 13.5 над окном поиска. 1 3 . 1 . 7 . Меню View браузера библиотек Меню View браузера библиотек содержит команды для управления видом интерфейса браузера: • • • • • 560
Toolbar — вывод/скрытие панели инструментов; Status bar — вывод/скрытие строки состояния; Description — вывод/скрытие окна сообщений; Stay on top — установка статуса окна браузера «поверх всех окон»; Collapse enteir Browser — закрытие текущего раздела библиотеки;
13.1. Интерфейс браузера библиотек
I П. I Щ 1 ?
} Clfrert Directory: j С WATLAB65*work
"
H
J
^ Srema o itn г*) i - j Eir/iranmsnt ф- ^ j Equations of МоЬсп .
i*j Flight Parameters
Si' ЙЗ GNC • • p£ Propulsion r*h ''Ш UHiHes i Ц
ССМД Reference Blortset
! Ц
Canmuicetois Blockset
^ | Control 5/ste^Toolooii ; К В . т.
DSPEIoQcset B a l s * Gauges в Ы а к ! S l e d d e d T ^ e t f y Мок
Г
Match whole moid only
; Г
Match c«se
. Г
Regular е х р г и м л
:
Starting from. Aerospace BlocKsst Found: '3DoF Animation' in Kbrary: 'АпипЛюгГ
# - S t f f l i | Ready
Рас. 13.5. Первый поиск блока по заданному имени
V :,; •--.• .• Х->::'Х t;rW i
VfSE
; GDoF Animation Create a 3-D aramats-з view of a SK^deg-eMof-frMdcr I craft. where X. V, a ^ a Z craft position (Position} end craft Eulet anglee iEulc) ere ; ir^uts i &spla/ pa'amde^s are in the same urrts d length as the input parameters
I
L*i • Й
f
ГЙ i ^ Eouaborts of Motion
5 j •^^
Cannot find the text: 'Anmatiart'. Resume wardi at the top of the Int
SnvrQ!iii>ent
Щ Con&oiSysten-^Toolbox Я ; DSPSIodaet Slartmg from: АЫтаНоп Searching: Venabgc
Puc. 13.6. Повторный поиск блока по заданному имени Expand entire Browser — раскрытие текущего раздела библиотеки; Large icons — отображение пиктограмм блоков в увеличенном размере; Small icons — отображение пиктограмм блоков в уменьшенном размере; Show Parameters for selected block — вывод окна установки параметров отмеченного блока. Действие всех этих команд вполне очевидно. • • • •
561
Глава 13. Работа Simulink с файлами
13.1.8. Справка по браузеру библиотек Меню Help служит для доступа к справочной системе окна браузера. Содержит следующие команды: • Help on the selected block — справка по выделенному блоку; • Simulink help — вывод окна справочной системы Simulink; • Tip of the day — полезные советы каждый день. Использование этих средств справки вполне очевидно.
13.1.9. Панель инструментов окна браузера библиотек Как видно из рис. 13.1, панель инструментов окна браузера библиотек имеет всего четыре кнопки, дублирующие некоторые команды меню: • • • •
Create a new model — создание S-модели; Open a model — загрузка S-модели; Stay on top — установка статуса окна браузера «поверх всех окон»; Find — поиск блока по заданному имени.
Все эти команды очевидны.
1 3 . 2 . Интерфейс окна моделей Simulink 1 3 . 2 . 1 . Панель и н с т р у м е н т о в о к н а м о д е л е й Команда New model в окне браузера библиотек открывает пустое окно модели пакета Simulink. В нем можно сразу конструировать модель. Окно имеет панель инструментов.
File Edit View Simulation Format Tools Help
D
B i 1 2 3 4
Ready
5 6 7
О
Q
8
9
•
• Normal
10 11
fwo%.
d
3 i r €>
m 13 14 15
12
(Variables tepDiscrete
I
Рис. 13.7. Окно S-модели пакета
16 17 18 1 9 £ J
Simulink
Как видно из рис. 13.7, панель инструментов окна модели содержит 18 кнопок и список режимов работы. Номера их указаны на рис. 13.7. Назначение элементов панели инструментов следующее: 1. 2. 3. 4. 5. 6. 7. 8. 562
New model — создание новой модели; Open model — загрузка модели; Save — сохранение текущей модели; Print — печать текущей модели; Cut — перенос выделенного объекта в буфер; Сору — копирование выделенного объекта в буфер; Paste — вставка объекта из буфера; Undo move — отмена последней операции;
13.2. Интерфейс окна моделей
Simulink
9. Redo — восстановление последней отмененной операции; 10. Start simulation — запуск моделирования; 11. Stop simulation — остановка моделирования; 12. Normal/Accelerator/External — список режимов работы; 13. Build All — создание исполняемого кода модели с помощью Real Time Workshop; 14. Update diagram — обновление окна модели; 15. Build subsystem — создание исполняемого кода подсистемы; 16. Library Browser — открытие браузера библиотек; 17. Toggle model browser — открытие браузера моделей в левой части окна модели; 18. Go to parent system — переход в основную (родительскую) систему; 19. Debug — переход в режим отладки модели.
13.2.2. Основное меню пакета Simulink Несмотря на наличие панели инструментов, важная роль принадлежит обычному меню пакета Simulink. Оно дает более полный набор средств по управлению процессом моделирования. Меню (см. рис. 13.8) содержит следующие пункты: • File — операции с файлами S-моделей; • Edit — операции редактирования текущей модели; • View — управление видом интерфейса; • Simulation — операции запуска моделирования и его настройки; • Format — операции форматирования текущей модели; • Tools — доступ к инструментальным средствам; • Help — доступ к средствам справочной системы.
; File Edit Ve iw New Open...: Co l se Save Save as...
Simulation Format X°°'s • | Model CW-tN | Ctrl+O Library Ctrl+W CW+S
Model properties Preferences... Flint... Ctrl+P Print details... Print setup... Exit MATLAB
Ctri+Q
Рис. 13.8. Меню окна модели Simulink с открытой позицией File
13.2.3. Меню File окна модели Меню File содержит ряд команд для работы с файлами (рис. 13.8): • • • • • • • • • • •
New — создание модели (Model) или библиотеки (Library); Open... — загрузка файла модели; Close — закрытие окна текущей модели; Save — сохранение текущей модели; Save As ... — сохранение текущей модели под заданным именем; Source control... — управление источниками сигналов; Model properties... — вывод окна свойств текущей модели; Preferences... — вывод окна свойств Simulink; Print... — печать текущей модели; Print setup — вывод окна установок печати; Exit MATLAB — завершение работы.
563
Глава 13. Работа Simulink
с файлами
13.2.4. Контроль источников Команда Source Control... по умолчанию отключена. Она включается на вкладке General окна Preferences. Если она возможна, то выводит подменю с командами Check in... (проверка входа), Checkout (проверка выхода), Undo Check out (отмена проверки ! ,1 Check in |ИГх1 выхода) и Preferences (вывод окна настроек). Г Keep checked out Comments: Первые две команды выводят окна, которые Источник прямоугольных импульсов показаны на рис. 13.9. В окне Chech out пре«I i.r1 дусмотрена опция Keep checked out — пропусCancel ' •' ' OK'•'•* ' кать контроль выхода. По умолчанию она не задействована. В окне Check in имеются сле: .1 Chedk-Out дующие опции: Latest (использование последней модели источника), Lock (закрытие от моP Latest P Lock дификации модели) и Specific (задание специ| Г Specific | фикации в специальном поле справа от этой опции). Первые две опции по умолчанию OK Cancel включены, а последняя отключена. Окна Check In и Check out позволяют ввесРис. 13.9. Окна контроля ти расширенное текстовое описание источисточников ника. Команда Preferences выводит окно настроек пакета Simulink (окно Preferences) с открытой панелью General • Source control, что позволяет выбрать схему управления источниками. г
13.2.5. Вывод окна свойств текущей модели Команда Model Preferences выводит окно свойств текущей модели (рис. 13.10). Это окно имеет три вкладки: Summary, Callback и Histoty. Вкладка Summary ото-
[Noiitai "'"''
^
:
Щ
Summary j Callbacks | Htstotv
Рас. 13.10. Модель с окном ее свойств 564
13.3. Печать текущей модели •J Model Properties:
•} Model PiopeitiesdeedcinQ»
Summary Callbacks History Model pre-load function: .
(-Version information —-— View currentvalues Model version: 1.3 Last saved by: sanjai Last saved on: Frl Jan 1514:47:131999
Model initialization function: Simulation start function:
Model history— 1сторни нет
Simulation stop function:
Model pre-save function:
Г Model close function:
OK
Cancel
Prompt to update model history:
Help
Apply
Puc. 13.11. Вкладка Options окна свойств модели
OK
Cancel:
Help
Apply
Puc. 13.12. Окно свойств модели с открытой вкладкой History
бражает данные о номере версии модели, ее разработчике и дате создания. В ней можно задать описание модели (обратите внимание, что это возможно на русском языке). Вкладка Callback позволяет задать ряд параметров, которые, как правило, отсутствуют или используются по умолчанию. Назначение параметров можно понять из рис. 13.11. Задаются функции загрузки и инициализации модели, пуска и остановки, записи и закрытия. Вкладка History (рис. 13.12) несет данные о модификации системы — если, разумеется, таковые есть. Кнопка Edit открывает доступ к окну сохранения модификаций модели (рис. 13.12). К возможности изменения свойств модели прибегают обычно только опытные пользователи — обычно бывает достаточно установок свойств по умолчанию.
1 3 . 3 . Печать т е к у щ е й модели 1 3 . 3 . 1 . Вывод окна печати модели Команда File • Print... выводит окно печати модели. Это окно (см. рис. 13.13) содержит все необходимые настройки для печати текущей модели. Прежде всего, это выбор типа принтера для печати, область печати и выбор опций печати. Выбор принтера возможен, если в системе Windows 95/98/NT/2000/XP установлен ряд драйверов принтера. Опции печати задают объем печати, число копий, 565
Глава 13. Работа Simulink с файлами
wn i ter •aime: |hppsd100seties Status: Готов Type: hppsc 1100 series Where: USB001 ^omment:
d
Properties
Г Print to file ••• Copias
- Print range Г? All
Number of copies:
~™ -— ~7 |1
^fj
- Options
Г" include Print Log I
Г"
Frame:
Рис. 13.13. Окно печати текущей модели схему печати (определяющую глубину распечатки данных о блоках), печать фрейма модели и др. Особое внимание стоит обратить на выбор схемы печати и на возможность печати модели с разным уровнем вложения субмоделей (подсистем). 13.3.2. Настройка принтера Кнопка Properties в правом верхнем углу окна печати выводит окно свойств выбранного принтера. На рис. 13.14 представлено окно свойств принтера для цветного струйного принтера/копира/сканера HP PSC 1100 фирмы Hewlett Packard, который используется автором. Это стандартное окно Windows, и его вид зависит от драйвера заданного принтера. Для указанного принтера окно содержит две вкладки для установки качества печати, типа бумаги и ориентации печати (вкладка Настройка) и запуска утилит профилактики принтера (вкладка Службы). Команда Print Details... выводит окно, показанное на рис. 13.15. В нем можно установить директорию, файл из которой печатается, а также задать печать текущего объекта отдельно или вместе с ближайшими связанными объектами. Характер связи объектов представлен снизу окна. Команда Print Setup... в позиции File меню окна Simulink открывает окно настройки принтера (рис. 13.16. Это окно операционной системы Windows, поэтому, если она русифицирована, то не стоит удивляться появлению в окне русскоязычных надписей. Параметры этого окна очевидны. Кнопка Свойства открывает окно свойств выбранного принтера, которое уже приводилось (см. рис. 13.14.).
566
13.3. Печать текущей модели е- Свойства: к р psc 111» rnies Настройка j Службы - Тип бумаги
г- Качество печати
--
-
-
{* Обычная/Для струйной печати
С Прозрачность
Ш '
Г" Фотобумага
PhcsoREl -.
- Формат бумаги
- Ориентация
-
-
~Э
(ГеН:'ёг"{8^ "на 11 ЯЮЙМОБ|
Отмене
}
Справка
Рис. 13.14. Окно настройки принтера .I'Jxj ;
File location/naming options
• '
"
Directory*"* purrent (pwcft ••••'•• I
f* Temporary (tempdit)
"
:
•
•
•
'
'
•
. Г Other: |cAMATUB65\work
•Г1 Increment filename to prevent overwriting old files • System reporting options \(*. Current object
С Current and above
j r . ^ H u n d e r i r i a w №Щ
. . .
f*1 Cur ent and below
Г" Entire moclef
•
•• Г !:-!• Print
I
Cancel
Puc. 13.15. Окно Print Details .11J*! - .Принтер Имя: j Состояние:
Готов
• Tm:
ho pec 1100*
' Места: . US8001 : Комментарий: • 0риемта*1й
:- Бумага ! Размер: J Letter {S.5 иэ 11 асймов} [ Подача:
|Auto
J^J 1 !
1
•. '
Рис. 13.16. Окно установки
" Г Книжная ' f^ Альбома
принтера
567
Глава 14. Подготовка и запуск модели 1 4 . 1 . Создание модели 14.1.1. Постановка задачи и начало создания модели Решение любой задачи в системе Simulink должно начинаться с ее постановки. Чем глубже продумана постановка задачи, тем больше вероятность успешного ее решения в заданные сроки. В ходе постановки задачи нужно оценить, насколько суть задачи отвечает возможностям пакета Simulink и какие компоненты последнего могут использоваться для построения модели. Следует решительно предостеречь неискушенного читателя от мнимой простоты математического моделирования с помощью программы Simulink. Легкость выполнения сложных демонстрационных примеров настраивает такого пользователя на легкомысленное применение программы — набрал модель из блоков, пустил на моделирование (симуляцию) и списывай себе диаграммы и осциллограммы в научный отчет или в диссертацию. Между тем это не так! Подготовка даже одного достаточно сложного примера, например моделирования реального технического объекта или системы, может занять несколько месяцев и даже лет и потребовать привлечения к этому группы специалистов. Именно поэтому в этой книге описаны либо простые примеры, имеющие скорее учебный, чем практический характер, либо демонстрационные примеры, входящие в справку по Simulink. Знакомство с такими примерами совершенно необходимо для оценки возможностей этой программы. Основные команды редактирования модели сосредоточены в меню Edit. В качестве примера применения этих команд рассмотрим построение простой модели, а точнее, сразу трех простых моделей в пределах одного окна. Это, кстати, будет весьма поучительный эксперимент, показывающий, что можно одновременно моделировать несколько систем. Итак, сначала откроем пустое окно для новой модели (кнопка Create a new model в панели инструментов браузера библиотек Simulink или команда File • New • Model в меню).
14.1.2. Ввод текстовой надписи Введем заголовок нашей будущей модели — «Simple model» (Простая модель). Для этого достаточно установить курсор мыши в нужное место окна и дважды щелкнуть левой кнопкой мыши. Появится прямоугольная рамка, внутри которой находится мигающий маркер ввода в виде вертикальной палочки. Теперь можно ввести нужную надпись по правилам, действующим для строчного редактора. Пока будем считать, что параметры надписи по умолчанию нас вполне устраивают.
14.1.3. Размещение блоков в окне модели Из раздела библиотеки Sources перетащим мышью три источника сигнала: синусоидального, прямоугольного (дискретного) и пилообразного. Рисунок 14.1 показывает момент ввода третьего источника — генератора пилообразных импуль568
14.1. Создание модели сов. Аналогично были введены два других источника — синусоидальных сигналов и прямоугольных импульсов (меандра). Затем из раздела Sinks перетащим в окно модели блок осциллографа. Этот момент иллюстрируется рис. 14.2.
*• '- f -h. П
3
» па f Ф
S t a n * * library Dimmer
Fte Q
Edit
View
Help
E S - » find |
Repeating S e q u e n c e : Output a repealing sequence of гщп'-Ьетз specified in a taOte of lime-value pairs. Values of time should be monaomcatty increasing
1ЛШ
Pu se l
;*У Continuous i 3 ^ Disconfinuibes
JUT Curator
^ J Dtscrets ±>-j Look-Uo Tatries
Ш
^ j Math Operations
R dom Naunm ber
^ J Model verification :|5j Model-WicteUtjhhes • * H | Ports & Subsystems S j Sgnal Attr^utes • bj Signal Routing
into э nodel to »isei t 'Repeating Sequi
Reedy
Ii o o %
. |
jcde4$
j
Г
'••
Рис. 14.1. Начало подготовки модели — ввод трех источников сигналов 11||здй|щ|зимииимюиишюмви^
$у
'
'
"
•••.••••• • .:•••••••
| Normal
ulmk l ibrarv Browser Scope: svnuhnk/Sfnka/Scop*
Dispiay
•^| Contmuotsj ihj Discoiitinuties ^ Discrete •• 2*j Look 4Jp Tabe ls ±h| Math Operabons •|>j Model verificabon ^| Mode-lWd i e UtO i es
Reeling Scape C D
- Щ Ports & Subsystems ^ j SigMi Attributes
Stop Simdatto
- • * £ j Skjnal Routing
Terminator
j Use -Oefn i ec Functo i ns
tl To Fie
Reedy
Ready
Puc. /4.2. Ввод блока осциллографа
569
Глава 14. Подготовка и запуск модели 14.1.4. Выделение блока модели Нам надо ввести еще два блока осциллографа. Их можно ввести как уже описывалось. Но мы проделаем это иначе — используя буфер промежуточного хранения операционной системы Windows. Обратите внимание, что только что введенный блок выделяется — выделение отмечается маленькими черными прямоугольниками по углам блока (рис. 14.2). На рис. 14.3 показано меню редактирования Edit в открытом виде — при выделении блока в этом меню становятся доступны команды редактирования свойств блока. В общем случае для выделения блока достаточно навести на него маркер мыши и нажать левую кнопку. В рамке блока по углам появятся маленькие темные прямоугольники, которые и являются признаком того, что блок выделен. На рис. 14.3 выделен блок осциллографа Scope.
Ccev tne sdected obe jcts to the ctebz* d Рис. 14.3. Применение команды Сору помещения блока в буфер Если захватить курсором мыши уголок выделенного блока, то можно заметить, что курсор мыши превратится в перекрестие тонких диагональных двухсторонних стрелок. Это означает, что можно пропорционально увеличивать или уменьшать блок в диагональных направлениях. Кроме того, выделенный блок можно перетаскивать мыщью. Следует отметить еще один способ выделения не только отдельных блоков, но и их группы. При нем надо установить курсор мыши в стороне от группы блоков и, нажав левую клавишу мыши, начать перемещать ее. Появится прямоугольник из черных пунктирных линий, и все блоки, попавшие в него, выделяются. Позже мы рассмотрим пример такого выделения. 1 4 . 1 . 5 . Меню редактирования Edit Кратко рассмотрим основные команды меню Edit (рис. 14.3). Это меню содержит ряд типовых команд, которые разбиты на 6 групп. В первой группе есть две 570
14.1. Создание модели команды: Undo (отмена последней операции) и Redo (восстановление последней отмененной операции). Эти команды являются контекстно-зависимыми. Следующая группа команд связана с операциями с буфером обмена Windows: • • • • •
Cut — перенос выделенных объектов в буфер; Сору — копирование выделенных объектов в буфер; Paste — вставка объектов из буфера в заданное курсором мыши место; Clear — уничтожение выделенных объектов; Select All — выделение всех объектов модели;
• Copy model to clipboard — копирование всей модели в буфер;
• Find — поиск в модели заданного объекта. Остальные команды подменю Edit носят специальный характер и будут рассмотрены в дальнейшем. 14.1.6. Применение буфера обмена Вернемся к нашей модели и покажем некоторые приемы работы с буфером обмена. На рис. 14.3 выделен блока осциллографа Scope. После выполнения команды Сору копия выделенного блока Scope поступает в буфер обмена и хранится в нем. При выполнении команды Cut помещенный в буфер блок исчезает из окна модели. Теперь для вставки копии блока Scope достаточно поместить в нужное место курсор мыши и выполнить команду Paste. Блок Scopei появится в указанном месте (рис. 14.4). Аналогично добавляется еще один блок — Scope2. После повторного использования команды Paste он виден наложенным на блок Scope 1. Его можно перетащить вниз мышью. Теперь можно приступить к соединению выходов источников со входами осциллографов. Для этого достаточно указать курсором мыши на наfjte • p. Ccov Delete dear Ctrl4A Select a* Copy mode) to dipboerd Pnd... CH+F
M Ф •• S l - J
*
о See*:
Qcenbtodt Sock properties.;.
insert the cipboard contents Intoffiemodel of Bbrary
Рис. 14.4. Размножение блока Scope с помощью буфера обмена 571
Глава 14. Подготовка и запуск модели чало соединения (выход источника) и затем при нажатой левой кнопке мыши протянуть соединение в его конец (вход осциллографа), (рис. 14.5). При первом соединении появляется окно, поясняющее способ облегчения соединения с помощью клавиши Ctrl. Завершив все соединения, получим модель, показанную на рис. 14.6.
•Jnjxl
connect Ыо * t , select (he к1ф]. then hold felt-clicking on thedesfii wtion block;
down thШe key while •
Г D o n г>1 show thi • m e n a g e again
Help
|
C3o!e 1
\\6Q%
; •• f~
Puc. /4.5. Начало соединений между блоками модели
Q
undo Move Cut Copy Paste " ' Clear
• ' 'cfr*+£-f
Ф ivi I » US j - «>
Ctr!+X ". " c«+c : cw+v ; • Delete
SLXH Copy modetoclipboard Find... Ctrl4f. Create subsystem
CtH+G
Look under mask
Cfrl+U
Update digram
Sdect an the obejcts In the model Puc. 14.6. Готовая модель 572
14.1. Создание модели ВНИМАНИЕ! Обратите внимание на то, что на самом деле команда Paste в нашем случае не дает строгого переноса блоков осциллографа. Каждый новый блок автоматически получает новое наименование. Так, если исходный блок назывался Scope, то следующий становится Scopei, затем Scope2 и т. д.
14.1.7. Выделение ряда блоков и их перенос Блоки нашей модели размещаются в правой части окна модели. Допустим, мы задумали перенести их разом в левую часть окна. Для этого надо выделить все блоки. Это можно сделать двумя способами. В первом способе для выделения надо использовать команду Select all. Этот способ иллюстрирует рис. 14.6. Во втором используется мышь. В стороне от выделяемых блоков надо установить курсор мыши и нажать левую клавишу. Теперь при перемещении мыши появится расширяемый прямоугольник из тонких пунктирных линий. Как только в нем окажется какой-то блок, он будет выделен. Охватив прямоугольником все блоки, можно выделить их. Выделенный набор блоков можно перетаскивать мышью как единый объект. Это показано на рис. 14.7, где справа виден набор исходных блоков, а слева перетаскиваемый блок. Отпустив левую клавишу мыши, можно увидеть блоки на новом месте. Fie
£dn gev. £irmiaoon format Tods
1 ft В •
-И
a
PMC. /4.7. Перенос группы блоков на новое место
14.1.8. Запуск нескольких моделей одновременно Теперь все готово для нашего первого серьезного эксперимента — одновременного запуска нескольких моделей. Чтобы получить приведенные далее результаты, необходимо установить параметры Start time = 0 и StopTime = 10 в окне установки 573
Глава 14. Подготовка и запуск модели параметров моделирования (напоминаем., что оно вызывается командой Simulation • Simulation parameters...). Этот момент представлен на рис. 14.8. После этого, запустив моделирование нажатием кнопки Start Simulation с изображением треугольника или командой меню Simulation • Start, можно увидеть результат, показанный на рис. 14.9. На самом деле вначале картина не меняется и
о i а а т: * ч» е; а •::•-; > • i ^
zl\ и Ф •••< \ ш в •]• Z-ZML
•*&А
Sdverj Workspace I/O j Diagnosticsj Simulation time Start (roe: fOO
-44
Stop time: j 1 0 0
Sotvef option* Type: jVa
!451Doimar>d-Frince|
Max 5lep size.
Rdative.tolerance: j le-3
Min step size:
tosolu'e tolerance j au(o
JRem t e oup tut OK J Cancel | He\p
Ready
..
.'
. .
•.
flO0%
Г
i
Рис. 14.8. Готовая модель и окно установки параметров "*• ' - "-' ШЗЗЮШШ a\&um\i,v»m,\ci•,;.•> . F шш Г р р р
bde4$
моделирования
лав-в
Puc. 14.9. Готовая модель и результаты ее моделирования 574
14.2. Моделирование
ограничителя
лишь спустя секунду-другую слышится звук колокола — он свидетельствует об окончании процесса моделирования. Чтобы получить осциллограммы от каждого из осциллографов, надо активизировать их, сделав на каждом из них двойной щелчок мышью. При этом появятся их осциллограммы в произвольных местах экрана. Полученные таким образом осциллограммы можно перетащить мышью в удобное для обзора положения. Их можно также растянуть или сжать в любом направлении с помощью мыши. В результате мы и получим вид экрана, представленный на рис. 14.9. Итак, мы видим, что все три модели работают и осциллограммы представляют временные зависимости сигналов, которые вырабатывают источники — синусоиду, прямоугольные импульсы и треугольные импульсы.
14.2. Моделирование ограничителя 14.2.1. Постановка задачи В качестве следующего примера рассмотрим тривиальную задачу моделирования работы идеального ограничителя сигналов, на вход которого подается синусоидальное напряжение с амплитудой 5 В и частотой I рад/с. Допустим, что пороги ограничения составят +0,5 и —0,5 В. В данном случае очевидно, что основными блоками будут генератор синусоидальных сигналов и блок нелинейности, моделирующий передаточную характеристику ограничителя. Кроме того, к этим блокам надо добавить регистрирующий блок — осциллограф. Так как функциональная схема моделируемого устройства в данном случае вполне очевидна, то мы можем перейти к ее реализации.
14.2.2. Создание и запуск модели ограничителя Для создания модели данного устройства проделаем следующие действия: 1. Откроем окно новой модели Simulink, нажав кнопку Create a new model. 2. Расположим это окно рядом с окном браузера библиотек. 3. Из раздела библиотеки Sources перенесем в окно модели источник синусоидального сигнала Sine Wave. 4. Из раздела библиотеки Nonlinear перенесем в окно модели нелинейный блок — ограничитель Saturation. 5. Из раздела библиотеки Sinks перенесем в окно модели блок осциллографа Scope. 6. Выполним соединение между блоками (как это сделать, описано в предыдущем примере). 7. Проверим установку времени моделирования: Start time = 0 и Stop time = 20. 8. Щелкнув дважды по блоку Sine Wave, в появившемся окне параметров источника синусоидального сигнала установим амплитуду равной 5. 9. Запустим модель на исполнение, нажав кнопку Start Simulation в панели инструментов окна модели. Результат представлен на рис. 14.10. 575
Глава 14. Подготовка и запуск модели
крзэ 1 O u t s u t a sine w a v e w h e r e t h e sine t y p e determines t h e c o m p u t a t i o n a l
I t e c h n i q u e u s e d . TVie p a r a m e t e r s r i t h e t w o t y p e s a r e
r*V*
5э;иГЭ11Сг-
refotedthrough;
j Sarpfes per pero id « 2*pi / {F^quency " Samp el tftie) II U (Jsw r b i e r o f o f s e t s a m p e l s * P h a s e * S a m p e l s p rspedo riud *p eh i e sampel-based *ne type f numec rial probele m e /to(2ru n)irng for Ia i ^e m ti es (e.g. ov*fo i w (n an i ou l te rilneo j ccur • Stielype: [типе based
p
Puc. 14.10. Модель ограничителя и результат ее работы 14.2.3. Настройка масштаба осциллограмм Нетрудно заметить, что масштаб отображения осциллограммы у осциллографа на рис. 14.10 оказался не совсем удачным — изображение осциллограммы мало по высоте, поскольку при порогах в 0,5 масштаб в 5 условных единиц уровня получается слишком крупным. Заметим, что мы не указываем размерность осциллограммы по вертикали. В зависимости от условий задачи это могут быть метры (задача на движение), вольты (электронный ограничитель) и т. д. Для смены масштаба достаточно щелкнуть правой кнопкой мыши в окне осциллограммы. В появившемся контекстном меню (рис. 14.11) нужно выбрать команду Axes Properties..., которая служит для задания масштаба осциллограммы. В открывшемся окне свойств осей надо заменить значения Y-min = —5 и Y-max = 5, например на Y-min = —0.8 и Y-max = 0,8. После этого, нажав кнопку Apply, можно увидеть осциллограмму с измененным масштабом (рис. 14.12). Нетрудно заметить, что теперь осциллограмма стала гораздо более представительной. Если вид осциллограммы вас устраивает, то достаточно зафиксировать сделанные изменения масштаба, нажав кнопку ОК в окне свойств осей. Можно и отказаться от сделанных изменений, нажав кнопку Cancel. На рис. 14.13 в контекстном меню осциллограммы видна еще команда — Autoscale (Автомасштабирование). Эта же команда реализуется кнопкой Autoscale в панели инструментов окна осциллограммы. Эта команда устанавливает масштаб, при котором окно осциллограммы используется полностью. В данном случае это означает, что осциллограмма будет иметь максимально возможный размер, как показано на рис. 14.13. Итак, как и следовало ожидать, в результате моделирования получена синусои•щ с обрезанными на уровне 0,5 сверху и снизу вершинами. При этом результат
14.2. Моделирование ограничителя получен мгновенно — см. данные в строке состояния окна модели (время моделирования — 0). Столь быстрое получение явно верного результата достигается далеко не всегда. Чем сложнее модель, тем больше усилий и времени придется затратить на то, чтобы добиться ее правильной работы.
D tf Н # >
Ready .
.
В
:
И Ф .-
•
.
.
.
ГхОО%
R B ••}
Г.
^
j
.
.
[ode4S
.
Рис. 14.11. Вывод контекстного меню окна осциллограммы
3 ! М Ф м В В '.г #
-)rix| ~~ Y-max: jT T»le(*< i Stgnaft.abe> l '©palced bi1 sg i nnaame]: OK
Carce!
Appyl
Puc. 14.12. Получение осциллограммы в новом масштабе 577
Глава 14. Подготовка и запуск
модели
D и у а-
-4м
Ready
;100%"
'
'{
;
;ode45
Рис. 14.13. Осциллограмма после выполнения команды Autoscale 14.2.4. Сохранение модели Можно сохранить созданную модель для последующего применения, показа или модернизации. Для этого используется команда Save или Save As меню File окна редактора моделей (рис. 14.14). Модель записывается в виде файла с расширением .mdl.
Папка' | =_jl wo: fflj deedemo <_% deedemo 3_accei_r tw
Щ] deedemo 1 Q deedemo!!
i t USERS
Й deedemo-f
1* iL
ИМИ ФЭЙ/В:
Тип Файла:
| Simuimk Models fjndl) /R11 Models f.md[; muiink 4/R12 Models Г.пк*Г; ^iuiink 4 1 'R12 1 Models Г md
Puc. 14.14. Запись модели командой Save Аь 14.2.5. Модернизация и расширение модели Теперь, после создания простой модели, можно попытаться модернизировать ее и дополнить, изменить параметры модели и т. д. На рис. 14.15, например, показана модель, в которой к источнику синусоидального сигнала подключены уже 578
14.3. Основные приемы подготовки и редактирования
модели
четыре нелинейных устройства. Это ограничитель пиков, нелинейность типа «мертвая зона», квантующее устройство и релейный пороговый элемент (в электронике известный под именем триггера Шмитта). К каждому из них подключен свой осциллограф.
иста" О fa: U a : * i
. 14.15. Модель из трех нелинейных устройств Как видно из рис. 14.15, теперь можно наблюдать сигналы с выходов каждого из четырех нелинейных устройств, причем с помощью отдельных осциллографов. Позже мы покажем, что возможно наблюдение и нескольких сигналов одним осциллографом, если перед ним установить мультиплексор сигналов.
14.3. Основные приемы подготовки и редактирования модели Рассмотрев простейшие примеры моделирования, приступим к систематизированному описанию приемов подготовки и редактирования моделей. 14.3.1. Добавление надписей и текстовых комментариев Модели, не содержащие текстовых комментариев, не наглядны. Зачастую без комментариев даже трудно понять, что, собственно говоря, моделируется. Поэтому подготовка текстовых комментариев — важный момент в культуре моделирования, кстати, как и в программировании. Как уже отмечалось, создать надпись в окне модели очень просто. Достаточно указать мышью место надписи и дважды щелкнуть левой кнопкой мыши, и появится блок надписи с курсором ввода (рис. 14.16). 579
Глава 14. Подготовка и запуск модели • Это текстовая надпись]
-
Рис. 14.16. Ввод текстового
комментария
Следует отметить, что для подготовки русскоязычных надписей нужно выбирать кириллические шрифты. Для этого нужно выделить текстовый блок и, установив в него курсор мыши, нажать правую клавишу мыши. Появится контекстное меню, представленное на рис. 14.17. Исполнив команду контекстного меню Font, можно вывести окно выбора шрифта. Это окно показано на рис. 14.18. Так же просто можно изменить подписи к блоками моделей. Для этого нужно установить мышь в область надписи и щелкнуть левой кнопкой мыши — в подписи появится курсор ввода и ее можно будет редактировать. На рис. 14.19 показано изменение надписи в блоке осциллографа. j Моделиро&ание н е л и н е й н ы х у с т а с й с т " ' Cut Copy
/-
Л V
Clear
— '—н Sec H ЕпаЫе ТеХ commands
—'—' Saturation
пе W a v e
E
Coulomb & Viscous Frictioni
Soo
1
•
uantizи
|
Text alignment Show drop shadow
•
Foreground color Background color
• •
1
S сореЗ
rr 1
1
Relay
Scope-4
Puc. 14.17. Вывод контекстного меню текстового
Шриет:
n
••••..
Anal
О Aial Nanow 0 /Vial Rounded MT Bok 0 Aral Umcoite MS 'It Batang tfBadadderlTC j j
Нвчертамие: обычный
'аамвр: 1С
>ЯРНЫЙ КурСИС
I B 11 12 14 16 IS 20
комментария
OK Отмена
J d
I Образец АлВЬБбФф
Набор е м к к ш : :
Рис. 14.18. Окно выбора шрифта текстового
580
комментария
14.3. Основные приемы подготовки и редактирования
модели
; Осциллограф :
Рис. 14.19. Пример изменения подписи к блоку ВНИМАНИЕ
Из приведенных примеров может показаться, что можно запросто переделать все англоязычные надписи на русскоязычные. Однако это не совсем так. Некоторые операции (например, выравнивание подписей и даже заполнение текстового блока) при использовании символов кириллицы работают не вполне корректно. Может наблюдаться и самопроизвольная смена шрифта при завершении создания надписи. Удивляться этому не стоит — MATLAB не относится к продуктам, локализованным в России. Поэтому без веских оснований не стоит пользоваться символами кириллицы. Это справедливо даже при использовании MATLAB 7 + Simulink 6, несмотря на улучшенную поддержку интернациональных шрифтов
Чтобы убрать надпись, нужно выделить ее (кстати, как и любой другой объект) и выполнить команду Edit • Clear.
14.3.2. Выделение, удаление и восстановление объектов Выделение объектов удобнее всего осуществляется мышью. Достаточно установить курсор мыши на нужном объекте и щелкнуть левой кнопкой мыши. Объект будет выделен. Мышью также можно выделить несколько объектов. Для этого надо установить курсор мыши вблизи них, нажать левую кнопку мыши и, удерживая ее, начать перемещать мышь. Появится динамическая пунктирная рамка. Все попавшие в нее объекты становятся выделенными. Выделить все объекты также можно, используя команду Edit • Select All. Для стирания выделенного объекта можно вызвать команду Clear из меню Edit или из контекстного меню (рис. 14.20). Контекстное меню очень удобно тем, что для любого объекта оно выводит перечень команд, которые доступны в данном состоянии. После исполнения команды Clear можно наблюдать удаление блока. Пример этого показан на рис. 14.21. Обратите внимание на то, что переименование оставшихся блоков при удалении одного из блоков не происходит. Следует учесть, что команда Clear стирает блок безвозвратно, то есть без помещения его в буфер обмена. Однако эту операцию можно отменить командой Undo в позиции File меню окна Simulink. Для восстановления объекта в окне модели надо установить на нужное место его расположения курсор мыши и щелкнуть ее левой клавишей. После этого исполнение команды Paste из позиции File меню окна Simulink или из контекстного меню правой клавиши мыши помещает хранящийся в буфере объект (блок) в заданное место.
14.3.3. Вставка блоков и их соединение Вставку блоков с помощью браузера библиотек Simulink мы уже обсудили достаточно подробно в примерах. Отметили также, что для переноса блоков, их копирования и размножения целесообразно использовать буфер обмена. Весьма 581
Глава 14. Подготовка и запуск модели
Sine Wave
Saturation
Dead Zone
Scope
Quantizer
Scopi
JF Relay
Sear.:
Block properties...
Format • Foreground color • Background color • Help
Puc. 14.20. Контекстное меню блока плодотворным является подход, когда пользователь для создания своей модели исJ V/ пользует ранее составленную модель — наS i n e W a v e Saturati on пример, из отлаженных демонстрационных примеров, которых в пакете Simulink великое множество. / I Для подключения новых блоков нужны / новые соединения. Они также легко выDead Zone Scope 1 полняются с помощью мыши. Вообще говоря, приемы ввода новых блоков и их соединений выполняются очень просто и естественно. При этом приемы редактиро> • • вания очень напоминают работу с популярными графическими редакторами, коScope 2 Qua tizer торую легко осваивают даже дети. Тем не менее отметить важнейшие приемы осуществления соединений полезно. w Г Блоки моделей обычно имеют входы и выL ходы. Как правило, выход какого-либо блока подключается ко входу следующего блока Scope 3 Relay и т. д. Для этого курсор мыши устанавливаPuc. 14.21. Модель с удаленным ется на выходе блока, от которого должно блоком Scope исходить соединение. При этом курсор превращается в большой крестик из тонких линий. Держа нажатой левую кнопку мыши, надо плавно переместить курсор ко входу следующего блока (рис. 14.22), где курсор мыши приобретет вид крестика из тонких сдвоенных линий. Добившись протяжки линии ко входу следующего блока, надо отпустить левую кнопку мыши. Соединение будет завершено, и в конце его появится жирная стрелка. Щелчком мыши можно выделить соединение, признаком чего будут чер-
г j
582
14.3. Основные приемы подготовки и редактирования
модели
Scope Рис. 14.22. Начало соединения блока источника с блоком осциллографа
Г
-я
I
Scope
Рис. 14.23. Выделенное соединение
ГЛ7Т Sn ie Wave а
и
-п
V7
I
Scope
Рис. 14.25. Готовая петля соединения
Scope Рис. 14.24. Начало создания петли линии соединения
Sine Wave Scope
Рис. 14.26. Пример соединения с наклонной линией
ные прямоугольники, расположенные в узловых точках соединительной линии (рис. 14.23). Иногда бывает нужно сделать петлю соединительной линии в ту или иную сторону. Для этого нужно захватить нужную часть линии и отвести ее в нужную сторону, перемещая мышь с нажатой левой кнопкой. Рисунок 14.24 поясняет этот процесс. Создание петли линии заканчивается отпусканием левой кнопки мыши. Полученная таким образом линия показана на рис. 14.25. Особо стоит отметить возможность задания наклонных линий соединений при нажатой клавише Shift. Пример такого соединения дан на рис. 14.26. 14.3.4. Создание отвода линии Часто возникает необходимость сделать отвод от уже созданной линии. Пример создания такого отвода иллюстрирует рис. 14.27. Заметим, что при нажатой клавише Shift отвод строится наклонными линиями. В примере, показанном на рис. 14.28, использована модель интегратора, подключенного к выходу источника прямоугольных импульсов. Чтобы было можно наблюдать осциллограммы как на выходе источника, так и на выходе интегратора.
1 Ш1 1 *s ^. DG screte tgrao tr > enea ro tPrulse ne
Scope
Рис. 14.27. Пример создания отвода (пунктирная линия) 583
Глава 14. Подготовка и запуск модели
Discrete Pus le Generator
Scope Рис. 14.28. Пример модели с отводом линии
о"udи ш: х % в [ а НI > •
I *юв
Моделирование интегратора
Гте -bsied s recomnwided (or uie ftfth в vaiiabe Kep stiver wh 5*role-baseC з wconvncnded foe use *лп a fwed step soiVer № * •irjaeie porton of * modtf uting a vtnatfo *!ev «elver. Perameter» • ••
•
Pulietype; [ Time based
Pui« Width {". of pftned): _ Phase delay {мса).
Heftmt vedor овпЫлпм OK
I
Cancel
ID I
Неф
Puc. 14.29. Результат моделирования в схему включен блок мультиплексора сигналов Мих с двумя входами. Чтобы подключить нижний вход к уже задействованному выходу источника, нам и понадобилось создать отвод линии. Теперь можно запустить эту модель и посмотреть, какие сигналы действуют на выходах источника и интегратора. Результат запуска представлен на рис. 14.29. Нетрудно убедиться в том, что сигнал на выходе интегратора представляет собой ступенчато нарастающую линию. Когда на выходе генератора имеется высокий (условно) уровень напряжения, на выходе интегратора сигнал линейно нарастает. Когда уровень на генераторе равен 0, сигнал на выходе интегратора остается неизменным. Такой характер процесса, разумеется, хорошо знаком специалистам. Но начинающим изучать электронные (и не только) системы этот пример дает наглядную иллюстрацию работы интегратора.
14.3.5. Удаление соединений Для удаления соединительной линии достаточно выделить ее и выполнить команду Clear или Cut. Нужное соединение будет удалено. Напоминаем, что команда Undo позволяет восстановить удаленное соединение сразу после удаления.
14.3.6. Изменение размеров блоков Simulink имеет расширенные возможности редактирования блок-схем. Так, блоки в окне редактирования можно не только перемешать с помощью мыши, но 584
14.3. Основные приемы подготовки и редактирования модели и изменять в размерах. Для этого блок выделяется, после чего курсор мыши надо установить на кружки по углам блока. Как только курсор мыши превратится в двунаправленную диагональную стрелку, можно будет при нажатой левой кнопке растягивать блоки по диагонали, увеличивая или уменьшая их размеры (рис. 14.30). Увеличенный в размерах блок показан на рис. 14.31. Обратите внимание на то, что растягивается только графическое изображение (пиктограмма) блока, а размеры его названия в виде текстовой надписи не изменяются.
м D s cie rtnea el D scie rtne el G ro tP irsu G a o r2 tPsu Puc. 14.30. Растяжение блока
Discrete Pulse Generator 1 Discrete Pulse Generator2 Puc. 14.31. Пример растяжения блока
14.3.7. Перемещение блоков и вставка блоков в соединение Блок, участвующий в соединении, можно перемещать в окне модели, выделив его и перетаскивая, как обычно, мышью. При этом соединение не прерывается, а просто сокращается или увеличивается в длине. В длинное соединение можно A 1—1 вставить новый блок, не разрушая его и не выполняя сложных манипуляций. Sine Wave Scope Рисунок 4.32 показывает вставку блока дифференцирующего устройства между du/dt > источником синусоидального сигнала и осциллографом. Derivative Результат вставки дифференцируюPuc. 14.32. Исходное соединение и блок щего устройства в соединение между для вставки источником и осциллографом показан на рис. 14.33. du/dt Однако подобная простая вставка V/ возможна для блоков, имеющих один Scope Sine Wave Derivative вход и один выход, которые включаются в соединение. Попытка вставить таким образом мультиплексор будет безуспешной, поскольку он имеет два входа Рис. 14.33. Пример вставки блока и не стыкуется с разрываемым соедив соединение нением. Чтобы вставить мультиплексор, следует удалить соединение между дифференцирующим устройством и входом осциллографа. Для этого соединение выделяется и выполняется команда Edit • Clear. После этого мультиплексор перемещается в нужное место и соединения создаются заново. 14.3.8. Моделирование дифференцирующего устройства Итак, мы фактически создали модель дифференцирующего устройства и можем посмотреть, что происходит при дифференцировании синусоидального сигнала. Результат запуска созданной модели представлен на рис. 14.34. 585
Глава 14. Подготовка и запуск модели I8E3SS F»^i
31
j Моделирование дифференцирующего устройства :al derivative: du/dt.
OK
1 1
.ъ
•
Cance!'
i i 41
.... . .
'..
-щ,
t-
i
il
: •
Рис. Н.34. Моделирование дифференцирующего устройства Внимательно присмотревшись к осциллограммам, мы видим, что при входном синусоидальном сигнале выходной сигнал является косинусоидой. Это вполне отвечает математическим соотношениям для данного случая (как известно, производная sin(x) есть cos(x)). Однако в самом начале процесса дифференцирования хорошо виден изъян работы модели — при t = 0 производная равна не 1, а 0. Это связано с тем, что процесс начинается при нулевых начальных условиях. Но довольно быстро ситуация исправляется и в дальнейшем выходной сигнал становится косинусоидальным. Таким образом, дифференцирующее устройство можно использовать для точного сдвига на 90° гармонического сигнала любой частоты. Обратите внимание, что в отличие от блока интегратора (рис. 14.29) блок цифрового дифференциатора не имеет настраиваемых параметров. Его окно параметров, показанное на рис. 14.26, является чисто информационным. 1 4 . 3 . 9 . Команды Undo и Redo в окне модели Большую помощь в редактировании оказывает команда Undo — отмена последней операции. Она поддерживает свыше ста различных операций, включая операции добавления и стирания линий. Эту команду можно вызвать с помощью кнопки в панели инструментов окна модели или из меню Edit. Для восстановления отмененной операции служит команда Redo.
14.4. Операции форматирования модели 1 4 . 4 . 1 . Меню форматирования Format В меню Format (и в контекстном меню) находится ряд команд форматирования блоков. Их можно разделить на несколько характерных групп. 586
14.4. Операции
форматирования
модели
• Управление отображением надписей и видом блоков: • • • • • • •
Font — установка шрифта для текстовых надписей; Text alignment — выравнивание текста в текстовом блоке; Flip name — помещение подписи блока сверху или снизу блока; Show/Hide name — отображение или скрытие подписи выделенного блока; Flip block — отражение блока относительно вертикальной оси; Rotate block — вращение блока на 90°; Show drop shadow — показ тени от блока.
• Показ меток портов: • Show port labels — показ меток портов. • Установка цветов: • Foreground color — установка цвета линий выделенных блоков; • Background color — установка цвета фона для выделенных блоков; • Screen color — установка цвета фона для всего окна модели. • Прочие установки: • Library link display — отображение связей с библиотеками; • Simply time colors — установка цвета блока индикации времени; • Wide nonscalar lines — увеличение/уменьшение ширины нескалярных линий; • Signal dimensions — отображение размерности сигналов; • Port data types — вывод данных о типе портов; • Execution order — вывод порядкового номера блока в последовательности исполнения. 1 4 . 4 . 2 . Примеры форматирования модели Команда Format • Font выводит окно с установками шрифта для текстовых надписей (рис. 14.18). Это позволяет форматировать текстовые блоки. Рисунок 14.35 показывает операции, связанные с изменением положения блоков. Это команды Flip block и Rotate block. Наконец, на рис. 14.36 наглядно показано действие ряда операций форматирования иного рода на вид простой модели, которая была описана чуть выше. Кро-
1 23 Down
R oa te t -^ Ч
Тp Rg i ht to F il Left I Up ч—-""// 1 2 3Rotate •
<2
Рис. 14.35. Операции изменения положения блоков 587
Глава 14. Подготовка и запуск модели у~\ 1 double V Sine Wave
2 du/dt Derivative
double
doube l (2) r Scope
Рис. 14.36. Вид модели после операций
форматирования
ме того, на этом рисунке масштаб модели увеличен вдвое с помощью команды View • Zoom In. Этот рисунок демонстрирует возможности цветового оформления блоков, выделение нескалярных линий соединения, вывод данных о типе портов и введение указаний на порядок исполнения блоков в ходе моделирования.
588
Глава 15. Блоки источников и получателей сигналов 1 5 . 1 . Источники простых сигналов и воздействий 15.1.1. Общий обзор источников Окно раздела библиотеки Sources содержит пиктограммы источников воздействий произвольного характера. В электро- и радиотехнике их принято называть источниками электрических сигналов, но в механике и в других областях науки и техники такое название не очень подходит — природа воздействий может быть самой разнообразной, например, в виде перепада давления или температуры, механического перемещения, звуковой волны и т. д. Учитывая это, мы будем называть соответствующие компоненты просто источниками. Окно раздела библиотеки с источниками Sources представлено на рис. 15.1. Для его получения нужно выделить мышью позицию в браузере библиотек и открыть окно, используя команду Open в контекстном меню правой клавиши мыши. Большинство компонентов представлено пиктограммами, изображающими временные или функциональные зависимости воздействий, например такие, как перепад для блока Step, синусоида для блока Sine Wave и т. д. Набор блоков содержит практически все часто используемые при моделировании источники воздействий с самыми разными функциональными и временными зависимостями. [^3 Library: simulink/Sources File Edit View Format Help Model & Subsystem Inputs untitlea mat >
d > Ground
Fram File
Signal Generators
Constant
DDDD Sioo gnal Generator
sirnin From Vtatepaoe Signal 1
m Pul3e
Generator
Signal Builder
> V> J 1 l\7 У eq pue nic tg Ramp Snie Wave Se tp R Se ea n e 2Vf Hi •
Chirp Signal
Random Numfc*»
G > Z\o&.
Uniform Random B3nd-Umiteo Numbe* White Koise 12:3-4 Digital
Clod!
Puc. 15.1. Окно с перечнем источников сигналов и воздействий 589
Глава 15. Блоки источников и получателей
сигналов
Можно задать произвольное воздействие из файла — элемент From File. Имеются и случайные воздействия для моделирования систем и устройств методом Монте-Карло. С каждым блоком связано окно настроек, которое открывается при активизации пиктограммы блока в окне компонентов или в окне модели. Для пользователей, имеющих хотя бы начальные представления о визуальном моделировании систем, установка параметров компонентов не вызывает трудностей, поскольку названия большинства параметров вполне очевидны. Например, для блока Sine Wave устанавливаются амплитуда синусоиды, частота, фаза и эталонное время (период дискретизации модели), то есть задаются типичные параметры сигнала (воздействия). Для нового блока в окис параметров отображаются значения по умолчанию. Как правило, они нормализованы — например, заданы единичная частота, единичная амплитуда, нулевая фаза и т. д. Возможность изменения параметров появляется после переноса блока в окно модели. Как правило, значения параметров блоков по умолчанию позволяют начать моделирование и уточняются в ходе работы. Пиктограммы блоков сигналов имеют вид прямоугольников с изображением временной зависимости сигналов на выходе сигналов. Это облегчает восприятие модели. 1 5 . 1 . 2 . Источник постоянного воздействия Constant Источник постоянного воздействия Constant задает константу или вектор констант. Рисунок 15.2 иллюстрирует применение этого источника и контроль уровня его воздействия с помощью осциллографа и: цифрового индикатора Display. Подобные способы контроля мы будем применять и при описании других источников. Источник постоянного воздействия характеризуется единственным параметром — своим уровнем воздействия в виде константы (по умолчанию I). При установленном флажке Interpret vector parameters as 1-D вектор параметров интерпре-
:• Constant • ШлеиУЛЗКУН ; Output the constant specified by the Constant vaiue* parameter, tf ; Constant value' is a vector and 'Interpret vector parameters as 1 -D" is on. \ i treat the constant value as a 1-D array, Otherwise, output a matrxi with the ' \ same dm i enso i ns as the constant value. "• Parameters — •• Constant value;
——— .™
.
_
r
f/ Interpret vector parameters as 1-D Г"
Show additions! parameters OK
Рис. 15.2. Источник постоянного воздействия с одним значением 590
15.1. Источники простых сигналов и воздействий тируется как одномерный. Следует отметить, что можно задавать вектор KOIU rain в квадратных скобках: например, запись [ — 1 0 1 2 3.14] задает вектор из пятиконстант со значениями —1, 0, 1, 2 и 3,14. Этот случай представлен на рис. 15.3. Установка флажка Interpret vector parameters as 1-D имеется и у других источников, и в дальнейшем мы ее специально отмечать не будем. Источник постоянного воздействия может выдавать такие воздействия с разным форматом их представления. Возможные форматы представлены в открытом списке на рис. 15.4. Выбран формат double — данные удвоенной длины в формате .-=is.l.*J
i Output tne constant specified by the Constant value' parameter. If I "Constant value'is a vector and Interpret vector parameters as 1-D* is on, \ \ treat the constant value as a 1-D arra>.' Otherws i e, output a matrxi with the j i вате dimensions as the constant value. •- - Parameters
•
] Constant value:
.
i
p1 Interpret vector parameters as 1-D Г"
Show additional parameters
Help
Puc. 15.3. Источник, постоянного воздействия со многими
значениями
. Output the constant specified by the Constant vaiue' parameter, If : i Constant value'is a vector and Interpret vector parameters ss 1-D* is on, ! • treat the constant value ss a 1-D array, Otherwise, output a matron with the \ \ same dm i enso i ns as the constant value. Parameters 1 Constant value Interpret vector parameters as 1-D Show additional parameters
: Output data type mode: double
d
; Sample time {-1 for inheril ntS j:ni2
|
130
dint 16 ini32 boolean 1 Spec*) via dialog inherit from Constant value inherit via bacK prapaqaiion
Puc. 15.4. Иллюстрация
задания и вывода значений двухэлементного с различными форматами
вектора 591
Глава 15. Блоки источников и получателей
сигналов
с плавающей точкой. Цифровой индикатор может выводить данные также с различным форматом. Это также показано на рис. 15.4. 1 5 . 1 . 3 . Источник синусоидального воздействия Sine Wave Синусоидальное воздействие одно из самых распространенных. Мы уже описывали источник синусоидального сигнала в Главе 14 — см. рис. 14.10, на котором показано и окно параметров этого источника. Он характеризуется амплитудой Amplitude, смещением по вертикали Bias, частотой Frequence, фазой Phase и эталонным временем Sample time. Последнее используется для согласования работы источника и других компонентов модели во времени (по умолчанию оно принято равным 0). Создание синусоидального сигнала возможно двумя алгоритмами, которые выбираются списком Sine types: Time based — по текущему времени для непрерывных сигналов или по конечно-разностному алгоритму для дискретных сигналов; Sample based — по такту дискретности и числу расчетных шагов за один период сигнала. При формировании синусоидального сигнала по текущему времени используется формула: J[t) = Asin(2nft + ф) + b, где А — амплитуда сигнала,/— частота, / — текущее время, ф — фаза и й - сдвиг сигнала (постоянная составляющая). В условиях ограниченной точности вычислений такой расчет при больших временах может приводить к заметным ошибкам. При конечно-разностном алгоритме используется следующее представление сигнала: [~sin(/ + А/)]
Г cos(A/) -sin(AO
|_cos(/ + At)]
L" s i n ( A O -cos(AO
cos(?)
Этот алгоритм обеспечивает меньшую погрешность округления для больших времен. При формировании по количеству тактов за период используется следующее соотношение: At) = As\n(2nkfT+ ф) + b = Asm((2nk + l)/N) + b, где Т — такт дискретности, N — количество такстов в секунду, / — начальная фаза, выраженная в тактах, к = 0, 1..., N — 1 — номер текущего шага. 1 5 . 1 . 4 . Источник нарастающего воздействия Ramp Источник линейно нарастающего воздействия вида F{t) = k*t + i и окно его параметров представлены на рис. 15.5. Осциллограф, подключенный к выходу источника, показывает временную зависимость этого воздействия. Параметры источника: • Slope — угловой коэффициент временной зависимости к; • Start time — время, начиная с которого воздействие нарастает; • Initial value — начальный уровень воздействия /. 592
15.1. Источники простых сигналов и воздействий
г • Ramp {mask} $nk> I OutfHJt arampsignal slatting at the specifed time. : r Parameters ~ j So l pe: Start time; I | Initial output: p" Inteipret vector parameters as 1 -D OK I
Cancel
Hep l
Puc. 15.5. Источник линейно нарастающего воздействия Как правило, указываются значения параметров, принятые по умолчанию. Обратите внимание на то, что за пределами отрезка времени моделирования [0, 10] воздействие не определено.
15.1.5. Источник одиночного перепада Step Источник воздействия в виде одиночного перепада показан на рис. 15.6. Параметры источника: • Step time — время появления перепада (скачка); • Initial value — начальное значение воздействия (до перепада); • Final value — конечное значение воздействия (после перепада); • Sample time — эталонное время. Обратите внимание на то, что перепад можно задавать как положительным, так и отрицательным. Для задания отрицательного перепада начальное значение дол*]
•
г Step j Output a step. Parameters Step time:
injtta! value: I» Final value:
Sample time:
p ' 1п1ефге1 vector parameters as 1-D p" Enable zero crossing detection OK
Cancel
Help
/5.6. Источник, одиночного перепада 593
Глава 15. Блоки источников и получателей
сигналов
жно быть больше, чем конечное. Эти значения могут быть как положительными, так и отрицательными. 1 5 . 1 . 6 . Источник прямоугольных импульсов Pulse Generator Источник дискретных импульсов Pulse Generator служит для создания прямоугольных однополярных импульсов (см. рис. 15.7).
ЛЯ
>о
I
•
.
.
.
у- Pulse Generator -
-
1
—
-
i Generate pulses ;йregularintervals where the pulse type determines the 1 computational technique used. i Time-based is recommended for use wtth a vanable step saiver, while | Sample-based isrecommendedfor use with a ftxed step solver or within a I discrete portion a ; a model using a variable step solver. г Parameters i Pulse type: pVel.flsed
~"~
™-~~""~
"TJ
I Miptude:
Pulse Width (% & period). Щ
•
Phase delay {se;s}: P p Interpret vector parameters as 1 -D OK J
...
Caned |
Рис. 15.7. Источник прямоугольных
Help
импульсов
Параметры источника по умолчанию обеспечивают формирование однополярных прямоугольных импульсов — см. осциллограмму на рис. 15.7. Можно устанавливать следующие параметры сигнала этого источника: • Amplitude — амплитуда; • Period — период (кратный эталонному времени); • Pulse width — ширина импульсов (в процентах от периода); • Phase delay — фазовая задержка (кратная эталонному времени); • Simple time — эталонное время. 1 5 . 1 . 7 . Земля Ground Блок заземления Ground служит для заземления входов блоков или иных точек модели (рис. 15.8). Его можно рассматривать как источник нулевого воздействия.
г Ground : :
—
-
-
—
7
Used to "ground" input signals. {Prevents warnings about unconnected input ports.) Outputs zero.
0*13]
Caned
Hep l
Рас. 15.8. Источник нулевого воздействия — земля 594
15.2. Источники шумовых
воздействий
15.2. Источники шумовых воздействий 1 5 . 2 . 1 . Источник случайного сигнала с нормальным распределением Random Number Источник случайного сигнала Random Number служит для создания случайного сигнала с равномерным распределением уровня. Применение источника иллюстрирует рис. 15.9. Ш2ЯЕ Г Random Number
•
—
—-
Output a normally (Gaussian) distributed random signal. Output is ] repeatable for a given seed. Parameters Mean:
Interpret vector parameters as 1-D
Cancel
Help
Рис. 15.9. Источник случайного сигнала с нормальным распределением Специфическими параметрами этого источника является среднее значение сигнала Mean и среднеквадратическое отклонение Variance. Назначение двух других параметров (см. окно установки параметров на рис. 15.9) уже отмечалось.
15.2.2. Источник случайного сигнала с равномерным распределением Uniform Random Number Источник случайного сигнала Uniform Random Number служит для генерации случайного сигнала с равномерным распределением. Уровень сигнала ограничен сверху и снизу значениями Maximum и Minimum. Применение этого источника и окно установки его параметров представлены на рис. 15.10. Осциллограмма сигнала также представлена на рис. 15.10. Надо помнить, что она не будет повторяться в ваших экспериментах, поскольку сигнал источника является случайным. Параметр Initial seed задает начальное значение сигнала. 1 5 . 2 . 3 . Генератор белого шума Band Limited White Noice Генератор белого шума Band Limited White Noice служит для создания шумового сигнала с заданной мощностью, равномерно распределенной по частоте. Рисунок 5.11 показывает работу этого генератора и окно установки его параметров. Генератор характеризуется мощностью шума Noice Power, эталонным временем Sample time и числом Seed, служащим для инициализации генератора случайных 595
Глава 15. Блоки источников и получателей
сигналов
р Uniform Random Number | Output a unifomily distributed random signal. Output is repeatable for a | given seed. • • • • • • :: • ...„.• •• . • -• .. ~ Parameters Minimum: I-1 Maximum:
Initial seed;
Sample time:
Interpret vector parameters as 1-D OK
Cancel
Help
Puc. 15.10. Источник случайного сигнала с равномерным распределением
I WNte noise for continuous (s-domain} systems. Ba>d-lmaed using I zero-order-hold. ' •.' Parameters-—— Noise power:
^ -•• ••-
..
Sampe l time: l_ Seed: ' • ' ; . | [233*1] [• Inteipret vector parameters as 1-D OK
Cancel
Help
Puc. 15.11. Генератор белого шума чисел. Генератор фактически является квантователем непрерывного сигнала, представляющего белый шум.
15.3. Источники сложных сигналов 1 5 . 3 . 1 . Повторяющаяся последовательность Repeating Sequence Источник повторяющихся последовательностей Repeating Sequence служит для генерации последовательности, заданной векторами моментов времени и значений сигнала в эти моменты времени (рис. 15.12). Узловые точки сигнала, заданные этими векторами, соединяются отрезками прямых, т. е. между ними задается линейная интерполяция. 596
15.3. Источники сложных сигналов
т
в» г Repeating table i^nask) (link}
Repeating
BIT**!
Sccc-e
ш:.
Шр
Ш
%JJQ14!
Р ,
ш1
:
| Output a repeating sequence of numbers specified *n a tabie of ttme-value j | pairs. Vaiues of time shouid be monatonicalty increasing. r Parameters \ Time values:
| ро5
—.—..„_„ .
.
| Output v a l u e s :
OK
, ;
.
.
Cancel
,
• •
• . - . . •
Help
Puc. 15.12. Источник повторяющейся последовательности Параметры источника этого типа: Time values — вектор значений времени; Output values — вектор выходных значений. Форма заданного сигнала отображается внутри пиктограммы. Следует отметить, что этот источник обеспечивает весьма большие возможности в генерации импульсных сигналов различного вида. По умолчанию формируется пилообразный сигнал (рис. 15.12). 1 5 . 3 . 2 . С и г н а л - г е н е р а т о р Signal G e n e r a t o r Источник воздействия типа Signal Generator служит для создания одного из четырех наиболее распространенных типов сигналов: • sine — синусоидальный сигнал; • square — прямоугольный периодический сигнал; • sawtooth — пилообразный периодический сигнал; • random — случайный сигнал. Рисунок 5.13 показывает действие этого источника при моделировании пилообразного сигнала и окно его параметров. Выбор формы сигнала осуществляется в списке Wave form. Источник характеризуется двумя параметрами — амплитудой сигнала и его частотой. Следует отметить, что все создаваемые этим источником формы сигналов можно получить при помощи специализированных источников, описанных в этом разделе. 1 5 . 3 . 3 . Г е н е р а т о р н а р а с т а ю щ е й ч а с т о т ы Chirp G e n e r a t o r Генератор нарастающей частоты Chirp Generator создает почти синусоидальные колебания, частота которых увеличивается до некоторого момента времени (см. рис, 15.14). Параметрами генератора являются: • Initial frequence — начальная частота в Гц (по умолчанию 0,1 Гц); • Target time — время нарастания частоты (по умолчанию 100 с); • Frequence at target time — конечное значение частоты в Гц (по умолчанию 1 Гц). 597
Глава 15. Блоки источников и получателей
Siflnal Generator
сигналов
- Signal Generator Output various wave forms. •-Parameters - - - ~ Wave foim: sawtooth Amplitude:
——• —-~ zl
Frequency: -'
Unrts: Hertz fs? Interpret vector parameters as 1-D OK
Ii Cancel
zl •
Hep l |
a
w
|
Рис. 15.13. Источник типа Signal Generator
г chirp {mask} fink)
Output a linear d*wp signal (sine wave whose frequency varies ineafty j with time}. Parameters j Initial frequency (Иг):
Frequency at target time {
Interpret vectore parameters as 1-D OK
|
Cancel
I
Help
Puc. 15.14. Генератор нарастающей частоты Обратите внимание, что в примере на рис. 15.14 заданы параметры, отличные от принятых по умолчанию. 15.3.4. Конструктор сигналов Конструктор сигналов это, конечно, полезное дополнение в Simulink 5. Он представлен блоком Signal Builder, имеющим единственный выходной порт. Сигнал на выходе этого порта имеет вид импульса, форму которого можно менять с помощью окна, представленного на рис. 15.15. Блок Signal Builder можно перетащить мышью в окно модели и использовать этот блок как источник сигнала с устанавливаемой пользователем формой сигнала. По умолчанию конструктор создает сигнал в виде прямоугольного импульса, который виден в окне конструктора (рис. 15.16). Однако, используя мышь, можно перемещать линии импульса и придавать им наклон — то есть менять форму исходного импульса. После этого можно наблюдать форму сигнала, подключив к выходу блока блок осциллографа. Все эти возможности иллюстрирует рис. 15.16. 598
15.3. Источники сложных сигналов 4 Signal nuildei (timulink3/Souicei/Signal Builder) • Fle i Edti Tab • Sg i nal Axes Hep l l a g Я |••* Ч
Ci 1 « J Л i f 5 | Hi 2 Vi X | •
Data set 1 \
0.8
Signal 1
Rename.. Hd ie Format Sel SignaiY limits Cut Copy
0.7 0.6 05 0.4 0.3 0.2
SetY?napgrid • Set T snap grid •
0.1 i
n 1
Change time range..; Time (sec)
10
Ftiflhi Point Name: j Signal 1 Index: j 1
_^J
d
. Adjust posM Y position
j Signal 1(tt1) [)
Рис. 15.15. Окно конструктора сигналов Simulink 5
-•JlStt
«itlX!
I Dfx £da y»w Sm i ua l to i n Format loot» Hep l L3.it£ У Si..*.''••:, m} a
Ж
I Sign.IBt.ild..
Cc il k to see l ct pon i t Of segment, 5Ntt*ckk to add pointi i Sgnal 1 181) [ J Puc. 15.16. Применение конструктора
сигналов
599
Глава 15. Блоки источников и получателей
сигналов
15.4. Источники системных данных 15.4.1. Источник времени моделирования
Clock
Источник текущего времени Clock служит для генерации чисел, которые являются значениями текущего времени моделирования. Для контроля этого времени может использоваться цифровой индикатор — Display ил и осциллограф (см. рис. 15.17).
.1
1 Output the current sm i ulato i n time. ; ]y Ds ipa l y tm ie i Decm i ato i n; j 1G OK.
] .Cancel
Hep l
| .. upp|y ./
Puc. 15.17. Источник времени моделирования Параметром источника является шаг Decimation, с которым меняются отсчеты времени. Флажок Display time задает отображение времени в блоке источника. 1 5 . 4 . 2 . Ц и ф р о в о й и с т о ч н и к в р е м е н и Digital Clock Имеется источник Digital Clock, имитирующий работу цифровых часов. Он имеет единственный параметр — эталонное время Sample time (по умолчанию I с). На рис. 15.18 показана работа источника Digital Clock. ..•...• t». . . • •
; гПаыаоск \ Output cunent simulation time at the speeded rate.
Sampe l time: Cancel
Puc. 15.18. Цифровой источник времени
Help
моделирования
Нетрудно заметить, что при заданном по умолчанию эталонном времени источник создает линейно нарастающий ступенчатый сигнал, что соответствует такому же росту текущего времени. 1 5 . 4 . 3 . Блок п о л у ч е н и я д а н н ы х и з ф а й л о в From File Блок From File служит для получения данных из внешнего файла. Данные должны быть представлены в виде матрицы: 600
15.4. Источники системных данных L
ul,
2
u2,
un, un
tfinul 111,,,,,
(15.1)
ип„„
Первая строка матрицы представляет собой идущие в возрастающем порядке отсчеты времени, а остальные строки — данные в эти моменты времени. В окне установки параметров следует задать имя файла, содержащего эту матрицу, и эталонное время Sample time. Выходной сигнал представляет собой только данные, то есть строка отсчетов времени в нем отсутствует. Пример применения этого блока дан на рис. 15.19.
1 1 1 1 1 1 1
Block Parameters from He
1803
г From File
1810 1820 1820 | 1840 | 1850
—-—:
Read time and output values from the first matrix in the specified MAT file. The matrix must contain time values in raw one. Additional rows correspond to output elements. Interpolates between columns. : г Parameters File name:
:
:
iseo T
Sample time:
OK
Cancel
Help
Puc. 15.19. Источник сигнала из файла
15.4.4. Блок получения данных из рабочего пространства From Workspace Блок From Workspace служит для получения данных из рабочего пространства. В качестве параметров задается формат матрицы данных (по умолчанию [Т, U]) и эталонное время Sample time (по умолчанию 0). Рисунок 15.20 поясняет применение этого блока. Кроме того, имеется список для задания конечного значения путем: • Interpolate data — экстраполяция данных; • Setting to zero — установки на нуль; • Hold final data value — задержки последнего значения данных, что бывает нужно для его представления регистрирующими блоками; • Cyclic Repetition — циклического повторения. При включении флажка Interpolate data производится интерполяция данных на промежутке времени до tfinil,, а для значений времени, больших tnm,h выполняется экстраполяция по последним отсчетам данных (при снятии флажка сигнал на указанных интервалах обнуляется). Обратите внимание на то. что, в отличие от матрицы источника From File, в матрице источника From Workspace отсчеты времени занимают первый столбец, а не строку. Для записи отсчетов времени и данных в файл и в рабочее пространство служат, соответственно, блоки То File и То Workspace. Они описаны далее. 601
Глава 15. Блоки источников и получателей
• .- • • < .
. eh • • •;- • 7
сигналов
.1 Current Directory 1С >MATLAB65V4vot к
r From Workspace : ! Read data vau le? specked in aray o I workspace. • [May (or matrtx) formal 1-Dsgna:l I var«nK ' *e iVa!ues DatsVeke jsf For 2-D *gnai us* structure format Structure format: var.»gr*alB,^nen»ons»[DimVeLes| Select interpolation to interpolate or «йгарЫж* et lmt> step; for vt data does net ewsi. i
p
« ^ ^ Data: . .
:
Sampic time:
[ 7 Н'5фо1з!е ижа Form output after ttna! date valuefc#:[Extrapolate
3
Setting to :ero Holdirig final value Cychc feoeijlion
•#.Stan| Puc. 15.20. Пример применения блока From Workspace 1 5 . 4 . 5 . Б л о к в х о д а In Блок входа In*, где * означает номер блока, служит для организации входов подсистем. Для них эти блоки являются входами. Блоки входа имеют сквозную нумерацию, причем при удалении блоков она автоматически возобновляется. Простой пример применения блока In представлен на рис. 15.21. Осциллограф показывает отсутствие сигнала на выходе блока I n l , а окно параметров блока позволяет устанавливать его параметры. Основными параметрами блока In являются номер порта Port Number, размерность порта Port dimension (размерность определяется автоматически, если этот параметр равен —1) и Simple time. Установка опции «Show additional parameters» расширяет окно параметров блока In до показанных на рис. 15.21 размеров и позволяет задавать ряд дополнительных параметров: Data types — выбор из списка типов данных (при выборе Specify via dialog появляются зоны дополнительных параметров, указанных ниже); Output data types — задание нужного типа данных (например, utit(8), sfix(16) и т. д.); Output scaling mode — режим масштабирования выходного сигнала (Best precision: Vector-vise — наивысшая точность, Use specified scaling — использование заданного масштаба); Output scale value — величина масштаба (примеры задания см. на рис. 15.21). Эта опция возможна при использовании режима масштабирования Use specified scaling; Signal type — выбор типа сигнала (auto, real или complex); Sampling mode. — выбор режима работы (auto, Sample based или Frame based); Interpolate data — интерполяция данных. 602
15.5. Виртуальные
• :ЙО
l ( 3 : 2 i- ! •
-hport—
регистраторы
..___
Provide an input port for a subsystem or modef. For Tnjg^red S £ \atcb puffer) input' is «elected, then the roort produces the Ihe ;np"jt й t^ie previous tinw step. The Diner parameters can specifythft input sgnal attributes. :
Paramee tre Port г ш Ь в г
3
!
:
.
.
.
:
:
.
.
P
.
o
1
(
j
m
e
n
f
t
o
n
s
{ - !
п
f
o
r
d
y
n
,
,
^
r
m
o
a
l
i
y
s
u
e
;
ьхг^е tone M fcnnherrted);
i
F ~ ~ ~ ~ ~
a
' '
;
.
,
jV —•---— 5bow addition^ рататй*
:
Datatype: [specifyvia dialog 1 •
s
r
4
V
•
-
• •
:
*
"
"
'
*
:
"
A
r " •
:•••
•
•
1 1 ;
"
• -
|
O t i p i * BOBlfng v ^ i e (Slope, e.g. 2 -3 or [Slope Btas]. e . ; . [1.25
••
SignaStype-p Sampling mode: W Intefpolate data
Рис. 15.21. Блок входа In К более детальному описанию блока In мы вернемся при рассмотрении применения подсистем (субблоков).
15.5. Виртуальные регистраторы 15.5.1. Обзор блоков приема данных Библиотека Sinks содержит блоки получателей данных. На рис. 15.22 показано окно раздела библиотеки пакета Simulink с блоками получателей данных. -=JflJ2<Ji Библиотека блоков приема данных Hep l File Edit Vie» содержит три группы блоков: Model & Subsystem Outputs Data Viewers — регистрирующие блоки для просмотра данных; Тё'п-ini " Тс File Model&Subsystems Outputs — блоки организации выходов в моделях и подData V i e w e r s системах; СИ СИ > Simulation Control — блок организации контроля моделирования Stop. Наличие регистрирующих компонентов — важный фактор качественной визуализации результатов моделирования Каждый регистратор имеет свое окно настройки, которое появляется при активизации его пиктограммы в окне компонентов или в окне модели.
Simulation Control
Рис. 15.22. Окно блоков приема данных 603
Глава 15. Блоки источников и получателей
сигналов
В состав виртуальных регистраторов входят: • Scope — осциллограф для наблюдения временных и иных зависимостей; • Floating Scope — «плавающий» осциллограф; • XY Graph — графопостроитель в системе полярных координат; • Display — устройство вывода на экран дисплея. Важно отметить, что виртуальные регистраторы фиксируют параметры любого типа, а не только электрические. Это придает некоторым виртуальным регистраторам (приборам) уникальный характер. Например, об осциллографе, фиксирующем не только электрические сигналы, но и перемещения механических объектов, изменения температуры или давления и вообще изменения любых физических величин, даже крупные физические лаборатории могут только мечтать. • • • •
Out* — выход с номером * для организации интерфейса с подсистемой; Terminator — нагрузка/заглушка для неиспользуемых выходов; То File — устройство записи данных в файл; То Workspace — устройство записи в переменную рабочего пространства;
Перейдем к рассмотрению виртуальных регистраторов. 15.5.2. Виртуальный осциллограф Виртуальный осциллограф, пожалуй, самое важное из регистрирующих устройств. Он позволяет представить результаты моделирования в виде временных диаграмм тех или иных процессов в форме, напоминающей осциллограммы современного высокоточного осциллографа с оцифрованной масштабной сеткой (и к тому же лучами разного цвета). Мы уже многократно приводили примеры применения осциллографа, например, для контроля формы сигналов различных источников. Приведем еще один пример (рис. 15.23) на контроль осциллографом треугольного сигнала. Осциллограф имеет свою панель инструментов, показанную на рис. 15.24 и содержащую следующие кнопки: 1. Print — печать содержимого окна осциллографа; 2. Parameters — открытие окна параметров осциллографа; 3. Zoom — увеличение масштаба по осям X и Y одновременно; 4. Zoom X-axis — увеличение масштаба по горизонтальной оси X; 5. Zoom Y-axis — увеличение масштаба по вертикальной оси Y; 6. Autoscale — автоматическое масштабирование, позволяющее наблюдать осциллограмму с максимальным размером; 7. Save current axes setting — сохранение текущих установок параметров окна; 8. Restore saved current axes setting — установка ранее сохраненных настроек; 9. Floating scope — превращение осциллографа в «плавающий»; 10. Lock/Unlock axes selection — фиксация/разрыв связи между текущей координатной системой окна и отображаемым сигналом (только в случае «плавающего» осциллографа); 11. Signal selection — выбор сигналов для отображения (только в случае «плавающего» осциллографа). На рис. 15.23 окно параметров осциллографа показано с открытой вкладкой General, содержащей основные параметры: 604
15.5. Виртуальные
регистраторы
Puc. 15.23. Работа с од но канальным, виртуальным, осциллографом
1 2
3
4
5
6
7
8 9
1 01 1
Рис. 15.24. Панель инструментов виртуального осциллографа • • • •
Number of axes — число осей (каналов) осциллографа; Time range — пределы временного интервала; Tick labels — вывод/скрытие отметок по осям; Sampling — установка временных соотношений (Decimation — кратность вывода данных, по умолчанию 1, или Simple Time — в тактах эталонного времени, по умолчанию 0).
Параметр Number of axes позволяет превратить одноканальный осциллограф в многоканальный путем указания нужного числа входов. При этом осциллограф приобретает несколько входных портов, к которым можно подключать различные сигналы. Пример применения осциллографа в таком режиме представлен на рис. 15.25. На рис. 15.25 показано также окно параметров осциллографа с открытой вкладкой Data history. Здесь можно задать максимальное число точек осциллограмм для хранения и задать параметры хранения осциллограмм в рабочем пространстве системы MATLAB. При использовании виртуального осциллографа особое внимание надо обратить на кнопки масштабирования, позволяющие (наряду с командами контекстного меню) менять размер осциллограммы. Весьма удобной является кнопка автоматического масштабирования — обычно она позволяет установить такой масштаб, при котором изображение осциллограммы имеет максимально возможный размер по вертикали и отражает весь временной интервал моделирования. 605
Глава 15. Блоки источников и получателей
i
сигналов
1J J •
вжзазягж
benerajl Daa t hsitory] Tp i: liy g tiht cilkn ig on axes P" Lm i i daal ponis t to a lst: f~ Save daa' to wok rspace
Рис. 15.25. Пример работы осциллографа в трехканальном варианте Реальные осциллографы обычно имеют вход не только по вертикальной, но и по горизонтальной оси. В описанном виртуальном осциллографе такой вход не предусмотрен, но в этом и нет необходимости — подобную функцию имеет виртуальный графопостроитель, описываемый далее. 1 5 . 5 . 3 . Виртуальный «плавающий» осциллограф Включение опции floating scope превращает осциллограф в «плавающий». При этом входы отключаются, а связи обозначаются пунктирными линиями. «Плавающий» осциллограф есть и как отдельный блок в составе блоков регистрирующих устройств. Он отличается от «обычного» тем, что у него отсутствуют в явном виде входы. Это упрощает построение моделей с большим числом осциллографов за счет отсутствия соединений между выходами тех или иных сигналов и входами осциллографа. Рисунок 15.26 показывает применение «плавающего» осциллографа. Здесь моделируется ограничитель, содержащий источник синусоидального сигнала и блок его ограничения, нагруженный на терминатор — эквивалент нагрузки. Под ними выведен «плавающий» осциллограф без входов. Пустив модель, можно настроить осциллограф па показ нужных сигналов. Для настройки осциллографа прежде всего надо вывести его окно, наведя на блок осциллографа курсор мыши и дважды щелкнув левой клавишей мыши. Затем надо выделить соответствующее окно осциллографа и выделить сигнал, который должен быть в нем представлен. Для выделения окна надо подвести к нему курсор мыши и щелкнуть один раз левой клавишей мыши. Выделенное окно обрамляется рамкой из жирной синей линии. На рис. 15.26 это показано для нижнего окна «плавающего» осциллографа. 606
15.5. Виртуальные
D it* a Si
регистраторы
%, Ча>
Snow signals matching: Close
Help
Рис. 15.26. Пример работы с «плавающим» осциллографом Для выделения сигнала надо нажать кнопку Signal Selection (она последняя в панели инструментов осциллографа — рис. 15.24). Можно также исполнить команду с тем же названием из контекстного меню правой клавший мыши. Появится окно селекции сигнала, показанное на рис. 15.25 снизу. Левая часть окна дает схему (иерархию) выходов, а правая список выходов на текущей ветви схемы (в данном случае она одна, а выходов два). Указав нужный выход, надо закрыть окно, активизируя кнопку Close. 1 5 . 5 . 4 . Виртуальный графопостроитель XY Graph Графопостроитель — второе по распространенности устройство после осциллографа. В отличие от осциллографа виртуальный графопостроитель имеет входы по осям X и Y, что позволяет строить графики функций в полярной системе координат, фигуры Лиссажу, фазовые портреты и т. д. — см. рис. 15.27. На рис. 15.27 представлен пример построения фигур Лиссажу — они образуются при подаче на вход графопостроителя двух синусоидальных сигналов с частотами 2 и 3 Гц. На рисунке показано также окно параметров графопостроителя. Эти параметры задают масштаб представления фигуры по осям X и Y и эталонное время для синхронизации с другими устройствами. Графопостроитель можно использовать и для построения функций вида у(х) или f(t). Пример такого построения дан на рис. 15.28. Здесь строится график синусоиды, причем на вход X графопостроителя подается линейно-нарастающий сигнал времени. Он осуществляет временную развертку. Обратите внимание на установку параметра Simple Time, равного — 1. Это позволяет получать синусоиду с достаточно большим числом точек. При этом ее график получается плавным. 607
Глава 16. Блоки источников и получателей *
;?••• ,к.
.
» •>^,-. 1
ГолЬ
(
сигналов
ШШ'^-л\-:у-'::;--:у^А
-"'''.
Puc. 15.27. Применение виртуального графопостроителя фигуры Лиссажу
v
для построения
;
D
| а и ш i * ^ в ; о •••-1 • • Fto
в rXY scope, ^nask)•(w j ki)~* \ >У scop* LiBtne MATLA8 s • Erterpicttlrg ranges. .. .
ВСЕ
ЁК1 X Y Plot
Л А• / \ I 1 < 01 \ \j \ 1 \ ! \ j •0.5 \i -1 ! 5 XA10xis 15 20 1
05
ргг OK
Cancel
•
Puc. 15.28. Применение виртуального графопостроителя графика синусоиды 608
для построения
15.6. Другие блоки группы
Skins
1 5 . 5 . 5 . Д и с п л е й Display Виртуальный дисплей — устройство представления цифровой информации. Это одно из самых простых устройств. На рис. 15.2, 15.3 и 15.4 уже приводились примеры применения дисплея для отображения значений констант и векторов. Чтобы все компоненты вектора были видны, дисплей в окне Simulink растянут мышью по горизонтали (его можно растягивать и по вертикали). Окно параметров дисплея показано на рис. 15.29. В нем устанавливается формат отображения данных Format, прореживание входных данных Decimation и в тактах эталонного времени Sample time. Можно также выбрать представление вещественных данных в формате с плавающей точкой (флажок Floating point). Дисплей обеспечивает динамическое отображение данных, то есть можно наблюдать их изменение в процессе моделирования. r Dsipa ly — — —Numec ri dsipa l y of n i put values, г Parameters Format: Щ Oeamation:
Г ™ ( floatin Sampel m ti e (-1 for n ihertied): Hep l Рис. 15.29. Вывод чисел дисплеем в разных форматах На рис. 15.29 представлен вывод числа 100*pi в разных форматах. Заметим, что для этого приходится расширять блок дисплея. При использовании нескольких дисплеев они нумеруются как Display, Display I, Display2 и т. д. Опция-флажок делает дисплей «плавающим», т. е. отключает вход дисплея (соединение при этом показывается пунктирной красной линией). Параметр Decimation при значении 1 выводит все данные вектора, при значении 2 каждый второй, при 2 каждый третий элемент вектора и т. д.
15.6. Другие блоки группы Skins 1 5 . 6 . 1 . Заглушка Terminator Если в модели встречаются отключенные выводы блоков, то может наступить ошибка моделирования. Для предотвращения таких ситуаций служит специальный блок — заглушка или терминатор Terminator. Этот блок имеет только вход и чисто информационное окно параметров (рис. I5.3O). Другой пример применения этого блока дан на рис. 15.26. 1 5 . 6 . 2 . З а д а н и е в ы х о д а Out* и с о з д а н и е п о д с и с т е м ы Блок Out*, где * означает номер блока, служит для задания порта выхода в подсистемах. Напомним, что блок In* служит для создания порта входа. Рассмотрим 609
Глава 15. Блоки источников и получателей r\
сигналов
\>
| Used to "terminate" output signalsPrevents . warnings about i unconnected output ports.) OK
Cancel
Help
• Apply
Puc. 15.30. Пример применения блока терминатора модель модуляции синусоидального сигнала с частотой 10 Гц и амплитудой 1 синусоидальным сигналом с частотой 1 Гц и амплитудой 0,5 В, наложенным на постоянный уровень 1. Модель, построенная с применением математических блоков умножения и сложения, представлена на рис. 15.31. Рисунок 15.31 показывает результат моделирования и окно параметров моделирования, в котором задан режим моделирования с фиксированным шагом 0,01 и применением для моделирования метода Рунге— Кутта — решатель ode4. Приведена осциллограмма полученного амплитудно-модулированного сигнала с коэффициентом модуляции, равным 0,5. Теперь выделим часть модели, которую можно оформить в виде подсистемы. Выделение показано на рис. 15.32 и осуществляется мышью при нажатой левой клавише. Нужный блок выделяется прямоугольником с пунктирными черными линиями.
• »' Ы (
e i • • [F^S
" 3 : ta ф ;"; I ftra -if *
ced Beal-TimeWoikshop| SolvmjWork;Pucel/0| S(riUaticn tirrte _ So l p lime: flO ;i ,.i - | ••,. Solvei opto i ns J Type' j Fxied-step _^j ode4 IRungeKulla)
Fn i ed step size; 01
Mode:
Output opto i ns d 0Г
' | CencdJ _ ^ J * J
Puc. 15.31. Модель осуществления амплитудной 610
»c-:* |
модуляции
15.6. Другие блоки группы
Skins
Для создания подсистемы достаточно исполнить команду Create Subsystem \J (создать подсистему) в позиции Edit > X S i n e Wave меню. Выделенная часть окажется преобразованной в блок подсистемы с имеProduct Scope нем Subsistem, имеющий два входа и один выход (рис. 15.33). Двойной щел4 I V/ чок левой клавиши мыши, при курсоре, Sine Wave 1 t установленном на блоке, выводит окно J 1 подмодели. Оно, как и окно параметров блока Outl и осциллограмма работы Constant этой системы с подсистемой, показаны на рис. 15.33. Рис. 15.32. Выделение будущей В окне параметров подсистемы устаподсистемы навливается номер порта и значение сигнала перед началом моделирования. Как нетрудно заметить, в данном случае блоки Inl, In2 и Outl подсистемы были созданы автоматически. Разумеется, можно модернизировать или создавать заново подсистему и редактировать ее точно так же, как и основную модель. При записи модели с подсистемой она записывается вместе с последней. 1 5 . 6 . 1 . Блок остановки моделирования Stop Блок остановки моделирования обеспечивает прерывание моделирования и его остановку, если на его входе действует сигнал, не равный нулю. Работу блока поясняет рис. 15.34. На вход блока подан сигнал со значением 0. Поэтому моделирование идет непрерывно и осциллограф показывает линейно нарастающее значение текущего времени.
я
JDJi
^ га P P P * I I ; B
:
| Provide г п outoyt oort for a sub*y«tem or model. Tie XXapJt when ! diasbieci' and 'InSid outpul' parameter only вк>1у to cord*tonaiy i executed subsystems. Wfren a candfionaily «cecuted subsystem is i disebted. the ogtsul is ether betd at its ; ^« vsiue cr set to the 'hiti» [output'. The 'Initial outotrt'parameter can be specified asfrie е ш й у п I 0. in wbicb case the initial outout a equal to the oaput of the block j feeding the ompart.
ШШШШМ Рас. 15.33. Модель с подсистемой 611
Глава 15. Блоки источников и получателей
i,:
--.^ч
.
•
сигналов
••:•.••:•
; S t o p s i m u t a f t i o n w h e n i n p u t is n o n - z e r o .
O K
Cancel
Help
я.|р|.><.|
]
Puc. 15.34. Применение блока остановки
моделирования
Теперь измените константу 0 на 1. Блок Stop при этом запретит моделирование. Поэтому в данном случае осциллограф уже не будет фиксировать нарастание времени — моделирование прерывается в самом начале. Для остановки моделирования в заданный момент времени нужно сформировать в этот момент отличный от нуля сигнал, а в остальное время обеспечить нулевой сигнал на входе блока Stop. Никаких параметров в этом блоке нет — его окно параметров (см. рис. 15.34) чисто информационное. 1 5 . 6 . 2 . Б л о к с о х р а н е н и я д а н н ы х в ф а й л е То File Блоки сохранения данных в файле То File записывают входные данные в виде матриц соответствующего формата — (5.1), такого же, как для блока From File. На каждом такте моделирования формируется колонка, содержащая время такта П mysn i.mat и входные данные. Блок То File записы1 V вает полученную матрицу в файл с ука> занным именем (по умолчанию untit' То File led.mat). Пример применения и окно Write time and input to specified MAT file in row format. Time is inraw1 параметров блока показаны на Parameters рис. 15.35. В данном случае в файл т у Filename: sin.mat записываются отсчеты синусоиJnysrn mat Vanable name: дального сигнала. Файл (если не задан jans иной путь) располагается в папке Decimation: WORK системы MATLAB. |i В окне параметров блока То File заSampletime(-1 for inhtedted); дается имя файла, максимальное число R строк, разрядность в десятичных долях OK Cancel времени и в тактах эталонное время Help (чтобы зафиксировать состояние системы при t = 0, это время по умолчанию Puc. 15.35. Пример применения блока To File задается равным —1). 612
15.6. Другие блоки группы
Skins
\ Read tm i e and output values from the first matrxi in the specifed MAT file. ] The matrxi must contain tm i e values in row one. Mdrtiona! raws ; correspond to output ee l ments, interpolates between cou l mns. г Parameters '
Rename:
;
jmysm mat
:
• Sample time:
Help
OK
Puc. 15.36. Пример считывания файла mysin.mat Рисунок 15.36 показывает применение блока From File для считывания созданного ранее файла mysin.mat. После считывания с помощью осциллографа строится график синусоиды. 1 5 . 6 . 3 . Блок сохранения данных в рабочем пространстве То Workspace Блок То Workspace записывает указанную матрицу (но без строки отсчетов времени) в рабочее пространство. Пример применения блока представлен на рис. 15.37. В данном случае в рабочее пространство записывается вектор rs пилообразного сигнала, создаваемого блоком Repeat Sequence. Обратите внимание на
Workspace -
-
-
Wrti*input to spedfed aray or efruciura n MATUBe'nain wak*peoe. aatd is not available until the emulation is s topoec CO Data • pa-ьпмЛегя able name: la
;
Jm« 0«а w r i t s to last: •
F arrattesi •
SenVtotkne {-Ifor fm«*ed);
Ssv z
[
-5ГП
e™. |
Heo l
^
l
|
•
ф.Start j Ready
Puc. 15.37. Пример применения блока То Workspace 613
Глава 15. Блоки источников и получателей
сигналов
появление в окне браузера рабочего пространства (оно видно слева) вектора rs после пуска примера. На рис. 15.37 показано также окно параметров блока То Workspace. Здесь помимо уже описанных параметров задается формат записи: структура Structure, структура со временем Structure with time и массив Array. Напоминаем, что для считывания данных рабочего пространства служит рассмотренный выше блок From Workspace.
1 5 . 7 . Б и б л и о т е к а Signal Routing 1 5 . 7 . 1 . Обзор библиотеки Signal Routing Окно библиотеки Signal Routing представлено на рис. 15.38. Ранее большинство блоков этой библиотеки входило в библиотеку Signal&Systems расширения Simulink 4. В Simulink 5 последняя уже отсутствует. library: «mubik/Sonal Библиотека содержит два раздела: File Edit View Fc Help Signal Routing и Signal Storage & Access. Signal Routing В раздел Signal Routing входят следующие блоки: I i 1 J • Bus Creator — создание шины; B u s B u s M u x • Bus Selector — селекция сигналов шины; • Mux — мультиплексирование ряда входов; • Dmux — демультиплексирование сигналов шины; • Manual Switch — ручной переключатель сигналов; • Multiport Switch — многопортовый переключатель сигналов; • Merge — объединение сигналов в вектор; • Switch — ручной переключатель сигналов; • Selector — селектор элементов из векторов или матриц; • From — прием сигнала от блока Goto; • Goto Tag Visibility — блок признака видимости сигнала; • Goto — организация «беспроводного» передатчика данных;
>,,,,,
>D
Men» H
al Switch
MUtipon Switch
Get: Tag Vijicility Signal Storage & A c c e s s А
>
—"
А.
Data Slzie .'•/•us
Рис. 15.38. Окно с блоками библиотеки
В разделе Signal Storage & Access имеются следующие блоки: • Data Store Memory — запись данных с заданным именем в память; • Data Store Read — считывание данных с заданным именем; • Data Store Write — запись значений сигналов с заданным именем. 614
15.7. Библиотека Signal Routing 15.7.2. Блок создания шины Bus Creator Блок создания шины Bus Creator служит для объединения двух и более сигналов самого различного вида в одну шину. Применение этого блока иллюстрирует рис. 15.39. Здесь два сигнала (синусоидальный и прямоугольные импульсы) объединены в одну шину и оба этих сигнала показывает осциллограф Scope. Окно параметров блока Bus Creator показано на рис. 15.40. Работа с ним вполне очевидна.
1
J—•
-3 Terminate
Рис. 15.39. Пример работы с шиной дм;:те,ча р В us Creator : ; Used to gioup signals into a single bus signal (or graphical modeling convenience. Individual signals within (he bus can be estiacted using the Bus Selector block. Hierachy can be defined in the bus signal by cascading Bus Creator blocks. Г* Parameters [inherit bus signal names from input ports Wurnbef of inputs: J 2 Signals in bus: signal1 signal 2
> . , •: ; ;••• '•-• •• : j ' : К ? г > \ J
Puc. 15.40. Окно параметров блока Bus Creator
615
Глава 15. Блоки источников и получателей
сигналов
1 5 . 7 . 3 . Б л о к ш и н н о г о с е л е к т о р а Bus S e l e c t o r
Блок шинного селектора Bus Selector обеспечивает выбор заданных сигналов из нескольких. В примере, приведенном на рис. 15.39, блок шинного селектора выделяет оба сигнала — один из них направляется на осциллограф Scope 1, а другой поглощается заглушкой. В итоге на этом осциллографе виден лишь один из сигналов — синусоидальный. Окно параметров шинного селектора представлено на рис. 15.41. Окно состоит из двух частей: в левой имеется ^h: bfo* access irpjt home Mu* o>fiuiSee lctoi bo lck. Tte e ldfelbc»shows the jignali n i h Ie Select button lo select the putpui signals. The right ЫЬок show? the selection» Ute the Up, Down, a Remove список всех входных сигналов, а в праi to reoiijer the ttltclions. Check ^u^ed output' to muMptax ihe output '' ' вой — выбранных (селектированных) сигналов. В данном случае выбраны все сигналы, но можно выбрать любые. Для выбора того или иного сигнала надо выделить его в левом окне и нажать кнопку S e l e c t » . Флажок Muxed output позволяет наблюдать описание сигналов на выходе селектора. Кнопка Up позволяет переносить вверх выделенный в правой части окна сигнал и, таким образом, менять порядок сигналов. Кнопка Remove удаляет выделенный сигнал из окна выбранных, а Рис. 15.41. Окно установки кнопка Refresh очищает окно выбранпараметров шинного селектора ных сигналов.
15.7.4. Блок объединения сигналов Merge Блок Merge служит для объединения двух и более векторных сигналов в один векторный сигнал. Пример применения блока для объединения обрезанного одного вектора с другим вектором представлен на рис. 15.42. Так же показано окно установки параметров блока Merge. Можно задать: • число входов Number if inputs; • начальное значение выходного сигнала Initial output (если параметр не задан, возвращается сигнал, заданный последним); • разрешение на различную размерность входных портов Allow unequal port width; • смещение входного сигнала Input Port offset. 616
« г 2,- | и»мг (
•Merge
Metge
-
Merge the input signals into a single output signal whose initial vaiue is ispecified by the Initial output" parameter, tf "Initial output" is empty, the Merge block outputs the initial output of one of its driving blocks. • Parameters Number of inputs:
Initial output: I» ~~ p" Ao l w unequal port wd i ths input pot offsets: Hep l Рис. 15.42. Применение блока Merge для объединения двух векторов
15.7. Библиотека Signal
Routing
С помощью параметра Input Port offset можно задавать расположение входного сигнала в выходном векторе. Еще один пример mergedemo представлен на рис. 15.43. Здесь блок Merge создает сигнал, объединяющий поочередные вырезки синусоидального сигнала и пилообразного сигнала.
Демонстрация работы блока Merge
Merge the «tput signals into a single output signal whose irdia value is
specftedbythe hft»l output'parameter. If Тпйя! oufouf is empty, the Merge b o o t outputs the mrtia! OLAput of one erf its driving Ьйскя ••Parameters Number of inputs:
|~ ^Ulow unequal port widths
dy
"
_
'
jabie5tepC4screte
Puc. 15.43. Применение блока Merge для объединения сигналов
15.7.5. Блок мультиплексирования Мих Блок Мих предназначен для мультиплексирования (объединения) сигналов. Их действие демонстрирует рис. 15.44. Обратите внимание на то, что соединение, подключенное к земле, эквивалентно соединению с константой с нулевым значением. Цифровой индикатор показывает, что на выходе блока Мих в данном случае два сигнала. В окне параметров блока Мих (рис. 15.44) устанавливается число входов и один из трех вариантов изображения блока. 1 5 . 7 . 6 . Блок демультиплексирования Demux Обратная задача — разделение сигналов решается блоком демультиплексирования Demux. Применение этого блока также показано на рис. 15.44. Там же показано окно параметров блока демультиплексирования. 1 5 . 7 . 7 . Блоки для записи и считывания данных Data Store Memory, Data Store Write и Data Store Read Данные в моделях имеют различную судьбу. Некоторые данные «доживают» до конца моделирования, тогда как другие могут появиться только на короткое время, чтобы изменить состояние того или иного блока системы. Simulink имеет
617
Глава 15. Блоки источников и получателей
сигналов
t *
5рЙ either (a) vector Bignafe rrto ясяая or amallw vectors. tw|>) bus wgnals produced by the Мих btock into ttietr солййивг* scalar, vector, гогйгы signals. Check 'Bus Selection Mode'tospte bus signals.
Puc. 15.44. Применение блока Мих специальные средства для запоминания нужных данных и сохранения их до конца моделирования. Они реализованы тремя блоками. Блок Data Store Memory служит для записи поименованных данных в память, т. е. он по существу резервирует под данные память. Можно записывать (Data Store Write) и считывать (Data Store Read) поименованные данные. Рисунок 5.45 показывает применение этих блоков для записи в память сигнала с постепенно нарастающей частотой и затем считывания его и отображения осциллографом. На рис. 15.45 показаны также окна параметров блоков записи данных в память и считывания их из памяти. Параметры блоков вполне очевидны. Рисунок 15.46 показывает окно параметров блока Data Store Memory. В этом блоке предусмотрена установка трех параметров: Data store name — задает имя сохраняемых данных (например, А для записи переменной А); Initial value — задает начальное значение (по умолчанию 0) и формат сохраняемых данных (к примеру, если этот параметр задан как [[1 2] [3 4]], то это означает, что он является матрицей размера 2 х 2); Interpret vector parameters as 1-D — опция, задающая интерпретацию вектора параметров данных как одномерного вектора. Все три указанных блока используются всегда только совместно. При использовании блоков Data Store Write и Data Store Read обязательно надо учитывать тот формат данных, который задан параметрами блока Data Store Memory- Блок Data Store Memory может обслуживать несколько блоков Data Store Write и Data Store Read. Его расположение в диаграмме модели задает область видимости сохраняемых данных (в частности переменных). Если блок Data Store Memory размещен в диаграмме верхнего уровня, то все ее данные будут «видимы», т. е. доступными для сохранения или считывания. Если же блок Data Store Memory расположен в подмодели, то доступными будут данные только этой подмодели. 618
15.7. Библиотека Signal Routing
Data store memory Ыоск: urrtitted/Data Stoe Memo
Data stote memofy block: t^iitled/Data Sioie Memory
Data store read blocks:
Data stoie write blocks-
Рис. 15.45. Применение блоков задания области памяти, записи в нее данных и их считывания
.1 Ыоск Parameters: Data Data Store Memory Define a memory region for use by the Data Store Read and Data Store Write blocks. All Read and V/rite blocks that are in the current (sub)system level or below and have the same data store name will be able to fead from or write to this block. Parameters Data store name:
Data store writetW) and read(R) blocks:
Initial value: RTV/storage class: ExportedGlobal mportedExtern rnportedExtemPointer Interpret vector parameters as 1 -D
Puc. 15.46. Окно параметров блока Data Store Memory
619
Глава 15. Блоки источников и получателей
сигналов
15.7.8. Блоки «беспроводной» связи From, Goto и Goto Tag Visibility Блоки From (Принять), Goto (Передать) и Goto Tag Visibility (Передать с учетом видимости) служат для организации обмена данными между блоками S-модели с учетом видимости данных. Они применяются для упрощения построения моделей. Применение данных блоков иллюстрирует рис. 15.47. Там же показаны окна настройки этих блоков. D juSH3j I Used in conjunction wilh Goto and From зПез to defir* the viseiky of : scoped tags, Fcr exarrple, rf ihts block re*des in a juosyiten fty root '•• uyaem) celled MYSYS.trienthetagisvisibfetc Fron sites that reside tn • 4YSYS or in wbsyrtem* o< MYSYS.
Send signals to From btocki that have the specified tag. il tag visibility is 'reaped', then a Goto T ag Viability block must be used to define the visibly of the lag The block icon displays the selected tag name {local tags are enclosed in backets, [\ and scoped tag namei are enclosed in biaces, 0).
Fo ir Recevie sg inasl rfom the Goo t bolck cw ida hp ea lg re tfe ith lth geIfs d e n f i e d a s s ' c o p e d " n i t h e G o o t b o l c o k T , a h i Q e V n s i b W i a G o enud sesid en fieseelthcetedvs itab igtilyna em rfethee tae A tlerairU ' pdate Daigra cb io pa lyto » td he (o lc agd til.otasg esd and so lped tag twnei are encolsedJn i. braces. Paa iTe ie lrs . Goo t tag: A Goo t source; ute il d/Goto у block must •n', the Ыоск brackets. [J,
SeiecUag»!
OK | Caned Рис. 15.47. Применение блоков «беспроводной» связи В помощью блока Goto можно создать «беспроводной» передатчик данных, совместимых с этим блоком и имеющих имя (обычно в виде буквы). Один или ряд блоков From с таким же именем могут принимать данные от блока Goto, хотя прямых соединений между ними и блоком Goto нет. Окно блока помимо параметра Tag (имени сигнала) имеет параметр Tag Visibility (признак видимости), который может принимать одно из трех значений: • local — передача сигнала в пределах данной подсистемы (имя сигнала задается в квадратных скобках, например [А]); • scoped — передача сигнала в пределах данной подсистемы и подсистем более низкого уровня (имя сигнала задается в фигурных скобках, например {А}); • global — передача сигнала в пределах всей модели (имя сигнала непосредственно, например А). В окне параметров блока From устанавливается единственный параметр — имя сигнала. Для этого служит список, управляемый кнопкой Select tag>>. От одного блока Goto может работать множество блоков From. Правила видимости сигналов в блоках From те же, что и у блоков Goto. Блок Goto Tag Visibility служит для установки видимости в пределах модели или подсистемы, на которую распространяется область видимости. В окне его параметров устанавливается только имя сигнала. 620
15.7. Библиотека Signal
Routing
1 5 . 7 . 9 . Ручной п е р е к л ю ч а т е л ь с и г н а л о в Manual Switch Ручной переключатель сигналов служит для подключения одного из двух входных сигналов на выход при ручном управлении — двойном щелчке левой клавиши мыши на пиктограмме переключателя. Переключение возможно как в процессе моделирования, так и при его остановке. Окна параметров блок не имеет. Пример применения блока ручного переключателя дан на рис. 15.48. Показано два варианта положения переключателя, обеспечивающего переключение сигналов — прямоугольных импульсов и синусоидального.
ля Gerefato"
V
3ine Wave
Manual Switch Scop«
Generator 1 Manual Swtc ih. 1 Sine Wave 1
У Scope
Рис. 15.48. Применение ручного переключателя сигналов 1 5 . 7 . 1 0 . У п р а в л я е м ы й п е р е к л ю ч а т е л ь с и г н а л о в Switch Управляемый переключатель Switch подобен ручному, но управляется управляющим сигналом (рис. 15.49). Здесь показано два варианта применения переключателя при сигнале, превышающем нулевой порог и меньшем его. При этом переключатель передает на выход любо импульсный сигнал, либо синусоидальный сигнал. Окно параметров переключателя, показанное на рис. 15.50, позволяет из списка критериев (на рисунке он открыт) переключения задать нужный критерий и численное значение порога переключения. Опция Show additional parameter расширяет окно и позволяет установить ряд дополнительных параметров: установку идентичности всех входных данных, установку типа входных данных, способ округления чисел в данных, корректность ограничения целочисленных данных и фиксацию прохождения сигналов через нуль. Блок Switch удобно использовать для создания вырезок из сигнала (рис. 15.51) или сигналов, состоящих из сшитых кусков различных сигналов. Для переключения сигналов при этом используется управляющий сигнал в виде прямоугольных импульсов. 621
Глава 15. Блоки источников и получателей сигналов
[Ш 1
m
Pulss Generator! | 1
4»>__, 4_
I |
Switch
Seeps
cnstant
-t
1
Constant!
—•-
I
I
i—ьSwitoh
Scop«1
л V £ ine vVavsi
l\ Sins Wave ,-lalxl
И
!<э ш !Гр
IIP
PMC. 15.49. Применение управляемого переключателя
сигналов
Ж Swtich i Pass through n i put 1 when n i put 2 satisfies the see l cted criterion; [•otherwsie, pass through n i put 3. The n i puts are numbered top to botom ! (pr left to tight). Tne n i put 1 pass-through criteria are n i put 2 greaterthan or equal, greaterthan, or not equatio the threshhod l . The first and third in i put ports are data ports, and the second n i put port is the contra! port. :• Parameters
• Criteria for passing first input: ju2 >- Threshold Threshold:
Puc. 15.50. Окно установки параметров блока Switch 1 5 . 7 . 1 1 . М н о г о п о р т о в ы й п е р е к л ю ч а т е л ь с и г н а л о в Multiport Switch Многопортовый переключатель Multiport Switch обеспечивает коммутацию одного из ряда сигналов на выход под действием управляющего сигнала, указывающего номер входного порта (I, 2, 3 и т. д.). Переключение возможно в динамике процесса моделирования, что позволяет формировать сложные последовательности сигналов. Наглядный пример применения переключателя Multiport Switch представлен на рис. 15.52. С помощью блоков Step формируется сигнал, имеющий значения 1, 2 и 3 на отрезках времени 5 при общем времени 15. Этот сигнал подается на управляющий вход и обеспечивает последовательную передачу на выход блока сигналов прямоугольной формы, синусоиды и пилы.
622
15.7. Библиотека Signal
Routing
...Iff I x|
•m
Sdveij Woikspacel/Oj Diagncsticsj .a I S tart time: f o ^
Stop ttme: fl*O0
г Switch
-
• •• -••
-
-
I otherwise, oass through trput 3 The inputs are numbered top Ю britori ; ! {cleft io right} The r o u t t pass-tfrajgh catena ar»!rput 2 greater than § i w eQjaf.gieelerthan.ornot eguattctriethreshhdc. The first and third I i irout ports are data ports, ana the second no Lit a?ri is *!>д :o~(t^>: port, ;
; Threshold
'• f
OK
Caned
Help
Apply
...
Show adcfcionaipar
OK
Cancef
. 15.51. Применение блока Switch для формирования пачек синусоиды
D ' с£ О Ш • *toВ £;,!
|f>™>!
ill:
U 3E
'
ВГНЯИИИВ
-: В*"
1 ^
...jVj.i. .... .
J
; Pass through tl-« irput agnSs carespon*ng tc the treated vau ie c* t («Ы r * d . The mods * « wmbersd top ic bottoiMoi IsJtto^ghtl ТЪе ffr J п р и pert is the control porf. Tlie othef input ports are data ports : Parameters
•.
i Nurnber of inputs:
Shew addtl^tid parai
Puc. 15.52. Применение блока Multiport Switch для переключения трех сигналов Окно установки параметров блока Multiport Switch в упрощенном виде также представлено на рис. 15.52. В нем устанавливается только число входов (портов) блока. Задание опции Show additional parameter расширяет окно (рис. 15.53) и позволяет задать ряд дополнительных параметров. Назначение дополнительных параметров указывалось при описании блока Switch. 623
Глава 15. Блоки источников и получателей
сигналов
Nock Parameters Muttiport Switch г Mufti-Port Switch
_____—.
[ Pass through the input signals correspandirg to the tiuncated value of the J | First input. The inputs are numbered top to bottom (or left to right). The First I input port is the control port. The otherinpu: ports are data ports. - Parameters Number of inputs: F " f!7 h———- Show
ameters
j
Г" Use zero-based indexing
.
Г" Require all data port inputs to have same data type
...
d d
Output data t>pe mode: | Inherit vis internal rule Round integer calculations toward; JRoor Г7 Saturate on integer overRow Sample time {-1 for inherited):
рг~ J. Cancel
Hep l
Puc. 15.53. Окно установки параметров блока Muliiport Switch в расширенном варианте 15.7.12. Селектор Selector Блок селектора Selector предназначен для выборки из векторов или матриц заданных элементов. Три простых его применения представлены на рис. 15.54. Там же показаны окна задания параметров этого блока для первого и третьего примеров. Нетрудно увидеть, что изображение блока зависит от того, какой выбор элементов задан. Re
Edit
Sew
йяУавоп
Faffnat
Tods
Help
:
r SeJ»dor [ SeJea or re-order the specified dements of an input vector о I y-u(e)efT»n{9} i input is a vector. : y-u^wj.cotjrnnsj if input is a matrK. • Tbe elements (E), «owe (R), and ccAjmns fC)may b« soecrfie : t w c k s daog of through an external лр<Л pert.
; Irtpul Type: j Vector
"
i Smjic*of efwrtent ndices. jini
3
~ ~ 3
I Sements f-lforalletements!-
ИрУ port w<±h:
Нф sro*- the specifed eternenis of an input vector or matrix. . . J ! i inpu is в vector. i v..*.columns) t input is а гшйк. The elements jE). «ws i^). eno cobrf>ns О may be -jpecited eihef m the though an eadem^ input peri.
J Scurce of row mdces: Ш й е ^ з ! Source of column i n d c « ; I Lo.emai
Ready
Puc. 15.54. Примеры применения блока селектора Selector 624
15.8. Библиотека атрибутов сигналов Signal
Attribute
Выбор сигнала может быть внутренним (internal) или внешним (external). В последнем случае у блока появляются выводы для управляющих сигналов (второй и третий примеры рис. 15.54).
15.8. Библиотека атрибутов сигналов Signal Attribute 1 5 . 8 . 1 . Состав библиотеки атрибутов сигналов Библиотека атрибутов сигналов в пакете Simulink 5 содержит всего 6 блоков, разбитых на два раздела: Signal Attribute Manipulation и Signal Attribute Detection. Окно этого раздела библиотеки показано на рис. 15.55. П Library: «mulmk/Siffnal File Edit View Fcirma; Help Signal Attribute Manipulation
Data Type Conv
Rale Transition
Signal Attribute Detection
W:0, Ts:iO 0), CO, D:0 Sign9l Sp-eaficsSicn
vVidth
Puc. 15.55. Окно библиотеки атрибутов сигналов 1 5 . 8 . 2 . Блок преобразования типов сигналов Data Type Conversion Блок Data Type Conversion служит для преобразования типов данных. Для векторов и матриц такое преобразование может иметь единственный заданный тип. Вполне очевидные примеры применения этого блока представлены на рис. 15.56. Там же дано окно установки параметров блока. В окне параметров блока из списка (на рис. 15.56 он открыт) можно выбрать тип данных для выхода блока. Кроме того, можно задать опцию Saturate on integer overflow, при которой подавляется переполнение сигналов целочисленного типа. *i
Data Type Converso in
Convert юри! sgna! to specified data type.
—з
Puc. 15.56 Применение блока Data Type Conversion 625
Глава 15. Блоки источников и получателей сигналов 1 5 . 8 . 3 . У с т а н о в к а н а ч а л ь н о г о з н а ч е н и я с и г н а л а 1С Блок 1С служит для задания начального значения сигнала (Initial Condition). Применение блок поясняет рис. 15.57. Используется синусоидальный сигнал с естественным начальным значением, равным 0, который с помощью блока 1С сделан равным 1. Последующие значения сигнала не изменяются. В окне установки параметров блока устанавливается начальное значение сигнала и параметр Sample time.
V/
>1;1Ч >
г Initial Condition | Initial condition for signal r~ Parameter I Initial value: 1 Sample time (-1 for inherited): I I-1 OK
Cancel
Рис. 15.57. Применение блока 1С 1 5 . 8 . 4 . Б л о к с о г л а с о в а н и я д и с к р е т н ы х з н а ч е н и й Rate T r a n s i t i o n Блок согласования дискретных значений Rate Transition используется для согласования дискретных блоков, имеющих разные периоды квантования. Окно параметров этого блока представлено на рис. 15.58.
г
0.12Sz*D 1 1 1D33
U I 1 1
•
31
z-Ч K2z*0.775S jliCf€t€ Fl
T
Transfer Pen г Rate_Transition {jnask} 0ink)
— —-
I Speedy the data transfer mechanism between tworatesof a multirate I system. The default conftguration provides safe and deterministic data I transfer, however, configuration allows for determinism and data integrity I to be compromised in favor of minimum delay and code efficiency. r Parameters
•
- —
•- -
j Jv^ Ensure data integrity during data transfer I ]v Ensure deterministic data transfer (maximum delay) : Data rate transition: Ir«ff |||{у'И>>ИЦй|
OK
J
Caned
Ш Ш Я
Help
т
Apply
Puc. 15.58 БЛОК Rate Transition и окно его параметров
626
15.8. Библиотека атрибутов сигналов Signal Attribute В окне настроек можно установить опции гарантированной целостности данных и детерминированной передачи их. Наиболее важны установки Data rate transition (режим передачи данных). Возможна одна из установок: • Slow to fast — передача от медленного блока к быстрому; • Fast to slow — передача от быстрого блока к медленному. Есть также опция задания начального значения Initial condition. 1 5 . 8 . 5 . Блок спецификации сигнала Signal Specification Блок спецификации сигнала Signal Specification служит для распознавания сигналов на его входе и выдачи спецификации сигнала. Пример применения блока дан на рис. 15.59. В окне параметров блока устанавливается размерность сигнала Dimension в виде [т п] или —1 для любой размерности, эталонное время Sample time, тип данных Data Type, тип выходных данных Output data type, тип сигнала Signal type и режим Simpling Mode.
b gi oin иon girelS p e dlMeat m C a stntS -•onstan,
(
'.'••'•"•
. :
I'.1-
-"'••.
:l.'.,".'.''..::
>
•1 S p e c i f i c a t i o n
| S p e c i f / a t t r i b u t e s of a s i g n a l line.
г Paranieters ~~"— Dwneneions <-1 • aiherit): •; i Sample йпте (-1 fof inherited}: IF"
Datatype: lauto j Signal tree: [auto | Sampling mode: [Jui
Cancel
Hep l
Рис. 15.59. Применение блока Signal Specification 1 5 . 8 . 6 . Блок проверки сигналов Probe Блок Probe осуществляет более детальную проверку сигналов, чем блок Signal Specification (рис. 15.60). На этом рисунке представлены также окна параметров источника синусоидального сигнала и блока Probe. При возникновении ошибки с выходов блока Probe считываются значения тех параметров, которые указаны в окнах установки их параметров. Их можно использовать для оценки ситуаций, вызывающих ошибки и их устранения в ходе моделирования. Этот блок имеет следующие параметры: • Probe width — проверка длительности сигнала; • Probe Simple time — проверка эталонного времени; 627
Глава 15. Блоки источников и получателей
сигналов
• Probe Complex Signal — проверка сигнала на принадлежность к комплексным числам (возвращает 1, если сигнал представлен в комплексном виде, и О в противном случае); • Probe signal dimension — проверка размерности сигнала. J
— ьр
1
1
•1
П Ciiclay
1
Probe afeiefor its width, sampe l time, compe lx sg i nal or dm i enso i n»,. г Parameters
p
:
~™—Г7~~~~~~~™~~ 7
Probe width
| Г" Probe sample time | f~ РюЬе complex signal } !• Probe signal dimensions
Cancel .
Hep l
Рис. 15.60. Применение блока Signal Specification Контролируются те параметры, для которых установлены флажки. Числом отмеченных флажков задается число выходов блока. 1 5 . 8 . 7 . Блок вычисления размера сигнала Width Для вычисления полного размера (длины) сигнала используется блок Width. Примеры применения его и окно установки параметров показаны на рис. 15.61. При установке расширенного окна можно устанавливать тип выходного сигнала с помощью двух списков.
1 •—
1
•
I г
язиГ1 гг
•- 1
- ,
> •
Wiotn! ».
Width
:
Output the width of the input signal, using the specified output data type.
' i a i h
-1
• Parameters Show addrtton^ parameters —
Display 1 i
^ I
«I
Output data type: [Choose intrinsic data type Output data t>pe: |double
OK
Cancel
d Help
Ямс. 15.61. Применение блока Signal Specification
628
Apply
Глава 16. Математические блоки 1 6 . 1 . Математическая библиотека Math 1 6 . 1 . 1 . Обзор библиотеки Math Большие возможности в моделировании различных систем предоставляет библиотека математических блоков Math. Окно библиотеки Math показано на Ffc Edit View Help рис. 16.1. Библиотека математических блоков Math Operations в Simulink 5 разбита на 4 раздела: M X • •
Math Operations — математические операции; Vector Operations — векторные операции; Logic — логические операции; Complex Vector Conversion — преобразование векторов с комплексными элементами.
Ввиду очевидности англоязычных названий математических блоков в перечислении их нет особого смысла. Возможность задания разнообразных математических блоков с настраиваемыми свойствами имеет большое значение для выполнения прозрачного для пользователя математического моделирования как простых, так и сложных устройств и систем. В этом заключается одно из главных достоинств пакета Simulink.
> 1
> mm
flow
F
Gs,n
l:n
San i '™
Pur,ar=n funaior
al
' 1(2) = 0• Vector Operations HcizCgt
1Л - > Y
l->
YiE!
• D O
Logic O p e r a ! i o n s
AND ВХтье
>
AN С
Complex Vector Conversions II-V
N Cow
> -
\
:
S
рис. 16.1. Окно библиотеки математических блоков
1 6 . 1 . 2 . Блоки выполнения арифметических операций К числу наиболее простых математических блоков относятся блоки арифметических операций: вычисления абсолютного значения числа Abs, знака числа Sign, округления Rounding Function, скалярного произведения Dot Product, обычного произведения Product, а также суммы Sum. Рисунок 16.2 показывает применение ряда из этих блоков. Там же даны окна установки параметров для двух из блоков. Из этих примеров полезно особо отметить применение блока Abs для моделирования двухполупериодного выпрямления синусоидального сигнала и блока Sign для формирования меандра из синусоиды. Блок Product наряду с умножением скалярных сигналов может использоваться и для вычисления произведения векторов (пример на рис. 16.2) и матриц. В окне параметров этого блока можно задать число его входов, т. е. блок можно использовать и при числе сомножителей более 2. 629
Глава 16. Математические
блоки
Я, ™4*.
1 Function: [floor i Sample lime (-1 forhherted): IF
1
OK
Cancei
]
ЦеЬ
1
1
Рис. 16.2. Примеры применения блоков арифметических операций Блок функций округления Rounding Function позволяет в окне установки параметров выбрать из списка одну из 4 функций округления: • floor — до ближайшего меньшего целого; • ceil — до ближайшего большего целого; • round — до ближайшего целого; • fix — до целого, полученного отбрасыванием целой части. При векторном и матричном сигналах блок обеспечивает округление поэлементно. Могут использоваться скалярные и комплексные сигналы. Это относится и к блоку суммирования, примеры применения которого представлены на рис. 16.3. Обратите внимание на то, что в окне настройки блока сложения/вычитания можно установить вид представления блока (круглый или квадратный) и число входов с выполняемыми по ним операциями. Число входов и операции задаются шаблоном List of sign. Например, шаблон |++ означает, что блок имеет два суммирующих входа, а |+-+ — что он имеет три входа, причем средний вычитающий, а крайние суммирующие. Блок Product (Умножение) предназначен не только для умножения, но и деления. При этом операции задаются подобно тому, как это было описано для блока суммирования/вычитания с применением знаков умножения * или деления / в шаблоне. Для контроля знака служит блок Sign. Он возвращает —1 при отрицательном входном аргументе, 0 при нулевом входном аргументе и 1 при положительном входном аргументе. 1 6 . 1 . 3 . Блоки вычисления элементарных функций На рис. 16.4 представлены три блока, выполняющих вычисления математических функций: Math Function (Математическая функция), Trigonometric Function (Тригонометрическая функция) и Rounding Function (Функция округления). 630
16.1. Математическая библиотека Math
• г Sum
:
,.
............^.......
j Add or sutoract inputs. Specify one Ы the following; ... a)string contairwng + or-for each input port. Нот spacer between ports • (e.g. *4fo-+) • . = • • • . •• • • " I b) scalar >• 1. A value > 1 sums all inputs; 1 sums elements of a single . input vector
••Ic•oPnaram tarspe: roun-d shee list of sg i ns:
;
К p -————-Эии addSional parameters———Г" Require afi inputs to have same data type Output data type mode: J inherit via internal rule Round integer calculations toward: [poor p Saturate on integer overflow
.
.
Sample time {-1 forinherfted): I1 Cancel
Help
Apply
Puc. 16.3. Примеры применения арифметических операций E H Z H • Hathwsatc isl functo ins n icu ldn ig o igarfh imc i. exponent fofTrigonometry , power, and than ! modtu is functo i ns. When the faction has more than one argu Trigonometric ment. theand hyperbolic functions. Wh fi9ta«BuT iwnc loT iB4>ondstoth?topfortrft)nput pal, ...... f argument corresponds ie the tep {or WO «три port. ; the function n a i m w e
• • • Parameters . Functo in: Li Outpus ig i Г Sampietin
Outwit signal type: [auto Sample time {-1 for inhetited):
СОП] •eciprocai
Puc. 16.4. Примеры применения блоков вычисления элементарных функций Действие этих функций и установки их параметров достаточно очевидны. Выбор конкретной вычисляемой функции осуществляется в раскрывающемся списке. Один из них показан на рис. 16.4 в открытом состоянии. В нем имеется типовой набор элементарных функций. Аналогично в списке блока тригонометрических функций содержится полный набор тригонометрических, обратных тригонометрических, гиперболических и обратных гиперболических функций. 1 6 . 1 . 4 . Блок выполнения логических операций Logical Operation Блок Logical Operation позволяет задавать любую из известных базовых логических операций. Ввиду общеизвестности этих операций ограничимся примером 631
Глава 16. Математические блоки
[0 0 1 1]
i
Constant 1—• [0 10 1] 1 Logics Operator Constant 1
LZ 1 1
0| Z3 0| 11
[0 0 1 11 OR
Constants I—^ .sgicsl [0 1 0 1J I L О pefatof 1
I
a
I
1
| I
l
I 1|
z n
Can5tant3 Display Display 1 Block Parameters: Logical Operator - Logical Operator ——.—; Logical operators. For a single input, operators are applied across the input vector. For multiple inputs, operators are applied across the inputs. Parameters
zl
Operator: I AND Number of input ports:
F — • Show addtional parameters •
Г" Require all inputs and output to have same data type Output data type mode: (Logical {see Advanced Sim. Parameters)
^1
Sample time (-1 for irti
OK
Cancel
Help
Apply
Рис. 16.5. Пример выполнения операции AND и OR выполнения операций AND и OR, представленным на рис. 16.5. Пример формирует таблицы истинности для этих операций. На рис. 16.5 представлено также окно установки параметров логического блока. Параметрами являются тип блока (выбирается из списка) и число входов. Нетрудно заметить, что могут быть заданы следующие логические операции: AND — логическое умножение (операция И); OR — логическое сложение (операция ИЛИ); NAND — операция НЕ-И; NOR — операция НЕ-ИЛИ; XOR — операция сложения по модулю 2 (исключающее ИЛИ); NOT — операция логического отрицания (НЕ). Обратите внимание, что в приведенном примере входными данными являются векторы с логическими сигналами — логическим нулем 0 и логической единицей 1. В расширенном окне установки параметров можно задать режим вывода типа выходных данных и параметр Simple time. 1 6 . 1 . 5 . Блок выполнения побитовых логических операций Bitwise Logical Operator Для выполнения побитовых операций над данными в формате unit8, unitl6 и utit32 служит блок Bitwise Logical Operator. Пример его применения и окно установки параметров блока показаны на рис. 6.6. 632
16.1. Математическая библиотека Math -И Bitwise Logical Operator
*l
- BitwiseOpetalor (mask) 0ink)
Perform a bitwise operation on uintS, uintiG or uint32 Input port data with values from the Second operand parameter. Hex values can be entered as strings, e.g., ТОЮ". Parameters Bitwise operator: J x O R Second operand: A N D OR
LL
SHIFT SHIFT NOT -
OK
LEFT RIGHT ^
—
••i
•••• —
*
Рис. 16.6. Пример выполнения побитовой операции XOR
16.1.6.
БЛОК
выполнения операций по таблице истинности
Combinatorial Logic БЛОК Combinatorial Logic служит для реализации логических операций по заданной таблице истинности, широко применяемой в теории автоматов. Таблица истинности это список возможных логических состояний блока. Число ее строк г = 2е, где с — число входных сигналов и (при числе входных сигналов m = 2 имеем 4 строки). Индекс каждой строки определяется входными сигналами: rjndex = I + u(m)*2° + u(m - l)*2' + ... + u ( l ) * 2 m H . Ниже дано построение таблицы истинности для двух сигналов и логической операции И (AND) A .
I I
Вход 1
Вход 2
Выражение для rjndex
0
0 0 1
1+0*2°+0*2' 1 + Г2°+0*2' 1+0*2°+Г21
3
о
1
1+1*2°+Г2'
4
1
0 1
Значение rjndex
р
Выход
0 0
Si
На рис. 16.7 показан пример применения блока Combinatorial Logic для выполнения данной операции в соответствии с созданной таблицей истинности. Там же показано окно задания параметров этого блока, в котором и задана соответствующая таблица истинности. Входные сигналы от блоков констант заданы как сигналы логического типа Boolean. ВНИМАНИЕ Блок Combinatorical Logic — очень мощное средство для решения задан логического моделирования. Успех решения определяется, прежде всего, умением правильно задавать таблицу истинности в соответствии с решаемой логической задачей. Необходимо помнить, что входными и выходными сигналами этого блока являются логические константы О (FALSE) и 1 (TRUE).
633
Глава 16. Математические
блоки
ГО 0! —у.
Ю 1] D'G 3l
'Со
[Hi]
Con.stant2 Combinatorial
Displayi
Display!
Lcflid 0| Comcinatofial Logic
Display
1
11 11 Constants n ombinat^ial
Display^
L=gic3
(--Combinatorial Logic
•-
I Look up the elements of the input vector {treated as boolean values) in I the truth table and outputs the corresponding row of the Truth table' I parameter. The input side of the truth table is implicit, :
у ...... p Parameters • Truth table; ;• , .,.
........ . . .... .:
....
Sample time {-1 for inherited):
-1 —___„_„ OK
_J
Cancel
Рис. 16.7. Пример применения блока Combinatorial Logic 1 6 . 1 . 7 . Блоки масштабирования Gain и Slider Gain Для масштабирования данных (умножения их на заданный коэффициент передачи блока — константу) служат блоки Gain и Slider Gain (рис. 16.8). Блоки имитируют работу идеального усилителя. В блоке Gain константа вводится в окне параметров (по умолчанию 1), а в блоке Slider Gain ее можно выбирать с помощью ползунка, перемещаемого с помощью мыши. Для этого достаточно установить курсор мыши на ползунок, затем нажать левую клавишу мыши и, удерживая ее, начать перемещать ползунок влево или вправо. Множитель будет, соответственно, уменьшаться или возрастать. Для масштабирования матричных данных служит блок Matrix Gain. Пример применения этого блока также дан на рис. 16.8. В окнах установки параметров блоков масштабирования можно задать коэффициент передачи Gain и способ выполнения операции умножения Multiplications: Element-wise K*u — поэлементное умножение; Matrix K*u — матричное умножение левосторонним оператором; Matrix u*K — матричное умножение правосторонним оператором; Matrix K*u — векторное умножение левосторонним оператором. Окно можно расширить для ввода дополнительных параметров с помощью опции Show additional parameters. Эти параметры уже описывались и видны в расширенном окне блока Gain, показанном на рис. 16.8 в левом нижнем углу. 1 6 . 1 . 8 . Блоки Complex to Magniitude-Angle и Complex to Real-lmag Блоки обработки комплексных данных Complex to Magniitude-Angle и Complex to Real-lmag служат для вычисления абсолютного значения и фазы комплексного 634
16.1. Математическая
библиотека
Math
• * [S
s™
n: |млп>.!К\,! j
Mutipfcatci n; E jelmentwse{K Shew addtion^ parameters catB toemede: i Output data type mode: jSani , j Round n i teger caclualto i ns o l ws | P" Satur^e on n i teger overo flw
Show addttionaf pafafiietar
Cance! j} Hep l
и
IZliJ Hgih 2 .0-1 1 1 C o l s e | Hepl ! '
Low i °
Puc. 16.8. Примеры применения блоков масштабирования числа и выделения из него действительной и мнимой частей. Действие блоков представлено на рис. 16.9. Можно вычислять либо любой из выходных параметров отдельно, либо оба одновременно. Эти блоки обычно используются для вычисления амплитудно-частотных (АЧХ) и фазочастотных (ФЧХ) характеристик линейных систем. ESI. г Complex to Magnttude*Mgle
•
| Compule magnitude and/or radian phase angle of th* input. r Parameters
i Output: | Magntu i de and ange l ] Sampel tm i e H for inherited}:
Rea-l-inag
Compelx to Real m i ag ~ • : — Output the real end/or m i agn i ary components of the input. - Parameter» Output: | Real and m i ag d Sampel J,Real OK | Cancel | Hep l
Puc. 16.9. Примеры применения блоков обработки комплексных данных 635
Глава 16. Математические
блоки
1 6 . 1 . 9 . Б л о к и Real-Image t o Complex и Magnitude-Phase t o Complex Для задания комплексных чисел служат блоки Real-Image to Complex и Magnitude-Phase to Complex. Первый из них позволяет задать комплексное число по заданным действительной и мнимой частям. Примеры применения этого блока представлены на рис. 16.10.
1—t» Display
Complex
>. u * j К Displiy2
Ccmplexi K-*- j u
DI*pIey3
ComplE.x2 •
r
R e a l - l m a g
C o n s t r u c t
T
a
o
c
o
C
m
o
p
m
l
e
p
x
l
e
x
o u t p u t
f r o m
r e a l
a
n
d
/
o
r
i m a g i n a r y
i n p u t .
_. г Parameters:
—
I
-
Input: |R ea l and imag Sample time {-1 for inherited): _
OK
_
Cancel
Рис. 16.10. Примеры применения блока Real-Image to Complex В окне задания параметров можно задать преобразование в комплексное число одновременно действительной или только мнимой составляющей комплексного числа. В последнем случае недостающий параметр задается в окне параметров блока. Пример применения этого блока показан на рис. 16.11. Второй блок Magnitude-Phase to Complex служит для задания комплексного числа по заданным магнитуде и фазе. В окне задания параметров можно задать преобразование в комплексное число одновременно магнитуды и фазы, только магнитуды и только фазы. В последнем случае недостающий параметр задается в окне параметров блока. 16.1.10. Блок поиска минимума и максимума MinMax Для поиска в данных минимального и максимального значения служит блок MinMax (рис. 16.12). Для выбора выходного параметра (минимума или максимума) служит раскрывающийся список Function в окне установки параметров. 636
16.1. Математическая библиотека Math
Constants
^
-1.98 +0.2822i|
'Magnitude-Angle to Compe lx 2
Displayi -1.98 * 0.2322i |
ConManteMa-gntiude-Ange l to Compfexi
Display*
Constant? Magnitude-Angle to Compe l x2
Display--
Block Parameters: Маши*
•Magnitude-Angle to Complex—
-
Construct a complex output from magnitude and/or radian phase angle
r Parameters —™ ~— Irptrt; I Magntiude and angle Sampe l time (-1 for hhertted): E Caned
0 K
Help
Puc. 16.11. Примеры применения блока Magnitude-Phase to Complex
min f1 2 5 71
Consta nt r MinMax
Mn i Max max
Display 7
;
;
Output min ormaxefinput. Forasingleinput, operators are applied across the input vector. For mull|}[e inputs, operators are applied across the inputs.
ParametersFunction: Г, Ni imhpr ~ t l m ' n
W Enable zero crossing detection Sample time (-1 for inherited): •1 OK
Cancel
Help
Puc. 16.12. Примеры применения блоков min и max
637
Глава 16. Математические
блоки
16.1.11. Блок алгебраического ограничения Algebraic Constraint Блок алгебраического ограничения Algebraic Constraint служит для вычисления значений переменных исходя из заданных (обычно в виде уравнения или системы уравнений) ограничений. Иными словами, этот блок служит для решения систем уравнений, накладывающих ограничения на значения переменных (рис. 16.13). I
2
r
-
12Ч1-2 I
t t
111 Disclay
A! gee aicConstcaint
r
instant —
|
I — ^
1.S|
•'(2;
1
aic Csnbtrst t1
A
Displayi
2НГ1ЭГ>
r-Algebraic Constraint ^mask)$nk)——•
:
•
| Constrains input signal f(г)to zero and outputs an algebraic state 2. This I block outputs the value necessary to produce a zero at the input. The output must affect the input through somefeedback path. Provide an initial guess of the output to improve algebraic bop solver efficiency.
Inittal guess: 1
OK
1
Caned
|
Шр
' Apply
1
Puc. 16.13. Пример решения системы из двух уравнений Модель рис. 16.13 является примером решения типовой математической задачи средствами моделирования пакета Simulink. Здесь с помощью блоков суммирования/вычитания формируются два линейных уравнения. Правые их части представлены блоками задания констант 2 (для верхнего уравнения) и 1 (для нижнего уравнения). Для совместного решения составленных таким образом уравнений и служат блоки Algebraic Constraint. Полученное решение выводится с помощью блоков дисплеев.
16.1.12. Матричные блоки Assignment, Matrix Concatenation и Reshape Матричный блок Assignment служит для присваивания элементам векторов и матриц новых значений. Список параметров блока зависит от входных сигналов. На рис. 16.14 слева показано, как блок в векторе [ 1 2 3] меняет первое и второе значения на 5 и 6, выбирая их из второго вектора. Список индексов [1 2] задается в окне параметров блока Assignment. В окне параметров задается также, откуда берутся данные индексации — изнутри блока Internal и извне External. Во втором случае у блока формируется дополнительный вход для задания индексов. Возможен также параметр Elements — список индексов входного вектора, передаваемых на выход блока (для передачи всех элементов задается —1). Возможна также индексация с помощью матрицы — заинтересованный в этом читатель легко разберется с ней. Блок Matrix Concatenation служит для объединения (конкатенации) векторов и матриц. Возможно объединение по горизонтали и по вертикали. Простой пример 638
16.1. Математическая
библиотека
Math
ij, ; D i с* В # I * Ч» © . £5 .;.; ! •
3 : Н & :'.!i I It. В if
i /asg i nmont
; Forvectc mode: ! • Y-U1 j ••••••• YC£! - U2 i For matrtx rood*; i Y.U1 : : | Y(R.C)»U2 • " i where ] U1 «first input port. U2 »secendtnpu!pQit. E «elements, ft-rows, and | С ' cdumns and E. R. and С may be specified е4Ы1 in the ЫоскЧ diafog l or through an extema inou pert, ' г Parameters : Input Type: j Vector
^1
; Source Ы decneri indices, jintema1
*}
I Bements (-1 for ^ efemenEs}: ; III 2|
I I ! Perfomi hrori;o(tal or veiticaf cor>caleraticn. 1-0 vector input signals a« \ : matrix. - Psarneters i Number of routs.
~"
1 f1
|
I
~0K
Cancel
| '
Help
Рис. 16.14. Примеры применения блоков Assignment и Matrix Concatenation объединения двух векторов представлен на рис. 16.14 (справа). В окне параметров этого блока указывается число входов и тип объединения. Блок изменения размерности Reshape позволяет изменять размерность вектора или матрицы. Несколько примеров применения этого блока показано на рис. 6.1.5. В первых трех примерах матрица превращается в одномерный массив, вектор-строку и вектор-столбец. В последнем примере вектор из 6 элементов превращается в матрицу, содержащую 3 строки и 2 столбца. Виды преобразований задаются в окне параметров блока путем выбора из списка.
H E :
Щ - Reshape |nask) @n i k) Change the dimensions of a vector or matrix input signal. Output - a one-dimensional array {vector), - a column vecior (MJC1 matrix). - a row vector {1xN matrix), or -a matrix or vector with specified dimensions, e.g.. [M, Njor|W].
Parameters Output dm i enso i naltiy:
Puc. 16.15. Примеры применения блока Reshape 639
Глава 16. Математические
блоки
1 6 . 1 . 1 3 . Блок вычисления значений полинома
Polynomial
Блок Polynomial служит для вычисления значений полинома по заданному вектору его коэффициентов (рис. 16.16). Например, для задания полинома х2 + 2 • х + 3 надо задать вектор его коэффициентов в виде 11 2 3J. Именно этот вектор и задан в качестве единственного параметра окна параметров блока Polynomial.,
Pi US CMP) = 2
СогйвП u
s
s
s
Pcl/n s
s
s :
г Polyva! &nask) {Jink}
—
——
; Polynomial evaluation. Calculates P(u} given by the polynomial coefficient 1 afray P. P is sorted hicjhesi order to lowest order, the form accepted by \ MATUB s polyvai function. ;•-Parameters
-—
—
1 Polynomial coefficients:
Help
Рис. 16.16. Примеры применения блока Polynomial На рис. 16.16 показано вычисление значения заданного полинома и построение его графика с помощью графопостроителя.
16.2. Библиотека непрерывных блоков Continuous 1 6 . 2 . 1 . Раздел библиотеки Continuous Непрерывные (Continuous) блоки играют важную роль в создании математических моделей многих устройств. Достаточно отметить электрические фильтры, построенные на таких компонентах (например, на операционных усилителях), широко используемые в технике электро- и радиосвязи, или математические блоки, применяемые в аналоговых ЭВМ. На рис. 16.17 представлен раздел библиотеки Continuous с непрерывными компонентами. Среди блоков этой библиотеки особое значение имеют блоки дифференцирования и интегрирования, выполняющие широко распространенные операции высшей математики, а также блоки временной задержки и решения уравнений и систем уравнений. 1 6 . 2 . 2 . Дифференцирующий блок Derivative Дифференцирующий блок Derivative служит для численного дифференцирования входных данных (сигналов). На рис. 16.18 дан пример последовательного интегрирования и дифференцирования пилообразных импульсов, а также окно установки параметров дифференцирующего блока. 640
16.2. Библиотека непрерывных блоков Continuous Дифференцирование выполняется приближенно по простой формуле Эйлера:
"I library: simurtnk/tontinuai File Edit View Format Help Continuous-Time Linear Systems
du _ Аи dt ~ At'
где Аи — приращение входного сигнала за время дискретизации At. Нетрудно заметить, что никаких параметров блок дифференцирования не имеет и его окно установки параметров дает только информацию о назначении блока. Из осциллограмм рис. 16.18 можно заметить, что как интегрирование (см. ниже), так и дифференцирование выполняются не идеально, но тем не менее форма пилообразного сигнала после последовательного выполнения этих операций практически восстанавливается.
1 s
>
> du/dt >
Integral or
Derivative
>
Ax+Bu I У " Cx+Du
State-Space
I >
Jv1)_
s+1
Transfer Fon
Zero-Pole
Continuous-Time Delays
Transport Delay
Vsfiable Transport Delay
Puc. 16.17. Раздел библиотеки с непрерывными блоками
Puc. 16.18. Интегрирование пилообразных импульсов с последующим дифференцированием 1 6 . 2 . 3 . Интегрирующий блок Integrator Блок интегрирования Integrator выполняет функции интегрирования входных данных (сигналов). На рис. 16.19 приведен еще один пример совместного применения блоков интегрирования и дифференцирования — для входного сигнала в виде прямоугольных импульсов. На рис. 16.19 показано также окно установки параметров интегрирующего блока. Окно параметров интегрирующего блока содержит следующие элементы: • External reset (внешний сброс) — тип внешнего управляющего сигнала, выбираемый из раскрывающегося списка (попе — нет, rising — нарастающий, falling — спадающий, either — любой);
641
Глава 16. Математические
блоки
Initial condition source — источник начального значения выходного сигнала при интегрировании. В раскрывающемся списке можно выбрать внутренний (internal) или внешний (external) источник; Initial condition (начальное состояние) — установка начального значения выходного сигнала при интегрировании (в виде числа, по умолчанию 0); Limit output — включение/отключение ограничения выходного сигнала; Upper saturation limit — верхний предел ограничения выходного сигнала (по умолчанию inf, то есть +оо); Lower saturation limit — нижний предел ограничения выходного сигнала (по умолчанию —inf, то есть — оо); Show saturation port — управляет отображением порта, выводящего уровни ограничения выходного сигнала; Show state port — управляет отображением порта состояния системы; Absolute tolerance — абсолютная погрешность (по умолчанию автоматический выбор — auto). Enable zero crossing detections — включение проверки переходов через нуль. •
:
.
:
;
i
C
,
n
o
t
n
.
-
e
g
r
a
t
i
n
u
/ • •
t
o
o
r
u
-
s
-
t
i
m
e
i
n
t
e
g
•
-
r
a
t
i
o
n
o
.
.
-
f
t
h
e
i
n
p
u
t
s
i
g
n
a
l
• Parameters Erfemai reset:
hone
Initial condition source: J Initial condition: Г" Unit output
Г" Show saturation port | | Г* Show state port tolerance; |auto fv> Er>abie lero crossing detection
•.•••
•
,
.
:
.
:
,
.
. :
. . :
'
-
~
„
;
-
~
;
,
c
OK
1
Cancel
Help
Рис. 16.19. Интегрирование прямоугольных, импульсов с последующим дифференцированием Большое число параметров у блока интегратора обеспечивает возможность его удобной настройки для моделирования процессов интегрирования. 16.2.4. Блок задания линеаризованной модели State-Space В ходе моделирования Simulink автоматически составляет некоторую исходную модель системы, которая представляет собой систему нелинейных алгебраических уравнений. Для вычисления изменения на каждом малом шаге эта система линеаризируется и приводится к матричной системе уравнений: dx/dt = А х + В и,
642
(16.1)
16.2. Библиотека непрерывных блоков у = С-х
Continuous (16.2)
+ D • и,
где х — вектор состояния, и — вектор входных воздействий и у — вектор выходных сигналов. После добавления к переменным их изменений создается новая система уравнений состояния, она вновь линеаризируется, выполняется новый шаг моделирования и т. д. Блок State-Space позволяет задать m линеаризованную матричную модель системы. Структура ее матриц представлена на рис. 16.20. Здесь m — чисА В п ло входов, п — число состояний системы, г — число выходов. Рисунок 16.20 дает представление о размерах матриц в линеаризованной матричной системе С D уравнений. На рис. 16.21 показан пример приРис. 16.20. Структура матриц менения блока State-Space. Блок задает линеаризованной матричной системы линейную систему второго порядка, уравнений матрицы и векторы в описании пространства состояний указаны в окне параметров этого блока. Основными параметрами здесь являются матричные коэффициенты, по умолчанию равные 1, и параметр Initial condition, задающий вектор начального состояния (по умолчанию 0). Г State Space : State-space mode!: dx/dl = &c + Bu : у • & • Du
-
- Parameters
B: ; C: | JIC1E! i D: : Inittal conditions: :
Absolute tolerance:
OK
Caned
I
Help
|
•. :•
Рас. 16.2f. Пример применения блока Stale-Space 1 6 . 2 . 5 . Блок п е р е д а т о ч н о й х а р а к т е р и с т и к и T r a n s f e r Fen Блок передаточной характеристики Transfer Fen создает передаточную функцию H(s) = y(s)/u(s) в виде отношения полиномов заданной степени. На рис. 16.22 показан пример на применение блока передаточной функции. Вид блока показан после задания его параметров в окне параметров. Осциллограф пока643
Глава 16. Математические блоки зывает воздействие в виде ступеньки и передаточную характеристику звена, заданного передаточной функцией. J Step
1
4
T fa niter Fen
:
Transfer Fen Matrxi expresso i n for numerator, vector expresso i n for denomn iato Output wd i th equate the number of rows in the numerator. Coefc ie i nts are for descendn ig powers of s.
Шиш»
-I
t)r: :De 1n 1o 16 .mnia 2o A lrance: [ab us tooulte toe OK
Рис. 16.22. Пример применения блока Transfer Fen Блок Transfer Fen имеет два параметра — векторы коэффициентов полиномов числителя Numerator и знаменателя Denominator. Они задают вид выражения H(s), которое и появляется внутри значка блока. Если коэффициенты числителя полинома заданы вектором, то выходной сигнал, как и входной, будет скалярным. В случае задания коэффициентов числителя матрица, блок задает семейство передаточных характеристик с одинаковыми полиномами знаменателя. В этом случае выходной сигнал является векторным и число строк матрицы числителя задает размерность выходного сигнала. 16.2.6. Блок Zero-Pole Блок Zero-Pole служит для создания передаточной функции с заданными полюсами и нулями. Исходный вид блока и его передаточная характеристика в общем виде'представлены на рис. 16.23. После задания конкретной передаточной функции вид блока меняется.
s(s
H(s) = К
P(x)
(s-PQ))(s-P(2))...(s-P(n))
Рис. 16.23. Блок Zero-Pole и его передаточная функция Пример применения блока и окно его параметров показаны на рис. 16.24. В этом окне задаются списки нулей (поле Zeros) и полюсов (поле Poles) передаточной характеристики, а также коэффициент передачи (поле Gain). Нули и полюса передаточной функции в блоке может задаваться парами комплексно-сопряженными числами. Нули могут быть заданы матрицами. Начальные условия при применении данного блока обычно полагаются нулевыми. 16.2.7. Блок фиксированной задержки Transport Delay Блок фиксированной задержки Transport Delay обеспечивает временную задержку входного сигнала на заданное время. Пример применения блока и окно установки его параметров показаны на рис. 16.25. 644
16.2. Библиотека непрерывных блоков Continuous
шч
ШЗЗЕ
Matrxi expresso in for zeros. Vector expresso in for poe ls and gatn. Output I j wd ith equasl the number of cou lmns in zeros matrx i, or one i zeros is a .:,. j I vector. . . i. ' • • • --:'•,'••.
Рис. 16.24. Пример применения блока Zero-Pole
.
г-Transport Delay™
;
——
г-
.
.
•
,
:
^pply specified delay to the input signaf. Best accuracy is achieved when j the delay is larger than the simulation step яге.
j Parameters ~ Tm i e dea ly; Initial input; Initial buffer size: Pade order Jjor linearization);. 1° Г" Direct f eedthrDugh of input dunng lineanzation
OK
,I
Cancel
I ,:.Л Hefe
Puc. 16.25. Применение блока Transport Delay
Параметры блока: • Time Delay — время задержки (по умолчанию 1); • Initial input — начальный уровень входа (по умолчанию 0); • Buffer size — размер буфера, выделяемого под задержанный сигнал, в байтах (число, кратное 8, по умолчанию 1024 байт); • Pade order (for linearization) — порядок линеаризации Паде (по умолчанию 0, но может задаваться как целое положительное п для повышения точности линеаризации). Полезно обратить внимание на то, что задержка может задаваться вещественным числом. 1 6 . 2 . 8 . Блок управляемой задержки Variable Transport Delay Блок управляемой задержки Variable Transport Delay имеет два входа: один для задерживаемого сигнала, а другой для сигнала управления. Он позволяет создавать задержку, заданную уровнем сигнала управления (рис. 16.26). 645
Глава 16. Математические
блоки fc. г Variable Transport Delay
— -
| Apply a delay to the first input signal. The second input specifies the I delay time. Best accuracy is achieved when the delay is larger than the i simulation step size. - Parameter Maximum delay: I» Initial input:
Buffer size:
Pads order for linsanzation};
Г" Direct feedthmugh of input during linearization OK
Cancel
I
Help
Рис. 16.26. Применение блока Variable Transport Delay Параметры этого блока совершенно аналогичны уже описанным параметрам блока фиксированной задержки (за исключением того, что вместо параметра Time delay используется параметр Maximum delay — максимальная задержка). Пример на рис. 16.26 демонстрирует задержку на 2,5 такта эталонной частоты, что задается константой 2,5 на входе управления блока управляемой задержки.
16.3. Блоки задания таблиц 16.3.1. Обзор блоков таблиц И library: smi««lii»k/U»MlpT
Раздел библиотеки Look-Up Tables File Edit View Help содержит компоненты таблиц. Следует Look-Up Tables отметить, что в Simulink 5/6 этот раздел заметно сокращен — из него изъяты блоки задания функций и блок сменил название. В результате число блоков раздела сократилось до 6. Блоки этого Tacie \2-V) раздела показаны в окне рис. 16.27. Блоки таблиц обеспечивают задание табличных данных с различной размерностью, а также позволяют использоТаЫе in-B) вать линейную или сплайновую интерполяцию и экстраполяцию данных. Эти блоки позволяют эффективно ввоPuc. 16.27. Блоки таблиц дить данные экспериментов и строить на их основе простые модели устройств и систем.
.JO.l.x.1
- < • >
I n t e r p o l a t i o n L s i n g
; n ~ C )
D i r e c t
l _ M * - U
P r e L o o k - U p
1 6 . 3 . 2 . Б л о к о д н о м е р н о й т а б л и ц ы Look-Up Table Блок Look-Up Table служит для задания в табличной форме некоторых данных, представляющих ряд значений функции одной переменной. Входом блока являет646
16.3. Блоки задания
• Look-Up ТаЫе
—
таблиц
--- -
: Perform 1-D linear interpolation of input values using the specifted table. ErtrapoiaSion is performed outside the tabie boundaies. ; • Parameters •• ; Vector of input values;
Vector of output values.
j~
Show addtions! parameters OK • | Cancel I Hep l
Рис. 16.28. Пример применения блока задания одномерной таблицы ся вектор значений входного сигнала, а выходом — вектор соответствующих значений выходного сигнала. На рис. 16.28 дан пример определения функции гиперболического тангенса для значений входного аргумента от - 5 до 5 с шагом 1. Амплитуда синусоидального сигнала задана равной 2 В. В окне параметров блока (рис. 16.28 снизу) задаются векторы входного и выходного сигнала. Они могут задаваться дискретными значениями (например, [1 3 8 10]), в виде диапазона (например, [-5,5]), выражения (например, tanh([—5:5])) и т. д. Эти векторы задают характер зависимости выходного сигнала от входного. При необходимости можно, установив птичку в окне опции Show additional parameters, расширить окно и получить доступ к дополнительным параметрам (рис. 16.29). В расширенном окне параметров можно установить ряд опций: Look-up method — метод расчета выг Look-Up Table ; I Perform 1 -D linear interpolation of tnput values using the specified table. ходных значений. Он выбирается из : Extrapolation is performed outside the (able boundaries, списка: : Parameters • Interpolation-Extrapolation — линейная j Vector of input values: • : . i •= интерполяция и экстраполяция; • Interpolation-Use End Values — ли•Vector of output values: нейная интерполяция внутри заданfanhii'-5:5]) ного интервала входных значений и f/ s h additional parameters ограничение выходного сигнала по Look-up method: j Interpolation-Extrapolation " 3 конечным значениях за пределами Output data type mode: | Same as input заданного интервала; Round integer calculations toward: |я ог • Use Input Nearest — отсутствие инp" Saturate on integer overflow терполяции, при вычислении выSample time (-1 for inherited}: ходного сигнала берется ближайшее табличное значение; • Use Input Bellow — отсутствие инAppyl OK Cancel Hep l терполяции, при вычислении выРис. 16.29. Блок задания параметров ходного сигнала берется ближайшее одномерной таблицы меньшее табличное значение; ow
О
647
Глава 16. Математические блоки • Input Above — отсутствие интерполяции, при вычислении выходного сигнала берется ближайшее большее табличное значение. Output data mode — выбор типа выходных данных из списка: • inherited via back propagation — выходной сигнал наследуется от блока назначения; • same as input — выходной сигнал наследуется от блока, подключенного ко входу; • specify via dialog — со спецификацией в диалоге; • выходной сигнал берется стандартного типа, например int8 и т. д. Output data type — выбор типа выходных данных из списка. Output scaling value — задание масштабирующей величины со смещением, которое допустимо не указывать. Lock output scaling against changes by autoscaling tool — блокировка масштабирования. Rounding integer calculations toward — выбор метода округления из списка (Zero — округление отсутствует, Nearest — до ближайшего целого, Floor — до близайшего меньшего целого и Ceiling — до ближайшего большего целого). Saturate on integer overflow — ограничение переполнения целых чисел.
16.3.3. Блок двумерной таблицы Look-Up Table (2D) Блок Look-Up Table (2D) служит для задания таблиц, представляющих значения функции двух переменных. Это может быть, например, семейство линий (оно отображается на пиктограмме блока). Как и в предшествующем блоке, предусмотрена линейная интерполяция и экстраполяция входных данных. Рисунок 16.30 иллюстрирует применение этого блока. В окне параметров блока двумерной таблицы задаются векторы индексов строк Row и столбцов Column, а также матрица данных таблицы Table. Возможно также расширение окна для ввода дополнительных параметров, аналогичных описанным выше.
16.3.4. Блок многомерной таблицы Look-Up Table (n-D) Блок Look-Up Table (n-D) служит для табличного представления данных и имеет расширенные возможности в части задания размерностей таблиц и интерполяции и экстраполяции их данных. Многомерные таблицы и их описания довольно громоздки и применяются редко, так что мы ограничимся примерами применения этого блока для случая двумерных таблиц, показанными на рис. 16.31. Окно параметров этого блока показано на рис. 16.32. В связи с расширенными возможностями этого блока число его параметров достаточно велико в сравнении с ранее рассмотренными блоками. Блок Look-Up Table (n-D) имеет следующие параметры: • Number of table dimension — размерность таблицы; • First input (row) breakpoint set — первые установки входа (индексы строки); • Second (column) input breakpoint set — вторые установки входа (индексы столбца); 648
16.3. Блоки задания таблиц
Tabe l (2-DJ1 * 2-0 Look-Up Tabe l ~ — • Perfonne 2 D m I ear ntep i oa l bon cf mout vau l es usn i g the «ec^ed tabe l Extrapoa l to i n is pwfotmed outsd i e the tabfe boundare i s. The first dm i enso i n coresponds to the top (orleft)input port. •Parametera Row n i dex n i put values:
• . • . . • • .
:.'
Cou lmn n i dex Input values: Matrxi d output values: ;|[45«:16 1920:1018 23) — Show additional earamet«» -
Г
O
K
I
C
a
n
c
e
l
I
H
e
l
p
•
Puc. 16.30. Блок задания двумерной таблицы 2-D T(u)
Constant
Constant 1
2-D T(u) 6
1—•
Constant 2
Display
2.5
Look-Up Table (n-D)1
Table (n-D)
Display 1
Constant 3 Puc. 16.31. Применение блока задания многомерных таблиц •Я Btork Parameter»: I ook Up Tawr (n-I» ! Perform n-d«rnenso inal m«erpoelted tabe lo lokup n i cu l dn ig n idex e i arche«, i The table* a sampeld representato i n of a functo i n m N vanabe la. . \-> ; i Breakponit seti rdetefr«n i put vatues to poBJtwni in the table. Theftrst j tm i en»on coresponds to the topfcrtoft}n i put port.
Number of a l be i dmansoni first n i putfrow)breakpointset: Second {coulmn)niput breakponit set: (
1
I
n
1
.
d
2
e
.
x
3
•
1
s
e
a
r
c
h
m
e
t
h
o
d
:
J
B
w
i
a
t
y
S
e
a
r
c
h
Г~ Begin index seaithee ujtng previous index teeuJts Г
U M one (vector) hput port fisJesd of N port»
Table data: : ||456:1S 1920:10 1823] •«i method: I Unear E t i Action for otf of range Cancel
|
Шц
j
Puc. 16.32. Окно параметров блока задания многомерных таблиц 649
Глава 16. Математические
блоки
• Index search method — метод просмотра индекса (Evenly Spaced Points — обзор по равномерно распределенным точкам, Linear Search — линейный обзор, Binary Search — бинарный обзор); • Table data — данные таблицы (в общем случае многомерный массив); • Interpolation method — выбор метода интерполяции (None-flat — без интерполяции, Linear — линейная интерполяция, Cubic spline — кубическая сплайновая интерполяция); • Extrapolation method — выбор метода экстраполяции (None-flat — без интерполяции, Linear — линейная интерполяция. Cubic spline — кубическая сплайновая интерполяция); • Action for out of range input — действие при выходе входных данных за допустимые пределы (выбирается из раскрывающегося списка None — без сообщения, Warning — предупреждение, Error — сообщение об ошибке, по умолчанию — Warning). Кроме того, в окне параметров имеется два флажка: • Begin index searches using previous index results — начинать обзор индексов, используя предыдущие индексы; • Use one (vector) input port instead of N points — использовать один входной порт (вектор) вместо N портов. Наличие обширного набора настроек этого блока придает ему гибкость и универсальность. 1 6 . 3 . 5 . Блок Interpolation (n-D) using PreLoop-Up
Блок Interpolation (n-D) using PreLoop-Up позволяет создать многомерную интерполяционную таблицу для представления в табличном виде функций ряда •2 2' переменных. Пример применения бло2-D T;v,f) с t ка дан на рис. 16.33. Окно параметров этого блока нескоr rpclalion In-C) ig ReLoo^-Uc лько проще, чем у предшествующего с •nstsn 1 блока. Назначение параметров рассмотрено выше. rU3okupNDlrrterpldx{rnask}{!tnk) ; j Perform n-dm i ensonal ip-D) interpolated table o l okup usn i g precaicuiated | i n d i c e s a n d d s i t a n c e f r a c t i o n s . . A n n D T a b e l i s a s a m p e l d representat 16.3.6. Блок таблицы с прямым i of a function in Ы variables. This block is fed with the output of a . J PreLook-Up index Search block. The first dimension corresponds to tne доступом top (or left) input port. \ Direct Loop-Up Table (n-D) OSI
Блок Direct Loop-Up Table (n-D) позволяет задавать многомерные таблицы с прямым доступом к их элементам. Отказ от интерполяции и экстраполяции существенно уменьшает время доступа, что бывает нужно, если интерполяция и экстраполяция осуществляется внешними блоками и по специальным алгоритмам. Пример применения этой таблицы дан на рис. 16.34. Блок имеет следующие параметры: 650
- Parameters -•——•—• ~™™_ Number of table dimensions; ]2
.
d
Table data:
1 i i
|sqrt{n ICFTMCD Interpolation method: |Unear
zl
Extrapolation method: I Linear .Action for out of range input:
|
d | None
Рис. 16.33. Применение блока Interpolation (n-D) using PreLoop-Up
16.3. Блоки задания
О-ч
Number of table dimentions — размер таблицы; Input select this object from table — входная селекция объекта из таблицы (выбирается из раскрывающегося списка: Element — элемент, Column — столбец и 2-D Matrix — матрица размера 2 х 2); Make table an input (опция) — сделать таблицу входом;
1Ж ]
T
\
e
.
g
|
a
l
s
o
I
s
e
l
e
•
a
P
Action for out of range input — действие при выходе входных данных за допустимые пределы (выбирается из раскрывающегося списка None — без сообщения, Warning — предупреждение, Error — сообщение об ошибке, по умолчанию — Warning).
•-•
b
l
.
a
N
Table data — массив данных таблицы;
таблиц
e
m
,
a
c
r
u
i
a
u
o
m
e
b
m
i
e
t
m
e
n
b
e
t
b
n
u
e
i
r
o
r
s
t
o
d
n
e
r
e
p
s
n
:
t
d
e
•
e
f
l
•••
e
c
3
o
s
x
c
r
e
o
'
t
i
e
l
r
• • •
o
t
u
e
c
t
r
e
s
n
r
.
n
s
a
p
I
n
t
h
e
f
o
l
u
m
n
t
o
t
h
a
b
c
o
n
d
p
s
u
t
s
o
a
u
r
r
t
o
r
e
z
h
e
2
e
'
e
l
-
o
r
e
o
m
D
p
-
e
m
(
o
b
i
a
r
a
i
t
i
s
t
r
e
e
i
i
f
t
d
n
x
o
)
i
i
t
h
u
t
n
n
a
d
p
i
t
u
c
d
o
f
t
e
i
t
s
m
h
p
i
e
o
r
n
n
e
t
t
t
s
a
o
i
b
t
o
i
h
n
e
e
t
.
.
B
T
a
l
h
o
e
b
l
c
e
i
n
p
u
t
s
s
e
r
s
a
n
t
.
s
f
f
c
i
t
a
b
l
e
d
i
m
o
b
j
e
n
s
i
o
n
s
: "
;
.
k
f
e
c
t
t
h
i
s
e
c
t
f
r
o
m
t
l
e
:
J
3
1
E
1 Г" Make table an input ; Table data j!4 5 6;1S 1920:10 18 233 Action for out of range miff
OK
aming
Cancel
Help
l.ppiy
Puc. 16.34. Применение блока Direct Loop-Up Table (n-D)
1 6 . 3 . 7 . Б л о к р а б о т ы с и н д е к с а м и P r e L o o k - U p Index S e a r c h Блок PreLook-Up Index Search обеспечивает вычисление принадлежности одномерных данных к ближайшим узлам при приближении к ним снизу, а также контроль разности (дистанции) в относительных единицах между данными и значениями этих узловых точек. Данные могут быть представлены отдельными значениями или одномерным вектором значений — см. рис. 16.35, где показана обработка данных вектора из трех констант [12, 45, 78] (не спутайте этот вектор с ссылками на литературу). Для этого блока задаются следующие параметры: • Breakpoint data — вектор (или ранжированная переменная) для узловых точек; • Index search method — метод поиска индексов (Binary Search — бинарный обзор, Linear Search — линейный обзор или Evently Spaced Points — обзор по равномерно распределенным точкам); • Process out of range input — тип процесса при выходе входного сигнала за заданные пределы (Clip to Range — ограничить по пределу или Linear Extrapolation — линейная экстраполяция); Action for out range input — действие при выходе входного сигнала за заданные пределы (None — отсутствие
г LookupldxSearch &nask)
flink)
,!
I Locate the input value's reSative position wtthm a range of numbers jth« ; "breakpoint data" set}. Returns ал array of the interval index 'Vand ; distance fraction 'f" that the input "u" reaches into the kth interval. ' ___ •_ ~~ Parafnetsrs
• •• • ""••"
•"
i \ •j ; i
—...-
i &eskpoint data;
Index search method, I Bmar/ Search Г" B«gm index search using previous index result Г* Output orrf>' the index Process Out of range input: [bnear BlrapofaTron Action for OLft of range input: I None
Puc. 16.35. Применение блока PreLook-Up Index Search 651
Глава 16. Математические
блоки
сообщения, Warning — предупреждающее сообщение, Error — сообщение об ошибке). Имеется также два флажка: • Begin index search using previous index result — начало просмотра индексов с последнего результата; • Output only the index — вывод только индексов.
16.4. Блоки задания функций пользователя 16.4.1. Обзор функций пользователя Новый раздел библиотеки в Simulink 5/6 — раздел по функциям пользователя — User Defined Functions (рис. 16.36). Новым этот раздел можно назвать условно, поскольку в него просто помещено 4 блока для задания функций пользователя, которые ранее были в других разделах библиотеки блоков. 16.3.2. Блок задания функции Fen Блок Fen служит для задания функций одной переменной и ИЛИ ряда переменных u(i). На рис. 16.37 показан пример применения блока Fen для функции двух переменных и(1) и и(2), заданной по умолчанию. Входным сигналом блока может быть вектор с числом компонентов, равным числу переменных. В окне параметров блока имеется поле Expression для ввода выражения, задающего нужную функцию. Это выражение составляется по правилам, принятым для описания функций на языке С. Допустимые операторы перечислены ниже в порядке уменьшения приоритета их операций: • круглые скобки (); • унарные операторы — и +; • оператор возведения в степень л ;
Jlblxl
О library: «mulink/User-DdF File Edit View f irmat Help
| User-defined M-code and C-code >
flu) Fen
> system S-Function
MAT LAB Function > MATLAB Fen
О system
0 01005j Displa/
r Fen -•-• -••-"• --• - -••• General expression block. Use "u" as the input variable name. Example; sin{u(1l*exp{2.3*-uf2D) • j- Parameters '—--— Expression: • • . - .• ' • sin{u{1)*e*:p{2.3*(-u(2}}}'; Sampe l time (-1 for inherited):
S-Function BuiHe?
Cancel
Puc. 16.36. Применение блока PreLook-Up Index Search 652
Help
Puc. 16.37. Блок задания функции Fen
16.4. Блоки задания функций
пользователя
• оператор логического отрицания !; • операторы арифметического умножения * и деления /; • операторы арифметического сложения + и вычитания -; • логические операторы отношения <, >, <= и >=; • операторы отношения «равно» = и «не равно» !; • оператор логического умножения && (И); • оператор логического сложения || (ИЛИ). Заметим, что операторы отношения и логические операторы возвращают логические значения в виде логического нуля (FALSE) или логической единицы (TRUE). В выражениях для функций этого типа могут использоваться и переменные системы MATLAB, находящиеся в рабочем пространстве, например переменная ans. 16.4.3. Блок задания функции MATLAB Fen Блок задания функции MATLAB Fen служит для задания функций одной переменной и или ряда переменных u(i) по правилам, принятым для языка программирования базовой системы MATLAB 6.O. В частности, это означает, что в теле функции могут встречаться как встроенные функции системы MATLAB, так и любые процедуры и функции, реализованные в виде М-файлов. Рисунок 16.38 демонстрирует применение блока MATLAB Fen для вычисления функции синуса, заданной толь112 31 ко ее именем — sin. При этом на входе задается вектор значений входного сигнала, а на выходе формируется вектор rMATLABFcn -- 1 выходного сигнала с той же длиной. Pass the n i put vau l es to a MATLAEI functo i n for evaluato i n. The function Окно параметров этого блока (см. must return a sn i ge l vau l e havn i g the dm i enso ins specfied by Output I dm i enso i nsa 'nd Coa lpse 2-D resuHs to 1-D.' рис. 16.38) содержит описание правил | Exampe ls: sin. sin(u).foo(j(1). u{2)) задания функции и раздел параметров Parametesi "J———— • —: -; — Parameters. В разделе MATLAB function MATLAB function: ^ задается выражение для функции и Isin длина вектора выхода Output width. O utput dmenso i ns: v : ;• Если она должна совпадать с длиной Output signaltype: [auto J вектора входного сигнала, то вводится значение — 1. |7 Coa lpse 2-D resutls to 1-D ; S l tm i e <-1 for hheited): Правила задания выражения для _ampe функции совпадают с правилами, рассмотренными для функции Fen. Если OK Cancel Hep l выражение состоит из одной встроенной функции (см. пример на Рис. 16.38. Блок задания функции рис. 16.38), то достаточно задать имя MATLAB Fen функции без входных параметров. В раскрывающемся списке Output signal type можно выбрать тип выходного сигнала в виде вещественного чила (real), комплексного (complex) или задать автоматический выбор (auto). 16.4.4. Блок задания S-функций Модели расширения Simulink в конечном итоге являются программами, называемыми S-функциями. Блок задания S-функций одновременно самый простой и 653
Глава 16. Математические
блоки
самый сложный блок. Простой, потому что окно его параметров, представленное на рис. 16.39, содержит лишь поля для ввода наименования S-функции и I - S -Functo in ! User -defn i abe l block. Bo l cks may be written in M. C, Fortran or Ada an ее параметров. ' must conform to 3-functo i n standards. t,x,u and flag are automatc i ayl ; passed to the S-functo i n by SrimJn i k. "Extra" parameters may be Сложность S-функций обусловлена | specifed in the 'S-function parametere'fteld. тем, что они являются вполне самостоj - Parameter ™~™—— ятельными программами, написанныI S-functo i n name: ми на языках MATLAB, С, Ада, ФортI ран и др. и представлены файлами соS-functo i n parameters: ответствующих форматов. Основное назначение S-функций связано прежде всего с созданием новых блоков и решением нестандартных задач, которые трудно решаются с помощью имеюРис. 16.39. БЛОК S-функций и окно его параметров щихся библиотек пакета Simulink. Обычным пользователям трудно представить ситуацию, когда задачу нельзя решить с помощью стандартных библиотечных блоков. А потому возможности S-функций интересны лишь достаточно квалифицированным пользователям, владеющим навыками программирования. 1 6 . 4 . 5 . П р и м е р ы п р и м е н е н и я S-функций Для получения доступа к демонстрационным примерам па применение S-функций достаточно в разделе справки Demos найти и исполнить команду S-function examples. В Simulink 4 эта команда выводила окно с весьма внушительным набором демонстрационных примеров. В Simulink 5 примеры сгруппированными по реализациям на разных языках программирования, так что окно примеров выглядит довольно просто (рис. 16.40). Полное описание S-функций и их демонстрационных примеров явно выходит за рамки тематики и объема этой книги. Поэтому ограничимся демонстрацией лишь пары примеров, относящихся к применению S-функций, записанных на языке программирования системы MATLAB, детально описанном в этой книге. Выбрав на рис. 16.40 блок примеров с названием М-files, получим окно, представленное на рис. 16.41. Один из примеров этой группы представлен на рис. 16.42. Здесь представлено задание элемента временной задержки па один шаг (такт) моделирования. Показано действие задержки на примере синусоидального сигнала. Задержка реализо-
Рис. 16.40. Основное очно примеров применения S-функций 654
16.4. Блоки задания функций,
пользователя
вана М-файлом sfundsc2.m, который виден в окне редактора М-файлов в нижней части рисунка. Для вывода листинга этого файла (MATLAB-программы) достаточно активизировать надпись под моделью. Другой пример (рис. 16.43) иллюстрирует реакцию системы, заданной (в виде S-функции) системой из двух дифференциальных уравнений. Представлены результат моделирования в виде осциллограммы и начало задания S-функции на языке MATLAB — функция задается в окне редактора М-файлов. Заинтересованный читатель может Рис. 16.41. Блок примеров применения просмотреть этот файл и даже модифиS-функций, написанных в виде М-файла цировать его —- система MATLAB является открытой системой и любые М-файлы можно просматривать и модифицировать. В представленном примере вы можете просмотреть также пример задания S-функции на языке программирования С. 1 6 . 4 . 6 . Блок с о з д а н и я S - ф у н к ц и й S-Function Builder Для создания D-функций, написанных на языке С, служит блок S-Function Builder. Этот блок и его окно показаны на рис. 16.44. a p : A11 @' В /:. ч* D
<
&
a
m
\
%
i
f
e
Й
i
.
.
£
2
:
±
;
•
.
f
u
^
r
•
V7
•
•
1
•| .
D U Ы '
C
L
h
:
:
K
>
:
=
.
•
"
•
•
•
a
L
i
L
n
1
C
o
l
1
Puc. 16.42. Пример реализации блока S-функции, дающего задержку сигнала на один шаг 655
Глава 16. Математические блоки i
]ftrat # ,-• P fi! А И (5 • В "
'Fte Edt Ve i w/ Text Debug Breakpon i ts Web Whd i wv Hep l
-li-li vsfunc.m jvsfunc.c | Ln 1
Col 1
Puc. 16.43. Пример реализации блока S-функции, решающей систему из двух дифференциальных уравнений
' I 'til! ip 2 '-: • « .> S-fШКЯШ1 liuAler: unWlHl/s-f oiK«n№*l<9r Parameters- : : I1 ; S-function name:
r S-ftJUctD i Hparameters ' Г|п111а11гз1юпУ 2. Dala Properties У 3. Libraries")^ Outpu!s\s Continuous DsrlvativeVy 6, Discrete Update~Y 7. Build Inl г Code description—;—™
~~
-•-—
— ——
•-
\ Enter your C-code or call your algorithm. If available, discrete and continuous states should be referenced as j xD[0]...xD[nJ, хС[01...кС|п1 respectively! Input ports, output ports and parameters should be referenced using the i symbols specified In me Data Properties. These references appear directly in ihe generated S-function, r Code for the mdlOutputs function-
-
-
-
yO[O] = uO[O]; yO[O] . im = uO[O] .iiti; yl[O].re - ul[O].re; yl[O] . im = ul[O] . ltti; •/
P\Inputs are needed in the outpuHunctlon(directfeedthrougr)
Puc. 16.44. БЛОК создания S-функции и его окно
656
16.5. Новые разделы библиотеки Simulink 6 Окно блока имеет ряд вкладок, заполнение которых позволяет последовательно определить S-функцию, начиная с инициализации и кончая определением библиотеки, куда заносится блок с S-функцией. Для компиляции D-функции достаточно нажать кнопку. Build (создать). Однако тут мы сталкиваемся с главной проблемой — для компиляции нужно установить компилятор языка С и отладить его интерфейс с системой MATLAB. Подавляющее большинство легальных (не говоря уже о нелегальных) копий системы MATLAB поставляется без компилятора С, а потому использовать возможности блока S-Function Builder не удастся. При нажатии кнопки Build система просто зависнет. Поскольку рассмотрение совместного применения MATLAB с компиляторами языков программирования в задачи данной книги (посвященной основам применения системы MATLAB + Simulink) не входит, ограничимся представленным описанием S-функций. Дополнительно об S-функциях можно прочесть в технической документации по ним и в [88], где, однако, об интерфейсе MATLAB с компиляторами не говорится.
1 6 . 5 . Новые р а з д е л ы б и б л и о т е к и SimuSink 6 1 6 . 5 . 1 . Б л о к и р а з д е л а Logic and Bit O p e r a t i o n s Как отмечалось в конце Главы 12, пакет расширения Simulink 6 имеет три новых раздела библиотеки. Один из них Commonly Use Blocks, представленный на рис. 12.21, является просто сборкой наиболее часто применяемых блоков. А вот в раздел Logic and Bit Operations перенесены блоки логических и побитовых операций. При этом состав блоков заметно расширился (рис. 16.45). Блоки этого раздела делятся на три категории:
rilibrary: simulink, logiHelp c and Dit a £dtt View
. File
Logic Operations
Logc i al Operator
В
л Ы п ^ t o r i ,al
Compjre
Compare
To Z e r o
To Constant
Logic
Bit O p e r a t i o n s
Set b tO Bit Set Vy >Qy Qu >>8
Bitwise
Clear
•
brtO
> AND OxDQ Bitwise Operator
Hit C l e a r
• Logic Operations — блоки логических операций; • Bit Operations — блоки побитовых операций; • Edge detections — блоки детектирования пересечений. Поскольку большинство из этих блоков уже было описано, повторять это описание не имеет смысла. Заметим, что назначение этих блоков вполне очевидно из их названий.
Rea l to i nal |nterva| Test Intarval Test Operator Dynamci
у в Eij
U >0 a
NOT
U/z > 0 D e t e c t Rise Positive
Г
U я= 0
& нот U/z >= 0 D e t e c t Rise Non negative
'
E x t i a c t Bits
I
U p p e r Half
|
U< 0 & NOT U/z<0 Detect Fall Negative
*
> & NOT U/z<=0 D e t e c t Fall Nonpositive
Рис. 16.45. Блоки раздела библиотеки Simulink 6 Logic and Bit Operations
657
Глава 16. Математические
блоки
16.5.2. Блоки раздела Additional Math & Discrete Еще один новый раздел библиотеки блоков Simulink 6 это Additional Math & Discrete. Он содержит два подраздела, представленные на рис. 16.46. ВШ.|Тч-|Ж':||1.1П|-:«;Т!'!'';этгТГ>
•<•• File
E d i t
D e b u g
D e s k o p
о & I •m a
W i n d o w
H e l p
F k
Edlt
v i e w
г,,,,,,.
H
.lp
-> п. \щ j f I f I Угощен
s.
> >
i-o.ez'Vo.arTransfer Fcf Dilect Form II
Den No Lead
Additional Mdth «. Disciete
I f Additional Л r,t
jdii Disc ete
ICi Unit Delav
Unit C'elav
RICZ Unit telav
External 1С
Resettable
Resettable
Unit Delay
J 1 E > ICz Unit Delay
Unit D
Resettable
Evtemal 1С
Reset
R
"m
Unit Delay
I
1
E 1
Inci ementDeci einetit
Real Woild
Real World
Stored Integer Stored Intel
Unit Delay With Preview Resettabte
Unit Deliv With Previe ResettJble
Decrement Unit Delav With Preview Enabled
ф Start I
Unit Del With f-V.
Unit Delau With Preuiw Enabled
c. 16.46. Блоки раздела библиотеки Simulink 6 Additional Math & Discrete Нетрудно заметить, что этот раздел имеет два подраздела: • Additional Math — блоки дополнительных математических операций (в ос* новном для реализации приращений); • Discrete — дискретные блоки единичной задержки разного типа. Надо прямо сказать, что блоки этих разделов применяются довольно редко, а их назначение вполне очевидно.
658
Глава 17. Нелинейные, дискретные и специальные блоки 17.1. Нелинейные блоки 17.1.1. Обзор нелинейных блоков Пакет Simulink предназначен главным образом для моделирования нелинейных динамических систем. Раздел Nonlinear основной библиотеки Simulink, посвященный нелинейным компонентам, содержит наиболее распространенные нелинейные блоки (рис. 17.1). Набор ass Help File Edit Ve iw блоков этого раздела библиотеки практически тот же, что в версии Simulink. Discontinuities Среди нелинейных блоков следует / / отметить блоки с типичными нелиней? > 7 ностями, например блоки с характериluratk n D« ad Zc R-3 e L i r r стиками в виде типовых математичеX/ /" ских функций, компоненты идеальных > |T " > > _/ Pf и неидеальных ограничителей и т. д. Bsftlash Be ay С jantizer Достойно представлены и такие сложные компоненты, как квантователи -A --1 > > > сигналов, блоки нелинейности, модеA t Hit Cculcmfc f, лирующие нелинейные петли гистереMessing Visccu; Fricticp зиса, и ключи — переключатели с разными состояниями, зависящими от управляющих сигналов. Рас. 17.1. Окно библиотека Важным параметром нелинейного с нелинейными компонентами устройства является его передаточная функция — зависимость выходного сигнала от входного, у(и). Для некоторых блоков, например релейного или квантующего, они имеют разрывный характер. Передаточные характеристики указаны в описании, которое дается в окне параметров каждого нелинейного блока. В связи с этим в тексте соответствующих разделов формулы передаточных характеристик опущены. •
3
ВНИМАНИЕ
:
Следует обратить внимание на то, что параметры нелинейных блоков могут задаваться не только численными значениями, но и списками и вычисляемыми выражениями. Большинство нелинейных блоков рассматриваются как идеальные в том смысле, что инерционность устройств, которые представляются такими блоками, не учитывается.
1 7 . 1 . 2 . Блок Ограничения Saturation Блок Saturation представляет собой нелинейное устройство — идеальный ограничитель, сигнал на выходе которого равен входному сигналу до тех пор, пока не достигает порогов ограничения: верхнего Upper limit или нижнего Lower limit. После этого сигнал перестает изменяться. Наиболее характерно применение ограничителя для ограничения синусоидальных сигналов (рис. 17.2). 659
Глава 17. Нелинейные, дискретные и специальные блоки
Ел
[V
Sine Л'аге Sstu'SMn
. • • •
г Saturation
-
-
I Limit input signal to the upper and lower saturation vab
Iv* Treat as gain when linearizing p
Enable zero crossing detection
Sample time f 1 for inherited):
OK
Cancel
Рис. 17.2. Блок ограничения и окно установки его параметров Как видно из рис. 17.2, окно параметров блока содержит лишь поля для установки верхнего (Upper limit) и нижнего (Lower limit) порогов ограничения. 17.1.3. Блок с зоной нечувствительности Dead Zone Еще одна характерная нелинейность — линейная зависимость выходного сигнала от входного (с вычетом соответствующего порога) везде, за исключением зоны нечувствительности (мертвой зоны). Эта нелинейность моделируется блоком Dead Zone (рис. 17.3). Окно параметров этого блока содержит границы зоны нечувствительности Start of dead zone и End of dead zone. По умолчанию они заданы равными —0,5 и 0,5. Флажки Saturate on integer owerflow (ограничение при переполнении целых) и Treat as gain when linearizing (трактовать как ограничения при линеаризации) по умолчанию включены. 1 7 . 1 . 4 . Р е л е й н ы й блок Relay Релейный блок Relay имеет разрывную передаточную функцию с гистерезисом (или без него), подобную передаточной функции хорошо известного триггера Шмитта. Если сигнал на входе меньше некоторого порога, то на выходе получается сигнал одного уровня (обычно низкого), а если порог превышен, то сигнал на выходе становится другого уровня (обычно высокого). Если при спаде сигнала достигается другой порог, то сигнал на выходе также скачком меняется. Рисунок 17.4 показывает работу релейного блока с одинаковыми по абсолютной величине и очень малыми (eps) порогами при подаче синусоидального сигнала на вход. В окне параметров блока можно задать уровни сигнала на выходе при включенном и выключенном состоянии, а также верхний и нижний пороговые уровни срабатывания. Их значения по умолчанию представлены на рис. 17.4. 660
17.1. Нелинейные блоки
Sine Wave Dead Вик* Para meters Шш worn :
~
j
'
O
i
.
U
c
u
I
h
a
t
p
e
u
S
-
u
t
t
• • •
£
J
z
a
r
3
e
t
n
e
•
•
.
r
o
f
o
r
E
"
o
n
r
i
d
n
p
v
i
a
f
l
t
s
u
w
e
i
w
t
h
h
i
e
n
n
'
t
h
o
u
e
d
t
s
e
i
a
d
' '
d
e
z
o
o
f
n
t
e
h
.
O
e
f
d
f
e
s
a
'
e
d
t
z
i
o
n
p
n
e
"
u
t
s
i
g
-
"
n
a
"
"
l
s
b
>
.
[
- Parameters — - Start of dead zone:
—-
:
-•
End of dead zone; _ . £7 Saturate on integer overflow W Treat аз gain when linearizing V? Enable zero crossing detection :
Sample time {-1 for inhented):
O
K
H
e
l
p
Рис. 17.3. Блок с зоной нечувствительности и окно установки его параметров л V
I
[г
-Relay:сре
! Output the specified 'on' or 'off vaiue by comparing the input to the : • "•: ' specified thresholds. The on/off slate of the relay is not affected by input between the upper and lower limits. •'-•' *.••.'.' .: ' •"• '—— ••— ---
-Parameters Switd i on pctrit. F
^
~
—;
— :
;
'
Switch off point:
O
u
t
p
u
t
w
h
e
n
O
u
t
p
u
t
w
h
e
n
|
~
S
*
a
—
m
p
,
l
e
—
t
i
o
o
,
m
e
n
f
f
— S
(
-
:
:
h
1
f
o
w
o
r
a
n
d
h
d
e
i
r
t
i
i
t
o
e
n
d
a
)
l
p
a
r
a
m
e
t
e
r
s
—
~
-
*
:
_
O
K
Cancel
|
Help
|
Др;^,' .. |
Puc. 17.4. Релейный блок и окно установки его параметров 17.1.5.
БЛОК С
о г р а н и ч е н и е м с к о р о с т и Rate Limiter
БЛОК С ограничением скорости Rate Limiter старается отслеживать за входным сигналом в условиях задания ограничений на скорость нарастания и спада сигнала выходного сигнала блока (рис. 17.5).
661
Глава 17. Нелинейные, дискретные и специальные блоки
V
Sn i e Wave Rate Limits* r Rate Lm ie il r I Unitrisingand fallingratesof signal. r Parameters — • -•••. : Rsin i g se lw rate: 1 failing se l w rate; 1-1
Treat as gan i when linearizing OK | Cancei
Hep l
Рис. 17.5. Блок ограничения скорости и окно установки его параметров Для вычисления скорости изменения сигнала используется соотношение: rate = [Ц - OUT,.,]/[T, - Т м ] , где / — текущий шаг моделирования, смысл остальных параметров очевиден. При работе блока вычисленное по этой формуле значение скорости изменения сигнала сравнивается с установленным в окне параметров значением параметра R (Rising slew rate). Если скорость изменения входного сигнала выше, чем заданная, то выходной сигнал «отрывается» от входного и меняется в соответствии с выражением: OUT; = dT*R + OUT; _,, где dT — приращение времени на текущем шаге модельного времени. Если вычисленная скорость меньше параметра F (Falling slew rate), то выходной сигнал меняется в соответствии с выражением: OUT; = dT*F + OUT; ,. Наконец, если вычисленная скорость находится в промежутке между значениями R и F, то входной сигнал повторяется выходным, то есть имеет место их равенство. В окне параметров блока задаются скорости нарастания Rising slew rate и Falling slew rate. По умолчанию заданы значения 0,5 и —0,5. 1 7 . 1 . 6 . Блок квантования Quantizer Блок Quantizer служит для квантования меняющихся сигналов с одинаковым шагом по уровню (рис. I7.6). Сигналы квантуются по уровню и превращаются в ступенчатые сигналы. Блок имеет единственный параметр — шаг по уровню (по умолчанию 0,5). Рисунок 7.6 показывает квантование синусоидального сигнала. Можно отметить, что при большом шаге квантования его трудно назвать идеальным — точного слежения за уровнем входного сигнала нет. 662
17.1. Нелинейные
12
Sire Wave
блоки
С<иэ
-Quantizer
—
-
\ Discreiize input at given interval. :
••
г- P a r a m e t e r s — — — — I Quantization interval:
i W Treat as gain when linearizing ] Sample time {A for inherited): lid
'
~ ~
: OK
Cancel
Help
Puc. 17.6. Блок Quantizer и окно установки его параметров 17.1.7. Блок фрикционных эффектов Coulombic and Viscous Friction Блок фрикционных эффектов Coulombic and Viscous Friction служит для моделирования фрикционных эффектов сухого и вязкого трения (рис. 17.7). Передаточная функция блока указана в окне установки его параметров. (Рис плохой!!!!!) p
L
,
\
J
1
k
L
J
•
"
• . , : , . • : ,
.
••Cwo imDtc and Vs icous Fr-cton in^sk- {bnk. A d?5contnuti>' affaet at zero mcdesi couo i mb f YSSCOU5 fnctCH ' i = ngn&j * fGasn * abst*.? * Ofael) •!
L
o
u
t
e
C
©
e
f
f
f
c
T
t
i
b
e
f
r
r
*
c
c
i
i
#
O
f
v
'
v
a
b
e
^
O
f
f
s
e
t
®
•
O
K
1
C
a
n
e
d
|
H
e
l
p
Puc. /7.7. Блок фрикционных эффектов и окно установки его параметров В качестве параметра блока задается список смещений при фрикционных эффектах и коэффициент передачи для приращений выходного сигнала. 1 7 . 1 . 8 . Блок люфта Backlash Блок Backlash имитирует эффект возникновения люфта (рис. 17.8). Этот эффект создает передаточную характеристику гистерезисного типа, которая представляется графически в пиктограмме блока. 663
Глава 17. Нелинейные, дискретные и специальные
блоки
—1—fr. 5in-e Wave
Backlash
р Backlash—- :
'-'• •• ' —
-
\ Model backlash where the deadbend width specifies tr I the system. p- Parameters i— I Deadband width:
—
--#• ;
—
Initial o;jtpu!
T? Enable zera crossing detection Sample time (-1 for inhented):
Cancel
Help
Рис. 17.8. Блок люфта и окно установка его параметров Блок имеет два параметра: ширина диапазона Deaband width и начальный уровень сигнала на выходе Initial output (по умолчанию 1 и 0). Уровень Initial output является также срединным значением входного сигнала, a Deaband width определяет ширину петли гистерезиса передаточной характеристики блока. Сигнал на входе будет равен заданному значению Initial output, пока при возрастании не достигнет значения U + (Deaband width)/2, после чего перестает меняться. При спаде сигнал перестает меняться, достигнув границы U — (Deaband width)/2. 1 7 . 1 . 9 . Д е т е к т о р пересечения заданного уровня Hit Crossing Блок Hit Crossing фиксирует прохождение сигналом заданного уровня (по умолчанию нулевого) и при каждом пересечении вырабатывает короткий импульс единичной амплитуды (см. рис. 17.9). Окно установки параметров данного блока позволяет задать следующее параметры: • Hit crossing offset — порог пересечения; • Hit crossing directions — направление пересечения (either — любое, rising — нарастание, failing — при спаде); • Show output port — показать выходной порт; • Enable zero crossing detection — фиксировать прохождение через нуль.
17.2. Дискретные блоки 1 7 . 2 . 1 . Обзор д и с к р е т н ы х
блоков
Дискретные блоки служат для создания моделей дискретных устройств и систем двух типов: с дискретным временем и с дискретными состояниями. Эти блоки включают в себя устройства цифровой задержки, дискретно-временной интегратор, дискретный фильтр и т. п. На рис. 17.10 представлено окно библиотеки Discrete с этими устройствами. 664
17.2. Дискретные
блоки
• 1
Si r
r
\
g
W
SOOM
J
8
H
i
t
Оси-si rrg
•
• i" Hti Crossnig — ~ ~ — — — ~- - - — j|Ca ob m p a e r s t h e n i p u t s g i n a toanistheathtithecros sn isg fsu ee t,va u lee-bo os vie e. ta fhP sbb eo lw,ouo rutslrem o ffe e tpo va ls th lIfc"lJj O h t e r w e o l c k t p 2 e r a . F o r v a n a b s t e o v l e r : ] am ti e step before and after the hti crossn ig m ti e. г Parameters jhft crossing offset:
Hit crossing direction: Uither 17. Slow output port • . fv* Enabe l zero crossing detection Sampe l ta-ne {-1 for inherited): OK
Cancel
Hep l
Рис. 17.9. Блок пересечения заданного уровня и окно установки его параметров
File Edit View Fotmat Help Discrete-Time Linear Systems 1
>
T
1
z-1
1 - 0 . E ,
-
Unit Delay
1
U - 1
:•
•
•
'
\
0 screte Filter
Discrete-Time
i
> z : z - 0
Discrete Transfer Fen
E
Disaets 2er^-Fc
•
C i i d s l s State-Spaos S a m p l e & Hold Delays
-;
>
Memory
с
A
• s t - O r a t
H o l d
f
Z = r c - O r a H c l d
Рис. 17.10. Раздел библиотеки с дискретными блоками Некоторые дискретные блоки имеют передаточные функции, напоминающие уже описанные для непрерывных блоков. Однако основное отличие между ними заключается в том, что выходные сигналы дискретных блоков носят дискретный характер. Обычно при моделировании дискретных по времени устройств время моделирования имеет фиксированный шаг.
665
Глава 17. Нелинейные, дискретные и специальные
блоки
17'.2.2. Блок дискретной единичной з а д е р ж к и Unit Delay Блок Unit Delay обеспечивает задержку входного сигнала на один шаг эталонного времени. Это иллюстрирует рис. 17.11, на котором демонстрируется задержка перепада.
St«»
UnitCeley
Sec p-e
Unit Delay I Sampe l and hold with one sampe l period delay. г
г Parameters i Initial conditions: | |_ j Sample time (-1 for inherited): I I1 OK
Cancel
Help
Рис. 17.1.1. Блок дискретной единичной задержки Окно параметров блока, показанное также на рис. 17.11, предусматривает установку начального значения для уровня выходного сигнала Initial condition и эталонного времени Simple Time. 1 7 . 2 . 3 . Блок экстраполятора нулевого порядка Zero-Order Hold Новый блок экстраполятора нулевого порядка Zero-Order Hold задерживает выходной сигнал на заданный промежуток времени и оставляет неизменными значения выходного сигнала на каждом такте дискретизации (рис. 17.12). Предусмотрена установка единственного параметра — эталонного времени Simple Time.
Sccc*
V GEE ;-Zero-Order Ho!d Zero-order hold. •Parameters Sampel tm i e f 1 for inherited): OK
Cancel
Help
Puc. 17.12. Блок дискретного экстраполятора нулевого порядка
666
17.2. Дискретные
блоки
17.2.4. Блок экстраполятора первого порядка Tirst-Order Hold Блок экстраполятора первого порядка First-Order Hold задерживает выходной сигнал на заданный промежуток времени и задает линейное изменение выходного сигнала на каждом такте дискретизации, в соответствии с крутизной входного сигнала в данный момент времени. Пример задержки синусоидального сигнала этим блоком показан на рис. 17.13.
•
:rsл arde» -tO
h Sine Wave
F
ис!а
-
;- Firat-Ofder Hod l (m sa kHink) 1 First -order hold. r~ Parameters ~~ i Sampe l time:
j rrOK
|
Cancel
|
Help
|
Рис. 17.13. Блок дискретного экстраполятора первого порядка В окне параметров этого блока (рис. 17.13) предусмотрена установка единственного параметра — эталонного времени (по умолчанию 1). Обратите внимание, что оно может быть дробным числом, как в приведенном примере.
17.2.5. Блок дискретного интегратора времени Discrete-Time Integrator Блок Discrete-Time Integrator служит для дискретного интегрирования времени (рис. 17.14). Обычно он служит для управления логикой работы модели, например для остановки процесса моделирования по заданному значению интеграла времени. Окно параметров дискретного интегратора представлено на рис. 17.14. Основными являются следующие параметры: • • • •
Integration method — метод численного интегрирования; External reset — сброс внешним сигналом; Initial condition — задание начальных значений выходного сигнала; Limit output — ввод ограничений на изменение выходного сигнала сверху Upper и снизу Lower; • Show saturation port — показ порта, дающего сигнал об ограничении; • Show state port — показ порта статуса интегратора; • Sample time — эталонное время;
Метод интегрирования выбирается из раскрывающегося списка. Возможен выбор одного из трех методов: • Forward Euler — прямой метод Эйлера; • Backward Euler — обратный метод Эйлера; • Trapeziodal — метод трапеций. 667
Глава 17. Нелинейные, дискретные и специальные блоки
—
hi
:
' / .. . .
г-Discrete-Time integrator
I Discretetime integration of the input signal. --Parameters :
--г---
i tntegratormethod: [Forward Eular External r&set; jnc,ne initial condition source: jjnten . initial corid^on:
p" limit output Upper saturation limit: Lower saturation limit: F~ Show saturation port Г" Show state port • • Sample time '{-1 for inhered):
OK
Puc. 17.14. Пример применения блока дискретного интегратора времени для интегрирования прямоугольных импульсов Расчетные соотношения для каждого из этих методов можно найти в справочной системе Simulink — они не приводятся, поскольку знание таких соотношений для практического моделирования, как правило, не требуется (достаточно знать суть соответствующего метода). На рис. 17.14 надпись внутри графического изображения блока дана для методов Эйлера, для метода трапеций она иная. 17.2.6. Блок дискретного фильтра Discrete Filter Блок Discrete Filter служит для создания дискретного фильтра, порядок и свойства которого задаются полиномом от частного 1/z в числителе передаточной характеристики (рис. 17.15). Параметрами дискретного фильтра являются векторы, содержащие коэффициенты полиномов числителя и знаменателя, и эталонное время. Надпись в графическом представлении блока зависит от выбранного полинома. 1 7 . 2 . 7 . Блок памяти Memory Блок Memory (Память) запоминает входной сигнал и смещает его на один такт времени (рис. 17.16). В окне параметров этого блока устанавливается параметр Initial condition — начальное состояние (по умолчанию 0). Если флажок Inherit sample time установлен, то берется шаг изменения времени, равный эталонному времени Sample time предшествующего блока. Если этот флажок сброшен, то используется шаг, равный 0,1 модельного времени. 668
17.2. Дискретные
Step
-**
1 1*0.Jz'1
•
•
рр
блоки
£
.... г Discrete FilterI • Vector expression for numerator and denominator. Co 1 ascending powers of 1/г, [ ' ; r Parameters I Numerator: P
I
Denominator:
• Sampe l time (-1 for inheited); OK
Help
Cancel
Рис. 17.15. Блок дискретного фильтра
h -M i emoy r
!•
I App^y a one tntegra&an йер dday, "Пте output is the previous input value к p Parameters""~~™ -— . -Nlial conditton: | р I f " Niert sample t^ne ] Г* Йгей feedfmjugh of input during linearization •
OK:
I .
Cancel
I •
Help
Puc. 17.16. Применение блока Memory 1 7 . 2 . 8 . Блок д и с к р е т н о й п е р е д а т о ч н о й ф у н к ц и и Discrete Transfer Fen Блок Discrete Transfer Fen служит для задания дискретной передаточной функции. Как и подобная непрерывная функция, она задается коэффициентами полиномов числителя и знаменателя этой функции переменной z. Рисунок 17.17 демонстрирует применение данного блока. 1 7 . 2 . 9 . Блок з а д а н и я д и с к р е т н о й ф у н к ц и и Discrete Zero Pole Блок Discrete Zero Pole служит для задания дискретной передаточной функции с заданными нулями и полюсами. Пример применения блока и окно установки его параметров представлены на рис. 17.18. Параметры этого блока аналогичны описанным для такого непрерывного блока.
669
Глава 17. Нелинейные, дискретные и специальные блоки
к.
Z+0.2S D5 i0T€tS Transfer Fen
1
1
Sec се
г Discrete Transfer Fen I Matrix expression for numerator, vector expression for с КЯкНВ I width equals the number of rows in the numerator. Сое f descending powers of z.
Parameters Numerator: Denominator: Sampe l time (-1 for inherited): ! 1 OK
Cancel
Help
Рис. 17.17. Применение блока Memory Discrete Transfer Fen
1
{2-1) zlz-0.5)
Discrete Zero-Pels
П Sccofi
r Discrete Zero-Pole I [ Matrix expression for zeros. Vector expression for poles _,, width equals the number of columns in zeros matrrx, or , vector. - Parameters Zeros:
Щ.. .
.
. .
.
•
,
.
,
.
.
•
.
•
.
. •
i Poles:
Gain: Sample time (-1 for inherited):
OK
Cancel
Help
Рис. 17.18. Применение блока Discrete Zero Pole 670
.
17.3. Библиотеки Simulink
Extras
1 7 . 2 . 1 0 . Блок Discrete State Space Блок Discrete State Space служит для формирования дискретного пространства состояний. Пример применения блока и окно установки его параметров показаны на рис. I7.19. П ;- D i s c r e t e S t a t e S p a c e
J
•
• с -
I Discrete state-space model: I yfn) = Сх{п) + Оиф) г Parameters
I
S
;
,
,
.
.
.
.
.
.
.
.
•
•
•
.
-
.
.
•
.
.
.
.
;
,
-
.
.
•
.
n
i
a
t
i
m
a
p
l
c
l
e
o
n
t
d
i
•
•
•
•
.
.
.
m
t
e
i
o
{
n
-
1
s
:
f
o
r
t
n
b
e
f
t
e
d
)
:
;
O
•
f
-
K
H
e
l
p
,
Рис. 17.19. Применение блока Discrete State Space Параметры блока те же, что у подобного непрерывного блока.
1 7 . 3 . Б и б л и о т е к и Simulink Extras 1 7 . 3 . 1 . О б з о р б и б л и о т е к и Simulink Extras Библиотека Simulink Extras является дополнительной библиотекой пакета Simulink, но, в отличие от ряда расширений этого пакета, входит в состав его поставки. Эта библиотека содержит наборы блоков с более широкими функциями, чем рассмотренные в Главах 15, 16 и 17 разделы основной библиотеки. Тем не менее это вовсе не означает, что применение этой библиотеки всегда предпочтительнее. Связано это с тем, что усложнение функций блоков, полезное при решении ряда специфических задач, оборачивается усложнением моделирования при решении большинства обычных задач. В связи с этим область применения библиотеки Simulink Extras не очень широка, и мы рассмотрим блоки этой библиотеки не так подробно, как блоки основной библиотеки. Такой подход оправдан и тем, что многие дополнения в библиотеке Simulink Extras носят частный и исключительный характер. Именно в плане отличий от основной библиотеки и будет рассмотрена библиотека Simulink Extras. Библиотека Simulink Extras представлена на рис. 17.20. Работа с этой библиотекой ничем не отличается от работы с основной библиотекой. 671
Глава 17. Нелинейные, дискретные и специальные
блоки .J П|..x.l
«library: simulinkextras File
Edit
View
Additional Sinks
format
Additional Discrete
Help
Additional Transfomaticns Flip Flcps Linearization Linear
Puc. 17.20. Раздел библиотеки Simulink
Extras
Как видно из рис. 17.20, библиотека Simulink Extras имеет следующие наборы блоков: • Additional Discrete — дополнительные дискретные блоки; • Additional Linear — дополнительные линейные блоки; • Additional Sinks — дополнительные получатели сигналов (регистраторы); • Flip-Flops — триггерные блоки; • Linearization — линеаризирующие блоки; • Transformations — блоки преобразования; • Aerospace Blocks — блоки моделирования авиационных систем (в Simulink 5 удалена в связи с переносом в раздел демонстрационных примеров). 17.3.2. Дополнительные дискретные блоки Additional Discrete Дополнительные дискретные блоки Additional Discrete представлены всего четырьмя блоками — по два варианта уже известных нам блоков Discrete Transfer Fen и Discrete Zero Pole (рис. 17.21). Их единственным отличием от описанных ранее блоков является возможность инициализации входов и состояний.
17.3.3. Дополнительные линейные блоки Состав дополнительных линейных блоков раздела Additional Linear показан на рис. 17.22. FJ Library: simulin He Edit View Format Help 1 z+0.5 Discrete Transfec Fen {w th initial states)
1 z+0.5 Discrete Ttanstet Fen (with initial Dutputs)
z{z-0.5) Discrete Zero-Pole fw th initial states)
12-1) ziz-O.E) Disaete Zero-Pole (with initial outputs)
Puc. 17.21. Раздел библиотеки Simulink Extras с дискретными блоками 672
17.3. Библиотеки Simulink Extras Блоки этого раздела можно разделить на две категории: PID-контроллеры и блоки типа State-Space, Transfer Fen и Zero-Pole, дополненные возможностями инициализации выходных сигналов и состояний. Последние мы рассматривать не будем ввиду идентичности их с подобными блоками, описанными ранее. Остановимся на реализации блоков PID-контроллеров. PID-контроллер (PID controller) — это довольно универсальный блок, выходной сигнал которого задается операторным выражением: OUT = Р + l/s + D,
И library: simulink
File Edit View Format Help 1 s+1 Transfer Fen {with initial states; >
>
I
Zere-Pc e {with initisl states)
s+1 Transfer Fen Iwith initial outputs) >
>
: * • ! >
s ! s + 1 !
Zfifo-Fc iwith initial D
Ax+ B-u >xу" = =• Cx • Du Stats-Space iwith initial outputs/
e
U
/
P
I
t
p
u
E
)
D
'ID Controller
где Р — входной сигнал, I — его интеграл и D — его производная. Параметр Р (по умол> PID > чанию 1) фактически задает компоненту выP I D Controlle« ходного сигнала, пропорциональную входноiwith Approximate му сигналу, параметр I задает пропорционаDerivative) льность интегралу входного сигнала и, наконец, параметр D задает пропорциональРис. 17.22. Раздел библиотеки ность производной входного сигнала. ВарьиSimulink Extras руя параметры Р, I и D, можно задавать разс дополнительными линейными личный вид выходного сигнала, в том числе в блоками виде интеграла или производной от входного. На рис. 17.23 дан пример применения PID-контроллера при входном сигнале в виде прямоугольных импульсов. Выходной сигнал задан как сумма входного сигнала и его производной. Установка параметра I = 0 исключает интегральную компоненту.
>
Pulse
P I D
C o n l , = l l «
S
=
C
"
1
[-РГО Controller (mask} Jink) I Enter expressions for proportional, integral, and derivator Р*1Л*0а
L
Parameter? Proportional:
I Integral: P I Derivative:
OK
Cancel
Help
Puc. 17.23. Пример применения PID-контроллера 673
Глава 17. Нелинейные, дискретные и специальные блоки Нетрудно заметить, что операция дифференцирования выполняется данным PlD-контроллером довольно грубо — на фронтах импульсов вместо пиков ничтожной длительности и бесконечной амплитуды видны пики вполне конечной амплитуды и длительности. Другой блок — PID controller with Approximate Derivative (PlD-контроллер с улучшенным вычислением производной) вычисляет выходной сигнал как OUT = 3 + l/s + Ds/(1/Ns+1). За счет применения дополнительного параметра N улучшается вычисление производной. Пример, показанный на рис. 17.24, показывает применение улучшенного PID-контроллера при входном сигнале в виде прямоугольных импульсов. Здесь отключена операция интегрирования, но включена операция дифференцирования. Это видно из установок в окне параметров улучшенного PID-контроллера. *
И
AlliB
; P!D(2) Controe l r ^ta i sk) (Jtnk} ;i Pi/D^l/Nl) Ene ir PrroortonaP il ). Integral.i}. and DenvavtiefD) and d ; Parameeirs :I Proporo tins
Denvativ
Puc. 17.24. Пример применения улучшенного PID-контроллера при обработке сигнала в виде прямоугольных импульсов Нетрудно заметить, что в данном случае дифференцирование входных прямоугольных импульсов хотя тоже не идеально, но намного лучше, чем в примере, представленном на рис. 18.23. Остальные блоки раздела Additional Linear библиотеки Simuiink Extras повторяют по функциям уже описанные блоки раздела Continuous основной библиотеки и отличаются только возможностью инициализации выходных сигналов или состояний. 1 7 . 3 . 4 . Д о п о л н и т е л ь н ы е б л о к и A d d i t i o n a l Sinks Раздел дополнительных блоков Additional Sinks содержит ряд новых виртуальных регистраторов (рис. 17.25). 674
17.3. Библиотеки Simulink Extras В него входят следующие блоки: Auto Correlator — автоматический коррелятор (используется с пакетом Signal Processing Toolbox); Averaging Power Spectral Density — анализатор спектральной плотности мощности с усреднением; Averaging Spectrum Analyzer — спектральный анализатор с усреднением; Cross-Correlator — кросскоррелятор; Floating Point Bar — утилита построения гистограмм; Power Spectral Density — анализатор спектральной плотности мощности; Spectrum Analyser — анализатор спектра.
File Edit View
Pcwef Sp-ectral Averaging Density Pows/ Spectral Density
Sp-ectrum Analyzer
Averaging Spcctfum Analyzsr
Auto
Нетрудно заметить, что данные блоки относятся к двум важным разделам моделирования — статистическому анализу и анализу спектров сигналов (по уровню и по мощности).
Floating Bar Plot
17.3.5. Блоки спектрального анализа
Рис. 17.25. Раздел дополнительных блоков Additional Sinks
Рассмотрим, как наиболее характерный, блок Averaging Power Spectral Density. Он служит для наглядного представления формы сигналов и их энергетического спектра (рис. 17.26). Спектр (в данном случае прямоугольных импульсов) представляется амплитудно-частотной характеристикой мощности с усреднением и фазочастотной характеристикой.
JUI
Fo-v .er Sc€33't "[A •veragn ig Power Specrta! Densy ti {mask} 0«nk) Po ls t the averaged PSD of the n iput. г - Parameters
••-— -
1 length of buffer; [Too Number of points for fft:
Plot after how many points: [100 Sample time:
Puc. 17.26. Пример применения блока Averaging Power Spectral Density
675
Глава 17. Нелинейные, дискретные и специальные блоки Блок имеет следующие параметры: • Length of buffer — размер буфера;
• Number of point for fft — число точек для быстрого преобразования Фурье; • Plot after how many points — построение графика после задания числа точек; • Sample time — эталонное время. На рис. 17.27 представлено полностью открытое окно анализатора спектра. Оно содержит три графика: • график временной зависимости входного сигнала; • график амплитудно-частотной характеристики мощности входного сигнала; • график зависимости фазы от частоты. Time history
.I
;|
0
„Ц 2
"1
;
\ I I 3
4
\ \
j
!
! I
\ I
i !....„.„.. 7
• — "б Гит» (весы)
D S
Aveiage Power SpecUaJ Density
Fn quency itsd S'seg) Average Po wer Spectral Densrty(priasB i 0
--
^
J
^
^
1000 -
20 00 3000 4Ш0 5
tO
15 Frequency Irad3/sec)
20
25
30
Puc. 17.27. Графики, создаваемые блоком Averaging Power Spectral Density Масштабы графиков линейные. Спектр вычисляется приближенно на основе быстрого преобразования Фурье (БПФ). Нетрудно заметить, что спектрограмма гораздо больше напоминает кривые, созданные реальными анализаторами спектра, чем получаемые теоретически. В частности, линии первой и высших (в данном случае нечетных) гармоник представлены колоколообразными кривыми, а не четкими вертикальными отрезками прямых. Как достоинство спектрограмм можно отметить широкий диапазон представления углов без характерных разрывов фазы, возникающих при ограничении изменения фазы, например в диапазоне углов от О до 360 градусов (от 0 до 2п радиан). Остальные анализаторы спектра используются совершенно аналогично и имеют такое же окно представления результатов спектрального анализа. Их различия вытекают из наименования блоков (см. выше). 1 7 . 3 . 6 . Блок кросскоррелятора Cross-Correlator Блок Cross-Correlator служит для построения графиков поданных на его вход сигналов и текущего коэффициента корреляции, отражающего степень взаимосвязи изменений сигналов. Напомним, что если оба сигнала меняются идентично, 676
17.3. Библиотеки Simulink
Extras
то коэффициент корреляции равен 1, а его значение 0 означает различное изменение сигналов. Рисунок 17.28 показывает применение этого блока в случае, когда на входе действуют сигналы разного вида (синусоида и пилообразный импульс) с одинаковыми частотами.
ФШ\;М Е If Ф
.} Cross correlator
1Н9НШ Time history
г Crass Correlator Plots the crow cwreiation of the input «gnais. R s signal processing toolbox.
I Length of buffer. Hot after how many points; P
Л 4 j1л \ / 0.5 / \ / j \/ 0 V \ J\\ -05 /\l / 10 112 0.4 / 02I 0 -0.2
\
A /i I\/
i\
У
1 1i
I
A
i
/ I
Г\ \ / \ / \/
/
\ i i \ /i 17 8
15 16 13 14 Time (sees) Cras correlation (unb as&d
-Inl x|
X \
1
19
\ 1\ \ \ i
А Г\ Л /\ \ ' \\ \ I \I 2 1 3 17 16 \1j U 1 10 |1 m Tie5(sees)16 19
Puc. 17.28. Пример применения блока кросскоррелятора Параметры этого блока имеют то же назначение, что и одноименные параметры блока Averaging Power Spectral Density. 1 7 . 3 . 7 . Блок автокоррелятора Cross-Correlator Блок автокоррелятора служит для вычисления автокорреляционной функции сигналов. Пример его применения и окно установки параметров блока представлены на рис. 17.29. В данном примере вычисляется автокорреляционная функция белого шума — она, испытывая случайные флуктуации, приближается к нулю. 1 7 . 3 . 8 . Обзор раздела библиотеки Flip Flops Раздел библиотеки Simulink Extras Flip Flops содержит генератор тактовых прямоугольных импульсов и 4 блока триггеров (рис. 17.30). Все они описаны ниже. 1 7 . 3 . 9 . Генератор тактовых импульсов Clock Генератор Clock является самым простым из источников прямоугольных импульсов. Он создает сигнал в виде импульсов единичной амплитуды при скважности, равной 2 (напоминаем, что скважность есть отношение периода импульсов к' их длительности). 677
Глава 17. Нелинейные, дискретные и специальные
D .о* У ё§. X
блоки
a^fiiSBt* Time history
I Auto Correlator (mask) fyfk) I Rots trie auto correlator! of ihe trtpU i Requires agnaf orocessmg loofcox. -"Parameters — I Length of buffe
10
Pic* after how many points'
1 0.6
Cmcel
13
18 19
1
1 || 1
0 OK
U 15 16 17 Time (sees) Auto correlation (unbiased)
11 12
JHdp
i . || If
J 1.
05 10
11
12
13
A VvwJ
14 15 16 Time (sees)
Puc. 17.29. Пример применения блока
17
18 19
автокоррелятора
|[=llibrai>r:»mulinh_extras/f^ftoie 1 File Edit View , m Help
-
I
n
l
x
l
•
С
JUl Clock
CLK 1С >
R
da:*
S-R Flic-Flop
!
C^R
C L K
'"
CFIic-Flcc
-K Flic-Flcc
Note: J-K Fl p-Flop is rJegative-Edge-Triggered Puc. 17.30. Раздел библиотеки Flip Flops
r DRp i Rop Imask) link} i D Rp i -Hop Bo l ck I'CLR 1 Flic-Flcp
OK
|
Cancel
Help
Cancel
Help
' D Latch Rip-Пор Block OK
|
|
Apr.!-,'
Puc. 17.31. Блоки D-триггеров и окна их параметров 678
17.3. Библиотеки Simulink
Extras
Единственным параметром этого источника импульсов является период (в тактах периода эталонного времени). Этот источник обычно используется для тактирования работы триггеров. 17.3.10. Триггерные блоки Раздел библиотеки Flip Flops содержит 4 блока триггерных устройств, реализующих следующие типы стандартных триггерных устройств: D Flip Flop, D Latch, J-K Flip-Flops и S-R Flip-Flops. На рис. 17.32 показаны блоки D-триггеров и окна установки их параметров. Эти триггеры не имеют каких-либо устанавливаемых параметров. Для JK- и RS-триггеров в окне установки параметров (рис. 17.32) задается единственный параметр — уровень инициализации. тшт „„-»,.».-.., j JKRpRop (mask) ft*) [ J-K Hp i-Rap Bo* (Negavtie Edge Tnggerad) Parameter initial condo tin (state of Q): Cancel
Heo t
I S-R Hpi-Hop Bock -• • Paramee trs Insa i i condo tin (state of Q):
Рис. 17.32. Триггерные блоки JK и RS и окна установки их параметров
1 7 . 3 . 1 1 . Пример построения широтно-импульсного модулятора Триггеры часто используются для построения импульсных устройств. На рис. 17.33 дан пример построения модели широтно-импульсного модулятора (ШИМ) на основе RS-триггера. Названия блоков в этом примере даны на русском языке. Работа модулятора основана на сравнении быстро изменяющегося пилообразного сигнала, созданного релаксационной замкнутой системой на базе RS-триггера и интегратора, с медленно изменяющимся треугольным входным сигналом. Это меняет скважность импульсов, создаваемых на одном из выходов триггера. Обратите внимание на применение в этой модели заглушек — терминаторов на неиспользуемых выходах триггера и интегратора. Для интегратора следует установить параметр External reset равным rising, кроме того, должен быть установлен флажок Show state port. Подобная установка внешнего сброса задает у входа блока интегратора особый знак переключения и задает появление дополнительного выход — выхода состояния. Эта модель является примером моделирования реальной электронной схемы с помощью стандартных средств пакета Simulink. Подобные модуляторы в настоящее время выпускаются в виде интегральных микросхем. Они используются в измерительных устройствах и в импульсных преобразователях электрической энергии. 679
Глава 17. Нелинейные, дискретные и специальные блоки Выход ШИМ
Мупьтиппексср
Mac LJiati и рующи й у:ипитель
, /- л
Рис. 17.33. Пример построения модели широтно-импульсного модулятора 1 7 . 3 . 1 2 . Р а з д е л Linearization Раздел Linearization содержит всего два блока — дифференцирующий блок и блок заданной временной задержки. Работу дифференцирующего блока поясняет рис. 17.34. Здесь показан случай дифференцирования прямоугольных импульсов от источника Clock, описанного выше. Качество дифференцирования весьма низкое. Это связано с тем, что установлен параметр Switch value = 0, что отключает линеаризацию процесса дифференцирования. Достаточно установить указанный параметр равным 1, и качество дифференцирования намного возрастает — см. пример на рис. 17.35.
т. Colck
_г_х Sospe
-iDlxl
aeiivative fw linearization
ao m (n a sk)rtan n (ilsk )u DenSw vhia vid ezw fo ritin ive ltiep ao 1 c t e d e v r i a h t r p e r e f r fnc oitn app co rom \n tIeanzsston. 1 Sw c th i va ule (1Do fnirlefo arnzasm o tin.uao litn): o jDevriavite consa /(+N:) tntss hoc N pl O K |Cancel He Puc. 17.34. Пример работы блока дифференцирования 680
17.3. Библиотеки
пп
Simulink
Extras
Scop*
Swtiched ds-ivativ= for
r Derivative for linearization (mask} Jjink)11 I Switched derivative with proper transfer function appro ; linearization. •• Parameters -— — Switch value (1 for linearization. 0 for simulation): P Derivative constant Ns/{s*N): OK
Hep l
Cancel
Puc. 17.35. Пример дифференцирования с повышенным качеством Помимо указанного параметра в этом блоке задается еще один параметр — константа дифференцирования (она входит в знаменатель операторной передаточной функции блока). 17.3.13. Блок заданной временной задержки Блок заданной временной задержки Switched transport delay for linearization представляет собой линейное устройство временной задержки. Длительность задержки задается параметром этого блока Time delay. Применение блока для задержки синусоидального сигнала иллюстрирует рис. 17.36.
го Lfanscutaa «ly i- Transport Delay ! £©ply specked delay to the tnpU signal. Вей accuracy is achieved v the delay is lafserthan the simulation step size.
Time delay:
JnifiainpU: [1024 Fade order for linearization):
Г" Direct teedthrough of input durtng iineaniation
OK
I
Cancel. 1 . I
Help
Puc. 17.36. Пример применения временной задержки 681
Глава 17. Нелинейные, дискретные и специальные
блоки
В окне параметров временной задержки помимо параметра Time delay устанавливается начальное значение входного сигнала Initial input, начальная емкость буфера Initial buffer size и порядок Паде-линеаризации.
17.4. Блоки преобразований 1 7 . 4 . 1 . Обзор раздела преобразований Transformations Раздел преобразований Transformations содержит 8 блоков для осуществления типичных преобразований — это преобразование температуры, углов и систем координат (рис. 17.37). Соответствующие формулы преобразования появляются в информационном поле окна этого раздела, а также в окнах параметров блоков. В связи с этим расчетные формулы преобразований не приводятся. 1 7 . 4 . 2 . Блок преобразования температуры Celsius to Fahrenheit Работа блока Celsius to Fahrenheit, который преобразует температуру, выраженную в градусах Цельсия, в температуру, выраженную в градусах Фаренгейта, демонстрирует рис. 17.38 сверху.
| П Library:
_
)
[ ]
|
x
|
File Edit View Format Help
к
'••
C2F > [
V
Polar to Cartesian >
C
a
r
t
e
s
P
o
l
a
a
n
t
a
r
S
p
e
h
>
s
e
i
r
r
C
a
i
2
n
1;
c
t
a
o
t o
Wock n.irjiiit's.: ( >I:I,IIS lo I jhmnhci! Cei;:iusToFahrenheit (mask Conversion from degrees Celsius to degrees Fahrenheit. F=9/5"C+32
;
OK
l
Cancel
Help
F2C
F
> a n t 1
C
F
D2R
e
a
l
h
s
r
>
R
i
u
s
e
n
h
2
t
o
i
t
e
t o
R
o
a
d
D
D
i
a
n
s
e
g
r
e
e
D i s p l a y i
C e l s i u s
Paianeters: fehretiheiltoCelsiui • FahtenheitToCelsius (mask) (link) Conversion Irom degrees Fahrenheit to degrees Ceisius.
>
t
F a h r e n h e i t
s C a n c e l
Рис. 13.37. Раздел библиотеки с блоками преобразований 682
D i s p l a y
F a h r e n h e i t
X
t
C e l s i u s
o
»
'•.
C
F2C
Degrees to Radians
i
\
I
Fahrenheit to Celsius У
.
Л-
Sphe/ical to Cartesi a n >
C o n s t a n t
H e l p
w
.
.
,
-
Puc. 17.38. Примеры преобразования температуры
17.4. Блоки
преобразований
1 7 . 4 . 3 . Б л о к п р е о б р а з о в а н и я т е м п е р а т у р ы Fahrenheit t o Celsius Работу блока Fahrenheit to Celsius, переводящего температуру из градусов Фаренгейта в градусы Цельсия, показывает также рис. 17.38 (снизу). 1 7 . 4 . 4 . Блок п р е о б р а з о в а н и я у г л о в Degress t o Radians Блок Degress to Radians служит для преобразования углов, выраженных в градусах, в углы, выраженные в радианах. Работу блока поясняет рис. 17.39 (снерху). 1 7 . 4 . 5 . Блок п р е о б р а з о в а н и я у г л о в Radians t o Degress Блок Radians to Degress служит для преобразования углов, выраженных в радианах, в углы, выраженные в градусах. Работу блока поясняет рис. 17.39 (снизу). 1 7 . 4 . 6 . Блок п р е о б р а з о в а н и я к о о р д и н а т C a r t e s i a n t o Polar Блок Cartesian to Polar служит для преобразования прямоугольных координат точки на плоскости в полярные координаты (рис. 17.40). 1 7 . 4 . 7 . Блок п р е о б р а з о в а н и я к о о р д и н а т Polar t o C a r t e s i a n Блок Polar to Cartesian служит для преобразования полярных координат точки в прямоугольные координаты на плоскости (рис. 17.41). 17.4.8. Блок преобразования ЗО-координат Cartesian t o Spherical Блок Cartesian to Spherical служит для преобразования прямоугольных координат точки в пространстве в сферические координаты (рис. 17.42). О 5236]
egree; to Constant DR ada i ns
['L-pidi,i -*l
pOegreesToRadian*[ \ Convetsion from Dseegsr (o Radians. •R«p/i18QT> OK |
Cancel |
Constant! Rada i ns to Degiets
I
Hep l Display"!
г RadiansToDegiees Ema«kj (link)
7™]
\ Conversion from Radians to Degrees. J D=180^pi"R OK
Cancel
Help
Рис. 17.39. Примеры преобразования углов 683
Глава 17. Нелинейные, дискретные и специальные блоки
\у
'
Display
*L±lJ—1 [7 Cartesian to ^^ I
Display Constant! Btodk Patametetr CartesiantoPota
L
4
г Cart2Polar (mask)
! Transformation fromcartesian to polar coo I [x,y]->[r, theta] ; r» sqrt(xA2 + ул2); j theta * atanfy/x); OK
Cancel
Help.
Puc. 17.40. Пример преобразования прямоугольных координат точки на плоскости в полярные координаты
D sip aly PкoаlТ т П и Г ^ t
1
г,:--
Blew rarametmi: Polar to CettesM - Polai2Cart (mask) (link) \ Transformation from polar to cartesian coordinates. i [r.Iheta]•> (x,y] .•••.. I x = rM cos(theta); I> j »r" sin(theta); Cancel
Puc. 17.41. Пример преобразования полярных координат точки на плоскости в прямоугольные координаты
X Spherical
f
Dsipaly
1.107]
Displayi
Display2 r Cart2Sph £тазк) (link) 1 Transformation from cartesian to spherical coordinates. 1 [к,у,г]->[г, theta, phi) ) p « hypot(x,y); г ] theta = atan^i/xj i phi» atan(p/z); OK
Cancel
Help
Puc. 17.42. Пример преобразования прямоугольных координат точки в пространстве в сферические координаты
684
17.5. Библиотека верификации модели — Model Verification 1 7 . 4 . 9 . Б л о к п р е о б р а з о в а н и я З О - к о о р д и н а т Spherical t o C a r t e s i a n Блок Spherical to Cartesian служит для преобразования сферических координат точки пространства в прямоугольные координаты (рис. 17.43). -
Constan
c
•
.
p
*
3
l
5
a
0
2
5
1
|
y
I
2 jnstan
"
0
0
X
.
7
6
*
1
D
i
s
p
l
1
j
y
i
0
Constant Block Parameters Spherical In Cartesian
6
h
p
5
l
^
4
0
3
|
2
E3<
j Tfansforrnaton from spherical to cartesian coordinates. j [t, theta, phi•>[x.y.z] )" cos(theta); \ x »f" sin(pfi
)" sin(theta): • 1 у * г * sin(ph | 2 = I " COS(p *
OK
C
.
a
n
c
e
l
.
.
H
e
.
l
•
.
/
"
.
:
p
Puc. 17.43. Пример преобразования сферических координат точки в пространстве в прямоугольные координаты
17.5. Библиотека верификации модели — Model Verification 1 7 . 5 . 1 . Обзор блоков библиотеки Model Verification Новой и довольно обширной библиотекой в Simulink 5/6 стала библиотека Model Verification (рис. 17.44). По существу эта библиотека содержит достаточно представительный набор блоков для контроля сигналов моделей. Всего данная библиотека содержит 10 блоков. Какого-либо деления на категории или классы библиотека не содержит. Однако нетрудно заметить, что блоки делятся на блоки контроля со статическими уровнями и блоки контроля с динамическими уровнями. 17.5.2. Блоки контроля со статическими уровнями Блоки контроля со статическими уровнями имеют в названии слово Static. Имеется четыре таких блока: • контроль Bound; • контроль Bound; • контроль • контроль
минимального статического уровня сигнала — Check Static Lower максимального статического уровня сигнала — Check Static Upper нахождения сигнала в статического зоне — Check Static Range; нахождения сигнала вне статической зоны — Check Static Gap.
Рассмотрим для примера работу блока Check Static Lower Bound. Она показана на рис. 17.45. На вход блока подан синусоидальный сигнал. Блок настроен на по685
Глава 17. Нелинейные, дискретные и специальные блоки LT3Ubrarv:simulink/ModelVerificatii.is Fjie
Edit
View
? or mat
Help
Run-time Model Verification
Lc-л'е? E c - L ^ d
Uop"5' Bc-un<j
Static Gap
Static F
F
Check Dynamic Lew*' Вс-ьпз
- ,-!•-,. ." J - • i
C h e * Input Resolution
. 17.44. Окно библиотеки Model Verification
•
'
j
:•
1
l
.
.
o
w
e
r
P
a
r
a
I
s
*
m
*
*
••
b
o
u
e
s
e
t
n
r
>
d
.
u
n
a
o
d
:
;и f/ : p
кт-diisve boundary ЁпгЫе assertion
! Simulation caflbeck when s ; 1 1 P" StOi5 sif!)diii!Si vr^eii ass» i o n fa is I™ DutoU assertion aigvei • W e c i c c n t w j e : [grap^c
Ca^ce!
rl tjdp
Рис. 17.45. Пример применения блока Check Static Lower Bound рог —0,5, и когда сигнал на входе блока достигает этого уровня, то моделирование прекращается. При этом выдается сигнал ошибки и построение синусоиды на входе контрольного осциллографа прекращается. Блок приобретает характерную рамку, используемую для индикации ошибки наряду с выдачей окна диагностики. Окно диагностики показано на рис. 17.46. Окно дает информацию о том, в каком блоке наступило прерывание (ошибка) и дает короткий отчет об этом. Команда Remote highlighting в позиции View меню основного окна системы Simulink позволяет сбросить индикацию ошибки и повторить моделирование. 686
17.5. Библиотека верификации модели — Model
Verification
1 Simulation OiagnKti»:....! View Font Size j Message
Source
j Reported bvj ssertlon detected In block "SB1 /Check Static Lower Sound' at time 3 685191
V ssi.'Check Static Lower Bound Assertion delected in block 'ss I,'
Lower Bound'at time 3 665191 Open
Рис. 17.46. Окно диагностики при прерывании
Help
моделирования
Окно параметров блока (рис. 17.46) позволяет задать следующие параметры: • Lower bound — контролируемое нижнее граничное значение сигнала; • Inclusive boundary — включить граничное значение сигнала в условие проверки; • Enable Assertion — включить реакцию (при отключении этой опции проверка осуществляется при отсутствии реакции); • Simulation callback when assertion fails — подключение М-функции, которая будет исполняться при наличии реакции; • Stop simulation when asserting fails — остановка моделирования при невыполнении условия; • Output Assertion Signal — создание дополнительного выходного порта, на который выводится логический сигнал (он меняется с TRUE на FALSE при невыполнении условия проверки); • Select Icon Type — выбор из списка вида пиктограммы блока (graphic — графический, text — текстовый). Остальные блоки имеют аналогичную идеологию применения и аналогичные параметры. Блоки с зонами контроля имеют два основных параметра для установки верхнего и нижнего уровней зоны. 17.5.3. Блоки динамического
контроля
Для контроля уровня сигнала в условиях изменения контролируемого уровня служат 4 блока: • контроль минимального динамического уровня сигнала — Check Dynamic Lower Bound; • контроль максимального динамического уровня сигнала — Check Dynamic Upper Bound; • контроль нахождения сигнала в динамической зоне — Check Dynamic; • контроль нахождения сигнала вне динамической зоны — Check Dynamic Gap. Для приема изменяющегося уровня первые два блока имеют дополнительный вход, а вторые — два входа (для нижнего и верхнего уровней зоны). Рисунок 17.47 иллюстрирует применение блока Check Dynamic, контролирующего вхождение синусоидального сигнала в постепенно сужающуюся зону. Зона задается двумя источниками линейно-изменяющегося сигнала. На рис. 17.47 представлены также 687
Глава 17. Нелинейные, дискретные и специальные блоки окно параметров блока Check Dynamic и осциллограммы сигналов — синусоиды и порогов, задающих зону. *]|—II III III • — t f e
Sin* «•»• - C h e c k s _ D R a n g e ^ n a s k ) {link} Assert t h a t o n e signal always lies b e t w e e n t w o other signals. T h e first ! input is t h e u p p e r - b o u n d signal; t h e s e c o n d input, t h e b w e r - b o u n d ; t h e : third input, t h e test signal, •• Parameters
—
•
••
-
•
: p " Enable assertion . Simulation c a l l b a c k w h e n assertion fails {optional}:
f*' Stoo sm i ua lto in when asserto i n f ais Г* Output assertion a^ial Select icon type; |graphic Help
Puc. 17.47. Пример применения блока Check Dynamic для контроля наличия сигнала внутри динамически изменяемой зоны Аналогичным образом нетрудно построить модели, демонстрирующие работу других блоков.
17.5.4. Блок контроля нуля Assertion Блок Assertion останавливает вычисления, если будет обнаружено достижение сигналов нулевого уровня. Рисунок 11.48 показывает остановку вычислений в момент, когда ступенчатый сигнал, имеющий значение I, меняет значение на 0. На рисунке видна закраска изображения блока в момент останова, окно вывода диагностического сообщения, окно параметров блока Assertion и осциллограмма начальной части ступени — последующая часть не видна, так как моделирование было остановлено. Параметры этого блока вполне очевидны и описывались ранее. Следует отметить, что момент достижения нуля должен быть точным. Иначе может произойти пропуск момента пересечения сигналом нуля, например, если сигнал синусоидальный. 1 7 . 5 . 5 . Блок контроля градиента дискретного сигнала Check Discrete Gradient Для контроля градиента дискретного сигнала используется блок Check Discrete Gradient. Блок останавливает моделирование с выдачей диагностического сообщения, если градиент дискретного сигнала достигает заданной величины. Рисунок 17.49 иллюстрирует применение этого блока. Здесь источник сигнала задает синусоидальный дискретный сигнал с амплитудой 5 и фазовым сдвигом pi/2. Фактически это означает генерацию сигнала косинуса, градиент которого нарастает во 688
17.5. Библиотека верификации модели — Model Verification
*M*1
j- Assertion I Assert that the input signal is non-ге0. The default befianofin the • aosetice of a calfeack is to outout aeroi message *+ien the assettior ] tails г Parameters
—
i Simulation ceHback when assertion'alls' i 1 | jV Stop smiatton when assertion ah | Sample tPne (-1 f or irtherted) 1 I1 OK
]
Caned
. 17.48. Пример применения блока Assertion . .. ..
D ! c* H «
^
••Checks_Giadient (mask) l i n k ) — — - —
ж p
| ! A s s e f , ||iat the sbsuJuie value ot the difference betw disciele signal is less tlian an i^pef bound Pwametets ] Maximum godient:
P" Enabe l asserto in Sm i ua lto i n calbact when awetion fails (opto in I P^ 5 top sm i ua l to i n when asserto i n faSs
Г ГMes;
P's^c"
Sumra
Г" Output asseition signal Select icon t>pe: ] graphtc
Cancel
Help
;y untitlei'Cherk Dsicrete Grade int Asserto i n detected in 'untie l d/Cre i ck Dsicrete Grade i nt' at tm i e 1.000000
Open Ready
Не^э
I
Close |100%
:
FixedStepDiscrete
Puc. 17.49. Пример применения блока Check Discrete Gradient времени во время первого четвертьпериода. Остановка моделирования происходит в момент, когда градиент этого сигнала достигает установленного значения 0,4 (см. установки в окне параметров блока). В этот момент обрывается построение осциллограммы дискретного сигнала. 689
Глава 17. Нелинейные, дискретные и специальные блоки Кроме параметра Maximum Gradient (максимальное значение градиента) в окне установки параметров имеется ряд параметров, которые уже были описаны. 1 7 . 5 . 6 . Блок контроля разрешения Check Input Resolution Блок Check Input Resolution служит для контроля разрешения, которое задается 3 как и/Ю . Если разрешение входного сигнала достигает установленной величины, то моделирование прекращается и выдается диагностическое сообщение — см. пример на рис. 17.50.
i-
О ffriillrYi'iffl'i View Font Size Message J Bock error
Source | Reporied bvj CfiecktnDU smuinK
(Assert on detected in brack xheck гч?*Спеск nout Res.. J±l
V cbeck_res/Chetk Input Resolution Assertion detected in block'check resfChetkinput Resolution'at time 4 000000
Open rChecfcs_Reedution*naekHfnkj •' i Assert that the input stgnal has a specjf*d rssoiubon. if the resolution IB a | scalar, the npul stgnal mus! be a muSipie of thereaitionwiHun a lOe-3 j tolerance tf the resobtion s a vector, the mpuf signal must equal an i dement d therasoJutionvector.
I
Help J
Close „iDl-XJ
0 :
.a
•'
••"•:• ••.:".:/••. v:
p Parameters : Resduttsn: 1 (У ЕпаЫе assertion !
-
•
SimuJatton caifoadc when asserton fak fopt^onal): Stop simyiaticn wnen assertion * Output аваеПюп signal
Puc. 17.50. Пример применения блока Check Input Resolution В этом примере блок Step настроен на генерацию ступеньки с начальным значением 1 и конечным 1,01 с длительностью 4. В момент появления ступеньки блок срабатывает и моделирование прекращается. Параметры в окне установки параметров описаны выше.
17.6. Библиотека дополнительных утилит Model-Wide Utilities 1 7 . 6 . 1 . Обзор блоков библиотеки Model-Wide Utilities Новой в Simulink 5/6 библиотекой является Model-Wide Utilities. Это небольшая библиотека, окно с блоками которой представлено па рис. 17.51. Библиотека Model-Wide Utilities содержит всего 4 блока. Два относятся к линеаризации моделей, а другие два к сопровождению модели. 690
17.6. Библиотека дополнительных
утилит Model-Wide
Utilities
И library: simufotk/ File Edit View F OrTf*at Help Linearization of Running Models S
T-1
Trigger-Based Linearization
Timed-Based Linearization
Documentation Model Info
ti
Рис. 17.51. Состав библиотеки Model-Wide
Utilities
17.6.2. Блок линеаризации модели в заданное время Timed-Based Linearization Блок Timed-Based Linearization служит для линеаризации модели в заданное время. Как уже отмечалось, моделируемая модель имеет представление в пространстве состояний. Она может быть превращена в линейную модель, описываемую матричными уравнениями (16.1) и (16.2), в заданный момент времени Т. Это и выполняет блок Timed-Based Linearization. Заметим, что этот блок не имеет ни входа, ни выхода. Он включается в модель и в заданный момент времени создает в рабочей области системы MATLAB структуру массива с HMeHeM*_Timed_Based_Linearization, где * — имя текущей модели. Эта структура имеет следующие поля: • а, Ь, с, d — матрицы (векторы) линейной модели (16.1) и (16.2); • State Name — имена переменных в пространстве состояния модели; • Output Name — имена выходных переменных; • Input Name — имена входных переменных; • OpenPoint — рабочая точка с параметрами переменных состояния х, сигналов и и времени t; • Ts — такт дискретности. Рисунок 17.52 показывает применение блока Timed-Based Linearization для простой модели, содержащей источник синусоидального сигнала, интегратор, ограничитель и осциллограф. На рисунке представлены осциллограмма работы модели и окно установки параметров блока Timed-Based Linearization. Чтобы увидеть действие блока, надо открыть выовер рабочей области MATLAB. В правой части рис. 17.52 показано окно системы MATLAB с вкладкой вьювера. В ней видно появление структуры model_lin_Timed_Based_Linearization. Под окном MATLAB показано окно редактора массивов с данными об этой структуре. 691
Глава 17. Нелинейные, дискретные и специальные
блоки
3 й © - ' в и if
Usn ig Toob lox Path Cache. "^ To gel started, see lct "MATUA -liiJ Workspace j Curent \
.
:
•
.
a
• Triggered ЬпеапгзЬог
f.(S!
-U
• ;\
V •
I Stze. |~~ jej
. Generate* ttnear modeli '
—
—
1 Tnggeftype: j r S : n g d
| Sair№ctoeШ Ineanz M
! •
m
o
d
e
l
)
c:
[Oxl double]
4!
[]
|
1
OutputSaae: (Oxl ceil) InputNaae: {Oxl
cell)
OpeiPoint: [lxl
sttuct]
G
O
K
j
C
a
n
c
e
l
|
'
"
"
B
*
j
•'
v
Та: О '
l
t
e
1
n
T
^!..§.E!!.?l.. ' o^ '- ' - '
i a
Puc. 17.52. Пример применения блока Timed-Based
^
e r
-
B a s e t l
1
-- -
i n e a r
'
z s 1 l o r i
.
Linearization
1 7 . 6 . 3 . Блок линеаризации с запуском Trigger-Based Linearization Блок Trigger-Based Linearization служит для линеаризации модели в момент времени, задаваемый запускающим сигналом, поданным на вход Trigger. Рисунок 17.53 поясняет применение этого блока. От примера рис. 17.52 данный пример отличается применением иного блока линеаризации и источника запуска Step с параметров Т = 5. В окне параметров блока Trigger-Based Linearization, помимо обычного параметра Simple Time, имеется список режимов запуска Trigger type. Возможны следующие режимы запуска: • • • •
rising — по нарастанию (положительному фронту) импульса запуска; falling — по спаду (отрицательному фронту) импульса запуска; either — по любому перепаду (фронту); function call — по S-функции, задающей логику работы модели.
1 7 . 6 . 4 . Блок задания информации о модели — Model info Блок Model info служит для задания информации о модели. Этот блок не имеет ни входов, ни выходов и служит для подготовки и вывода (в прямоугольнике из черных линий) информации о модели, которую вводит пользователь. Пример начала работы с блоком Model info приведен на рис. 17.54. Поначалу блок Model info пуст. Его активизация мышью вызывает появление окна ввода и редактирования данных о модели. Это окно представлено в правой части рис. 17.54. В левой части окна имеется следующий список данных о модели: • Created — данные о создании модели; • Creator — разработчик модели; • Modified by — изменения модели; 692
17.6. Библиотека • • • • •
дополнительных
утилит Model-Wide
Utilities
Modified data — дата модификации модели; Modified comment — комментарий к модели; Model version — версия модели; Description — описание модели; Last Modification Date — последняя дата модификации модели.
r Tnggerec Unearziato in fna^l ^nk) i Generates n ilear mode»! n the bese workspace whe Tnggertype: [rs in ig Sampel tome(of tneane id mode!);
c:
[Oxl double)
d:
[J
OutputHane; InputJJaae: OpetPoint: Ts:
{Oxl cell} (0x1 cell] [lxl sciuct 0
" • ~ ^ _ Array Editor iriggerJm^rigggf^Based^Liriearlzatlon^ J _
Рис. 17.53. Пример применения блока Trigger-Based Linearization
.£!'
Ene tr tert and tokens to dsipa l y in Model Into btock: "1"i hggeHri ;Deated> C : reaclK> ьяконовВ П ModfiedDate> июля 2004 r. ModifiedCommenO о демонстрэционная :Descnption> i& предкэзкэчена для иеармзации модели в адаммый перепдйом с :LaslModificationDdte> июля 2004 г |
to hcu l de configuaiofi manager properte i s, use SET_PARAM to specfyi a cctiVg i ufato i n manager tor this model Use the General Source Control Preference* to see l ct a source contFol syse tm o l r new modesl. Horizontal lex! alignment. OK
R Showblock « .
Centei
1
Cancel
j
НЫр
Аи*
Puc. 17.54. Начало подготовки информационного блока модели 693
Глава 17. Нелинейные,
дискретные и специальные
Кроме того, в окне можно установить две следующие опции:
блоки
Г\
\/
Sine Wave Integratcr Satu?3tisn Scop«
• Horizontal text alignment — способ выравнивания надписей по горизонтали (Center — по центру, Left — по левому краю, Right — по правому краю); • Show block frame — показ рамки блока.
St€C
С помощью кнопки --> соответствующую строку описания можно ввести из левой половины окна в правую и задать соответствующую надпись. После составления описания модели достаточно нажать кнопку ОК. Вид блока изменится — вместо надписи появятся введенные пользователем данные. Блок можно растянуть с тем, чтобы все введенные данные были видны (рис. 17.55).
Model triggsfjir Wed Jul 21 01:22:012 0 3 4 Дьяконов В. П. Wed Jul 21 07:02:25 2 0 0 4 !9 июля 2004 г Этс де*,*снстрэционна?
«дель
С и з nc«AH3jH3t-«H3 д л а и л л ю с т р а ц и и л и н е а р и з а ц и и wc-дели s u c i / е н т , 2 1 - J u l - 2 0 0 4 0S:3.0
43
21 июля 2004 г
Рис. 17.55. Модель с информационным блоком
17.6.5. Блок документирования модели — DocBlock Блок DocBlock служит темы MATLAB. Двойной текстовый редактор (рис. закрытии окна редактора
для записи данных о модели с помошью редактора сисщелчок левой клавишей мыши на этом блоке открывает 17.56) и позволяет записать в его окне любой текст. При текст будет сохранен.
пес
File
Edit
View
Text
Debug
Breakpoints
W eb
D 1
Type
your
к
W nd iowHe pl
documentation here.
I
Lnl:
Рис. 17.56. Применение блока DocBlock
694
3JJ<j iш I Col1
Глава 18. Подготовка и применение подсистем 1 8 . 1 . Общие сведения о подсистемах Как уже ясно, хотя бы из примеров Главы 13, пакет Simulink обеспечивает создание моделей, внутри которых располагаются подсистемы (субмодели). Внутри подсистем первого уровня, в свою очередь, могут располагаться подсистемы второго уровня и т. д. Это напоминает ситуацию, когда сложная система набирается из отдельных систем — модулей, каждый из которых, в свою очередь, является системой или устройством. Такой принцип конструирования сложных моделей дает ряд важных достоинств: • имеется возможность разбивки решаемой задачи на ряд более мелких задач, решаемых подсистемами; • каждая подсистема может отлаживаться отдельно и использоваться в полной системе уже после отладки; • существенно упрощается вид основной модели за счет исключения из нее второстепенных блоков; • облегчается модификация полной модели за счет модификации ее более простых подсистем.
18.2. Создание подсистемы из части основной модели 1 8 . 2 . 1 . Постановка задачи о выделении подсистемы Simulink дает возможность выделить в любой модели некоторый блок и тут же превратить его в подсистему. Допустим, что мы решили создать блок, который преобразует входной сигнал в пять сигналов: • сигнал, имитирующий люфт; • квантованный сигнал; • сигнал, характерный для реле; • сигнал с ограничением; • исходный сигнал. Мы можем составить модель такого устройства, взяв соответствующие блоки, объединив их входы и используя мультиплексор Мих на выходе. Получим модель, представленную на рис. 18.1. Запустив модель, можно наблюдать ее работу, что иллюстрируют осциллограммы виртуального осциллографа, подключенного к выходу мультиплексора. В данном простом случае постановка задачи о выделении подсистемы заключается в оценке того, какие блоки мы планируем выделить в подсистему. Очевидно, что это будут нелинейные блоки, преобразующие сигнал, и мультиплексор. Для более сложных моделей решить, какие блоки выделяются в подсистемы, не 695
Глава 18. Подготовка и применение подсистем
i
о и; у ш'
.т
£j
'
ы Ф:
Рис. 18.1. Исходная модель устройства так просто. Однако это уже задача пользователя, моделирующего конкретную систему или устройство. 18.2.2. Выделение блоков для подсистемы Выделение блоков в подсистему выполняется довольно просто. Сначала надо установить курсор мыши около нужной группы блоков. Нажав левую кнопку и начав передвигать мышь, можно увидеть, что ее передвижение создает на экране прямоугольную рамку из черных точечных линий (рис. 18.1). Отпустив левую кнопку мыши, можно наблюдать, как попавшие в прямоугольник блоки выделяются (рис. 18.2). Теперь надо выбрать пункт меню Edit • Create Subsystem (на рис. 18.2 меню Edit раскрыто).
гч
Undo Move
Ctr+ lZ
• • Normal
Cut I Ctr+ lX Copy CW4C Paste Ctr+ lV Ce lar Dee lte See lct al Ctr+ lA Copy model to cp ilboard Find... Ctrl-tf
18.2.3. Создание подсистемы из выделенных блоков После выполнения команды Create Subsystem на месте выделенных блоков появится блок подсистемы. Обратите внимание на то, что для этой операции недоступна команда 696
Puc. 18.2. Подготовка в созданию подсистемы
18.2. Создание подсистемы из части основной модели Undo (отмена последней операции). Поэтому перед выделением части модели в подсистему рекомендуется сохранить исходную модель под каким-либо новым именем с помощью команды Save As... меню File окна модели Simulink. На рис. 18.3 показана полученная новая модель с подсистемой после редактирования модели переноса ее мышью в левый верхний угол окна и замены подписей блоков.
31 ш Ф и
и я j • •*> JBLKJ"
Fie
Edit
View
5п
ц &• я а
и rasa
s
-
.
i
v ** ..; . ••;.. •
•ДжН l
i
i
i
\
J
a
1
•
Рис. 18.3. Модель с подсистемой ВНИМАНИЕ
Обратите внимание на то, что эти надписи сделаны на русском языке. Это приятная возможность пакета Simulink, но злоупотреблять ею не стоит, поскольку большинство терминов (в том числе названия блоков) имеет международный характер и выполнено на английском языке. Но, пожалуй, главное — это то, что введение русскоязычных надписей способно вызвать серьезные сбои в работе модели. Например, наблюдались такие «фокусы», как нарушение целостности записи имени после записи модели на диск и последующего ее считывания, а также восприятие части надписи как несуществующего параметра модели с выводом сообщения об ошибке. В новых версиях Simulink 5/6 эти проблемы решены. Но, как говорят у нас, береженого Бог бережет!
18.2.4. Вызов и просмотр подсистемы Чтобы вызвать подсистему для просмотра или модификации, достаточно навести на нее курсор мыши и дважды щелкнуть левой кнопкой. Появится окно созданной подсистемы, показанное на рис. 18.3 внутри окна модели. 18.2.5. Назначение портов ввода и вывода в подсистемах А теперь обратите внимание на главное — блок-схему полученной подсистемы. Нетрудно заметить, что состав блоков и соединений в подсистеме остался тем же, 697
Глава 18. Подготовка и применение подсистем что и в исходной модели. Основное отличие проявляется в том, что в подсистеме автоматически появились новые блоки — порт ввода 1п1 и порт вывода Out1. Порты изображаются овалом с номером внутри и подписями. Благодаря этим портам подсистема включается в состав основной модели. Если выделенный под подсистему блок содержит несколько вводов и выводов, то в подсистеме появится несколько портов ввода и портов вывода. Они будут обозначены как In1, In2, In3, ... и Out1, Out2, Out3, ... Порты ввода служат для приема данных подсистемами, а порты вывода — для передачи выходных данных в основную модель (или в подсистему более высокого уровня). Заметим, что порты ввода и вывода могут переименовываться пользователем при условии, что их имена будут уникальными.
18.2.6. Использование браузера моделей для работы с подсистемами Окно подсистем полностью аналогично окну основной системы. Поэтому при работе с подсистемами возможно использование всех средств, которые имеются в этом окне. Например, можно запустить браузер модели, нажав соответствующую кнопку в панели инструментов субмодели (рис. 18.4).
• am
в—•
cje
e a t
у«,„
5|ти!доэт
f-ormar
Tools Hr-b
О ; о* О Ш ' J4 % Й 1 С/. •:>' | >
Modd Browser
:
^j .^
Copy —Б ИИ Baddash parameters-, Mechancial «wnwwr
Delete the lehKted objects U001*
Рас. 18.4. Пример работы с браузером модели Браузер удобно использовать для сложных моделей, когда подсистем много и они образуют древовидную структуру. Эту структуру можно наблюдать в левом окне браузера.
18.2.7. Модификация и редактирование подсистемы Модификация и редактирование подсистемы ничем не отличаются от этих операций для моделей, описанных в главе 14. Поэтому ограничимся простым примером — замены в уже созданной подсистеме одного блока на другой. 698
18.2. Создание подсистемы из час/пи основной модели Подготовка к удалению блока Backlash показана на рис. 18.4. Намеченный к удалению блок выделяется и далее используется команда удаления Clear в контекстном меню. Это меню в открытом состоянии показано у блока Backlash. Заметим, что команду Clear можно выполнить и из подменю Edit меню окна подсистемы. После выполнения команды Clear блок Backlash исчезнет и на его место можно ввести новый, например Coulomb&Viscous Friction. Это и показано на рис. 18.5.
3 а&
D \tS У Ш
I ** пэ
Ъ-\ Loo*-<JO Tables Matn Operators Mod*l Venfeation ! Mode(-Wde Ual^W s b5ubsys!et ; Signal Attributes Ь^ Signal RouCng
Рис. 18.5. Пример замены одного блока на другой в подмодели Нажатием кнопки вызова библиотеки в панели инструментов окна подсистемы вызывается окно библиотеки (рис. 18.5). В нем следует выбрать нужный раздел библиотеки и нужный блок, после чего мышью перенести новый блок на место ранее удаленного блока. Соединения при этом восстанавливаются автоматически, если новый блок позиционирован достаточно точно. Рисунок 19.6 показывает повторный запуск модели с модифицированной подсистемой. Таким образом, благодаря применению подсистем можно корректировать последние, не меняя основную модель. 18.2.8. Задание свойств подсистемы Подсистема имеет окно свойств. Его можно вызвать для просмотра и редактирования с помощью команды меню File • Model Properties окна модели или с помощью контекстного меню правой клавиши мыши (рис. 18.7). Окно свойств подсистемы имеет три вкладки: • Model Properties — свойства подсистемы; • Options — опции, задающие формат свойств; • History — данные об истории подсистемы. На рис. 18.7 окно свойств подсистемы показано с открытой основной вкладкой. На ней отражается версия подсистемы и дата ее создания. Другие поля вна699
Глава 18. Подготовка и применение подсистем
РИС. 18.6. Работа с моделью после коррекции ее подсистемы
iErfiori. Text saved *v*h the block »i the model tte. ^ Speciiei the bka k's older ot екеси*юп relative to olhet Ысск-s n the
o l det.
Тлу Text lhat a
in the Ыьск. label that SmuJhk oerwatea
Description:
Priority:
Carcel
Help
Puc. 18.7. Вызов окна свойств подсистемы чале пусты. В поле Creator обычно вводится фамилия и инициалы создателя подсистемы, а в поле Model description задается ее описание. После сохранения подсистемы (командой меню File • Save в окне подсистемы) эта информация будет выводиться при вызове окна свойств подсистемы, С содержанием других вкладок пользователь может ознакомится самостоятельно. Тем более в связи с тем, что они содержат весьма малый объем информации, вполне очевидный из краткого описания их выше.
700
18.2. Создание подсистемы из части основной модели К сожалению, окно свойств, оказывается, имеет один и тот же вид для всей системы и для подсистемы. Поэтому следует осторожно относиться к заданию параметров в этом окне — они могут относиться к системе в целом. 1 8 . 2 . 9 . Параметры портов ввода и вывода Порты ввода и вывода являются вполне полноценными блоками и имеют свои окна параметров (рис. 18.8).
ProvKi* an outout port fora lubeyssemerrnodei. ТЪе Output wt«n d*abled'and"lr*«l outpii" parameter only appfy to conditionally executed виЬкуйвтв. When в cordrt;onal(y executed subsystem i« .. dsabJea.theojtpa» «therheJdatisiaat value oreeilcthe Vtfal . output'. THe VJHBI output paraneter can be specified as the ещз!у matt» 0. in wh rf. case it"* intiai outojt * eouat 1c 1he outom Ы Ihe Ыоск feeding the ou^xxt.
Provd ie amnpuf port (w a sb isyse tm «mode,l fof Tnggerad SLbsyfter»
1
if Latcn IbufieiJ iiput ts lelecled, then tb* Иэзп producet ihe value of « r p u at the previous tme step. The other parameters can be uaec to азфк^Ву specify the r i p t i signs aitnbdes ] „ ^ _ .
J
£""«"
i
Port timefiMor» M For dyramicaly «izsd}.
- Show additional perametem
I Ready
,
•
Cancel
[
Htip
. . . . . . . .
•••....
.100%
f""" "
f.
iode45
"
Рас. 18.8. Параметры портов ввода/вывода Окно порта ввода Inport позволяет задавать следующие параметры: • Port number — номер порта;
• Port dimension — размерность порта (—1 при динамической установке размерности); • Sample time — эталонное время; • Data type — тип данных (выбор из раскрывающегося списка); • Signal type — тип сигнала (выбор из раскрывающегося списка). Окно порта вывода Outport задает параметры: • Port number — номер выходного порта; • Output when disable — выход при пассивности;
• Initial output — инициализация выхода. 1 8 . 2 . 1 0 . Обзор библиотеки Ports&SubSystem Для построения моделей с подсистемами Simulink имеет библиотеку Ports&SubSystem, окно которой представлено на рис. 18.9. Это одна из самых крупных библиотек. Наряду с уже описанными блоками In* и Out* библиотека содержит блоки организации запуска Trig, Enable и Function-cal 701
Глава 18. Подготовка и применение подсистем Р ) Library: cbnutnk/PortsftSubsystems
• Re • Edit Ve iw " rotnvi : Hep l Ports & Subsystems
CL>
>CD
°^1
'"I
iri
Ш
ЦЗ
Trigs» EMU»
if
i!
Cwt!
ir
Puc. /8.9. Окно с блоками библиотеки портов и подсистем Generator, ряд блоков построения различных подсистем и блок демонстрационных примеров. Из представленных блоков следует особо отметить блок Atomic Subsystem. Он служит для создания атомарных (неделимых подсистем). При моделировании блоки такой системы моделируются в первую очередь, а затем уже моделируются другие блоки. Модели, содержащие блоки подсистем Sybsystem, имеют произвольный порядок моделирования блоков.
18.3. Построение подсистем на основе блока Subsystem 18.3.1. Постановка задачи Предложенный путь создания подсистем путем выделения в их качестве части имеющейся модели не всегда приемлем и не всегда удачен. Он соответствует подходу «от общего к частному». Но нередко бывает предпочтителен совсем другой подход — «от частного к общему». Применительно к технике моделирования это означает, что сначала создаются подсистемы, а затем уже общая модель системы. Такой подход получил самое широкое признание при создании сложных систем, поскольку он позволяет работать (нередко одновременно) над рядом гораздо более простых систем (подсистем в нашей терминологии). Ниже мы покажем, как этот подход реализуется в пакете Simulink с помощью специального блока Subsystem.
18.3.2. Модель функционального генератора Любопытно, но среди источников сигналов в библиотеке Simulink нет целого ряда широко используемых сигналов, например прямоугольных симметричных 702
18.3. Построение подсистем на основе блока SubSystem разнополярных импульсов типа меандра, треугольных разнополярных импульсов и трапецеидальных импульсов. Это сделано, видимо, неслучайно, поскольку средства Simulink позволяют при необходимости создавать источники таких сигналов и виде подсистем. Построим функциональный генератор импульсов, который генерирует три указанные формы импульсов со стандартной единичной амплитудой. Трапецеидальные импульсы легко получить, просто ограничив треугольный сигнал. Поэтому зададимся целью создать подсистему для генерации меандра и треугольных колебаний. Для генерации меандра достаточно вычесть из стандартного однополярного прямоугольного сигнала (длительность импульса и паузы равны) с амплитудой 2 константу, равную 1. Для получения треугольного сигнала можно использовать интегратор. Однако мы получим однополярный треугольный сигнал с амплитудой, вдвое меньшей, чем требуется. Чтобы сделать его разнополярным с единичной амплитудой, надо вычесть из него константу 0,5 и «усилить» вдвое масштабирующим блоком Gain. 18.3.3. Задание подсистемы с помощью блока Subsystem Прежде всего откроем окно для нашей будущей модели функционального генератора. Далее, открыв окно разделов библиотеки Simulink, перетащим мышью в это окно блок SubSystem из раздела Ports&Subsystems. Теперь наведем курсор мыши на этот блок и дважды щелкнем мышью. Откроется окно подсистемы (рис. 18.10). Это окно почти пустое — в нем есть лишь блоки In 1 и Outl, соединенные соединением. Переместив это окно в удобное положение, выделим мышью порт In 1 и соединение уничтожим их командой Clear в позиции меню Edit окна подсистемы. Открыв рядом окно разделов библиотеки Simulink, можно начать строить подсистему в соответствии с описанной выше идеей ее реализации. Рисунок 18.11 показы-
3: ta Ф а I и is -t
He a
Eat
Ле»
с? У
SmUton # |
-
F2™.at Tools •f
•
_:
JfflJSlj f*1.
•
•
Рис. 18.10. Создание окна подсистемы
703
Глава 18. Подготовка и применение
• .
..•.
•.
I
.•
•
•
. . • • •
••
подсистем
. ! • • • ' '
zl! а Ф ш l ft ш $ Ф
-=JQ|.*J D
;
G
£
У
a
•• m e : _-
Щ G enea rl ,__ ГТ7]
F:IOO% . ' i
i
Puc. 18.11. Построение подсистемы вает почти созданную подсистему генератора меандра и треугольных импульсов. Осталось перенести в подсистему еще один блок выхода. После этого можно будет считать процесс создания подсистемы законченным. Если подсистема содержит ошибки (а они есть!), то их можно впоследствии исправить. 1 8 . 3 . 4 . С о з д а н и е о с н о в н о й м о д е л и и ее и с п ы т а н и е Теперь перейдем в окно основной модели. В нем пока представлен только блок Subsystem, созданный выше. Теперь мы можем дополнить общую модель трехвходовым осциллографом и каналом для трапецеидальных импульсов. Этот канал должен содержать ограничитель амплитуды пилообразных импульсов и «усилитель» (блок Gain), доводящий амплитуду трапецеидальных импульсов до заданного уровня 1.0. Рисунок 18.12 показывает созданную таким образом общую модель. Остается запустить созданную модель. Перед этим стоит просмотреть еще раз подсистему и устранить обнаруженные в ней ошибки, например, сделать нижний вход у первого блока суммы вычитающим, а также задать корректно параметры всех блоков. После этого, пуская моделирование (возможно, несколько раз), надо добиться желаемой работы блоков. Осциллограммы на рис. 18.12 показывают, что мы полностью достигли цели разработки — наша модель формирует все три типа сигнала.
18.4. Управляемые подсистемы 18.4.1. Типы управляемых подсистем В ряде случаев подсистемы должны быть управляемыми, то есть проявлять активность только при наличии какого-то управляющего события или сигнала. Такие системы называют Conditionally Executed Subsystem (CES). Они обеспечивают 704
18.4. Управляемые шмтт
&.ГШ. i ,;;;i;.;i ••••- ?:•" 'Ш:
подсистемы
i : » g i : : « 3 u
• »• У а
Fife £rtt i;«w brn|J'abl»1 F^mdt XooJs Heto
Puc. 18.12. Общая модель функционального генератора упрощение создания сложных систем и дают простое решение задачи синхронизации параллельных процессов. В Simulink для создания управляемых подсистем служат два блока, расположенных в разделе Port&Subsystems. Это блоки включения Enable и триггера Trigger (пускового устройства). Эти блоки можно размещать только в подсистемах — попытка их переноса в окно основной системы приводит к появлению сообщения об ошибке (рис. 18.13).
Trigger, enable and action ports are not alowed in the root wn i dow of a block diagram.
Puc. 18.13. Окно с сообщением о недопустимости переноса блоков Enable и Trigger в окно основной системы Наличие в подсистеме указанных блоков является формальным признаком отнесения ее к типу управляемых подсистем. В зависимости от логики работы управляемых подсистем они делятся на три основных типа: • Е-подсистемы — подсистемы, управляемые блоками Enable; • Т-подсистемы — подсистемы, управляемые блоками Trigger; • ЕТ-подсистемы — подсистемы, управляемые как блоками Enable, так и блоками Trigger. Рассмотрим свойства и особенности этих подсистем более подробно.
705
Глава 18. Подготовка и применение подсистем
18.4.2. Пример создания Е-подсистемы функционального генератора Чтобы сделать подсистему Е-подсистемой, достаточно перенести в нее блок Enable и задать (если нужно) его параметры. В качестве примера превратим нашу подсистему генератора меандра и треугольных колебаний в управляемую Е-систему. Для этого перенесем в эту подсистему блок Enable и модернизируем основную модель: уберем канал трапецеидальных импульсов и добавим источник управляющего перепада с задержкой в 4 такта эталонного времени. Полученная новая система показана на рис. 18.14. Расположение блока Enable не имеет значения.
шш
Рас. 18.14. Пример управляемой Е-подсистемы Как видно из осциллограмм рис. 18.14, наша подсистема стала управляемой — теперь импульсы на ее выходе формируются только при подаче на управляющий вход перепада сигнала с выхода источника перепада. Желательно, чтобы задержка была кратна периоду генератора прямоугольных импульсов, иначе окажется нарушена работа интегратора. Следует отметить и то, что включение в подсистему блока Enable привело к появлению нового входа на пиктограмме подсистемы, расположенного сверху. Это и есть управляющий вход, и он является внешним признаком того, что подсистема стала управляемой. В окне параметров блока Enable можно задать следующие параметры: States when enable — состояние при запуске (выбор из списка: held — использовать последнее состояние, reset — использовать начальное состояние); Show output port — показать выходной порт; Enable zero crossing detections — фиксировать прохождение выходного сигнала через 0. 706
18.4. Управляемые
подсистемы
1 8 . 4 . 3 . С о з д а н и е п о р т а выхода Е - п о д с и с т е м ы Поскольку блок Enable всего лишь задает признак управляемости подсистемы, этот блок никуда не подключается. Если в окне параметров блока установлен флажок Show output port, то блок Enable приобретает выходной порт, который можно использовать для управления другими подсистемами или блоками. В пассивном состоянии подсистемы сигнал на выходе выходного порта равен 0, а при активной равен I. Рисунок 18.15 иллюстрирует применение дополнительного выходного порта подсистемы. .
;•••••
' , : . ' ; £ . <
i
P r o
!
d s 3 b l e t f
1
p 3 r t d
e x a a t e d
p
y
i j v t a l o i j t p i j f p - a r a m p i e ' * . o r e y
s t i . a y j f e n s
W h e n
a
a o p t y
(;>
c o n c t o w a f l y
c t v i d f t i o n d y e K » a j i e d
s.fopf'siBm
ii
1
disabled b e o U p j is « п е г I d«ofied aaihe emply m i i|. r> wNch casse 3TG ffiKiai UUOUI в equal to t n * ш^)<Л й the Ыа(* !l h А
Рис. 18.15. Пример использования выходного порта блока Enable управляемой Е- подсистемы Обратите внимание на то, что в данной системе сигнал от управляющего перепада уже не подается явно на верхний вход осциллографа. Теперь на осциллограф подан сигнал с выходного порта блока Enable, подключенного к выходному порту Out3 управляемой подсистемы. На рис. 18.15 под подсистемой показано окно параметров ее выходного порта Out3. 18.4.4. Т-подсистемы Для придания подсистеме статуса Т-системы достаточно ввести в нее блок триггера Trigger. После этого подсистема с определенными ограничениями (они отмечены ниже) становится управляемой по тригтерному входу. Управление происходит, если управляющий сигнал меняет полярность. Работа Т-подсистем имеет ряд отличительных признаков: • подсистема работает только на том шаге, на котором произошло изменение полярности управляющего сигнала; • подсистема не возвращается в исходное состояние, и ее текущее состояние сохраняется до очередного запуска; 707
Глава 18. Подготовка и применение подсистем • отсутствует параметр Output when disabled у блока выхода; • возможны различные виды обозначения входного порта управляющего сигнала; • в блоках подсистемы, имеющих параметр эталонного времени Sample time, следует задавать этот параметр равным —1. Большинство этих признаков носит существенный ограничительный характер. К сожалению, последний признак нередко присутствует даже в неявном виде. Например, для аналоговых интеграторов не задается параметр Sample time в явном виде, но фактически этот параметр отличен от —1. Поэтому попытка напрямую использовать интегратор в Т-подсистеме обычно обречена на провал. 1 8 . 4 . 5 . Пример применения Т-подсистемы Прекрасный пример построения Т-подсистем имеется среди новых демонстрационных примеров пакета Simulink. Он представлен на рис. 18.16. В этом примере заданы три подсистемы-«пустышки». Такие подсистемы создаются блоком Triggered Subsystem. Обозначения таких подсистем и их графическое представление показаны на рис. 18.16. Окно параметров блока Trigger одной из подсистем представлено на рис. 18.17. В окне параметров блока Trigger можно задать ряд описанных выше параметров. Основным является параметр: Trigger type — тип триггера (выбор одного из вариантов из списка: rising — запуск по положительному перепаду, falling — запуск по отрицательному перепаду, either — запуск по любому перепаду и function-call — запуск S-функцией, задающей логику системы).
Triggered Subsystem Demonstration
Puc. 18.16. Пример применения простейших Т-подсистем 708
18.4. Управляемые подсистемы Казалось бы, какой смысл в подсистеме-«пустышке», в которой нет ничего, кроме входного и выходного портов, соединенных напрямую друг с другом? Однако следует помнить, что такая Т-подсистема активна, то есть работает как короткозамкнутая перемычка только тогда, когда это разрешает управляющий порт (вход). Таким образом, она превращается в управляемый ключ, логика которого определяется параметром Trigger type. Они соответствуют трем типам Т-подсистем с разными вариантами управления. Этот пример интересен тем, что в нем используются все три возможных типа сигналов управления с внутренней логикой (кроме управления от S-функции). Создаваемые этой моделью (с ее подсистемами) сигналы представлены на рис. 18.18. Генерация сигналов начинается с начала пуска моделирования. Это важно для понимания отличия Т-подсистем от ЕТ-подсистем, описанных далее. ~" Trg i ger Port * _—„—.„. . ™ _ _-™™ ,| Race this bo l ck in a subsystem to create a trg i gered subsystem. -Parameters ••••• -j • zJi Г" Show output port
J f/ Enable zero crosmg detection
•
• ... zl
."."К-ч
[Г"
1 Cancel
Help
: J
Рис. 18.17. Окно параметров блока Trigger glSS—fei:
Рис. 18.18. Осциллограммы модели рис. 18.16
709
Глава 18. Подготовка и применение подсистем 1 8 . 4 . 6 . ЕТ-подсистемы ЕТ-подсистемы — это подсистемы, использующие одновременно описанные выше механизмы управления, реализованные блоками Enable и Trigger. При этом на применение таких подсистем оказывают влияние ограничения, присущие как Е-подсистемам, так и Т-подсистемам. Подсистемы этого типа можно вводить с помощью блока Enable или модифицируя блоки подсистем с иной логикой работы. Для наглядной иллюстрации создания ЕТ-подсистем потребуем от модели рис. 18.17, чтобы первая и третья подсистемы стали ЕТ-подсистемами. Для этого дополним их блоками Enable. У этих подсистем появится второй вход, на который можно подать, например, разрешающий сигнал от генератора перепада (рис. 18.19). Таким образом, мы обеспечим генерацию сигналов на выходе первой и третьей подсистемы только при наличии сигнала на их дополнительных входах.
Triggered Subsystem Demonstration
Рис. 18.19. Пример системы с одной Т-подсистемой и двумя ЕТ-подсистемами Рисунок 18.20 показывает осциллограммы выходных импульсов новой модели. Как и следовало ожидать, сигналы на выходах первой и третьей подсистем появляются спустя время задержки перепада (4 такта времени Sample time). Сигнал на выходе второй подсистемы (оставленной для сравнения в неизменном виде) появляется сразу после запуска модели. 1 8 . 4 . 7 . Применение блоков Goto, Goto Tag visibility и From Чем сложнее моделируемая система, тем труднее представить ее графическое изображение, особенно если желательно, чтобы оно не выходило за пределы окна модели, видимые на экране монитора. В подобном случае весьма полезными являются блоки Goto и From, позволяющие создавать в моделях (и в подсистемах) невидимые связи. Применение этих блоков показано на рис. 18.18. Здесь блок Goto подключен к выходу генератора управляющего перепада, а блоки From и Fromi подключены к 710
18.5. Особенности применения
подсистем
Рис. 18.20. Осциллограммы, модели, представленной на рис. 18.19 входам Е-управления первой и третьей подсистем. Таким образом, управляющий перепад подается на эти входы без использования дополнительных соединений. С позиции применения языков программирования блоки From и Goto подобны процедурам и обращениям к ним. Такое представление достаточно естественно, если учесть, что Simulink является средством визуального программирования. Кроме того, такое представление делает достаточно очевидным смысл параметра Tag visibility блока Goto, который используется для передачи данных с установленной областью видимости и может принимать следующие значения: • local — локальные данные, доступные только той подсистеме, в которой имеется блок Goto; • scoped — данные, область действия которых распространяется на все подсистемы более низкого уровня; • global — глобальные данные, доступные всем подсистемам и основной системе. Нетрудно заметить, что смысл этого параметра очень напоминает смысл статуса локальных и глобальных переменных во многих языках программирования.
18.5. Особенности применения подсистем 1 8 . 5 . 1 . Виртуальные подсистемы В Simulink 5 роль подсистем существенно повышена. В отдельный класс выделены так называемые виртуальные подсистемы. Построение виртуальных подсистем представляют интерес, в основном для опытного пользователя, поскольку такие подсистемы обычно используются как макросы и готовятся на языках про-
7П
Глава 18. Подготовка и применение подсистем граммирования типа С или C++. Они поддерживают графическую иерархию в моделях. Ряд таких заранее созданных подсистем включен в новый раздел библиотеки Simulink 5 — Port&Subsystems. В нем присутствуют следующие виртуальные подсистемы: • • • •
Configurable Subsystem — блок конфигурации подсистем; If — блок задания условных операций; Subsystem — блок ввода подсистемы в модель; Sybsystem Examples — открытие окна с примерами описания семантики подсистем; • Switch Case — блок задания оператора переключения. Нетрудно заметить, что основной блок задания подсистем Subsystem перекочевал из раздела библиотек в новый раздел Simulink 5 — Subsystems. Остальные виртуальные системы по существу являются инструментальными средствами (блоками) для конфигурации подсистем и задания управляющих структур.
18.5.2. Невиртуальные подсистемы Невиртуальные подсистемы выделяются рамкой из линий двойной толщины (более жирных). Отметим типы встроенных в раздел библиотеки Port&Subsystems невиртуальных подсистем. Они перечислены ниже. Atomic Subsystems — это элементарные (в буквальном переводе атомарные) подсистемы, которые выполняются как единое целое. Любую подмодель с блоками Simulink можно представить в виде подсистемы этого типа. Enabled subsystems — это Е-подсистемы, выполняемые только при наличии на специальном управляющем порте разрешающего сигнала, уровень которого превышает 0. Triggered subsystems — это триггерные Т-подсистемы, управляемые по триггерному управляющему порту и работающие по принципу «спускового крючка». Эти подсистемы нередко используются с расширением StateFlow, обеспечивающим ситуационное моделирование, тогда как расширение Simulink обычно выполняет имитационное моделирование. В блоках таких подсистем нужно задавать эталонное время, равное I. Function-call subsystems — подсистемы запроса функции. Эти подсистемы используются как m-файлы за исключением того, что готовятся как блоки Simulink. Эти подсистемы также часто используются с расширением StateFlow и требуют установки эталонного времени блоков, равным I. Enabled with trigger subsystems — это ЕТ-подсистемы, имеющие свойства Е- и Т-подсистем. Action subsystems — это подсистемы, действие которых задается операцией пересечения для подсистем класса Enabled и Function-call subsystems. Они управляются инициатором подсистем, в качестве которого может выступать программный блок условного выражения If или переключателя Switch Case. While-subsystems — подсистемы, выполняющие итерационные действия под управлением цикла типа while (пока). For-subsystems — подсистемы, выполняющие итерационные действия под управлением цикла типа for с заданным числом повторения итераций. 712
18.5. Особенности применения
подсистем
18.5.3. Семантика подсистем Пользователь, желающий детально ознакомиться с описанием (семантикой) подсистем, может активизировать блок Sybsystern Example в разделе библиотеки Simulink 3/4 — Subsystems (см. рис. 18.21). Это приводит к выводу окна с примерами подсистем. В Simulink 5/6 окно с примерами и описанием семантики подсистем имеет несколько иной вид. Оно показано на рис. 18.22. Активизировав, в свою очередь, пиктограмму одного из примеров, можно познакомиться с его содержанием. На рис. 18.23 представлено описание отличий виртуальных и не виртуальных подсистем с примерами вывода их моделей. Inl i o f { . } Out Разумеется, представленное описаWhile Ktdi ние дано на английском языке. Subsystem
п C o g n u ia fe tyrbl Sub s a eb d lS nu id g Tg irE en d bsye st.
ifftii >D) •is* If
j >
cast [1 J:
1
default: > Switch С и е
Switch C«« Actioi Subsystem
Subsystem Ex*mpl«
Рис. 18.21. Окно Simulink 3/4 с описанием подсистем
Рис. 18.22. Окно с описанием подсистем
Simulink consists of two classes of subsystems 1) Virtual subsystems: provide graphical hierarchy in models. Virtual subsystems do not impact model execution. During model execution, the Smujink Engine flattens all virtual subsystems. 2) Nonvirtual subsystems: provide execution and graphical hierarchy in models Nonvirtual subsystem are executed as a single unit (atomic execution) by the Simulxtik Engine. All nonvirtual subsystems ere drawn with a bold border Double-click on the 'Subsystem definitions' button at the top right for more details
«~— ^ ' .*- «
Puc. 18.23. Окно с описанием подсистем 713
Глава 18. Подготовка и применение подсистем 18.5,4. Демонстрационные примеры применения подсистем Для детального разбора работы подсистем в Simulink 5/6 введено множество новых интересных демонстрационных примеров. Приводить их все в данной книге не целесообразно, поскольку без компьютера наглядность воспроизведения примеров низка. А при наличии компьютера пользователь, заинтересованный в детальном знакомстве с техникой применения подсистем, может просмотреть нужные ему примеры самостоятельно. Поэтому ограничимся описанием идеологии организации демонстрационных примеров и доступа к ним. Ограничимся при этом парой наглядных примеров. Активизируя пиктограмму Function-call System, можно вывести окно описаний и демонстрационных примеров для подсистем запроса функций (рис. 18.24). >
—-_. • - "
* OS -
end S-J ui
Рис. 18.24. Окно описаний и демонстрационных примеров для подсистем запроса функций В этом окне зеленые пиктограммы (первый ряд расположен сверху) открывают окна демонстрационных примеров, а красные (два нижних ряда) — окна с описаниями различных вариантов организации подсистем. В качестве первого примера рассмотрим описание первой подсистемы sl_subsys_fcncallerrl. Окно с описанием этой подсистемы и ее графической моделью представлено на рис. 18.25. В принципе возможен запуск этой подмодели прямо из окна рис. 18.25. Однако такой запуск будет некорректным, поскольку в описании подмодель представлена не полностью. Полому воздержимся от запуска, но обратим внимание на то, что в этой модели представлены действующими все связи между блоками. Из описания сверху модели следует, что ее действие заключается в автоматическом прерывании входных связей, относящихся к блокам f и g — соответственно f() и g(). Теперь активизируем пиктограмму первого демонстрационного примера. Появится окно с ним, в котором будет представлена та же подмодель, что и на рис. 18.25, хотя и с несколько иным текстовым оформлением. Если пустить данную модель на исполнение, то можно увидеть удаление указанных выше связей. Так что вид окна примера после запуска примет вид, представленный на рис. 18.26. В нем удаленные связи показаны пунктиром, тогда как сохраненные связи даны сплошными линиями. В данном случае в этом и заключается работа модели. 714
18.5. Особенности применения
подсистем
П » 1 «ubsy» fmcalferrl
iЙ Ф i
Ambiguous execution order error d u e to block in feedback path
[
a*fi«Hterti
T h e following Model is a n illegal example of a chart that executes a function-call. t ( ) . that in turn e x e c u t e s •another function. g ( ) . T h e Chart is attempting to execute the function [ d l . d 2 ] - B ( f ( ) ) , i.e.. u s e modified v a l u e s of d l and d 2 . However, the block. 3 is not contained vithin f ( ) a n d thus doesnot execute when f ( ) e x e c u t e s .
-KD
Ы
Рис. 18.25. Окно с описанием подсистемы sl_subsys_jcncallerrl Fe li £dt Veiw Sm t uSauon Format Toosl fieii
3
Nested tunction-call example.
[
lafiftitignt
|
The Chart below is a function-call initiator that executes the function. [dl,d2]*f() The function f. in turn, executes the function g. After invoking f and g. the Chart uses the values dl and dZ computed by f ana g.
"I Out' ' " + 1 1
Puc. 18.26. Окно с примером применения подсистемы sl_subsys_fcncallerrl после запуска примера Теперь рассмотрим еще один из двух примеров на работу подмодели типа For-subsystem. Вид его окна после запуска представлен на рис. 18.27. В данном случае в организованном цикле типа for (его программная запись представлена 715
Глава 18. Подготовка и применение подсистем под моделью) в цикле вычисляются значения тригонометрической функции синуса и они выводятся в полях вывода регистратора. Под подмоделью представлена подмодель вычисления синуса второго уровня вложенности. Вычисления выполняются для вектора значений аргумента синуса от 0 до 1 с шагом 0,2 (всего 6 значений).
Рис. 18.27. Окно с примером применения подсистемы For-subsystem после запуска примера
Уже из приведенных примеров вполне очевидно, что техника задания подмоделей в Simulink 5 поднялась на новый уровень задания и моделирования структур с переменными связями (и, следовательно, с переменной структурой), а также со структурной реализацией типовых управляющих структур. Они подобны структурам, используемым в языке программирования системы MATLAB (см. Главу 10 с подробным описанием сути действия управляющих структур).
18.6. Маскированные подсистемы 1 8 . 6 . 1 . Механизм маскирования Пользователь, всерьез занявшийся моделированием систем и устройств, рано или поздно сталкивается с необходимостью подготовки собственных блоков, обладающих свойствами стандартных библиотечных блоков пакета Simulink. Здесь надо отметить, что сами по себе подсистемы, описанные выше, такими качествами не обладают. Главное отличие подсистем от блоков в том, что подсистемы не имеют своей уникальной пиктограммы, окна параметров и не связаны с разделом библиотеки. Для построения пользовательских блоков Simulink предлагает специальный механизм маскирования подсистем. Маскированные подсистемы это такие подсис716
18.6. Маскированные подсистемы темы, которые имеют специальный признак (маску), скрывающий их внутреннюю, порой достаточно сложную, структуру. В результате такая подсистема в деталях не видна и воспринимается как библиотечный модуль. Маскированные подсистемы обладают рядом важных достоинств: • • • •
они имеют свои пиктограммы с уникальными изображениями; их можно использовать как библиотечные блоки; у них есть свое окно установки параметров; есть возможность в любой момент сбросить маску и наблюдать структуру блока; • применение масок расширяет возможности построения сложных моделей; • имеется возможность легко отредактировать подсистему, превращенную в маскированную; • повышается наглядность моделей-диаграмм; • повышается защищенность подсистемы от модификации, в том числе преднамеренной. Для создания маскированных подсистем надо выполнить следующие операции: • • • •
разработать и протестировать модель с соответствующими блоками; выделить часть блоков и оформить их в виде подсистемы (см. Главу 9); задать подсистеме статус маскированной подсистемы; с помощью специального редактора масок создать окно установки параметров, определить средства инициализации подсистемы, создать документацию под маскированную подсистему и ее справочную систему; • выполнить (если необходимо) тестирование основной модели с ее маскированными подсистемами и прочими блоками; • выполнить (если необходимо) редактирование созданной маскированной подсистемы; • демаскировать (если необходимо) подсистему. Большая часть этих операций выполняется с помощью редактора маскированных подсистем, или просто масок. 18.6.2. Создание начальной модели Рассмотрим следующий пример. Пусть нам надо создать модель, выполняющую функцию вычисления значения у = ах2 + Ь, где а и b — константы. Для возведения х в квадрат достаточно использовать умножитель, на оба входа которого подан сигнал х. Подключив к выходу умножителя масштабирующий блок Gain с коэффициентом передачи а, мы получим сигнал ах2. К этим блокам нам необходимо добавить сумматор, на один вход которого надо подать сигнал с умножителя, а на другой выход константы Ь. В итоге на его выходе будем иметь сигнал a\J+b, что и требовапось. Такую функцию реализует модель, представленная на рис. 18.28. На этом рисунке показаны осциллограммы входного синусоидального сигнала и выходного сигнала при следующих параметрах: коэффициент передачи блока Gain равен 1 и константа b равна 0. Любопытно, что выходной сигнал очень напоминает синусоиду, но удвоенной частоты и с добавлением постоянной составляющей. Это говорит о том, что с помощью подобного устройства в принципе легко создать широкодиапазонный уд-
717
Глава 18. Подготовка и применение подсистем
О • u* У ei • ' l ! 2 f : ! > > pS™i
O K Cwc ш •i OI!.L--.* ;hs cofiSant jpeafed by the t e n s » * * vaiue'рагетйег. S ЪЭТЙ snt value is a vert or snrf "mterm veaor parameters as 1 -D' * on. i at Lie constant vebe as a 1-D way. Otiierane. output a metre w*H the a » - * . * . '
d
i
r
a
e
f
i
s
i
o
n
s
З
Е
t
n
e
o
o
n
s
t
a
r
t
v
a
U
e
.
Put:. 18.28. Исходная модель воитель частоты, что представляет определенный интерес для радиотехники, где умножители частоты применяются довольно широко. 1 8 . 6 . 3 . Подготовка к маскированию подсистемы Из исходной модели хорошо видно, что, исключив из нее источник синусоидального сигнала и осциллограф, к.ы получим функционально законченный блок. Назовем его квадратором (Quadrator) и приступим к его маскированию. Первое, что необходимо сделать, — это перейти от конкретных параметров блоков к обобщенным. Гак, мы должны задать коэффициент передачи масштабирующего блока Gain равным не I, а а (а — переменная, которая впоследствии будет принимать любые значения). Далее, вместо константы 0 у блока Constant надо задать значение Ь. Кроме того, надо выделить отведенные под подсистему блоки. Все это показано на рис. 18.29. Выполнив команду меню E:dit4 Create Subsystem, создадим на базе выделенных блоков подсистему. Особенности этого процесса детально описывались выше и мы не будем их повторять. Отметим лишь, что если выполнить двойной щелчок мышью на блоке подсистемы, то появится окно с графической моделью подсистемы (рис. 18.30). После маскирования подсистемы графическая модель уже не будет выводиться. Двойной щелчок мышью на блоке будет выводить окно параметров блока. А для вывода графической модели придется использовать команду Look under mask... в позиции Edit меню окна Simulink.
18.6.4. Запуск редактора маски Для создания маски достаточно выделить нужную подсистему, установив на ней курсор мыши и щелкнув ее левой кнопкой, после чего выбрать команду Mask Sybsystem... меню Edit (рис. 18.31). 718
18.6. Маскированные подсистемы Fie
£dit
View
£trmiatton
Q ] о* У Ш ! i
Format
Toois
^^j^-^
3SS_"^Ljfilf^
3!ез Ф i
*
.....
G j Bemert -weeуg•enKAi)«r mat* gsh fr. K"u ory - uiq
;
1 OutpU Йтв сопйаг* specS«d by the "Comtanl VBIL*' paiwwter. If j 'Constsit vsiue' is a vector are! Tr*«prel vectorоагшШяя « Шл on, \ treat t h * cofistarl value as в 1-D array, fthftwise, outout e matmt with trie • i same dimensions as the ccnstars vaoe | ;
\ Gam • ••••••-'• '•' :] ia . |Г
•J-
r
Parameters
| Conetar* valuej|b
Stow а^!Йюпа( pafwnetefS
i P
!Mfr
OK
У
OS
w
Ы
M
• |
f
o
o
N
i
p
a
a
m
e
Caned
|
l
e
r
s
—
—
. He!p
—
;
|
Д ••!.
)
|
Рис. 18.29. Подготовка к созданию подсистемы :
Ffe
£dt
V»w
SimuSabon
Format
Tods
•
.
•
•
•
.
•
_
•
;
•
•
•
•
•
•
Meb
lfibo%
Puc. 18.30. Преобразованная модель с подсистемой
Данная команда запускает редактор маски — появляется его окно с открытой незаполненной вкладкой Icon (рис. 18.32). Редактор маски это средство для создания полноценных библиотечных блоков, аналогичных профессионально разработанным блокам библиотеки Simulink. В версии Simulink 5/6 редактор маски существенно переработан в сравнении с редактором маски Simulink 4. 719
Глава 18. Подготовка и применение подсистем • lidit «iw • ShJ taSon • Fernet X°di UidaMove •"
.
I»
Ctrf+Z
'
Cut Cooy
•
ОЛ*"
• •••
P^te aeor .'. . ! je*«tt.9l ' Copy moriel tc cfioboani
Ctri+V Delete Cin+A
find...
Ctrl-fF
.
" 3 3 i ^ # f f i |
i n a V ^ ' '
CW+X Ciri-tC
3
ОрепЫоск
SubSyittnp&remctnfS... Crate mbsystm
• '
: CBI+G
O-eate the maskforthe sdetedsL javstem . Рас. 18.31. Подготовка к запуску редактора 1 i
маски
it •
Icon I parameters | Initialization j Oocumentsto ii г (con opto i ns ••——j r Drawn ig commands—• I
Puc. 18.32. ОКНО редактора маски после его запуска
1 8 . 7 . Работа с масками 1 8 . 7 . 1 . Редактор маски Как видно из рис. 18.32, редактор маски имеет четыре вкладки (в Simulink 4 их было 3). Отметим их назначение: • Icon — подготовка пиктограммы (значка) блока; 720
18.7. Работа с масками • Parameters — подготовка окна параметров блока (появилась в Simulink 5); • Initialization — подготовка средства инициализации; • Documentation — подготовка документации по блоку. Сверху окна имеется общее для всех вкладок поле Mask type, в которое заносится имя блока. Внизу имеются также общие для всех вкладок пять кнопок: • ОК — завершить установки и создать маску; • Cancel — отказаться от создания маски и закрыть окно редактора; • Unmask — снять маску с выделенного блока; • Help — открыть окно справки по редактору маски; • Apply — применить заданные установки не выходя из редактора маски. Следует отметить, что после создания маски команда Undo не работает, так что в процессе задания параметров маски не стоит нажимать клавишу ОК. Делайте это, когда вы уверены, что все данные для маскируемой системы введены. В ходе ввода данных целесообразно пользоваться клавишей Apply. Она вводит заданные данные и некоторые из них тут же отражаются на виде пиктограммы маски.
18.7.2. Создание окна параметров блока Как отмечалось, окно редактора маски появляется с открытой вкладкой Icon. Однако большинство пользователей считают создание новой пиктограммы блока (или его значка) вовсе не первоочередным делом. Многих вполне устраивает исходный вид пиктограммы блока. Куда важнее создать окно параметров блока. Оно может содержать параметры блока, а также флажки и списки. Для нашего блока Quadrator достаточно создать окно с двумя параметрами — а и Ь. Редактор маски позволяет задать до полутора десятков параметров и элементов управления, причем разного вида (см. ниже). Для создания данных окна параметров служит вкладка Parameters (рис. 18.33). •} Mask editor Subsystem Icon Parameters j initialization | Documentato in | "Dialog parameters— ' ~
: -Options for selected parameter '— ' 1 I Popups (one per line): In dialog: W Show parameter : P Enabe l parameter
Calback: OK
Cancel
Help
Apply
Рис. 18.33. Подготовка данных для окна задания параметров блока 721
Глава 18. Подготовка и применение подсистем При первом открытии вкладка Parameters содержит пустой список Dialog parameters. Этот список состоит из пяти столбцов: • Prompt — имена используемых в маске блоков; • Туре — типы параметров (выбираются из раскрывающегося списка: Edit — редактируемое поле ввода, Checkbox — поле для флажка, Popup — раскрывающийся список); • Variable — имена переменных, несущих значение соответствующих параметров; • Evaluate — признак исполнения; • Tunable — признак возможности изменения. Для создания этого списка служат четыре кнопки вкладки, расположенные слева: • Add — добавить в список новую позицию; • Delete — стереть выделенную позицию списка; • Up — поднять выделенную позицию списка вверх; • Down — опустить выделенную позицию списка вниз. В нашем случае, нажав кнопку Add, следует задать сначала имя блока Gain и переменную а, а затем имя блока Constant и переменную Ь. Для этих переменных надо использовать предложенные по умолчанию признаки исполнения и возможности изменения. Для завершения этого процесса достаточно нажать кнопку Apply (применить). Полезно обратить внимание на то, что возможно создание куда более сложных окон параметров со списками, окнами задания опций и иными деталями интерфейса.
18.7.3. Инициализация параметров Вкладка Initialization используется, если это нужно, для задания средств инициализации блока. Эти средства действуют только внутри максированной подсистемы. Если были определены переменные параметры, то их список появляется в поле Dialog Variables (см. рис. 18.34). ') Mask editor Subsystem
Icon j Parameters Initialization j Documentato in Г Dialog variables-
if Initialization commands-
.: г
i
„ „, i
OK
• •
I
••
"•!.'
Cancel
Рис. 18.34. Работа с вкладкой 722
I
i
Help
Apply
Initialization
18.7. Работа с масками В нашем примере инициализация не требуется и окно Initialization commands можно оставить пустым. Однако на самом деле возможности вкладки Initialization намного выше. В поле Initialization Commands можно записать любые выражения на языке системы MATLAB, в том числе содержащие условные выражения и переключатели. Это может потребоваться, например, для изменения вида пиктограммы создаваемого блока в зависимости от набора его параметров. После ввода нужных выражений надо не забыть зафиксировать это нажатием клавиши Apply (применить). Команды инициализации исполняются при открытии окна модели, при запуске модели на исполнение, выполнении команды Update diagram позиции Edit меню, при вращении или динамическом изменении пиктограммы. 18.7.4. Подготовка описания и документации блока Библиотечные блоки Simulink имеют два основных типа описания: • описание блока, размещенное вверху окна установки параметров; • справочное описание блока, размещаемое в справочной системе. Вкладка Documentation позволяет создавать описания обоих типов. Пример описания для создаваемого нами блока дан на рис. 18.35. Поле Block Description (Описание блока) служит для ввода текстового описания блока, которое будет размещено вверху окна параметров блока. Его размером не стоит злоупотреблять. Поле Block Help (Справка по блоку) служит для ввода текстовой части справки, которая будет размешена в справочной системе Simulink. Справка должна быть достаточно подробной. -> Mask editor Subsystem Icon | Parameters j Initialization
Documentation j
••MasktypeQuadratcr
~\ I
r Mask description
-Mask help — Quadrator- it is blockfor calculation v=axA2-*b. input parameters a and b. For exampe l a=2 and b=-1
Unmask
OK
Cancel
Help
J
Apply
Рис. 18.35. Подготовка описания и справки по блоку
723
Глава 18. Подготовка и. применение подсистем Таким образом реализуются единообразные правила описания блоков, созданных пользователем, и стандартных библиотечных блоков. Завершив ввод описаний, следует нажать кнопку Apply в окне редактора масок. 18,7.5. Создание простой пиктограммы блока Теперь настала пора подумать о том, какой конкретно будет пиктограмма (значок) нашего блока. Для ее подготовки надо открыть вкладку Icon окна редактора маски. Рисунок 18.36 поясняет создание простейшей пиктограммы, которая представляет собой прямоугольник с надписью внутри, состоящей из двух строк: Quadrator и у = ахА2 + Ь.
_ J —lESiJ ', ,."*"' J iC^wZJ' "Г
Рис. 18.36. Создание простой пиктограммы Как видно из рис. 18.36, вкладка Icon содержит поле Drawing command, в котором задаются текстовые и графические команды создания пиктограммы. Они задаются по правилам языка программирования MATLAB. Так, для создания указанной пиктограммы использована команда вывода текста посередине графического окна dJsp('TeKCT') Чтобы разбить строку текста (в нашем случае Quadrator и у - ахЛ2 + Ь) на две строки, использован специальный символ перевода строки \п. Пока для задания пиктограммы нашего блока этого достаточно. Нажав кнопку Apply, можно наблюдать превращение нашего блока в блок с новой пиктограммой (см. рис. ??.8 сверху). Пока наш блок имеет снизу название Subsystem. Нам осталось завершить процесс создания маски нажатием клавиши ОК. На практике перед этим рекомендуется еще раз просмотреть все установки на всех вкладках и скорректировать замеченные неточности, если таковые есть. Нажав клавишу ОК, мы фиксируем создание маскированной подсистемы. 18.7.6. Проверка модели с созданной маской Еспи выполнить двойной щелчок мыши на созданной маскированной подсистеме (маске), то появится окно параметров маски (рис. 18.37). 724
18.7. Работа с масками
Die*
::-Quart**-frask) Quadnso tr • i л boick к : _Gan i j Consa tnt •
№
j
'-'.
O K :C j ancel{ beb "I"3 Art |
Puc. 18.37. Работа с моделью, имеющей маскированную подсистему (маску) Запустив модель кнопкой пуска моделирования, можно наблюдать работу модели и, в частности, появление осциллограмм. Сравнение их с осциллограммами исходной модели (рис. 18.28) показывает их полную идентичность, что свидетельствует о том, что созданная нами маскированная подсистема работает так, как это было задумано. И,
DiuSHg
I
»
e
JNwn
in Ф a i I t И if ®
• • •"
.
Puc. 18.38. Работа с моделью, имеющей маскированную подсистему (маску) после изменения параметров а и Ь 725
Глава 18. Подготовка и применение подсистем Теперь проверим, что модель с маскированной подсистемой может работать при других значениях параметров, например а = 2 и b = — 1. Введя в окно параметров подсистемы эти параметры и пустив модель на исполнение, получим приведенные на рис. 18.38 осциллограммы. Здесь выходной сигнал имеет те же пределы изменения, что и входной (от —1 до +1), и созданная подсистема работает почти как идеальный удвоитель частоты входного сигнала.
18.7.7. Вывод описания и справки маски В верхней части окна параметров созданной маскированной подсистемы можно увидеть ранее созданное описание блока — см. рис. 18.37 и 18.39. А если нажать мышью кнопку Help в этом окне, то появится раздел стандартной справочной системы Simulink с текстом также ранее введенной справки (рис. 18.39).
\ Quadrator- it is bo lck for cac lua lto i n y=axA2+b. n Iput parameters a and \ b. For exampe l a=2 and b=-1. -
toriy
l
«
|
%
|
j
!
<
»
Й
5
-
Puc. 18.39. Пример вывода описания и справки по маске Итак, созданная маскированная подсистема приобрела все атрибуты библиотечного блока. Впрочем, одно важное отличие есть: в то время как библиотечные модули защищены от модернизации, маскированные модули остаются доступными для редактирования. Более того, их легко можно демаскировать.
18.7.8. Создание маски-справки На диаграммах моделей часто можно увидеть блоки со справочными данными. Их активизация открывает окно с текстом справки или описанием диаграммы. Вы также можете создать такие блоки в виде масок. Они могут иметь пиктограмму в виде вопросительного знака или текста с пояснением правил работы с такой маской. Обычно двойной щелчок мышью на пиктограмме такого блока открывает его окно и выводит текст справки. Можно также задать специальную функцию открытия, описав ее в поле Open function окна свойств блока Block Properties. Однако эта возможность используется довольно редко. 726
18.8. Расширенные средства создания пиктограмм блоков
18.8.
Расширенные средства создания пиктограмм блоков
18.8.1. Задание текстовых надписей Simulink вместе с базовой системой MATLAB открывает огромные возможности в создании любых пиктограмм. Но для этого необходимо использовать язык программирования системы MATLAB для вывода текстов и построения графиков. Учитывая ограниченный объем книги и ее направленность, мы воздержимся от подробного описания этих средств. Дадим только те из них, которые образуют «золотую середину» в части возможностей оформления пиктограмм. Список этих команд открывает список Command на вкладке Icon окна редактора маски. Этот список определяет тот набор команд, которые можно использовать. Прежде всего, отметим наиболее важные команды задания текстовых надписей в пиктограммах: • disp('TeKCT') — задание надписи Текст в середине значка; • text(x,y,'TeKCT') — задание надписи Текст с началом в точке с координатами (х>у); • fprint('TeKCT') — вывод форматированного текста по центру пиктограммы. В этих командах текстовая строка задается явно или в виде значения строковой переменной, например disp(var), где var = Текст'. Для перевода части текста на новую строку используется комбинированный символ перевода строки \п. Здесь также уместно отметить, что можно легко сменить текстовую подпись маскированной подсистемы. Вместо стандартной надписи Subsystem можно ввести задуманное имя блока — Quadrator. 18.8.2. Применение команд графики MATLAB На пиктограммах часто встречаются графические изображения. Например, для пиктограммы блока какой-либо функции нет ничего лучшего, чем изобразить хотя бы упрощенный график этой функции. Для этого можно использовать графическую команду plot(X.Y), которая строит линию из отрезков прямых, соединяющих узловые точки с координатами, заданными в векторах X и Y. Формат команды можно найти, выбрав команду plot в списке Command редактора маски. Зададимся целью создать пиктограмму блока Quadrator в виде прямоугольника с графиком параболы и надписью в ней у = ахЛ2 + Ь. Для этого, выделив блок, выполним команду меню File • Edit > Mask (Редактирование маски; в окне моделей Simulink. В появившемся окне редактора маски на вкладке Icon в поле Drawing commands зададим нужные команды p l o t ( [ 0 . 1 , 0.25,0.5,0.75,0.9], text(0.28,0.7,'у=ахЛ2+Ь')
[1,0.3,0.1,0.
3,1])
Первая из них строит грубый график параболы по 5 точкам, а вторая задает вывод надписи. Нажав кнопку Apply окна редактора маски, можно тут же наблюдать изменение вида пиктограммы ранее созданной подсистемы (см. рис. 18.40). Подбирая координаты точек в команде plot опытным путем, можно после нескольких попыток получить требуемое изображение параболы.
727
Глава 18. Подготовка и применение подсистем . : Г "
; "г
у Ф L-J (
Рис. .18.40. Пример редактирования пиктограммы блока 18,3.3. Средства специального оформления пиктограмм На вкладке icon мы пока не использовали четыре важных элемента — раскрывающиеся списки: • icon frame — тип отображения рамки пиктограммы: Visible — рамка видна; Invisible — рамка не видна. • icon transparency — задание прозрачности пиктограммы: Opaque — пиктограмма непрозрачна; Transparent — пиктограмма прозрачна. Если пиктограмма прозрачна, то через новое изображение будет просматриваться старое. Иногда это бывает полезно: например, если старое изображение содержит входные и выходные порты и их подписи, то они будут видны на новой пиктограмме. • Icon rotation — задание возможности вращения пиктограммы: Rotate —пиктограмма может вращаться; Fixed — ее положение фиксировано. • Drawing coordinates •— задание условий масштабирования и типа графики: Autoscale — автоматическое масштабирование; Normalized — нормализованное масштабирование: Pixe! — представление графики в пикселах. Пользователь может легко опробовать действие параметров, вводимых этими раскрывающимися списками. Например, на рис. 18.41 показан пример поворота на 90 градусов пиктограммы, созданной ранее. При таком повороте потребуется скорректировать связи между блоками. Успех нашего опыта на рис. 18,4! лишь частичный. Нетрудно заметить, что поворот писуика прошел гладко, но вот надпись явно «заехала» куда-то не туда (как решить эту проблему, см, ниже). 728
18.8. Расширенные средства создания пиктограмм блоков
Puc. 18.41, Пример поворота пиктограммы Рассмотрим последний раскрывающийся список — Drawing coordinates. Каждый из элементов этого списка имеет свои особенности. Параметр Auioscaie позволяет автоматически менять масштаб при растяжении пиктограмм в разных направлениях. Однако это относится только к графике и не касается текстовых надписей. Именно поэтому надпись на рис. 18.41 «уплыла». Параметр Normalized задает нормализованное изображение. При этом контуры или рамка окна пиктограммы имеет координаты левого нижнего угла (0,0), а координаты правого верхнего угла (1,1). Это облегчает задание параметров графических команд, значения которых не должны выходить за пределы [0,1]Параметр Pixel используется при задании параметров графических команд в пикселях. В этом случае решение задач (довольно непростых) по изменению масштаба и поворота рисунков пиктограмм возлагается целиком на пользователя.
18.8.4. Применение графического редактора пиктограмм MATLAB имеет специальный графический редактор для построения простых рисунков из отдельных линий. Этот редактор запускается прямо из командной строки MATLAB командой iconedit (рис. 18.42). При этом запрашивается имя диаграммы модели и блока, для которого создается пиктограмма. Этот диалог виден на рис. 18.42. Можно также выполнить команду iconedit('Maska', 'Subsystem'). В этом случае диалог при запуске отсутствует. В том и в другом случае появляется окно редактора пиктограмм (рис. 18.42 снизу). Работа с редактором элементарна. Сначала имеется пустое окно редактирования рисунка с крестом во весь экран из черных линий. Для создания рисунка по точкам используются всего три команды, вводимые с клавиатуры: 729
Глава 18. Подготовка и применение подсистем • d — удаление последней точки; • п — создание новой точки для построения новой линии; • q — выход из редактора с автоматическим обновлением рисунка пиктограммы. При помощи мыши можно перемещать крестообразный графический курсор. При нажатии левой кнопки мыши строится очередная точка и соединяется с предшествующей точкой. Указанные выше команды позволяют удалять ошибочно введенные точки, создавать новые точки для построения новых линий и завершить работу с редактором. На рис. 18.42 показан пример довольно грубого построения параболы с координатными осями. По завершении работы с редактором пиктограмм его окно закрывается нажатием клавиши q и в командной строке MATLAB появляется графическая команда, обеспечивающая построение заданного графика. Она появляется также в окне редактора маски в поле Drawing commands вкладки Icon. Можно также добавить команду вывода текстового комментария. Все это показано на рис. 18.43. Рисунок 18.44 иллюстрирует поворот созданной пиктограммы с коррекцией связей между блоками и установленным параметром Rotate. Как нетрудно заметить, на этот раз можно получить развернутую пиктограмму с правильным расположением надписей внутри неё. Хотя внешняя надпись осталась расположенной горизонтально. Разумеется, можно отредактировать команды графики на вкладке Icon. Например, на рис. 18.45 представлен еще один вариант построения пиктограммы для нашего примера. Обратите внимание на открытый список команд, которые можно использовать для построения пиктограмм в окне редактора маски. Возможности создания красочных пиктограмм с помощью столь простого редактора, конечно, ограничены. Но выглядящие технически строго пиктограммы вполне можно создавать после небольшой практики работы с редактором. «1Д1.21 й а г j С WATLAB6S\w
' Ffe Edit We* Inseit Tools Window Help a
i B S
3\
4
A
[&
/i /
£ t
. " .90 80 70 n so
B i o : K
l e t ft
E d f c o
h
\
•
4
\ 4 A ; " + • •
;
i : . . . . . .
:
•
3 0
• a w l
!
Рис. 18.42. Пример работы с графическим редактором пиктограмм 730
18.8. Расширенные средства создания пиктограмм блоков
О I lS И <3
X 4i Л '-'! • :
>
•|
-JOJJU icon I Parameter* | иишслиоп | OoiumenlAlion ;P,^,.3,,mn-..W(visible
^
i
i Transparency
j
[Fixed
: j Unite JAutoscale
i
T| • j "^Ji
• • j Command p o r t _ l a b e l
(Jab^1 specific ports)
0^
|
Can».
=
Рис. 18.43. Коррекция пиктограммы
Рис. 18.44. Пример поворота пиктограммы, созданной с помощью редактора пиктограмм 18.8.5. Задание пиктограммы в виде готового рисунка Пиктограмму в Simulink можно создать, используя практически любой графический редактор или файл графического формата, который поддерживается системой MATLAB. В число таких файлов входят файлы хорошо известных форматов PCX, JPG, T1F, BMP и др. Для загрузки такого файла служит графическая команда: image(imread('Mivm_0aPma', 'тип_файла')
Пример создания пиктограммы на основе применения данной команда показан на рис. 18.46. В данном случае в качестве рисунка для пиктограммы взята обложка книги (В. Дьяконов. MATLAB. Учебный курс. СПб. Питер. 2001). Эту книгу можно рекомендовать тем читателям, которые хотят глубже изучить возможности базовой системы MATLAB, в частности возможности создания графических изображений для пиктограмм. 731
Глава 18. Подготовка и применение
подсистем
•I Нлчк editor :Ou,(dratot : Icon j Parameters
j Initialization j Documentation j
;-lcon options—:—ii г Drawing c o m m a n d s - " " " " : Frame •
disp
\ Rotato in poLt_label 11 Rotates mage patch
j Syntax
(show t e x t in center of block] (show t e x t a t a location) (label specific poets) (show a p i c t u r e on the block) (draw f i l l e d shapes)
piotfliO 20 30 40], [10 2010 15])
Puc. 18.45. Пример применения команд из списка команд редактора маски
l'i - U г>
В
О
-
••
'
•
«
,1 « и к editor rftuMmtor Icon
j Parameters | Initialization | Documentation |
i c o n options*
Drawing commands
-
-••—
•-•-
—-
Fcame j Visible Trarfsparency
A
JTranspatent d Rotafion [Rotates Units
" 3
.
jftutoscale
d
! Examples of drawing commands *; : Command j image ; Syntax
(show a p i c t u r e on the b l o c k )
lmage(tmread('bJ47.jpg}}
OK Ready
.
,
U6b%
Cancel V
'
Held i .
kxte^s
,
Puc. 18.46. Создание пиктограммы на основе графического файла 732
18.9. Создание библиотек пользователя
18.9. Создание библиотек пользователя 18.9.1. Библиотека Commonly Used Simulink 6 При серьезной работе с Simulink может потребоваться создание библиотек пользователя, составленных как из созданных им блоков, так и блоков, взятых из встроенных в Simulink библиотек. Как показывает практика, большинству пользователей возможности встроенных библиотек Simulink кажутся явно избыточными и пользователи ощущают даже некоторый дискомфорт от постоянного поиска нужных им блоков. В Simulink 6, учитывая это, была даже создана специальная библиотека наиболее распространенных блоков Commonly Used. В состав этой библиотеки вошли следующие блоки: Bus Creator Data Type Conversion Gain Integrator Outport SaturationScope Subsystem Sum Unit Delay
Bus Selector Demux Ground Logical Operator Product Floating Scope Atomic Subsystem Switch
Constant Discrete-Time Integrator inport Mux Relational Operator Signal Viewer Scope CodeReuse Subsystem Terminator
Все эти блоки входят в другие библиотеки Simulink 5/6 и уже были описаны. Так что их включение в состав библиотеки Commonly Used связано не с новизной данных блоков, а лишь с желанием разработчиков дать пользователю небольшую библиотеку «на все случаи жизни». Увы, даже этот «подарок» не всегда позволяет обходиться только встроенными блоками. 18.9.2. Требования к библиотекам пользователя Выход из этой ситуации вполне очевиден — надо создавать свои новые библиотеки. Такие библиотеки по структуре и характеру применения должны удовлетворять правилам, существующим для встроенных библиотек: • размещаться в своих окнах; • иметь представление в виде пиктограмм блоков; • иметь должную сопровождающую документацию. При создании библиотек и их применении следует учитывать, что между блоком в модели и блоком в библиотеке устанавливается специальная связь. В прежних версиях MATLAB перенос блоков из какого-либо раздела встроенных библиотек в окно библиотеки пользователя требовал разрыва связи с блоками встроенных библиотек и создания связи с блоками в окне библиотеки пользователя. Для этого применялась команда Break Library Link (Разорвать связь с библиотекой). Уже в Simulink 4.0 эта команда была исключена. 18.9.3. Окно библиотеки пользователя Библиотека или набор блоков пользователя может быть создана в специальном окне библиотек пользователя. Это окно открывается командой File • New > Library (рис. 18.47). 733
Глава 18. Подготовка и применение подсистем . -.г
' И .
Reedy
.
"3
••. I »из -г Ф
Г:-00%
Г
™
~\ ~~~
~*кйе45.
.. .
.
Рис. 18.47. Создание окна библиотеки пользователя Нетрудно заметить, что это окно имеет несколько упрощенный интерфейс. В частности, в нем нет средств запуска процесса моделирования. Окно создается пустым. В конце строки состояния окна видно сообщение Unlocked, говорящее о том, что библиотека открыта и может изменяться и пополняться. 18.9.4. Перенос блоков в окно библиотеки В Simulink 4.0 перенос библиотечных блоков в окно новой библиотеки пользователей заметно упростился. Достаточно, расположив рядом окна браузера библиотек и новой библиотеки, перетащить в последнюю нужные блоки. Связи между ними и встроенной библиотекой редактировать не надо. Можно также перенести в окно новой библиотеки и созданные маскированные подсистемы. Прямо перетащить их в окно новой библиотеки нельзя — в ней действует «правило одностороннего движения». Это значит, что блоки можно перемещать из окна библиотеки в окно модели, но никак не наоборот. Тем не менее есть путь выполнить и эту операцию. Для этого достаточно выделить нужную маску, командой Edit • Сору меню окна моделей Simulink поместить маску в буфер, а затем (наметив курсором мыши положение) командой Edit • Paste поместить маску в окно новой библиотеки. Рисунок 18.48 показывает созданную таким образом новую библиотеку mylib. После заполнения блоками новая библиотека блокируется командой меню Edit • Locked. После этого библиотека становится недоступной для пополнения и модернизации. Впрочем, можно разблокировать библиотеку командой Edit • Unlocked и выполнить ее модернизацию. Завершается создание новой библиотеки ее записью на диск с помощью команды меню File • Save As... окна новой библиотеки. Библиотека хранится в виде файла с заданным именем и расширением .mdl (таким же, как и у файлов 734
/<з.9. Создание библиотек пользователя
•
•е
^
-•I >
• |№nal
•1
Й
й> • :•• 1J» в tf < р
2-; Sources. User -Oen fied Funco tins Aerospace Bocxset S i HC D M A Ree frence Bo lckset I Ready . 18.48. Ссозданная новая библиотека mylib моделей Simulink). Остается отметить, что внутри окна новой библиотеки можно создать окна ее разделов. Таким образом, структура библиотеки может быть многоуровневой. 18.9.5. Применение библиотек пользователя Работа с библиотеками пользователя ничем не отличается от работы со встроенными в Simulink библиотеками. С помощью команды в виде имени библиотеки (ее файла) можно вызвать окно новой библиотеки. Из него, как обычно, мышью можно перетащить нужные блоки в создаваемую модель.
735
Глава 19. Инструменты и практика моделирования 19.1. Меню инструментов Tools 1 9 . 1 . 1 . Роль инструментальных средств Simulink Подготовка и запуск моделей в Simulink производятся настолько просто и наглядно, что большинству пользователей могут не пригодиться специальные отладочные средства. Обычно разработчик модели, используя метод проб и ошибок, постепенно совершенствует ее и добивается ее корректной работы. Для контроля состояния тех или иных блоков к ним подключаются регистраторы, например осциллографы или дисплеи, что позволяет оценивать уровни входных и выходных сигналов и их временные или иные графические зависимости. Тем не менее Simulink имеет специальные инструментальные средства для отладки моделей [96—98]. Они особенно важны, когда идет отладка моделей событийно управляемых систем, систем со сложными логическими алгоритмами и т. д. В этом случае немаловажную роль играет отладка модели по шагам с контролем активности блоков и некоторых параметров с**;темы. 1 9 . 1 . 2 . Меню инструментов Tools Основные инструментальные средства Simulink 5/6 сосредоточены в новом меню — Tools (рис. 19.1). Появление этого меню облегчает доступ к разнообразным инструментальным средствам Simulink, которые теперь собраны воедино. Меню Tools имеет ряд команд: • Data Explorer... — открытие браузера данных; • Simulink Debugger... — открытие отладчика моделей Simulink; • Look-up table editor...— открытие окна редактора Look-up таблиц; • Data class editor... — открытие окна редактора класса данных; • Model discretizer... — открытие окна дискретизатора моделей; • Profiler — открытие окна профилирования моделей; • Coverage Setting... — открытие окна установок представления отчета по моделированию; • Real Time Workshop — доступ к расширению Real Time Workshop; • External mode control panel... — вывод панели контроля моделирования при внешнем управлении; 736
Data explorer... Simulink debugger... Look-up table editor... Data dass designer... Model discretizer...
Profiler Coverage settings... Real-Time Workshop External mode control panel... Fixed-Point settings... Linear analysts... Report generator... Requirements management interface...
Рис. 19.1. Меню Tools окна моделей Simulink
19.2. Работа с отладчиком графических
S-моделей
• Fixed Point setting... — доступ к расширению Fixed point; • Linear analysis... — открытие окна линейного анализа; • Report generator... — открытие генератора отчетов; • Requirements management interface... — открытие окна просмотра модели. Мы рассмотрим инструментальные средства Simulink не в том порядке, как они заданы в меню, а в порядке важности применения большинством пользователей.
19.2. Работа с отладчиком графических S-моделей 19.2.1. Запуск отладчика Отладчик графических S-моделей [97] обычно используется после загрузки или подготовки графической модели в окне моделей Simulink. Запустить отладчик можно тремя способами: • при помощи пункта меню Tools • Simulink Debugger...; • нажатием кнопки Debug панели инструментов окна S-модели; • выполнением команды sldebug в командной строке MATLAB: эИеЬид(Имя_модели). Рассмотрим графический интерфейс отладчика и его окно (рис. 19.2).
S? h.j S:
'%• С'П i >• II
• • | •«-
ft
Breakpoints | Simulation Loop |
'0" ! -Ф; 0.
/
~
^^ 5
Outputs | SorteaUst | Status |
~* ™—'
rB/eak/Display points
Remove selected point! p Break on ccnbtticns
—
! Г' step see limited By state
:omu*uiel lint
Ui".: the Fl tety ot tht Kelp button for '
! Г" Mirtorfime steps '. i
NaN values
:•
Break at time i
.2. Начало работы с отладчиком моделей 19.2.2. Панель инструментов отладчика Окно отладчика не имеет меню — управление им происходит только с помощью кнопок панели инструментов (рис. 19-3). 737
Глава 19. Инструменты и практика моделирования
p
! •
1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
I
1
1
I
I
I
i
1
3
1
4
Рис. 19.3. Панель инструментов отладчика моделей Эта панель имеет следующие органы управления (в основном кнопки): 1. Step into current method — шаг в текущий метод; 2. Step over current method — шаг с пропуском текущего метода; 3. Step out of current method — шаг из текущего метода; 4. Step to first at start of next start time — шаг к началу следующего стартового времени; 5. Go to start of next block method — переход к началу следующего метода блока; 6. Start/Continue — старт/продолжение отладки; 7. Pause — пауза в отладке; 8. Stop debugging — остановка отладки; 9. Break before selected block — установка точки прерывания перед выделенным блоком; 10. Display I/O of selected block with executed — показ исполняемых блоков ввода/вывода; 11. Display current I/O of selected block — показ текущих блоков ввода/вывода; 12. Enable/Disable Animation — подключение/отключение анимации; 13. Animation Delay — регулятор времени задержки анимации; 14. Help — вызов справки по отладчику.
19.2.3. Работа с отладчиком Отладчик имеет множество различных режимов работы, из которых мы рассмотрим лишь основные. При запуске отладчика выводится окно с пустыми установками и открытой вкладкой Outputs (Выходы). На этой вкладке размещено короткое приглашение к работе с отладчиком и пояснение его назначения (рис. 19.2). Работа с отладчиком основана на расстановке так называемых точек останова (break points) и точек показа (display points). Их список формируется в поле Blocks. Чтобы включить блок в список, надо выделить его и нажать кнопку Break before selected block — блок будет помещен в список Blocks. Пример включения блока Sine Wave в список точек останова показан на рис. 19.4. Для каждого блока можно задать опции останова и показа его выходного сигнала (установкой флажка после имени блока в списке). При запуске модели будет происходить остановка моделирования перед каждым из блоков, включенных в список Blocks, с выводом результатов на каждом шаге. Признаком работы отладчика является появление в верхнем левом углу окна модели информационного сообщения, выделенного прямоугольником из пунктирных черных линий. При этом блок, на котором произошла остановка моделирования, указывается линией, выходящей из блока информационного сообщения и кончиком указывающей на блок линии (ранее блоки выделялись цветом). Если линия указывает на обычный блок, то она принимает вид стрелки, цвет которой меняется в зависимости от работы блока (например, активизации входного или 738
19.2. Работа с отладчиком графических S-моделей
•
D
G* U c i
4
• •I•« J
•
-
.
•
v :• ч !•
ВГМКРОМЗ
ftl -^ | ,<• 0 (
| simulation Loop |
Outputs j Sorted List | Status |
f Brea^Dlaplay points ;
•• the %imniiik debu-jijec.
Remove selected point! iK?ued iri tin
; Break on conditions •• .' ;.';.;
I Г"Zero Crossings
{ Г Step size limited by stale 1 Г Minor time steps
..
1 Г" NaN values Break at bine з
Puc. 19.4. Включение блока Sine wave в список точек останова
выходного порта). Для удаления выделенных блоков из списка Blocks служит кнопка Remove select points. На рис. 19.5 дан пример пошаговой работы модели, в котором контролируется несколько блоков модели. Виден момент проверки выхода блока Sine Wave. Для выполнения очередного шага отладки следует нажать кнопку Start/Continue панели инструментов. .
Г
0
•
:
;
:
;
I*:*:;' j I
Ш
as
i *• 00 5 £сссг
.1 Srmibnk debugger я.»«К!
Е? Ь ST1 й, м Breakpoints
II
«Г
*
О
Simulation Loop
\- Product. P
21
1"" ConstantP I Stim.OiitPp • Scope.OyP
24
p
Й-RootSystee.ip L
5in.Ut3dar
гщаякз.Solver
p
U Outputs
Method •,. \<}\ XD 1 S-jPootSvatga. (p 1 9 d
! ;-казкЭ, Update
D
23
0
| f
^ Sorted List
'5 | ? Status
(sldebug 020) : Trace: Data of 0:0 Sin block 'шазкЭ/Ззпе Wav<
[TH - 0.8 ldebug S28):
] 0:0 Sin.Update
'шазк::-Ппе Wave
2£ 26 27 28 :v 29
STl - [0.71735609089952279] lit break point:0 before 0:0 Sin block uethods 'тазкЗ/Si TH - 1 (sldebug @20):
Puc. 19.5. Момент тестирования блока Sine Wave
739
Глава 19. Инструменты и практика моделирования Как видно из рис. 19.5, на вкладке Outputs отражается текущее модельное время Тт, имя контролируемого блока (в виде индекса блока @s:b, где s — номер S-модели и b — номер блока), значение его входного параметра U, и выходного Y,. Их анализ позволяет оценить корректность работы блока. В ходе отладки блоки из списка тестируются последовательно. Если в данный момент тестируется блок, расположенный в подсистеме (в том числе маскированной), то в информационном окне появляется информация о том, какой блок подсистемы тестируется в данный момент. Помимо кнопки последовательной пошаговой отладки по списку Blocks можно воспользоваться и другими кнопками в панели инструментов. Например, кнопка Step to next block обеспечивает отладку по шагам с переходом к следующему блоку (то есть от одного выделенного блока к другому). А кнопка Go to start of next time дает переход к следующему такту времени.
19.2.4. Дополнительные возможности отладчика Отладчик позволяет установить различные типы точек останова, например безусловные и условные. Раздел окна отладчика Break on condition задает опции, обеспечивающие останов при выполнении различных условий: •• Zero crossing — прохождение сигнала через нулевой уровень; • Step size limited by state — превышение допустимого значения шага; • Minor time steps — недопустимо малый шаг времени; • NaN values — появление нечисленного значения (NaN); • Break at time — остановка в заданный момент времени. Можно просмотреть весь цикл отладки а режиме анимации. Для этого достаточно активизировать кнопку Animation и выставить регулятором (или оставить по умолчанию) скорость анимации,
19.2.5. Проверка порядка выполнения блоков Вкладка Sorted List (в отладчике Simulink 4 она называлась Execution Order) окна отладчика позволяет получить информацию о порядке выполнения блоков в ходе моделирования (рис. 19.6). Содержание этой вкладки очевидно. Обратите внимание лишь на то, что в маскированных подсистемах отражаются все входящие в них блоки. На рис. 19.6 представлен момент, когда тестируется выход блока Product, входящего в маскированную подсистему Quadrator (об этом можно судить по надписи в информационном блоке отладчика и линии, указывающей на подсистему Quadrator).
19.2.6. Оценка состояния отладчика Состояние отладчика на текущем шаге моделирования можно оценить по информации, приводимой на вкладке Status (рис. 19.7). Как нетрудно заметить, это состояние оценивается значением текущего времени моделирования, используемой по умолчанию командой исполнения отладки, степенью активности команд останова (stop) и прерывания (break), числом и характером точек прерывания и трассировки и др. Всего используется около полутора десятков признаков состояния, и все они видны на упомянутой вкладке.
740
19.2. Работа с отладчиком графических S-моделей
Co lse
I? t) 81 ft M ! ••( И; -оBreak Pon i ts - Sm i ua lto i n Loop . j Outputs SorteaUst j status |
н IDie^J| 1
Method
i
" Sin. [luttjf~
20
\ •JFroduct-, Г" ! Gain.Out: Г"
21
i
23
Sum. Putt. Г~
2 4 .,•
Scope. OuP
25 •
Г
Й-Ro otSY3teB,!r •Sin.TlDdaf
Ьг-«кЗ
Solver
'«esteS/Quadrator/Cain 1 (Gain, t i d - 0 ) 'aasItJ/ijuadistor/Ci.-'nat.aiit' ( C o n s t a n t , t i d ' l )
22
tonscant | ~
У вазкЭ Update
0:2 0: 3
26 27 :... 28 —
Г".
;
. •.
........
rnre—пии
irsj:«o
Puc. /9.6. Просмотр порядка выполнения блоков
.Breakpon i ts Sm i ual to i n Loop J e a s k 3 . O u t p u t s . РГ"
Outouts | SortedLai t Statue j Current ai&ulation i ;Caulc command to t
1:
j
• [• • • Sin.Outpf
20
I
•"" Product, Г
21
" Constant!""
23
ik when step sise is limiting by a sta Пие break point iceaJt on non-finite (N4N,Inf} values isplay level Cor disp, trace, probe
I j 1уфа?к3.1ГрйаЦ ;
f
i.7.r[Root5y3teai.T' L
11д.ш.Цг4йГ"
4>na3k3.Solwec
.Г
26" 27 ^
: 3.8
(HajoiTUeStep)
iisab. disab diaab. disab l (i/' 0
Animation Hode 1ош reuse :ution Hode
2829
Puc. 19.7. Оценка состояния отладчика 19.2.7. Управление отладчиком из командной строки MATLAB С появлением в Simulink 4.0 отладчика с удобным графическим интерфейсом целесообразность работы с отладчиком из командной строки MATLAB резко уменьшилась. Тем не менее возможность отладки из командной строки сохранена. 741
Глава 19. Инструменты и практика моделирования Ниже приводится список команд отладчика, доступных из командной строки MATLAB. Обратите внимание, что некоторые команды допускают повтор (Yes), другие нет (No). Команда
Краткая форма
Повтор
Описание
ashow
as
No
Показ зацикливания
latrace
at
No
Установка циклов трассировки
bafter
ba
No
Вставка точки останова при выходе из блока
break
b
No
Вставка точки останова при входе в блок
bshow
bs
No
Показ указанного индексом блока
clear
cl
No
Удаление точки останова
continue
с
Yes
Продолжение моделирования
disp
d
Yes
Показ I/O блоков при останове
help
?orh
No
Вывод справки по командам отладчика
ishow
i
No
Включение/выключение показа общей информации о моделировании
minor
m
No
Включение/выключение режима minorstepmode отладки с использованием второстепенных шагов
na
No
Установка/удаление остановок при небесконечных значениях
next
n
Yes
Переход к состоянию в следующий момент времени
probe
P
No
Показ сигналов на входе/выходе блоков.
quit
q
No
Прерывание моделирования.
Run
r
No
Запуск моделирования
slist
sli
No
Список невиртуальных блоков
states
state
No
Показ значений текущего состояния
status
stat
No
Показ параметров отладчика
step
s
Yes
Переход к следующему блоку
stop
sto
No
Остановка моделирования
systems
sys
No
Список моделей невиртуальных систем
tbreak
tb
No
Установка/стирание остановок по времени
trace
tr
Yes
Показ входов/выходов блоков во время выполнения
undisp
und
Yes
Удаление блока из списка отображаемых
untrace
unt
Yes
Удаление блока из списка трассировки
xbreak
X
No
Прерывание при переменном шаге времени или состоянии, требующем ограничения шага
zcbreak
zcb
No
Прерывание при обнаружении непредусмотренного пересечения нуля
nanbreak 1
1
ij
742
_]
i
19.3. Браузер данных Simulink Краткая форма
Команда
I 1
zclist
Повтор
zcl
Описание
No
Список блоков, дающих непредусмотренное пересечение нуля
Пример работы с отладчиком в командном режиме представлен на рис. 19.8. В первой строке видана команда запуска отладчика из командной строки: sldegug('mask3'). При управлении из командной строки отладчик дает ту же информацию, что и при управлении из окна отладчика. ! (г,
т
г *
i
*
,
сТГ~• И
•-' - , м
I @ masW.lnitialize.lnvangnlConstants |
&е Edit tfew Wefc ШгкЬ* ДО Q fi£
Г *
•
%
-
?
j C u r r e n t
D r e d o r y .
| c W A T L A 8 6 S \ w o r k 3
J
» sldebug('mask30 Warning Temporarily disabling "Signal storage reuse'to allow use with slrlebuy Warning: Simulink debugger is disabling block reduction option. fTM = O ]mask3. Simulate (sldebug @0i n [TM= 0 (sldebug@1):n
|mask3. Start
[TM= 0 J mask3.lnitialize (Sldebug <5}9); n % T )
• ••...-•
••
% •
.
-
•
.
.
-
•
-
•
• •.
1 * 1
- £
S t a r t
B
u
s
y
,
P r o f i l e r
o
n
.
•
•
•
•
.
.
.
.
•
•.-...•.
Puc. 19.8. Работа с отладчиком S-моделей из командной строки MATLAB Для более детального знакомства с командами отладчика, используемыми в командном режиме MATLAB, можно использовать команду h или ?, выводящую полный список команд отладчика с их опциями. Для завершения работы с отладчиком можно использовать комбинацию клавиш Ctrl и С. ВНИМАНИЕ
Работу с отладчиком в командном режиме MA TLAB можно рекомендовать только достаточно опытным пользователям. Этот режим предоставляет наиболее полный доступ к средствам управления моделями — например, позволяет просматривать результаты промежуточных вычислений и выполнять во время останова операции системы MATLAB.
1 9 . 3 . Б р а у з е р д а н н ы х Simulink Для контроля данных, которые используются пакетом Simulink, служит браузер данных. Его окно (рис. 19.9) вызывается при помощи команды меню Tools * Data
743
Глава 19. Инструменты и практика моделирования
( Properte is 1 9 MATLAB numerci array
•\V ... v /
;
'
' '; ... •
"•• , :.•'• . • •• ,..':.' .• ' ' • ' -' Hep l . | ri«CW»e •;
Рис. 19.9. Окно браузера данных Simulink Explorer.... В данном случае данные относятся к модели демонстрационного примера П4. Окно браузера данных имеет два раздела. В левом имеется список использованных объектов с указанием их типа (Class). В правом разделе (Properties) указывается подробная характеристика выделенного объекта.
19.4. Подготовка отчетов по моделированию 19.4.1. Что такое отчет? Перед любым разработчиком модели устройства после создания и отладки модели возникает весьма специфическая обязанность — подготовить отчет. Отчет должен содержать детальное описание модели, ее блоков, значений параметров и т. д., вплоть до приведения полученных при моделировании осциллограмм. В новых реализациях MATLAB и Simuiink появились специальные средства, блестяще решающие эту задачу, — генераторы отчетов. В Simulink генератор отчетов доведен до высокой степени совершенства — по полноте отчета и красочности его подготовки с Simulink трудно сравниться даже хорошему инженеру с качествами отличного оформителя.
19.4.2. Установки просмотра отчета Simulink обеспечивает детальный анализ данных моделирования с помощью специального отчета. Команда меню Tools • Coverage Setting... выводит окно с установками параметров просмотра отчета (рис. 19.10). Это окно по умолчанию содержит обычно сброшенный флажок Enable Coverage Reporting (Включить отчетность). Если установить этот флажок, то станет до-
744
19.4. Подготовка отчетов по моделированию ..
.-
•
*.
'Ах
:•* it» S -i *
о : в* н *|-> *i es 12 е , > . р
The Sfmun l k model coverage tool records the executo i n of control fo l w constructs within Sfmun il k bo l cks and Stae i fo l w dai grams. Coverage I Resutls | Report | Opto i ns |
0:>v»rag« mem 's P Decsio i n Coverage Г МСС'С Coverage
Puc. 19.10. Окно настройки отчетов ступным ряд установок. Так, нажатием кнопки Browse можно открыть окно поиска пути к модели и ее подсистемам, по моделированию которых составляется отчет (рис. 19.10 слева). Можно также задать запись объектов в рабочую область, автоматическое увеличение индекса в имени переменных и задание генерации отчетов в виде HTML-файлов. На рис. 19.11 показана вкладка Report окна Coverage Setting.... Здесь особо надо отметить опцию Generate HTML Report (сгенерировать HTML-отчет), которая задает возможность генерации отчета на языке программирования HTML, принятого в Интернете в подготовке гипертекстовых документов и справок. Кнопка Setting... открывает окно установок HTML-отчета, показанное на рис. 19.11. Ввиду того что лимит на объем данной книги практически исчерпан, изучение несложных опций этого окна и других вкладок окна Coverage Setting... оставим читателю для самостоятельной разборки.
19.4.3. Запуск генератора отчетов Для запуска генератора отчетов надо выполнить команду меню Tools • Report generator... Появится окно генератора отчетов, представленное на рис. 19.12. В этом окне имеется множество файлов-шаблонов для подготовки отчетов. Чтобы формировать отчет по шаблону, выберите требуемый шаблон и нажмите кнопку Set. Модель будет запущена на выполнение автоматически, и все стадии ее выполнения будут отражены в автоматически создаваемом отчете.
19.4.4. Редактирование отчета Генератор отчетов позволяет выполнить детальное редактирование отчета. Для этого нужно нажать кнопку Edit в окне генератора отчетов. 745
Глава 19. Инструменты и практика моделирования Et;a 11, я,»
-1 ,. I .. • Toosl I»,,
•) HTML Sett**» Р Include each test in the model summary P Produce bar graphs in the model summary Г" Use two color bar graphs (red,blue) Г" Display hit/count ratio in the model summary Г" Oo not report fully covered model objects
•
I ft Ш
The Sm l un iK model coverage tool recod i s the execuo tin of control fo l w constructs witfitn Sm l un i k bo lcks and Statefo l w daigrams. 3Ji<J . Coverage | Resutls Report | Opo tins ] • . ..'..; P Oenerate HTML report Setn i gs "• '' <"* Cumualvtie runs ' .. • • •-. .• .•'••' •.' • . ^ Last run •••••. '. Addtional data to n i cu l de in report (cvdata obe j cts):
P include cyciomatic complexity numbers in summary . P Include tytlomalic complexity numbers in block details
100 4
Рис. 19.11. Окна установок отчета ) Setup file lirt- select a «rtup We ft» C:SMATLAB65\toob l ox\daa l b3seWqb\databa5etb l x.rpt \MATL4B65\toolbo«\fcpoinl\fiipl-iepoit.[pl CAMATLABS5\o l ob l ox\rDtgen\chMutoa i .ltpt ATL 5 M V i l i d
CAM AT LAB 65\toob l ox\p i tgen\magci-squae i. rpt C: \M AT LAB S5\toob l ox\f ptoenv'nf e li -teport. rpt СЛМАТ LAB S5\toolbox\rptgen\simple-repoit. rpt C:\MATLABG5\toolboxVrptgen\slideshow-book.(pt C: \MAT LAB 65\toolboK\iptgen\ws var -tepott. ipt CAM AT LAB 65Moo1box\rptgenext\sifm
CAMATLAB65\toolbox\iptgenext\simulink-dynamic.rpr С АМАТ LAB 65MoolboK'«ptgenext\simulinkirnages. rpt CAMATLABG5\toolbox\rptgenexl\simulink-summary.rpt C:\MATLAB GSMoolboxVplgenextSstatellow-defauk. rpt C: \MAT LAB65\toolbox\rptgenext\stateflow-nest. rpt C:\MATLAB65\toolbox\rptgenext\ttable.rpt
) |CAMATLAB65\toolboK\rptgenext\sm i uln i k-clelault.p it The default leport lot a Sm i uhnk system. Reports on the current model [or 114' if there is none} and the current system in that mode.l
Puc. 19.12. Окно генератора отчетов
Однако надо отметить, что редактирование отчетов процесс отнюдь не простой. Об этом свидетельствует окно редактирования, представленное на рис. 19.13. ВНИМАНИЕ Генератор отчетов — сложная программа, и ее полное описание выходит за рамки данной книги. Пользователям, не слишком искушенным в применении пакета Simulink, можно порекомендовать работать с установками генератора отчетов, принятыми по умолчанию.
746
19.4. Подготовка отчетов по моделированию
jo* am
.••••*••
V.Y; ' | ?
~ 3 , а Ф •••• I R I
} $
I Setup Fde Editor - С:\НДТ1ДВ65\1дазвюж\ф*а«нэй
C \:MAT LAB 65Mooo tox^ С \MATLAB 65\toolbox l
CAMATLAB65UoolboxV1 ЛМАТ1АВ65\1оойх* C:\MATLAB65\JoolboK1 C:\MAT LA865\toolbox'l CAMATLAB65\toobox1 C:\MATLAB65\toolbOK '
и
CAMATLABBSStoolbox1 У7.ТМ¥Л:1>Л\ЪГ l&П CAMATLAB65\r.ooboxl CAMATLAB65\toolboK1 CAMATLABSSMoorbox С VMATLAB65\(ooW1 CAMATLABSSMoolbOK I С:ЧМАПАВ65Уоо1Ьо!
Sh И j
Setup ffle Editor latinch
[ -j if (siemp»v(tn id_sysrem(S ' eafC* . [ ) Eval sulng -Xi no modesl t I ]TH i ePage-Sm i un ilkDe(adt [ •] Model Loop - cwrent modelR e p o r t O p t i o n s .[ ] Sm i ualte modd СЛМАГ1_АВ6[|\~огк\.гаи ink-delauft html .(•]Chap«l- |
Othfif
^1
1; k
e ftimuirik-defauft) Г
•_LJ
• • .• • -
|«rl№
Г* It report already e»st», mcrementtopievent overwriting 1 — Fl eport Fwmat & SlyJesheel [web (HTML) —
jJjSrigle-PageWeb
j j
Gerwetion Option* — : —
. .;.:;.::•••:.•• щ
••
•
[
a
i e j
S
m
e
n
n
i
•
l
d
•
i
n
t
h
"
•
'
s
k
e
c
•
y
u
s
r
t
r
:
.
e
e
'
m
n
.
t
R
s
y
.
e
s
p
t
.
o
e
;
t
m
-
i
s
i
n
n
t
h
•
n
a
t
Й
•
h
t
e
m
c
o
•
i
d
x
e
§
•
:
;
.
r
e
n
t
•
/
•
m
-
o
|
•
'
d
e
l
l
1 HTML on a smote
Ready
„•:..
•
.
.
.
Ш %
• I
Г
• iod
Рас. 19.13. Окно редактирования отчетов 19.4.5. Пример подготовки отчета Для подготовки отчета по текущей модели (например, созданной ранее простой модели mask3) достаточно запустить Интернет-браузер и нажать кнопку Report окна генератора отчетов. Генератор автоматически выполнит моделирование схемы и выведет окно Интернет-браузера с подготовленным отчетом. Заметим, что для подготовки отчета в формате HTML нужно в окне Coverage Settings (рис. 19.10) установить флажок Generate HTML report. На рис. 19.14 показано начало отчета в окне браузера Internet Explorer 6.0, входящем в состав операционной системы Windows XP. •I*..' r^vav
fc.j
•lax»»»
Св«а
C>V**M •
.
.
^
^
.
Siinulink Default Report The M.ihW orks
J
TaNpofCo.teit;
List of Tables ] -1 mask3 Stmufcrnon Paramtten
Lbl of Figures
. 19.14. Начало HTML-отчета no модели mask3
747
Глава 19. Инструменты и практика моделирования Уже из начала отчета видно, что он составлен в лучших традициях HTML-документов. Каждый раздел отчета представлен гиперссылкой, активизация которой переводит соответствующий раздел в область просмотра браузера. Просмотрим созданный отчет, чтобы получить представление о его структуре и содержании. Отметим, что данный отчет выполнен по стандартной форме (по умолчанию), тогда как генератор отчетов Simulink имеет множество других форм (см. рис. 19.12). Рисунок 19.15 показывает раздел отчета с описанием модели. Он начинается с указания того, какой решатель дифференциальных уравнений использован и какие параметры были для него заданы. Затем идут подробные таблицы с описанием блоков модели. jaiii
a Semte i * Oefaut Report -Mcirosoft Internet Ex*jtor» 6-д
С *J
»
c
/СЛ"
1
ZJ О n
Is
Chapter 1. Model - mask3 Table 1-1. mask.l Simulation Parameters \ZeroCross on
» 0.0 StopTme 10 0
j.4ijjc>/ auto \F;\edStep auto Table 1-2. Sin BllKk Properries JN'ime
iSieeTypeiAropiitudeHias
jSine KVave
'Time 'based
i
|o
FreqHency !Pbase
:Sa!,nples 'Offset
SampleTime |\ ectmPararoslD'
fi
[To
jo
[6
jo
ion . _
J
Table 1-3. Qaadrator Block Properties Name
!;
IQuadrator
|i
Table 1-4. Signal Properties
Puc. 19.15. Описание модели и ее блоков в отчете На рис. 19.16 показано продолжение описания модели. Здесь приводится графическое изображение модели и спецификация ее блоков. Изображение модели точно такое же, как в модели (рис. 18.46 и 18.47). Наконец, на рис. 19.17 представлена заключительная часть отчета — осциллограммы модели. Итак, полученный отчет отличается детальностью. Пожалуй, даже большей, чем в описании модели mask3, по которой готовился отчет. Его можно использовать как непосредственно в отчетных материалах по работе, так и для подготовки справочных материалов для библиотек пользователя моделей.
19.5. Инструменты ускорения моделирования 1 9 . 5 . 1 . Профилировщик Profiler Команда Profiler в позиции меню Tools включения/выключения профилирование моделей. Это мощное средство, обеспечивающее оценку скорости выполнения того или иного шага моделирования. По умолчанию эта опция выключена. 748
19.5. Инструменты ускорения моделирования
U
Tlblt 1-4 Signal Ргоря lies ;.\auie
jDescriprioB
:PareatSysfem
к:о4:.оозг>
1юде
•
од j Ccwrw;
Co«pile
J
da™-
! •
i ,';
• mask! с Quaiiatra
S y s t e m
-
>
m a s k 3
_
ЧЕ31
Рис. 19.16. Изображение модели и спецификация блоков в отчете
^J £ 2 Переход { Ccuw fable 1 6 Block T>T»# Co«il "of :|Occ«rr«aces
jjB^kTjp. jSubSymm
I
.llluck Names jQpadratpr
1 :
' Sine Wye •
j Scope
!
'
! Scc^e
Figure 1-1. Scope
•II Ш
Hi
№
Puc. 19.17. Осциллограммы модели в отчете Для включения профилировщика достаточно установить данную опцию включенной и пустить текущую модель на исполнение. Для нашей модели начало профилирования показано на рис. 19.18. Нетрудно заметить, что при включенной опции профилирования исполнение модели ведет к генерации отчета о профилировании, который появляется в окне Help — на рис. 19.18 оно показано справа от модели. 749
Глава 19. Инструменты и практика моделирования
О :&: Н
JD|>
Fie Edit Ve iw Go Web Wn idow Hep l ГГЯ] | 4- *4 С ; Ш Find m pege; j
Go j ' •
J C./DOCUME~1//^MMHH-1/LOCALS~in"emprtp365767_surnrnary^ Add to Favontes j
fl
Surprnary | Fi.jng.t.ifii^pgtaii? I
Simulink Profile Report: Summary Report generated 23-M-2004 13:36.58 Total recorded tm i e: 0.08 s Number of Bo l ck Methods: 7 Number of Internal Methods: 7 Number of Nonvritual Subsystem Methods: 2 Co lck precs io in 0.00000004 s Co lck Speed. 2574 Mhz ! Function List ills Tiir«/call
p 07800000O ijO0 .% [ 150.6300000 I 808 .4 :
S«tf time
1 0.0780000000 0.00000000 0.0% 1 0.0630000000 О 06300000 SO 8 * 1 0.0150000000 0.01500000 •19.2% /19.2% ш л а
i
Рис. 19.18. Начало профилирования модели mask3 В верхней части отчета видны четыре гиперссылки, относящиеся к разделам отчета: • Summary — суммарный отчет; • Function Details — детали работы функций; • Simulink Profile Help — справка по профилометру; • Clear Highlighted — сброс подсветки блоков. Уже суммарный отчет дает достаточно полное представление о факторах, влияющих на время моделирования. На рис. 9.19 дана почти полная таблица этого отчета по очень простой модели mask3. Нетрудно заметить, что время выполнения даже повторяющихся операций с простыми блоками арифметических операций очень мало и индицируется (с учетом ограниченной разрядности результатов вычислений) как нулевое. Заметим, что это характерно для вполне современного ПК, на котором выполнено моделирование, — это компьютер с процессоров Pentium 4 НТ с частотой 2,6 ГГц. Рисунок 19.20 показывает начало раздела по деталям функций. Нетрудно подметить, что данной простой модели этот раздел ничего особо нового не добавляет. Однако в случае более сложных моделей, в том числе демонстрационных из раздела Demos справки, ситуация может существенно измениться. Остальные разделы отчета по профилированию в особых комментариях не нуждаются. В профилировании нуждаются практически все модели, которые создаются профессионально и могут многократно использоваться. 19.5.2. Применение Simulink-ускорителя Скорость выполнения простых и демонстрационных моделей обманчиво велика и некоторые из них выполняются на современных ПК в секунды, а то и доли 750
19.5. Инструменты ускорения моделирования
Hs Edti Ve iw Ga Web W nidow Hep i UP' •• -» С! e*Fn id in page: Kites j i Summary I EurjaieD-QelaiJs I ВкшШ.ВШ^Лё^
I n^JiaMgbUd-Blachs-
Function List Name sim
Time 0.07900000
100.0%
ModeUExecute
p 06300000
30.8%
о.овзооооооо D.06300OOO 603%
ЬазкЗ
Modellnit i a l i z e
0,01500000
10.2%
1 P . 0 1 5 0 0 0 0 0 0 0 0.01500000 19.2%
ModelTeraunate
0.OOOOOOOO
0.0%
g=
Integrate
0.00000000
0.0%
Sine Wave (Update)
0.00000000
! 0.0%
1
0.0780000000 p.oooooooo
0.0%
1 p.OOOOOOOOOO p.oooooooo
00%
0.0000000000 0.00000000
0.0%
50
51 ООООООООООО
jD. OOOOOOOO
mesk3 (Update)
0 . 0 0 0 0 0 0 0 0 ! O.o%
51 0 . 0 0 0 0 0 0 0 0 0 0 0 . 0 0 0 0 0 0 0 0
I 0.0%
0.00000000
00%
0 . 0 0 0 0 0 0 0 0 0 0 ООООООООО
0 0%
Scope (Output)
0.00000000
Sum (Output)
p.oooooooo
• 1
апазкЗ/Зссре
-'
0.04
imask3/Quadracor/3um
:
0 04
iwask^/Ouifidrator/Canstanc
:
'
1
Ш
Constant
51 0 . 0 0 0 0 0 0 0 0 0 0 рхюоооооо
Gain (Output)
o.oooooooo I 0-0%
51 0 OOOOOOOOOO p.oooooooo : 004
Product (Output)
0.00000000 . 0.0%
51 0.0000000000
Sine Wave (Output) ооооооооо
0.04
;
'- j
Wave
iwask-3
51 p.OOOOOOOOOO ООООООООО i ООН 51 0 . 0 0 0 0 0 0 0 0 0 0 p.oooooooo
тш
• 0.0%гюазкЗ/Sine
MaiorUpdate
I o.o%
;j
1
poooooooo i 0.0% ЬазкЭ/Quadrator/Produce
о Ui>:«>.-A"joo 0 OOOOOOOO
i 0.04
I i
}
1
t
Рис. 19.19. Таблица из суммарного отчета профилирования модели mask3
File Edit V«w Go Web Wrtdow il 4- -» С I S» JF«Wlnp,sR:|
!
I C:/DOCUM6-ilAflMHHM-1/LOCALS-in"emp/tp365767_detailshtml
S i m u l i n k
P r o f i l e
R e p o r t :
F u n c t i o n
_^J
A d d t o Favorites |
D e t a i l s
Time: 0.078Ш000 s (100.0%) Calls: 1 Selftime:0.0000roCOs (100 0%) jFunction;
ГП1М
•Calls rnmefcali
sim
О.07Э000ОО I
i
1 p.0780000000
Parent functions:
-
thiId functions: tiodelExecute
0.06300000 ieo.8% I
1 р.овзооооооо |
M o d e l l n i t i a l l z e p.oi50000o Ho-2% j
i jo.oi5ooooooo j
ModeXTerntinate
1 p.0000000000 I
p.00000000 i 0.0% {
—
j
. . . . . . . . . . .
Рис, 19.20. Раздел Function Details из отчета профилирования модели maskS 751
Глава 19. Инструменты и практика
моделирования
секунды. Однако при решении серьезных задач моделирования она может быть неудовлетворительной, даже на самых мощных компьютерах. Нередко время моделирования в Simulink достигает несколько часов, а то и суток. Поэтому важно знать меры по ускорению моделирования. В фирменном описании [97] отмечаются следующие приемы повышения скорости моделирования: • • • • • • • • • • • •
применение Simulink-ускорителя (акселератора); переход от непрерывных моделей к дискретным; рациональный выбор метода и шага интегрирования; устранение избыточной точности вычислений; сокращение интервала времени моделирования; отказ от моделей, описываемых жесткими системами дифференциальных уравнений; исключение из моделей алгебраических контуров; выравнивание тактов дискретности; ограничение числа осциллографов; ограничение применения MATLAB-средств, таких, как блоки MATLAB Fen и блоки S-функций; исключение из моделей блоков памяти Memory, заставляющих решатели ОДУ переходить от высокоэффективных методов решения ДУ к методам первого порядка; ограничение применения блоков генерации случайных чисел Random Number.
Одним из действенных методов уменьшения времени моделирования является применение Simulink-ускорителя или акселератора (Accelerator). В режиме моделирования Normal система Simulink осуществляет моделирование в интерпретирующем режиме. Переход в режим Accelerator означает компиляцию модели и создание быстро исполняемых кодов. Получающаяся при этом модель представляет собой файл динамической библиотеки *_acc.dll, где * — имя модели. При этом используются компоненты системы работы в реальном времени Real-Time Workshop и С-компилятор 1сс, включенный в поставку Simulink. Для включения Simulink-акселератора достаточно поставить мышью птичку у опции Accelerator в позиции Simulation меню. После этого, пустив модель на исполнение, в окне MATLAB можно наблюдать ход компиляции модели, а затем увидеть и ее исполнение. Попробуем оценить на практике выигрыш в скорости моделирования при применении Simulink-ускорителя. Для этого запустим модель П4 на моделирование в режиме Normal, с включенной опцией создания отчета. Будет выведен отчет, который показан на рис. 19.21. Обратите внимание на время моделирования — оно составило 3,81 с. На рис. 19.22 показана информация по времени выполнения функций для модели П4. Здесь уже хорошо видна разница во времени выполнения различных блоков. Теперь сменим режим моделирования с Normal на Accelerator и вновь пустим моделирование с профилированием. Новый результат представлен на рис. 19.23. На этот раз время моделирования равно 0,42 с. Таким образом оно уменьшилось почти в 10 раз, что является прекрасным примером эффективности Simulink-ускорителя. 752
19.5. Инструменты ускорения моделирования
Simulink Profile Report: Summary Report generated 23-Jul-2004 14 03 06 3 61 s Total recorded time: Number of Bo l ck Methods 55 Number of Internal Methods. Number of Nonvritual Subsystem Methods: Co lck precision. 0 00000004 Co lck Speed: 2574 M Function List Name
Ti me
Locao tin (must us* MAUftB Hep l brf S/tew)
Cas l Tm i e/
3.81200000 '100.0% :
1 3.8120000O00017 0 0O0CO00O 0.04 f 1J
"Mo del Execute
3 79700000 • 93.6% •
Integrate
3.25100000
:
1 3 7970000000023 0 17100000
05.3* ' 1352 0 0024045857888 0.00000000
4.5% 'f J 4 0.0% f i ^
MinorOutputs
. 19.21. Начало отчета по профилированию модели f!4 без ускорения
File Edit Ve iw Go Web Wnidow I ieip jr] Add to Favorites j
} C/PGCUME- ЬАЦМИНИ"1/|_ОСА|_5-1Л"етрЛр030б1 5_.summarv htrnl
Function
List
MATLftB hep l bro gun
3 31Л0СО0 .100.0%
3 81Г0000000017
0 .COOOOQOO
. ' 3.7970000000023 0.17100000
С 0'*
ModclExecute
3.79700000 ! 96.64 :
Integrate
3.25ЮО000 ; 85.3% 1352' 0.0024045857988 0 000O0000 ; 0.0%
KinorOutputs
2.40600000 ; 63.1%
454
9232 0.000259211378S O.032OOO0C : 0.8%
*14 (MinorOtttput) _ 2.37400000 • 62.3% 9282 0.0002557333440 0 73300000 I9.2H ;
Mino tDeriv
0.84^00000
fW
(MinorDeriv)
O.S 1400000
±14
(Output)
0 33000000
87%
1353 0 .0002439C24390 0.09400000
2 ••"*
HajorOutputg
p 33000000
8 7%
,3,3 0.0002430024390 0 00000000
0.0%
(Output)
0.1 1200000 • 2 9У, юез5 0.0000105312647 0.11200000
2.8%
0.11100000
1 SW
Proport ional plus integral
22.2%
9882 0 00O0855OSO063 0.03100000
0 У"*
21.4% i 9982 0.0000823719995 0 28ЭО0000
7 41*
2.9% 10S35 0 0000104372355 0. H100000
di
Яыс. 19.22. Таблица времен выполнения функций (блоков) начало отчета по профилированию модели J14 753
Глава 19. Инструменты и практика моделирования Fde Edti V e iw Go Web W nidow Hep l | 4» •• С I •*J Add to Favofe is j Simulink Profile Report: Summary Report generated 23-Ju!-2004 14.07:10 ; Total recorded time. 0.42 s Number of Bo l ck Methods: 5 : Number of Internal Methods: 5 Number of Nonvritual Subsystem Methods: 4 ) Co lck precsi o i n: 0,00000004 s i Co lck Speed2574 Mhz Function List o l cato i n (must use MATLAB h browser to ve i w)
Cafil e i /ca!l
1Э.42200000 ;i00.0% ;
1 0.4210890399487 0.00000000 : 0.0% I f 1 4
0.40700000 ] 90.44 !
1 p. 4060809096901 0.01000000
3.9% [г I t
0.3280QOOO ' 7 7 7 4 I 1352 JO .00024200 35503 0 03100000 \ 7.ЭЧ p.28000000
VfA±
6 3 0 % ; 9?82 0.0000286570106 0.12400000 29.4% i f 1 4
Рис. 19.23. Начало отчета по профилированию модели fl4 с ускорением
Можно вычислить примерное время моделирования и из окна MATLAB: > tic,[t,x,y]=sim ('f14',1000);toc elapsed_time = 0.6880 Это время, ввиду иных условий запуска, несколько отличается от полученного с помощью профилирования. 1 9 . 5 . 3 . Дискретизация моделей Новым средством Simulink 5 является дискретизатор моделей. Он вводится исполнением команд Model Descritizer... в позиции Tools меню. Она открывает окно дискретизатора — см. пример на рис. 19.24. В этом окне можно просмотреть модель и выбрать блоки, которые можно сделать дискретными. Например, в нашем случае это блок генерации синусоидального сигнала. Рисунок 19.24 демонстрирует работу модели после дискретизации этого блока. Дискретизация отчетливо видна как ступенчатая синусоида. После дискретизации модель может выполняться быстрее, порою во много раз.
1 9 . 6 . Работа с LTI-вьювером 1 9 . 6 . 1 . Вызов LTI-вьювера командой Linear analysis... Команда Linear analysis... служит для открытия окна с результатами линейного анализа систем. Эта команда полезна для специальных моделей, в которых может быть реализован этот вид анализа. Модели могут быть как линейными, так и не754
19.6. Работа с LTI-выовером
I ! ,. if .t i 0 is j. >:. 'Ъ n " 1
*5 .Sini
C
u
r
r
T
r
a
n
S
a
m
R
e
p
e
n
s
t
f
p
s
o
l
r
e
e
l
e
m
t
c
m
i
m
•
t
e
e
.
i
t
j
p
i
s
c
a
c
r
e
e
t
c
e
u
o
h
n
:
o
d
S
;
j
:
b
i
l
r
o
i
z
j
e
c
n
k
s
s
(
e
l
E
e
n
l
c
t
e
r
W
o
-
o
a
v
r
d
e
w
i
e
r
h
o
l
d
d
1
j
t
n
e
e
.
'
j
t
i
o
r
И n
p
a
-
•
I
r
a
t
m
h
t
o
r
e
S
e
t
t
i
n
g
s
!
'
.
'
-
e
;
d
:
t
e
r
s
i r
s-domam) d 3 X la
"
S
rr
.
• : ; ' . • •
l
' *t I Curent Driectory; j
'-!»
•
J
rDsicrezilato in statusT outa luo bo ls cksbo trc aknssform : de.l 1..1 C n i l u Iined m Conntiuous b o llc ks n c uro ent see lcto in: 1 So lcks transformed n i curent see lco tin: 1 (Sm i un lk ModelOsicreztier «Stan | Рис. 19.24. Работа с окном
дискретизапора
«ВЕ?
пчТ||н i i n m
_jf_:|
.
t P i ie на и
j Matrix «
Puc. 19.25. Модель линейной системы с обратной связью
линейными. В последнем случае автоматически реализуется линеаризация выбранного фрагмента модели. Рассмотрим типовую модель линейной системы с комплексной отрицательной обратной связью (рис. 19.25). Прямое и обратное звенья системы реализованы 75.5
Глава 19. Инструменты и практика моделирования блоками операторной передаточной характеристики Fen. Как видно из приведенных осциллограмм, реакция системы имеет колебательный характер, типичный для системы второго порядка. Для проведения линейного анализа исполним команду Linear analysis... в позиции Tools меню. Появится пустое окно LTl-Viewer, окно с предупреждающим сообщением и окно с портами входа и выхода выовера. Эти окна показаны на рис. 19.26.
То m d l * DM 'nvwlt »n« output!
ijW»
- "•
f~
Рис. 19.26. Средства линейного анализа После этого необходимо перенести порты входа и выхода выовера в модель и расположить их так, чтобы они выделяли нужный фрагмент — в нашем случае два звена с обратной связью. В окне выовера надо исполнить команду Get Linearized Mode! — выполнить линеаризацию модели. В окне вьювера тут же появится график переходной характеристики системы — зависимости ее выходного сигнала от времени при наличии на входе единичного скачка. Это показано на рис. 19.27. 1 9 , 6 , 2 . Выбор
СОСТОЯНИЙ
системы
Отвлечемся от дальнейшего анализа системы и отметим одно важное обстоятельство — относительно какого состояния выполняется линеаризация. Это состояние можно менять с помощью окна рис. 19.28, выводимого командой Set Operating Point... в позиции Simulink окна LTI-вьювера. Заодно отметим, что в этой позиции меню есть и команда удаления портов вьювера Remove Input/Output Points. В окне установки состояния системы можно установить одно из трех состояний для линеаризации: Initial status in Simulink diagram — состояние, соответствующее исходному состоянию модели; Zero status value - состояние с нулевыми условиями; User-defined state values — состояние, задаваемое пользователем. 756
19.6. Работа с LTI-вьювером
Puc. 19.27. Результаты моделирования линейной системы •> Operating №*ifce2
Linearize about initial states in Sriafjhk da i gfai Г Zero ttate values Г Usei-detfmed stale values Nan» 1. e2/T<»isl«Fcn(1)
Puc. 19.28. Окно установки состояния системы при линеаризации Последний выбор ведет к активизации списка имен блоков и панелей для ввода значений их начальных сигналов. 19.6.3. Выбор графических характеристик линейных систем Но продолжим изучение возможностей LTl-вьювера. Он позволяет строить едва ли не все мыслимые характеристики линейных систем Response type: • Step — переходная характеристика (реакция системы на единичный скачок); • Impulse — импульсная характеристика (реакция системы на единичный импульс с площадью I, бесконечно малой длительностью и бесконечно большой амплитудой); • Bode — логарифмическая амплитудно-частотная и фазочастотная характеристики; • Bode Magnitude — только одна логарифмическая амплитудно-частотная характеристика 757
Глава 19. Инструменты и практика моделирования • • • •
Nyquist — диаграмма Найквиста; Nichols — диаграмма Николса; Sigma — сингулярные числа системы; Pole/zero — нули/полюсы системы.
19.6.4. Конфигурация вывода графиков Графики характеристик можно расположить в одном графическом окне, выбрав количество характеристик и вариант их расположения. Для этого достаточно исполнить команду конфигурации графиков Plot Configurations... в позиции Edit меню окна вьювера. Это приведет к появлению окна конфигурации, показанного на рис. 19.29. Для каждого подокна графики можно задать из списка одну из указанных выше характеристик. Выберем к примеру, конфигурацию из 4 графиков — рис. 19.29 с показанными справа списками характеристик. Тогда окно вьювера будет таким, как оно показано на рис. 19.30. Здесь построены: переходная, импульсная, амплитудно-частотная и фазочастотная характеристики системы и диаграмма Бодэ.
1 PtotConHguratHK See lct * response po lt confg iuato in г
1
zl
2
с
•Response yp te •
Г
•И
Э: I Bode 4: JBodeMagnituc^l
zl
Caice! Hep l Puc. 19.29. Окно установки
6
конфигурации графиков линейной системы
г ;;:
'Ч/ \\
Puc. 19.30. Переходная, импульсная, амплитудно-частотная и фазочастотная характеристики системы и диаграмма Бодэ
758
19.6. Работа с LTI-вьювером ШШ
•
i:
I
Рис. 19.31. Шесть характеристик линейной системы на одном графике Рисунок 19.31 еще более информационный. Здесь, помимо уже отмеченных характеристик линейной системы, показаны еще две характеристики — диаграммы Найквиста и Николса. Они часто используются для графического анализа устойчивости линейных систем с обратными связями.
19.6.5. Пример линеаризации нелинейной системы Как уже отмечалось, команда Linear analysis... осуществляет линеаризацию выбранной части даже нелинейной системы. Проверим такую возможность на практике. Для этого в нашу систему добавим явно нелинейный элемент — ограничитель (рис. 19.32). Настроив пороги ограничителя на 0 и 3, убедимся, что ограничи-
:• ' I •••,. •,.,•:, ! •.„. •,.!. ,.„„, отав
е\ с
у . рг~
ins
Puc. 19.32. Пример линеаризации нелинейной системы 759
Глава 19. Инструменты и практика моделирования тель действует и срезает верхушку выходного сигнала. Это отчетливо видно на осциллограмме выходного сигнала, представленной на рис. 18.32 справа. Пустив LTl-выовер, можно убедиться в том, что линеаризация прошла успешно, в результате чего получены переходная и импульсная характеристики системы — окно в левом нижнем углу Однако переходная характеристика ограничения выброса не содержит. Это и говорит о том, что LTI-вьювер позволяет получить характеристики линеаризованной модели, даже если она нелинейна.
19.7. Прочие инструментальные средства В позиции Tools имеется и ряд других инструментальных средств: • Команда Reai-Time Workshop открывает доступ к так называемой мастерской реального времени, которая описана в главе 16. Пока отметим, что эта мастерская позволяет управлять процессом моделирования Simulink с помощью внешних устройств, которыми может оснащаться компьютер. В результате становится возможной организация компьютеризованных систем, работающих в реальном масштабе времени. Команда External mode control panel... открывает окно с установками для работы Simulink в режиме внешнего управления. • Команда Fixed-Point setting... открывает окно для установки параметров Simulink, нужных для работы с расширениями Simulink, использующими средства быстрых вычислений с фиксированной точкой. • Команда Requirements managements interface... открывает окно интерфейсного навигатора Requirements managements interface Navigator. • Команда Look-up Table table editor открывает окно редактора таблиц, позволяющего создавать сложные таблицы. • Команда Sirnulink Class Data Designer открывает окно классов данных. Эти команды носят явно специфический характер. Большинство пользователей системой Simulink ими едва ли воспользуется, а те, кому это понадобится, наверняка легко разберутся с ними самостоятельно.
1 9 . 8 . П р а к т и ч е с к и е п р и м е р ы моделирования Мы подходим к концу первой книги по системам MATLAB 6.5 SP1/7 и Simulink 5/6, И «на закуску» рассмотрим с десяток примеров применения системы Simuiiiik для моделирования различных систем. Это как оригинальные, так и наиболее показательные примеры из справки системы.
19.8.1, Построение спирали Карно Спираль Карно хороший пример на применение интеграторов расширения Simulink. Спираль строится с применением (при изменении t от 0 до tMaKC) следующих выражений: х(0 = \'ocos{x2)dt; y(t) = 760
19.8. Практические примеры моделирования Они задают построение графика спирали Карно в параметрическом виде. Для этого используется виртуальный графопостроитель (рис. 19.33). Текущее время формируется генератором нарастающего напряжения, которое начинается с уровня — 10 для построения двух ветвей спирали. Затем этот сигнал возводится в квадрат и его синус и косинус интегрируются с помощью блока интеграторов. Осциллографы показывают временные зависимости сигналов на входах интеграторов.
iSSULb 4, Рис. 19.33. Построение спирая и Карно
19.8.2. Синтез АМ-сигнала Радиотехники знают, что амплитудно-модулированный синусоидой гармонический сигнал имеет несущую частоту и боковые частоты. Проверим это суммированием сигнала с частотами 14, 15 (несущая частота) и 16 рад/с и амплитудагии несущей 1 и 0,5 для боковых частот (это соответствует 100% модуляции). Рисунок 19.34 показывает справедливость данного утвержлени»; -- действительно, суммирование трех указанных частот формирует АМ-колебание, представленное осциллограммой. Частота модулирующего сигнала при этом равна 1. Рисунок 19.34 демонстрирует также применение блока спектрального анализа для получения спектра синтезированного АМ-колебания. Полученный спектр в виде АЧХ- и ФЧХ-сигнала представлен на рис. 19.35.
19.8.3. Нестабильные линейные системы с обратной связью Если линейная система охвачена положительной или комплексной обратной связью, то она может вести себя как апериодическая или колебательная система, как стабильная, так и нестабильная. На рис. 19.36 показаны две явно нестабильные системы такого рода. Они представлены передаточными функциями Fen,
76!
Глава 19. Инструменты и практика моделирования •
шшж
" • •
Oup tutu asedsneThewavp eaa w r HfiIieh ew tnrie eae teh o titn^ rm eh e te sre t«n eerticyttypaeessdre ltedh tmc uo gm h-pua
j Sam elt pe pienod *2*p/F (e rquency "Samp elm ile - Numberdt s#s<s* «amp el* * Phase * Same ps l pur penoJt / {T ijse the sample^ase-i wi« type IF numericalдоЫеи»due to running ;«ge tidies i,e g. overftow m alssokXe UTTIOJ occur
jnle^et vector parameters as l-D OK
СгкЛ
Рис. 19.34. Синтез АМ-колебания
P
i
r
j
o
i
o
v
w
S
p
e
c
t
r
a
!
D
e
n
a
r
y
-
[
Pur. 19.35. Спектр синтезированного
АМ-колебания
удобными для описания линейных систем, таких как электротехнические и радиотехнические цепи, фильтры, механические резонаторы и т. д. Верхняя система ведет себя как апериодическая нестабильная система — сигнал на ее выходе экспоненциально возрастает и может достигать очень больших и на практике не реальных значений. Вторая система — колебательная и сигнал на ее выходе имеет вид нарастающей синусоиды. 762
19.8. Практические примеры моделирования
та Ггя™№ Fen .25
ID Э.05»2***1
тrwuter Fcr>2
Ямс. 19.36. Спектр синтезированного АМ-колебания 19.8.4. Получение незатухающих почти синусоидальных колебаний Для получения незатухающих почти синусоидальных колебаний надо использовать колебательную нестабильную линейную систему, дополненную ограничителем. Это значит, что такая система становится нелинейной. Чтобы улучшить форму сигнала, можно расположить ограничитель на входе блока, задающего прямой канал системы с частотной избирательностью (в электронных генераторах эту роль обычно выполняет резонансный LCR-котур). Это иллюстрирует рис. 19.37, где сверху показана линейная система, а снизу — нелинейная. Если на некоторой частоте колебаний существует баланс амплитуд и фаз, то колебания приобретают вид почти синусоидальных колебаний с этой частотой и с неизменной амплитудой. На этом и основаны генераторы синусоидальных колебаний. Системы, в которых колебания возникают самопроизвольно и без каких-либо внешних воздействий, называют автономными. Представленные на рис. 19.37 системы не являются таковыми, поскольку в них используется источник внешнего воздействия в виде перепада. Моделирование автономных систем может вызвать значительные трудности при определенном задании начальных условий. Поэтому приходится моделировать либо неявно заданные скачки какого-либо сигнала, либо имитировать шум, присущий любым реальным устройствам. Рисунок 19.38 иллюстрирует эти подходы. В первой из систем источник постоянного сигнала на самом деле является источником перепада, действующим в момент t = 0 начала моделирования. Во втором случае имитируется шум на входе системы. Кроме того, во втором случае на входе блока прямого тракта имеется ограничитель, обеспечивающий установление режима колебаний с низменной во времени амплитудой. 763
Глава 19. Инструменты и практика моделирования
Puc. 19.37. Переход от линейной колебательной системы к нелинейной
И
Рис. 19.38. Модели систем с «самопроизвольным» возникновением
764
колебаний
19.9. Демонстрационные
примеры. Simulink
19.9. Демонстрационные примеры Simulink 19.9.1. Доступ к демонстрационным примерам Simulink В выполнении сложного и трудоемкого процесса математического моделирования важное значение имеет знакомство с профессионально подготовленными демонстрационными примерами. Любой программный продукт, относящийся к компьютерной математике, всегда содержит обширный набор встроенных примеров, называемых демонстрационными примерами. Они, как и электронные справки систем, являются неотъемлемой и важной частью программных систем и знакомство с ними пользователей систем и читателей книг по ним безусловно необходимо. В то же время нельзя не отметить, что число таких примеров, например для расширения Simulink, столь велико, что описание всех примеров просто не реально. Ниже дается описание нескольких наиболее показательных демонстрационных примеров. С остальными читатель может ознакомиться самостоятельно. Доступ к демонстрационным примерам Simulink возможен из вкладки Demos справки системы MATLAB или Simulink. Рисунок 19.39 демонстрирует доступ к демонстрационным примерам Simulink. В левой части окна справки видно четыре папки с демонстрационными приме-
рами Simulink:
• Features — особые примеры; • General — примеры общего характера; • Automotive — примеры моделирования транспортных и автомобильных систем; • Aerospace — примеры моделирования систем летающих объектов.
l> G efn i g Started wtih Demos | $"4 MATLAB 3 ^Toob l oxes f*b|2g| features Щ Qj General "ti ^Automotive i*! l J Aerospace
j |
!' К Embedded Target for Moioto.'a* MPC; f
W Embedded Тагде)to-Ti C6000 DSP {:
S 9
Simulink Demos Sm i un ilk is a tool for Moden ilg, anaylzn i g, and sm i ua ln il g physc i al ?nd mathematcial systems, n i cu l dn i g those w;h l nonn ilear ae lmensi and those that make use of conn tiuous and dsicrete m il e As an extenso i n o^MAHAB. Sm i un ilk a;tos many fealjrps ipscific to dynamci systems whe li retan in i g all of general purpose functo i natliy of MATLAB Run demo^ in !ne foo l wn i g categore i s to see Sm i un ilk in acto in
Real-Time Windows Target
@9- Ш Real-Time Workshop
[?
i*! " K SimMechanJcs .>! К SimPowerSystems •+J Ц Simulink Performance Tools 3j К Simulink Report Generator .»• К Stateflow ffl W xPC Target | & Ц Blockseb
У
Category Descrp i to in Sm i un ilk provd i es many features for powerful artu intuitive F-e 'au lres m oden ilg Some mao jr features are ilustrated in (hast demonstrao tin modesl. i un ilk has the ability to sm i ua l te a a l rge range ot 1 Generalj|Sem yslerns, from very Sm i pel to extraordn i aryli compe lx. The | modesi and de^'onstrao il ns 'hat you *i)l see :n this secto in In i duce both sm i pe l and compelx systems Atlhough the I1compelx systems are nowhere near the limits of what can . .fr- • • • • . .. „_ • •• . . .
•
.
.
,
.
-
Puc. 19.39. Доступ к демонстрационным примерам Simulink
765
Глава 19. Инструменты и практика моделирования Разумеется, примеры могут быть загружены в Simulink и обычным путем — из окна команды Open. Примеры легко идентифицировать по имени файла, которое видно в титульной строке окна Simulink. 19.9.2. Моделирование простого маятника Динамические системы широко представлены в механике. Мы рассмотрим две таких системы. На рис. 19.40 представлена простая система механического маятника — подвешенного за верхний конец стержня. Маятник совершает сложные движения — наряду с быстрыми колебаниями на частоте резонанса заданы беспорядочные отклонения стержня от состояния равновесия.
v. D: &у a LHJ
• • •- ' " • F-^
•- • ' ,. •
. .' <
„ffjx|
zl й Ф -> I » в !f *
1 mbd,
Puc. 19.40. Модель механического маятника Модель маятника представлена инерционной системой с обратными связями. Блок Animation Function выводит графическое окно анимационного изображения колебаний. На нем можно видеть колебания стержня — маятника. На рис. 19.39 представлен лишь один кадр анимации. 19.9.3. Колебания многозвенного объекта Гораздо сложнее оказывается поведение сложных многозвенных систем, со звеньями, имеющими степени свободы, находящихся под внешним воздействием. Рисунок 19.41 показывает модель колебаний объекта, состоящего из трех подвижно сочлененных стержней, находящихся под сложным воздействием. Каждое звено может поворачиваться относительно точки сочленения звеньев. Колебания такого объекта подчас могут носить весьма причудливый характер. Он иллюстрируется анимационными движениями многозвенного объекта.
766
19.9. Демонстрационные
• 'i.|ST
РРР
АЙВ
примеры
Simulink
Jg ^ f t E g ]
s
Рис. 19.41. Моделирование колебаний многозвенного объекта 19.9.4. Моделирование отскакивающего от поверхности мячика Моделирование отскакивающего от поверхности (пола) мячика — любимая задача на математическое моделирование в физике. Пример ее решения из справки по Simulink показан на рис. 19.42. Дифференциальные уравнения, описывающие •
D'lJBS
•
.
.
.
:
,
.
.
r iV _ > • i . I Conn tuc fJS^me frtegraton of the n iput sgna,l Estwnalreset:|7з!!пд
zl i
1пйЫ condition source: jerfemai Г" 1мл aJpm
J
i
.••-• • •
• M
l
Г~ Show мШгайюл port
!
P? Show state pott Absoluts tolerance:
1
W Enasle ion) crosang detectiw
«мИ
,1 I. • • • • — — — i ^ 1 l ^ — W I
[,oo%
r~
Г
•i
Жв
"~
Рис. 19.42. Моделирование отскакивающего от поверхности мячика 767
Глава 19. Инструменты и практика моделирования динамику модели (кстати, как и в предыдущих примерах), скрыты в модели и для пытливого читателя могут послужить поводом для тщательной разборки модели. При моделировании учитывается потеря энергии при каждом отскоке мячика. Осциллограммы на рис. 19.42 показывают изменение скорости движения (она положительна при подскоке мячика и отрицательна при его падении) и положения мячика. Это еще один пример релаксационной механической системы с резким изменением состояния в момент падения мячика на поверхность. 19.9.5. Моделирование автопилота с аналоговыми блоками Одними из первых примеров успешного применения Simulink стало моделирование автопилота — устройства, применяемого на воздушных судах для выдерживания заданного курса. Сейчас для этого применяются цифровые и дискретные системы и даже средства нечеткой логики. Но первые автопилоты строились на аналоговых устройствах и по сути представляли собой системы с обратной связью, корректирующей положение воздушного судна. Рисунок 19.43 показывает упрошенную модель такого автопилота и демонстрирует ее работу. Одна из важных задач в построении подобных систем заключается в минимизации времени отклонения воздушного судна от заданного автопилотом курса. Страшная катастрофа над небом Германии, когда столкнулись российский и американский самолеты, показывает на актуальность решения этой задачи. К сожалению, ускорение реакции автопилота (типичной сильно инерционной системы) на возникшее возмущение обычно сопровождается появлением характерного затухающего процесса, который ведет к рысканию воздушного суда при внезапной смене курса (именно этот случай и демонстрирует модель рис. 19.43). Стремление уменьшить рыскание ведет к существенному усложнению автопилота, построенного на аналоговых блоках. В блок автопилота приходится вводить
Рис. 19.43. Моделирование автопилота, построенного на аналоговых
768
блоках
19.9. Демонстрационные
примеры
Simulink
Рис. 19.44. Усложненная модель автопилота с малыми колебаниями реакции сложные многоконтурные обратные связи и корректирующие цепи. Усложненная модель автопилота показана на рис. 19.44. Она обеспечивает намного меньшие колебания воздушного судна при резкой смене курса.
19.9.6. Пример дискретной системы Одним из путей усовершенствования систем с обратными связями, такими как автопилот, является переход к реализациям на дискретных компонентах и дискретных методах. Пример такой реализации из числа демонстрационных примеров Simulink 5/6 дан на рис. 19.45. Напомним, что дискретные блоки характеризуются передаточными функциями переменной z, которые могут использоваться для z-преобразований. 1 9 . 9 . 7 . Применение примеров раздела Automotive В разделе Automotive справки Demos имеется множество интересных примеров на применение систем, которые используются на движущемся транспорте, в частности автомобильном. Это системы стабилизации скорости и угла поворота, электрические и гидравлические системы управления и т. д. Из всего этого множества примеров рассмотрим первый (рис. 19.46). Рис. 19.46 показывает модель системы, управляемой дросселем. Это типичная ЕТ-система, управляемая триггером. 1 9 . 9 . 8 . Ранняя модель автопилота летательного аппарата F14 Раздел Aerospace — один из самых крупных разделов демонстрационных примеров. Система MATLAB + Simulink давно используется для моделирования авиационных систем и отдельных объектов. В разделе Aerospace можно найти множе769
Глава 19. Инструменты и практика моделирования
.Die*
~3i Ы Ф I
J- ф
••
'
'
Рис. 19.45. Модель трехканальной системы с дискретными блоками
г
>у-
j
.0 | Engine Timing Model л Demonstration of Triggered Subsystems
PMC. 19.46. Модель ЕТ-системы, управляемой
триггером
ство примеров этого. Мы ограничимся рассмотрением только примеров, относящихся к системам, именуемым автопилотами. Таким образом, мы продолжим тему, затронутую выше в разделах 12.11.5 и 12.11.6. На этот раз мы рассмотрим модели, относящиеся к конкретному летательному аппарату — F14.
770
19.9. Демонстрационные примеры Simulink На рис. 19.47 представлена одна из ранних моделей упрощенной системы автопилота для аппарата F14. Модель описывает отработку летательным аппаратом скачка, задающего изменение курса. Работа модели контролируется тремя осциллографами, осциллограммы которы представлена на рис. 19.47. Можно отметить высокое качество переходных процессов — выбросы на осциллограммах едва заметны. Модель выглядит простой для такой сложной системы, как автопилот. Но эта простота достигнута применением ряда подсистем, часть которых показана на
ШВВММ1
Рис. 19.47. Ранняя модель автопилота летательного аппарата F14
Рис. 19.48. Некоторые подсистемы модели рис. 19.47 771
Глава 19. Инструменты и практика моделирования рис. 19.48. Даже общий обзор этих подсистем показывает, что данная модель реализует аналоговые методы построения управляющих систем. 19.9.10. Комбинированная модель автопилота F14 На рис. 19.49 представлена демонстрационная комбинированная модель автопилота F14. Она имеет управляемые вручную (мышью) переключатели, позволяющие сравнивать аналоговую модель с двумя вариантами цифровых моделей. На -J5IS1
Рис. 19.49. Комбинированная
модель автопилота F14 (аналоговый
вариант)
v.i-'• яшюттшшшф
'
• • •
Рис. 19.50. Комбинированная модель автопилота F14 (цифровой вариант — DAP) 772
19.9. Демонстрационные
примеры Simulink
рис. 19.49 переключатели задают аналоговую модель. Осциллограммы в правой части модели дают представление о ее работе в аналоговом режиме. На другом рисунке (рис. 19.50) показана работа в одном из двух цифровых режимах. Можно подметить, что характеристики аналоговой и цифровой моделей близки, но цифровую модель всегда легче реализовать и контролировать. Некоторые из подсистем данной модели представлены на рис. 19.51. В них в свою очередь входят другие подсистемы. Таким образом, данная модель является хорошим примером построения моделей с вложенными друг в друга подсистемами.
Actuator PoetBon Sensor
Рис. 19.51. Комбинированная модель автопилота
F14 (цифровой вариант — DAP)
77.3
Список литературы 1. Дьяконов В. П. Компьютерная математика. Теория и практика. М.: Нолидж. — 2001. 2. Дьяконов В. П. Справочник по расчетам на микрокалькуляторах. Издание 3-е, дополненное и переработанное. М.: Наука, Физматлит. — 1989. 3. Дьяконов В. П. Компьютер в быту. Смоленск: Русич. — 1996. 4. Дьяконов В. П. Мой Pentium. M.: АСЕ. — 1998. 5. Дьяконов В. П. Справочник по алгоритмам и программам на языке Бейсик для персональных ЭВМ. М.: Наука. Физматлит..— 1987. 6. Дьяконов В. П. Применение персональных ЭВМ и программирование на языке Бейсик. М.: Радио и связь. — 1989. 7. Dyakonov V. P., Yemelchenkov E. P., Munerman V. I., Samoilova T. A. The Revolutionary Guide to QBASIC. UK.: Wrox Press. - 1996. 8. Дьяконов В. П. Язык программирования ЛОГО. М.: Радио и связь. — 1991. 9. Дьяконов В. П. Форт-системы программирования персональных ЭВМ. М.: Наука. Физматлит. — 1992. 10. Дьяконов В. Как выбрать математическую систему? Монитор-Аспект, № 2, 1993. 11. Дьяконов В., Пеньков А. Современные математические системы. PC WEEK, № 43 (67), 1996. 12. Дьяконов В. П. Компьютерные математические системы в образовании. Информационные технологии, № 4, 1997. 13. Дьяконов В. П. Справочник по применению системы Eureka. M.: Наука. Физматлит. — 1993. 14. Дьяконов В. П. Mercury — отличная система для всех. Монитор-Аспект, 1995, № 5. 15. Дьяконов В. П. Система MathCAD/Справочник. М.: Радио и связь. — 1993. 16. Очков В. Ф. MathCAD 7 Pro для студентов и инженеров. М.: Компьютер Press. — 1998. 17. MathCAD 6.0 PLUS. Финансовые, инженерные и научные расчеты в среде Windows 95. Пер. с англ. М.: Филинъ. — 1996. 18. Дьяконов В. П. Справочник по MathCAD PLUS 6.0 PRO. М.: СК-ПРЕСС. — 1997. 19. Дьяконов В. П. Справочник по MathCAD 7.0 PRO. M.: СК-ПРЕСС. — 1998. 20. Дьяконов В. П., Абраменкова И. В. Mathcad 8.0 в математике, в физике и в Internet. М.: Нолидж. — 1999. 21. Дьяконов В. П. Mathcad 8/2000. Специальный справочник. СПб.: ПИТЕР. — 2000. 22. Дьяконов В. П. Mathcad 2001. Специальный справочник. СПб.: ПИТЕР. — 2002. 23. Дьяконов В. П. Энциклопедия MathCAD 2001 i/11. М.: СК-ПРЕСС. — 2004. 24. Дьяконов В. П. Справочник по применению системы Derive.: M. Наука. — Физматлит. — 1996. 25. Дьяконов В. П. Справочник по системе символьной математики Derive. M.: СК-ПРЕСС. - 1998. 26. Дьяконов В. П. Системы компьютерной математики Derive. Самоучитель. М.: Солон-Р. — 2002. 774
Список литературы 27. Лобачевская О. В. Практикум по решению задач в математической системе DERIVE. M.: Финансы и статистика. — 2000. 28. Дьяконов В. П. Справочник по математической системе Mathematica 2 и 3. М.: СК ПРЕСС. - 1998. 29. Дьяконов В. П. Mathematica 4. Учебный курс. СПб.: ПИТЕР. — 2001. 30. Дьяконов В. П. Mathematica 4 с пакетами расширения. М.: Нолидж. — 2000. 31. Дьяконов В. П. Математическая система Maple V R3/R4/R5. М.: Солон. — 1998. 32. Дьяконов В. П. Maple 7. Учебный курс. СПб.: ПИТЕР. — 2002. 33. Дьяконов В. П. Maple 8 в математике, физике и образовании. М.: Солон-Пресс. — 2003. 34. Говорухин В. Н., Цибулин В.Г. Введение в Maple V. Математический пакет для всех. М.: Мир. — 1997. 35. Прохоров Г. В., Леденев М. А., Колбеев В. В. Пакет символьных вычислений Maple V. М.: Петит. - 1997. 36. Манзон Б. М. Maple V Power Edition. M.: Филинъ. — 1998. 37. Дьяконов В.П. Справочник по применению системы PC MatLAB. M.: Наука, Физматлит. — 1993. 38. Дьяконов В. П., Абраменкова И. В. MATLAB 5.0/5.3. Система символьной математики. М.: Нолидж. — 1999. 39. Дьяконов В. П., Абраменкова И. В., Круглое В. В. MATLAB 5 с пакетами расширений. М.: Нолидж. — 2001. 40. Дьяконов В. П. MATLAB. Учебный курс. СПб.: ПИТЕР. — 2001. 41. Дьяконов В. П. MATLAB 6. Учебный курс. СПб.: ПИТЕР. - 2001. 42. Дьяконов В. П. Simulink 4. Специальный справочник. СПб.: ПИТЕР. — 2002. 43. Дьяконов В. П., Круглов В. В. Математические пакеты расширения MATLAB. Специальный справочник. СПб.: ПИТЕР. — 2001. 44. Дьяконов В. П., Круглов В. В. MATLAB. Анализ, идентификация и моделирование систем. Специальный справочник. СПб.: ПИТЕР. — 2002. 45. Дьяконов В. П., Абраменкова И. В. MATLAB. Обработка сигналов и изображений. Специальный справочник. СПб.: ПИТЕР. — 2002. 46. Круглов В. В., Борисов В. В. Искусственные нейронные сети. Теория и практика. М.: Горячая линия-Телеком. — 2001. 47. Круглов В. В., Дли М. И., Голунов Р. Ю. Нечеткая логика и искусственные нейронные сети. М.: Наука. Физматлит. — 2001. 48. Круглов В. В., Борисов В. В. Гибридные нейронные сети. Смоленск.: Русич. — 2001. 49. Потемкин В. Г. Система MATLAB. Справочное пособие. М.: ДИАЛОГ-МИФИ. - 1997. 50. Потемкин В. Г. MATLAB 5 для студентов. М.: ДИАЛОГ-МИФИ. — 1998. 51. Потемкин В. Г. Система инженерных и научных расчетов MATLAB 5.x. В 2-х т. М.: ДИАЛОГ-МИФИ. - 1999. 52. Потемкин В. Г. Вычисления в среде MATLAB: ДИАЛОГ-МИФИ. — 2004. 53. Гультяев А. Визуальное моделирование в среде MATLAB: учебный курс. СПб.: ПИТЕР. — 2001. 54. Медведев В. С , Потемкин В. Г. Control System Toolbox. MATLAB 5 для студентов. М.: ДИАЛОГ-МИФИ. - 2004.
775
Список
литературы
55. Рудаков П. И., Сафонов В. И. Обработка сигналов и изображений. MATLAB 5.x. /Под общей редакцией к.т.н. В. Г. Потемкина. М.: ДИАЛОГ-МИФИ. - 2000. 56. Лавров К. Н., Цыплякова Т. П. Финансовая аналитика. MATLAB 6. М.: Диалог-МИФИ. /Под общей редакцией к.т.н. В. Г. Потемкина. 2001. 57. Мартынов Н.Н., Иванов А. П. MATLAB 5.x. Вычисления, визуатизация, программирование. М.: КУДИЦ-ОБРАЗ. — 2000. 58. Лазарев Ю. Ф. MatLAB 5.X. (серия «Библиотека студента») К.: Издательская группа BHV. — 2000. 59. Чен К., Джиблин П., Ирвинг A. MATLAB в математических исследованиях. М.: Мир. - 2001. 60. Математический энциклопедический словарь. Под редакцией Ю. В. Прохорова. М.: Советская энциклопедия. — 1988. 61. Бабенко К. И. Основы численного анализа. М.: Наука. Физматлит. — 1986. 62. Марчук Г.И. Методы вычислительной математики. М.: Наука. Физматлит. — 1989. 63. Бахвалов Н.С., Жидков Н.П., Кобельков Г. М. Численные методы. М.: Наука. Физматлит. — 1987. 64. Гантмахер Ф. Теория матриц. М.: Наука. Физматлит. — 1988. 65. Дж. Дэннис, Р. Шнабель. Численные методы безусловной оптимизации и решения нелинейных уравнений. Пер. с англ. под ред. Ю. Г. Евтушенко. М.: Мир. - 1988. 66. Справочник по специальным функциям с формулами, графиками и математическими таблицами. Под ред. М. Абрамовииа и И. Стиган. М.: Наука. Физматлит. — 1979. 67. Г. Коры, Т. Корн. Справочник по математике для научных работников и инженеров. М.: Наука. — 1973. 68. Воднев В.Т., Наумович А.Ф., Наумович Н.Ф. Основные математические формулы. Минск: Вышэйшая школа. — 1988. 69. Spiegel, Murray R. Mathematical Handbook of Formulas and Tables. New York: McGraw Hill Book Company, 1968. 70. Дж. Дэвенпорт, И. Сирэ, Э. Туриье. Компьютерная алгебра. Системы и алгоритмы алгебраических вычислений. М.: Мир. — 1991. 71. Иванов В В. Методы вычислений на ЭВМ. Справочное пособие. К.: Наукова думка. —- 1986. 72. Толстой Г. П. Ряды Фурье. М.: Наука. Физматлит. — 1980. 73. Королюк В. С , Портенко Н. И., Скороход А. В., Турбин А. Ф. Справочник по теории вероятности и математической статистике. М.: Наука. Физматлит. — 1985. 74. Львовский Е. Н. Статистические методы построения эмпирических формул. М.: Высшая школа. — 1988. 75. Топчеев Ю. И. Атлас для проектирования систем автоматического регулирования. М.: Машиностроение. — 1989. 76. Дьяконов В. П. Windows 95 на вашем компьютере. Смоленск: Русич. — 1997. 77. Дьяконов В. П. 98 вопросов по Windows 98 с ответами. М.: Солон-Р. — 1999. 78. Дьяконов В. П. Мой Word 95/97. М.: ACT. - 1998. 79. Дьяконов В. П. Популярная энциклопедия мультимедиа. М.: ABF. — 1996. 80. Дьяконов В. П. Internet. Настольная книга пользователя. Издание 4-е, переработанное и дополненное. М.: Солон-Р. — 2002. 776
Список
литературы
81. Дьяконов В. П. Opera 5. Специальный справочник. Спб: ПИТЕР. — 2002. 82. Немнюгин С , Чаунин М , Комолкин А. Эффективная работа с UNIX. Спб:ПИТЕР.-2001. 83. Денисов A. Internet Explorer 5,5. Справочник. Спб:. ПИТЕР. — 2001. 84. Эккель Б. Философия Java Спб: ПИТЕР. - 2001. 85. Бурлаков М. Corel Draw 10. Справочник. Спб: ПИТЕР. — 2001. 86. Дьяконов В. П. Вейвлеты. От теории к практике. М.: Солон-Р. — 2002. 87. Леоненков А. В. Нечеткое моделирование в среде MATLAB и fuzzyTECH. СПб.: БХВ-Петербург. - 2003. 88. Черных И. В. S1MULINK. Среда создания инженерных приложений. М.: ДИАЛОГ-МИФИ. - 2003. 89. Дьяконов В. П. MATLAB 6/6.1/6.5 + Simulink 4/5. Основы применения. М.: Солон-Пресс. — 2002. 90. Дьяконов В. П. MATLAB 6/6.1/6.5 + Simulink 4/5 в математике и моделировании. М.: Солон-Пресс. — 2003. 91. Дьяконов В. П. MATLAB 6/6.1/6.5 + Simulink 4/5. Обработка сигналов и изображений. М.: Солон-Пресс. — 2004. 92. Дьяконов В. П. VisSim + Mathcad + MATLAB. Визуальное математическое моделирование. М.: Солон-Пресс. — 2004. 93. MATLAB. The Language of Technical Computing. Getting Started with MATLAB. The Math Works, Inc. USA. - 2000. 94. MATLAB. The Language of Technical Computing. Using MATLAB. The Math Works, Inc. USA. - 2000. 95. MATLAB. The Language of Technical Computing. Using MATLAB Graphics. The Math Works, Inc. USA. — 2000. 96. MATLAB. The Language of Technical Computing. External Interfaces. The Math Works, Inc. USA. - 2000. 97. Simulink. Model-Based and System-Based Design. Using Simulink, The Math Works, Inc. USA. - 2002. 98. Simulink. Model-Based and System-Based Design. Writing S-Functions. The Math Works, Inc. USA. - 2002.
777
Содержание Введение Предупреждения Благодарности и адреса для связи Глава 1. Начало работы с MATLAB 1.1. Назначение и особенности систем MATLAB 1.1.1. Назначение системы MATLAB 1.1.2. Особенности версии MATLAB 6.5 + Service Pack 1.0 1.1.3. Особенности версии MATLAB 7 + Simulink 6 ... 1.1.4. Интеграция с другими программными системами 1.1.5. Ориентация на матричные операции 1.1.6. Расширяемость системы 1.1.7. Мощные средства программирования 1.3.6. О компиляции программ системы MATLAB 1.2. Установка системы MATLAB 6.5 SP1 и начало работы с ней 1.2.1. Инсталляция систем MATLAB 6.5 SP1 1.2.2. Файловая система MATLAB 1.2.3. Запуск MATLAB и работа в режиме диалога 1.2.4. Новый и старый облик системы MATLAB 1.2.5. Операции строчного редактирования 1.2.6. Команды управления окном 1.2.7. MATLAB в режиме прямых вычислений 1.2.8. О переносе строки в сессии 1.3. Основные объекты MATLAB 1.3.1. Понятие о математическом выражении 1.3.2. Действительные и комплексные числа 1.3.3. Форматы чисел 1.3.4. Константы и системные переменные 1.3.5. Текстовые комментарии 1.3.6. Переменные и присваивание им значений 1.3.7. Уничтожение определений переменных 1.3.8. Операторы и функции 1.3.9. Применение оператора : (двоеточие) 1.3.10. Функции пользователя 1.3.11. Сообщения об ошибках и исправление ошибок 1.4. Формирование векторов и матриц 1.4.1. Особенности задания векторов и матриц 1.4.2. Объединение малых матриц в большую 1.4.3. Удаление столбцов и строк матриц 1.5. Операции с рабочей областью и текстом сессии 1.5.1. Дефрагментация рабочей области 1.5.2. Сохранение рабочей области сессии 1.5.3. Ведение дневника 1.5.4. Загрузка рабочей области сессии 778
3 7 8 .10 .10 10 10 12 16 17 18 18 19 20 20 20 21 23 24 25 25 27 27 .....27 27 29 29 30 31 31 32 34 35 36 38 38 40 41 42 42 42 43 44
Содержание 1.5.5. Работа с редактором/отладчиком М-файлов 1.6. Введение в графику системы MATLAB 1.6.1. Особенности графики системы MATLAB 1.6.2. Построение графика функций одной переменной 1.6.3. Построение в одном окне графиков нескольких функций 1.6.4. Графическая функция fplot 1.6.5. Построение трехмерных графиков 1.6.6. Вращение графиков мышью 1.6.7. Контекстное меню графиков '. 1.7. Основы форматирования графиков 1.7.1. Форматирование двумерных графиков 1.7.2. Форматирование линий графиков 1.7.3. Форматирование маркеров опорных точек 1.7.4. Форматирование линий и маркеров для графика нескольких функций 1.7.5. Форматирование осей графиков 1.7.6. Нанесение надписей и стрелок прямо на график 1.7.7. Построение легенды и шкалы цветов на графике 1.7.8. Перемещение графика в графическом окне 1.7.9. Применение графической «лупы» 1.7.10. Работа с камерой ЗЭ-графики 1.8. Работа с системой MATLAB 7 1.8.1. Инсталляция системы MATLAB 7 + Simulink 6 1.8.2. Запуск системы MATLAB 7 + Simulink 6 1.8.3. Тестирование MATLAB на скорость вычислений Глава 2. Интерфейс пользователя 2.1. Интерактивная справка из командной строки 2.1.1. Вызов списка разделов интерактивной справки 2.1.2. Справка по конкретному объекту 2.1.3. Справка по группе объектов 2.1.4. Справка по ключевому слову 2.1.5. Дополнительные справочные команды 2.2. Примеры, вызываемые из командной строки 2.2.1. Вызов списка демонстрационных примеров 2.2.2. Пример — вывод изображения поверхности 2.2.3. Что больше — e~pi или pi A e? 2.2.4. Встроенные фигуры 2.2.5. Просмотр текстов примеров и m-файлов 2.3. Справочная система MATLAB 2.3.1. Меню Help и запуск справки 2.3.2. Виды работы со справочной системой 2.3.3. Доступ к примерам из справочной системы 2.4. Интерфейс пользователя MATLAB 2.4.1. Средства панели инструментов 2.4.2. Браузер рабочей области 2.4.3. Команды просмотра рабочей области who и whos 2.4.4. Браузер файловой структуры
45 46 46 46 47 49 50 50 52 52 52 52 53 54 54 56 58 59 59 59 62 62 67 69 71 71 71 71 72 73 73 76 76 79 79 81 82 82 82 83 84 85 85 86 87 88 779
Содержание 2.5. Работа с меню 2.5.1. Команды, операции и параметры 2.5.2. Меню системы MATLAB 2.5.3. Меню File 2.5.4. Установка путей доступа файловой системы 2.5.5. Настройка элементов интерфейса 2.5.6. Меню Edit — средства редактирования документов 2.5.7. Меню View — управление видом интерфейса документов 2.6. Основы редактирования и отладки m-файлов 2.6.1. Интерфейс редактора/отладчика m-файлов 2.6.2. Цветовые выделения и синтаксический контроль 2.6.3. Понятие о файлах-сценариях и файлах-функциях 2.6.4. Панель инструментов редактора и отладчика 2.7. Интерфейсы графических окон 2.7.1. Обзор интерфейсов графических окон 2.7.2. Панель инструментов камеры обзора 2.7.3. Меню инструментов Tools 2.7.4. Вращение графиков мышью 2.7.5. Операции вставки 2.8. Работа с Мастером импорта данных 2.8.1. Открытие окна Мастера импорта данных 2.8.2. Информация о импортируемых бинарных данных 2.8.3. Импорт данных mat-формата 2.8.4. Импорт данных текстового формата 2.8.5. Об экспорте данных 2.9. Новинки графического интерфейса MATLAB 7 2.9.1. Новая позиция меню Graphics 2.9.2. Работа с окном 2О-графики MATLAB 7 2.9.3. Работа с редактором графики MATLAB 7 2.9.4. Построение в MATLAB 7 графиков из их каталога 2.9.5. Некоторые другие особенности применения редактора графики Глава 3. Математические операции 3.1. Вычислительные и логические операции 3.1.1. Арифметические матричные операторы и функции 3.1.2. Операции отношения 3.1.3. Логические операции и операторы 3.2. Специальные символы 3.2.1. Специальные символы 3.2.2. Системные переменные и константы 3.3. Работа со специальными данными 3.3.1. Поразрядная обработка данных 3.3.2. Обработка множеств 3.3.3. Работа с функциями времени и даты 3.4. Вычисление элементарных функций 3.4.1. Алгебраические и арифметические функции 3.4.2. Вычисление тригонометрических и обратных тригонометрических функций 780
88 88 89 89 90 90 91 91 91 91 93 93 94 94 94 95 96 96 96 97 97 97 100 100 101 101 101 102 103 104 108 111 111 111 112 114 116 116 119 122 122 123 126 129 130 134
Содержание 3.4.3. Вычисление гиперболических и обратных гиперболических функций 3.5. Операции работы с числами 3.5.1. Округление и смена знака чисел 3.5.2. Операции с комплексными числами 3.6. Вычисление специальных математических функций 3.6.1. Функции Эйри 3.6.2. Функции Бесселя 3.6.3. Бета-функция и ее варианты 3.6.4. Эллиптические функции и интегралы 3.6.5. Функции ошибки 3.6.6. Интегральная показательная функция 3.6.7. Гамма-функция и ее варианты 3.6.8. Ортогональные полиномы Лежандра 3.7. Новые средства вычислений в MATLAB 6/7 3.7.1. Новые функции true и false в MATLAB 6.5 3.7.2. Функция psi 3.7.3. Особенности вычислений некоторых функций Глава 4. Операции с векторами и матрицами 4.1. Создание матриц с заданными свойствами 4.1.1. Создание единичной матрицы 4.1.2. Создание матрицы с единичными элементами 4.1.3. Создание матрицы с нулевыми элементами 4.1.4. Создание линейного массива равноотстоящих точек 4.1.5. Создание вектора равноотстоящих в логарифмическом масштабе точек 4.1.6. Создание массивов со случайными элементами 4.2. Операции с матрицами 4.2.1. Конкатенация матриц 4.2.2. Создание матриц с заданной диагональю 4.2.3. Перестановки элементов матриц 4.2.4. Вычисление произведений 4.2.5. Суммирование элементов 4.2.6. Функции формирования матриц 4.2.7. Поворот матриц 4.2.8. Выделение треугольных частей матриц 4.2.9. Операции с пустыми матрицами 4.3. Создание и вычисление специальных матриц 4.3.1. Сопровождающие матрицы 4.3.2. Тестовые матрицы 4.3.3. Матрицы Адамара 4.3.4. Матрицы Ганкеля 4.3.5. Матрицы Гильберта 4.3.6. Матрицы магического квадрата 4.3.7. Матрицы Паскаля 4.3.8. Матрицы Россера 4.3.9. Матрицы Теплица
137 139 139 141 142 142 143 146 147 148 149 149 .....151 151 351 152 152 153 153 153 153 154 154 154 155 157 157 158 158 159 16! 162 163 163 164 165 165 165 166 166 167 168 168 169 169 781
Содержание 4.3.10. Матрица Вандермонда 4.3.11. Матрицы Уилкинсона 4.4. Матричные операции линейной алгебры 4.4.1. Матричные функции 4.4.2. Вычисление нормы и чисел обусловленности матрицы 4.4.3. Определитель и ранг матрицы 4.4.4. Определение нормы вектора 4.4.5. Определение ортонормированного базиса матрицы 4.4.6. Функции приведения матрицы к треугольной форме 4.4.7. Определение угла между двумя подпространствами 4.4.8. Вычисление следа матрицы 4.4.9. Разложение Холецкого 4.4.10. Обращение матриц — функции inv, pinv 4.4.11. LU- и QR-разложение 4.4.12. Вычисление собственных значений и сингулярных чисел 4.4.13. Приведение матриц к форме Шура и Хессенберга Глава 5. Операции с массивами специального вида
170 170 170 171 172 174 175 175 ..176 176 177 177 178 178 181 184 188
5.1. Разреженные матрицы 188 5.1.1. Роль и назначение разреженных матриц 188 5.1.2. Элементарные разреженные матрицы 188 5.1.3. Преобразование разреженных матриц 191 5.1.4. Работа с ненулевыми элементами разреженных матриц 193 5.1.5. Функция spy визуализации разреженных матриц 194 5.1.6. Алгоритмы упорядочения 195 5.2. Применение разреженных матриц 198 5.2.1. Смежные матрицы и графы 198 5.2.2. Пример построения фигуры bucky 199 5.2.3. Оцифровка узлов графа , 199 5.2.4. Применение разреженных матриц в аэродинамике 200 5.2.5. Визуализация разреженных матриц, возведенных в степень 200 5.2.6. Демонстрационные примеры на визуализацию разреженных матриц 201 5.3. Функции разреженных матриц 202 5.3.1. Норма, число обусловленности и ранг разреженной матрицы 202 5.3.2. Функции разложения Холецкого для разреженных матриц 203 5.3.3. LU-разложение разреженных матриц 204 5.3.4. Собственные значения и сингулярные числа разреженных матриц .205 5.4. Многомерные массивы 206 5.4.1. Понятие о многомерных массивах 206 5.4.2. Применение оператора «:» в многомерных массивах 207 5.4.3. Удаление размерности у многомерного массива 208 5.4.4. Доступ к отдельному элементу многомерного массива 208 5.4.5. Создание страниц, заполненных константами и случайными числами 209 5.4.6. Функции ones, zeros, rand и randn 209 5.4.7. Объединение многомерных массивов 210 5.4.8. Функция преобразования размеров многомерного массива reshape .211 5.5. Работа с размерностями массивов 212
782
Содержание 5.5.1. Вычисление числа размерностей массива 5.5.2. Перестановки размерностей массивов 5.5.3. Сдвиг размерностей массивов 5.5.4. Удаление единичных размерностей 5.6. Тип данных — структуры 5.6.1. Структура записей 5.6.2. Создание структур и доступ к их компонентам 5.6.3. Функция создания структур 5.6.4. Проверка имен полей и структур 5.7. Функции полей структур 5.7.1. Функция возврата имен полей 5.7.2. Функция возврата содержимого полей структуры 5.7.3. Функция присваивания значений полям 5.7.4. Удаление полей 5.7.5. Применение массивов структур 5.8. Массивы ячеек 5.8.1. Создание массивов ячеек 5.8.2. Создание ячеек с помощью функции cell 5.8.3. Визуализация массивов ячеек 5.8.4. Создание массива символьных ячеек из массива строк 5.8.5. Присваивание с помощью функции deal 5.8.6. Тестирование имен массивов ячеек 5.8.7. Функции преобразования типов данных 5.9. Многомерные массивы ячеек 5.9.1. Создание многомерных массивов ячеек 5.9.2. Вложенные массивы ячеек Глава 6. Графическая визуализация вычислений 6.1. Графики функций и данных 6.1.1. Построение графиков отрезками прямых 6.1.2. Графики в логарифмическом масштабе 6.1.3. Графики в полулогарифмическом масштабе 6.1.4. Столбцовые диаграммы 6.1.5. Гистограммы 6.1.6. Лестничные графики 6.1.7. Графики с зонами погрешности 6.1.8. Графики дискретных отсчетов функции 6.2. Визуализация в полярной системе координат 6.2.1. Графики в полярной системе координат 6.2.2. Угловые гистограммы 6.3. Визуализация векторов 6.3.1. Графики векторов 6.3.2. График проекций векторов на плоскость 6.4. Основы трехмерной графики 6.4.1. Контурные графики 6.4.2. Создание массивов данных для трехмерной графики 6.4.3. Графики поля градиентов 6.4.4. Графики поверхностей
212 212 213 213 213 213 214 215 216 216 216 217 217 217 217 218 218 219 220 221 221 222 222 223 223 224 226 226 226 229 229 230 231 232 232 233 234 234 235 235 235 236 237 237 238 239 240 783
Содержание 6.4.5. Сетчатые ЗО-графики с окраской 6.4.6. Сетчатые ЗЭ-графики с проекциями 6.4.7. Построение поверхности столбцами 6.5. Улучшенные средства визуализации ЗБ-графики 6.5.1. Построение поверхности с окраской 6.5.2. Построение поверхности и ее проекции 6.5.3. Построение освещенной поверхности 6.5.4. Средства управления подсветкой и обзором фигур 6.5.5. Построение графиков функций трех переменных 6.5.6. График трехмерной слоеной поверхности 6.5.7. Трехмерные контурные графики 6.6. Текстовое оформление графиков 6.6.1. Установка титульной надписи 6.6.2. Установка осевых надписей 6.6.3. Ввод текста в любое место графика 6.6.4. Позиционирование текста с помошью мыши 6.7. Форматирование графиков 6.7.1. Вывод пояснений и легенды 6.7.2. Маркировка линий уровня на контурных графиках 6.7.3. Управление свойствами осей графиков 6.7.4. Включение и выключение сетки 6.7.5. Наложение графиков друг на друга 6.7.6. Разбиение графического окна 6.7.7. Изменение масштаба графика 6.8. Цветовая окраска графиков 6.8.1. Установка палитры цветов 6.8.2. Установка соответствия между палитрой цветов и мае штабом осе й 6.8.3. Окраска поверхностей 6.8.4. Установка палитры псевдоцветов 6.8.5. Создание закрашенного многоугольника 6.8.6. Окраска плоских многоугольников 6.8.7. Вывод шкалы цветов 6.8.8. Цветные плоские круговые диаграммы 6.8.9. Окрашенные многоугольники в пространстве 6.8.10. Цветные объемные круговые диаграммы 6.8.11. Другие команды управления световыми эффектами 6.9. Другие возможности графики 6.9.1. Построение цилиндра 6.9.2. Построение сферы 6.9.3. ЗО-графика с треугольными плоскостями Глава 7. Анимационная и дескрипторная графика 7.1. Анимационная графика 7.1.1. Движение точки на плоскости 7.1.2. Движение точки в пространстве 7.1.3. Основные средства анимации 7.1.4. Вращение фигуры — логотипа MATLAB 784
.242 243 243 244 244 245 246 247 248 248 249 250 250 250 251 252 254 254 255 256 258 258 259 260 261 261 262 262 263 263 264 264 266 266 267 267 268 268 268 269 271 271 271 271 273 273
Содержание 7.1.5. Волновые колебания мембраны 274 7.2. Основы дескрипторной графики 275 7.2.1. Объекты дескрипторной графики 275 7.2.2. Создание графического окна и управление им 276 7.2.3. Создание координатных осей и управление ими 276 7.2.4. Пример применения объекта дескрипторной графики 277 7.2.5. Дескрипторы объектов 277 7.2.6. Операции над графическими объектами 278 7.2.7. Свойства объектов — команда get 278 7.2.8. Изменение свойств объекта — команда set 279 7.2.9. Просмотр свойств 280 7.2.10. Примеры дескрипторной графики 281 7.2.11. Иерархия объектов дескрипторной графики 282 7.2.12. Справка по дескрипторной графике 283 7.3. Дескрипторная растровая графика 285 7.3.1. Понятие о растровой графике 285 7.3.2. Типы растровых изображений 285 7.3.3. Координатные системы графики 287 7.3.4. Форматы чисел графики и их преобразование 288 7.3.5. Форматы растровых изображений 290 7.3.6. Установка свойств изображения — set 290 7.3.7. Свойства, задающие вид изображения 291 7.3.8. Контроль доступа к объектам 292 7.3.9. Общая информация об изображении 292 7.3.10. Вывод на экран шкалы цветов — colorbar 292 7.3.12. Вывод на экран графического объекта — image 293 7.3.13. Масштабирование изображения — zoom 294 7.4. Графическая поддержка цвета 295 7.4.1. Цветовые системы , 295 7.4.2. Преобразования изображений 296 7.4.3. Управление работой средств OpenGL 297 7.4.4. Управление прозрачностью графических объектов 297 7.4.5. Примеры построения изображений со свойствами прозрачности ....298 7.5. Галерея трехмерной графики 299 7.5.1. Доступ к галерее 299 7.5.2. Примеры построения фигур из галереи 300 7.6. Расширенная техника визуализации вычислений 301 7.6.1. Задание Path-объектов 302 7.6.2. Построение среза черепной коробки человека 302 7.6.3. Расширенная визуализация трехмерных объектов 303 7.6.4. Выделение части объема 304 7.6.5. Визуализация струи в пространстве 304 7.6.6. Визуализация электрических разрядов 306 7.6.7. Анимация явления подъема предметов вихрями 306 7.6.8. Применение «конусной» графики для визуализации струй 308 7.7. Пакет прикладных программ Image Processing Toolbox 309 7.7.1. Знакомство с пакетом 309 7.7.2. Возможности пакета 309 785
Содержание 7.7.3. Примеры применения пакета 7.7.4. Примеры программирования задач 7.8. Графический интерфейс пользователя GUI 7.8.2. Основные команды для создания GUI 7.8.3. Простой пример создания объектов GUI Глава 8. Численные методы вычислений 8.1. Решение систем линейных уравнений (СЛУ) : 8.1.1. Элементарные средства 8.1.2. Решение систем линейных уравнений с ограничениями 8.1.3. Решение систем линейных уравнений с комплексными элементами 8.2. Решение СЛУ с разреженными матрицами 8.2.1. Точное решение, метод наименьших квадратов и сопряженных градиентов 8.2.2. Двунаправленный метод сопряженных градиентов 8.2.3. Устойчивый двунаправленный метод 8.2.4. Метод сопряженных градиентов 8.2.5. Квадратичный метод сопряженных градиентов 8.2.6. Метод минимизации обобщенной невязки 8.2.7. Квазиминимизация невязки — функция qmr 8.3. Вычисление корней функции одной переменной 8.4. Вычисление минимумов функций 8.4.1. Минимизация функции одной переменной 8.4.2. Минимизация функций ряда переменных 8.4.3. Минимизация тестовой функции Розенброка 8.4.4. Минимизация функций нескольких переменных 8.5. Аппроксимация производных 8.5.1. Аппроксимация лапласиана 8.5.2. Аппроксимация производных конечными разностями 8.5.3. Вычисление градиента функции 8.6. Численное интегрирование 8.6.1. Интегрирование методом трапеций 8.6.2. Интегрирование методом квадратур 8.6.3. Функция вычисления тройных интегралов triplequad 8.7. Математические операции с полиномами 8.7.1. Определение полиномов 8.7.2. Умножение и деление полиномов 8.7.3. Вычисление полиномов 8.7.4. Вычисление корней полинома 8.7.5. Вычисление производной полинома 8.7.6. Решение полиномиальных матричных уравнений 8.7.7. Разложение полиномов на простые дроби 8.8. Решение обыкновенных дифференциальных уравнений (ОДУ) 8.8.1. Определение ОДУ 8.8.2. Решатели ОДУ 8.8.3. Использование решателей систем ОДУ 8.8.4. Описание системы ОДУ 786
310 311 312 312 314 316 316 316 318 319 320 320 322 324 324 325 326 326 326 329 329 329 331 332 334 334 335 336 337 338 339 340 341 341 341 342 343 344 344 345 345 345 346 347 351
Содержание 8.8.5. Дескрипторная поддержка параметров решателя 353 8.8.6. Доступ к примерам на решение дифференциальных уравнений 354 8.8.7. Решения дифференциальных уравнений в частных производных ....356 Глава 9. Математическая обработка и сохранение данных 358 9.1. Обработка данных массивов 358 9.1.1. Нахождение максимального и минимального элементов массива....358 9.1.2. Сортировка элементов массива 359 9.1.3. Нахождение средних и срединных значений 362 9.1.4. Вычисление стандартного отклонения 363 9.1.5. Вычисление коэффициентов корреляции 363 9.1.6. Вычисление матрицы ковариации 364 9.2. Геометрический анализ данных 365 9.2.1. Триангуляция Делоне 365 9.2.2. Вычисление выпуклой оболочки 366 9.2.3. Вычисление площади полигона 367 9.2.4. Анализ попадания точек внутрь полигона 367 9.2.5. Построение диаграммы Вороного 368 9.3. Преобразование Фурье 369 9.3.1. Основные определения 369 9.3.2. Одномерное прямое быстрое преобразование Фурье 370 9.3.3. Многомерное прямое преобразование Фурье 371 9.3.4. Перегруппировка массивов 371 9.3.5. Одномерное быстрое обратное преобразование Фурье 372 9.4. Свертка и дискретная фильтрация 373 9.4.1. Свертка прямая и обратная 373 9.4.2. Свертка двумерных массивов 374 9.4.3. Дискретная одномерная фильтрация 374 9.4.4. Двумерная фильтрация 376 9.4.5. Коррекции фазовых углов 376 9.5. Интерполяция и аппроксимация данных 376 9.5.1. Полиномиальная регрессия 377 9.5.2. Фурье-интерполяция периодических функций 378 9.5.3. Интерполяция на неравномерной сетке .379 9.5.4. Одномерная табличная интерполяция 380 9.5.5. Двумерная табличная интерполяция 381 9.5.6. Трехмерная табличная интерполяция 382 9.5.7. N-мерная табличная интерполяция 383 9.5.8. Интерполяция кубическим сплайном 383 9.6. Обработка данных в графическом окне... 384 9.6.1. Средства обработки данных в графическом окне 384 9.6.2. Полиномиальная регрессия для табличных данных 385 9.6.3. Оценка погрешности аппроксимации 386 9.6.4. Сплайновая интерполяция в графическом окне 387 9.6.5. Эрмитовая многоинтервальная интерполяция 389 9.6.6. Сравнение сплайновой и эрмитовой одномерной интерполяции 389 9.7. Специальные виды интерполяции 390 9.7.1. Сравнение видов двумерной интерполяции поверхности 390 787
Содержание 9.7.2. Сраин ние видов интерполяции при контурных графиках 9.7.3. Прими) многомерно',! интерполяции 9.7.4. ЗО-геометрическнй анализ и интерполяция 9.7.5. Другие представления сложных фигур 9.8. Обработка «. пмвольиых данных 9.8.1 Основные функции символьных данных 9.8.2, Операции над с греками 9.8.3 Преобра ювание символов и строк 9.8.-*. Функции преобразования систем счисления 9.8.5. Вычис-iei не строковых выражений 9.9. Работа с файлами 9.9.1. Открытие и закрытие файлов 9.9.2. Операции <: двоичными файлами 9.9.3. Операции над форматированными файлами 9.9.4. Позиционирование файла 9.9.5. Специализированные файлы 9.10. Работа с файлами изображений 9.10.1. Информация о графическом файле — iinfmfo 9.10.2. Чтение изображения из файла — imread 9.10.3. Запись изображения в ('райл — imwrite 9.11. Работа со звуковыми данными 9.11.1. Функции дли p.inoTbi со звуками 9.11.2. Функции ;оука в MATLAB 6.1/6.5 9.11.3. Демонстрация возможностей работы со звуком
392 392 393 394 395 396 398 401 403 404 406 406 408 411 415 418 419 419 421 423 426 426 426 427 429
Глава 10. Типовые средства программирования ЮЛ. Основные понятия программирования 10.1.1. Назначение язык;! программирования MATLAB 10.1.2. Основные средства программирования И). 1.3. Основные типы данных ,. 10.1.4. Виды программирования 10.1.5. Двойственность операторов, команд и функций 10.1.6. Некоторые ограничения 10.1.7. Исполнение программных объектов 10.2. М-файлы сценариев и функций 10.2.1. Структура и свойства файлов сценариев 10.2.2. Структура М-файла-функции 10.2.3. Статус переменных в функциях 10.2.4. Команда глобализации переменных global 10.2.5. Использование подфункций 10.2.6. Частные каталоги 10.3. Обработка ошибок и комментарии 10.3.1. Вывод сообщений об ошибках 10.3.2. Функции laslcrr и обработка ошибок 10.3.3. Комментарии 10.4. Функции с переменным числом аргументов 10.4.1. Функции подсчета числа аргументов 10.4.2. Переменные varargin и varargout 788
,
429 429 .....430 430 431 432 433 434 434 434 436 437 438 439 440 440 440 441 442 442 442 443
Содержание 10.5. Особенности работы с m-файлами 444 10.5.1. Выполнение т-файлов функций 444 10.5.2. Создание Р-кодов 445 10.6. Управляющие структуры 446 10.6.1. Диалоговый ввод.... 446 10.6.2. Условный оператор if...elseif...else...end 447 10.6.3. Циклы типа for...end 448 10.6.4. Циклы типа while...end 450 10.6.5. Конструкция переключателя switch...case...end 450 10.6.6. Конструкция try...catch...end 451 10.6.7. Операторы break, continue и return 452 10.6.8. Пустые матрицы в структурах if и while 453 10.6.9. Создание паузы в вычислениях 453 10.7. Основы объектно-ориентированного программирования 453 10.7.1. Основные понятия 453 10.7.2. Классы объектов 454 10.7.3. Создание класса или объекта 455 10.7.4. Проверка принадлежности объекта к заданному классу 455 10.7.5. Другие функции объектно-ориентированного программирования .456 10.8. Handle- и inline-функции 457 10.8.1. Задание handle-функции 457 10.8.2. Вычисление и применение handle-функций 457 10.8.3. Inline-функции 458 10.8.4. Преобразования handle- и inline-функции 458 10.9. Отладка программ 459 10.9.1. Общие замечания по отладке m-файлов 459 10.9.2. Команды отладки программ 459 10.9.3. Вывод листинга m-файла с пронумерованными строками 460 10.9.4. Установка, удаление и просмотр точек прерывания 460 10.9.5. Управление исполнением m-файла 461 10.9.6. Просмотр рабочей области 461 10.9.7. Профилирование m-файлов 462 10.9.8. Создание итогового отчета 464 10.9.9. Построение диаграмм Парето 465 10.9.10. Работа с системой контроля версий 465 10.10. Общение MATLAB с операционной системой 466 10.10.1. Работа с папками 466 10.10.2. Выполнение команд !,dos, unix и vms 467 10.10.3. Общение с Интернетом из командной строки 467 10.10.4. Некоторые другие команды 468 10.11. Поддержка Java 469 10.11.1. Информация о средствах поддержки Java 469 10.11.2. Java-объекты 470 10.11.3. Специфика применения Java-объектов 471 10.11.4. Java-массивы 472 10.12. Программирование задач пользователя с GUI 473 10.12.1. Примеры программирования GUI 473 789
Содержание 10.12.3. Программирование визуализации звукового сигнала Глава 11. Обзор расширений MATLAB 11.1. Состав расширений MATLAB 11.1.1. Классификация расширений системы MATLAB+Simulink 11.1.2. Главный пакет расширения Simulink 5/6 11.2. Примеры работы с Simulink 11.2.1. Пример моделирования системы Ван-дер-Поля 11.2.2. Nonlinear Control Design Blockset 11.2.3. Digital Signal Processing (DSP) Blockset 11.2.4. Пакет расширения Fixed-Point Blockset 11.2.5. Пакет расширения Stateflow 11.2.6. Пакет расширения SimPower System 11.2.7. Report Generator для MATLAB и Simulink 11.2.8. Real Time Windows Target и Workshop 11.3. Пакеты математических вычислений 11.3.1. Symbolic Math Toolbox 11.3.2. NAG Foundation Toolbox 11.3.3. Spline Toolbox 11.3.4. Statistics Toolbox 11.3.5. Optimization Toolbox 11.3.6. Partial Differential Equations Toolbox 11.3.7. Fuzzy Logic Toolbox 11.3.8. Neural Networks Toolbox 11.4. Пакеты анализа и синтеза систем управления 11.4.1. Control System Toolbox 11.4.2. Robust Control Toolbox 11.4.3. Model Predictive Control Toolbox 11.4.4. Communications Toolbox 11.4.5. r-Analysis and Synthesis 11.4.6. Quantitative Feedback Theory Toolbox 11.4.7. LMI Control Toolbox 11.5. Пакет идентификации систем 11.6. Пакеты для обработки сигналов и изображений 11.6.1. Signal Processing Toolbox 11.6.2. Image Processing Toolbox 11.6.3. Wavelet Toolbox 11.7. Прочие пакеты прикладных программ 11.7.1. Financial Toolbox 11.7.2. Mapping Toolbox 11.7.3. Data Acquisition Toolbox и Instrument Control Toolbox 11.7.4. Database toolbox 11.7.5. Excel Link 11.7.6. Virtual Reality Toolbox 11.7.7. MATLAB Compiler 11.8. Новые пакеты расширения MATLAB 6.5 П.8.1. Curve Fitting Toolbox 11.8.2. Instrument Control Toolbox 790
476 481 481 :.......481 481 483 483 484 485 487 487 488 488 489 490 490 490 491 492 493 494 494 496 497 497 500 501 502 502 503 504 504 506 506 508 510 514 514 515 516 516 518 518 518 518 518 520
Содержание 11.8.3. Developer's Kit for Texas Instruments DSP 11.8.4. Dials & Gauges Blockset 1.1.8.5. Mechanical System Blockset Глава 12. Simulink — система математического моделировании 12.1. Основные понятия математического моделирования 12.1.1. Роль математического моделирования 12.1.2! Аналитическое моделирование 12.1.3. Численное моделирование 12.1.4. Имитационное и ситуационное моделирование 12.2. Основные возможности пакета Simuiink 12.2.1. Назначение пакета 12.2.2. Общие возможности Simulink 12.2.3. Дополнительные возможности Sirnuiink 12.2.4. Новые возможности Simulink 5/6 12.3. Запуск Simulink и основы работы с пакетом 12.3.1. Интеграция пакета Simulink с системой MATLAB 12.3.2. Запуск моделей Simulink из среды MATLAB 12.3.3. Особенности интерфейса Simulink 12.4. Работа с демонстрационными примерами 12.4.1. Поиск и загрузка модели аттрактора Лоренца 12.4.2. Установка параметров компонентов модели 12.4.3. Установка параметров моделирования 12.4.4. Запуск процесса моделирования 12.4.5. Решение дифференциальных уравнений Ван-дер-Поля 12.4.6. Изменение характера нелинейности модели 12.4.7. Как добавить в модель графопостроитель 12.5. Работа с редактором дифференциальных уравнений 12.5.1. Решение уравнений Ван-дер-Поля 12.5.2. Решение уравнений аттрактора Лоренца 12.6. Дополнительные примеры моделирования... 12.6.1. Моделирование кубика с пружинкой 12.6.2. Информационное обеспечение примера 12.6.3. Моделирование системы терморегулирования дома 12.6.4. Использование субмоделей 12.6.5. Моделирование работы унитаза 12.7. Дополнительные возможности 12.7.1. Применение логических операций 12.7.2. Визуальный контроль типов данных 12.8. Общие замечания по моделированию систем 12.9. Особенности новейшей реализации Simulink 6 12.9.1. Новые разделы библиотеки Simulink 6 12.9.2. Подборка блоков из ящиков Biockset и Toolbox 12.9.3. Новое окно установки параметров моделирования Simulink 6 12.9.4. Новые кнопки на панели инструментов Simulink 6 12.9.5. Новый навигатор моделей Model Explorer Глава 13. Работа Simulink с файлами
521 522 522 523 523 523 524 525 527 527 527 529 52') 530 531 531 533 535 536 536 537 537 539 540 541 541 544 544 544 545 545 546 546 546 548 549 549 550 550 552 552 553 554 555 555 557 791
Содержание 13.1. Интерфейс браузера библиотек 13.l.i. Окно браузера библиотек Simulink 5 13.1.}. Состав основной библиотеки блоков 13.1.3. Заголовок и строка состояния 13.1.4. Меню окна бр,'.узора библиотек 13.! ,5. Настройка параметров Simulink 13.1.6. Меню Edit браузера библиотек 13.1.7. Меню Viev. браузера библиотек 13.1.8. Справка по браузеру библиотек 13.1.9. Панель инструментов окна браузера библиотек 13.2. Интерфейс окна моделей Simulink 13.2.1. Панель инструментов окна моделей 13.2.2. Основное меню пакета Simulink 13.2.3. Меню File окна модели.. 13.2.4. Контроль источников , 13.2.5. Вывод окна свойств текущей модели 13.3. Печать текущей модели 13 3.1. Вывод окна печати модели 13.3,2. Настройка принтера Глава 14. Подготовка и запуск модели 14.1. Создание модели 14.1.1. Постановка задачи и начало создания модели 14.1.2. Ввод текстовой надписи 14.1.3. Размещение блоков в окне модели 14.1.1. Выделение блока модели 14.1.5. Меню редактирования Edit 14.1.6. Применение буфера обмена 14.1.7. Выделение ряда блоков и их перенос. 14.!.8. Запуск нескольких моделей одновременно
14.2. Моделирование ограничителя 14.2.1. Постановка задач is 14.2.3. Создание и запуск модели ограничителя 14.2.3. Настройка масштаба осциллограмм 14.2.4. Сохранение модели 14.2.5. Модернизация и расширение модели 14.3. Основные приемы подготовки и редактирования модели 14.3.1. Добавление надписей и текстовых комментариев 14.3,2 Виде lemte, удаление и восстановление объектов 14.3.3. Вставка блоков и их соединение 14.3.4. Создание отвода линии 14.3.5. Удаление соединении 14.3.6. Изменение размеров блоков 14.3.7. Перемещение блоков и вставка блоков в соединение 14.3.8. Моделирование дифференцирующего устройства 14.3.9. Команды Undo и Redo в окне модели 14.4. Операции форматирования модели i4,4.1. Memo форматирования Format
792
557 557 558 558 559 559 560 560 562 562 562 562 563 563 564 564 565 565 566 568 568 568 568 568 570 570 571 573 573
575 575 575 576 578 578 579 579 581 581 583 584 584 585 585 586 586 586
Содержание 14.4.2. Примеры форматирования модели 587 Глава 15. Блоки источников и получателей сигналов .589 15.1. Источники простых сигналов и воздействий 589 15.1.1. Общий обзор источников 589 15.1.2. Источник постоянного воздействия Constant 590 15.1.3. Источник синусоидального воздействия Sine Wave..... 592 15.1.4. Источник нарастающего воздействия Ramp 592 15.1.5. Источник одиночного перепада Step 593 15.1.6. Источник прямоугольных импульсов Pulse Generator 59-* 15.1.7. Земля Ground 594 15.2. Источники шумовых воздействий 595 15.2.1. Источник случайного сигнала с нормальным распределением Random Number 59> 15.2.2. Источник случайного сигнала с равномерным распределением Uniform Random Number 595 15.2.3. Генератор белого шума Band Limited White Noice 595 15.3. Источники сложных сигналов 596 15.3.1. Повторяющаяся последовательность Repeating Sequence 596 15.3.2. Сигнал-генератор Signal Generator.. 597 15.3.3. Генератор нарастающей частоты Chirp Generator 597 15.3.4. Конструктор сигналов 598 15.4. Источники системных данных 600 15.4.1. Источник времени моделирования Clock ...600 15.4.2. Цифровой источник времени Digital Clock 600 15.4.3. Блок получения данных из файлов From File 600 15.4.4. Блок получения данных из рабочего пространства From Workspace 60! 15.4.5. Блок входа In 602 15.5. Виртуальные регистраторы 603 15.5.1. Обзор блоков приема данных 603 15.5.2. Виртуальный осциллограф 604 15.5.3. Виртуальный «плавающий» осциллограф 606 15.5.4. Виртуальный графопостроитель XY Graph 607 15.5.5. Дисплей Display 609 15.6. Другие блоки группы Skins 609 15.6.1. Заглушка Terminator 609 15.6.2. Задание выхода Out* и создание полсистемы .609 15.6.1. Блок остановки моделирования Stop 61! 15.6.2. Блок сохранения данных и файле То File 612 15.6.3. Блок сохранения данных в рабочем пространстве То Workspace 613 15.7. Библиотека Signal Routing 6!4 15.7.1. Обзор библиотеки Signal Routing 614 15.7.2. Блок создания шины Bus Creator .615 15.7.3. Блок шинного селектора Bus Selector 616 15.7.4. Блок объединения сигналов Merge 6)6 15.7.5. Блок мультиплексирования Мих 617
793
Содержание 15.7.6. Блок демультиплексирования Demux 15.7.8. Блоки «беспроводной» связи From, Goto и Goto Tag Visibility 15.7.9. Ручной переключатель сигналов Manual Switch 15.7.10. Управляемый переключатель сигналов Switch 15.7.11. Многопортовый переключатель сигналов Multiport Switch 15.7.12. Селектор Selector 15.8. Библиотека атрибутов сигналов Signal Attribute 15.8.1. Состав библиотеки атрибутов сигналов 15.8.2. Блок преобразования типов сигналов Data Type Conversion 15.8.3. Установка начального значения сигнала 1С 15.8.4. Блок согласования дискретных значений Rate Transition 15.8.5. Блок спецификации сигнала Signal Specification 15.8.6. Блок проверки сигналов Probe 15.8.7. Блок вычисления размера сигнала Width Глава 16. Математические блоки 16.1. Математическая библиотека Math 16.1.1. Обзор библиотеки Math 16.1.2. Блоки выполнения арифметических операций 16.1.3. Блоки вычисления элементарных функций 16.1.4. Блок выполнения логических операций Logical Operation 16.1.5. Блок выполнения побитовых логических операций
Bitwise Logical Operator
16.1.7. Блоки масштабирования Gain и Slider Gain 16. .8. Блоки Complex to Magniitude-Angle и Complex to Real-lmag 16. .9. Блоки Real-Image to Complex и Magnitude-Phase to Complex 16. .10. Блок поиска минимума и максимума MinMax 16. .11. Блок алгебраического ограничения Algebraic Constraint. 16. .12. Матричные блоки Assignment, Matrix Concatenation и Reshape 16.1.13. Блок вычисления значений полинома Polynomial 16.2. Библиотека непрерывных блоков Continuous 16.2.1. Раздел библиотеки Continuous 16.2.2. Дифференцирующий блок Derivative 16.2.3. Интегрирующий блок Integrator 16.2.4. Блок задания линеаризованной модели State-Space 16.2.5. Блок передаточной характеристики Transfer Fen 16.2.6. Блок Zero-Pole 16.2.7. Блок фиксированной задержки Transport Delay , 16.2.8. Блок управляемой задержки Variable Transport Delay 16.3. Блоки задания таблиц 16.3.1. Обзор блоков таблиц 16.3.2. Блок одномерной таблицы Look-Up Table 16.3.3. Блок двумерной таблицы Look-Up Table (2D) 16.3.4. Блок многомерной таблицы Look-Up Table (n-D) 16.3.5. Блок Interpolation (n-D) using PreLoop-Up 16.3.6. Блок таблицы с прямым доступом Direct Loop-Up Table (n-D) 16.3.7. Блок работы с индексами PreLook-Up Index Search 794
617 620 621 621 622 624 625 625 625 626 626 627 627 628 629 629 629 629 630 ....631
632 634 634 636 636 638 638 640 .640 640 640 641 642 643 644 644 645 646 646 646 648 648 .650 650 651
Содержание 16.4. Блоки задания функций пользователя 16.4.1. Обзор функций пользователя 16.3.2. Блок задания функции Fen 16.4.3. Блок задания функции MATLAB Fen 16.4.4. Блок задания S-функций 16.4.5. Примеры применения S-функций 16.4.6. Блок создания S-функций S-Function Builder 16.5. Новые разделы библиотеки Simulink 6 16.5.1. Блоки раздела Logic and Bit Operations 16.5.2. Блоки раздела Additional Math & Discrete Глава 17. Нелинейные, дискретные и специальные блоки 17.1. Нелинейные блоки
17. 17. 17. 17. 17. 17. 17.
. 1. Обзор нелинейных блоков .2. Блок ограничения Saturation .3. Блок с зоной нечувствительности Dead Zone .4. Релейный блок Relay .5. Блоке ограничением скорости Rate Limiter .6. Блок квантования Quantizer .7. Блок фрикционных эффектов Coulombic and Viscous Friction 17.1.8. Блок люфта Backlash 17.1.9. Детектор пересечения заданного уровня Hit Crossing 1Т.2. Дискретные блоки 17.2.1. Обзор дискретных блоков 17.2.2. Блок дискретной единичной задержки Unit Delay 17.2.3. Блок экстраполятора нулевого порядка Zero-Order Hold 17.2.4. Блок экстраполятора первого порядка First-Order Hold 17.2.5. Блок дискретного интегратора времени Discrete-Time Integrator 17.2.6. Блок дискретного фильтра Discrete Filter 17.2.7. Блок памяти Memory 17.2.8. Блок дискретной передаточной функции Discrete Transfer Fen 17.2.9. Блок задания дискретной функции Discrete Zero Pole 17.2.10. Блок Discrete State Space 17.3. Библиотеки Simulink Extras 17.3.1. Обзор библиотеки Simulink Extras 17.3.2. Дополнительные дискретные блоки Additional Discrete 17.3.3. Дополнительные линейные блоки 17.3.4. Дополнительные блоки Additional Sinks 17.3.5. Блоки спектрального анализа 17.3.6. Блок кросскоррелятора Cross-Correlator 17.3.7. Блок автокоррелятора Cross-Correlator 17.3.8. Обзор раздела библиотеки Flip Flops 17.3.9. Генератор тактовых импульсов Clock 17.3.10. Триггерные блоки 17.3.11. Пример построения широтно-импульсного модулятора 17.3.12. Раздел Linearization 17.3.13. Блок заданной временной задержки 17.4. Блоки преобразований
652 652 652 653 653 654 655 657 657 658 659 659
659 659 660 660 661 662 663 663 664 664 664 666 666 667 667 668 668 669 669 671 671 671 672 672 674 675 676 677 677 677 679 679 680 681 682 795
Содержание 17.4.1. Обзор раздела преобразований Transformations 17.4.2. Блок преобразования температуры Celsius to Fahrenheit 17.4.3. Блок преобразования температуры Fahrenheit to Celsius 17.4.4. Блок преобразования углов Degress to Radians 17.4.5. Блок преобразования углов Radians to Degress 17.4.6. Блок преобразования координат Cartesian to Polar 17.4.7. Блок преобразования координат Polar to Cartesian 17.4.8. Блок преобразования ЗО-координат Cartesian to Spherical 17.4.9. Блок преобразования ЗО-координат Spherical to Cartesian 17.5. Библиотека верификации модели — Model Verification 17.5.1. Обзор блоков библиотеки Model Verification 17.5.2. Блоки контроля со статическими уровнями 17.5.3. Блоки динамического контроля 17.5.4. Блок контроля нуля Assertion 17.5.5. Блок контроля градиента дискретного сигнала Check Discrete Gradient 17.5.6. Блок контроля разрешения Check Input Resolution 17.6. Библиотека дополнительных утилит Model-Wide Utilities 17.6.1. Обзор блоков библиотеки Model-Wide Utilities 17.6.3. Блок линеаризации с запуском Trigger-Based Linearization 17.6.4. Блок задания информации о модели — Model info 17.6.5. Блок документирования модели — DocBlock Глава 18. Подготовка и применение подсистем 18.1. Общие сведения о подсистемах 18.2. Создание подсистемы из части основной модели 18.2.1. Постановка задачи о выделении подсистемы 18.2.4. Вызов и просмотр подсистемы 18.2.5. Назначение портов ввода и вывода в подсистемах 18.2.7. Модификация и редактирование подсистемы 18.2.8. Задание свойств подсистемы 18.2.9. Параметры портов ввода и вывода 18.2.10. Обзор библиотеки Ports&SubSystem 18.3. Построение подсистем на основе блока Subsystem 18.3.1. Постановка задачи 18.3.2. Модель функционального генератора 18.3.3. Задание подсистемы с помощью блока Subsystem 18.3.4. Создание основной модели и ее испытание 18.4. Управляемые подсистемы 18.4.1. Типы управляемых подсистем 18.4.3. Создание порта выхода Е-подсистемы 18.4.4. Т-подсистемы 18.4.5. Пример применения Т-подсистемы 18.4.6. ЕТ-подсистемы 18.4.7. Применение блоков Goto, Goto Tag visibility и From 18.5. Особенности применения подсистем 18.5.1. Виртуальные подсистемы 18.5.2. Невиртуальные подсистемы 796
682 682 683 683 683 683 683 683 685 685 685 685 687 688 688 690 690 690 692 692 694 695 695 695 695 697 697 698 699 701 701 702 702 702 703 704 704 704 707 707 708 710 710 711 711 712
Содержание 18.5.3. Семантика подсистем 18.5.4. Демонстрационные примеры применения подсистем 18.6. Маскированные подсистемы 18.6.1. Механизм маскирования 18.6.2. Создание начальной модели 18.6.3. Подготовка к маскированию подсистемы 18.6.4. Запуск редактора маски 18.7. Работа с масками 18.7.1. Редактор маски 18.7.2. Создание окна параметров блока 18.7.3. Инициализация параметров 18.7.4. Подготовка описания и документаци.1 блока 18.7.5. Создание простой пиктограммы блок! 18.7.6. Проверка модели с созданной маско); 18.7.7. Вывод описания и справки маски 18.7.8. Создание маски-справки 18.8. Расширенные средства создания пиктограмм блоков 18.8.1. Задание текстовых надписей 18.8.2. Применение команд графики MATI.AB 18.8.3. Средства специального оформления пиктограмм 18.8.4. Применение графического редактора пиктограмм 18.8.5. Задание пиктограммы в виде готового рисунка 18.9. Создание библиотек пользователя 18.9.1. Библиотека Commonly Used Simulink 6 18.9.2. Требования к библиотекам пользователя 18.9.3. Окно библиотеки пользователя... 18.9.4. Перенос блоков в окно библиотеки 18.9.5. Применение библиотек пользователя Глава 19. Инструменты и практика моделирования 19.1. Меню инструментов Tools 19.1.1. Роль инструментальных средств Simulink 19.1.2. Меню инструментов Tools 19.2. Работа с отладчиком графических S-моделей 19.2.1. Запуск отладчика 19.2.2. Панель инструментов отладчика 19.2.3. Работа с отладчиком • 19.2.4. Дополнительные возможности отладчика 19.2.5. Проверка порядка выполнения блоков 19.2.6. Оценка состояния отладчика 19.2.7. Управление отладчиком из командной строки MATLAB 19.3. Браузер данных Simulink 19.4. Подготовка отчетов по моделировании» 19.4.1. Что такое отчет?. 19.4.2. Установки просмотра они гл.... 19.4.3. Запуск генератора отче)он 19.4.4. Редактирование отчета 19.4.5. Пример подготовки опети
,
713 714 716 716 717 718 718 720 720 721 722 723 724 724 726 726 727 727 727 728 729 731 733 733 733 733 734 735 736 736 736 ....736 737 737 737 738 740 740 740 741 743 744 744 744 745 745 747 797
Содержание 19.5. Инструменты ускорения моделирования 19.5.1. Профилировщик Profiler 19.5.2. Применение Simulink-ускорителя 19.5.3. Дискретизация моделей 19.6. Работа с LTI-вьювером 19.6.1. Вызов LTI-вьювера командой Linear analysis 19.6.2. Выбор состояния системы 19.6.3. Выбор графических характеристик линейных систем 19.6.4. Конфигурация вывода графиков 19.6.5. Пример линеаризации нелинейной системы 19.7. Прочие инструментальные средства 19.8. Практические примеры моделирования 19.8.1. Построение спирали Карно 19.8.2. Синтез АМ-сигнала 19.8.3. Нестабильные линейные системы с обратной связью 19.8.4. Получение незатухающих почти синусоидальных колебаний 19.9. Демонстрационные примеры SimuHnk 19.9.1. Доступ к демонстрационным примерам Simulink 19.9.2. Моделирование простого маятника 19.9.3. Колебания многозвенного объекта 19.9.4. Моделирование отскакивающего от поверхности мячика 19.9.5. Моделирование автопилота с аналоговыми блоками 19.9.6. Пример дискретной системы 19.9.7. Применение примеров раздела Automotive 19.9.8. Ранняя модель автопилота летательного аппарата F14 19.9.10. Комбинированная модель автопилота F14 Список литературы
798
...748 748 750 754 754 754 756 757 758 759 760 760 760 761 761 763 765 765 766 766 767 768 769 769 769 772 774
Магазины городов России и ближнего зарубежья Магазин «Санкт-Петербургский Дом Книги» Адрес: г. Санкт-Петербург, Невский проспект, д. 28. Тел.: 318-49-15, 312-01-84.
ЧП Князева В.М. Адрес: г. Тюмень, ул. Республики, д. 143. Тел.: 22-81-95.
Магазин «Техническая книга» Адрес: г. Санкт-Петербург, Пушкинская ил., д. 2. Тел.: 164-65-65, 164-62-77.
ЧП Антропов В.П. Адрес: г. Омск, ул. 10 лет Октября, д. 48. Тел.: (3812) 31-05-83.
ООО «Книжный меридиан» Адрес: г. Красноярск, ул. Дубровинского, д. 52А. Тел.: 27-14-29.
Магазин ОАО «Курсккнига» Адрес: г. Курск, ул. Ленина, д. 11. Тел.: (0712)22-38-42. 22-77-23.
ЧП Вашенко СВ. Адрес: г. Липецк, рынок 9-го микрорайона, контейнер 37; пр-т Победы, 29, «Дом быта», 2-й этаж, «Бизнес-книга». Тел.: 77-04-25, 46-33-34.
ИП Ольхова О.Г. Адрес: г. Н. Новгород, ул. Бекетова, д. 71, кв. 39. Тел.:(8312)33-02-91.
ООО «Книжный мир» Адрес: г. Нальчик, ул. Захарова, 103. Тел.: 5-52-01. ООО «Топ книга» Адрес: г. Новосибирск. Тел.: 36-10-26, 36-10-27. Магазин «На Бульваре» Адрес: г. Орел. ул. Московская, д. 36. Тел.: 43-54-69. Магазин «Ампир»' Адрес: г. Орел. Бульвар Победы, д. I. Тел.: 5-89-90. Комаров Виктор Анатольевич Адрес: Пермская обл., г. Лысьва, ул. Озерная, д. 11, кв. 89. Тел.: 44-56-41. Магазин «Чакона» Адрес: г. Самара, ул. Чкалова, 100. Тел.: 42-96-28, 42-96-29.
ГУП «Чувашский республиканский бибколлектор» Госкомпечати Чувашской Республики Адрес: г. Чебоксары, ул. Петрова, д. 7. Тел.: (8335) 62-15-67. ООО «Книжное Дело» Адрес: г. Томск, ул. Белинского, д. 55/НТБ ТПУ. Тел.: (3822)41-57-72. МУП «Книжный магазин № 14» Адрес: г. Екатеринбург, ул. Челюскинцев, д. 23. Тел.: (3432) 53-24-89. «Дом книги» Адрес: г. Екатеринбург, ул. Валека, д. 12. Тел.: (3432) 58-12-00. ОАО «Уралкнига» Адрес: г. Екатеринбург, ул. Аршинская, д. 23а. Тел.: (3432) 71-25-24.
Магазин радиодеталей «Элком» Адрес: г. Самара, пр-т Кирова, 229; ул. Ивана Булкина, 81. Тел.: 59-85-14; 24-25-04.
ГУП «Облбибколлсктор» Адрес: г. Екатеринбург, ул. Первомайская, д. 70, Тел.: (3432) 74-27-47.
Магазин «Электроника» Адрес: г. Уфа, пр-т Октября, д. 108. Тел.: 33-10-29.
ООО «Амиталь» Адрес: г. Воронеж, Ленинский пр-т, д. 157. Тел.: (0732)23-00-02, 23-63-26.
ЧП Вологин В. Адрес: г. Запорожье. Тел.: (10380612) 96-63-21. e-mail: [email protected]. ООО «АКМА» Адрес: г. Пермь, ул. Г. Хасана, д. 16. Тел.: 90-45-60, 90-93-02. ООО «ЛИТЭКС» Адрес: г. Красноярск, ул. Дудинская, д. ЗА. Тел.: 55-5035, 55-50-36. ООО «Элко-М» Адрес: г. Чебоксары. Тел.: 64-99-22, 64-99-33.
ООО «Азбука» Адрес: г. Петрозаводск, ул. Дзержинского, д. 4. Тел.: (8142)78-55-03. «Тезей» Адрес: г. Мурманск. Тел.: (8152) 43-76-96 маг. Микроника Адрес: Киев, ул. Марины Расковой, д. 13. Тел.: (044) 517-73-77 ООО «Импульс» Адрес: г. Тольятти, ул. Дзержинского, д.70. Тел.: 32-74-85
Магазин радиодеталей «ДЕЛЬТА» Адрес: г. Новокузнецк, ул. Воровского, д. 13. Тел.: 74-59-49.
ООО «ДОМО «ГЛОБУС» Адрес: г. Казань, пр-д Коммуны, д. 10/72. Тел.: 36-74-81; 99-50-74
ЧП Кудь А.Я. Адрес: г. Харьков. Тел.: 776-43-29.
ООО «ТАИС» Адрес: г. Казань, ул. Гвардейская, д. 9, корп. А. Тел.: (8432) 72-34-55
ГУП Красноярский магазин «Академкнига» торговой фирмы «Академкнига» РАН Адрес: г. Красноярск, ул. Сурикова, д. 45. Тел.: 27-03-90.
Магазин «ЭХО» Адрес: г. Петрозаводск, ул. Андропова, д. 9. Тел.: (8142) 78-36-0!
Серия «Библиотека профессионала»
Владимир Павлович Дьяконов
MATLAB 6.5 SPl/7 + Simulink 5/6® Основы применения
Ответственный за выпуск В. Митин Макет и верстка А. Иванова Обложка Е. Холмский
ООО «СОЛОН-Пресс» 123242, г. Москва, а/я 20 Телефоны: (095) 254-44-Ю, (095) 252-36-96, (095) 252-25-21 E-mail: [email protected] По вопросам приобретения обращаться: ООО «Альянс-книга» Тел: (095) 258-91-94, 258-91-95, www.abook.ru ООО «СОЛОН-Пресс» 127051, г. Москва, М. Сухаревская пл., д. 6, стр. 1 (пом. ТАРП ЦАО) Формат 70x100/16. Объем 50 п. л. Тираж 1000 экз. отпечатано в ООО «Аделия» 142605, Московская обл., г. Орехово-Зуево, ул. Красноармейская, д. 1 Заказ № //Z
|