ВВЕДЕНИЕ
Тема  1.  НАЗНАЧЕНИЕ  И  СТРУКТУРА  MATLAB
1.1.2. Сервисные  программы  MATLAB
1.2. Интерфейс  пользователя
1.2.2. Окно  просмотра  рабочего  пространства
1.2.3. Редактор  массивов
1.2.4. Текущий  каталог
1.2.5. История  команд
1.2.6. Редактор-отладчик  M-файлов
1.2.7. Окна  для  работы  с  графикой
1.2.8. Окно  просмотра  справочной  системы
1.2.9. Кнопка  Start  и  окно  Launch  Pad
1.3. Взаимодействие  с  другими  приложениями
Тема  2.  ДАННЫЕ  И  ВЫЧИСЛЕНИЯ
2.1.2. Форматы  представления  данных
2.1.3. Комплексные  числа
2.1.4. Встроенные  математические  функции
2.2. Типы  данных
2.3. Массивы
2.3.2. Работа  с  массивами
2.4. Векторы
2.4.2. Вектор-столбцы
2.4.3. Поэлементные  операции  с  векторами
2.5. Матрицы
2.5.2. Доступ  к  элементам  матрицы
2.5.3. Взаимные  преобразования  векторов  и  матриц
2.6. Тензоры
2.6.2. Доступ  к  элементам  тензора
2.7. Функции  для  работы  с  массивами
2.8. Вычисления  с  массивами
2.8.2. Операции  отношения  и  логические  операции
2.9. Текстовые  строки
2.9.2. Массивы  строк
2.10. Структуры
2.10.2. Функции  для  работы  со  структурами
2.11. Массивы  ячеек
2.11.2. Функции  для работы  с  массивами  ячеек
Тема  3.  ЭЛЕМЕНТЫ  ПРОГРАММИРОВАНИЯ
3.1.2. Операторы  цикла
3.2. Обработка  исключительных  ситуаций
Тема  4.  СЦЕНАРИИ,  ФУНКЦИИ  И  ПЕРЕМЕННЫЕ
4.1.2. Функции
4.1.3. Типы  функций
4.1.4. Видимость  имен  функций
4.1.5. Синтаксис  вызова  M-функций
4.2. Переменные  и  их  область  действия
4.2.2. Устойчивые  переменные
4.3. Отладка  M-функций
Тема  5.  ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ  ПРОГРАММИРОВАНИЕ
5.2. Правила  создания  класса
5.3. Методы  класса
5.4. Перегрузка  функций  и  операторов
5.4.2. Переопределение  математических  операторов
5.4.3. Переопределение  индексных  операций
5.5. Идентификация  объекта
Тема  6.  ВЫСОКОУРОВНЕВАЯ  ГРАФИКА
6.2. Оформление  графиков  функций
6.2.2. Толщина  линии
6.2.3. Надписи  на  графиках
6.2.4. Оформление  осей  системы  координат
6.3. Трехмерная  графика
6.3.2. Функция  plot3
6.3.3. Положение  камеры  и  вращение  графиков
6.4. Сохранение  графических  изображений
Тема  7.  ОСНОВЫ  ДЕСКРИПТОРНОЙ  ГРАФИКИ
7.1.2. Графический  объект  Root
7.1.3. Графический  объект  Figure
7.1.4. Графический  объект  Axes
7.1.5. Графический  объект  UI
7.1.6. Графический объект  Image
7.1.7. Графический  объект  Light
7.1.8. Графический  объект  Line
7.1.9. Графический  объект  Patch
7.1.10. Графический  объект  Rectangle
7.1.11. Графический  объект  Surface
7.1.12. Графический  объект  Text
7.2. Управление  свойствами  объектов
Тема  8.  ИМПОРТ  И  ЭКСПОРТ  ДАННЫХ
8.2. Низкоуровневый  файловый  ввод-вывод
8.2.2. Работа  с  бинарными  и  текстовыми  файлами
8.3. Работа  со  стандартными  файлами
8.3.2. Другие  форматы  данных
Тема  9.  ГРАФИЧЕСКИЙ  ИНТЕРФЕЙС  ПОЛЬЗОВАТЕЛЯ
9.2. GUI  и  дескрипторная  графика
9.2.2. Объект  Uimenu
9.2.3. Объект  Uicontextmenu
9.2.4. Callback  функции
9.3. Среда  GUIDE
ЛИТЕРАТУРА
СОДЕРЖАНИЕ
Текст
                    )S
S
:J

ш
u
о....

J\ /
f\ Э
Н /.
[ ' ,.
()Hyoe'1
J ;;11\;" 11!.J
Шеr l' ,,!
J jJJIJ ( J) J Fiy Ij
\ j J i J j L  r J J ( L
IY r J /). r
.............. ""'......... ........I..........
ЧИСЛОВОЙ ПАКЕТ
MATLAB
, ;- ....7'7  :> 
..A.:, :.r ') W
l ... .... t
l- J:- W :.;J. ",.. ...J' . ':' './ I
, ''''н' r' , '. I
'" ... ," _ ..1. ,); - "":': 11 \
...... '" -' ....."". t'. ....
.J l' , . , .. ..... . ,...  .....
.A-", ' ",1 _ .$r. -; '',-''"1, ": :\
) \./ )   :.,... ,'; . \' .
/. ' '  ........... . rr....,
',.у q?, /  't' 11':.r . ..} ':, J'
i'..' . '" '.' 18 .  1': ... .Х )
.. .. ., tJI -. ... '
" i 1  .. _.- .. \ '
';'} "":," ,.;' ....;.1 '.... ,.4, (' " I у l
........ ;, C- r- J.' .... " r!Jb. \
1t .:,;.t"  ., .\ '1 r
< ' ::. ' . z''(;.:т.'Y7r '.",п. " ' :
..,,, r J:r'"" 41  ........
....... :\ .;/ .I 1.,t..r  -'
ч   
".>r-r ."..,.....у.. 1
-....;::.- ......:0... r
j,Ff


Л. л. rолубева А. Э. Малевuч Н. Л. Шеr лова КОМПЬЮТЕРНАЯ МА ТЕМА ТИКА. числовой ЛАКЕТ MATLAB КУРС ЛЕКUИЙ минск 6fY 2007 
УДК 519.67-37 ББК 22.19 [62 Печатается по решеllИЮ РедаКЦИОll1l0-uздатеЛЬСКО20 совета БеЛОРУССКО20 20сударстве1l1l020 Уllиверситета р е Ц е н з е н ты: доктор Физико-математических наук, профессор А. П Садовский; доктор технических наук, профессор В. А. ЛипllИЦКUЙ fолубева, Л, л. r62 Компьютерная математика, Числовой !шкет MatLab : курс лек- ций! Л. Л. [олубева, А. Э. Малевич, Н. Л. Щеrлова.  МШIСК : Б[У, 2007,  164 с. ISBN 978985-4855653. R курсе Jlекций ПрСДСТ1iВш:н один из раздслов ДИСЦИIlJlИНЫ (<Компьютер ная математика», посвященный применению пакета MatLab для ВЫ!ЮJIIIСНИЯ математических, ннженерных и научных расчетов, Дано Оl1исанне системы, изложены основы работы и IIрОТ']Jаммированпя в МаЙ.аЬ, рассмотрены реали зация высококачественной ВИЗУaJIИ'ШЦИИ получаемых результатов, создание приложений с rpафическим ннтерфейсом пользователя, Предиазначено для студентов механикоматематическоrо факультета Бrу очной и заочной форм обучения, а также для всех, кто связан с наУЧИЫМlI ис следованиями и инженерной работой, УДК 519.67-37 ББК 22.19 l ISBN 978-985-485-565-3 @ rолубева Л, Л" Малевич А. Э" Щеrлова Н, Л" 2007 @ БrY, 2007 
ВВЕДЕНИЕ MATLAB ® ( MATrix LABoratory ) – это высокоэффективная система инженерных и научных расчетов фирмы The MathWorks , Inc ( USA ). В ы- числения, визуализация и программирование в нем представлены в удобной для работы среде, где за дачи и решения выражены в знакомой математической форме. П редставлени е данных в виде ма с сивов (матриц и векторов) обеспечива е т пользователю широкие возможности решен и я задач, связанных с матрицами и матричными вычислениями , по сравн е- нию с большинством язык ов программирования. Перв о начально MATLAB разрабатывался как диалоговая среда для матричных вычисл е- ний и обеспечивал легкий доступ к библиотекам пр о грамм LINPACK и EISPACK . Сегодня инструменты MATLAB включ а ют в себя библиотеки LAPACK и BLAS, интегрирующие последние достижения в области пр о- граммного обеспечении для проведения матричных расчетов. Непреры в- ная модернизация и расширение возможностей MATLAB , совершенс т- вование заложенных алгоритмов и добавление новых команд пр и вели к тому, что в настоящее время MA TLAB является мощным, наде ж ным и универсальным средством решения задач в самых раз ных областях чел о- веческой деятельности. Наиболее известные области применения сист е- мы MATLAB :  м атематические вычисления ;  р азработка алгоритмов ;  с бор информации ;  в ычислительны й эксперимент, имитационное моделирование, макет и- рование ;  а нализ данных, исследование и визуализация результатов ;  н аучная и инженерная графика ;  р азработка приложений, включая создание графического интерфейса пользоват е ля GUI . MATLAB – это интерактивная сис тема, основным объектом которой является массив , не требующий явного указания размерности. Это п о- зволяет решать многие технические вычислительные задачи, сформул и- рованные в матричных и векторных формах, за меньшее количество вр е- мени, чем потреб о валось бы п ри написании программы на скалярном языке типа C или FORTRAN . 
Введение 4 В ун и верситетской среде MATLAB является стандартным учебным инструментом для начальных и старших курсов при изучении математ и- ки, инженерии и науки в целом. В промышленности MATLAB является инст рументом для проведения высокоэффективных исследований, ан а- лиза данных и разработок. В настоящее время широко использ у ется MATLAB версии 6.5, недавно вышла версия 7.0. 1 Service Pack 1 . К урс лекций состоит из девяти тем. Т ема 1 посвящена назначению и структ уре пакета MATLAB . В ней подробно описывается графический интерфейс пользователя среды MATLAB . В темах 2 и 3 рассматриваются вопросы, касающиеся работы с да н- ными, принципы представления данных в виде массивов, матриц и ве к- торов, вычислени я арифметических в ыражений, а также использов а ние основных конструкций языка программирования MATLAB . Т ема 4 информирует о правилах написания функций, работы с л о- кальными и глобальными переменными. Основы объектно - ориентированного программирования, заложе н- ные в MATLAB , изу чаются в теме 5 . На конкретном примере рассматр и- ваются этапы создания классов . Т ема 6 знакомит с высокоуровневой графикой среды MATLAB , оп и сываются возможности визуального представления и исследования данных в виде графиков линий и поверхностей, диаграмм, ги с тограмм. Создание и управление графическими объектами как элементами дескрипторной графики рассматривается в теме 7. Вопросы импорта и экспорта данных, организации работы с файл а- ми разных форматов представлены в теме 8. Т ема 9 посвящ ена процессу созда ния приложений с графическим интерфейсом пользователя. В курсе лекций излагаются основы работы в среде MATLAB . Пре д- лагаемое издание в первую очередь адресовано студентам механико - математическ ого и физическ ого факультетов университет а , но может и с- пользовать ся студентами инженерно - технических специальностей , асп и- ра н тами, преподавателями, научными работниками и всеми, кто в той или иной степени связан с научными исследованиями и инженерной р а- ботой , где требуется матем а тика . 
ТЕМА 1 НАЗНАЧЕНИЕ И СТРУКТУРА MATLAB MATLAB – это интерактивная система, основным объектом кот о рой является массив, не требу ющий явного указ ания размерност и . Это п о- зволяет решать многие вычислительные задачи, связанные с ве к торно - матричными формулировками. По - прежнему поддерживая диалоговый интерактивный режим для простых вычислений и операций, современный MATLAB – это одновр е- менно и операционная среда , и язык программирования, на котором м о- гут быть написаны программы для мног о кратного использования , в том числе и сложные программы с развиты м графическим интерфейсом. Пользователь сам может написать специализированные функции и пр о- граммы, которые оформляются в виде M - файлов. Концепция пакетов прикладных программ MATLAB Application Toolboxes решает проблем у классификации большого количества н а- писанных программ. Пакеты Toolboxes представляют собой колле к- ции M - файлов , предназначенные для решения определенной задачи , а также позволяющие изучать и применять различные специальные техн о- логии. Открытость кода встроенных функций MATLAB дает возможност ь пользователям исследовать запрограммированные алгоритмы и, при н е- обходимости, использовать их. Полная справочная система MATLAB содержит подробное опис а- ние компонентов MATLAB , его структуры, встроенных функций и большое число примеров их и с пользования. Д оступ из командной строки к кратким сведениям о встроенных функциях обеспеч и вает возможность быстрого выбора нужного формата обращения к функциям. Обзор возможностей MATLAB представляет демонстрационная программа Demo . Для ее запуска следует ввести в кома ндной строке, обозначенной символом приглашения >> , команду demo и нажать кл а- вишу < Enter > или выбрать соответствующий пункт меню. 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 6 1.1. Структура с истем ы MATLAB 1.1.1. Основные части MATLAB Система MATLAB состоит из пяти основных частей: Среда р азработки – э то наб ор инструментов и средств, которые помогают использовать функции и файлы MATLAB . Многие из этих и н- струментов являются графическими интерфейсами пользователя. Среда р азработки включает в себя рабочий стол MATLAB ( MATLAB Desktop ), командное окно ( Command Win dow ), историю команд ( Command Hi s tory ), редактор - отладчик M - файлов ( Editor and Debugger ), браузеры для просмотра рабочего пространства ( Wor k- space ) , справочной системы ( Help ), файл ов ( files ) и поисков ого п у- т и ( Search Path ). Библиотека м ате матических Функци й MATLAB – это о б- ширное собрание вычислительных алгоритмов, начиная с элементарных функций, таких как сумма, синус, косинус, до более сложных функций подобно нахождению обратной матрицы или собственных значений ма т- рицы, функций Бесселя, преобразований Фурь е. Язык программирования MATLAB – это высокоуровневый язык матриц и масс и вов с операторами управления, функциями, структурами данных, вводом - выводом и возможностями объектно - ориентированного программирования. Это позволяет программировать как локально, со зд а- вая небольши е тестовы е программ ы , так и глобально, то есть разрабат ы- вать сложные прикладные программы. Графика . MATLAB обладает обширными средствами для пре д- ставления векторов и матриц в виде графиков. Эти средства включают в себя функции высокого уров ня, предназначенные для двухмерной и трехмерной визуализации данных, обработки изображения, анимации и презентационной графики. А также содержат функции низкого уровня, которые позволяют полностью настраивать вид графика . В с ред е MATLAB можно разрабатывать собственные сложные прилож е ния с полноценными графич е скими интерфейсами пользователя. Интерфейс прикладного программирования MATLAB – это библиотека, к о торая позволяет писать программы, взаимодействующие с MATLAB , на языках C и FORTRAN . Она включает в се бя средства для вызова функций из MATLAB (динам и ческое связывание), вызова самого MATLAB как вычислительного инструмента, а также средства для чт е- ния/записи MAT - файлов. 
1.1. Структура сист емы MATLAB 7 1.1.2. Сервисные программы MATLAB Сервисные программы ( Tool b ox ) представляют собой наборы ф ункций MATLAB (М - файлы), позволяющих расширить среду MATLAB для решения особых классов задач. Tool b ox es могут быть выборочно установлены вместе с MATLAB по жел а нию пользователя. В состав многих Tool b oxes входят приложения с графическим инте р- фейсом пользова теля, что обеспечивает быстрый и наглядный доступ к основным функциям. Данные пакеты позволяют решать широкий класс специфических задач и вместе с тем изучать и применять специализир о- ванные технологии. Области применения включают в себя обработку сигналов ( signal processing ), системы управления ( co n trol systems ), нейронные сети ( neural networks ), вейвлеты ( wav e- lets ), моделирование ( sim u lation ) и многое другое. MATLAB Web Server позволяет создавать приложения, которые и с пользуют возможности мировой сети для пересылки данных в MATLAB для выполнения вычислений и отображения резул ь татов в Web - браузере. MATLAB Web Server использует протокол TCP / IP для обмена данными между системой клиента и MATLAB . Notebook . Интеграция MATLAB и Microsoft Word обеспечивает возмож ность нап и сания в редакторе Word интерактивных документов – M - книг, содержащих текст, команды MATLAB и результаты выполн е ния этих команд. Пользователь, раб о тающий с М - книгой, может запускать блоки команд MATLAB непосре д ственно из документа Word , при этом р езультат выполнения команд отображается в М - книге. Такая возмо ж- ность применяется при создани и отчетов и учебных пособий, позвол я я дополнить документ примерами и результатами ра с четов. Excel Link является расширением программного обеспеч е ния, выполняющим ин теграцию Excel и MATLAB в среду Microsoft Windows . На д стройка Excel Link , поставляемая вместе с MATLAB , существенно расширяет возможности Excel , обеспечивая доступ пользователя к фун к- циям MATLAB из ячеек рабочего ли с та. BioInformatics Tool b ox предоставляет интегрируемую ср е ду для проведения научных исследований в области биологии, при разр а- ботке медицинских препаратов, решении задач генной инженерии. Database Tool b ox . Информация, хранящаяся в базах данных многих популярных форматов ( Microsoft Access , Micros oft Excel , Micr o- soft SQL Server , MySQL , Oracle и т. д.), может быть импортирована в MATLAB , обработана и исследована при помощи функций MATLAB , а 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 8 затем экспортирована в какую - либо другую базу данных. Для обмена данными используются команды языка запросов S QL . Financial Tool b ox предоставляет вычислительную среду в области финанс о вого анализа и инженерии. Содержит вс е необходимое для проведения математического и статистического анализа финансовой информации и отображения результ а тов в виде графиков и диаграмм . Image Processing Tool b ox представляет собой набор фун к- ций, расширяющих возможности MATLAB как числовой вычислител ь- ной среды. Содержит функции цифровой обработки и анализа изображ е- ний, импорта и экспорта графической информации, разработки лине й- ных фильтр ов, а также различные методы представления цветов, прео б- разования типов изображений. Optimization Tool b ox предназначен для решения линейных и нелинейных задач оптимизации. В его состав входят функции, реал и- зующие основные и специальные алгоритмы оптимизац ии. Класс задач вкл ю чает, например, минимаксные задачи, задачи о достижении цели, линейное и квадратичное программирование, миним и зацию нелинейных функций при наличии нелинейных ограничений. Partial Differential Equation Tool b ox позволяет р е- шать задачи ма тематической физики, описываемые уравнениями в час т- ных прои з водных, методом конечных элементов. В его состав входит приложение pdetool с графическим интерфейсом пользователя, вкл ю- чающее в себя набор функций, полезных при напис а нии собственных приложений дл я решения граничных задач методом конечных элеме н- тов. Среда pdetool позволяет задавать геометрию области, тип и коэ ф- фициенты дифференциального уравнения, граничные и начальные усл о- вия, производить разбиение области на конечные элементы (триангул я- цию), реша ть получающуюся систему линейных уравнений и визуализ и- ровать результат. Spline Tool b ox упрощает создание и работу с кусочно - полиномиальными функциями. Одним из основных назначений данного T oolbox является создание с последующим использованием и визуализ а- ци ей кусочно - полиномиальной аппроксим а ции. Symbolic Math Tool b ox . Символьные вычисления в MATLAB основаны на библиотеке, являющейся ядром пакета Maple . Решение уравнений и систем, интегр и рование и дифференцирование, вычисление пределов, разложение в ряд и с уммирование рядов, решение диффере н- циальных уравнений и систем – вот далеко не полный перечень возмо ж- ностей MATLAB для проведения аналитических выкладок и ра с четов. 
1.1. Структура сист емы MATLAB 9 Statistics Tool b ox содержит функции, охватывающие шир о- кий спектр ст а тистических задач и ре ализующие основные методы их решения. Virtual Reality Tool b ox позволяет соединить в иртуал ь ный мир, написанный при помощи языка VRML , с Simulink и MATLAB , взаимодействовать в реальном времени с моделями динамических си с- тем виртуальной реальности, расширяет возможности MATLAB и Sim u- link в области графики виртуальной реальности. На языке программир о- вания MATLAB описываются необходим ы е функции, при помощи Sim u- link и Stateflow создают ся модели в виде блок - схем и имитируется их р а- бота, язык VRML обеспечивает пос троение виртуальных миров и тре х- ме р ных сцен. Wavelet Tool b ox содержит набор функций, которые предоста в- ляют возможности анализа и синтеза сигналов и изображений, а та к же средства для использования вей в летов и вейвлет - пакетов. Предоста в ляет две категории мет одов работы: функции командной строки и графич е- ские интерактивные функции. Simulink предназначен для интерактивного моделирования и анализа функционирования линейных и нелинейных динамических си с- тем, работающих непрерывно или дискретно в определ яемые пром ежу т- ки времени. Оснащенный графическим интерфейсом пользователя и и с- черпывающей библиотекой компонентов Simulink предлагает постро е- ние моделей в виде блок - схем на основе использования Click & Drag оп е- раций с мышью. Модель можно построить с нуля или взять уже сущес т- вующую модель и доработать ее. Целью Simulink является предоставл е- ние пользователю возможности понять смысл и назначение моделиров а- ния и имитации процессов. В среде Simulink пользователь имеет во з- можность поставить вопрос, смоделировать его и посмот реть, что прои с- ходит при изменении значений параметров пр о цесса. Использование векторно - матричного представления данных, ма т- ричных вычислений, а также о снащение мощной графической сист е мой, средствами компьютерной алгебры от Maple , сервисными програ м мами д ля решения специальных классов задач привели к тому, что сег о дня MATLAB фактически является стандартным расчетным средством и и н- струментом для инженерных и технических разработок. Система MATLAB ориентирована на работу с реальными данными, поэтому в ы- полняе т все вычисления в арифметике с плавающей точкой. Сравнительная характеристика двух ведущих пакетов компьюте р- ной математики представлена в табл. 1.1. 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 10 Таблица 1 . 1 . Сравнительная характеристика математических пакетов Характеристика MATHEMATICA MATLAB Тип п акет а Символьны й Числов ой Точность вычи с- лений Не ограничена Ограничена разрядн о стью процессора Основной об ъ ект данных В ыражение М атрица Вычисления Целочисленная ари ф- м е тика Арифметика с плава ю щей точкой 1.2. Интерфейс пользователя Среда р азработки – э то набор инструментов и средств, которые помогают использовать функции и файлы MATLAB , а также поддерж и- вают связь MATLAB с пользователем и другими приложениями. Многие из этих инструментов являются графическими интерфейсами пользов а- теля. Среда р азработки включает в себ я р абочий с тол MATLAB Desktop , браузеры для просмотра справо ч ной системы Help , файл ов и поиск о в ого пут и Search Path . Интерфейс р абочего с тола MATLAB D esktop представляет собой графический интерфейс пользователя, состо ящий из следующих осно в- ных эл е ментов:  м еню , пункты которого автоматически перенастраиваются в зависим о- сти от того, какое окно р абоче й среды является в данный момент а к- тивным ;  п анели инструментов с кнопками и раскрывающимся списком ;  н еск ольких окон ;  к нопки Start , с помощью которой можно получить доступ к соде р- жимому рабочей среды, различным модулям Tool b ox , справо ч ной системе и демонстрац и онным программам ;  с троки состояния. К окнам MATLAB D esktop относятся :  к омандное о кно Command Window ;  о кно просмотра р абоче го п ространств а Work s pace B rowser ;  о кно т екущ его каталога Current Directory ; 
1.2. Интерфейс пользователя 11  о кно и стори и к оманд Command History ;  о кно р едактор а - о тладчик а M - файлов M - file Editor / Debu g ger ;  о кна для работы с графикой Figures . Рис. 1 . 1 . Пример внешнего вида рабочего стола MATLAB Desktop Помимо основных окон (рис. 1.1) в MATLAB существует ряд всп о- могательных окон, обеспечивающих пользователям более эффективную работу в MATLAB . Такими окнами являются: окно р е дактор а м ассивов Array Ed i tor , диалоговое окно установки путей Set Path , окно Launch Pad доступа к различным модулям Tool b ox , окно просмотра справочной си с темы Help Browser . 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 12 Окна рабочей среды самостоятельны, «склеены» между собой, м о- гут располагаться в в иде вкладок или в виде отдельных окон. Технология Drag & Dock позволяет полн о стью перенастраивать внешний вид MATLAB D esktop по желанию пользователя. Если в MATLAB D es k- top отсутствуют некоторые окна, то в меню Desktop сл е дует выбрать соответствующие пункты C ommand Window , Workspace , Current Directory , Command History , Launch Pad или выбрать пункт меню Desktop | Desktop Layout ► Default для восстановления н а строек интерфейса MATLAB D esktop по умолчанию. 1.2.1. Командное окно Командное о кно Command Window системы MAT LAB ис пользуе т- ся для работы в интерактивном режиме: ввода данных, создания пер е- менных, вызова функций , запуска команд и M - файлов и вывода резул ь- татов их выполнения по типу вопрос - ответ (рис. 1.2) . Вся видимая информация в окне Command Window располагается в двух принципиально разных зонах: зоне просмотра и зоне редактир о- вания. Рис. 1 . 2 . Окно Command Window В зоне просмотра ничего нельзя изменить. Любая попытка ввода с клавиатуры в этой зоне приведет к автомати ческо му перемещени ю ку р- сора , т. е. точки ввода в командную строку Input Line , расположе н- ную в зоне редактирования. В зоне просмотра можно выделять с пом о- 
1.2. Интерфейс пользователя 13 щью мыши любую информацию и копировать е е в б уфер обмена Cli p- board операционной системы Wi n dows . Зона р едактирования обычно занимает одну (последнюю) строку командного окна системы MATLAB, в которой обычно у казан знак пр и- глашения >> . Эта строка называется строкой ввода Input Line , или командной строкой. В вод любой команды или выражения осуществляе т- ся только в строке, помеченной символом >> . Чтобы MATLAB выпо л- нил введенную команду или вычислил выражение, необходимо нажать кл а вишу < Enter >. >> a = 1:6 a = 1 2 3 4 5 6 >> a(2) ans = 2 >> magic(4) ans = 8 1 6 3 5 7 4 9 2 >> run Untitled 1 . m >> [X, Y] = myfunc(x, y, z); >> x = - 2* pi : 0.01 : 2* pi ; >> plot ( x , sin ( x ), x , cos ( x )) Если вводимая информация не помещается в одн у строк у , то лог и- ческую строку можно разбить на несколько физических строк (рис. 1.3) . Рис. 1 . 3 . Ввод информации в командную строку 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 14 Для переноса ввода на следующ ую физическ ую строк у следует н а жать клавишу < Enter > только после ввода тр е х идущих подряд точек . В пр о тивном случае MATLAB воспримет нажат ие на клавишу < Enter > как оконч ание ввода команды и приступит к выполнению введенной ча с- ти команды. Однако и в случае размещения команды в нескольких стр о- ках зона редактирования относится только к самой после д ней строке ( в данной ситуации она не содержит знак приглашения >> ), а в предыд у- щих физических строках изменить уже ничего нельзя. Логическая стр о ка ввода может содержать не более 256 символов. MATLAB вычислит все в ы ражение или выполнит команду после нажатия на клавишу < Enter > в последней строке, не содержащей трех идущих подряд т о че к. В процессе работы в интерактивном режиме действия повторяются многократно: ввод и тся с клавиатуры нов ая информация , запускаются команды, выводятся пол у ченные данные. В результате в о кне Command Window производится скроллинг (пр о крутка) — все строки сдвиг аются на одну позицию вверх, так что самая верхняя строка покидает область видимости, а в самом низу окна появл я ется свободная строка для ввода нов ой информации . При помощи полос ы прокрутки ( Scrollbar ) мо ж- но осуществить просмотр невидимой в данный момент в окне информ а- ции. Можно также осуществлять прокрутку содержимого о кна Command Window с п о мощью клавиш клавиатуры < PageUp > , < PageDown > , < Ctrl+ Home > и < Ctrl + End > . Клавиши < ↑> и < ↓> в системе MATLAB работают иначе , чем в л ю- бом текстовом редакторе , где они осу ществляю т перемещение ку р сора вверх - вниз и прокрутку содержимого окна . В MATLAB вся информация, введенная с клавиатуры в течение сеанса работы, запоминается в спец и- альной области памяти, называемой стеком к о манд . Клавиши < ↑> и < ↓> позволяют вернуть в строк у ввода ранее введ е нные с клавиатуры команды . При этом самая последняя входная информация при е е пр о- крутке клавишей < ↑> появится первой. Затем появится предп о следняя команда и так далее. Клавиша < ↓> осуществляет прокрутку команд в о б- ратном напра в лении. Обр атите внимание  Ввод любой команды или выражения осуществляется только в строке, помече н ной символом >> приглашения командной строки. 
1.2. Интерфейс пользователя 15  Завершение ввода команды и передача управления MATLAB для ее выполнения происход я т по клавише < Enter > .  Для повторного занес ения в командную строку ранее введенной к о- манды или в ы ражения служат клавиши < ↑> и < ↓> .  Для перемещения по командной строке с выражением служат клав и ши < →> , < ←> , < Home > , < End >.  Если после перемещения по рабочей области окна Command Wi n dow пропала командн ая строка с мигающим курсором, то следует н а жать < Enter >. Командное о кн о Command Window можно очистить кома н дой >> clc однако это не повлияет на содержимо е р абочего п ространства Wor k- space . Действительно, если после очистки командного окна н а брать в команд ной строке имя ранее вычисленной переменной x , то после н а- жатия клавиши < E nter > в о кне Command Window появится е е знач е- ние: >> x x = 12 1.2.2. Окно просмотра рабочего пространства Все значения переменных, вычисленные в течение текущего сеанса работы систем ы MATLAB, сохраняются в специальной области памяти компьютера, называемой р а бочим п ространством Workspace . Рис. 1 . 4 . Окно WorkSpace browser Содержимое этой области можно просмотреть в окне Workspace Browser ( рис. 1.4) , вызвав его из меню Desktop | Workspace или 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 16 кнопкой Workspace Browser инструментальной панели . Окно Wor k space Browser обеспечивает просмотр и редактирование имен и значений находящихся в р абочем п ространстве Workspace переме н- ных, вывод массивов и нформации в виде графиков и диаграмм, а также предоставляет доступ к графическому интерфейсу Import Wizard для считывания данных из бинарных и текстовых файлов. Инструме н тальная п анель о кна Workspace Browser позволяет созда ва ть и удал я ть п е- ременные, сохран я ть и загру жать данные р абоче го п ространства Wor k- space . Рабочее п ространство Workspace – это множество реально сущ е- ствующих переменных. При работе с переменными необходимо след о- вать следующи м правила м :  Все есть массив. Двумерный массив – это матрица, одном ерный ма с- сив – это вектор - строка или вектор - столбец, скаляр – это матрица ра з- мером 1  1. Все массивы имеют размерность и валентность, кот о рые изменяются (увеличиваются или уменьшаются по мере необходим о- сти).  Переменные в MATLAB не нужно предварительно описы вать, указ ы- вая их тип и размерность. Все данные хранятся в виде массивов: ч и- словые переменные (вну т ренний тип numeric ), текстовые строки ( char ), ячейки ( cell ) и структуры ( struct ), при помощи которых создаются пользовательские объекты ( user object ).  Число вые массивы состоят из комплексных чисел с двойной точн о- стью (тип double ) и могут храниться в обычном (тип full ) или в уп а кованном виде в случае разреженной матрицы (тип spar s e ).  Существует несколько дополнительных форматов записи данных в файлы ( int 8 , uin t 8,…), отличающихся количеством использу е мых байтов на единицу инфо р мации.  Для представления чисел на экране используются различные форм а ты вывода .  Имя переменной должно начинаться с буквы, за ней могут идти бу к вы, цифры и символ подчеркивания. Допустимы и мена любой дл и ны, но MATLAB идентифицирует их по первым 31 символам и ра з личает верхний и нижний регистры.  В MATLAB имеется ряд зарезервированных имен констант , перечи с- ленных в т а б л . 2 . 2 .  Специальная переменная ans содержит результат последней выпо л- ненной операции, если во введенной команде отсутствует опер а ция 
1.2. Интерфейс пользователя 17 присваивания результата « = » . Переменную ans можно использовать в выражениях и командах >> 1+18 ans = 19 >> x = ans + 7 x = 26 >> x(2) = - 4 x = 26 - 4 >> x(1) = [] x = - 4 >> x = ‘This is MATLAB’ x = This is MATLAB >> Для просмотра значения любой переменной из р абочего п ространства Workspace достаточно набрать е е имя и нажать клавишу < Enter >. >> x x = This is MATLAB Команда >> who выведет список всех переменных, входящих на данный момент в р абоче е п ростра н ство Workspace , а команда >> whos вернет более подробную информацию о размере и типе переменных . Т аким о бразом , MATLAB автоматически сохраняет все полученные р е зультаты , а также все команды , выполненные в течение сеанса работы (даже если они вве дены с ошибкой) . Однако если объ е м запомненной информации станет слишком большим или уже не требуется хранить н е- которые переменные в данном сеансе работы, их можно стереть из пам я- ти компьютера командой clear . Чтобы очистить рабочее пространство, следует в ы звать команду >> clear Следующая команда удаляет из рабочего пространства Wor k- space переме н ные с именами name 1 и name 2 . >> clear name 1 1 name 2 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 18 По окончани и сеанса работы MATLAB все переменные, вычисле н- ные в течение сеанса, уничтожаются . Однако их можно с охранить в фа й- ле на диске при помощ и пунктов главн о го или всплывающего меню File | Save Workspace As … посредством стандартно го диалог о- во го окн а опер а ционной системы Windows для выбора каталога на диске и имени файла. Расширение имени сохраняемого файла дол жно быть mat . Такие файлы , предназначенные для хранения данных р абочего п р о- странства Workspace , н а зыва ются MAT - файлами. Вместо команды меню можно в о кне Command Window набрать одну из команд : >> save – сохранение в стандартный файл (по умолчанию matlab.mat ); >> save path \ File _ name – сохранение в указанный файл ; >> save path \ File _ name name 1 name 2 – сохранение отдельных переменных в указанный файл . Восстанавливается ранее сохран е нное на диске р абочее п ространс т- во Workspace командой меню File | Load Workspace … или File | Import Data … , после которой в стандартном диалоговом окне необходимо выбрать тр е буемый MAT - файл. В ыполнив эту команду несколько раз с разными файлами, мож но разместить в р абочем п ространстве Workspace результаты ряда пр е- дыдущих сеансов работы . При этом необходимо учитывать, что если имена переменных из разных M AT - файлов совпадают, то в Workspace будет находиться лишь переменная из MAT - файла , загруженного п о- следн им . Вместо команды меню можно набрать команду непосредственно в о кне Command Window >> load – загрузка данных из файла по умолчанию matlab.mat . >> load file _ name – загрузка из указанного файла . >> load f ile _ name name 1 name 2 – чтение отдельных переме н- ных из указанн ого файл а . При этом если имя файла указ ывается без полного пути доступа к не му, то он должен находиться в текущем каталоге Current Dire c- tory системы MATLAB . Полное имя текущего каталога можно узнать с пом о щью команды >> cd 
1.2. Интерфейс пользователя 19 1.2.3. Редактор м ассивов Графическое окно р едактор а м ассивов Array Editor предназн а- чено для просмотра и редактиро вания визуально предста в лен ных данных р абочего п ростра н ства Workspace (рис. 1.5) . Рис. 1 . 5 . Редактор массивов Array Editor Двойной щелчок по переменной , находящейся в Workspace Browser , открывает графическое окно Array Editor и создает з а- кладку в виде страницы блокнота с именем переменной внизу окна р е- дактора , содержащую всю инф ормацию о данной переменной. Встроенная панель инструментов позволяет сохранять, копировать, распечатывать данные, отображать их в вид е графиков и диаграмм. Всплывающее меню позволяет копировать данные из Array Editor и вставлять их в Command Window и наоборот. Также имеется возмо ж- ность копировать/вставлять ячейки в документы M i crosoft Excel . При этом не допускается рассогласования копир уемых данных по типу. 1.2.4. Текущий к аталог Файловые операции MATLAB используют т екущий к аталог Cu r- rent Directory и с писок п ут ей д оступа Search Path . Л ю бой файл, который пользователь хочет запустить, должен размещат ь ся или в каталоге, указанном в окне Current Directory , или в каталоге, ук а- занном в спи с ке путей доступа Search Path . 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 20 Для поиска, просмотра и изменения каталогов и файлов следует и с- пользовать о кно просмотра текущего каталога Current D i rectory browser (рис. 1.6) либо функции , выполняющие следующие дей ствия : >> dir – вывод содержимого текущего каталога; >> delete file_name – удаление указанного файла с диска; >> cd – вывод текущего каталога; >> cd < new path > – выбор другого текущего каталога. Рис. 1 . 6 . Окн о Current Directory Быстрый способ просмотра или изменения текущего каталога Cu r- rent Dire c tory состоит в использовании раскрывающегося списка Current Directory инструментальной панели р абочего с тола Desktop . MATLAB использует список путей доступа Search Pa th для н а- хождения M - файлов и других файлов, которые организованы в каталоги файловой системы ко м пьютера. Чтобы сделать доступной программу или функцию из какого - нибудь кат а лога, необходимо добавить путь к этому каталогу в список Search Path . Подк а талоги та кже должны быть явно добавлены в Search Path , даже если родительский кат а лог уже включен в список . 
1.2. Интерфейс пользователя 21 По умолчанию каталоги MATLAB , в которых находятся функции пакета и данные, и файлы, поставляемые с MATLAB и другими Mat h- Works продуктами, включены в список Search Path . Все они нах о- дятся в каталогах вида $ matlabroot / toolbox . Для того чтобы просмотреть, какие каталоги включены в список Search Path или изменить его, следует выбрать пункт меню File | Set Path , либо выбрать кнопк у Start | Desktop Tools ► Path ли бо ввести команду pathtool в окне Command Window и использ о- вать открывшееся диалог о вое окно Set Path (рис. 1.7). Рис. 1 . 7 . Диалоговое окно Set Path В этом окне показывается список всех зарегистрированных пут ей доступа. Либо следует задать команды в окне Command Window для выполнения сл е дующих действий: >> path – вывод списка путей доступа; >> path ( s ) – замена списка путей доступа списком s ; >> addpath / temp / dir – добавление нового каталога в список; >> path ( path , ‘/ temp / dir ’) – добавление нового каталога в список; 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 22 >> rmpath / temp / dir – удаление указанного пути из списка. После того, как новый каталог добавлен в список Search Path , в н е м можно с о хран я ть файл ы и в любой момент выполн я ть их. 1.2.5. История команд Ок но и стори и к оманд Command History (рис. 1.8) предназн а чено для просмотра и повторного вызова ранее введенных команд. Все кома н- ды, которые пользователь вводит в окне Command Window , автомат и- чески дублируются в о кн е Command History . Окно Command Hi s- tory соде ржит время и дату каждого сеанса работы с MATLAB . В этом окне можно просмотреть все ранее выполненные команды, удалить, ск о- пировать и выполнить выделенные команды в о кне Command Wi n dow либо оформить их в виде функции в M - файле в окне р едактора - отла д чика M - файлов M - file Editor / Debugger . Рис. 1 . 8 . Окно Command History Для активизации окна Command History необходимо выбрать вкладку с одноименным названием. Текущая команда в окне изображ а- ется на синем фоне. Если щ елкнуть на какой - либо команде в окне левой кнопкой мыши, то данная команда становится текущей. Для ее выполн е- 
1.2. Интерфейс пользователя 23 ния надо применить двойной щелчок мыши или выбрать строку с кома н- дой при помощи клавиш < ↑> , < ↓> и нажать клавишу < Enter >. Нену ж- ную команду можно уб рать из окна. Для этого надо сделать ее т е кущей и удалить при помощи клавиши < Delete >. Комбинация клавиш < Shift >+< ↑> , < Shift >+< ↓> позволяет выделить несколько подряд идущих команд. Если команды не идут одна за другой, то для их выдел е- ния следует использова ть левую кнопку мыши с одновременным уде р- живанием клавиши < Ctrl > . Выпо л нение или удаление группы команд происходит аналогично при помощи клавиш < Enter > и < Delete > с о- ответственно. При щелчке правой кнопки мыши по области окна Command Hi s- tory появляется вспл ывающее меню со следующими пунктами:  Copy – копирование отмеченной команды или группы команд в б у фер обмена Clipboard ;  Create M - file – копирование отмеченной команды или группы команд в M - file ;  Evaluate Selection – выполнение отмеченной команды или группы команд;  Delete Selection – удаление отмеченной команды или группы команд;  Delete to Selection – удаление всех команд до текущей;  Delete Entire History – удаление всех команд . 1.2.6. Редактор - отладчик M - файлов Работа из командной строки удобна только для выполне ния пр о- стых , недлинных команд . В остальных случаях предпочтительно созд а- ние M - файлов, т. е. программ и функций, содержащих нужную послед о- вател ь ность команд MATLAB . Для работы с M - файлами предназначен р еда к тор - о тладчик M - файлов M - File Editor / Debugger , котор ый в ыполняет все операции по созданию, редактированию, отладке и сохр а- нению M - файлов (рис. 1.9) . С его помощ ью можно создавать собстве н- ные функции и выз ы вать их, в том числе и из командной строки. Вызывается M - File Editor / Debugger либо через г лавное м е- ню F ile | New ► M - file , File | Open … , либо с помощью фун к ций о кна Command Window >> edit >> edit M - file _ name 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 24 Встроенное меню и панель инструментов позволя ю т оперативно вводить, редактир о вать и запускать и отлаживать код программы. Рис . 1 . 9 . Редактор M - file Editor/Debugger Наберите в редакторе команды, строящие графики двух функций в одной системе координат графического окна. >> X= - pi:0.01:2*pi; % значение аргумента функций Y=sin(X); % значение функции sin Y(2,:)=cos(X); % значение функции cos plot(X,Y) % вывод графика Сохраните файл с именем demofile . m в текущем каталоге MATLAB , выбрав пункт меню File | Save As … редактора. Для з а- пуска на выполнение всех команд, содержащихся в файле, следуе т в ы- брать пункт мен ю Debug | Run или нажать клавишу < F 5 > на клави а- туре. В окне WorkSpace появятся две переменные X и Y , а на экране откроется окно Figure , содержащее графики указанных фун к ций. Команды M - файла осуществляют вывод результатов в о кно Co m- mand Window . Для подавления вывода следует завершать команды то ч- кой с запятой. Если в набранном коде есть ошибка, то происходит выполнение к о- манд до первой неправильно введенной команды , после чего в окне Command Window выводится сообщение об ошибке. 
1.2. Интерфейс пользователя 25 При после дующем редактировании кода программы необходимо перед запуском программы сохранить внесенные изменения в файле, в ы- брав команду File | Save . В MATLAB имеется возможность выполнения только части команд кода. Для этого н еобходимо выделить группу команд и выпо лнить их из пункта меню Text | Evaluate Selection окна редактора , из пункта Evaluate Selection всплывающего меню или клавиш ей < F 9> на клавиатуре . Комментарий в MATLAB начинается с символа % , автоматически выделя е тся зеленым цветом и распространя е тся до кон ца текущей стр о ки. В редакторе M - файлов может быть одновременно открыто нескол ь- ко файлов. Переход между файлами осуществляется при помощи закл а- док с именами файлов, расп о ложенных внизу окна редактора. 1.2.7. Окна для работы с графикой В MAT L AB встроена мощ ная графическая поддержка, обеспеч и- вающая возможности визуализации 2 D - и 3 D - данных при помощи о кон для работы с графикой Figure (рис. 1.10) . Высокоуровневые графич е- ские функции обеспечивают быстрое получение качественных результ а- тов. Полный доступ к измене нию свойств отображаемых графиков дают низк о уровневые функции, или так называемая дескрипторная графика. Окно Figure , обладающ ее собственным меню и панелью инструме н- тов, помогает офо р мить результаты: добавить заголовки, поясняющие надписи, легенды, задать цвета , стиль линий и поверхностей. MATLAB предоставляет следующие возможности работы с н е- сколькими графиками:  в ывод каждого графика в отдельное окно Figure ;  в ывод нескольких графиков в одно окно в одни координатные оси;  в ывод в пределах одного окна несколь ких графиков, каждого в своих осях. Для создания нового пустого окна Figure и отображения его на экране сл у жит команда >> figure Окно Figure № 1 становится текущим, т. е. все последующие граф и- ческие функции будут осуществлять построение графиков в этом о кне. Повторное использование команды figure приведет к появлению нов о- 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 26 го графического окна Figure № 2 , которое теперь становится тек у- щим. Все последующие команды будут осуществлять вывод графиков в окне Figure № 2 . Для того чтобы снова сделать текущим окно Fi g- ure № 1 , необходимо щелкнуть на нем мышкой. В системе MATLAB нет ограничений на количество создаваемых окон. Рис. 1 . 10 . Окно д ля работы с графикой Figure 
1.2. Интерфейс пользователя 27 1.2.8. Окно просмотра справочной системы Окно просмотр а справочной системы Help Browser помогает найти документацию, демонстрационные примеры (рис. 1.11) . Чтобы о т- крыть окно Help Browser , необходимо нажать на кнопку «?» на п а- нели инструментов или ввести в окне Command Window одну из к о- манд >> helpbrowser или doc Справочная система на английском языке содержит описание стру к- туры и возмо ж ностей MATLAB , встроенных функций и многочисленные примеры их использов а ния. Ссылочная структура позволяет переходить к разделам, относящимся к рассма т риваемому вопросу. Рис. 1 . 11 . Окно просмотра справочной системы Help Browser Информацию о командах, операторах и функциях MATLAB можно получить из окна Command Window . Для этого в командной строке сл е- дует набрать команду help , передав в качестве аргумента имя изуча е- мой функции, например: 
Т е м а 1 . НАЗНАЧ Е НИЕ И СТРУКТУРА MATLAB 28 >> help for – получить справку об операторе цикла for ; >> help format – получить справку о форматах вывода да н ных . 1.2.9. Кнопка Start и окно Launch Pad Кнопка Start и окно Launch Pad обеспечивают легкий доступ к структуре системы, различным модулям Tool b ox es , демонстрац и- онным примерам, справочной системе и документации. 1.3. Взаимодействие с другими п риложениями Программный интерфейс приложения ( API ) реализует связь среды MATLAB с пр и ложениями, написанным и на других языках. Существует несколько способов взаимодействия системы MATLAB с другими п р и- ложениями . В се способы опис а ны в документации к системе.  Библиотека программного интерфейса позволяет вызывать модули, написанные на С или Fortran , из среды или пр ограмм MATLAB .  Ядро MATLAB может выступать в роли вычислительн ого серв е р а для внешне го прил о жения .  С о средой MATLAB можно обмениваться данными ч е рез MAT - файлы.  С редой MATLAB можно управлять при помощи DDE ( Dynamic Data E x change ) или COM - технологии . П ре доставляемый набор способов взаимодействия с внешни ми пр и- ложе ниями является весьма полным и гибким. В MATLAB предусмотрена возможность запуска внешних пр ил о- жений из окн а Command Window . >> ! notepad info . txt – запуск текстово го редактор а «Блокнот» . >> ! msp aint picture . bmp – запуск графическо го редактор а « MS Paint » . >> ! calc – запуск приложения «Калькулятор» . >> ! excel.exe & – запуск приложения Excel . Знак « ! » указывает, что остаток строки ввода Input Line является командой для операционной системы. Знак « & » на платформе Windows запускает пр и ложение в отдельном окне или в фоновом режиме. 
ТЕМА 2 ДАННЫЕ И ВЫЧИСЛЕНИЯ Язык MATLAB – это высок о уровневый язык матриц и массивов с операторами управления, функциями, структурами данных, вв о дом - выводом и возможностями об ъектно - ориентированного программиров а- ния. Это позволяет создавать широкий диапазон программ: от небол ь- ших тестовых программ до сложны х прикладны х программ , оснаще н ных графическим интерфейсом пользователя . Изначально MATLAB был реализован на языке Fortran . С овреме н- ные версии пишутся на языке C . Я зык MATLAB конструкциями и си н- такс и сом напоминает эти языки . 2.1. Арифметические вычисления Встроенные функции MATLAB позволяют находить значения ра з- личных выраж е ний. Команды для вычисления выражений имеют вид, свойст венный всем языкам пр о граммирования высокого уровня. Обратите внимание  Операторы имеют две формы записи . При записи оператора с нея в ным присваиванием вида x + y р езультат присваивается автоматич е ски создаваемой системой переменной с именем ans ( ANSwer ). В п е- ременной ans сохраняется только результат выполнения последн е го оператора с неявным присваиван и ем.  При записи оператора с явным присваиванием вида a = x + y р езул ь- тат присваивается переменной, стоящей слева от знака равенс т ва.  Если после выражения не стоит точка с запятой, то результат опер а ции выводится на экран в командное окно. Точка с запятой в конце любой команды подавл я ет вывод результатов на экран.  Переменные с результатом выполнения любого арифметического де й- ствия ра з мещаются в рабочем прост р анстве. 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 30 2.1.1. Простейшие вычисления Для выполнения элементарных вычислений в MATLAB необход и мо набрать выражение в командной строке окна Command Window и н а- жать клавишу < Enter > : >> (32 + 5) * 4 – (23 + 3^4) ans = 44 MATLAB вычислит выражение, запишет результат в спе циал ь ную переменную ans , выведет ее значение в окно Command Wi n dow и перейдет в режим ожидания ввода следующей команды. Если требуется продолжить работу с только что полученным результ а том, то следует воспользоваться значением переменной ans . Для этого в к омандной строке следует набрать >> ans /1.1 + pi ans = 43.1416 Арифметические операции в MATLAB выполняются в обычном п о- рядке, свойственном большинс т ву языков программирования:  в озведение в степень ^ ;  у множение и деление * , / ;  с ложение и вычитание + , – . Дл я изменения порядка выполнения арифметических операций ис пол ь- зуются кру г лые скобки. При вычислениях возможны некоторые исключительные ситу а ции, например дел е ние на н у ль. При делении положительного числа на н у ль получается Inf (бесконе ч ность), при делении о трицательного числа на н у ль получается – Inf (минус беск о нечность), при делении нуля на н у ль получается NaN ( Not - a - Number – не число). Во всех случаях выдается предупреждение об ошибке “ Warning : D i vide by zero ”. 2.1.2. Форматы представления данных Вид, в котором выводится результат вычислений, зависит от форм а- та вывода, установленного в MATLAB . Для установки требуемого фо р- мата следует выбрать пункт меню File | Preferences … На экране появится диалоговое окно Preferences (рис. 2.1) , в котором следует выбрать пункт Command Window . Задание формата производится из ра с крывающегося списка Numeric Format панели Text display . 
2.1. Арифметические вычисления 31 Во з можен вывод результатов в коротком ( short – с четырьмя знаками после десятичной точки) или длинном ( long – с четырнадцатью знак а- ми после десятично й точки) формате с плавающей точкой, в экспоненц и- альной форме ( short e , long e ), шестнадцатеричном виде ( hex ). Рис. 2 . 1 . Диалоговое окно Preferences Обратите внимание  Выбранный формат вывода сохраняется для в сех последующих в ы- числений до переустановки другого формата.  Формат вывода действует только при отображении данных. Все пр о- межуточные вычисления MATLAB производит с двойной точн о стью независимо от того, какой формат вывода устано в лен.  Если при отображении слишком большого или малого числа резул ь тат не укладывается в уст а новленный формат short , то результат будет выведен в экспоненциальной форме. При этом первоначальная уст а- новка формата short сохраняется, и при дальнейших вычисл е ниях вывод результатов буде т происх о дить в формате short .  При вводе десятичных дробей используется точка. 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 32 Задавать формат вывода можно непосредственно из командной строки командой format : >> format long e Информацию о форматах можно получить, набрав в командной стр о ке команду >> he lp format 2.1.3. Комплексные числа При вызове команды sqrt ( - 1) MATLAB автоматически перех о- дит в область комплексных чисел. При вводе комплексных чисел испол ь- з уется символ i либо j , а сами числа при умножении, делении и во з- ведении в степень необходимо заключать в круглые скобки. Для вычи с- ления комплексно - спряженного числа применяе т ся апостроф, который следует набирать сразу за числом, без пробела. Е с ли необходимо найти выражение, комплексно - сопряженное данному в ы ражению , то исходное выражение должно быть заключено в круглые скобки. В MATLAB во з- можно использова ние комплексн ых чис е л в качестве аргументов встр о- енных элементарных фун к ций . >> sqrt( - 1.0)*(2.+3i)*3 - (7 – 1.5j)^2+ ... (1+5i+ 3+2i’)’+sin(3i) ans = - 51.7500 +34.0179i 2.1.4. Встроенные математические функции Встроен ные элементарные м а тематические функции MATLAB включают тригонометрические ( Trigonometric ), гиперболич е ские ( Hyperbolic ), экспоненциальные ( Exponential ), логари ф мические ( Logarithmic ) функции , функции для работы с комплексными числ а- ми ( Complex ), а также фу нкции для округления разли ч ными способами ( Rounding and Remainder ). Помимо эл е ментарных в MATLAB встроены специальные математические функции (функции Бесселя, п о- линомы Л е жандра, гамма - функции и т. д.). Обратите внимание  Имена функций набираются строчными буквами. 
2.2. Типы данных 33  Аргументы функций заключаются в круглые скобки и разделяются з а- пятой.  Для вывода в командное окно списка всех встроенных элеме н тарных функций с их кратким описанием необходимо в командной строке н а- брать команду help elfun .  Для вывода в командное окно списка всех встроенных спец и альных математ и ческих функций (функции Бесселя, полиномы Лежандра, Гамма функции и т. д.) с их кратким описанием необходимо в коман д- ной строке набрать команду help specfun . 2.2. Типы данных Основным объектом MATLAB является ма ссив, для которого не требуется указывать размерность явно. Это позволяет решать многие в ы- числительные задачи, связанные с векторно - матричными формулиро в- ками. Система MATLAB ориентирована на работу с реальными данн ы ми, поэтому выполняет все вычи с ления в ар ифметике с плавающей точкой. В MATLAB различают 15 фундаментальных типов данных, каждый из которых является тем или иным видом массива. Минимальная разме р- ность массива 0  0 и может увеличиваться до требуемого значения . Принадлежность того или иного объекта системы MATLAB к одн о- му из классов представлена сх е мой на рис. 2. 2 . Обратите внимание  Все данные MATLAB являются массивами .  Данные не надо описывать явно .  По умолчанию все числовые переменные считаются матрицами с ко м- плексн ы ми числами .  Вычисления выполняют ся с удвоенной точностью, поэтому больши н- ство функций работают с массивами чисел удвоенной точности ( do u ble ), а также со строками ( char ) .  MATLAB использует целые чи с ла для индексирования; а также для работы с графикой .  Индексы начинаются с 1 .  Тип sparse пр едназначен для работы с разреженными матр и цами .  Нельзя задать переменную типа array или numeric – они явл я- ются вирт у альными . 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 34  Типы int *, uint * предназначены для обработки изобр а жений и эффективного хранения данных в памяти. К данным этих типов мо ж но применя ть базовые операции индексации и измен е ния размеров. Рис. 2 . 2 . Иерархия классов данных MATLAB Тип данных uint8 ( короткое целое ) специально предназн а чен для компактного хранения боль ших массивов целых чисел, что часто и с- пользуется при работе с графикой . С этим типом данных можно прои з- водить элементарные математические вычисления (сложение, вычит а- ние, умножение, деление, возведение в степень). Но его нельзя использ о- вать в качестве аргу ментов функций. В этом сл у чае сначала тип данных uint8 приводят явно к типу double , производят вычисления с пом о- щью функций и возвращаются к типу uint8 для дальнейшего хран е- ния. Два типа данных MATLAB – структуры и массивы ячеек – позв о- ляют хранить разли ч ные по типу данные в одном и том же массиве. Язык MATLAB позволяет пользователю создавать собственные т и- пы данных – объектно - ориентированные классы UserO b ject и классы Java – и работать с ними по аналогии со встроенными типами. Б олее детально типы данных о писыва ются в табл . 2.1 . logical 1 - true, 0 - false char ( текст) NUMERIC ( числовые ) cell ( клетки) struct ( структ у ры) ARRAY ( ма с сив) full или sparse double uint8, int8, uint16, int 16, uint32, int32, uint6 4 , int64 single function ha n dle Java classes User classes 
2. 2. Типы данных 35 Таблица 2 . 1 . Типы данных MATLA B Тип да н ных Описание logical Логический массив. С одерж ит только логическую 1 (и с- тина) и логический 0 (ложь). Отличные от нуля велич и- ны при преобразован ии в логический тип дают 1 . Лог и- ческие матрицы (только 2 - мерные) могут быть разр е- женными. char Символьный массив (каждый символ длиной 16 бит). Рассматрив а ется как текстовая строка. int8, uint8, int16, uint16, int32, uint32, int64, uint64 Знаковы й и без знака массив целых чисел длиной 8, 16, 32 и 64 бита для э ф фективно й работ ы с памятью. Н е может применяться в математических опер а циях. single Числовой массив обычной точности. И меет меньшую точность и меньший диапазон значений , но при этом требует для хр анения мен ь ший объ е м памяти. Н е может использоваться в математических оп е рациях. double Числовой массив двойной точности. С амый распр о- стран е нный в MATLAB тип данных. Матриц а дво й ной точности (только 2 - мерные) мо же т быть разреже н н ой . cell Массив ячеек. Эл ементами являются массивы, прич е м их типы и размерности могут между собой ра з личаться. Может содержат ь не связанную между собой информ а- цию. struct Массив структур. Характеризуется наличием полей. С о- держит связанную между собой информ а цию. function ha n dle Дескриптор функции. Может перед а ваться как аргумент другим функциям или испол ь зоваться для вычислений при помощи фун к ции feval . user class Определенный пользователем класс , созда ваемый при помощи функций MATLAB . java class Класс Java . Пользователь може т использ о вать классы, уже определенные в программном интерфейсе прил о- жения Java ( Java API ) или создавать собственные кла с- сы на языке Java . 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 36 Выражения и команды в MATLAB записываются с помощью ра з- личных зарезервированных слов и специальных символов (см. т а б л . 2.2) . С пециальные символы могут иметь различные назначения в зависим о сти от контекста их и с пользования. Таблица 2 . 2 . Зарезервированные имена и специальные символы MATLAB Имя/Си м вол Описание ans Результа т выполнения последней операции с неявным присваиван и ем inf Бесконечность NaN Нечисловое значение end Последний элемент матрицы, наибольшее значение индекса размерн о сти массива pi Число π i, j Мнимая единица ко м плексного числа eps Машинная точность realmax Максимальное вещес т венное число realmin Минимальное вещес т венное число [] 1) Формирование ве к торов и матриц . 2) Удаление элемента матрицы . 3) Указание последовательности выходных параме т- ров функции () 1) Порядок выполнения арифметич е ских операций . 2) Указание индексов элементов вектора, матрицы . 3) Указание последовательности входных параме т- ров функции = Присваивание в выр а жениях ‘ 1) Т ранспонирование векторов и матриц . 2) У казатель на символьную строку. Для включения самого апострофа в символьную строку необход и- мо по ставить два апостр о фа подряд . 1) Д есятичная точка . 2) П оэлементное выполнение операций над массивом да н ных ( .* , .^ , ./ , . \ ) .. Переход по дереву каталогов на один ур о вень вверх … Признак продолжени я выражения на другой строке 
2. 2. Типы данных 37 Имя/Си м вол Описание , (,) [,] 1) О тделение опер а торов языка MATLAB . 2) О тделение индексов элемента вект о ра, матрицы . 3) О тделени е элеме н тов строки матрицы Пробел служит для разделения элементов строки ма т- риц ; [;] 1) П одавление вывода в командное окно результатов вычи с лений . 2) О тделение строк матрицы : [:] 1) П ри форми ровании векторов (для указания диап а- зона – интервала измен е ния величины) . 2) В заголовке цикла for % Комментарий ! Указатель ввода кома н ды DOS 2.2.1. Переменные в MATLAB Как и во всех языках программирования, в MATLAB предусмо т рена возможность работы с переменн ыми. Но к отличительным ос о бенностям MATLAB относится то, что по умолчанию все числовые п е ременные в MATLAB считаются массивами с комплексными числами двойной то ч- ности (тип double ). В MATLAB нет необходимости в определении т и- па переменных и их размерности. Когда MATLAB встречает новое имя переменной, он автоматически создает переменную и выделяет соотве т- ствующий объем памяти. Если пер е менная уже существует, MATLAB изменяет ее и при необходимости выделяет дополнительную п а мять. В процессе использования масси ва его размерность может быть измен е на (увеличена или уменьшена). Для того чтобы объявить переменную S и определить ее зн а чение, достаточно в к о мандной строке ввести: >> S = 12.47 S = 12.47 MATLAB создаст для скалярной величины переменную в виде двуме р- но го массива S размером 1  1 , определит ее тип double , присвоит указанное значение и выведет р е зультат в окно Command Window (в MATLAB предусмотрена возможность завершения оператора присва и- 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 38 вания точкой с запятой для подавления вывода результата в окно Co m- mand Window ). Если применить функцию определения размера переменной к ск а- ляру S , то видно, что система MATLAB трактует даже скалярные вел и- чины как массивы с размером 1  1 . >> size ( S ) ans = 1 1 MATLAB переходит от скаляров к массивам прозрачно, не требуя от п ользователя дополнительных де й ствий. Имя переменной должно начинаться с буквы, за ней могут идти б у- квы, цифры и символ подчерк и вания. Допустимы имена любой длины, но MATLAB идентифицирует их по первым 31 символам и ра з личает верхний и нижний регистры. MATL AB запоминает значения всех переменных, определенных во время сеанса работы. Если возникла необходимость вывести информ а- цию о какой - либо переменной, сл е дует выполнить одну из следующих операций или команд:  В командной строке ввести имя переменной и нажать < Enter >. В окне Command Window распечатается соде р жимое переменной.  Команда who возвращает в окне Command Window список всех переме н ных, содержащихся в WorkSpace .  Команда whos возвращает список всех переменных, соде р жащихся в WorkSpace , с указанием их разм ерности, количества байт в пам я ти и класса (т и па) .  Команда class ( obj ) во з вращает класс объекта obj .  Команда isa ( obj , ’ class _ name ’) возвращает 1, если объект obj принадлежит классу class _ name или пр о изводному от него, и 0 в проти в ном случае. 2.3. Массивы 2.3.1. Типы массивов Наборы упорядоченных, пр о нумерованных однородных данных в программировании называ ют массивами . Всему массиву присваивае т ся одно имя, а доступ к отдельным элементам массива осущес т вляется по целочисленному индексу, т . е . по номеру элемента в массив е. Массивы 
2.3. Массивы 39 характеризуются понятиями размерности и валентности. В а лентность – это число размерностей или измерений, т. е. количество индексов у п е- ременной. Массивы бывают одномерными , когда используется единс т- венный индекс (номер), а могут быть и многомерн ыми (в частности , двумерными). Размером массива называют число элементов вдоль ка ж- дого из измерений ( см. табл . 2.3) . В системе MATLAB массивы являются основными объектами , над которыми выполняются действия . В MATLAB возможно использование  о дномерных массив ов – вект о ров;  д вумерных массивов – матриц;  м ногомерных массивов – тенз о ров. Система MATLAB отличает векторы, матрицы и тензоры, при этом центральным объектом являются матрицы. Следует помнить , что ве к тор, матрица или тензор являются математическими объек тами, а одноме р- ные, двумерные или многомерные массивы представляют способ ы хр а- нения этих объектов в памяти ко м пьютера. Таблица 2 . 3 . Размерность и вален т ность массивов Объект Размерность Валентность Доступ к элементу Индексы Вектор N 1 V i i = 1  n Матрица N row  N col 2 M r , c r = 1  N r , c = 1  N c Тензор N row  N col  . . .  N page ≥ 3 T r , c ,… p r = 1  N r , c = 1  N c , p = 1  N p Обратите внимание  Векторы, как правило, испол ь зуются для циклов и индексов.  Вектор может быть представлен столбцом (вектор - столбец) или стр о- кой (ве к тор - строка).  Доступ к элементам массива происходит либо по одному индексу (п о- рядковому номеру эл е мента), либо при помощи группы индексов. В последнем случае пе р вый индекс – номер строки, второй – номер столбца, все о с тальные – номера страниц.  Индексация начинается с 1. 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 40  Тензор – это много матриц.  Элементы любого массива уп о рядочены по столбцам. Элементы любого массива хранятся в памяти упорядоченными по стол б цам (рис. 2.3) . Р ис. 2 . 3 . Расположение элементов массива в памяти 2.3.2. Работа с массивами Создавать массивы в MATLAB можно несколькими способами:  в водить полный список элементов с помощью операции конкатен а ции [] ;  в водить поэлемен тно все значения с помощью операции инде к сации () ;  и спользовать операцию формирования диапазона значений : в сл у- чае создания вектор - строки, каждый элемент которой отличается от предшествующего на постоянную в е личину, т. е. шаг ;  п рисваивать значение самому последнему элементу массива ;  и спользовать встроенные фун к ции генерации матриц. Для работы с массивами предназначены две специальные опер а ции: операция конкатенации [] и операция индексации () . Для операции конкатенации ( concatenation ) в качестве раздел и- те лей элементов и с пользуются запятые , пробелы либо точки с запятой. П ри использовании запятых или пробелов выполняется горизо н тальн ая конкатен а ци я или конкатенаци я вдоль строк, а при применении точки с Последний элемент С тр о ки С тол б цы С траницы T r, c, p r = 1:11 c = 1:4 p = 1:3 
2.4. Векторы 41 запятой – вертикальн ая конкатенаци я или конкатенаци я вдо ль столбцов. Например, опер а ция >> C = [ A1 , A2 ] из двух матриц A1 и A2 , у которых должно быть одинаковым число строк, создает матрицу C с числом столбцов, равным сумме столбцов ма т риц - слагаемых. Операция >> C = [ A1 ; A2 ] соединяет матрицы A1 и A2 в ертикально, создавая матрицу C , у к о- торой число строк будет равно сумме числа строк матриц A1 и A2 . В случае разного числа столбцов у A1 и A2 появится сообщ е ние об ошибке : “ ??? Error using => vertcat . All rows in the bracketed expression must have the same number of co l umns ” . Операция конкатенации является групповой операцией, позволя ю- щей компактно выразить большой объ е м действий. В проти в ном случае пришлось бы задавать большое количество присваиваний значений о т- дельным элементам массивов. Операндами операц ии конкатенации м о- гут служить числа, вектор - строки, вектор - столбцы, ма т рицы, а также массивы ещ е большей разме р ности. В операции индексации прим е няется единственный разделитель – запятая. Она отделяет друг от друга индексы, соответствующие ра з ным направлен иям группировки элементов массива ( вдоль строк и вдоль столбцов – для двумерных массивов ). Существует ещ е одна групповая операция, применяемая к масс и вам. Это операция формирования диапазона значений , обозначаемая двое - т о чием . Использование по нятия пустог о массива , которое обознач а ется как [] , справа от знака присваивания позволяет удалить элемент, группу элементов, строку или группу строк, столбец или группу столбцов. С л е- дующая операция выполнит удал е ние из массива A 1 второй строки >> A1(2 ,:) = [ ] 2.4. В екто ры Одномерные массивы – это л и нейные наборы чисел (элементов), в которых позиция каждого элемента зада е тся единственным числом – его номером. 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 42 MATLAB распозна е т геометрию вектора и наглядно отображ а ет его, располагая элементы для показа в сво е м окне вертик ально в случае ве к- тор - столбца и горизо н тально – для вектор - строки. 2.4.1. Вектор - строки Для задания одномерного массива, состоящего из нескольких ч и сел (вещественных или комплексных), используется операция конк а тенации , обозначаемая с помощью квадратных скобок [] . Например, выр а жение >> v1 = [ 1 0 3 5 - 12] формирует переменную с именем, являющуюся одномерным массивом из пяти элементов (вещественных чисел). Объединяемые в массив эл е- менты должны отделяться друг от друга либо пробелом, либо зап я той. Т аким образом , выражение >> v1 = [1, 0, 3, 5, - 12] идентично предыдущ е му. Одним из способов задания вектор - строки является поэлемен т ное определение ее элементов . Сл е дующий код >> b(1)=1; b(2)=3; b(3)= - 5; b(4)=2 создаст вектор b =[1 3 - 5 2] . В MATLAB предусмотрено создан ие векторов при помощи опер а- ции формирования диапазона значений , когда каждый элемент отличае т- ся от предшествующего на постоянную величину, т. е. шаг. Для ввода таких вект о ров служит специальный символ «двоеточие». В общем виде можно з а писать V = [начальн ое значение : шаг : конечное знач е ние] Необязательно следить за тем, чтобы последнее значение равнялось к о- нечному значению. Вектор - строка заполнится до элемента, не превосх о- дящего конечного знач е ния. Шаг может быть и отрицательным, в этом случае начальное значение должно быть больше конечного. Если ш аг р а- в е н 1, то его можно не указывать. Например, допустимы следующие в а- рианты з а дания вектор - строк: >> V =1:2:10 – вектор V =[1 3 5 7 9] ; >> V = [ 1:5] – вектор V =[1 2 3 4 5] – шаг равен 1; >> V =[2.1: - 0.3:1.1] – вект ор V =[2.1 1.8 1.5 1.2] ; 
2.4. Векторы 43 >> V =1:5:2 – вектор из одного элемента V =[1] . При этом начальное значение всегда присутствует в созданном вект о ре, а конечного значения м о жет и не быть. Самы й прост ой способ создания вектор - строки нужного размера с о- стоит в присваива нии значения его самому последнему элеме н ту: >> v 3(4) = 9 – вектор v 3=[0 0 0 9] . Из нескольких вектор - строк можно составить одну строку, используя операцию конкатенации [] и разделяя исходные вектор - строки зап я той или пробелом . >> V =[ v 1 v 3] – вектор V =[1 0 3 5 - 12 0 0 0 9] из дев я ти элементов. Для доступа к отдельному эл е менту одномерного массива следует после его имени указать в круглых скобках индекс (номер) этого элеме н- та. Например, первый элемент массива v1 обозначается как v1(1) , второй элемент – как v 1(2) и т. д. Команда v 1( end ) позволяет п о- лучить доступ к п о следнему элементу массива. Если требуется изменить третий элемент уже сформированного в ы ше операцией конкатенации массива v1 , то следует применить оператор присваивания вместе с оп е- рац и ей индексаци и >> v 1(3) = 17 Присваивание v 1(3:5) = 3 эквивалентно последовательности к о манд v 1(3) = 3; v 1(4) = 3; v 1(5) = 3 . Попытка чтения несуществующего элемента, например восьмого элемента массива v 1 , прив о д и т к поя в лению в командном окне MATLAB сообщения об ошиб ке. В этом сообщении утверждается, что индекс пр е высил размер массива: >> v 1(8) ??? Index exceeds matrix dimensions . Однако попытка записи несущес т вующего элемента будет выполнена успешно. В этом случае MATLAB увеличит длину вектор - строки и з а- полнит все пр омежуточные элеме н ты нулями: >> v 1(8) = 6 – удлинит исходный вектор до восьми элементов: v 1=[1 0 17 3 3 0 0 6] . То же самое действие – удлинение массива – можно выполнить и с п о- мощью оп е рации конкатенации : >> v 1(6) = [ v 1 7 - 4] 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 44 Здесь операндами операции кон катенации являются массив, состо я щий из восьми элементов, и доба в ляемые к нему два элемента, равные 7 и – 4. Для удаления элемента или группы элементов из вектор - строки сл е- дует применить операцию [] : >> v 1(6) = [] – удаляет из указанного вектора ше с той элем ент: v 1=[1 0 17 3 3 0 6 7 - 4] ; >> v 1([1 4 5]) = [] – удаляет первый, четвертый и пятый эл е- менты вектора: v 1=[0 17 0 6 7 - 4] . Массивы могут состоять не только из вещественных чисел. Выр а- жение >> v4 = [1+7i, - 2+9i, 11 - 4i ] формирует одномерный массив v 4 ком плексных чисел. Разделителем элементов формируемого одномерного массива может быть либо пр о бел, либо запятая. При использовании выражений и комплексных чисел и с- пользование запятой предпочт и тельнее. Примером задания вектора при помощи встроенных функций MAT LAB являются команды linspace и logspace . Они созда ют векторы , значения которых из меняю т ся соответственно в арифметич е- ской и геометрической прогрессиях. Три параметра команды li n space задают соответственно первый и последний члены арифметической пр о- гре с сии , а также число членов: >> linspace (1, 2, 5) ans =1 1.25 1.5 1.75 2 Три параметра команды linspace задают соответственно десятичные порядки первого и последнего чл е нов геометрической прогрессии, а также число членов: >> logspace ( - 1, 2, 5) ans =0.1 0.56234 3.1623 17.783 100 Количество элементов, валентность и размер вектора можно у з нать при помощи встроенных функций: length – количество элеме н тов, ndims – валентность, size – размер вдоль каждого из измерений >> length(v1) ans = 6 >> ndims(v1) ans = 2 >> size ( v 1) 
2.4. Векторы 45 ans = 1 6 Т аким образом , вектор v 1 хранится в двумерном массиве v 1 разме р- ностью 1  6 (одна строка и шесть стол б цов). 2.4.2. Вектор - столбцы Для задания вектор - столбца, состоящего из нескольких чисел (вещ е- ственных или комплексных), использ уется операция конкатен а ции . При этом элементы следует разделять точкой с запятой. Например, выраж е- ние >> s1 = [ 1; 3; - 12] s 1 = 1 3 - 12 формирует переменную с именем s1 , являющуюся одномерным масс и- вом из трех строк и одного стол б ца. В случае поэлемен тного опр е деления вектор - столбца необходимо для каждого эл е мента указывать два индекса: >> b(1,1)=1; b(2,1)=3; b(3,1)= - 5; b(4,1)=2 – создаст ве к- тор - столбец b =[1 ; 3; - 5; 2] . Из нескольких вектор - столбцов можно составить один столбец, и с- пользуя операцию конк атенации [] и разделяя исходные вектор - столбцы точкой с запятой: >> S =[ s 1; s 1] – продублирует вектор s 1 и создаст столбец из шести элеме н тов. Так же, как и для вектор - строки, количество элементов, в а лентность и размер вектор - столбца можно узнать при помощ и встроенных фун к- ций: >> length(s1) ans = 3 >> ndims(s1) ans = 2 >> size ( s 1) ans = 3 1 Т аким образом , вектор s 1 хранится в двумерном массиве s 1 размерн о- стью 3  1 (три строки и один столбец). 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 46 2.4.3. Поэлементные операции с векторами Все поэлементные оп ерации применимы как к вектор - строкам, так и ве к тор - столбцам. Рассмотрим действие этих операций на примере дв ух вектор ов >> v 1 = [4 2 3]; >> v 2 = [3 - 2 0]; Для нахождения суммы и разности двух векторов использу ю тся знак и + и – соответственно. >> s = v 1+ v 2 s = 7 0 3 Если раз меры векторов, к которым применяется сложение или в ы- читание, не совпадают, то выдается сообщ е ние об ошибке. Операция .* осуществляет поэлементно е умножени е векторов одинаковой длины. В результате получится вектор той же д л ины, что и ис ходные, с элементами, равными произведению соответствующих эл е- ментов исхо д ных векторов: >> u = v 1.* v 2 u = 12 - 4 0 При помощи оператора .^ выполняется поэлементное возведение в ст е пень: >> u = v 1.^3 u = 64 8 27 Показателем может быть вектор той же дли ны, что и возводимый в ст е- пень. При этом каждый элемент первого вектора возводится в ст е пень, равную соответству ю щему элементу второго вектора: >> u = v 1.^ v 2 u = 64 0.2500 1 Операция ./ приводит к поэлементному делению векторов один а- ковой длины , при это м элемент ы первого вектора делятся на соответс т- вующие элементы вт о рого вектора: >> u = v 1./ v 2 u = 1.3333 - 1 Inf 
2.4. Векторы 47 Обратное поэлементное деление элементов второго вектора на соо т- ветствующие элементы первого вектора выполняется при помощи оп е- рации . \ >> u = v 1. \ v 2 u = 0.75 - 1 0 К поэлементным относятся и операции с вектором и числом. Сл о- жение вектора и числа прибавляет число к каждому элементу ве к тора: >> u = v 1+ 10 u = 14 12 13 То же самое справедливо и для вычитания. Умножать поэлементно ве к тор на чи сло можно как справа, так и слева: v 1* 10 и 10 * v 1 прив е дет к одинаковому результату. Делить при помощи знака / можно ве к тор на число: v 1/ 10 . Однако попытка деления числа на вектор 10 / v 1 приводит к сообщению об ошибке. В случае, е сли требуется ра з- делить чис ло на каждый элемент вектора, необходимо использовать оп е- р а цию ./ >> u = 10./ v 1 u = 2.5 5 3.3333 Для нахождения сопряженного вектора в MATLAB используется апостроф ’ , а для транспонирования применяется точка с апостр о фом .’ . Для вектор - столбца с комп лексными или вещественными элеме н- тами сопряженный к нему вектор определяе т ся как вектор - строка из его комплексно - сопряженных элементов, а транспонирова н ный вектор – как вектор - строка из его элементов. Аналогично сопряжение и транспонир о- вание вектор - строки привод я т к вектор - столбцу. Для векторов, состо я- щих только из действительных чисел, операции сопряжения и трансп о- нирования совпадают. >> z1 = [3+i; - 2 - +2i; 10]; >> z2=z1' z2 = 3 - 1i - 2+2i 10 >> z3=z1.' z 3 = 3+1 i - 2 - 2 i 10 Таким образом, операции ’ и . ’ над вещественными векторами пр и- ведут к изменению геометрии вектора: вектор - строка превратится в ве к- тор - столбец и наоборот. 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 48 Элементарные математические функции работают с массивами п о- элементно. Так, в результате выпо л нения команд >> x = - 2* pi : 0.01 : 2* p i ; y = sin ( x ); plot ( x , y ) MATLAB создаст два вектора по 1257 элементов (вектор x – знач е ний аргумента и вектор y – значений функции sin от каждого эл е мента вектора x ) и выведет гр а фик функции sin на экран. 2.5. Матрицы Матрицы можно рассматривать как набор чи сел, упорядоченный в виде прямоугольной таблицы , при этом для доступа к отдельному эл е- менту используется два индекса – номер строки и номер столбца . Ма т- рица характеризуется количеством строк и количеством столбцов и хр а- нится в двумерном массиве размерность ю m  n ( m строк и n стол б- цов). Любая строка матрицы является одномерным массивом , упоряд о- чен ным горизонтально, и любой столбец матрицы также является одн о- мерным массивом , упорядочен ным вертикально , и называются они, с о- ответственно, вектор - строк ой и вектор - столбц о м . В этом случае также можно считать, что вектор - строки яв ляются частным случаем матрицы с количеством строк, равным единице, а вектор - столбцы являются час т- ным случаем матрицы с количеством столбцов, равным ед и нице. 2.5.1. Создание матриц При задании матр ицы ￷ ￷ ￸ ￶ ￧ ￧ │ ₩ = 6 5 4 3 2 1 A ее можно рассматривать как вектор - столбец из двух элеме н тов, каждый из которых является вектор - строкой из трех элементов, п о этому необходимо использовать запятые или пробелы для разделения элементов в одной строке и точку с зап я той в качестве разделит е ля строк . >> A = [1 2 3; 4 5 6]; Еще один способ ввода матрицы состоит в том, что матрицу можно рассматривать как вектор - строку, каждый элемент которой является ве к- тор - столбцом. 
2.5. Матрицы 49 Например, матр и цу A можно ввести при помощи команды > > A = [[1; 4] [2; 5] [3; 6]]; Как и в случае одномерных массивов, двумерный массив можно со з дать, прописывая все его элементы: >> A (1,1) = 1; A (1,2) = 2; A (1,3) = 3; >> A (2,1) = 4; A (2,2) = 4; A (2,3) = 6; Конструкторы вида [ A B ; C D ], где A , B , C , D – элементы, которые сами могут быть матриц а ми, создают матрицу ￷ ￷ ￸ ￶ ￧ ￧ │ ₩ D C B A . При этом должна соблюдаться с о гласованность по количеству строк матриц A и B , C и D соответстве н но, а также по количеству столбцов матриц A и C , B и D . Для задания р я да матриц сп е циального вида имеются команды MATLAB , аргуме н тами которых являются размерности создаваемых матриц ( см. табл . 2.4) . Если указано одно число N , то формируется ква д- ратная ма т рица N  N . Таблица 2 . 4 . Функции определения матриц Имя Назначение diag Создание диагональной матрицы или выдел е ние диагонали eye Единичная матрица gallery Функция, позволяющая получать более пятидесяти ста н- дартных ма т риц hilb Гильбертова матрица magic Матрица магического ква драта ones Матрица из единиц rand Случайная матрица со значениями из интерв а ла [0, 1] randn Создание матриц равномерно распределе н ных случайных чисел tril Выделение нижней части треугольной матр и цы triu Выделение верхней части треугольной ма т рицы zer os Нулевая матрица 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 50 Вызов функций ones , zeros , rand с разным числом скалярных аргументов позволяет генерировать многомерные массивы. Вообще во з- можность вызова функции в системе MATLAB с о д ним именем, но с различными аргументами типична для этой системы. Вс е варианты во з- можных вызовов любой функции перечисляются с помощью сл е дующей команды , задаваемой в командном окне: >> help function _ name 2.5.2. Доступ к элементам матрицы Для доступа к отдельным элементам матрицы используется выр а- жение с круглыми скобками, в к о торых через запятую перечисляются его индексы. Первым указывается номер строки, вторым – номер стол б ца. Доступ к элементам матрицы также осуществляется при помощи о д ного индекса – порядкового номера. Индексация при помощи порядков о го номера производится с учетом того, что в памяти компьютера элеме н ты матрицы хранятся по столбцам в виде вектора. ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = ￞ ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = ￞ ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = 9 6 3 8 5 2 7 4 1 33 32 31 23 22 21 13 12 11 9 8 7 6 5 4 3 2 1 a a a a a a a a a x a a a a a a a a a x x Различные способы о б ращения к элементам и группе элементов матрицы на примере матрицы x представлены в табл. 2.5. Таблица 2 . 5 . Обращение к элеме н там и группам элементов матрицы Доступ по номеру строки m и номеру столбца n x ( m , n ) = a mn x (1,3) = 3; x (2,1) = 4; Доступ по порядковому номеру x ( k ) = a k x (2) = 4; x (4) = 2; Доступ к строке x (1 ,:) = [1 2 3] x ( 2 ,:) = [ 4 5 6 ] x ( 3 ,:) = [ 7 8 9 ] 
2.5. Матрицы 51 Доступ к столбцу ( ) ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = 7 4 1 1 :, x ( ) ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = 8 5 2 2 :, x ( ) ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = 9 6 3 3 :, x Доступ к группе элементов ( ) ￷ ￷ ￸ ￶ ￧ ￧ │ ₩ = 6 5 4 3 2 1 : , 2 : 1 x ( ) ￷ ￷ ￸ ￶ ￧ ￧ │ ₩ = 9 8 7 6 5 4 : , 3 : 2 x ( )    ↑ → ← = 3 2 1 9 8 7 : ], 1 , 3 [ x ( ) ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = 8 7 5 4 2 1 2 : 1 :, x ( ) ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = 9 8 6 5 3 2 3 : 2 :, x ( ) ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = 7 9 4 6 1 3 ] 1 , 3 [ :, x [ ] [ ] ( )    ↑ → ← = 9 7 3 1 3 , 1 , 3 , 1 x [ ] [ ] ( )    ↑ → ← = 9 8 6 5 3 , 2 , 3 , 2 x [ ] [ ] ( )    ↑ → ← = 7 8 4 5 1 , 2 , 3 , 2 x Удаление элемента переводит матрицу в вектор - строку x (2,1)=[]  ERROR x (2) = []  [ 1 7 2 5 8 3 6 9 ] x (2:5) = []  [ 1 8 3 6 9 ] x ( end ) = []  [1 4 7 2 5 8 3 6] x (1:2:end) = []  [4 2 8 6] x ( [1 5 9] )=[]  [4 7 2 8 3 6] Удаление столбцов и строк x (:,2) = []       ↑ ↑ ↑ → ← = 9 7 6 4 3 1 x x ( 2 ,:) =[]     ↑ → ← = 9 8 7 3 2 1 x x ( 2 :end,:) = []  [ ] 3 2 1 = x Система MATLAB позволяет переставлять строки (столбцы) масс и- вов. Переставим местами столбцы в матриц е x т аким образом , чтобы п о- следний столбец стал первым, второй – последним, а первый – вт о рым. Для эт о го следует выполнить операцию: >> x = x(:,[3 1 2]) 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 52 В результате матрица примет вид ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ │ ₩ = 8 7 9 5 4 6 2 1 3 x . Так можно не только переставлять строки или столбцы, но и удалять часть из них (выше для этой цели использовался пустой массив), а др у- гие строки (столбцы) дублировать. Например, в результате в ы полнения команды >> y = x([1 1 2 3],[3 1 2 2]) создается матрица вида ￷ ￷ ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ ￧ ￧ │ ₩ = 8 8 7 9 5 5 4 6 2 2 1 3 2 2 1 3 y . 2.5.3. Взаимные преобразования векторов и матриц Рассмотрим примеры, в кот о рых из вектор - столбцов и вектор - строк получают матрицы и наоборот. Создадим вектор - столб ец оп е рацией конкатенации: >> s = [1 ; 2] ; Теперь с помощью выражения >> s = s (:,[1; 1]); превращаем переменную s из ве к тор - столбца в матрицу ￷ ￷ ￸ ￶ ￧ ￧ │ ₩ = 2 2 1 1 s . Д ля получения матрицы s вида 2  2 исходный вектор - столбец был продублирован. Выраж е ние >> s = s (:, ones (1, N )) позволяет продублировать вектор - столбец s N раз, т . е . получить ма т- рицу 2  N . В данной команде использ уется функци я ones , создающая ма с сивы любой размерности, все элементы которых равны единице. В примере, описанном выше, эта функция при н и мает вид ones (1, N ) и создает вектор - строк у и з N ед и ниц . Для индексов можно использ о вать не только линейные диапазоны, но и структурированные геометрически наборы чисел. Пусть A – ма т- 
2.5. Матрицы 53 рица 2  3 вида A = [1 2 3; 4 5 6] и z = [6 5 4 3 2 1] – ве к тор. Выражение A (:,:) есть та же матриц а A . Выражение A (:) есть набор из всех элементов матрицы A , упорядоченный лине й но по столбцам (т . е . вектор - столбец): сначала идут все элементы пе р вого столбца, затем – элементы второго столбца и так далее (так, как храня т ся все ма сс и вы в памяти компьютера). Т аким образом , справедливо >> z ( A (:)) = [6 3 5 2 4 1] Здесь элементы матрицы A , вытянутые в столбец, являются индекс а ми для входа в массив z , откуда и извлекаются элементы для форм и рования массива - результата. MATLAB рассматрива ет z ( A ) как выражение, порождающее дв у- мерный массив той же структуры, что и матрица A , поставляющая и н- дексы для выборки значений из одномерного масс и ва z : ￷ ￷ ￸ ￶ ￧ ￧ │ ₩ = 1 2 3 4 5 6 ) ( A z . Наконец, матрицы могут не только превращаться в векторы, но и менять свою ф орму. При изменении формы матрицы должна соблюдат ь- ся согласованность по количеству элементов. Порядок следования эл е- ментов при этом не измен я ется, элементы только по - другому порежутся на кусочки. >> A = reshape ( T , size ( B )) – формирование матрицы A из эл е- мен тов масс и ва T по форме матрицы B . >> A = reshape ( T , m , n ) – формирование матрицы m  n из элеме н- тов массива T длины m  n . Элементы выбираются последовательно, образуя столбцы A . >> A = reshape ( T , m , n , p ) – формирование массива m  n  p из элементов массива T длины m  n  p . Аналогичным образом создаются многомерные ма с сивы. ￞ ￷ ￷ ￷ ￷ ￷ ￸ ￶ ￧ ￧ ￧ ￧ ￧ │ ₩ = 1 15 14 4 12 6 7 9 8 10 11 5 13 3 2 16 T r e shape ( T , 2, 8 ) ￷ ￷ ￸ ￶ ￧ ￧ │ ₩ = 1 8 15 10 14 11 4 5 12 13 6 3 7 2 9 16 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 54 2.6. Т ензоры Массивы с числом размерностей более двух считаются многоме р- ными и называются тензорами. Для индексации элементов таких ма сс и- вов требуется три или более номера, указывающи х на положение выб и- раемого элемента вдоль нескольких направлений упорядоч и вания. Рис. 2 . 4 . Пример тензора Так, трехмерный тензор представляет собой упорядоче нную прон у- мерованную вдоль некоторого направления совокупность матриц один а- кового размера (рис. 2.4) . Это будет уже третье направление упорядоч и- вания данных, так как вдоль первого направления упоряд о чиваются строки, вдоль второго – столбцы. В результате тр етий индекс для дост у- па к отдельному элементу данных будет р а вен номеру таблицы. 2.6.1. Создание тензоров Существует несколько спос о бов создания тензоров. Самый простой способ создания тензора нужного размера состоит в присваивании зн а- чения его п о следнему элеме нту: >> T (11,4,3) = 1 
2.6. Тензоры 55 В данном случае тензор представляет собой совокупность трех ма т риц, каждая из которых состоит из 11 строк и четырех столбцов. Второй способ – это прямое прописывание всех его элеме н тов: >> T (1,1,1) = 1; T (1,2,1) = 2;… T ( 11 ,4,3) = 30 Процесс задания всех элементов такого тр е хмерного массива допу с- кает группировку. Сначала можно любым способом сформировать ма т- рицу A 1 , затем матрицу A 2 и так далее. После того, как все матр и цы будут определены , можно для создания тр е хмерного массива выпо л н ить следующие групповые присваивания: >> T (:,:,1) = A 1; T (:,:,2) = A 2;… T (:,:,3) = A 3 Рассмотренный способ применялся при создании одномерных и двумерных массивов. Кроме него для таких массивов использовалась ещ е операция конкатенации. Но эта операция конк атенации непосредс т- венно для создания массивов высокой размерности неприменима, так как раздел и тели (запятая и точка с запятой) в этой операции работают только на разграничени е столбцов и строк. Для этой цели при создании тензоров применяют фун к цию конкате нации cat . Для двух матриц A 1 = [1 2 3; 4 5 6] и A 2 = [7 8 9; 1 1 1] конкатенация вдоль разных направлений приводит к следующим резул ь татам: >> cat (1, A 1, A 2) порождает массив [1 2 3; 4 5 6; 7 8 9; 1 1 1], т . е . тот же р е зультат, что и [ A 1; A 2]. >> cat (2, A 1 , A 2) порождает массив [1 2 3 7 8 9; 4 5 6 1 1 1], т . е . аналогично [ A 1, A 2]. >> cat (3, A 1, A 2) порождает из двумерных массивов A 1, A 2 тр е х- мерный ма с сив. И наконец, можно применить специальные функции ones , zeros в тех случаях, когда почти все эл е менты многоме рного массива равны единице или нулю, после чего пр о писать индивидуальные значения для отдельных элементов. Например, следующий код создает тр е х мерный массив T с размером 5  3  2 из нулей, а затем присваивает всем эл е- ментам первой таблицы значение 2, а всем элементам второго столбца вт о рой таблицы – значение 4: >> T = zeros ( 5 ,3, 2 ); >> T (:,:,1) = 2 ; T (:, 2 ,2) = 4 ; Работа с массивами валентности 4 и выше аналогична работе с ма с- сивами размерн о сти 3 . 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 56 2.6.2. Доступ к элементам тензора Так же как и в рассмотренных выше сл учаях работы с матрицами, в памяти компьютера элементы тензора хранятся упоряд о ченными по столбцам: сначала идут элементы первого столбца первой матрицы, з а- тем – второго столбца первой матрицы и т. д., и наконец, идут эл е менты последнего столбца последней матрицы. Обратиться к элементам можно при помощи группы индексов, н а- пример, элемент T (5,2,1) находится в пятой строке, втором столбце первой матрицы. Другой способ доступа к элементу тензора состоит в использовании порядкового номера элемента – T (12) , T ( e nd ) . Возможны следующие вариа н ты доступа к элементу или группе элементов тензора: >> T ( i ) – i - й элемент тензора ; >> T ( R , C , P ) – подтензор, где R – список индексов строк, C – стол б- цов, P – стр а ниц; >> T ([1 3],:,3) – первая и третья строки, все столбцы, треть я стр а- ница; >> T ([ end 1], end ,: ) – п о следняя и первая строки, последний столбец всех страниц; >> T (: ) – весь массив, вытянутый в столбец; >> T ([2 end - 1]) или T (2 end - 1) – второй и предпоследний эл е- менты; >> T ([2: end - 1]) – весь массив, вытянутый в строку, к роме 1 - го и последнего элементов; >> T (2,1) – выдаст сообщение об ошибке, т ак к ак можно указывать либо все индексы, либо только один (п о рядковый номер). 2.7. Функции для работы с массивами Для элементарных вы ч ислений с элементами массивов предназн а- чены фун к ции sum , prod , max , min и sort . Функцию sum применяют для одномерных массивов, где она су м- мирует все элеме н ты. Для матриц эта функция суммирует элементы в столбцах, так что если A =[1 2 3; 4 5 6; 7 8 9] , то sum ( A )= = [12, 15, 18] . В случае много мерных масси вов функция п о- зволяет выбрать направление суммиров а ния элементов. 
2.7. Функции для работы с массивами 57 Функция prod аналогична функции sum , но только вместо су м- мирования выполняет умнож е ние : prod ( A )==[28, 80, 162] . Функции max и min ищут, соответственно, максимальный и м и- нимальный элементы в массивах . Для одномерных массивов – это еди н- ственный элемент . В с лучае матриц рассматриваемые функции тра к туют столбцы матриц как векторы, по каждому из которых нужно дать резул ь- тат , и возвращают набор экстремальных элементов для каждого стол б ца . Таким об разом, max ( A )==[7, 8, 9] . Варианты использования функции min : >> x = [2 8 4; 7 3 9]; >> y = [7 1 1; 4 4 0]; >> min ( x ) == min ( x ,[],1) == [2 3 4] создает вектор - строку из мин и мальных элементов в каждом столбце; >> min ( x ,[],2) == [2; 3] создает вектор - стол бец из минимал ь- ных элементов в каждой стр о ке; >> min ( min ( x )) == 2 определяет минимальный элемент ма т рицы; >> min ( x ,5) == [2 5 4;5 3 5] заменяет в матрице x все эл е- менты, большие 5, на 5; >> min ( x , y ) == [2 1 1;4 3 0] создает матрицу, каждый эл е- мент кото рой является минимал ь ным из соответствующих элементов матриц x и y ; >> [ a , i ] = min ( x ) возвращает два вектора: вектор a == [2 3 4] состоит из минимальных элементов каждого столбца матрицы x , а ве к- тор i == [1 2 1] содержит номера строк минимальных элементов в каждом стол б це . Функция sort сортирует в возрастающем порядке элементы одн о- мерных массивов, элементы столбцов в матрицах (каждый столбец о т- дельно). Функция all в случае е е применения к вектору возвращает 1 (и с- тина), если все элементы вектора не равны н улю, или 0 в случае , если х о- тя бы один элемент нулевой. Функция any действует противоположным образом. Она возвр а- щает нуль в случае, когда все элементы вектора равны нулю , и единицу, когда хотя бы один элемент ненулевой. В случае применения к ма т рицам фун кции all и any возвращают значения по каждому столбцу. Функция find в качестве аргумента принимает некоторое усл о- вие, а возвращает набор номеров (индексов) элементов массива , удовл е- 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 58 творяющих данному условию . Для одномерного массива вызов этой функции во з вр ащает вектор индексов элементов. Для матриц функция find во з вращает не один вектор индексов, а группу . Каждый вектор из это й группы получается в результате обработк и отдельного столбца ма т- рицы. Например, следу ю щий вызов >> A = [2 3 0; 4 0 7; 0 0 8] ; >> [ v 1, v 2] = find ( A ) ; возвращает вектор - столбцы v 1 и v 2 , первый из которых содержит н о- мера строк, а второй – номера столбцов отличных от нуля элеме н тов матрицы A , при этом матрица просматривается по столбцам слева н а- право. Т аким образом, v 1==[1; 2; 1; 2; 3] и v 2==[1; 1; 2; 3; 3] . Вызов следующей команды возвращает вектор - столбцы v 1 = =[2;3] и v 2 = =[3;3] , содержащие соответственно номера строк и номера столбцов элементов ма т рицы A , больших 4 : >> [ v 1, v 2] = find ( A >4) На примере этих функций ви д на уникальная особен ность функций , реализованная в системе MATLAB , – возможность получать от одной и той же функци и разное число возвращаемых знач е ний. Функция spy рисует «портрет», или шаблон матрицы, в кот о ром точками будут отмечены ненулевые элементы. После выполнения к о- ма нды spy на экране появляется окно Figure № 1 . На верт и кальной и горизонтальной осях о т кладываются номера строк и номера столбцов. Ненулевые элементы об о значаются маркерами. Внизу окна указывается число ненулевых эл е ментов матрицы. 2.8. Вычисления с массивами Так как матрицы являются сам ой распростран е нн ой формой пре д- ставления данных в системе MATLAB, то р ассмотрим действие арифм е- тических, логических операций и операций отношения с массивами для случая матриц более детал ь но . 2.8.1. Арифметические операции Основные знаки арифметических операций, используемые при р а- боте с матрицами, представлены в табл. 2.6. 
2.8. Вычисления с массивами 59 Таблица 2 . 6 . Знаки арифметич е ских операций Символ Назначение +, - З нак числа или операци я сложения и вычитания матриц, причем матрицы должны быть одинаков о го размера * Матричное умножение .* Поэлементное умнож е ние матриц ’ Транспонирование вместе с комплексным с о пряжением .’ Транспонирование без вычисления сопряжения / Левое деление ./ Левое поэлементное д е ление \ Правое деление . \ Правое поэлементное д е ление ^ Возведение в степень .^ Поэлементное возвед е ние в степень При сложении, вычитании, умножении, делении матрицы на число соответствующая операция всегда производится поэлементно. Аддити в ные о перации сложения и вычитания осуществляются с массивами п о элементно и обозначаются знаками + и – . Складываемые (вычитаемые) матрицы должны иметь одинаковые размеры. Если опер а- ция пр и меняется к матрицам, размеры которых не согласованы, то будет выведено соо бщение об ошибке. В случае , если одно из слагаемых явл я- ется скаляром , производится автоматическая генерация безымянной ма т- рицы с таким же разм е ром, как и у матричного слагаемого, при этом все е е элементы одинаковы и равны исхо д ному скаляру. Для операций ум ножени я , делени я и возведени я в степень традиц и- онные арифметические знаки зарезервированы за действиями линейной а л гебры : знак * означает перемножение матриц (а также вектор - строк и вектор - столбцов) по правилу « строка на столбец » . З нак деления / (а также з нак \ ) выполняет операци ю нахождения решений систем лине й- ных уравн е ний . Для поэлементного выполн е ния операций умножения, деления и возведения в ст е пень применяются комбинированные знаки (точка и знак операции). П оэлементное перемножение массивов обознач а ет ся .* . При поэлементном умн о жении на скаляр производится расширение скаляра до матрицы , т. е. на скаляр умножается каждый элемент матр и- 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 60 цы. З нак ^ возводит матрицу в степень, а комбинация .^ означает возв е дение в степень каждо го элемента матрицы. Для поэле ментного деления используются комбинации знаков ./ и . \ , обозначающие « правое » и « левое » поэлементные деления. Выраж е- ние A ./ B делит элементы первой матрицы на соответствующие эл е- менты второй и приводит к матрице с элементами A ( k , m )/ B ( k , m ) , а выр а жение A . \ B служит для деления элементов второй матрицы на соответствующие элементы первой и приводит к матрице с элемент а ми B ( k , m )/ A ( k , m ). Обе матрицы должны иметь одинаковые разм е ры, в случае скаляра производится его расширение до размеров опера н да - матрицы. В таб л. 2.7 представлены основные арифметические операции с матрицами на примере ма т рицы    ↑ → ← = 4 3 2 1 y . Таблица 2 . 7 . Операции с матриц а ми    ↑ → ← = + 8 6 4 2 y y    ↑ → ← = + 5 4 3 2 1 y    ↑ → ← =    ↑ → ← ᅲ + ᅲ ᅲ + ᅲ ᅲ + ᅲ ᅲ + ᅲ = 22 15 10 7 4 4 2 3 3 4 1 3 4 2 2 1 3 2 1 1 * y y    ↑ → ← =    ↑ → ← ᅲ ᅲ ᅲ ᅲ = ᄋ 16 9 4 1 4 4 3 3 2 2 1 1 * y y    ↑ → ← = 1 0 0 1 / y y    ↑ → ← = ᄋ 1 1 1 1 / y y    ↑ → ← = 12 9 6 3 3 * y    ↑ → ← = 2 5 . 1 1 5 . 0 2 / y    ↑ → ← = ᄋ 64 27 8 1 3 ^ y    ↑ → ← = 22 15 10 7 2 ^ y    ↑ → ← = ᄋ 4 2 3 1 ' y    ↑ → ← = 4 2 3 1 ' y    ↑ → ← = 4 3 4 3 2 1 2 1 ] , [ y y       ↑ ↑ ↑ ↑ → ← = 4 3 2 1 4 3 2 1 ] ; [ y y 
2.8. Вычисления с массивами 61 2.8.2. Операции отношения и логические операции Операторы отношения и логические операторы, а также соответс т- вующие им команды позволяют выполнять сравнения массивов одинак о- вого размера. Операции отношения и логические операции выполняют поэлементные действия . Результатом таких операций явл я ются массивы из нулей и единиц того же размера, что и исходные. Здесь каждый нуль означает « ложь » для данной позиции внутри матриц, а единица означ а ет « истину » . Попытка сравнения массивов разных размеров приводит к ошибке. В случае скаляра производится его расширение до массива ну ж- ного размера, а затем происходит сравнение. Л огич е ски е операци и и операци и отношения применимы и для чисел. Операции == , ~= пр о- водят сравнения вещественных и мнимых час тей ко м плексных чисел, а опер ации > , < , >= , <= – только вещественных ча с тей. Основные логические операторы и операторы отношения, а та к же соответствующие им функции представлены в табл. 2.8 , 2.9. Таблица 2 . 8 . Операции отношения Символ Назначение Ф ункци я > Больше gt >= Больше или равно ge < Меньше lt <= Меньше или равно le == Равно eq ~= Не равно ne Применение логических операций к массивам приводит к поэл е- ментному их выполнению над каждым элементом массива. Результатом является массив того же размера, что и исходный, с о- стоящий из нулей и единиц. Одним из элеме н тов логических операций может быть число. В этом случае происходит поэлементное выполнение логической операции для каждого элемента и числа. Выполнение бина р- ных логических операций xor , & и | над массивами разных размеров недопустимо. Выделение части массива, элементы которого удовлетворяют опр е- деленному условию, производится фун к цией find . Следующий код 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 62 создает вектор - столбец Anew из всех элементов ма т рицы A , меньших 7 и б ольших или равных 3. >> A = [2 3 0; 4 5 7; 0 0 8]; >> Anew = A ( find (( A <7) & ( A >=3))) Следующий к од замен яет числом 9 все элементы матрицы A , мен ь шие 4 или большие 7 : >> A ( find (( A >7) | ( A <4)))= 9 Таблица 2 . 9 . Логические операции Си м в ол Назначение Результат Ф ун к ци я & Логическое «И» Бинарная операция : 1 – если оба эл е мента не 0, 0 – если хотя бы один из них 0 and |= Логическое «ИЛИ» Бинарная операция : 1 – если х о- тя бы один из эл е ментов не 0 or ~ Отрицание Уна рная операция : 1 – если эл е мент массива 0, 0 – если элемент массива не 0 not Исключа ю щее «ИЛИ» Бинарная операция : 1 – если один элемент 0, а другой не 0 ; и 0 – если оба эл е мента 0 или оба не 0 xor MATLAB предоставляет возможность логического индексир о в ания при работе с данными. Таблица 2 . 10 . Построение индек с ных логических матриц Ф ун к ци я Назначение isfinite 1 – соответству е т числам ; 0 – Inf , NaN isinf 1 – соответству е т + Inf , – Inf ; 0 – числам isnan 1 – соответств уе т NaN ; 0 – числам isprime 1 – соответству е т простым числам; 0 – остальным чи с лам isreal 1 – соответству е т вещественным числам; 0 – комплек с- ным числам 
2.9. Тек стовые строки 63 Некоторые индексные логические матрицы вычисляются по исхо д- ной матрице при помощи специальных функций . Каждая функция для входной матрицы строит индексную логич е скую матрицу из нулей и единиц, соответствующую проверяемому условию. Функции для построения индексных логических матриц предста в- лены в табл. 2.10 . 2.9. Те к стовые строки Во всех я зыках программирования большую роль играет обр а ботка текстовых данных. Для этой цели в системе MATLAB пред у смотрен тип данных char ( « символ » ). Текстовые данные, в том числе и од и ночный символ, должны заключаться с обеих сторон в апос т роф ы : >> s1 = 'a'; s2='abcd'; s3 = 'Hello, MATLAB!' В результате таких присваиваний создаются переменные в виде массив ов ( в системе MATLAB вс е есть массив) типа char . Печатаемые симв о лы из стандартного набора ASCII представлены числами от 32 до 255. Для ввода русских симв олов следует выбрать в меню File | Prefe r ences ► Command Windows Font шрифт с русской кодировкой. Во внутре н- нем представлении символы даны целыми числами. Конвертир о вать массив символов в числовую матрицу позволяет команда double . О б- ратная операция выполня ется по команде char . Если после того, как переменная s 3 получила текстовое значение, н а писать >> s 3 = 2.345 то переменная s 3 станет уже п е ременной типа double . Если неизвестен тип переменной в какой - либо момент времени и с- полнения, то с ц е лью определени я типа переменной следует применить функцию isa . Например, вызов этой функции верн е т истину (един и цу), если переменная s 3 является в этот момент строковой (символ ь ной), и верн е т ложь (нуль) в противоположном сл у чае. >> isa ( s 3,' char ') По отношению к массива м символов справедливы также все опер а- ции, ранее рассмотренные для случая массивов типа double . Н а пример, вместо группового присваивания s 2=' abcd ' можно выполнить п о- элементное присваивание с помощью операции индекс а ции: 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 64 >> s2(1)='a'; s2(2)='b'; s2(3)='c'; s2(4)='d' или осуществить операцию конк а тенации >> s 2 = [' ab ' ' c ' ' d '] 2.9.1. Функции для работы со строками В MATLAB имеется полный набор функций для классической обр а- ботки текстов ых строк (см. табл . 2.11) , свойственный языкам програ м- мирования высокого ур овня. Часто текстовые строки и с пользуются для вывода в командное окно системы MATLAB для информирования пользователя о ходе выполн е- ния M - функции. Это осуществляется с помощью функции disp , пр и- нимающей в качестве аргумента текстовую строку >> x = 17 ; >> m essage = [' Variable x = ', int 2 str ( x )]; >> disp ( message ) Кроме того, в командное окно надо выводить сообщения, пред у- преждающие пользователя о необходимости ввода с клавиатуры знач е- ния переменной: >> X = input('X = ? ') Функция input выводит в командно е окно текст, являющийся е е аргументом, после чего ожидает ввода значения с клавиатуры и н а жатия клавиши < Enter > . Таким образом можно ввести с клавиатуры числ о- вое значение и запомнить е е значение в переменной X . Внутри строки - аргумента функции input может присутствовать специальный набор из двух символов / n , прив о дящий к показу сообщения на двух строках (часть сообщения после / n показывается на новой строке). Для ввода не числового, а текстового значения следует в ы звать функцию input с двумя аргуме н тами: >> str = input (' str = ', ' s ') В результате выполнения этой функции на экране появляется на д пись, после чего можно набирать необходимый текст с клавиатуры, заканчивая ввод нажатием клав и ши < Enter > . Если нажать < Enter > , не введя с клавиатуры никакого текста, то переменная str примет значение пу с- того массива. П еред использованием этой переменной следует пров е р и ть 
2.9. Текстовые строки 65 е е содержимое функцией isempty ( str ) , возвращающей единицу, к о- гда а р гумент является пустым массивом. Таблица 2 . 11 . Функции для работы со строками Ф ун к ци я Назначение char Перевод массива целых чисел в ма с сив символов num2str Перевод числа в строку int2str Перевод целого числа в строку mat2str Преобразование матрицы в строку str2mat Объединение ст р ок в матрицу str2num Перевод строки в число str2double Преобразование символьного вида числа в числовой strcat Объединение (сц е пление) строк strvcat Вертикальное объединение (сцепл е ние) строк findstr Поиск подстроки в строке strtok Поиск первой по д строк и, отделенной пробелами strcmp Сравнение строк strcmpi Сравнение строк без учета регистра strncmp Сравнение первых n символов двух строк strrep Замена в строке о д ной подстроки на другую upper Преобразование в прописные буквы lower Преобразование в ст рочные буквы ischar Проверка, является ли объект массивом символов blanks Вставка пробелов deblank Удаление пробелов в конце строки strjust Выравнивание эл е ментов в строке sprintf Форматная запись в строку sscanf Чтение данных из строки в заданном фо рмате 2.9.2. Массивы строк Удобной возможностью организации строковых переменных явл я- ются массивы строк, которые формируются так же, как обычные вектор - 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 66 столбцы, но в качестве их элементов выступают строки одинаковой дл и- ны. Массив строк являе т ся двумерным массив ом (матрицей), состоящим из символов, поэтому возникает ограничение на длину его строк. Коро т- кие строки следует дополнить пробелами до максимал ь ной из длин строк, входящих в ма с сив. >> name=['MATLAB '; 'MAPLE ';'MATHEMATICA'] name = MATLAB MAPLE MATHEMATICA Функция char реш ает эту задачу : >> name = char('MATLAB','MAPLE','MATHEMATICA'); Доступ к строкам в массиве осущ е ствляется при помощи индексации: >> name (1,:) ans = MATLAB 2.10. Структуры Система MATLAB поддерживает работ у со структурами – объе к- тами данных (тип struct ), содержащими разную поименованную и н- формацию. Структурами MATLAB являются многомерные массивы, с о- держащие контейнеры данных, называемые полями, каждому из кот о рых присваивается свое имя . Поля структуры могут содержать любой тип да н ных. Отдельная структура – это структурный массив размерности 1  1. Использование массива структур является эффективным способом хранения информации, представленной в виде таблицы с полями, соде р- жащими о д нотипные элементы данных. 2.10.1. Соз дание структуры Допускаются два способа заполнения массива структур – операт о- рами присваивания для всех п о лей каждой структуры массива, или функцией - конструктором struct , позволяющей внести значения сразу в несколько полей структуры. Можно создать структу ру, а затем в л ю бом месте добавить новое поле. >> Human = struct (' Name ',' Ivan ',' Age ',28,' Sex ',' m '); >> Human . Info = [1 2; 3 4]; >> Human.Addres = 'Minsk'; 
2.10. Структуры 67 Или : >> Human.Name =' Ivan '; >> Human . Age = 28; >> Human . Sex = ' m '; >> Human . Info = [11 12; 13 14]; > > Human . Addres = ' Minsk '; Расширение структуры производится по тому же правилу, что и д о- бавление строк или столбцов в массив: >> Human (2). Info = [21 22; 23 24]; При э том незаполненным полям второго элемента массива структ у ры Human будут автомат и чески присв оены значения пустого массива [] . Для пополнения структуры можно также использовать конс т руктор struct , но в этом случае в нем уже надо указать и заполнить все сущ е- ствующие поля или пр и своить им значение [] . >> H u man(3)=struct('Name',' Ann ','Age',[], 'Sex', ' f ', 'Info',[]); Набор полей массива структур можно изменять динамически. Н а- пример, уже после того, как определен массив Human типа struct ра з мера 1  3 с четырьмя указанными выше полями ( ' Name ', ' Age ', ' Sex ', ' Info ' ), можно выполнить присваивание >> Human (1 ). Number = 123456; после которого массив структур уже будет обладать пятью полями. Так как у второго и третьего элементов массива Human поле Number я в- но не задано, то оно равно пуст о му массиву [] . Чтобы вывести содержимое о т дельных полей массива структур, нужно использовать фигурные скобки { Human . Name } , если с данным полем связаны символьные данные, и квадратные скобки [ H u- man . Name ] , если с данным полем связаны числовые данные. Обратите внимание При использовании массива структур необходимо придерживаться с л е- дующих пр а вил:  Доступ к структурам, входящим в массив, осуществляется при пом о- щи индекс а ции: Human (1) . 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 68  Поле отделяется от имени структуры при помощи точки: H u- man (1). Number .  Доступ к элементу матрицы, являющейся значением поля стру к туры, осуществляется пр и помощи двух операций индексации и одной оп е- рации доступа к п о лю структуры : Human (1). Info (1,2) . Если два массива структур имеют одинаковый набор полей, то д о- пуск а ется групповое присваивание , например , когда значения всех полей второго элемента массива St u dent копируются в поля третьего эл е- мента массива H u man . >> Human (3) = Stu den t (2); Если же требуется групповая операция копирования содержимого одноим е нного п о ля всех элементов массива структур, то необходимо выполнить следующую команду: >> age = [ Human . Age ]; Применение прямоугольных скобок обязательно, так как над значениями полей отдельных элементов производится операция конкатенации . В качестве содержимого некоторого поля структуры может выст у- пать другая структура, т . е . структуры могут быть вложенны ми. В кач е- стве имени вложенной структуры выступает имя поля внешней структ у- ры: >> ext . data = 1; >> ext .inn. text =' info '; >> ext . inn . data =[ 1 2 3; 4 5 6 ; 7 8 9 ]; Здесь inn – имя внутренней структ у ры, являющейся полем внешней структуры ext . Для изменения числ о вого данного, стоящего в третьей строке первого столбца (поле data ), применяе тся команда >> ext . inn . data ( 3 ,1) = 11 2.10.2. Функции для работы со структурами В MATLAB имеется ряд функций для работы со структурами. Пер е- чень функций для организации работы со ст руктурами представлен в табл. 2.12. Структуры MATLAB можно назвать агрегированным типом да н- ных . 
2.11. Массивы ячеек 69 Таблица 2 . 12 . Функции для работы со структурами Ф ункци я Назначение fieldnames Получение названий полей стру к туры getfield Получение содержимого определенных полей rmfield Удаление полей структуры setfield Присвоение зн а чения полю структуры struct Создание стру к тур и массива структур struct2cell Преобразование массива структур в ячейки deal Организация дос тупа к полям ма с сива структур isstruct Проверка, являе т ся ли указанный объект структурой isfield Проверка, соде р жит ли структура указанное поле Другим агрегированным типом данных в системе MATLAB являю т- ся ячейки (тип cell ). 2.11. Массивы ячеек Кроме числовы х массивов, массивов строк и структур, в MATLAB определен еще один тип переменных – массив ячеек ( тип cell ) , кот о- рый предназначен для хран е ния разнородных объектов (массивов разных размерностей, разнотипных данных). Массив ячеек состоит из ячеек, или конте йнеров, каждый из кот о- рых может содержать данные ра з ных типов. Массив ячеек может быть полем структуры. Этот тип данных является более удобной формой о р- ганизации данных по сравнению с масс и вом структур в том случае, когда данные не содержат однотипны х пол е й . 2.11.1. Создание массива ячеек Методы создания массивов ячеек похожи на методы создания структур. Как и в сл у чае структур, массивы ячеек могут быть созданы либо пут е м последовательного присваивания значений отдельным эл е- ментам массива, либо целиком при помощ и специальной фун к ции - конструктора cell . При работе с массивами ячеек важно разл и чать ячейку (элемент массива ячеек) и е е содержимое. Ячейка – это содерж и- мое плюс некоторая оболочка (служебная структура данных) вокруг эт о- 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 70 го содержимого, позволяющая хранить в ячейке пр о извольные типы данных л ю бого размера. Выражение любого типа данных системы MATLAB можно превр а- тить в ячейку, заключив его в фигурные скобки. Тогда с помощью оп е- рации присваивания и обычных операций индексации >> W = {[7 9] ' Tony ' 3+4 i ; [1 2; 3 4] - 5 ' abc '}; >> h_struct =struct('field1',[ 1 2 3],'field2','a'); >> W(1,4) = { h_struct } W = [1  2 double] 'Tony' [3+4i] [1  1 struct] [2  2 double ] [ - 5] ' abc ' [] строится массив ячеек 2  4, элементами которого являются ячейки, с о- держащие соответственно вектор - строку 1  2, текстовую строку, ск а ляр 1  1, структуру h _ s truct , числовой массив 2  2, скаляр 1  1, текст о вую строку и пустой массив. Т аким образом , построенный массив ячеек с о- держит разнородные данные. При этом в командном окне показывае т ся содержимое не всех ячеек этого массива. Более подробную информ а цию мо ж но получить, вызвав функцию celldisp ( W ) . Содержимое массива ячеек можно отобразить в графическом окне (рис. 2. 5 ) при п о мощи функции cel l plot ( W ) . Рис. 2 . 5 . Отображение содержимого ма с сива ячеек в графическом окне Для того чтобы воздействовать на содержимо е ячеек, нужно инде к- сировать массив ячеек при помощи фигурных скобок. При обычной и н- 
2.11. Массивы ячеек 71 дексации круглыми скобками из массива ячеек извлекает ся отдельная ячейка (сл е дует ч е тко различать саму ячейку и е е содержимое). >> W (1,1) ans = [1  2 double] >> W {1,1} ans = 7 9 Массивы ячеек полностью решают типовую задачу хранения н е- скольких строковых данных под одним именем. При формировании ма с- сивов ст рок каждая строка должна иметь одну и ту же длину, что огр а- ничивает применение такого решения. В случае массива ячеек такого о г- раничения нет: >> W {1} = ' MATLAB '; W {2} = ' MATHEMATICA '; В данном случае фигурные скобки применены в роли индексирующих элемен тов, так что использовать фигурные скобки в правых частях оп е- рации присваивания теперь не ну ж но (там присутствуют значения, а не ячейки). В итоге под именем массива W хранятся две текстовые стр о ки разной длины. Как и в случае структур, кроме поэлементного со з дани я массива ячеек, возможно и с пользование функции - конструктора: >> W = cell(size(ones(2,2))) W = [] [] [] [] или >> W = cell(2,2); которая сразу создаст массив ячеек требуемой размерности и размера, при этом каждая ячейка будет пусто й (содержимым пустой ячейки явл я- е т ся пустой числовой массив). Затем можно осуществлять поэлементные пр и сваивания . В этом случае уже не выполняется перестройк а структуры массива ячеек с каждым новым присва и ванием. Чтобы удалить некоторый ди а пазон ячеек из массива ячеек, нужно этому диапазону присвоить знач е ние пустого массива [] . >> W (2,:) = []; Теперь массив ячеек W имеет размер 1  2, так как предыдущая к о манда удалила всю вторую строку массива. 
Т е м а 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ 72 У массивов ячеек имеется множество применений. Например, есл и стоит задача передачи в M - функцию произвольного числа параметр о в или возвращения функцией произвольного числа выходных значений , то использование массивов ячеек является единственно возможным ее р е- ш ением. Существуют ещ е и другие случаи, когда примен е ние массива ячеек предпочтительно или обязательно . К ак и структуры, массивы яч е ек также можно назвать агрегированным типом данных си с темы MATLAB . 2.11.2. Функции для работы с массивами ячеек В MATLAB имеется ряд сервисных функций для работы с массив а- ми ячеек. Осно вные функции, выполняющие действия с массивами яч е- ек , представлены в табл. 2.13. Таблица 2 . 13 . Функции для работы с массивами ячеек Ф ункци я Назначение cell Создание пустого массива ячеек з а данного размера cellfun Применение функции к соде р жимому массива ячеек cellstr Преобразование массива символов в массив ячеек iscellstr Проверка, является ли объект ма с сивом ячеек из строк cell2struct Преобразование массива ячеек в массив структуры cell2matrix Преобр азование массива ячеек в матрицу celldisp Вывод содержимого массива яч е ек в командное окно cellplot Отображение содержимого массива ячеек в графич е- ском окне num2cell Преобразование числового масс и ва в массив ячеек iscell Проверка, являе т ся ли указанный объект массивом ячеек 
ТЕМА 3 ЭЛЕМЕНТЫ ПРОГРАММИРОВАНИЯ Система MATLAB включает в себя язык программирования – высокоуровн е вый язык матриц и массивов с операторами управления, функциями, структурами данных, вводом - выводом и возможностями объектно - ориентиров анного программ и рования. Это позволяет создавать большие и сложные прикладные программы с высокоразвитым графич е- ским интерфейсом пользователя. 3.1. Управление вычислением Язык программирования MATLAB включает стандартный набор конструкций языка программирова ния высокого уровня. В данно м ра з- деле описаны основные операторы, задающие порядок выполнения к о- манд. Такие конструкции называются операторами управления . Опер а- торы можно использовать как в m - сценариях, так и в m - функциях. К операторам управления относятс я операторы ветвления и опер а- торы цикла. 3.1.1. Операторы ветвления К операторам ветвления относятся условный оператор if и опер а- тор переключения switch . Эти операторы позволяют со з дать гибкий разветвляющийся алгоритм выполнения команд, в котором при выпо л- нении определенных условий управление передается соответствующ е му блок у команд. 3.1.1.1. Условный оператор Условный оператор использует ключевые слова if ( « если » ), else ( « иначе » ), elseif ( « иначе , если » ), end ( « конец всей конс т- рукции » ). Область действия условного операт ора начинается ключевым сл о- вом if , а заканчивается ключевым словом end . Под условием поним а- 
Т е м а 3 . ЭЛЕМЕНТЫ ПРОГРАММИРОВАНИЯ 74 ется произвольное выражение (чаще всего это операции отношения и л о- гические операции), истинность или ложность которого (т. е. соответс т- венно отличие или равенство н улю ) влияет на дальнейший ход выполн е- ния программы . Условный оператор может выступать в одной из следующих тр е х форм. if cond i tion stat e ments end if condition statements else stat e ments end if condition_1 statements elseif cond i tion_2 s tatements else statements end Если условие истинно, то выполняется блок команд, стоящий после строки с ключ е вым словом if . Если условие ложно, то эти команды пропускаются и либо происходит переход к блоку, следующему после end (первая форма), либо п ровер яе т ся ещ е одно условие в строке с ключевым словом elseif (третья форма условного оператора), либо выполняются без дополнительных проверок команды, стоящие после строки с ключ е вым словом else (вторая из привед е нных выше форм). При записи условия испол ьзуются операции отношения и логич е- ские операции, пр и веденные в табл . 2.8 , 2.9 темы 2. В условных выражениях можно использовать не только переме н- ные, но и массивы. В тех случаях, когда значением таких выражений б у- дет массив, истинность условия наступает, когда истинным является у с- ловие для каждого элемента массива. Если хоть для одного элемента т а- кого массива условие будет ложным, то условие считае т ся ложным и для всего массива. Кроме того, ложность имеет место при использ о вании пустых массивов . Следующий фрагмент кода иллюстриру ет работу условного опер а- тора , в резу льтате выполнения которого переменная z получит знач е- ние – 1, так как матрица A содержит элемент, меньший 1, и вс е усл о вие сч и тается ложным. >> A = [7 8; 1 0]; if A >= 1 z = 1, else z = - 1, end 
3.1. Управление вычислением 75 Запись if A по своему действию полностью эквивалентна записи if A ~=0 и записи if all ( A (:)) . Запись if ~ A является более компактной формой записи if A ==0 . 3.1.1.2. Оператор переключения Оператор переключения switch предоставляет возможность ра з- ветвлен ия и выполнения операторов в зависимости от значения выраж е- ния переключения switch _ expr (скаляра или строки). Оператор п е- рекл ю чения использует ключевые слова switch ( « переключить » ), case ( « случай » ), otherwise ( « иначе » ) и имеет следующую конс т- рукцию: swit ch switch_expr case case_expr, statement, ..., statement case {case_expr1, case_expr2, case_expr3,...} statement, ..., statement ... otherwise, statement, ..., statement end Сначала вычисляется значение выражения переключени я switch _ expr , а затем п о лученный результат сравнивается с набором значений case _ expr , case _ expr 1 и так далее. В случае совпадения значени я выражения со значением, указанным после case , или с о д ним из значений из сп и ска case , выполняется нижестоящая ветка. Если нет совпадения ни с одним из перечисленных значений, то выполняется ве т- ка, стоящая после ключ е вого слова otherwise . Строк с ключевым словом case может быть много, а строка с ключевым словом othe r- wise – только о д на. В отличие от языка C ++ после выпол нения какой - либо из ветвей case происходит обязательный выход из оператора switch . При этом значения, заданные в других case , уже не проверяются, поэтому в ко н- струкции нет необходимости использовать оператор break . appl = 'MatLab'; switch upper(appl) case {'MATLAB','MATHCAD'} 
Т е м а 3 . ЭЛЕМЕНТЫ ПРОГРАММИРОВАНИЯ 76 disp('Application is numeric') case {'MAPLE','MATHEMATICA'} disp('Application is symbolic') otherwise disp (' Unknown application ') end 3.1.2. Операторы цикла Назначение о ператор ов цикла – циклическ ое повтор ение группы программного кода. В зависимости от способа определения условия пр е- кращения повторов различают два вида операторов цикла в M - языке си с- темы MATLAB. Цикл for предназначен для выполнения з а данного числа повторяющихся действий, цикл while – для действий , число к о- торых з а ранее не известно, но известно условие продолжения цикла. 3.1.2.1. Цикл while Цикл while использует ключевые слова while и end . Он им е- ет вид while expression statements end Здесь повтор участка кода statements продолжается до тех пор, пока выражение expression истинно (не равно нулю). В случае ма с- сивов и с тинность наступает, когда все элементы массива истинны. Следующий фрагмент вычисляет сумму отрезка ряда ∑1/ n !: S=0; n=1; x=1; while x > 1e - 10 S = S + x; n = n + 1; x = 1/fact orial(n); end Условием выполнения цикла служит требование к очередным сл а- гаемым быть больше некоторого заранее определ е нного числа: как тол ь- ко слагаемое станет меньше этого числа, суммирование прекратится. Для задания условия выполнения цикла используют ся операции о т- ношения. Задание более сложных условий производится с применением логических операторов ( см. табл . 2.8 , 2.9 темы 2) . Определение поря д ка 
3.1. Управление вычислением 77 выполнения логических операций выполняется при помощи кру г лых скобок. 3.1.2.2. Цикл for Цикл for используется пр и выполнении заранее определенного чи с ла повторяющихся действий. В конструкции цикла используются ключ е вые слова for ( « для » ) и end . Он имеет вид: for variable = expression statements end где variable – произвольно выбираемое программисто м имя пер е- м енной цикла . Тело цикла statements выполняется для всех во з- можных значений переменной variable . Набор возможных значений для переменной цикла поставляе т выраж е ние expression . Чаще всего в MATLAB выражение expression определяется с помощью операции формиро вания диапазон а зн а чений . В этом случае цикл имеет вид : for count = start:step:final statements end Здесь count – переменная цикла, start : step : final определяют диапазон ее значений. Цикл заканчивается, как только значение count становится больше f i n al . Переменная цикла может принимать не только целые, но и вещес т- венные значения любого знака. Следующий фрагмент кода демонстрирует работу цикла for на примере заполнения матрицы Гильберта . k=4; a = zeros(k,k); for m = 1:k for n = 1:k a(m, n) = 1/(m+n - 1); end end При каждом новом проходе переменные цикла m и n увеличиваются на единицу. В данном примере условием останова является исчерпание всех возможных значений переменной цикла. Т аким образом , использ о- 
Т е м а 3 . ЭЛЕМЕНТЫ ПРОГРАММИРОВАНИЯ 78 вание того или иного варианта о ператора цикла диктуется особенност я- ми конкре т ной математической задачи. Вместо операции задания диапазона можно явно указывать весь н а- бор возможных значений в виде вектор - строки, например : for n = [1, 3, 9] что привед е т к трем итерациям. Циклы for и wh ile можно прервать, если применить оператор break внутри тела цикла. Передать управление следующей итерации обоих циклов можно при п о мощи оператора continue . Обратите внимание Для повышения эффективности программы очень важно векториз о- вать алгоритм. Везде, где это возможно, вместо операторов цикла лучше применять эквивалентные по результатам векторные или ма т ричные операции, так как последние исполняются в системе MATLAB б ы стрее. Например, вместо k =0; for x = 0:0.01:2* pi k = k +1; y ( k ) = cos ( x ); end лучше использовать векторизованную версию кода: x = 0:0.01:2* pi ; y = cos ( x ); так как такой код быстрее исполняется и записывается короче. 3.2. Обработка исключительных ситуаций В MATLAB в отличие от многих языков программирования выпо л- нение некоторых нек орректны х математически е операций не прив о дит к завершению программы. Так, п ри делении положительного числа на н у ль получается Inf (бесконе ч ность), при делении отрицательного числа на н у ль получается – Inf (минус беск о нечность), при делении нуля на н у ль пол учается NaN ( Not - a - Number – не число). Во всех случаях выдается предупреждение об ошибке “ Warning : D i vide by zero ”. При этом программа не прекращает своей работы. Но встречаются так называемые исключительные ситуации – оши б- ки, приводящие к завершению прогр аммы. В этих случаях использов а- 
3.2. Обработка исключительных ситуаций 79 ние конструкци и try … catch позволя ет выделить и обработать т а кие ситуации, выполни в некоторые действия в случае возни к новения. try , statement , ..., statement , catch , statement , ..., statement , end Операторы, выполнение которых может привести к ошибке, закл ю- чаются в конструкцию между try и catch . Если эти операторы в ы- полняются без ошибок, то после них управление передается первой к о- манде, стоящей после ключевого слова end . Если возникает ошибка во в ремя в ы полнения любого из этих операторов, то управление передается блоку, заключенному между кл ю чевыми словами catch и end . Если и здесь встречается ошибка, то выполнение программы прекращается. 
ТЕМА 4 СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ Работа в интерактивном режиме требует постоянного ввода команд в к о мандной строке с клавиатуры. Такой режим удобен для выполнения простых операций. Но если объем операций велик, вычисления нужно повторять многократно или необходимо реализовать сложные алго ри т- мы, то работа из командной строки затрудняется. В этих случаях самым удобным способом выполнения к о манд MATLAB является оформление их в виде M - файлов. Последовател ь ность команд набирают и сохраняют в текстовых файлах, дополняют их комментариями и выполн яют из р е- дактора M - файлов или запускают из командной строки в командном о к- не Co m mand Window . Для работы с M - файлами предназначен встроенный текстовый р е- дактор M - файлов, который вызывается командой меню File | New ► M - file и работает в сво е м собственном окн е, обеспечивая создание, р е дактирование, запуск и отладку кода. 4.1. Типы M - файлов Файлы, содержащие команды и операторы MATLAB , называются M - файлами . С у ществует два типа M - файлов: файл - сценарии ( Script M - files ), содержащие последовательность команд , и файл - функции ( Fun c tion M - files ), в которых описываются функции с характеристиками , пре д- ставленными в табл . 4.1. 4.1.1. Сценарии Сценарий ( scrip t ) – это текстовый файл, в котором в нужном п о- рядке записаны к о манды, подлежащие последовательному выполнению. Сценарий про изводит вычисления как с переменными, которые опред е- ляются непосредственно внутри него, так и с переменными, ранее опр е- дел е нными в рабочем пространстве Workspace сист е мы MATLAB. Все переменные, которые создаются и используются в сценарии, сохр а- 
4.1. Типы M - файлов 81 няются в раб очем пространстве Workspace , после выполнения сцен а- рия они могут быть использованы для дальнейших вычислений в других сцен а риях и в командах, выполняемых из командной строки. Сценарию нельзя в момент его вызова передать для обработки в виде параметров допо лнительную информацию, не содержащуюся в рабочем пространс т- ве. Сц е нарий не возвращает результаты своей работы через выходные параме т ры. После создания сценария его надо сохранить в файле на диске. Этот файл может иметь произвольное имя (желательно, чтобы о но не совпало с именами файлов, вх о дящих в стандартную поставку системы MATLAB) с расширением в виде одной буквы m (например, file 1.m). С о- храненный сценарий в любой момент можно выполнить одним из сл е- дующих способов:  ц еликом или частично из редактора М - фай лов ;  ц еликом из командного окна, если набрать в командной строке имя файла (без расширения), содержащего сценарий, и нажать клавишу < Enter > ;  ц еликом из другого сценария, если в качестве команды указать имя файла (без расширения), содержащего сценарий. Дл я того чтобы MATLAB нашел и выполнил указанный сценарий, содержащий его М - файл должен находиться в текущем каталоге Cu r- rent Directory , либо путь к нему должен быть указан в пути поиска Search Path . 4.1.2. Функции Если первая строка М - файла начинается с определен ия function [<список вых. параметров>] = <имя фун к- ции>(<список вход. параме т ров>) то этот файл содержит определение М - функции. M - функция включает следующие компоненты:  строка заголовка функции задает имя функции, количество и п о рядок следования выходных и входных аргументов;  первая строка подсказки определяет исчерпывающее краткое назначение функции. Она выводится на экран с помощью команд lookfor или help ; 
Т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕ Н НЫЕ 82  текст подсказки представляет собой более детальное описание назначения и способов вызова функции , в ы водится на экран при и с- пользовании команды help ;  тело функции представляет собой непосредственно программный код, который реализует вычисления и присваивает значения выхо д ным аргументам ;  комментарий представляет собой текст внутри программного кода, опис ы в ающий алгоритм выполнения функции. Как функции, так и сценарии могут иметь все эти части, за искл ю- чением строки определения функции, которая имеет отношение только к функциям. Сравнительная характеристика M - сценариев и M - ф ункций пре д- став лена в табл. 4.1. Таблица 4 . 1 . Характеристика М - сценариев и М - функций М - сценарий М - функция Не допускает входных и выхо д- ных п а раметров Допускает входные и выходные п а- раметры Оперирует с данными рабочей области. Переменные со хран я- ются в рабочем пр о странстве Workspace По умолчанию внутренние переме н- ные являются локальными и храня т- ся во внутреннем рабочем простра н- стве, относящемся к данной фун к- ции Предназначен для автоматиз а- ции многократно использу ю- щихся последовательностей к о- м анд Используется для расширения во з- можностей языка MATLAB при со з- дании собственных прил о жений Не может использоваться в к а- честве оп е рандов в выражениях или в качестве а р гументов функций Может использоваться как с о ставная часть выражения или в качестве а р- г ументов другой фун к ции. Следующий код демонстрирует пример стандартного оформления M - файла на языке программирования системы MATLAB . function n = factorial(n) % FACTORIAL Factorial function. % FACTORIAL(N) for scalar N, is the product of all % the inte gers from 1 %to N, 
4.1. Типы M - файлов 83 % FACTORIAL(N) for N - D matrix, is the factorial for % each element of N. N = n(:); if any(fix(N)~=N)||any(N<0)||... ~isa(N,'double')||~isreal(N) error('MATLAB:factorial:NNegativeInt', ... 'N must be a matrix of non - n egative int e gers.') end n(N>170) = 171; m = max([1; n(:)]); N = [1 1 cumprod(2:m)]; n(:) = N(n+1); 4.1.2.1. Строка определения функции Строка определения функции ( Function Definition Line ) информирует MATLAB о том, что M - файл содержит функцию, опред е- ляет ее имя и указывает количество и порядок следования входных и в ы- ходных аргументов. Имя функции должно начинаться с буквы, может содержать любые бу к венно - цифровые символы и символ подчеркивания. Т ак как именование переменных и функций подчиняется определе н ным п равилам, проверить правильность определяемого имени можно при п о- мощи функции , кот о рая определит, допустимо ли данное имя. >> isvarname myfun Хотя имена функций могут быть любой длины, MATLAB использ у- ет только первые N символов имени (где N – это число, воз вращаемое функцией namelengthmax ) и игнорирует остальные. Поэтому важно обеспечить уникальность имени определя е мой функции по первым N символам. И мя текстового файла, содержащего функцию, состоит , как прав и- ло, из им е ни первой функции и расширения m . Обрати те внимание Хотя имя функции, указанное в строке определения функции, не обязательно должно совпадать с именем содержащего ее M - файла, рек о- мендуется использовать одно и то же имя в обоих случаях во избежание путаницы. 
Т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕ Н НЫЕ 84 Если имя файла и имя функции не совпад ают, то внутренне е имя функции игнорируется. Так, если файл func . m содержит определение функции newFunc , то вызов функции происходит по имени func . 4.1.2.2. Аргументы функции Входные аргументы функции, если имеются, заключаются в кру г- лые скобки и следуют после им ени функции. Если функция имеет н е- сколько выходных аргументов, то они заключаются в квадратные ско б- ки. Для разделения аргументов используется запятая. Например, объя в- ление функции с именем sphere , тремя входными и тремя выходн ы ми аргументами имеет следующи й вид: function [x, y, z] = sphere(theta, phi, rho) В зависимости от количества входных и выходных аргументов об ъ- явл е ния функции могут иметь следующие представления: function y = funcName(x) function [] = funcName(x) function funcName(x) function [x, y, z ] = funcName() function funcName Одна и та же функция может вызываться с разным числом входных и выходных а р гументов (механизм перегрузки функций). В этом случае при определении функции в списках входных и выходных аргументов должно указываться их максимал ьно во з можное количество. Имена фактических параметров, передаваемых в функцию, не об я- заны совпадать с именами формальных аргументов, указанных в опред е- лении функции. 4.1.2.3. Первая строка подсказки Первая строка подсказки ( H 1 Line ), которая называется так, пот о- му что является первой строкой текста подсказки, – это первая стр о ка комментария, следующая сразу же за строкой определения фун к ции. Т ак к ак она содержит текст комментария, то начинается со знака % . Она я в- ляется первой строкой текста, который появляется в к о мандном окне MATLAB , когда пользователь вызывает функцию справки help functionname . Функция lookfor functionname ищет и отобр а- жает в к о мандном окне только эту строку. Первая строка подсказки должна содержать р е зюмирующую информацию о функции. 
4.1. Типы M - файлов 85 4.1.2.4. Текст под сказки Система MATLAB рассматривает группу последовательных строк, начинающихся со знака % и следующих сразу же за первой строкой по д- сказки, как текст подсказки ( Help Text ) для функции. Первая строка без знака % в самой левой позиции строки означает конец текста подсказки. Весь этот набор строк вместе с первой строкой по д сказки выводится в командное окно системы MATLAB при исполнении команды help function _ name . Так как такую команду в первую очередь будут пр и- менять пользователи функции (а не разработчики), то желательно расп о- ложить в этих комментариях описательную информацию и сведения о правильном вызове этой функции. Если функция может вызываться с ра з ным числом входных и выходных параметров (перегрузка функций), то в тексте подсказки следует описать все в озможные комбинации арг у- ментов и их зн а чение в каждом случае. Система подсказки игнорирует любые строки комментария, поя в- ляющиеся после блока подсказки. 4.1.2.5. Тело функции или сценария Тело функции – это внутренняя часть функции, содержащая опис а- ние некоторог о действия. Тело функции содержит код, который выпо л- няет вычисления и присваивает значения выходным аргументам. Опер а- торы тела функции могут содержать блоки управления, вызовы функций, вычисления, присваивания, команды интерактивного ввода/вывода, ко м- мента рии и пустые строки. 4.1.2.6. Однострочный комментарий Комментарий – это часть программы, которая игнорируется инте р- претатором M - языка при выполнении и служит для удобочитаемости и с- ходного текста программы. Однострочным комментарием в MATLAB является любая послед овательность символов, располагающаяся за зн а- ком % и до конца текущей строки. Например , % Add up all the vector elements. y = sum(x) % Use the sum function. В дополнение к строкам комментария можно добавлять пустые строки в любом месте M - файла. Пуст ые строки игнорируются. 
Т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕ Н НЫЕ 86 4.1.2.7. Блок комментария Для записи комментария более чем на одну строку следует испол ь- зовать пару симв о лов %{ и %} . %{ This next block of code checks the number of inputs passed in, makes sure each input is a valid data type, then branc hes to start processing the data. %} Обратите внимание Операторы %{ и %} должны занимать отдельные строки непосре д- ственно перед блоком комментария и за ним. В эти строки нельзя вкл ю- чать никакой другой текст. 4.1.3. Типы функций Система MATLAB предлагает несколь ко типов функций для и с- пользования в пр о граммировании:  Первичные функции M - файлов ( The Primary M - File Functions ) – первые функции М - файлов, как правило, содержащие в себе осно в ную программу .  Подфункции ( Subfunctions ) – действуют как подпрограммы осно в- ных ф ункций, также используются для определения множестве н ных функций в пределах о т дельного М - файла .  Анонимные функции ( Anonymous Functions ) – являются быстрым способом создания функции из произвольного выражения MATLAB , не требующим созд а ния M - файла .  Вложенные функции ( Nested Functions ) – определяются внутри др у- гих функций. Улучшают читабельность программы, а также предо с- тавляют более гибкий доступ к переменным М - файла .  Перегруженные функции ( Overloaded Functions ) – имеют одно и то же имя, но отличаются количес твом и типом входных параметров. Действуют аналогично перегруженным функциям любого объектно - ориентированного языка програ м мирования .  Частные функции ( Private Functions ) – дают возможность огран и- чить доступ к функции. Их можно вызвать только из функций , на х о- дящихся в М - файл е в каталог е предыдущего уровня. 
4.1. Типы M - файлов 87 4.1.3.1. Анонимные функции Анонимные функции – это простая форма функции MATLAB , не требующая созд а ния M - файла. Она состоит из единственного выражения MATLAB и любого числа входных и выходных параметров. Определит ь анонимную функцию можно непосредственно в командной строке к о- мандного окна MATLAB , а также внутри М - файла. Это обеспечив а ет возможность быстрого создания простых функций без необходим о сти создания дополнительного M - файла. Синтаксис определения анонимной функции из выражения следу ю- щий: f = @( arglist ) expression Представленная ниже команда создает анонимную функцию, кот о рая вычисляет квадрат числа. При вызове этой функции MATLAB присва и- вает передаваемое значение переменной x и затем использует x в в ы- ражении x .^2 : sqr = @( x ) x .^2; Используется описанная функция следующим образом: a = sqr (5) a = 25 4.1.3.2. Первичные функции и подфункции Все функции, которые не являются анонимными, должны быть о п- ределены внутри M - файла. Каждый M - файл обязательно содержит пе р- вичную функцию, располагающуюся в файле самой первой, и может с о- держать любое число подфункций, которые следуют за основной фун к- цией. Первичные функции могут вызываться извне своего М - файла (из командной строки MATLAB или в функциях других М - файлов), в то время как подфункции не могут. Подфункции видимы только для пе р- вичной функции и для других функций , находящихся в да н ном М - файле. 4.1.3.3. Частные функции Частная функция – это разновидность первичной функции M - файла. Е е особенностью является то, что она видима только для огран и ченной группы функций. Данный тип функций удобен, если необходимо огр а- ничить доступ к функции. Частные функции размещаются в подкатал о- гах со специальным именем private . Они являются в и димыми только 
Т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕ Н НЫЕ 88 функциям, находящимся в каталоге предыдущего уро вня. Например, т е- кущий каталог Current Directory MATLAB установлен на каталог newmath . Подкаталог каталога newmath , названный private , с о- держит функции, которые могут вызываться только функциями из ne w- math . Поскольку частные функции видимы только в катало ге предыдущ е- го уровня, они м о гут использовать те же самые имена, что и функции в других каталогах. Это удобно при создании собственной версии опред е- ленной функции, поскольку оригинал с о хранен в другом каталоге. Так как MATLAB в первую очередь ищет частные фун к ции и только после этого стандартные функции M - файла, то, например, вместо неч а стной функции с именем test . m он найдет частную функцию test . m . 4.1.3.4. Вложенные функции Функции могут определяться внутри тела любой функции M - файла. Это называется вложением во внешнюю функцию. Вложенная функция может содержать любые компоненты других функций M - файла. В да н- ном примере функция B является вл о женной в функцию A : function x = A(p1, p2) ... B(p2) function y = B(p3) ... end ... end Подобно другим функциям в ложенная функция имеет сво е собс т- венное рабочее пространство, в котором хранятся используемые данной функцией переменные. Также она имеет доступ к рабочим пространс т- вам всех тех функций, в которые она вложена. Так, например, переме н- ная, которая определена в первичной функции, может использоваться фун к цией, вложенной в первичную, независимо от уровня вложенности. Точно так же переменная, которая определена во вложенной функции, может использоваться любой из функций, содержащих данную фун к- цию. 
4.1. Типы M - файлов 89 4.1.3.5. Перегрузка фу нкции Перегруженные функции в MATLAB действуют по такому же принципу, что и перегруженные функции большинства языков програ м- мирования. Перегрузка использ у ется для создания функций, отвечающих различным типам входных данных. 4.1.4. Видимость им е н функций Когда пользователь вводит в командной строке какое - либо имя, н а- пример name , MATLAB выполняет действия в следующей последов а- тельности: 1) и щет указанное имя среди переменных ; 2) и щет в текущем каталоге файл с именем name . m ; 3) п росматривает каталоги, указанные в пути поис ка Search Path , для поиска файла name . bi (встроенные функции) или name . m . Если существует более одной функции с одним и тем же именем, то порядок каталогов в пути поиска Search Path определяет, как ая функци я будет вызвана . MATLAB вызывает первую найденную фун к- цию. Для того чтобы вызвать функцию из каталога, распол о женного дальше в пути поиска, следует сделать этот каталог текущим. При запу с- ке M - сценария можно указать полный путь к соответствующ е му M - файлу. 4.1.5. Синтаксис вызова M - функций Входные пар аметры и возвращаемые значения могут быть скаляр а- ми или массивами различных размеров. Например, функция func1 принимает два массива произвол ь ных, но одинаковых размеров: function [ A, B ] = func1( M1, M2) A = [ M 1, M 2]; B = [ M 1; M 2]; Эти массивы в теле функции подвергаются операции конкатенации, в ы- полнимость которой гарантируют одинаковые размеры входных масс и- вов M 1 и M 2. Вызов созданной функции осуществляется из командного окна или из текста какой - либо другой функции обычным образом: записывается имя функции, после которого в круглых скобках через запятую перечи с- ляются фактические входные параметры . Фактические параметры, со 
Т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕ Н НЫЕ 90 значениями которых и будут выполняться действия, м о гут быть заданы числами (массивами чисел), именами переменных, уже имеющими ко н- кретные значения, а также выражениями. Если фактический параметр задан им е нем некоторой переменной, то реальные вычисления будут производиться с копией этой переменной (а не с ней самой). Это назыв а- ется передачей параметров по знач е нию . X1 = [1 2 3; 4 5 6]; X2 = [9 8 7; 6 5 4]; [Y, Z] = func1(X1, X2); В рассмотренном примере из двух входных матриц 2  3 получаются две выходные матрицы Y и Z : Y == [1 2 3 9 8 7; 4 5 6 6 5 4] Z == [1 2 3; 4 5 6; 9 8 7; 6 5 4] Очевидно, что при вызове функции не требуется с овпадения имен фактических ( X 1 , X 2 , Y , Z ) и формальных ( M 1 , M 2 , A , B ) входных и выходных пар а метров. Вызов функции [Y, Z] = func1([1 2],[3 4]); с двумя входными массивами размера 1  2 возвращает две выходные матрицы размера 1  4 и 2  2. Таким образом, одна и та же функция м о жет обрабатывать входные п а раметры различных размерностей. Одним из отличий M - функции от M - сценария является возможность использования M - функции в качестве составной части выражения. При этом если функци я возвраща ет несколько значений, т о в составе выр а- жений в качестве значения функции, применяемого для дальнейших в ы- числений, используется первое из во з вращаемых функцией значений. Следующий фрагмент кода иллюстрирует это пол о жение: func1([1 2],[3 4])+10 ans = 11 12 13 14 Так к ак при вызове функции фактическими параметрами, со знач е- ниями которых и будут выполняться действия, могут быть числа, масс и- вы чисел, имена переменных, уже имеющих конкретные значения, а также выражения, то могут возникнуть ош и бочные ситуации, связанные с н есовпадением типов фактических и формальных п а раметров. MATLAB не выполняет никаких проверок на эту тему, а просто переда е т управление функции. Чтобы избежать, по возможности, возникновения 
4.1. Типы M - файлов 91 таких ош и бочных ситуаций, следует в теле M - функций осуществлять пр оверку входных пар а метров. Для написания такого кода используются конструкции управления. 4.1.5.1. Проверка параметров M - функций Несовпадение типов, размеров и числа фактических и формальных параметров в M - функции приводит к их неправильной работе. Ж ел а- тельно вст раивать внутрь кода M - функций проверки входных параме т- ров , т ак как пользователь M - функции всегда может ошибиться при е е вызове. Например, функция func 1 предполагает использование в качес т- ве первого и второго аргументов массив ов одинаков ых размер ов . Если п ол ь зователь по ошибке задаст фактические параметры в виде массивов ра з ных размеров, то в процессе выполнения функции возникнет ошибка. Чтобы избежать этого, можно в теле фун к ции организовать проверку размеров первого и второго параме т ров: function [A, B] = func1(M1, M2) if size(M1) ~= size(M2) error('Error in parameters size') end A = [ M 1, M 2]; B = [ M 1; M 2]; При вызове функции func 1 с неправильными размерами первого и второго аргуме н тов встроенная функция системы MATLAB error будет корректно ост анавливать всю работу и выводить в командное о к но MATLAB диагностическое сообщение, после чего пользователю ост а- нется лишь повторно вызвать функцию func 1 , но уже с правильными параметрами. Для проверки общего числа фактических параметров в системе MATLAB предусмотрены две переменные nargin и nargout , с о- держащие соответственно колич е ство входных и выходных аргументов, фактически переданных функции при вызове. Тогда проверка на число параметров выполняется следующим образом: if nargin ~= 2 error('Bad nu mber of parameters') end if nargout > 2 
Т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕ Н НЫЕ 92 error('Must be <=2 return values') end Такие проверки приводят к тому, что функцию можно вызвать тол ь- ко с правильным числом входных параметров и возвращаемых значений. Перечень функций, используемых для орга низаций проверок вхо д- ных и выходных аргументов , представлен в табл. 4.2 В случае, когда функция допускает многовариантность работы при разном числе входных аргументов и возвр а щаемых значений (как многие встроенные функции системы MATLAB ), необходимо при пр оверках их числа вместо прекращения работы функции осуществлять переход на разные ветви выполнения. В определении функции при этом нужно и с- пользовать максимально используемое в теле функции число формал ь- ных входных и выходных параметров. Степень подробност и проверок зависит от предназначения функции. Е с ли предполагается передача функции для внешнего использования, то проверки н е обходимо сделать более строгими, а текст подсказки, выводимый в командное окно по к о- манде help , более подробным. Таблица 4 . 2 . Функции MATLAB для работы аргументами Ф ун к ци я Назначение nargchk Проверка количества входных аргументов nargin Проверка количества входных аргументов nargout Проверка количества выходных аргуме н тов varargin С писок входных аргументов переменной длины varargout Список выходных аргументов переменной длины inputname Определение имени переменной по номеру входного а р- гумента М - функции Обратите внимание  Функции оформляются в виде текстовых файлов с расширением m .  М - файлы могут содержать коды нескольких функций. Первая фун к ция в файле – это первичная (основная) функция, вызываемая по им е ни М - файла. Другие функции внутри файла – это подфункции, которые являются видимыми только для основной функции и других подфун к- ци й этого файла.  Имя первичной функции обычно совпадает с именем M - файла. Из к о- мандной строки можно вызвать только первичную функцию, все о с- тальные функции в ы зываются только внутри файла. 
4.1. Типы M - файлов 93  Каждая функция имеет собственный заголовок. Подфункции следуют друг з а другом непрерывно. Ключевое слово function или конец файла означает конец функции (никаких специальных признаков ко н- ца функции нет). Подфункции м о гут вызываться в любом порядке, в то время как основная функция в ы полняется первой.  При обращении к функции компилятор ищет файл с соответству ю щим именем, компилирует его и выполняет.  Для удаления откомпилированной функции из памяти используется команда >> clear func _ name .  Если при выполнении функции включен режим echo , то функция будет выполняться в режиме инте рпретации, и на экран будут выв о- диться результат ы в ы полнения каждого оператора.  Функции внутри одного и того же М - файла не могут обращаться к о д- ним и тем же переменным, если они не объявлены глобальными пер е- менными внутри соответствующих функций или не пер еданы им в к а- честве параметров.  Справка help видит только основную функцию и не видит подфун к- ци и .  В качестве имени подфункции можно использовать имена функций системы MATLAB , т. к. когда приходит вызов функции из М - файла, то MATLAB в пе р вую очередь проверя ет, не является ли эта функция подфункцией.  Все функции перегружаемы.  Новые функции добавляются к словарю системы MATLAB и стан о- вятся досту п ными наряду со встроенными функциями.  MATLAB различает верхний и нижний регистр.  Переменные vargout , vargin имеют т ип cell – массив ячеек, ка ж- дый элемент которого может иметь разный тип. Они возвращают (н а- значают) список выхо д ных (входных) аргументов переменной длины.  Переменные nargout , nargin определяют число реально зада н- ных выхо д ных (входных) аргументов функции.  Оп ератор return – это оператор выхода из функции. При вводе в к о- мандной стр о ке оператор return позволяет закончить отладку.  При возможной работе функции с разным числом входных аргуме н тов и возвращаемых значений необходимо в определении функции зад а- вать макс имально возможное число как первых, так и вторых. 
Т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕ Н НЫЕ 94 4.2. Переменные и их о бласть действия Область действия ( scope rules ) переменной – это правила, кот о- рые устанавливают, какие данные доступны из данного места програ м- мы. В языке MATLAB каждая функция – э то отдельный блок програ м- мы. Попасть в тело функции нельзя иначе, как через вызов данной фун к- ции. С точки зрения области действия переменных различают три типа переменных: гл о бальные, локальные и формальные параметры. Правила области действия определ я ют, г де каждая из них может применяться. Локальные переменные – это переменные, объявленные внутри функции. Локальная переменная доступна только внутри функции, в к о- торой она объявлена , и существует до тех пор, пока выполняется фун к- ция. При выходе из функции эт а переменная и ее значение тер я ю тся. Формальные параметры – это переменные, объявленные при опис а- нии функции как ее аргументы. Функции могут иметь некоторое колич е- ство параметров, которые используются при вызове функций для пер е- дачи значений в тело функции . Формальные параметры могут использ о- ваться в теле функции так же, как локальные параметры. Область дейс т- вия формальных параметров – блок, являющийся телом функции. Глобальные переменные в языке MATLAB – это переменные, об ъ- явленные при п о мощи ключевого сло ва global : global name _1, name _2, … Как правило, каждая М - функция использует локальные переменные, которые изолированы от переменных других функций и рабочей обла с- ти. Функция располагает собственным, изолированным от рабочего пр о- странства системы MATLAB, пространством переменных. Внутри фун к- ции не видны переменные, определ е нные в к о мандном окне MATLAB , – они являются внешними по отношению к функции. 4.2.1. Глобальные переменные Одним из каналов передачи информации из командного окна сист е- мы MATLAB в M - функцию и из одной функции в другую является м е- ханизм параметров функции . Другим таким механизмом являются гл о- бальные переменные . Если несколько фун к ций, сценариев и, возможно, базовое рабочее пространство Workspace системы MATLAB объя в- ляют некоторую переменную гло бальной, то в этом случае все мод у ли 
4.2. Переменные и их область действия 95 используют одну и ту же копию этой переменной. Присваивание знач е- ния глобальной переменной возможно из любой функции, где эта пер е- менная объявлена глобальной. Если эта переменная в момент объявления не существует, то ей присва и вается значение пустого массива [] . Обратите внимание  Команда global name _1,… определяет переменные как глобал ь- ные.  Команда clear global name _1,… удаляет указанные глобал ь ные переме н ные.  Команда clear global удаляет все глобальные переменные.  Кома нды who global и whos global выводят список глобал ь- ных пер е менных.  Команда isglobal ( name _1) определяет, является ли указанная переменная глобальной.  Если при объявлении переменной глобальной уже существует пер е- менная с тем же именем в рабочей области, то M ATLAB выдает пр е- дупреждающее сообщение и переводит переменную в разряд глобал ь- ных переменных . 4.2.2. Устойчивые переменные Устойчивые переменные ( persistent variables ) – это локальные пер е- менные, сохраняющие свое значение между вызовами функции. Усто й- чивые перем енные обладают следующими свойствами:  Устойчивые переменные объявля ю тся и использу ю тся только в пред е- лах M - функции.  При объявлении устойчивой переменной MATLAB присваивает ей значение [] . Затем переменной присв аивается требуемое знач е ние.  Система MATLAB н е очищает устойчивые переменные, пока фун к ция существ у ет. Значение устойчивых переменных сохраняется от одного вызова функции до другого.  Переменная должна быть объявлена устойчивой до того, как она б у дет использоваться в функции. Поэтому обычно объявление переме н ных устойчивыми пом е щается в начало функции.  Объявить устойчивую переменную можно при помощи команды persistent name _1,… 
Т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕ Н НЫЕ 96  MATLAB очищает все устойчивые переменные, используемые в функции, если функция очищается по команде clear func _ name или если р едактируется M - файл, содержащий данную функцию. Следующий фрагмент код а демонстрирует использование устойч и- вой переме н ной . function findSum(inputvalue) persistent SUM_X if isempty(SUM_X) SUM_X = 0; end SUM_X = SUM_X + inputvalue 4.3. Отладка M - функций В среде программирования MATLAB имеются возможности отла д- ки разрабатываемых функций, то есть существуют способ ы , при помощи которых можно выявить месторасположение ошибок и их причину. При возникнов е нии ошибки в процессе выполнения M - функции в командное ок но выводи т ся приблизительное диагностическое сообщение и номер строки, в кот о ром, по мнению MATLAB, произошла ошибка. Другим способом отладки функции является применение точек останова и пош а- гово го выполнения функции при помощи встроенного р едакт о ра - о тладч ика medit . exe . Чтобы поставить точку останова на какой - либо строке кода фун к- ции, следует установить курсор на нужной строке и нажать клавишу < F12 > . П овторное нажатие клавиши < F12 > на этой строке убирает точку останова . Точку останова можно поставить также , выполни в к о- манду меню Debug | Set / Clear Break P oint . В строке слева поя в- ляется красный кружок, указывающий на то, что в данной строке пр о- ставлена точка остан о ва. После этого, не закрывая окна р едактора - о тладчика, следует пер е- ключ ить при помощи мыши фокус ввода в командное окно MATLAB и обычным образом запус тить функцию на выполнение. Си с тема MATLAB выполнит все команды до первой точки останова и сдел а ет паузу. В строке останова появ и тся зеленая стрелка. Теперь можно пр о- сматривать фактические значения вход ных параметров функции, тек у- щие значения глобальных и локальных переменных, значения выраж е- ний. Чтобы просмотреть значение переменной, достаточно подвести ку р- 
4.3. Отладка M - функций 97 сор к е е имени в тексте функции, после чего на экране появится вспл ы- вающий ж е лтый прямоугольник со значением п е ременной внутри него. С одержимое любой переменной также может быть выведено в коман д- ном окне обычным указанием ее имени и нажатием клавиши < Enter > . В режиме отладки приглашение командной строки принимает вид K >> . Затем можно продолжить работу программы в одном из отладочных р е- ж и мов. Пункты меню и кнопки панели инс т рументов позволяют выполнять о т ладочные действия , представленные в табл. 4.3. Таблица 4 . 3 . Пункты меню отладки р едактора - о тладчика med it . exe Пункт меню Описание Set / Clear Brea k- Point F 12 Поставить /убрать точку останова Clear All Brea k- Points Убрать все точки останова Step In F11 Выполнять построчно с заходом в вызыва е- мые фун к ции Single Step F10 Выполнять построчно Continue Выполнять до следующей точки останова Quit Debugging Завершить отладку Stop if E r- rors/Warnings… Установить режимы отладки при возникн о- вении о п ределенных ситуаций 
ТЕМА 5 ОБЪЕКТНО - ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Все в мире есть объекты. Подобные объекты обладают опреде ле н- ным набором свойств и поведением, т. е. объединяются в классы. Класс оп и сывает тип объекта и определяет, какими свойствами будет обладать объект и какие действия к нему могут быть применены. Объект – это э к- земпляр (представитель) некоторого класса. Совр еменное объектно - ориентированное программирование осн о- вано на возможности введения новых типов данных и определения оп е- раци й для них. Наиболее важное понятие языков ООП – это понятия объекта ( object ). Объект – это логическая един и ца, которая содержит данны е и правила ( методы ) обработки этих данных. В языке MATLAB в качестве таких правил обработки выступают функции. 5.1. Основные понятия ООП Язык MATLAB обладает рядом важнейших характеристик, прис у- щих объектно - ориентированным языкам. Инкапсуляция ( Encapsulatio n of Data and Methods ) – скрытие внутренней реализации объектов. Понятие инкапсуляции озн а- чает, что в качестве единого целого рассматривается объединение нек о- торой группы данных и некоторой группы функций. Свойства объе к тов хранятся в структурах данных, а поведение об ъ ектов реализуется в виде функций объектов. В объекте реализована защита данных: к да н ным, а также к функциям, расположенным в каталогах privat e , нет доступа извне. Свойства объектов не видны из Command Line . Непосредс т- венный доступ к ним можно получить только внутри методов класса. До - ступ к свойствам объектов происходит только через вызовы соответс т- вующих методов класса. Перегрузка функций и операций ( Function and O p e r- ator Ove r loading ) – использование стандартных операторов и н а- званий функций для работы с объектами класса. Когда вызывается с у щ е- ствующая в MATLAB функция с об ъ ектом класса в качестве входного 
5.1. Основные понятия ООП 99 аргумента, MATLAB сначала проверяет, определ е на ли такая функция в классе. Если – да, то MATLAB вызывает ее, иначе – обычную функцию MATLAB . Наследование ( Single and Multiple Inheritance ) позволяет одним объектам (потомкам) приобретать атрибуты и свойства других объектов (родителей). Наследование позволяет строить иерархию объектов, переходя от общего к частному, уточняя и конкретизируя об ъ- ек т. При простом наследовании (один класс - родитель) дочерний объект включает в себя все поля родительского объекта, и при работе с ним можно обращаться к методам родительского класса. К классу - потомку добавляются новые поля, определяются новые методы и, возм ожно, п е- реопределяются некоторые методы родительского класса. Новые методы дочернего класса не могут применяться к объектам родительского кла с- са. Команда >> obj = class ( s ,' class _ name ') создает объект класса MATLAB class _ name , используя структуру s в каче стве ша б лона. Такой синтаксис действителен только для функции class _ name , определенной в M - файле с именем class _ name . m в кат а логе, названном @ class _ name . Для реализации множественного наследования (несколько классов - родителей) пр и меняется команда >> obj = class(s,'class_name',parent1,parent2,...) которая из структуры s создает объект класса class _ name , насл е- дующий методы и поля родительских классов parent 1 , parent 2 и т. д. Создаваемый класс унаследует все данные и методы всех родителей. Если у нескольких ро дителей совпадут имена каких - либо методов, то приоритет при вызове у потомка получат методы классов, идущих пе р- выми в сп и ске параметров функции class() . Агрегирование ( Aggregation ) – создание объектов из н е- скольких уже существующих объектов (например, соз дание объекта «р а- циональная дробь» из двух об ъ ектов класса «полином»). Вместе с тем язык программирования MATLAB отличается от др у- гих объектно - ориентированных языков по некоторым важным пунктам. Среди них:  В MATLAB не реализован последний принцип объектно - ориентированного программирования – полиморфизм ( polymo r- phism ), т. е. возможность вызывать методы классов - потомков через 
Т е м а 5. ОБЪЕКТНО - ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 100 интерфейсы базовых классов. Конкретнее, в MATLAB нет ничего п о- добного механизму виртуальных функций в языке программиров а ния C++. MATLA B не поддерживает виртуального наследования ( Vi r- tual Inher i tance ) и виртуальных базовых классов ( Virtual Base Classes ).  В MATLAB нет эквивалента методу destructor . Для удаления объекта класса из рабочего пространства Workspace используется функция clear .  В MATLAB нет эквивалента понятию « абстрактный класс » ( A b- stract Class ).  В MATLAB тип переменной или соответствующий класс не объявл я- ется и не описывается, а определяется автоматически при создании объекта. В системе MATLAB все типы данных разработаны как кл ассы ООП. Все основные типы данных MATLAB: числовые массивы ( double ), ра з реженные матрицы ( sparse ), массивы ячеек ( cell ), структуры ( struct ) и символьные строки ( char ) представляют собой встроенные классы, а п е ременные – объекты этих классов. Принадлежност ь того или иного объекта системы MATLAB к одному из классов представлена сх е- мой на рис. 2.2. Пользователь имеет возможность вводить свои классы, а также п е- реопределять и доопределять методы всех существующих классов. Сх е- ма показывает, что классы пользовате ля User Classes наслед у ют родительскому классу struct , т. е. все новые типы (классы) данных б а зируются на структурах. 5.2. Правила создания класса В чем отличие «создать класс» и «создать объект»? Объект – это э к- земпляр класса. Класс – это абстрактная сущнос ть. Рассмотрим послед о- вательность создания класса в среде MATLAB на примере класса p o- lynom , подробно описанном в справочной д о кументации по пакету.  Один из первых шагов создания нового класса – выбор структуры данных для и с пользования в классе. Объекты хр анят свои данные в структурах. Все поля стру к туры, хранящей данные класса, являются скрытыми ( private ), т . е . их поля доступны только для методов да н- ного класса и его потомков. Напрямую в выражениях их использ о вать нельзя. 
5.2. Правила создания класса 101  Объекты нового класса создаются п ри помощи специальной функции - конструктора класса. Ее имя должно совпадать с назван и ем класса. В рассматриваемом примере это функция polynom , описа н ная в файле polynom . m .  Класс содержит функции - методы для работы с его объектами, реал и- зованные с помощью M - ф айлов. Функция - метод – это функция, один из аргументов которой – объект данного класса. Имя M - файла – имя действия, реализованного функцией, описанной в этом файле. Напр и- мер, для сложения двух полиномов должна быть реализована функция сложения, т. е. долже н существовать файл plus . m .  Функции - методы класса должны размещаться в специальной папке - контейнере – каталоге с именем … \ @ className . Имя начинается с символа '@' , а в остальном должно совпадать с именем класса. В MATLAB класс – это папка, функции - методы класса – это M - файлы, находящиеся в этом каталоге.  Методы класса можно вызывать откуда угодно.  Для работы с классом текущий каталог Current Directory до л- жен быть о т крыт на папке, содержащей папку @ className .  Папка @ className должна входить в каталог, опре деленный в п у ти поиска Search Path среды MATLAB. Саму папку - контейнер мет о- дов добавлять в путь MATLAB не нужно. Например, если класс p o- lynom находится в c : \ temp \ @ polynom , то необходимо ввести к о мандную строку >> addpath c : \ temp  В классах существуют скрытые частные ( private ) функции , разм е- щаемые в папке @ className \ private \ . Все файлы, наход я щиеся в этом подкат а логе, доступны только внутри методов данного класса. Пользователь не может их вызывать из командной строки или из др у- гих каталогов. Private - функции не имеют в качестве входного арг у- мента объект класса. Private - функции обычно используются как всп о- могательны е функци и для реализации задач класса и не оперирую т непосредственно с объектом класса.  После каждого переопределения класса (изменени е названия или ч и с- ла полей класса , редактировани е функций ) необходимо ввести изм е- нения в сеанс MATLAB , для чего подается команда >> clear classes . Эта команда удаляет из памяти MATLAB «старое» опред е- лени е класса, а также очищает раб о чее пространство WorkSpace . 
Т е м а 5. ОБЪЕКТНО - ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 102 5.3. Методы к ласса Для нового класса следует определить методы обработки объектов, написав соответствующие функции. Какие методы должны быть реал и- зованы в классе? Помимо функций, реализующих основное назначение создаваемого класса, в его определение необходимо включить также ряд стандартных методов, которые позволят данному классу вести себя в среде MATLAB аналогично встроенным типам данных. В табл . 5.1 пер е- числены основные методы, включенные в классы MATLAB . Таблица 5 . 1 . Базовые методы классов MATLAB Метод класса Описание class co n structor Создание объекта класса display Вывод содержимого объекта, если выражение с п е- ременной этого класса не завершается разделит е лем точкой с запятой set и get Доступ к свойствам объекта . Функция get предн а- значена для получения значений свойств, а функция set – для уст а новки новых значений subsref Индексная ссылка, т. е. использование индексов или указателей полей к объекту, размещенному в пр а вой части оператора присваивания (переопредел ение м е- тодов для a ( i ) , a { i } , a . field ) subsasgn Индексное присваивание, т. е. использование инде к- сов или указателей полей к объекту, размеще н ному в левой части оператора присваивания (переопредел е- ние методов для a ( i )= b , a { i }= b , a . field = b ) subindex Индексн ый дескриптор, т. е. использование объекта класса в качестве целочисленного индекса другого объекта (переопр е деление методов для x ( a ) ) end Последний индекс по указанной размерности конверторы double , char Преобразование объекта одного класса к другому кл ассу 
5.3. Методы класса 103 5.3.1. Конструктор класса Язык программирования MATLAB не имеет деклараций новых классов и типов. Объекты класса создаются в момент вызова функции - конструктора этого класса. Т а ким образом, функция - конструктор – это первая функция, которая должна быть о п ред елена при создании нового класса и размещена в папке - контейнере класса. Имя функции - конструктора совпадает с названием класса и размещается в M - файле с ан а логичным именем. Рассмотрим пример конструктора, создающего объекты класса polynom . Этот ко н структор должен находиться в M - файле @polynom/polynom.m . Данный конструктор создает полином из з а- данного вектора коэффициентов полинома при убывающих степенях п е- ременной x . function p = polynom(a) %POLYNOM Polynomial class constructor. % p = POLYNOM(v) if nargi n == 0 p.c = []; p = class(p, 'polynom'); elseif isa(a,'polynom') p = a; else p.c = a(:).'; p = class(p,'polynom'); end При вызове конструктора динамически создается объект, который может быть ин и циализирован некоторыми начальными значениями. В зависимости от способа выз о ва конструктора существует три типовые ситуации:  Конструктор по умолчанию. Конструктор вызывается без аргументов, например : p = polynom () . В этом случае создается шаблон объе к- та, обычно с пустыми полями. В отдельны х случаях поля инициализ и- р у ются некоторыми начальными значениями.  Конструктор копирования. На вход конструктора подается объект т о го же класса, что и создаваемый объект, например : a = polynom ( p ) . В этом случае конструктор обычно возвращает копию объекта. При этом в конструкторе необходимо испол ь зовать функцию 
Т е м а 5. ОБЪЕКТНО - ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 104 isa ( p ,’ polynom ’ ), чтобы определить, является ли входной арг у- мент объектом данного класса.  Конструктор с параметрами. Конструктору передаются входные арг у- менты, например: a = polynom ( [3 0 - 2 5] ). Конс труктор со з- дает структуру и инициализирует ее поля, используя входные да н ные. З а тем из этой структуры конструируется сам объект при помощи встроенной функции class () . У этой функции есть два обязател ь ных параметра. Первый – структура, которая будет предста влять да н ные объекта, а второй – текстовая строка, содержащая имя создава е мого кла с са. Подобная последовательность действий обычна для конструктора объектов любого класса . Структура, хранящая данные объекта, может быть сколь уго д но сложной. 5.4. Перегрузка ф ункций и операторов В MATLAB предусмотрена возможность изменения поведения оп е- раторов и функций системы MATLAB , когда в качестве операнда или а р- гумента выступает объект класса. Это достигается путем переопредел е- ния (перегрузки) соответствующих функций. П ереопределение функций класса дает возможность обработки с помощью этих функций различных типов данных единообразно. 5.4.1. Преобразование объектов к др у гому классу Часто бывает необходимо преобразовать объект одного класса к другому классу. Такая возможность обеспечи вается созданием для и с- ходного класса специальн ой функци и - конвертор а . Имя этой фун к ции и имя ее M - файла должно совпадать с именем класса, к которому она б у- дет преобразовывать исходный объект. Например, для преобраз о вания объекта класс а polynom обр атно в вектор его коэффициентов испол ь- з у ется метод double () : function c = double(p) % @polynom/double.m. c = p.c; Теперь можно преобразовывать векторы в полиномы и обратно: >> p = polynom([1 2 - 4 5]); double ( p ) 
5.4. Перегрузка функций и операторов 105 ans = 1 2 - 4 5 Для преобразования о бъекта к текстовому виду, применяемому при отображении объекта, используется метод char () . В примере класса polynom этот метод определяется в M - файле @ polynom / char . m и используется следующим образом: >> p = polynom([1 2 - 4 5]); char(p) ans = x ^3 +2* x ^2 - 4* x + 5 Преобразование к текстовому виду используется в методе di s- play () , кот о р ы й относится к базовым методам классов MATLAB . Это т метод вызывается всякий раз, когда в среде MATLAB введено выраж е- ние, не заве р шенное точкой с запятой. function display(p ) % @polynom/display.m disp(' '); disp([inputname(1),' = ']) disp(' '); disp([' ' char(p)]) disp(' '); 5.4.2. Переопределение математических оп е раторов Одним из важнейших способов управления поведением объекта служит переопред е ление для него основны х математических операторов. Для этого необходимо в папке - контейнере, содержащей методы класса, создать M - файл с именем, соответствующ и м имени переопределяемого оператора, и в этом файле определить функцию с этим же именем. Н а- пример : function r = plus(p,q) % @POLYNOM/PLUS.M p = polynom(p); q = polynom(q); k = length(q.c) - length(p.c); r = polynom([zeros(1,k) p.c] + [zeros(1, - k) q.c]); Такая функция, определенная в файле @polynom/plus.m , позв о- лит складывать полиномы, как обычные объекты MATLAB – чи сла, ве к- 
Т е м а 5. ОБЪЕКТНО - ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 106 торы или матрицы . При этом преобразование формальных аргуме н тов к типу полинома в первых строках этой функции, а также в ы зовы функции zeros в методе сложения полиномов обеспечивают правильно сть в ы- числ ения выражени й с полиномами разной степени и сме шанны х выр а- жени й : >> p = polynom([1 2 - 1 3]); q = polynom([4 - 5]); p1 = p + 1; s = p + q ; Если MATLAB встречает вызов функции, содержащей объект кла с- са в качестве аргумента, то поиск такой функции всегда н ачинает ся с просмотра папки - контейнера, сод ержащей методы данного класса. Такой подход означает, что при создании нового класса всегда есть возмо ж- ность переопредел ения люб ой функци и для данн о го класса. В табл . 5.2 приводится список имен методов большинства операт о- ров MATLAB . Таблица 5 . 2 . Операторы MATLAB Оператор Выражение M - ф ункция Описание + + a uplus ( a ) Унарный плюс - - a uminus ( a ) Унарный минус + a + b plus ( a , b ) Бинарное сложение - a - b minus(a,b) Бинарное вычитание * a*b mtimes(a,b) Матричн ое умножение .* a .* b times ( a , b ) Поэлементное умнож е- ние \ a \ b mldivide ( a , b ) Решение систем лине й- ных ура в нений AX = B => X = A – 1 B . \ a . \ b ldivide ( a , b) Левое поэлементное д е- ление / a/b mrdivide(a,b) Решение систем ЛУ XA = B => X = BA – 1 ./ a./b rdivide(a, b) Правое поэлементное д е ление 
5.4. Перегрузка функций и операторов 107 Оператор Выражение M - ф ункция Описание ^ a^p mpower(a,p) Матричное возведение в степень .^ a.^b power(a,b) Поэлементное возвед е- ние в ст е пень ' a' ctranspose(a) Комплексно - сопряж ен - ное трансп о нирование . ' a.' transpose(a) Транспонирование > a>b gt( a, b) Бол ьше >= a>=b ge( a, b) Больше или равно < a<b lt( a, b) Меньше <= a<=b le( a, b) Меньше или равно == a==b eq( a, b) Тождественно ~= a~=b ne( a, b) Не равно & a&b and( a, b) Логическое И | a|b or( a, b) Логическое ИЛИ ~ ~a not(a) Логическое НЕ : : a :d:b colon(a,d,b) Формирование вектора : a:b colon(a,b) Формирование вектора display(a) Вывод на дисплей [] [a b] horzcat(a,b,…) Горизонтальная конк а- тенация [;] [a;b] vertcat(a,b,…) Вертикальная конкат е- нация a(s1,…,sn) subsref(a,s) Индексная ссылка a(s1,…,sn)=b subsasgn(a,s,b) Индексное присваив а- ние b(a) subindex(a,b) Индексный дескриптор По умолчанию объекты всех кла с сов имеют одинаковый приоритет, поэтому, как правило, при выполнении бинарных операций вызывается бинарный метод левого операнда выражения. Однако с уществует во з- можность изменения иерархи и приоритетов для разных кла с сов так, что в выражениях a + b и b + a всегда будет вызываться метод опера н да b . 
Т е м а 5. ОБЪЕКТНО - ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 108 Для повы шения приоритет а создаваемого класса по сравнению с другим классом необходимо в к онструкторе вызвать функцию sup e- r i orto () и в качестве ее аргумента указать текстовую строку – имя кла с са, приоритет которого в выражениях должен быть всегда ниже пр и- ор и тета создаваемого класса. Аналогично пони жение приоритет а созд а- ва е мого класса по сравнен ию с некоторым другим классом выполняется при помощи функци и inferiorto () , вызываемой в конструкт о ре . 5.4.3. Переопределение индексных операций Использование индексов или указателей полей к объекту, разм е- щенному в правой части оператора присваивания , называется индек с- ной ссылкой ( subscripted reference ) . Примерами индексных ссылок являются выражения вида A ( i ) , A { i } , A . field . Функция B = subsref ( A , S ) вызывается при обработке выражений такого в и- да, где A – объект, а S – массив записей со следующими полями:  type – строка, содержащая группы символов, которые определяют тип индексов: () – числовой массив, {} – массив ячеек, . – ма с сив записей;  subs – массив ячеек или строка, содержащая реально используемые символы, при этом разделитель : передается как строка. Наприм ер: >> A (1:2,:) вызывает метод subsref ( A , S ) , где S – массив з а- писей размера 1  1 с полями S . type =‘()’ и S . subs ={1:2,’:’} . >> A {1:2} вызывает метод subsref ( A , S ) , где S – массив зап и- сей размера 1  1 с п о лями S . type = ‘{}’ и S . subs = {1:2} . >> A . field вызыва ет метод subsref ( A , S ) , где S – массив з а- писей размера 1  1 с п о лями S . type = ‘.’ и S . subs = ‘ field ’ . >> A (1,2). name (3:4) вызывает метод subsref ( A , S ) , где S – массив записей ра з мера 3  1 с полями S (1). type = ‘()’ , S (2). type = ‘.’ , S (3). type = ‘()’ и S (1). su bs = {1,2} , S (2). subs = ‘ name ’ , S (3). subs = ‘{3:4}’ . Одно из возможных переопределений данного метода для класса polynom состоит в следующем: для объекта p данного класса выр а- жение p([3 4]) возвращает значения полинома при x = 3 и x = 4 . >> p = polynom ([1 0 - 2 - 5]); 
5.5. Идентифик ация объекта 109 >> p ([3 4]) ans = 16 51 Аналогично в случае операции индексного присваивания ( subscripted assignment ) вида A ( i ) = B , A { i } = B или A . field = B генерируется вызов функции A = subsasgn ( A , S , B ) , где S – та же структура, что и в предыдущем случае. П ереопределяемый метод индексирования subsindex () вызыв а- ется при использовании объекта A класса в качестве целочисленного массива индекс ов другого объекта B . Метод вызывается в выражении B (A) независимо для каждого указанного индекса. Этот метод обяза н возв ращать целочисле н ный массив реальных индексов, т ак как именно они и будут использоваться для извлечения значений из массива B . М е- тод вызывае т ся встроенными методами subsref () , subasgn () и может быть использован при переопределении этих методов для созд а- вае мого класса . 5.5. Идентификация объекта В MATLAB существует ряд функций (табл. 5.3), позволяющих р а- ботать с классами, а также проверять принадлежность объекта какому - либо кла с су. Таблица 5 . 3 . Функции для рабо ты с классами Функция Описание class ( p ) Определение класс а об ъ ект а isa ( p ,‘ polynom ’) Проверка принадлежност и объекта данн о- му кла с су isobject(p) Выявление принадлежности объекта как о- му - либо классу MATLAB met h ods(‘polynom’) Вывод списка методов для данно го кла с са whos p Вывод подробной информации об объе к те 
ТЕМА 6 ВЫСОКОУРОВНЕВАЯ ГРАФИКА Мощная графическая поддержка является одной из пяти соста в- ляющих системы MATLAB . При проведении исследований и вычисл е- ний важным этапом является анализ получаемой инфо р мации, которая часто представляется в виде больших массивов данных. Составной ч а- стью такого анализа является наглядное представление данных, т. е. в и- зуализация данных, выполняемая при помощи набора графических к о- манд. В MATLAB существует два уровня работы с гр а фикой:  Высокоуровневая графика ( High - Level Graphics ) вкл ю- чает команды и функции, предназначенные для построения гр а фиков в прямоугольных и полярных системах координат, трехмерных повер х- ностей и линий уровня, гистограмм, разного вида диаграмм, анимации и т. д. Графические команды высокого уровня автоматически контр о- лируют масштаб, выбор цветов, маркировку осей, не требуя манип у- ляций со свойствами графических объектов. Имеется также возмо ж- ность интерактивного оформления рисунков.  Дескрипторная графика ( H andle Graphics ) основана на низкоуровневых графических функциях. Каждому графическому об ъ- екту в составе рисунка ставится в соответствие некоторый описатель ( дескриптор ), через который можно получить доступ ко всем характ е- ристикам графического объекта и упр авлять его свойствами. Прим е- нение дескрипторной графики требует знания основ объектно - ориентированного программирования. Все графические изображения строятся в специальном графическом окне Figure . Первый вызов в сеансе графической команды приводит к поя в л ению окна Figure с номером 1. Для создания нового окна следует выбрать пункт меню File | New ► New Figure или вызвать кома н- ду figure . Появится окно со следующим порядковым номером. Вызов к о манды figure ( N ) делает текущим существующее окно с номером N или со здает новое окно с указанным номером. Одновременно может быть открыто несколько графических окон. Переключение между окн а- 
6.1. Двумерная графика 111 ми может быть выполнено обычными способами перемещения от пр и- ложения к приложению: при помощи панели задач или нажатием Alt + Tab . Графич еские возможности системы MATLAB разнообразны. В пе р- вую очередь это наиболее простые в использовании функции, которые называют командами высокоуровневой графики. Само название отраж а- ет тот факт, что пользователю нет необходимости самому реализовывать все д етали работы с графикой. Команды высокоуровневой графики ре а- лизуют построение графиков разного вида в двумерном и трехмерном пространствах. Функции реализованы на основе ве к торн ой график и , при которой изображаемые объекты задаются координатами . Оформл е ние графиков, т. е. выбор цвета, типа линий и поверхностей, масштаба, нан е- сение подписей, вывод и маркировка осей коо р динат , происходит при помощи простых в применении команд. Во многих случаях режимы, н а- значенные по умолчанию, удовлетворяют требованиям пользо вателей. 6.1. Двумерная графика Система MATLAB предоставляет широкие возможности для визу а- лизации функций одной переменной. Она позволяет строить графики в линейном, логарифмическом и полулогарифмическом масштабе, испол ь- зовать декартову или полярную систем ы к оординат. 6.1.1. Функция plot Построение графиков функции одной переменной в линейном ма с- штабе в декарт о вой системе координат осуществляется при помощи функции plot . Функция plot относится к функциям высокого уро в- ня. При ее выполнении MATLAB выполняет целый ком плекс операций: система сама создает графическое окно с новым номером, строит оси к о- ординат, вычисляет диапазоны изменения переменных x и y , проста в- ляет на осях метки и соответствующие им числовые значения и, нак о нец, строит через опорные точки график функ ции некоторым и выбранным и по умолч а нию цветом и стилем линии . Следующие команды >> x = - 2.5*pi : 0.01 : 2.5*pi; y = sin ( x ); plot ( x , y ) 
Т е м а 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА 112 вычисляют массив y значений функции sin для заданного набора а р- гументов и с помощью команды plot строят график фун кции , как п о- казано на рис. 6.1 . Рис. 6 . 1 . График функции Если, не убирая с экрана дисплея первое графическое окно, ввести ещ е одну кома н ду >> plot ( x , 0.5* cos ( x )) то в том же самом графическом окне появляетс я график новой функции, при этом старые оси координат и график в н е м пропадают. Для построения нескольких графиков в одних координатных осях следу ет перед исполнением второй графической команды plot выпо л- нить команду, которая предназначена для управления режимом сохран е- ния текущего графического окна >> hold on В результате будет получено изображение , представленное на рис. 6.2. Того же самого можно добиться, вызвав функцию plot со следующ и- ми параме т рами: >> x = - 2.5*pi : 0.01 : 2.5*pi; y = sin(x); z = 0.5* cos ( x ); plot ( x , y , x , z ); 
6.1. Двумерная графика 113 Преимущество второго из указанных способов состоит в том, что в этом случае графики автоматически строятся разным цв е том. Рис. 6 . 2 . Графики двух функций Функции необязатель но должны быть определены на одном и том же отрезке. В этом случае при построении графиков MATLAB выбирает максимальный отрезок, содержащий все остальные. Важно только в ка ж- дой паре векторов значений аргумента и значений функции указать соо т- ветствующие дру г другу диапазоны. >> x1 = - 2*pi : 0.01 : 2*pi; x2 = - pi : 0.01 : pi; y = sin(x1); z = cos(x2); plot ( x 1, y , x 2, z ); К недостаткам построения нескольких графиков в пределах одних и тех же осей координат относится использование максимального диап а- зона изменения координат, что при несопоставимы х значениях двух функций приводит к плохому изображению одного из графиков. Если необходимо одновременно просматривать несколько графиков, то это можно сделать двумя способами. Во - первых, можно построить их в ра з- н ых графических окнах . >> x = - pi : 0.01 : pi ; y = sin(x); z = cos(x); u = exp(x); plot(x, y, x, z); figure ; plot ( x , u ); 
Т е м а 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА 114 В результате графики функций sin и cos выводятся в одном графическом окне, а график функции exp строится в другом графич е- ском окне , как показано на рис. 6.3 . Это происходит потому, что команда figure созда е т новое графическое окно, и все следующие за ней к о- манды построения граф и ков выводят их в новое окно. Рис. 6 . 3 . Вывод графиков в раз ные графические окна Вторым возможным решением рассматриваемой задачи одновр е- менного просмотра нескольких графиков является использование фун к- ции subplot . Эта функция позволяет создать в графическом окне н е- сколько систем координат, в каждую из которых можн о вывести гр а фики различных фун к ций. Функция subplot принимает три числовых аргумента, первый из которых равен числу рядов систем координат, второе число равно числу колонок, а третье число – номеру системы координат (номер отсчитыв а- ется вдоль рядов с пер еходом на новый ряд). Например, графическое окно, пре д ставленное на рис. 6.4 , выводится в результате выполнения к о манд >> subplot(1,2,1); plot(x, y, x, z) subplot (1,2,2); plot ( x , u ) 
6.1. Двумерная графика 115 Диапазо ны изменения переменных на осях координат в этом случае н е- зав исимы друг от друга. Рис. 6 . 4 . Вывод графиков в разные оси координат Ещ е одним способом вывода графиков является их построение в п о- лярных коорди натах. Сл е дующий код строит график функции sin (2* t ).* cos (2* t ) в полярных коорд и натах (рис. 6.5) . >> t = 0:.01:2*pi; polar(t,sin(2*t).*cos(2*t)) Рис. 6 . 5 . График функции в полярных координатах 
Т е м а 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА 116 Если для графика диапазоны изменения переменных вдоль одной или обеих осей к о о рдинат слишком велики, то можно воспользоваться функциями построения графиков в полулогарифмическом или логари ф- мическом масштабах. Для этого предназначены функции semilogx (л о- гарифмический масштаб по оси x ), semilogy (логарифмический ма с- штаб по оси y ) и lo glog (логарифмический масштаб по обеим осям). Рассмотренные примеры показывают, что функции высокоуровн е- вой графики MATLAB выполняют различные способы построения гр а- фиков без особых усилий со стороны пользователя. 6.2. Оформление графиков функций Построен ные графики функций должны быть максимально удобн ы- ми для восприятия , что достигается при помощи правильного оформл е- ния графиков . Рассмотрим ряд вопросов, связанных с оформлением вне ш него вида графиков функций – цветом, толщиной и типом линий, которым и пров едены сами графики, маркерами в дискретных вычисля е- мых точках, а также различными надписями в пределах графич е ского окна. 6.2.1. Изменение свойств линии Система MATLAB позволяет управлять видом линии графика, п о- строенного при п о мощи функций plot , semilogx , sem ilogy и loglog . Для этого предназначен дополнительный аргумент, помеща е- мый за каждой парой векторов координат. Этот аргумент заключается в апострофы и состоит из трех символов, которые определяют цвет, тип маркера и тип линии. Следующие команды позволяют придать графику вид красной сплошной линии, на которой в дискретных вычисляемых точках пр о- ставляются ч е рные квадраты. >> x = 0:0.1:3; plot( x, x, 'r', x, x, 'ks' ) Здесь функция plot дважды строит график одной и той же фун к- ции, но в двух разных стилях. П ервый из этих стилей ' r - ' определяет проведение сплошной линии красным цветом. Второй стиль ' ks ' з а- дает провед е ние ч е рным цветом квадратов на месте вычисляемых точек. Результат выполнения команд представлен на рис. 6.6. 
6.2. Оформление графиков функций 117 Возможные значения типов и цветов ли ний, типов маркеров пре д- ставлены в табл. 6.1. Таблица 6 . 1 . Свойства линии Тип линии Цвет линии Тип маркера - непрерывная c голубой . точка -- штриховая m фиолетовый + плюс : пунктирная y ж е лтый * зв е здоч ка - . штрихпунктирная r красный o кружок g зел е ный x крестик b синий s квадрат w белый d ромб k ч е рный v треугольник верш и- ной вниз ^ треугольник верш и- ной вверх < треугольник верш и- ной влево > треугольник верш и- ной вправо p пя тиконечная звезда h шестиконечная звезда Можно указывать один, два или три символа в зависимости от тр е- буемых изменений. В этом случае для остальных символов используются значения, установленные по умолчанию. Порядок, в котором указываю т- ся символы, н е является существенным, т . е . ' r + h ' и '+ hr ' прив о- дят к одинаковому результату. В общем случае функция >> plot ( x 1, y 1, s 1, x 2, y 2, s 2, … ) позволяет нарисовать в одной системе координат несколько графиков функций, ка ж дый со своим стилем s1 , s2 , … 
Т е м а 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА 118 Рис. 6 . 6 . Изменение свойств графика 6.2.2. Толщина линии Изменение толщины линии выполняется при помощи команд ни з- ко уровневой графики системы MATLAB , основанной на управлении свойствами графических объектов при помощи де скрипторов. Следу ю- щий код демонстрирует прорисовку графика с измененной толщиной линии . >> x = 0:0.1:6; hPlot = plot(x, sin(x)); set ( hPlot , ' LineWidth ', 6 ); Функция plot через опорные (вычисленные) точки строит график указанной фун к ции, создавая пр и этом графический объект типа Line , и возвращает его дескриптор ( handle ). Этот дескриптор передается в к а- честве входного параметра функции set . Функция set изменяет сво й- ства, которые указаны в качестве остальных аргументов. В результате замена свойства ' L ineWidth ' (толщина линии) на новое значение вм е- сто используемого по умолчанию 0.5 приводит к автоматической пер е- рисовке графика с измененной толщиной линии. Кроме использования дескриптора изменить свойства линии граф и- ка функции можно при помощи следующих действий. Необходимо щелчком мыши выделить линию на графике и выбрать в меню графич е- ского окна пункт Edit | Current Object Properties . Откр ы- вается диалоговое окно Property Editor , изображенное на рис. 6.7. 
6.2. Оформление графиков функций 119 Данное диалоговое окно позволяет изменить стиль, т олщину и цвет линии, размер, тип, цвет контура и цвет заливки маркера вычисляемых точек графика при помощи имеющихся полей редактирования. Кроме этого, нажав в диалоговом окне на кнопку Inspector … , можно в ы- звать инспектор свойств Property Inspector для дан ного граф и- ческого объекта и внести необходимые изменения в его свойства. Рис. 6 . 7 . Диалоговое окно Property Editor 6.2.3. Надписи на графиках Хорошее восприятие графиков во многом обеспечивается дополн и- тельными э лементами оформления: наличием координатной сетки, по д- писями к осям системы координат, заголовком и легендой. Для этого и с- пользуют команды, представленные в табл . 6.2. Применение приведе н- ных в таблице команд прида е т графи ческому изображению зако н ченный вид . 
Т е м а 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА 120 Таблица 6 . 2 . Функции оформления графика Функция Описание title (‘ string ’) Вывод заголовка xlabel (‘ string ’) Маркировка оси x ylabel (‘ string ’) Маркировка оси y zlabel(‘string’) Маркировка оси z text(x,y, ‘string’) Вывод текста в заданную координатами ( x , y ) позицию графика gtext(‘string’) Вывод текста в интерактивно определяемое место на графике (указать место мышкой и щелкнуть) legend Идентификация графиков (легенда) grid on/off Координатная сетка bo x on/off Рамка hold on/off Вывод в одно графическое окно axis Масштабирование zoom Управление масштабом графика colorbar Вывод в графическом окне шкалы палитры Следующий код строит график функции, выводит оси координат, координатную сетку, заголовок г рафика, подписывает оси координат, а также подписывает график в указанном при помощи курсора мыши ме с- те в системе координат. >> x = 0:0.01:6; plot( x, sin(x),’k’); grid on title(‘y = sin(x)’ ); xlabel(‘x coordinate’); ylabel(‘sin(x)’); gtext(‘ \ lef tarrowsin(x)’); Надпись функцией gtext помещается , начиная от точки с коо р- динатами , указанными мышкой ( рис . 6.8). Специальные символы вводя т- ся внутри текста после символа \ («обратная косая черта»). Обознач е- ния для специальных символов совпадают с обозначе ниями в системе подготовки н а учных текстов TeX. 
6.2. Оформление графиков функций 121 Рис. 6 . 8 . Оформление графика 6.2.4. Оформление осей системы координат П ри построении графика выбор масштаба и построение осей выпо л- ня ю тся автоматически. MATLAB выби рает пределы по горизонтал ь ной оси равными указанным для независимой переменной. Для завис и мой переменной по вертикальной оси MATLAB использует диапазон изм е- нения значений функции в рассматриваемом интервале значений незав и- симой переменной. При этом график функции оказывается вписанным в прямоугол ь ник. В системе MATLAB имеется возможность явного указания пределов изменения п е ременных по осям координат. Это делается при помощи функции >> axis ( [ xmin , xmax , ymin , ymax ] ) Числа xmin и xmax задают интервал изменения горизонтальной к о- ординаты ( ее минимальное и максимальное значения), а ymin и ymax – интервал изменения вертикал ь ной координаты. Данную команду можно вводить в командную строку многократно уже после построения графика функции. Такое изменение пре делов приводит к эффекту масштабиров а- ния и позволяет получить подробные изображения тех частей графика, которые вызывают наибольший интерес в конкретном случае . Если ну ж- но сохранить автоматическое масштабирование по какой - нибудь коо р- динате, то для этого на правления в качестве значения следует пост а вить иде н тификатор Inf или – Inf . 
Т е м а 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА 122 >> axis ([ - 5, 5, - Inf , Inf ]) Различные способы применения команды axis приведены в табл. 6. 3. Таблица 6 . 3 . Команда axis Команда Оп исание axis ( v 4) Изменение масштаба 2 D - графика вектором из 4 зн а- чений axis ( v 6) Изменение масштаба 3 D - графика вектором из 6 зн а- чений axis(axis) Использование текущего масштаба для следующих гр а фиков (фиксация текущего масштаба) axis(auto) Восстановление режима автомасштабирования v=axis Получение вектора с текущими значениями масшт а- ба axis(‘ij’) Матричная система координат – начало отсчета в л е- вом верхнем углу axis(‘xy’) Декартова система координат – начало отсчета в л е- вом нижнем углу axis on/off Восс тановление/отключение изображения осей и н а- сечек axis style Изменение стиля масштабирования: square Область вывода – квадрат normal Масштабирование по умолчанию equal Одинаковый масштаб по осям tight Изображаемые данные занимают всю область в ы вода auto Автомасштабирование manual Масштабирование вручную Изменить отметки на осях координат можно с помощью функции set , обрабатывающей графический объект Axes . Это объект, который отвечает за систему координат и содержит оси координат и белый пр я- моу гольник, внутри которого и строится график функции. Для получ е- ния дескриптора текущего объекта Axes (т. е. объекта, в который в да н- 
6.3. Т рехмерная графика 123 ный момент направлен в ы вод) применяют функцию gca , которую выз ы- вают без параметров. Следующий фрагмент кода, выполняющийся п осле построения гр а- фика, устанавливает новые метки на горизонтальной оси коорд и нат . >> hAxes = gca; set( hAxes, ‘xtick’, [xmin : step : xmax] ) Внести изменения в систему координат графика можно также при помощи следу ю щих действий. Необходимо щелчком м ыши выделить в графическом окне требуемую систему координат и выбрать в меню гр а- фического окна пункт Edit | Axes Properties . Открывающееся при этом диалоговое окно Property Editor – Axes позволяет в ы- полнить все указанные выше настройки для текущего объекта Axes . Аналогично пункт меню Edit | Figure Properties откр ы- вает диалоговое окно Property Editor – Figure , которое позв о- ляет изменить настройки тек у щего графического окна Figure . 6.3. Тр е хмерная графика Изображение графиков функций двух переменных (трехмерных л и- ний и поверхностей) требует реализации тр е хмерной графики на пло с- ком экране дисплея компьютера. Высокоуровневые графические фун к- ции системы MATLAB автоматически ре а лизу ю т тр е хмерную графику. Многие при е мы оформления тр е хмерных графиков совпадают с т е- ми , что использ у ются при построении плоских графиков функций одно й переменно й . Для масштабирования применяется функция axis , кот о рая в тр е хмерном случае принимает три пары скалярных аргументов >> axis( [ xmin, xmax, ymin, ymax, zmin, zmax ]) Функции text , x label , ylabel , zlabel , title , дополняют графики текстовой информацией. Применение функции subplot п о- зволяет разместить в одном граф и ческом окне несколько тр е хмерных графиков. 6.3.1. Функции для отображения поверхностей Чаще всего при построении поверхностей т очки аргументов расп о- ложены в области определения функции регулярно в виде прямоугол ь- ной сетки. Поэтому для отображения функции двух переменных, как правило, следует выполнить сл е дующие действия: 
Т е м а 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА 124  Сгенерировать матрицы с координатами узлов сетки на прямоуго л ь- ной области определения функции. Для генерации сетки обычно пр и- мен я ется функция meshgrid . Ее аргументами являются два вектора, элементы которых соответствуют координатам узлов сетки соответс т- венно вдоль оси x и y . Если область построения функции – квадра т, то и с пользуется один вектор. Функция meshgrid возвращает две матрицы одной и той же структуры: первая матрица содержит знач е- ния первых координат этих точек (координат x ), а вторая матрица с о- держит значения вторых координат (координат y ).  Вычислить знач ение функции z = f ( x , y ) в узлах сетки.  Использовать одну из графических функций для отображения тре х- мерного объекта .  Нанести на график дополнительную информацию. Рис. 6 . 9 . Построение 3 D - поверхности Поверхность , изображенная на рис. 6.9, представляет собой к арка с- ную 3 D - поверхность, залитую цветом. Данное построение выполняется при п о мощи группы команд >> [ X , Y ] = meshgrid ( - 2:.2:2, - 2:.2:2); Z = X .* exp ( - X .^2 – Y .^2); surf ( X , Y , Z ) 
6.3. Трехмерная графика 125 В ысокоуровневые функции си с тем ы MATLAB , используемые при построении поверхностей и позволяющие добиваться большей реал и- стичности в изображении тр е хмерных граф и ков , описа ны в т абл . 6.4 . Таблица 6 . 4 . Функции для построения трехмерных повер хностей Функция Описание meshgrid Формирование массивов координат узлов сетки mesh Построение каркасной поверхности meshc Построение каркасной поверхности вместе с прое к- циями линий п о стоянного уровня на плоскости xy meshz Построение каркасной поверхнос ти вместе с плоск о- стью отсчета на нулевом уровне surf Построение залитой цветом каркасной модели surfc Построение залитой цветом каркасной модели вместе с линиями уровня на плоскости xy surfl Построение освещенной поверхности contour Построение линий уровня функции двух переменных contour 3 Построение трехмерных линий уровня contourc Формирование массива описания линий уровня contourf Построение линий уровня и закрашивание областей м е жду ними некоторым постоянным цветом c label Маркировка линий уровн я s phere Отображение сферы и генерация точек, лежащих на п о верхности сферы c ylinder Отображение цилиндра и генерация точек, лежащих на поверхн о сти цилиндра fill3 Рисование закрашенного цветом многоугольника в 3 D - пространс т ве plot3 Построение линий в тр ехмерном пространстве h idden on/off Режим удаления невидимых линий s hading С пособ затенения объектов Su r face и Patch b righten Управление яркостью палитры c olormap Установка цветовой палитры c olorbar Вывод в графическом окне цветовой палитры 
Т е м а 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА 126 6.3.2. Функция plot3 Простейшей функцией построения графика функции двух переме н- ных в системе MATLAB является функция >> plot3(X, Y, Z) где X, Y и Z – матрицы одинаковых размеров, смысл которых описан выше . П рименение функции plot3 позволяет построить график п о- верхност и, представленной на рис. 6.10. >> [ X , Y ] = meshgrid ( - 2:0.1:2, - 1:0.1:1); Z = exp( - X.^2 - Y.^2); plot 3( X , Y , Z ) Рис. 6 . 10 . Применение функции plot 3 Из рисунка видно, что функция plot3 строит график в виде наб о- ра линий в пространстве, каждая из которых является сечением тр е хме р- ной поверхности плоск о стями, параллельными плоскости y O z . Для построения тр е хмерных линий, задаваемых параметрически, применяется другая форма вызова функции plot3 , где входные п ар а- метры являются одномерными массивами координат точек, которые нужно последовательно с о единить отрезками прямых. Следу ю щий фрагмент кода позволяет построить винтовую линию, как показано на рис . 6.11. >> t = 0 : pi/50 : 10*pi ; 
6.3. Трехмерная графика 127 x = sin(t); y = cos(t); plot3(x, y, t); grid on Рис. 6 . 11 . Трехмерная линия, заданная параметрически 6.3.3. Положение камеры и вращение графиков Для тр е хмерных графиков существует возможность изменять точку обзора, т . е . положение ка меры. Положение камеры определяется у г лом азимута и углом возвышения. Изменение первого угла означает вращ е- ние плоскости xOy вокруг оси Oz против часовой стрелки. Угол во з- вышения есть угол между направлением на камеру и плоск о стью xOy . Когда выполняются фу нкции mesh или surf , то по умолчанию уст а- навливаются значения az = - 37.5° , el = 30° . Эти значения в л ю- бой м о мент времени можно изменить функцией >> view ([ az , el ]) Угол зрения можно задать также посредством декартовых координат: >> view ([ x , y , z ]) Имеет ся возможность выбрать положение камеры интерактивно средствами графического окна. Для этого нужно установить режим вр а- щения изображения при пом о щи пункта меню Tools | Rotate 3 D или соответствующего значка, а затем, перемещая мышь при нажатой 
Т е м а 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА 128 левой кнопке мыши, задать расположение осей. При этом в левом ни ж- нем углу окна будут отображаться текущие значения углов az и el . Активизация пункта меню View | Camera ToolBar обеспеч и- вает появление в графическом окне дополнительной панели инструме н- тов с кнопками, позв оляющими изменять положение камеры, тип и п о- ложение источника освещения, тип проекции (ортографическая или пе р- спективная). Такие же действия могут быть выполнены при помощи пунктов контекстного всплывающего меню, появляющегося при щелчке в графическом окне правой кнопки мыши. Комбинирование различных функций системы MATLAB и испол ь- зование различных вариантов закраски, освещения и точки обзора пом о- гает добиться оптимального вида тр е хмерных объектов . 6.4. Сохранение графических изображений Экспорт графики из MA TLAB возможен в различные графические форматы, в час т ности: EPS , AI , BMP , GIF , TIFF , JPEG . При экспорте в графический файл записыв а ется только область графического окна без меню и панели инструментов (клиентская часть). Самым простым способом сохранения гр афического изображения является использование команды меню Edit | Copy Figure , в р е- зультате чего изображение будет сохранено в буфере обмена Cli p- board операционной системы Windows . После этого можно вставить это изображение в документ редактора Word или гр афического реда к- тора Paint командой м е ню Paste последнего. Пункт меню File | Save as … графического окна позв о ляет сохранить клиентскую часть окна в файл е в одном из выбранных форм а- тов. Вместо использования команды меню графического окна можно из командного окна системы MATLAB выполнить команду , которая сохр а- нит изображение в буфере обмена в формате Bitmap . >> print - dbitmap Команда >> print - dformat filename сохранит полученное в MATLAB изображение в файле указанного гр а- фического формата. 
ТЕМА 7 ОСНОВЫ ДЕСК РИПТОРНОЙ ГРАФИКИ Дескрипторная графика ( Handle Graphics ) – это объек т- но - ориентированная графическая система, основанная на низкоуровн е- вых графических функциях. Объектами дескрипторной графики являю т- ся базовые графические элементы, используемые для визуал изации да н- ных. Каждый графический объект пр о нумерован, ему присваивается уникальный идентификатор – дескриптор ( ha n dle ) , используя который можно управлять свойствами графических объектов при помощи соо т- ветс т вующих функций. Использование этих функций в разр абатываемой программе прида е т графическим результатам законченный вид, обесп е- чивает их лучшее восприятие. Помимо этого, дескрипторная графика п о- зволяет разрабатывать приложения, оснащенные полноценным графич е- ским интерфейсом пользователя с кнопками, пункта ми меню, окнами р е- дактирования, полосами прокрутки и другими стандартными графич е- скими компонентами, обычно присутствующими в стандартных инте р- фейсах пользователя прил о жений. 7.1. Описание графических объектов 7.1.1. Иерархия графических объектов Графические объ екты – это базовые элементы, используемые для вывода графики, а также элементы пользовательского интерфейса. Т ак как MATLAB является объектно - ориентированной системой, то все эл е- менты, используемые при выводе графики (графическое окно Fi g ure , системы коорд инат Axes , линии, поверхности, текстовая инфо р мация и т. д.), являются объектами. Каждый объект обладает целым р я дом свойств, изменение которых вызывает требуемы е перенастройки в самом объекте. Поэтому при написании приложений , отображающих результ а- ты в гр афическом виде или оснащенных собственным графическим и н- терфейсом пользователя, необходимо знать свойства объектов и уметь и з менять их значения в программе. 
Т е м а 7. ОСНОВЫ ДЕСКРИПТОРНОЙ ГРАФИКИ 130 Создание любого графического объекта в MATLAB сопровождается появлением уникального числового указ ателя на него – дескриптора. Д е- скриптор назначается по умолчанию. Все графические объекты расположены в определенной иерархич е- ской последов а тельности, представленной на рис. 7.1. Работа всех высокоуровневых графических функций MATLAB о с- нована на использовании графических объектов. Например, вызов фун к- ции >> h = plot ( x , y ) создает графическое окно – графический объект Figure , создает си с- тему координат – графический объект Axes , рисует линию при помощи графического объекта Line , дескриптор которого возвращает в качес т- ве значения переменной h . Если функция выводит графики нескольких фун к ций, то создается несколько графических объектов класса Line , при этом в переменной h будет содержаться массив дескрипторов. Краткое описание назна чения каждого графического объекта пре д- ставлено в табл . 7.1. Root Fi g ure Axes Image Light Экран компьютера (0) Графическое окно (1,2,…) Uicontrol Uimenu Uicontextmenu Line Patch Rectangle Text Surface Рис. 7.1. Иерархия графических об ъектов MATLAB 
7.1. Описание графических объектов 131 Таблица 7 . 1 . Графические объекты системы MATLAB Объект Описание Root Вершина иерархии, соответствующая экрану ко м- пьютера Figure Окно для вывода графики и пользовательских и н- терфейсов Axes Оси (система координат) для вывода графики в графическом о к не Uicontrol Управляющий элемент пользовательского инте р- фейса Uimenu Оконное меню пользователя Uicontextmenu Контекстное меню пользователя, появляюще еся при щелчке пр а вой кнопки мыши на объекте Image Двумерное растровое изображение Light Источник освещения, воздействующий на граф и- ческие объекты типа patch и surface Line Линия Patch Замкнутый закрашенный полигон с ребрами Rectangle Двумерная фигура , изменяющаяся от прямоугол ь- ника до эллипса Surface Трехмерная поверхность Text Символьная строка 7.1.2. Графический объект Root Графический объект Root соответствует экрану компьютера. С у- ществует единс т венный объект Root , который не имеет родителей, а все другие графические объекты являются его потомками. Непосредстве н- ными потомками объекта Root явл я ются объекты Figures . Дескриптор объекта Root – 0. Этот объект создается в момент з а- пуска системы MATLAB и не может быть удален. Но пользователь м о- жет управлят ь его свойс т вами с помощью функци й set (0) , get (0) . 
Т е м а 7. ОСНОВЫ ДЕСКРИПТОРНОЙ ГРАФИКИ 132 7.1.3. Графический объект Figure Графический объект Figure соответствует отдельному графич е- скому окну на экране, где отображаются графические визуальные да н- ные. В MATLAB нет ограничений на количество создаваемы х графич е- ских окон. Графические объекты Figure явл я ются прямыми потомками об ъ екта Root . Все высокоуровневые команды и функции, которые выводят граф и- ки ( plot , surf , contour ) , автоматически создают графический об ъ- ект Fi g ure , если он не существует. Если откры то много графических окон, то одно из них выделяется в качестве текущего графического об ъ- екта. Дескриптором графического объекта Figure является номер графич е ского окна. Дескриптор графического объекта Figure может быть определен с помощью команды gcf . Пол ьзователь может упра в- лять его свойствами с помощью функций set (1) , get (1) или set ( hf ,…) , get ( hf ,…) , где hf – д е скриптор текущего окна.  figure – созда ние нов ого объект а со свойствами по умолчанию. Пол ь зователь может установить свойства по умолчанию для объе кта Figure только на корн е вом уровне ( root level ) . >> set (0, ' DefaultFigureProperty ', PropValue ..)  figure (' PropertyName ', PropertyValue ,...) – созда ние н о в ого объект а с заданными свойствами .  figure ( h ) – если h является дескриптором существующего объе к та, то он становится текущим, видимым, помещается поверх окон э к рана и в него осуществляется графический вывод. Если h не является д е- скриптором существующего объекта, но является целым числом, то функция создает объект и назначает его handle = h . Если же h не является целым, то выдается сообщение об ошибке .  h f = figure(...) – получение дескриптор а объекта. Следующий фрагмент кода создает два графических окна Figure и выв о дит графики поочередно в одно из окон: >> x=0:0.01:2*pi; h1=figure(1); h2=figure(2); f igure(1); plot(x, sin(x)); figure(2); plot(x, cos(x), x, sin(x)); figure ( h 1); plot ( x , [ cos ( x ); sin ( x ); sin (2* x )]); 
7.1. Описание графических объектов 133 Следующий фрагмент кода создает объект Figure размером в че т верть экрана, расположенный в левом верхнем углу: % 4 - element vector: [left, bottom, width, height] sz = get(0,'ScreenSize'); figure('Position', [1 sz(4)/2 sz(3)/2 sz(4)/2] ) Список функций, управляющих графическим окном Figure , пре д- ставлен в табл . 7.2. Табл ица 7 . 2 . Создание и упр авление графическим окном Функция Назначение figure Открыть графическое окно (команда) gcf Получить дескриптор текущего объекта figure clf Очистить графическое окно figure close Закрыть графическое окно figure refresh Обновить графическое окно figure 7.1.4. Графический объект Axes Графический объект Axes задает область размещения графика в о к- не объекта Figure . Текущий объект Axes является целью для фун к- ций, рисующих графические объекты image , line , patch , su r- face , text . Все высокоуровневые команды и функци и, которые выв о- дят графики ( plot , surf , contour , mesh , bar ) , автоматически создают графический объект Axes , если он не существует. Если в о д- ном графич е ском окне создано несколько объектов Axes , то один из них выделяется в качестве текущего графического объ екта. Дескриптор графического объе к та Axes может быть определен с помощью команды gca . Пользователь может управлять его свойствами с помощью функций set ( gca ) , get ( gca ) .  axes – созда ние в текущем графическом окне Figure нов ого об ъ- ект а Axes со свойствами по умолчанию. Пользователь может переу с- тановить свойства по умолчанию для объекта Axes только на корн е- вом уровне или на уровне фигуры: >> set(0,'DefaultAxesPropertyName',Pro p Value,..) >> set(gcf,'DefaultAxesPropertyName',Pro p Value,..) 
Т е м а 7. ОСНОВЫ ДЕСКРИПТОРНОЙ ГРАФИКИ 134  axes (' PropertyName ', Pro pertyValue ,...) – созда ние н о- в ого объект а Axes с заданными свойствами ;  axes ( h ) делает объект текущим, размещает его первым в списке Children об ъ екта Figure ;  h = axes (...) – получение дескриптор а объекта Axes ;  gca – получение дескриптор а текущего объекта Ax es . Следующий фрагмент кода создает два объекта Axes в одном графич е ском окне: >> axes('position',[.1 .1 .8 .6]) mesh(peaks(20)); axes('position',[.1 .7 .8 .2]) pcolor ([1:10;1:10]); Список функций, управляющих графическим объектом Axes , предста в ле н в табл . 7.3. Табл ица 7 . 3 . Создание и управление осями координат Функция Назначение axes Созда ние ос ей координат (команда) cla Очист ка ос ей координат gca Получ ение дескриптор а графического объекта Axes 7.1.5. Графический объект UI Объекты Uicontrol являются управляющими элементами польз о- вательского и н терфейса, которые выполняют функции обратного вызова, когда пользователь акт и визирует объект. Объект Uimenu является выпадающим меню, который выполняет функции обратного вызова, когда пользователь активизирует пункт м е- ню. Система MATLAB разм е щает Uimenu в Menu Bar окна Figure справа от существующего меню, определенного системой. Объект Uicontextmenu создает контекстное меню, которое п о- является, когда пользовател ь нажимает правую кнопку мыши над граф и- ческим объектом. Более подробное знакомство с данными типами графических объе к- то в см. в теме 9 , посвященной созданию графического интерфейса пол ь- зов а теля. 
7.1. Описание графических объектов 135 7.1.6. Графический объект Image Рассмотренные ранее графические кома нды основаны на примен е- нии векторной графики, когда изображаемые объекты задаются коорд и- натами. Существует много из о бражений в растровых форматах, когда каждой точке изображения соответствует пиксель информации. Система MA T LAB обеспечивает возможность рабо ты с растровыми объектами, вкл ю чая подготовку изображений, запись или считывание их из файла. Для работы с растровыми изображениями предназначен графический объект image . Команда image создает графический объект, интерпретируя ка ж- дый элемент матрицы как ин декс цветовой палитры colormap или неп о- сре д ственно как RGB - значение в зависимости от способа представления данных. Существует три основных типа задания изображения, которые отличаются по способу интерпретации элементов матрицы данных в к а- честве цветов пикс елей (цветовых моделей) – индексный режим ( indexed mode ), режим, устанавливающий соответственно доли красного, зелен о- го и синего цветов ( truecolor mode ) , и режим, устанавливающий цветовой тон, насыщенность и интенсивность ( intensity ).  image ( C ) отображает м атрицу C как графический образ (изображ е- ние). Каждый элемент матрицы определяет цвет прямоугольного се г- мента этого образа. Если C – двумерный массив, то каждый его эл е- мент рассматривается как значение индекса для массива, определя ю- щего текущую цветовую пал итру ( indexed image ). В случае трехмерн о- го массива его элементы определяют соответственно доли кра с ного, зеленого и синего цветов. В этом случае таблица цветов не использ у- ется .  image ( x , y , C ) масштабирует выводимое изображение на диап а зон векторов x и y , гд е x и y являются векторами .  image ( x , y , C ,' PropertyName ', PropertyValue ,...) – в ы- сокоуровн е вая функция вывода графического образа с одновременной спецификацией его свойств .  image (' PropertyName ', PropertyValue ,...) – низкоуровн е- вый синта к сис функции image , то лько определяющий значения свойств .  handle = image (...) возвращает дескриптор созданного граф и- ческого о б раза. 
Т е м а 7. ОСНОВЫ ДЕСКРИПТОРНОЙ ГРАФИКИ 136 Для работы с изображениями используются команды, представле н- ные в табл . 7.4. Табл ица 7 . 4 . Функци и для работы с растровыми изображениями Функция Описание image Вывод графического образа iminfo Информация о графическом образе imread Чтение изображения из графического файла imwrite Запись изображения в графический файл Следующий код выполняет чтени е из файла изображения и его цв е- товой палитры, вывод графического образа и установку цветовой пали т- ры, ему соответствующей . >> [Image,ColorMap]= imread( FileName ); hi = image(Image); colormap(ColorMap) 7.1.7. Графический объект Light Графический объект Light определяет источник света , который во з действует на все графические объекты класса patch и surface . Нельзя увидеть источники света, но можно установить свойства, упра в- ляющие стилем, цветом, позицией и др у гими свойствами, общими для всех графических объекто в.  light – созда ние источник а света в текущей системе координат.  light (' PropertyName ', PropertyValue ,...) – созда ние и с- точник а света с одновременным определением указанных свойств.  handle = light (...) – получение дескриптор а созданного об ъ- екта Light . С ле дующий фрагмент кода помещает источник света в бесконе ч- ность, ориентирует его вдоль вектора [1 0 0] , т. е. вдоль оси Ox . И с- то ч ник света освещает поверхность . >> h = surf ( peaks ); set ( h , ' FaceLighting ',' phong ', ... 'FaceColor','interp', 'Amb i entStrength' ,0.5); light (' Position ',[1 0 0],' Style ', ' infinite '); 
7.1. Описание графических объектов 137 Основные свойства объекта Light перечислены в табл . 7.5. Табл ица 7 . 5 . Основные свойства графического объекта Light Свойство Описание Color Цвет источни ка света Style Указывает на бесконечную (значение infinite по умолчанию) или конечную (значение local ) удале н- ность исто ч ника света от объекта Position Три координаты, задающие положение источника света в случае конечной его удаленности или направление на бесконечно удаленный источник света. В последнем сл у- чае направление определяется прямой, проходящей через з а даваемую точку и начало координат 7.1.8. Графический объект Line Графический объект Line является графическим примитивом для создания двумерных и трехм ерных графиков. Высокоуровневые кома н- ды plot , plot 3 , contour создают графические объекты Line . Дес к- риптор графического объекта Line может быть получен, например, при п о мощи функции hl = plot (…) . Пользователь может управлять его свойс т вами при помощи функци й set ( hl ) , get ( hl ) .  line ( X , Y ) – создание лини и, определенн ой векторами X и Y в тек у- щей системе координат Axes .  line ( X , Y , Z ) – созда ние лини и в трехмерных координатах .  line ( X , Y , Z ,' PropertyName ', PropertyValue ,...) – созд а- ние лини и с одновременной установкой указанных свойств и с остал ь- н ы ми значениями свойств, определенными по умолчанию .  line (' XData ', x ,' YData ', y ,' ZData ', z ,' PropName ', Prop Value , ... ) – низкоуровневая форма функции line .  h = line (...) – получение вектор - столбц а дескрипторов, соотве т- ствующих каж дой линии графического объекта. Следующий пример использует функцию line для добавления тени к нарисова н ному графику функции sin . Сначала при помощи функции plot рисуется линия, и ее дескриптор сохраняется в hline 1 . Затем добавляется более широкая и более светлая тень смещением по коорд и нате x . Наконец, первая линия помещается поверх второй . 
Т е м а 7. ОСНОВЫ ДЕСКРИПТОРНОЙ ГРАФИКИ 138 >> t = 0:pi/20:2*pi; hline1 = plot (t, sin(t), 'k'); hline2 = line (t+.06,sin(t),'LineWidth',4, ... 'Color', [.8 .8 .8]); set (gca, 'Children', [hline1 hline2]) 7.1.9. Графический объект Patch Графический объект Patch представляет собой один или н е- сколько многоугол ь ников, определенных координатами своих вершин, при этом многоугольники могут быть соединены, а могут быть не соед и- нены ме ж ду собой. Высокоуровневые команды fill , fill 3 , contour , contour 3 со з дают графические объекты Patch и возвращают его дескриптор. К низкоуро в невым функциям создания графического объекта относится функция patch , вызываемая с разным числом и типом входных арг у- ментов. Пользователь может управля ть свойствами данного объекта ч е- рез его дес к риптор при помощи функций set () , get () . Графический объект Patch задается координатами своих вершин и данными цветовой палитры. Существует два способа определения гр а- фич е ского объекта Patch :  о пределение координат всех вершин каждого полигона, которые MATLAB с о единяет в поверхность ;  о пределение координат все х уникальных в ершин и матрицы, к о торая указывает, как соединить эти вершины для созда ния поверхн о сти. Второй способ предпочтителе н в тех случаях, когда описани е об ъ- екта содержит много вершин. Любая вершина, совместно использу е мая при создании нескольких многоугольников, встречается в описании только один раз. Следующий фрагмент кода строит куб, каждая грань которого ра с- крашен а в свой цвет: >> vm=[0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 0 1; ... 1 0 1; 1 1 1; 0 1 1]; fm=[1 2 6 5;2 3 7 6;3 4 8 7; 4 1 5 8; ... 1 2 3 4;5 6 7 8]; clf; view(3); axis square 
7.1. Описание графических объектов 139 patch('Vertices',vm,'Faces',fm,... ' FaceVertexCData ', hsv (6),' FaceColor ',' flat '); Правильный 10 - угольник желтого цвета можно построить, вызвав следующие кома н ды: >> t = 0:pi/5:2*pi; patch (sin(t), cos(t), ‘y’) axis equal 7.1.10. Графический объект Rectangle Графический объект Rectangle представляет двумерную закр а- шенную область, которая может принимать определенную форм у от прямоугол ь ника до эллипса: >> clf; set (gca, 'Visible', 'off'); rectangle( 'Position', [ - .9 - .4 1.8 .8], ... 'Curv a ture', [1 1], 'FaceColor', [1 .7 .7]); rectangle( 'Position', [ - .8 - .3 1.6 .6], ... 'Curv a ture', [.5 .5], 'FaceColor', [.7 1 .7 ]); rectangle( 'Position', [ - .7 - .2 1.4 .4], ... 'Curv a ture', [0 0], 'FaceColor', [.7 .7 1]); 7.1.11. Графический объект Surface Графический объект Surface представляет собой результат трехмерной визуализации массива данных, когда элемент массива опр е- деляет в ысоту точки над плоскостью xOy . Таким способом формируе т- ся трехмерная поверхность, состоящая из четырехугольников, вершины кот о рых определяются массивом исходных данных. Графические объекты Surface создаются при вызове высокоуро в- невых функций pcolor , surf , mesh или низкоуровневой функции su r face . Следующий фрагмент кода демонстрирует создание графического об ъ екта Surface при помощи функции surface : >> title('SURFACE - regular surface') t= 0:pi/10:2*pi; [X,Y,Z]= cylinder(.7+.3*cos(t)); 
Т е м а 7. ОСНОВЫ ДЕСКРИПТОРНОЙ ГРАФИКИ 140 Z= Z - 0.5; hs= surf ace(X,Y,Z); Дескриптор графического объекта Surface может быть получен, например, с помощью функции hs = surf (…) . Пользователь может управлять его свойствами с пом о щью функц ий set ( sh ) , get ( sh ) . 7.1.12. Графический объект Text Графический объект Text представляет собой текстовый объект, т. е. строки симв о лов, выводимые в графическом окне. Графические объекты Text создаются при использовании высок о- уровневых команд title , xlabel , ylabel , zlabel , gtext или низкоуровневой кома н ды text . Следующий фрагмент кода рисует график функции y = sin ( x ) в диапазоне [0 2* pi ] и подписывает график в позиции ( pi , 0) в в и де “ ← sin (π)”: >> plot (0: pi /20:2* pi , sin (0: pi /20:2* pi )); text ( pi ,0,' \ leftarrow sin ( \ pi )',' FontSize ',18); Функции, создающие графический объект Text , возвращают его д ескриптор, например ht = title (…) . Пользователь может управлять его сво й ствами с помощью функций set ( ht ) , get ( ht ) . 7.2. Управление свойствами объектов Графические объекты имеют большой набор свойств, каждое со своими допустимыми значениями. Полная информаци я о свойствах гр а- фических объектов и их знач е ниях содержится в справочной системе MATLAB . Для получения и установки свойств графических объектов испол ь- зуются функции get и set , которые выполняют действия в зависим о- сти от входных параметров. Каждое свойст во графического объекта кроме допустимых значений имеет значение, установленное по умолчанию. Если это значение не п е- реопределяется, то оно используется при работе с графическим объе к- том. Переустановить значение свойства можно при помощи функции set , как п оказано в т абл . 7.6. 
7.2. Управлени е свойствами объектов 141 Табл ица 7 . 6 . Управление свойствами графических объектов Функция Описание get ( hobj ) Вывод списка текущих значений свойств графического объекта с д е- скриптором hobj set ( hobj ) Вывод списка возможных значений всех свойств объекта get ( hobj ,’ PropertyName ’) Вывод текущего значения указа н- ного свойства объекта set ( hobj ,’ PropertyName ’) Вывод списка возможных значений указанного свойства объекта set ( hobj ,’ PropertyName ’, ’ PropetyValue ’) Установ ка нового значения указа н- ного свойства объекта reset(hobj) Восстановление стандартных зн а- чений свойств по умолчанию об ъ- екта Кроме этого, можно изм е нить значения свойств, установленные по умолчанию, на уровне родительских объе к тов. Например, изменить свой ства графического объекта Text , уст а новленные по умолчанию, можно на уровне родительских объектов Axes , Fi g ure и Root : >> set(0,'DefaultTextProperty',PropertyValue...) >> set(gcf,'DefaultTextProperty',PropertyValue...) >> set(gca,'DefaultTextProperty',Pro pertyValue...) 
ТЕМА 8 ИМПОРТ И ЭКСПОРТ ДАННЫХ Система MATLAB обеспечивает различные способы загрузки да н- ных из файлов, хранящихся на дисках, или из буфера обмена Cli p- board в рабочее пространство Workspace и, наоборот, сохранение переменных рабочего простра нства в файлы. Такие процессы называю т- ся соответс т венно импортированием данных ( importing data ) и экспо р тированием данных ( exporting data ). Выбор механизма импорта или экспорта зависит, в основном, от формата перемещаемых данных: текстовые, бинарные данные или данные стандартного формата. Если для работы с каким - либо форматом система MATLAB не имеет в ы- сокоуровневой функции, то всегда можно воспользоваться низкоуровн е- выми функци я ми файлового ввода - вывода. В системе MATLAB организована работа с файлами разных форм а- тов. Среди них:  ф ормат стандарта ASCII (American Standard Code for Information Inte r- change). Данные текстовые файлы содержат буквенно - цифровые си м- волы и могут просмат риваться текстовыми редакторами ;  ф орматы электронных таблиц Microsoft Excel и Lotus 123 ;  с тандартные графические форматы : BMP ( Microsoft Windows Bi t map ), TIFF ( Tagged Image File Format ), GIF ( Graphics Interchange Fo r mat ), JPEG ( Joint Photographic Experts Group ), PNG ( Portable Network Grap h- ics ) ;  а удио - и видеоформаты : AVI ( Audio / Video Int erleaved ), WAV ( Micr o- soft WAVE sound ) ;  ф орматы научных данных : HDF (Hierarchical Data Format), CDF (Co m mon Data Format), FITS (Flexible Image Transport System) ;  п ередача данных через Интернет ;  н изкоуровневый файловый ввод - вывод (Low - Level File I/O). 
8.1. Сохранение данных рабочего пространств а 143 8.1. Сохра нение данных рабочего пространства Для записи и считывания информации в MATLAB предусмотрен специальный формат MAT - файла, позволяющий сохранять данные из рабочего пространства Workspace в файлах на диске. Существует ряд команд для сохранения информации на диске и для ее считывания.  importdata – загрузка данных из файла в рабочее пространство Workspace . importdata (' filename ') загружает данные из файла fil e- name в рабочее пространство. A = importdata (' filename ') загружает данные из файла f i- l e name в переменн ую A . A = importdata (' filename ',' delimiter ') загружает данные из файла filename , используя delimiter как разделитель столбцов (в случае текстового файла).  load – загрузка данных из файла в рабочее пространство Wor k- space . load загружает все переменные из MAT - файла matlab . mat , если он существует. load filename загружает все переменные из файла filename . Если у filename нет расширения, то функция ищет файл с именем f i- l e name или filename . mat и рассматривает его как двоичный MAT - файл. Если у filename есть рас ширение, отличное от . mat , функция рассматривает его как файл с ASCII данными. load filename X Y Z загружает указанные переме н ные. load - ascii filename или load - mat filename заставл я- ет функцию рассматривать файл или как ASCII файл , или как MAT - файл незав исимо от расширения. S = load (...) возвращает содержимое MAT - файла в переме н- ной S . Если файл является MAT - файлом, то S – структура, содерж а- щая поля - переменные. Если файл содержит ASCII данные, то S – ма с- сив дво й ной точности.  save – сохранение данных из раб очего пространства Workspace в файле. save сохраняет значения всех переменных рабочего пространства в MAT - файл matlab . mat . 
Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ 144 save filename сохраняет значения всех переменных рабочего пространства в файл filename . Если у файла filename не указано ра с ширение, то данные запишутся в двоичный файл filename . mat . save filename X Y Z ... сохраняет указанные переме н ные. Следующая команда сохраняет в файле переменные с общей частью в имени: >> save mydat . mat abc * Обращаться к командам load и save можно так же, как и к фун к- циям. Например, вызов функции >> save (‘ mydat . mat ’, ‘ a ’, ‘ b ’, ‘ c ’) сохраняет в файле перечисленные переменные. 8.2. Низкоуровневый файловый ввод - вывод Система MATLAB включает ряд низкоуровневых функций файл о- вого ввода - вывода ( Low - Level File I / O ) и следу ет стандарту ANSI языка программирования C . Такой ввод - вывод называется также буферизова н- ным ( buffered ), или форматированным ( formatted ) вводом - выводом. Для того чтобы осуществить файловый ввод - вывод данных, необходимо в ы- полнить действия в следующей послед овательности: 1) о ткрыть файл и получить указатель файла ( file identifier ) – функция fopen . 2) в ыполнить операции с данными файла: а) ч тение , запись бинарных данных – функци и fread , fwrite ; б) ч тение текстовых строк из файла – функции fgets / fgetl ; в) ч тение форматированных ASCII данных – функция fscanf ; г) з апись форматированных ASCII данных – функция fprintf ; 3) з акрыть файл – функция fclose . Рассмотрим данные функции более подробно. 8.2.1. Работа с именем файла Для работы с файлом любого формата необходимо знать его имя , расширение и местоположение на диске, т. е. путь поиска. Система MATLAB предоста в ляет ряд вспомогательных функций для организации работы с файлами, кот о рые представлены в т абл . 8.1. 
8.2. Низкоуровневый файловый ввод - вывод 145 Табл ица 8 . 1 . Всп омогательные функции для работы с файлами данных Функция Описание fileparts Выделение составляющих пути доступа. Входной арг у- мент – текстовая строка полного пути доступа к файлу. Выходные аргументы – составляющие пути доступа: путь, имя файла, расширение, версия fullfile Формирование полного имени файла из имен катал о гов и имени файла filese p Получение символа разделителя имен каталогов при формировании полного пути к файлу (в зависимости от платформы) tempdi r Получение полного имени системного временно го кат а- лога, если он существует (не создавая его) tempnam e Получение уникального имени временного файла – во з- вращает текстовую строку, подходящую для использ о- вания в качестве имени временного файла (уникальность не гарантируется, но предполагается) Приме р использования функций fileparts и fullfile : >> file = ' \ C: \ temp \ matlab \ myfile.txt'; >> [pathstr, name, ext, versn] = fileparts(file) pathstr = \ C: \ temp \ matlab name = myfile ext =.txt versn = '' >> str = fullfile('C:','temp','matlab',' myfun.m') str = C : \ temp \ matlab \ myfun . m 8.2.2. Работа с бинарными и текстовыми файлами Для операций ввода - вывода с использованием форматов текстовых данных и работы с бинарными файлами применяются команды, подо б- ные стандартным функциям языка C .  fopen – от крытие файла и получение информации о файлах. Функция fopen выполняет два действия: во - первых, открывает файл; во - вторых, возвращает файловый идентификатор, который используют 
Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ 146 все остальные функции низкоуровневого файлового ввода - вывода. Ф ункция также позв оляет получить информацию об открытых фа й лах. fid = fopen ( filename ) открывает файл filename для чт е- ния и возвращает файловый идентификатор fid . [ fid , message ] = fopen ( filename , permission ) о т- крывает файл filename в режиме, указанном в разрешении permi s- sio n . В message содержится сообщение о системной ошибке, если файл не о т крыт. Р ежимы разрешения permission представлены в табл. 8.2. Табл ица 8 . 2 . Режимы открытия файлов Тип Описание ' r ' Открыть файл для чтени я (по умолчанию) ' w ' Открыть файл или создать новый файл для записи, уничт о- жая старые данные 'a' Открыть файл или создать новый файл для записи, добавляя данные в конец файла 'r+' Открыть файл для чтения и записи 'w+' Открыть файл или создать новый фай л для чтения и записи, уничтожая старые данные 'a+' Открыть файл или создать новый файл для чтения и записи, добавляя данные в конец файла 't' Открыть текстовый файл 'b' Открыть бинарный файл fids = fopen (' all ') возвращает вектор - строку, содержащую ид ентификаторы всех открытых файлов, не включая идентификатор 1 ( standard output ) и идентификатор 2 ( standard error ). Число элементов вектора равно числу открытых файлов. [ filename , permission , machineformat ] = fopen ( fid ) возвращает имя файла, строку разре шения и строку формата, с о- ответс т вующие файлу с указанным идентификатором fid . Идентификатор файла fid , возвращаемый функцией fopen , и с- пользуется во всех остальных низкоуровневых функциях файлового вв о- да - вывода в качестве первого аргумента.  fclose – закрыт ие файлов. 
8.2. Низкоуровневый файловый ввод - вывод 147 Функция fclose закрывает один или более отрытых файлов и может вызываться следующими способами: status = fclose ( fid ) закрывает указанный файл, если он о т- крыт, возвращая 0 в случае успеха и – 1 в противном случае. status = fclose (' all ') закрывает все открытые файлы, кр о- ме файлов с идентификатором 0, 1 или 2.  ftell – получение текущей позиции в файле. Вызывается: position = ftell ( fid ) возвращает текущую позицию.  fseek – переустановка текущей позиции в файле. Вызывается: status = fseek ( fid , offse t , origin ) перемещает т е- кущую позицию в файле на offset байтов относительно origin . Д о- пуст и мые значения аргумента origin :  ' bof ' или – 1: от начала файла,  ' cof ' или 0: от текущей позиции в файле,  ' eof ' или 1: от конца файла. Допустимые значения аргумента of fset :  offset > 0 – передвижение к концу файла;  offset = 0 – текущая позиция не изменяется;  offset < 0 – передвижение к началу файла.  feof – проверка достижения конца файла. Вызывается : eofstat = feof ( fid ) возвращает 1 , если указатель указывает на конец файла, и 0 в других случаях.  frewind – переход на начало файла. frewind ( fid ) устанавливает текущую позицию файла с иде н- тиф и катором fid на начало файла.  fread – ч тение двоичных данных из файла. [ A , count ] = fread ( fid , size , precision ) читает дв о- ичные данн ые из указанного файла в матрицу A . Параметр size опред е- ляет количество данных. Если размер не указан, fread читает до конца файла. Возможные значения параметра size представлены в табл. 8.3. Параметр precision – это строка, указывающая формат данных (' u n s igned ', ' char ', ' int 8 ', ' double ' и т. д.). Параметр skip указывает число байт, которые будут пропущены каждый раз после прочтения ук а- занного числа да н ных. 
Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ 148  fwrite – з апись двоичных данных в файл. count = fwrite ( fid , A , precision ) записывает элементы ма т рицы A по столбцам в файл. Параметр precision такой же, как и функции fread . Выходной аргумент возвращает количество записанных элементов. Табл ица 8 . 3 . Возможные значения параметра size функции fread Вид Описани е n Ч тение n элементов в вектор - столбец inf Ч тение до конца файла в вектор - столбец, содержащий чи с- ло элементов, равное количеству элементов в файле [m,n] Ч тение данных в m строк и n столбцов, при этом запо л- нение происходит по столбцам . Н едостающие элеме нты з а- полняются нулями ; n может быть определ е но как inf , а m – нет [ m , inf ] Ч тение до конца файла с заполн ением m строк по стол б- цам . Н едостающие элементы заполняются нулями Следующий пример открывает файл test 1. dat и записывает в н е- го 101 раз число типа d ouble и закрывает файл. Затем от к рывает этот же файл, читает каждое второе число в массив B , переустанавливает т е- кущую п о зицию в начало файла, читает каждое третье число в массив C и закрыв а ет файл. >> A=[0:0.01:10]; fid = fopen('test1.dat', 'w'); fwrit e(fid, A, 'double'); fclose(fid); fid = fopen('test1.dat', 'r'); [B, count] = fread(fid, inf, 'double',8); frewind(fid); [C, count] = fread(fid, inf, 'double',16); fclose ( fid ); Бинарные файлы являются просто потоками данных. Для работы с текстом испо льзуются текстовые файлы, а также следующие функции для чтения и зап и си информации в текстовый файл . 
8.2. Низкоуровневый файловый ввод - вывод 149  A = fgetl ( fid ) – чтение следующей строки текстового файла, включая символ перевода строки.  A = fgets ( fid ) – чтение следующей строки текстового файла без символа перевода строки.  [ A , count ] = fscanf ( fid , format , size ) – чтение да н- ных из текстового файла, записанных в определенном формате.  count = fprintf ( fid , format , A , ...) – форматный в ы- вод в текстовый файл. Если идентификатор файла равен 1 или отсу т- ст вует, то вывод идет на экран.  A = sscanf ( s , format , size ) – чтение форматированных да н- ных из строки (а не из текстового файла).  [ s , errmsg ] = sprintf ( format , A ,...) – запись форматир о- ванных данных в строку (не в текстовый файл). Для чтения и записи текстовой и нформации применяются форма т- ные спецификации, пре д ставленные на р ис. 8.1. Возможные значения управляющего символа представлены в т абл . 8.4. Табл ица 8 . 4 . Значения управляющего символа формата данных Символ Значение - Выравнивание по левому краю + Обязательное написание знака числа (+ или – ) 0 Заполнение недостающих значений поля нулями % – 12.5 f Признак начала спецификации Управляющий символ (+, – , 0) Символ формата Точность Ширина поля Ри с .8.1. Структура формата данных 
Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ 150 Возможные значения управляющего символа форматной спецификации представлены в т абл . 8.5. Табл ица 8 . 5 . Спецификации при вводе и выводе форматированных да н ных Код Описание % c Одиночный символ % d Десятичное представление (знаковое) % f Представление с фиксированной точкой (вещественное) %e %E Э кспоненциальное представление %g %G Более компактное представление % f или % e %i Десятичное представление (знаковое) %o Восьмеричное представление (беззнаковое) %s Строка символов %u Десятичное представление (беззнаковое) %x %X Шестнадцатеричное предс тавление 8.3. Работа со стандартными файлами 8.3.1. Графические файлы Система MATLAB предлагает команды для чтения и записи ряда стандартных форматов графических файлов : BMP ( Microsoft Windows Bitmap ), TIFF ( Tagged Image File Format ), GIF ( Graphics Interchange F o r- mat ), JPEG ( Joint Photographic Experts Group ), PNG ( Portable Network Graphics ). П еречень функций, позволяющих ч и тать, записывать и отображать графические образы , представле н в та б л . 8.6. Табл ица 8 . 6 . Функц ии для работы с графическими файлами Функция Назначение image Отображение графического изображения imread Чтение графических данных из файла в массив imwrite Запись графических данных из матрицы в файл imfinfo Получение информации о графическом файле и содерж а- щемся в нем изображении 
8.3. Работа со стандартными файлами 151 В среде MATLAB для обработки изображений имеется сервисный пакет Image Processing ToolBox . 8.3.2. Другие форматы данных Для работы с аудио - и видеофайлами в стандартах au , vaw и avi применяются команды auread , auwrite , wavread , wavwrite , av i- read , что позволяет использовать MATLAB для подготовки и обр а ботки звуковой и видеоинформации. Для работы с данными электронных таблиц Excel применяются функции xlsread , xlswrite , а для работы с электронными таблиц а- ми в стандарте Lotus 123 – функции wk 1 read , wk1write . 
ТЕМА 9 ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ Под графическим интерфейсом пользователя ( Graphical User Inte r face – GUI ) подразумевается тип экранного представления, при котором пользователь может выбирать команды, запускать задачи, в водить и пр о сматривать исходные данные, обрабатывать полученные результаты, указывая на элементы управления (кнопки, пункты меню и т. д.), показанные на экране. Действия, как правило, выполняются при помощи мыши либо нажатием клавиш на клавиатуре. С ред а MATLAB предоставляет разработчику набор средств от команд создания элеме н- тарного и н терфейса для интерактивного взаимодействия с приложением до реализации графического интерфейса пользователя на основе ста н- дар т ных графических окон. Графический интерфейс п ользователя прил о жения, созданного в среде MATLAB , представляет собой одно или н е сколько графических окон Figures , содержащи х элементы управления (кнопки, окна реда к- тирования, списки, переключатели, полосы прокрутки, контейнеры, м е- ню, контекстные меню), а также оси координат для выв о да информации в графическом виде. Разработка приложения, оснащенного GUI , предп о- лагает выполнение следующих действий: создание графического окна, в ы бор и расположение необходимых элементов управления в пределах графического окна , определение внешнего вида элементов и н терфейса, а также определение действий, которые будут выполняться при наступл е- нии какого - либо события, связанного с элементом интерфейса, напр и мер при нажатии пользователем кнопки. Процесс создания приложения д о- пуска ет постепенное наращивание возможностей программы: добавл е- ние эл е ментов управления в графическое окно, запуск и тестирование приложения , возврат в режим редактирования. Стиль визуального об ъ- ектно - ориентированного программирования позволяет наглядно в реал ь- ном времени конструировать пользовательский интерфейс с помощью мыши в отличие от традиционного процесса написания кодов, при кот о- ром результат виден на экране только после запуска программы на в ы- полнени е . 
9.1. Элементарный интерфейс 153 9.1. Элементарный интерфейс Для создания элементарного интерфейса в виде простого ввода и вывода данных, приостановки вычислений и организации меню в MATLAB реализованы команды, предста в ленные в т абл . 9.1. Таблица 9 . 1 . Команды элементарного интерфейса Функция О писание input Интерактивный ввод с клавиатуры ginput Графический интерактивный ввод координат точек на графике курсор ом мыши и к лавишами клавиат у ры gtext Вывод текстовой строки в графическое окно после и н- тера к тивного выбора позиции вывода курсором мыши disp Вывод сообщения на экран keyboard Запрос на ввод с клавиатуры pause Пауза до нажатия какой - либо клавиши или задержка на N секунд waitfor Блокировка работы до наступления события error Печать сообщения об ошибке и выход из M - файла menu Меню диало гового ввода Следующий фрагмент кода позволяет интерактивно ввести число или текстовую строку с клавиатуры и затем вывести полученную и н- формацию в командное окно Command Wi n dow . >> A= input(‘A = ’); message = [‘variable A = ’, int2str(A)]; disp(message) S tr= input(‘Str = ’, ‘s’); message = [‘string Str = ’, Str]; disp(message) 9.2. GUI и дескрипторная графика Средствами MATLAB можно разрабатывать приложения, оснаще н- ные графическим интерфейсом пользователя GUI ( Graphical User Inte r face ). Для этого непосредст венно в графическом окне Figure 
Т е м а 9. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ 154 разм е щаются меню и графические элементы управления, позволяющие вводить и выводить данные в окнах редактирования, нажатием кнопок в ы полнять действия, выбирать и исполнять пункты меню и контекстного меню и т. д. Все действия выполняются при помощи элементов дескри п- торной графики MATLAB – графических объектов. Из командного окна MATLAB требуется всего лишь один раз вызвать M - функцию, созда ю- щую такое графическое окно. Команды для создания меню и контекстн о- го меню, а также различ ных элементов управления и контейнеров пре д- ставлены в табл. 9.2. Все перечисленные в таблице графические об ъ екты выполнены в системе MATLAB по объектно - ориентированной технол о- гии и характериз у ются присущим им набором свойств. Команды - конструкторы позволяют создавать объекты и одновременно задавать их некоторые свойства . Изменением свойств можно модифицировать вне ш- ний вид объектов и их поведение. Чтобы изменить свойства графических объектов после их создания , нужно получить доступ к ним по их дес к- риптору при помощи функций set () и get () . Все остальные сво й- ства объектов определяются по умо л чанию. Таблица 9 . 2 . Команды создания графического интерфейса пользователя Функция Описание figure Графическое окно axes Ос и координат uicontrol Элемент управления uimenu Меню uicontextmenu Контекстное меню uipanel К онтейнер для группировки элементов управл е ния uipushtool Управляющая кнопка на инструментальной панели uitoggletool Кнопка с фиксацией нажатого состояния на инс т- рументальной п а нели uitoolbar Инструментальная панель для быстрого доступа к часто испол ь зуемым функциям приложения uibuttongroup Контейнер для управления радиокнопками и кно п- ками с фикс а цией нажатого состояния 
9.2. GUI и дескрипторная графика 155 9.2.1. Объект Uicontrol Объекты Uicontrol яв ляются управляющими элементами польз о- вательского интерфе й са, которые выполняют функции обратного вызова, когда пользователь активизирует об ъ ект. Объект Uicontrol является потомком объекта Figure и, следовательно, не зав и сит от Axes . Способы вызова конструк тора следующие: >> h = uicontrol (' PropertyName ', PropertyValue ,...) >> h = uico n trol ( parent ,' PropName ', PropValue ,...) >> h = uicontrol >> uicontrol ( h ) Объект Uicontrol обладает целым рядом свойств. Одно из с а- мых важных свойств – свойств о Style , которое опре деляет тип эл е- мента управления и принимает одно из сл е дующих значений:  'checkbox' – индикатор с флажком;  ' edit ' – поле ввода и редактирования текста;  ' frame ' – контейнер любых компонентов;  ' listbox ' – компонент для отображения раскрытого списка строк;  ' p opupmenu ' – компонент для отображения и редактирования вып а- дающего списка строк;  'pushbutton' – управляющая кнопка;  'radiobutton' – радиокнопка;  ' slider ' – ползунок, управляемый клавишами или курсором мыши (линейка пр о крутки);  ' text ' – статический неизменя емый текст (метка);  ' toggle ' – кнопка с фиксацией нажатого состояния. Свойство String определяет надпись на элементе, а также список строк комп о нентов ListBox и PopupMenu . Свойство Position представляет собой вектор - строку из четыр е х чисел и зада е т положен ие управляющего элемента относительно левого нижнего у г ла графического окна и его размеры. Свойство Enable определяет, реагирует ли элемент на события, связанные с м ы шью и клавиатурой. Свойство Tag задает имя элемента – текстовую строку - идентификатор, опр еделяемую разработчиком , для возможного обращ е- ния к эл е менту не только через дескриптор, но и по имени . 
Т е м а 9. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ 156 Свойство Visible определяет видимость элемента управления. Например, следующий фрагмент кода создает элемент управления в виде кнопки, определяет ее имя , надпись, положение в графическом о к- не, а также реакцию на наж а тие этой кнопки: >> hTgbSave= uicontrol('Tag','btnSave', ... 'String','Save', 'Style','PushButton',... 'Callback','Save_fun', 'Units','Characters',... 'Position', [50 0,10 2]); 9.2.2. Объект U imenu Объекты Uimenu являются выпадающими меню, которые выпо л- няют функции о б ратного вызова при активизации пользователем пункта меню. Система MATLAB размещает Uimenu в Menu Bar окна Fi g- ure справа от существующего меню, определе н ного системой. Объект Uimenu является потомком объекта Figure и, следов а- тельно, не зависит от Axes . Способы вызова конструктора следующие: >> uimenu (' PropertyName ', PropertyValue ,...) >> uimenu ( parent , ' PropName ', PropValue ,...) >> h = uimenu ('PropertyName', PropertyValue,...) >> h = uimenu (parent, 'PropName', PropValue,...) Следующий пример создает в текущем окне Figure пункт меню Workspace , к о торый размещается справа от стандартного меню окна Figure и чей выбор позволяет польз о вателю создать новый объект Figure , сохранить переме нные рабочего пространства Workspace в файле matlab . mat , а также выйти из MATLAB . Кроме этого, опред е- ляется разделитель пунктов меню и « горячая » клавиша Ctrl + Q для выхода из MATLAB . % Define the user menu f = uimenu('Label','Workspace'); % Define the menu items with standard callbacks uimenu(f,'Label','New Figure','Callback','figure'); uimenu(f,'Label','Save','Callback','save'); uimenu(f,'Label','Quit','Callback','exit',... 'Separator','on','Accelerator','Q'); 
9.2. GUI и дескрипторная графика 157 9.2.3. Объект Uicontextmenu Объект Uicontextmenu со здает контекстное меню, которое поя в- ляется при нажатии пользователем правой кнопки мыши над графич е- ским об ъ ектом. >> h = uicontextmenu (' PropName ', PropValue ,...); Следующий пример создает контекстное меню, ассоциированное с линией на графике, к о торое появ ляется всякий раз, когда пользователь нажимает правую кнопку мыши в любом месте линии на графике. Пун к- ты меню позволяют пользователю изменить стиль л и нии. % Define the c ontext m enu cmenu = uicontextmenu; %Define the line, associate it with the context men u hline = plot(1:10, 'UIContextMenu', cmenu); % Define callbacks for context menu items cb1 = ['set(hline, ''LineStyle'', '' -- '')']; cb2 = ['set(hline, ''LineStyle'', '':'')']; cb3 = ['set(hline, ''LineStyle'', '' - '')']; % Define the context menu items ite m1 = uimenu( cmenu, 'Label', 'dashed', ... ..'Cal l back', cb1); item2 = uimenu( cmenu, 'Label', 'dotted', ... ..'Cal l back', cb2); item3 = uimenu( cmenu, 'Label', 'solid', ... ..'Cal l back', cb3); 9.2.4. Callback функции Следующий фрагмент кода создает управляющи й элемент – кно п ку. >> hF = figure; uicontrol( hF, 'Style','pushbutton', ... ' String ', ' Button ', ' Position ', [ 10 10 70 30 ]); В изуально э та кнопка функционирует – с помощью левой кнопки мыши она нажимается и отжимается, но при этом не выполняются ник а- ки е действи я как результат последствий нажатия. Это происходит пот о- му, что кнопке не приписаны никакие функции, выполнение которых и должно стать реакц и ей на нажатие. 
Т е м а 9. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ 158 Функции, которые связывают какие - либо действия с графическими элементами управления, наз ывают callback - функциями. Чтобы св я- зать кнопки с callback - функциями, которые будут вызываться средой MATLAB при нажатии на эти кнопки, при создании кнопок функцией uicontrol необходимо прописать свойство ' Callback ' , указав ему в качестве значения имя M - фун кции. >> hBtn1 = uicontrol( hF,'Style','pushbutton', ... 'Position', [60 20 140 40], ... 'String', 'Action', 'Callback', 'ActFun'); >> hBtn2 = uicontrol( hFg,'Style','pushbutton', ... 'Position', [300 20 140 40], ... 'String', 'New Fi g ure', 'Callb ack', 'figure'); Если функция, которая должна вызываться при нажатии на кнопку Action , будет записана в файле Actfun .m , то в качестве значения свойства 'Callback' обязательно ну ж но написать значение в виде имени функции ' ActFun ' , но не имени файла ' ActFun . m ' . 9.3. Среда GUIDE Создание графических окон с элементами управления возможно не только при п о мощи ручного написания соответствующих M - файлов и вызова внутри них фун к ций - конструкторов uicontrol , uimenu и т. д. Такой способ оправдан в случае, если разработ чик хочет полностью ко н- тролировать процесс разработки. К его недостаткам относится ненагля д- ность конструирования интерфейса. Увидеть, как выглядит разрабат ы- ваемый интерфейс на экране , можно только после написания кода и з а- пуска программы на выполнение. Для поддержки визуальной реализации графического интерфейса пользователя GUI в MATLAB имеется среда GUIDE ( Graphical U s- er Interface Development Environment ), при помощи к о торой создается графич е ский интерфейс и описываются прототипы функций на языке MATLAB . И нтегрированная среда GUIDE основыв а ется на техн о- логии быс т рой разработки приложений ( Rapid Application Development – RAD ) и являе т ся примером визуального объектно - ориентированного программирования. Такой способ взаимодействия разработчика и пр о- граммы с ком пьютером позволяет наглядно конс т руировать пользов а- тельский интерфейс с помощью мыши на основе м е ханизма Drag & Drop . 
9.3. Среда GUIDE 159 П о команде >> guide открывается графический редактор Layout Editor , содержащий палитру графических элементов упра в ления и форму для создания GUI . Графический интерфейс редактора представл е н на рис. 9.1. Рис. 9 . 1 . Окно разработки графического интерфейса С помощью мыши можно методом буксировки перетаскивать эти элементы на форму. Для создания граф ического интерфейса в среде GUIDE при помощи Layout Editor необходимо выполнить следующие де й ствия:  В командном окне ввести команду >> guide и открыть GUIDE Quick Start Dialog Box .  Выбрать « Blank GUI » шаблон на вкладке « Create New GUI » и нажать OK .  Если не обходимо загрузить существующий GUI , то следует ввести команду >> guide fig 1. fig или выбрать требуемый файл на вкладке « Open Existing GUI » .  Выбрать требуемые графические элементы управления из Палитры компоне н тов и поместить их на форму .  Дважды щелкнуть по выбранному компоненту и в открывшемся и н- спект о ре свойств Property Inspector установить необходимые свойства выделенного компоне н та . 
Т е м а 9. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ 160  Для просмотра иерархии установленных объектов выбрать пункт м е- ню View | Object Browser , из которого легко перейти к редакт и- рованию свойств нужного об ъ екта .  Для запуска созданного в Layout Editor интерфейса GUI выбрать команду Tools | Run или «Зеленый треугольник» на панели « гор я- чих » клавиш.  Сохранить созданный интерфейс GUI в файле с расширением . fig . С помощью контекстного ме ню создать M - файл с тем же именем, объ я- вить соответствующие компонентам callback - функции и отреда к- тировать их в р едакторе - о тладчике М - файлов . Интерактивная разработка интерфейса при помощи среды GUIDE состоит в подготовке графического макета (файл . fig ), а процесс з а- верш а ется созданием файла интерфейса ( . m ). Последний файл можно выз ы вать и редактировать, как и всякий M - файл. Необходимо помнить, что среда GUIDE только со з дает заголовки необходимых функций. Сам код callback - функций должен описывать разработч ик самосто я тельно. 
ЛИТЕРАТУРА 1. Ануфриев , И. Е. Самоучитель MatLab 5.3/6. x / И. Е. Ануфриев. СПб.: БХВ - Петербург, 2004. 736 с. 2. Говорухин , В. Компьютер в математическом исследовании. Уче б- ный курс / В. Говорухин, В. Цибулин. СПб.: П и тер, 2001. 624 с. 3. Потем кин , В. Г. Система MatLab 5 для студентов / В. Г. Поте м- кин. М.: ДИАЛОГ - МИФИ, 1998. 314 с. 4. Потемкин , В. Г. Система инженерных и научных расчетов Ma t- Lab 5. x : В 2 т. / В. Г. Поте м кин. М.: ДИАЛОГ - МИФИ, 1999. Т. 1. 366 с. 5. Потемкин , В. Г. Система инженерных и на учных расчетов Ma t- Lab 5. x : В 2 т. / В. Г. Поте м кин. М.: ДИАЛОГ - МИФИ, 1999. Т. 2. 304 с. 
СОДЕРЖАНИЕ ВВЕДЕНИЕ ................................ ................................ ................................ ...................... 3 Т ема 1 . НАЗНАЧЕНИЕ И СТРУКТУРА MATLAB ................................ ............... 5 1.1. Структура системы MATLAB ................................ ................................ .............. 6 1.1.1. Основные части MATLAB ................................ ................................ .......... 6 1.1.2. Сервисные программы MATLAB ................................ ............................... 7 1.2. Интерфейс пользовате ля ................................ ................................ ..................... 10 1.2.1. Командное окно ................................ ................................ ......................... 12 1.2.2. Окно просмотра рабочего пространства ................................ ................. 15 1.2.3. Редактор массивов ................................ ................................ ..................... 19 1.2.4. Текущий каталог ................................ ................................ ........................ 19 1.2.5. История команд ................................ ................................ .......................... 22 1.2.6. Редактор - отладчик M - файлов ................................ ................................ .... 23 1.2.7. Окна для работы с графикой ................................ ................................ ... 25 1.2.8. Окно просмотра справочной системы ................................ ..................... 27 1.2.9. Кнопка Start и окно Launch Pad ................................ ............................. 28 1.3. Взаимодействие с другими приложениями ................................ ...................... 28 Т ема 2 . ДАННЫЕ И ВЫЧИСЛЕНИЯ ................................ ................................ .... 29 2.1. Арифметические вычисления ................................ ................................ ............. 29 2.1.1. Простейшие вычисления ................................ ................................ ........... 30 2.1.2. Форматы представления данных ................................ .............................. 30 2.1.3. Комплексные числа ................................ ................................ .................... 32 2.1.4. Встроенные математические функции ................................ ..................... 32 2.2. Типы данных ................................ ................................ ................................ ........ 33 2.2.1. Переменн ые в MATLAB ................................ ................................ ........... 37 2.3. Массивы ................................ ................................ ................................ ................ 38 2.3.1. Типы массивов ................................ ................................ ........................... 38 2.3.2. Работа с массивами ................................ ................................ ................... 40 2.4. Векторы ................................ ................................ ................................ ................. 41 2.4.1. Вектор - строки ................................ ................................ ............................. 42 2.4.2. Вектор - столбцы ................................ ................................ ........................... 45 2.4.3. Поэлементные операции с векторами ................................ ..................... 46 2.5. Матрицы ................................ ................................ ................................ ................ 48 2.5.1. Создание матриц ................................ ................................ ........................ 48 2.5.2. Доступ к элементам матрицы ................................ ................................ .. 50 2.5.3. Взаимные преобразования век торов и матриц ................................ ...... 52 2.6. Тензоры ................................ ................................ ................................ ................. 54 2.6.1. Создание тензоров ................................ ................................ ..................... 54 2.6.2. Доступ к элементам тензора ................................ ................................ .... 56 2.7. Функции для работы с массивами ................................ ................................ ... 56 2.8. Вычисления с массивами ................................ ................................ ................... 58 2.8.1. Арифметические операции ................................ ................................ ........ 58 
Содержание 163 2.8.2. Операции отношения и логические операции ................................ ....... 61 2.9. Текстовые строки ................................ ................................ ................................ . 63 2.9.1. Функции для работы со строками ................................ .......................... 64 2.9.2. Массивы строк ................................ ................................ ........................... 65 2.10. Структуры ................................ ................................ ................................ ........... 66 2.10.1. Создание структуры ................................ ................................ ................. 66 2.10.2. Функции для работы с о структурами ................................ ................... 68 2.11. Массивы ячеек ................................ ................................ ................................ .... 69 2.11.1. Создание массива ячеек ................................ ................................ .......... 69 2.11.2. Функции для работы с массивами ячеек ................................ .............. 72 Т ема 3 . ЭЛЕМЕНТЫ ПРОГРАММИРОВАНИЯ ................................ .................. 73 3.1. Управление вычис лением ................................ ................................ ................... 73 3.1.1. Операторы ветвления ................................ ................................ ................. 73 3.1.2. Операторы цикла ................................ ................................ ........................ 76 3.2. Обработка исключительных ситуаций ................................ .............................. 78 Т ема 4 . СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ ................................ ....... 80 4.1. Типы M - файлов ................................ ................................ ................................ ... 80 4.1.1. Сценарии ................................ ................................ ................................ ..... 80 4.1.2. Функции ................................ ................................ ................................ ...... 81 4.1.3. Типы функций ................................ ................................ ............................ 86 4.1.4. Видимость имен функций ................................ ................................ ......... 89 4.1.5. Синтаксис вызова M - функций ................................ ................................ .. 89 4.2 . Переменные и их область действия ................................ ................................ . 94 4.2.1. Глобальные переменные ................................ ................................ ............ 94 4.2.2. Устойчивые переменные ................................ ................................ ........... 95 4.3. Отладка M - функций ................................ ................................ ............................ 96 Т ема 5 . ОБЪЕКТНО - ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ ......... 98 5 .1. Основные понятия ООП ................................ ................................ ..................... 98 5.2. Правила создания класса ................................ ................................ .................. 100 5.3. Методы класса ................................ ................................ ................................ ... 102 5.3.1. Конструктор класса ................................ ................................ .................. 103 5.4. Перегрузка функций и операторов ................................ ................................ . 104 5.4.1. Преобразование объек тов к другому классу ................................ ........ 104 5.4.2. Переопределение математических операторов ................................ ...... 105 5.4.3. Переопределение индексных операций ................................ ................. 108 5.5. Идентификация объекта ................................ ................................ .................... 109 Т ема 6 . ВЫСОКОУРОВНЕВАЯ ГРАФИКА ................................ ........................ 110 6.1. Двумерная графика ................................ ................................ ............................ 111 6.1.1. Функция plot ................................ ................................ ............................. 111 6.2. Оформление графиков функций ................................ ................................ ...... 116 6.2.1. Изменение свойств линии ................................ ................................ ....... 116 
Содержание 164 6.2.2. Толщина линии ................................ ................................ ........................ 118 6.2.3. Надписи на графика х ................................ ................................ .............. 119 6.2.4. Оформление осей системы координат ................................ .................. 121 6.3. Трехмерная графика ................................ ................................ .......................... 123 6.3.1. Функции для отображения поверхностей ................................ ............. 123 6.3.2. Функция plot3 ................................ ................................ ........................... 126 6.3.3. Положение камеры и вра щение графиков ................................ ........... 127 6.4. Сохранение графических изображений ................................ ........................... 128 Т ема 7 . ОСНОВЫ ДЕСКРИПТОРНОЙ ГРАФИКИ ................................ .......... 129 7.1. Описание графических объектов ................................ ................................ ..... 129 7.1.1. Иерархия графических объектов ................................ ............................ 129 7.1.2. Графический объект Root ................................ ................................ ....... 131 7.1.3. Графический объект Figure ................................ ................................ ..... 132 7.1.4. Графический объект Axes ................................ ................................ ....... 133 7.1.5. Графический объект UI ................................ ................................ ........... 134 7.1.6. Графический объект Image ................................ ................................ ...... 135 7.1. 7. Графический объект Light ................................ ................................ ...... 136 7.1.8. Графический объект Line ................................ ................................ ........ 137 7.1.9. Графический объект Patch ................................ ................................ ...... 138 7.1.10. Графический объект Rectangle ................................ ............................. 139 7.1.11. Графический объект Surface ................................ ................................ . 139 7.1.12. Графический объект Text ................................ ................................ ...... 140 7.2. Управление свойствами объектов ................................ ................................ .... 140 Т ема 8 . ИМПОРТ И ЭКСПОРТ ДАННЫХ ................................ ........................ 142 8.1. Сохранение данных рабочего пространства ................................ ................... 143 8.2. Низкоуровневый файловый ввод - вывод ................................ .......................... 144 8.2.1. Работа с именем файла ................................ ................................ ........... 144 8.2.2. Работа с бинарными и текстовыми файлами ................................ ...... 145 8.3. Раб ота со стандартными файлами ................................ ................................ ... 150 8.3.1. Графические файлы ................................ ................................ ................. 150 8.3.2. Другие форматы данных ................................ ................................ ......... 151 Т ема 9 . ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ ........................... 152 9.1. Элементарный интерфейс ................................ ................................ ................. 153 9.2. GUI и дескрипторная графика ................................ ................................ ......... 153 9.2.1. Объект Uicontrol ................................ ................................ ....................... 155 9.2.2. Объект Uimenu ................................ ................................ ......................... 156 9.2.3. Объект Uicontextmenu ................................ ................................ .............. 157 9.2.4. Callback функции ................................ ................................ ..................... 157 9.3. Среда GUIDE ................................ ................................ ................................ ..... 158 ЛИТЕРАТУРА ................................ ................................ ................................ ............ 16 1 
Учебное издание rолубева Лариса Леонидовна Малеви<) Александр Эрнестович ЩеJ'JlOва Наталья Леонидовна КОМПЬЮТЕРНАЯ МАТЕМАТИКА. ЧИСЛОВОЙ ПАКЕТ МА TLAB Курс лекций в авторскоЙ редакции Технический редактор r м, Ро.маllЧУК Корректор Е. И. Бондаренко Ответственный за выпуск Т .1..4, ТУРЧllНЯК l!о;щисано в печать 27.01.2006. ФОр\1ат 60х84/16. Бумаrа офсетная. rapHIITypa Тайм с, Печ31Ь офсетная, Усл. печ. л, 9,53. Уч.изд, ,",,8,41, Тllраж 250 экз 3ак, 1104, Белоруссю,й r()Суitaрствеиный университет, Лицензия на осущеСТВl1ение ИЗ,lательск()и деЯТСЛЬ!iUСТIl Н; 0233010056804 от 02.03,2004, 220050, Минск, проспект Независимости, 4, Отпечатано с Орf!ПIнала]\.\акета закаЗlика. l'еСlIублнканское унитарное IlреДПрliЯтие «Ищатеньский центр Белорусскоl'O rосударстненнOI'О унивсрситета». Лицензия На осушествлеЮ1е полиrpафИLIССКUЙ деятt.llL,НОСТН Х, 0233010056850 от 30.04,2004. 220030, J\1ИЮ.;К, уп. КраСllоармеЙская, б. 
ISHN ЧЛ95-485-565-3 789854 855653 .