СОДЕРЖАНИЕ
ВВЕДЕНИЕ
ТЕМА 1. НАЗНАЧЕНИЕ И СТРУКТУРА MATLAB
1.2. Интерфейс пользователя
1.2.2. Окно просмотра рабочего пространства
1.2.3. Справочная система
1.2.4. Редактор-отладчик M-файлов
1.3. Лабораторный практикум № 1
1.3.2. Задания
ТЕМА 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ
2.2. Числа
2.2.2. Комплексные числа
2.2.3. Специальные числа
2.3. Простейшие вычисления
2.3.2. Форматы представления данных
2.3.3. Встроенные математические функции
2.4. Данные в MATLAB
2.4.2. Переменные
2.4.3. Типы массивов
2.5. Векторы
2.5.2. Специальные вектор-строки
2.5.3. Вектор-столбцы
2.5.4. Вектор-функции
2.5.5. Операции с векторами
2.6. Матрицы
2.6.2. Специальные матрицы
2.6.3. Доступ к элементам матрицы
2.6.4. Преобразования матриц
2.6.5. Размеры матриц
2.7. Операции над матрицами
2.7.2. Операции отношения и логические операции
2.7.3. Матричные функции
2.8. Текстовые строки
2.8.2. Массивы строк
2.9. Структуры
2.9.2. Функции для работы со структурами
2.10. Массивы ячеек
2.10.2. Функции для работы с массивами ячеек
2.11. Лабораторный практикум № 2
2.11.2. Задания
ТЕМА 3. ЭЛЕМЕНТЫ ПРОГРАММИРОВАНИЯ
3.1.2. Оператор переключения switch
3.1.3. Оператор цикла while
3.1.4. Оператор цикла for
3.2. Лабораторный практикум № 3
3.2.2. Задания
ТЕМА 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ
4.1.2. Функции
4.1.3. Рекурсия
4.1.4. Использование функции в качестве параметра
4.2. Переменные и их область действия
4.2.2. Устойчивые переменные
4.3. Отладка M-функций
4.4. Лабораторный практикум № 4
4.4.2. Задания
ТЕМА 5. ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
5.2. Лабораторный практикум № 5
5.2.2. Задания
ТЕМА 6. ВЫСОКОУРОВНЕВАЯ ГРАФИКА
6.1.2. Диаграммы и гистограммы
6.1.3. Контурные графики
6.1.4. Векторные поля
6.2. Трехмерная графика
6.3. Оформление графиков функций
6.3.2. Изменение свойств линии
6.3.3. Надписи на графиках
6.4. Сохранение графических изображений
6.5. Лабораторный практикум № 6
6.5.2. Задания
ТЕМА 7. ОСНОВЫ ДЕСКРИПТОРНОЙ ГРАФИКИ
7.1.2. Дескрипторы графических объектов
7.1.3. Свойства графических объектов figure и axes
7.1.4. Свойства по умолчанию графических объектов
7.2. Лабораторный практикум № 7
7.2.2. Задания
ТЕМА 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ
8.2. Протокол-файл
8.3. Сохранение данных рабочего пространства
8.4. Низкоуровневый файловый ввод-вывод
8.4.2. Работа с бинарными и текстовыми файлами
8.5. Работа с графическими файлами
8.6. Лабораторный практикум № 8
8.6.2. Задания
ТЕМА 9. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ
9.2. GUI и дескрипторная графика
9.2.2. Основные свойства управляющих элементов
9.3. Среда GUIDE
9.4. Лабораторный практикум № 9
9.4.2. Задания
ЛИТЕРАТУРА
Text
                    л. л. rолубева
А. э. Малевич
Н. л. Щеrлова
 ..
чисповой ПАКЕТ
'l 8
ЛАБОРАТОРНЫЙ
ПР АКТ И КУМ


УДК 519.6737 ББК 22.19 r62 Рекомсндовано Ученым советом механикоматематическото факультета 16 сентября 2008 Т., протокол No 1 р е Ц е н з е н т ы: доктор физикоматематических наук, профессор А. п. Садовс/{uй; доктор технических наук, профессор В. А. Лuпнuц/{uй rолубева, л. л. r62 Компьютерная математика. Числовой пакет MatLab : лаб. прак тикум / Jl. Jl. rолубева, А. э. Малевич, Н. л. Щетлова.  Минск: БrУ, 2008.  171 с. : ил. ISBN 978985518081 5. в лабораторном практикуме по одному из разделов дисциплины «Компь ютерная математика», посвященному применению пакета MatLab, содержится необходимый теоретический материал, изложены и проиллюстрированы MHoro численными примерами методы реПlения основных типов задач, приведены упражнения для самостоятельной работы. Предназначено для студентов механикоматематическоrо факультета Бrу очной и заочной формы обучения, а также для всех, кто занимается научными исследованиями и инженерной работой, rде требуется математика. УДК 519.6737 ББК 22.19 JSBN 978985518081..5 @ rолубева л. П., Малевич А. Э., Щеrлова Н. П., 2008 @ Бrу, 2008 
л. л. rолубева А. э. Малевич Н. Л. Щеrлова v ЧИСЛОВОИ ПАКЕТ МATLA8 Лабораторный практикум МИНСК БrY 2008 
СОДЕРЖАНИЕ ВВЕДЕНИЕ .....................................................................................................................3 ТЕМА 1. НАЗНАЧЕНИЕ И СТРУКТУРА MATLAB............................................5 1.1. Структура системы МА TLAB.............................................................................. 5 1.2. Интерфейс пользователя .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... .....5 1.2.1. Командное окно. .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .....7 1.2.2. Окно про смотра рабочеrо пространства .............................................13 1.2.3. Справочная система ... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ... 14 1.2.4. Редакторотладчик Мфайлов. ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... ... 15 1.3. Лабораторный практикум NQ 1...........................................................................15 1.3.1. Теоретические вопросы.. ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... ... 15 1.3.2. Задания..................................................................................................... 16 ТЕМА 2. ДАННЫЕ И ВЫЧИСлЕНия.................................................................18 2.1. Арифметические вычисления. .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ... 18 2.2. Числа..................................................................................................................... 18 2.2.1. Рациональные числа... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ... 18 2.2.2. Комплексные числа .... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... .......... ... 19 2.2.3. Специальные числа .... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... .......... ...20 2.3. Простейшие вычисления.... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...21 2.3.1. Операторы. .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...21 2.3.2. Форматы представления данных.......................................................... 22 2.3.3. Встроенные математические функции................................................. 22 2.4. Данные в MATLAB ............................................................................................23 2.4.1. Типы данных ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... ...23 2.4.2. Переменные ... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...24 2.4.3. Типы массивов... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... ...26 2.5. Векторы................................................................................................................. 27 2.5 .1. Векторстроки..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... ...27 2.5.2. Специальные векторстроки.................................................................. 29 2.5 .3. Векторстолбцы.. .... ..... .... ..... ..... .... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... ...31 2.5 .4. Векторфункции . .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... ...33 2.5.5. Операции с векторами........................................................................... 34 2.6. Матрицы ... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...37 2.6.1. Создание матриц.................................................................................... 37 2.6.2. Специальные матрицы ...........................................................................38 
Содержание 169 2.6.3. Доступ к элементам матрицы .............................................................. 39 2.6.4. Преобразования матриц. ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... ...42 2.6.5. Размеры матриц. .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... ...43 2.7. Операции над матрицами.. ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...44 2.7.1. Арифметические операции.................................................................... 44 2.7.2. Операции отношения и лоrические операции....................................45 2.7.3. Матричные функции.. .... ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... .... ..... ..... ...46 2.8. Текстовые строки................................................................................................ 47 2.8.1. Простейшие операции со строками...................................................... 47 2.8.2. Массивы строк... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... ...48 2.9. Структуры............................................................................................................. 49 2.9.1. Создание структуры............................................................................... 49 2.9.2. Функции для работы со структурами ................................................. 50 2.10. Массивы ячеек ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...53 2.10.1. Создание массива ячеек ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... ...53 2.10.2. Функции для работы с массивами ячеек ............................................ 54 2.11. Лабораторный практикум NQ 2 ......................................................................... 56 2.11.1. Теоретические вопросы..........................................................................56 2.11.2. Задания.. ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... .... ....57 ТЕМА 3. ЭЛЕМЕНТЫ проrр АММИРОВАНИЯ ...............................................67 3.1. Управление вычислением.. ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...67 3.1.1. Оператор условия if...............................................................................68 3.1.2. Оператор переключения switch.............................................................69 3.1.3. Оператор цикла while............................................................................ 71 3.1.4. Оператор цикла for................................................................................ 72 3.2. Лабораторный практикум NQ 3...........................................................................74 3.2.1. Теоретические вопросы.. ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... ...74 3.2.2. Задания..................................................................................................... 75 ТЕМА 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ ....................................81 4.1. Типы Мфайлов ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...81 4.1.1. Сценарии.................................................................................................. 81 4.1.2. функции..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...82 4.1.3. Рекурсия..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ..... ...86 4.1.4. Использование функции в качестве параметра................................... 87 4.2. Переменные и их область действия.................................................................89 4.2.1. rлобальные переменные ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... ...89 4.2.2. Устойчивые переменные..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... ...90 4.3. Отладка М функций ............................................................................................ 91 4.4. Лабораторный практикум NQ 4...........................................................................92 4.4.1. Теоретические вопросы.. ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... ...92 4.4.2. Задания..................................................................................................... 92 
170 Содержание ТЕМА 5. ОБЪЕКТНО ОРИЕНТИРОВАННОЕ проrр АММИРОВАНИЕ .....96 5.1. Правила создания класса... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... ... 9б 5.2. Лабораторный практикум NQ 5...........................................................................97 5.2.1. Теоретические вопросы.. ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... ...97 5.2.2. Задания..................................................................................................... 98 ТЕМА 6. ВЫСОКОУРОВНЕВАЯ rp АфИКА.....................................................102 б.1. Двумерная rpафика.... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ...... 102 б.1.1. 2Drpафики функций.. .... ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... .... ..... ...... 103 б.1.2. Диаrpаммы и rистоrpаммы................................................................. 11 О б.1.3. Контурные rpафики.... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... ...... 114 б.1.4. Векторные поля ....................................................................................115 б.2. Трехмерная rpафика.. ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ...... 11 б б.2.1. 3Drpафики функций и поверхностей ...............................................117 б.3. Оформление rpафиков функций ......................................................................122 б.3.1. Управление видом rpафика.................................................................122 б.3.2. Изменение свойств линии................................................................... 124 б.3.3. Надписи на rpафиках...........................................................................125 б.4. Сохранение rpафических изображений...........................................................12б б.5. Лабораторный практикум NQ б.........................................................................127 б.5.1. Теоретические вопросы.. ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ...... 127 б.5.2. Задания................................................................................................... 128 ТЕМА 7. ОСНОВЫ ДЕСКРИПТОРНОЙ rРАфИКИ.......................................132 7.1. Описание rpафических объектов.....................................................................132 7.1.1. Иерархия rpафических объектов ........................................................132 7.1.2. Дескрипторы rpафических объектов..................................................133 7.1.3. Свойства rpафических объектов figure и axes ...........................137 7.1.4. Свойства по умолчанию rpафических объектов.............................. 137 7.2. Лабораторный практикум NQ 7 ......................................................................... 142 7.2.1. Теоретические вопросы.. ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ...... 142 7.2.2. Задания................................................................................................... 142 ТЕМА 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ .....................................................145 8.1. Чтение/запись файлов разных форматов........................................................145 8.2. Протоколфайл .. ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ..... .... ...... 14б 8.3. Сохранение данных рабочеrо пространства...................................................14б 8.4. Низкоуровневый файловый BBOдBыBOд..........................................................148 8.4.1. Работа с именем файла.......................................................................148 8.4.2. Работа с бинарными и текстовыми файлами................................... 149 8.5. Работа с rpафическими файлами .................................................................... 152 8.б. Лабораторный практикум NQ 8......................................................................... 153 8.б.1. Теоретические вопросы.. ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ...... 153 8.б.2. Задания................................................................................................... 153 
Содержание 171 ТЕМА 9. rРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛьзОВАТЕля........................157 9.1. Интерактивный интерфейс............................................................................... 157 9.2. GUI и дескрипторная rpафика ........................................................................158 9.2.1. Управляющие элементы. ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ...... 158 9.2.2. Основные свойства управляющих элементов................................... 159 9.3. Среда GUIDE .... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... ...... 163 9.4. Лабораторный практикум NQ 9.........................................................................164 9.4.1. Теоретические вопросы.. ..... .... ..... ..... .... ..... .... ..... .... ..... ..... .... ..... .... ...... 164 9.4.2. Задания................................................................................................... 164 ЛИТЕРА ТУРА ............................................................................................................167 
ВВЕДЕНИЕ MATLAB@ (MATrix LABoratory)  это высокоэффективная система инженерных и научных расчетов фирмы The MathWorks, Inc (USA). Bы числения, визуализация и проrраммирование в ней представлены в удоб ной для работы среде, rде задачи и решения выражены в знакомой MaTe матической форме. Представление данных в виде массивов (матриц и векторов) обеспечивает пользователю широкие возможности решения задач, связанных с матрицами и матричными вычислениями, по cpaBHe нию с большинством языков проrраммирования. Наиболее известные области применения системы МА TLAB: . математические вычисления; . разработка алrоритмов; · сбор информации; . вычислительный эксперимент, имитационное моделирование, MaKe тирование; . анализ данных, исследование и визуализация результатов; . научная и инженерная rрафика; . разработка приложений, включая создание rрафическоrо интерфейса пользователя GUI. в практическом пособии, состоящем из девяти тем, излаrаются oc новы работы в среде МА TLAB: Тема 1  назначение и структура пакета MATLAB, rрафический ин терфейс пользователя. Тема 2  представление данных в виде массивов, матриц и векторов, вычисления арифметических выражений. Тема 3  основные конструкции языка проrраммирования MATLAB. Тема 4  сценарии и функции, локальные и rлобальные переменные. Тема 5  основы объектно ориентированноrо проrраммирования. Тема 6  высокоуровневая rрафика. Тема 7  rрафические объекты как элементы дескрипторной rpафики. Тема 8  импорт и экспорт данных, орrанизация работы с файлами. Тема 9  создание приложений, оснащенных rрафическим интерфей сом пользователя. 
4 Введение По каждой теме приведены основные понятия, примеры, теоретиче ские вопросы и практические задания. Перед тем как приступить к BЫ полнению заданий, следует тщательно проработать все примеры, пред ложенные в изучаемой теме. Предлаrаемом практическое пособие в первую очередь адресовано студентам механикоматематическоrо и физическоrо факультетов уни верситета, но может использоваться студентами инженернотехнических специальностей, аспирантами, преподавателями, научными работниками и всеми, кто в той или иной степени связан с научными исследованиями и инженерной работой, rде требуется математика. В настоящее время широко используется МА TLAB версии 6.5, He давно вышла версия 7.0.1 Service Pack 1. Для получения последней информации о МА TLAB и друrих про дуктах Math W orks обращайтесь к www.mathworks.com . 
ТЕМА 1 НАЗНАЧЕНИЕ И СТРУКТУРА MATLAB МА TLAB  это интерактивная система, ориентированная на работу с матрицами, что позволяет эффективно решать мноrие вычислительные задачи, связанные с векторноматричными формулировками. Поддерживая диалоrовый интерактивный режим для выполнения простых вычислений и операций, современный МА TLAB  это OДHOBpe менно и операционная среда, и язык проrраммирования, на котором MO rYT быть написаны проrраммы, в том числе и сложные проrраммы с раз витым rpафическим интерфейсом. 1.1. Структура системы МА TLAB Система МА TLAB состоит из пяти основных частей: · среда разработки; . библиотека математических функций; . язык проrраммирования; . высокоуровневая идескрипторная rрафика; . интерфейс прикладноrо проrраммирования. 1.2. Интерфейс пользователя Среда разработки  это набор инструментов и средств, которые помоrают использовать функции и файлы МА TLAB, а также поддержи вают связь МА TLAB с пользователем и друrими приложениями. Среда разработки включает в себя рабочий стол МATLAВ Desktop, браузеры справочной системы Help, файлов и поисковоrо пути Search Path. Интерфейс рабочеrо стола МATLAВ Desktop представляет собой rрафический интерфейс, содержащий следующие элементы (рис. 1.1): · несколько окон; . меню, пункты KOToporo автоматически перенастраиваются в зависи мости от Toro, какое окно является в данный момент активным; 
6 т е м а 1. НАЗНАЧЕНИЕ И СТРУКТУРА МА TLAB . кнопку Start для получения доступа к содержимому рабочей cpe ды, модулям Toolbox, справочной системе и демонстрационным проrраммам; панель инструментов с кнопками и раскрывающимся списком; строку состояния. . . Меню измеН\1етС\1, в зависимости от Используйте lаЬ дт перехода к VVorkspace браузеру' Просмотр И изменение текущей директории Перемещение Command VVindow за пределы рабочеrо стола Просматривайте или Нажмите Star1 дт" Т\1НИте за разделительную б ВЫПОЛН\1ите ранее , bICTporO доступа к полосу дт изменеНИ\1 использовавшиеС\1 команды ВОЗМОЖНОСТ\1М Mallab. . размеров окон. с помощью Command Hlslory Вводите команды в командной строке Mallab. Рис. 1.1. Внешний вид рабочеrо стола МATLAВ Desktop к окнам МATLAВ Desktop относятся: · командное окно Command Window; · окно про смотра рабочеrо пространства Workspace Browser; 
1.2. Интерфейс пользователя 7 · окно текущеrо каталоrа Current Directory; · окно истории команд Command History; . окно редактораотладчика Мфайлов Mfile EditorjDebugger; . окна для работы с rрафикой Figures. Вспомоrательные окна: . окно редактора массивов Array Edi tor; · диалоrовое окно установки путей Set Path; · окно Launch pad доступа к различным модулям Toolbox; . окно rрафическоrо редактора Layout Edi tor для создания GUI; . окно про смотра справочной системы Help Browser. Окна рабочей среды самостоятельны, «склеены» между собой, MO rYT располаrаться в виде вкладок или в виде отдельных окон. Технолоrия Drag&Dock позволяет полностью пер енастр аивать внешний вид МATLAВ Desktop по желанию пользователя. Если в МATLAВ Desk top отсутствуют некоторые окна, то в меню Desktop следует выбрать соответствующие пункты Command Window, Workspace, Current Directory, Command History, Launch pad или выбрать пункт меню Desktop I Desktop Layout  Default для восстановления настроек интерфейса МATLAВ Desktop по умолчанию. 1.2.1. Командное окно Командное окно Command Window используется для работы в ин терактивном режиме: для вычисления выражений, ввода данных, созда ния переменных, вызова команд, функций, сценариев и вывода результа тов их выполнения по типу вопрос  ответ (рис. 1.1). . Ввод команды или выражения осуществляется в командном окне Command Window только в строке, помеченной символом » при rлашения командной строки. . Завершение ввода команды и передача управления МА TLAB дЛЯ ее выполнения: клавиша <Enter>. . Подавление вывода результатов в командное окно: точка с запятой в конце любой команды. . Компактная форма вывода результатов: команда format compact. 
8 т е м а 1. НАЗНАЧЕНИЕ И СТРУКТУРА МА TLAB · Повторное занесение в командную строку ранее введенной команды или выражения: клавиши < i > и <  >. . Перемещения по командной строке с выражением: клавиши <>, <>, <Ноте>, <End>. . Если после перемещения по рабочей области окна Command Window пропала командная строка с миrающим курсором, то следует нажать <Enter>. . Разбиение лоrической строки (не более 256 символов) на несколько физических строк: ввод трех идущих подряд точек и нажатие клави ши <Enter>. Выполнение команды: нажатие на клавишу <Enter> в последней строке, не содержащей трех идущих подряд точек. . Прокрутка содержимоrо окна Command Window: клавиши клавиату ры <PageUp>, <PageDown>, <Ctrl+Home>, <Ctrl+End> и полоса прокрутки (Scrollbar). . Очистка командноrо окна Command Window: команда » clc. . Дополнительные возможности просмотра и повторноrо вызова ранее введенных команд: окно истории команд Command History. Iпример 1. 11 Создать BeKTopCтpOKY V  (5. 1 6. 2  3 . 1 9. 7 ) . » V = [5.1 6.2 З.1 9.7]; или: » V = [5.1, 6.2, з. 1, 9. 7] v  5.1 6.2 3.1 9.7 Узнать размерность массива v. » ndims (V) ans 2 » size (V) ans 1 4 
1.2. Интерфейс пользователя 9 Iпример 1. 21 Создать BeKTopCTPOKY V из 6 идущих подряд натуральных чисел, начиная с 1. Вывести элементы массива V в командное окно. Прочитать содержимое BToporo элемента массива v. Удалить четвертый элемент. » V == 1:6 v  1 2 3 » V(2) ans  2 » V(4)==[] V  4 5 6 1 2 3 5 6 Iпример 1. з1 Вычислить сумму векторстолбцов а  [Н ь  ['::} » а == [1; 4 . 7] ; , » Ь == [1.2; 4.4; 7.9] ; » с == а + Ь с  1.2 8.4 14.9 Iпример 1. 41 Создать матрицу F = [ } тде А  ( } в  (  :} с==(о 1), D==(l 2 з). » А == [1 2; 3 4]; 
10 » В == » С == » D == » F == F  1 3 О т е м а 1. НАЗНАЧЕНИЕ И СТРУКТУРА МА TLAB [3:5; 6:1:8]; [О 1]; [1:1:3]; [А в;с О] 2 4 1 3 6 1 4 7 2 5 8 3 Вывести вторую строку матрицы F. » F (2, : ) ans 3 4 6 7 8 Удалить третий столбец матрицы F. » F ( : , 3) == [] F  1 3 О 2 4 1 4 7 2 5 8 3 Iпример 1. 51 Создать матрицу 4 х 4  маrический квадрат. » magic(4) ans  16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 Iпример 1. 61 Построить rрафики функций sin (х), cos (2х) в одной системе координат. AprYMeHT х изменяется от 2л: до 2л: с шаrом 0.01. » х == 2*pi : 0.01 : 2*pi; » у == sin(x); 
1.2. Интерфейс пользователя 11 » plot (х, у, х, sin (x) . *cos (2*х) ) После выполнения команд на экране появляется окно F igure 1 с rрафиками функций, изображенное на рис. 1.2. Рис. 1.2. rрафики функций Такой же rрафик будет получен, если две последние строки кода за менить на следующий: » plot (х, [ sin (х); sin (x) . *cos (2*х) ] ) Iпример 1. 71 Введите команды » x==0:0.01:2*pi; » y==sin(x); » plot(x, у) Затем введите команды » z==cos(x); » plot (х, z) Наконец, введите команды 
12 т е м а 1. НАЗНАЧЕНИЕ И СТРУКТУРА МА TLAB » Т==[у; z]; » plot(x, Т) Iпример 1. 81 Операции над матрицами: » а==[l 2 3] 9- создание векторстроки о а  1 2 3 » Ь==[4 5 6] ; » а+Ь % поэлементное сложение векторов ans 5 7 9 » а*Ь % матричное умножение ??? Error using > mtimes Inner matrix dimensions must agree. % поэлементное умножение » а.*Ь ans 4 » Ь' ans 4 5 6 » а*Ь' ans 32 10 18 % комплексносопряженное транспонирование % матричное умножение Iпример 1. 91 Введите в командном окне следующие команды: » clear » area == рi*r Л 2 В чем ошибка? Теперь введите команды 
1.2. Интерфейс пользователя 13 » r==2; » area == рi*r Л 2 Теперь введите команду » area == @(r) рi*r. Л 2, которая создает функцию для вычисления площади Kpyra. Определенная таким образом функция называется анонимной. Вызов: » s == аrеа([2,3]) s 12.5664 28.2743 1.2.2. Окно просмотра рабочеrо пространства . Рабочее пространство Workspace: специальная область памяти компьютера для хранения данных в течение сеанса работы МА TLAB. · Окно Workspace Browser: просмотр данных. . Окно редактора массивов Array Editor: просмотр и редактирова ние визуально представленных данных рабочеrо пространства. . Данные из рабочеrо пространства Workspace сохраняются и заrру жаются в МА ТLАВформате. . Сохранение данных: save < Filename > <VariablesList>: » save  сохранение всех данных в стандартный файл (по умол чанию MATLAB. mat); » save path \Filename  сохранение всех данных в указан ный файл; » save path \Filename name1 name2  сохранение OT дельных переменных в указанный файл. . Заrpузка данных: load < Filename > <VariablesList>: » load  заrрузка данных из файла по умолчанию MATLAB. mat; » load filename  заrрузка из указанноrо файла; » load filename name1 name2  чтение отдельных пере менных из указанноrо файла. . Помощь: команды» help save или» help load. . Вывод списка всех переменных, входящих на данный момент в рабо чее пространство Workspace: команда» who. 
14 т е м а 1. НАЗНАЧЕНИЕ И СТРУКТУРА МА TLAB . Информация о размере и типе переменных: команда » whos. . Очистка рабочеrо пространства Workspace и удаление всех данных: команда» clear. · Удаление из рабочеrо пространства Workspace переменных с име нами name1 и name2: команда » clear name1 name2. 1.2.3. Справочная система . Открытость кода встроенных функций MATLAB. . Полная справочная система с подробным описанием компонентов МА TLAB, ero структуры, встроенных функций и примерами. . Доступ из командной строки к кратким сведениям о встроенных функциях:  doc  запуск справочной системы по всем разделам МА TLAB в отдельном окне Help;  help  вывод разделов встроенной справки в командное окно;  help group  обзор указанноrо раздела в командном окне. Ha пример, »help elfun  обзор элементарных функций;  help function  описание указанной функции или команды в командном окне;  helpwin  запуск краткой справочной системы по разделам МА TLAB в окне Help;  helpdesk  запуск справочной системы по всем разделам МА TLAB в отдельном окне Help;  lookfor Кеу  поиск Мфайлов по ключу;  demo  демонстрационные примеры в окне Help;  type <function>  просмотр текста Мфайла. . Встроенные М функции и команды МА TLAB при вызове пишутся строчными буквами. Iпример 1. 101 » help for  получить справку об операторе цикла for; » help format  получить справку о форматах вывода данных. 
1.3. Лабораторный практикум NQ 1 15 1.2.4. Редакторотладчик Мфайлов Назначение: создание, редактирование, отладка, сохранение и выпол нение М файлов (М сценариев, М функций). . Вызов:  rлавное меню File I New  Mfile, File I Open...,  команда» edit или команда » edit Mfilename. . Подrотовка и запуск М сценария из командноrо окна:  открыть редакторотладчик Мфайлов MFile Editor;  ввести код и сохранить ero в файле MF i 1 е . т;  установить окно текущеrо директория Current Directory на подкаталоr, rде сохранен файл MF i 1 е . т;  в командном окне Command Window ввести команду» МFile. 1.3. Лабораторный практикум Х!! 1 1.3.1. Теоретические вопросы 1. Назначение пакета МА TLAB, версии. 2. Сравнение МА TLAB с друrими математическими пакетами. 3. Интерфейс пользователя пакета МА TLAB. 4. Шесть основных компонент интерфейса пользователя MATLAB. 5. Модификация расположения окон интерфейса МА TLAB. 6. Восстановление расположения окон интерфейса MATLAB. 7. Назначение окна Command Window. 8. Назначение окна Workspace Browser. 9. Назначение окна Current Directory. 10. Назначение окна Command History. 11. Назначение окна Figure. 12. Назначение окна Mfile Editor. 13. Назначение Help & Оеmо. 14. Интерактивный режим работы. 15. Составные части командноrо окна. 16. Приrлашающий символ командной строки. 17. Разделение лоrической команды на несколько физических строк. 18. Получение интерактивной справки. 19. Подавление вывода результата выполнения команды. 
16 т е м а 1. НАЗНАЧЕНИЕ И СТРУКТУРА МА TLAB 20. Построение rрафика функции, нескольких функций. 21. Очистка командноrо окна. 22. Очистка рабочеrо пространства. 23. Сохранение данных рабочеrо пространства. 24. Заrpузка данных рабочеrо пространства. 25. Вывод списка всех переменных рабочеrо пространства. 1.3.2. Зад ания адание 1. 11 Запустите МATLAВ. Модифицируйте расположение всех открытых окон интерфейса пользователя МATLAВ. Последовательно закройте все окна МATLAВ Desktop, кроме командноrо окна Command Window. Восстановите настройки по умолчанию интерфейса МATLAВ Desktop, выбрав пункт меню Desktop I Desktop Layout  Default. адание 1. 21 Протестируйте пример «Traveling Salesman» из демонстраци онной проrpаммы ОЕМО. В командной строке введите команду » help travel. Исследуйте результат выполнения этой команды. Затем введите команду» type travel и изучите код данноrо примера. адание 1. з1 Исследуйте результат выполнения команды» help help. адание 1. 41 В командной строке введите команду» help plot. Изучите способы построения rрафиков функций. Постройте rрафик функции: а) у == .J3 sin(3x)cos(2x); 4 J5 с) у ==x2; е Ь) у == siп(зх5п/ll).J8зп ; e2 +4 Y == 8(x+0.ln? +2п 5 ' d) rде переменная х изменяется в пределах от 3л: до 3л: с шаrом 0.01. 
1.3. Лабораторный практикум NQ 1 17 адание 1. 51 в командной строке введите команду» help for. Изучите пра вила орrанизации цикла при помощи команды for. Орrанизуйте цикл, вычисляющий факториал числа. Найдите значения 10!, 18!, 38!. адание 1. 61 Постройте rрафики функций 2sin (5x), 3соs (о. 2х) в одной системе координат. Переменная х изменяется от 6л: до 6л: с шаrом 0.01. адание 1. 71 Напишите анонимную функцию, вычисляющую: а) объем цилиндра volum== рi*r Л 2*h.; Ь) площадь поверхности цилиндра; с) площадь поверхности правильноrо тетраэдра; d) площадь треуrольника по формуле f'epoHa. адание 1. 81 Полиномы Чебышева. Постройте rpафики шести функций, COOT ветствующих полиномам Чебышева, в одной системе координат. Значе ние aprYMeHTa изменяется в пределах от l до 1 с шаrом 0.01. Полиномы rенерируйте в цикле. Определите, как будут храниться значения поли номов. Рекурсивная формула определения полиномов имеет вид Tn (х) == 2x*Tn1 (х) Tn2 (х) ; Тl (х) ==х; То (х) ==1; Рис. 1.3. rрафики полиномов Чебышева 
ТЕМА 2 ДАННЫЕ И ВЫЧИСЛЕНИЯ Все данные в МА TLAB представляются в виде массивов, использо вание которых позволяет эффективно решать мноrие вычислительные задачи, связанные с векторноматричными формулировками. 2.1. Арифметические вычисления Встроенные функции МА TLAB позволяют находить значения раз личных выражений. Команды для вычисления выражений имеют вид, свойственный всем языкам проrраммирования высокоrо уровня. . При записи оператора снеявным присваиванием вида х + у резуль тат присваивается автоматически создаваемой системой переменной с именем ans (ANSwer). . При записи оператора с явным присваиванием вида а == х + у pe зультат присваивается переменной, стоящей слева от знака равенства. . Точка с запятой в конце любой команды подавляет вывод результатов на экран. . Переменные с результатом выполнения любоrо арифметическоrо действия размещаются в рабочем пространстве. 2.2. Числа 2.2.1. Рациональные числа . Ввод в десятичной системе счисления. . Формат: [Знак] Число [Экспонента]: знак: + или ; число: минимально одна цифра; целочисленное или вещественное представление; экспонента: е или Е перед целым числом. 
2.2. Числа 19 . Представление в бинарной системе: 1 бит  знак; 11 бит  экспонента; 52 бита  мантисса. . Диапазон: наименьшее положительное число: 1. 2 (и lO ) z 2.225074.10308. , наибольшее число: (2  252). 2(21O1) z 1.797693.10+308. , (относительная) точность: 252 z 2.220446 .1016 Iпример 2. 11 » format short » 1.2345е78 ans » format long » pi ans 1.2345e078 3.14159265358979 » format long » realmax » format short » realmax ans  ans 1.797693134862316е+308 1.7977е+308 » format long » realmin » format long » intmax('uint64') ans  ans 2.225073858507201e308 18446744073709551615 2.2.2. Комплексные числа . Представление: два рациональных числа через знак + или  . . Мнимая часть числа: символ i либо j. . Если мнимая часть числа равна нулю, то выводится только вещест венное число. . Комплексные числа при умножении, делении и возведении в степень заключаются в круrлые скобки. . Для вычисления комплексносопряженноrо числа применяется апост роф, который следует набирать сразу за числом, без пробела. 
20 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ . Возможно использование комплексных чисел в качестве aprYMeHToB встроенных элементарных функций. Iпример 2. 21 » sqrt(1.0) » (2.+3i)*(3+5j) ans ans о + 1.0000i 9.0000 +19.0000i » 0+5.6j » 5+0i ans ans о + 5.6000i 5 » 3+2i' » (1+5i+ 3+2i')' ans ans 3.0000  2.0000i 4.0000  3.0000i » sin(3i) » 1.2+3.4Е5i ans ans  о +10.0179i 1.2000е+000 +3.4000e+005i Iпример 2. з1 » sqrt(1.0)*(2.+3i)*3(71.5j)Л2+(1+5i+ 3+2i')' ans 48.7500 +9.0000i 2.2.3. Специальные числа . pi: число л:; . Inf: бесконечность ( 00 ) :  возникает при переполнении;  имеет знак. · NaN: нечисловое значение (Not а Number): возникает при вычислениях с неопределенным результатом; операции с NaN возвращают NaN. 
2.3. Простейшие вычисления 21 Iпример 2. 41 Inf Inf » 1/0 Warning: Divide Ьу zero ans  Inf » 1е309 » 1е308Inf ans ans » l/Inf о NaN » 1/0 Warning: Divide Ьу zero ans  Inf » InfInf ans ans » Inf+NaN » l/NaN NaN NaN » О/О Warning: Divide Ьу zero ans  NaN ans ans 2.3. Простейшие вычисления 2.3.1. Операторы . Операторы: +, . +,, ., *, . *, /, . /, \, . \, Л, . Порядок операций:  возведение в степень Л;  умножение и деление *, / , \; сложение и вычитание +,  слева направо. . Изменение порядка: (). Л , . , , Iпример 2. 51 » 5+4*3 Л 2 » 3Л3Л3 » 3Л(3Л3) ans ans ans 41 19683 7.6256е+012 
22 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ » 10/2 ans 5 » 10\2 » 1\0 ans ans 0.2000 о 2.3.2. Форматы представления данных . Вид, в котором выводится результат вычислений, зависит от формата вывода, установленноrо в МА TLAB. . Переустановка формата: команда» format. . Выбранный формат сохраняется до переустановки друrоrо формата. . Формат вывода действует только при отображении данных. . Компактная форма вывода результатов: команда format compact. . Если при отображении слишком большоrо или малоrо числа резуль тат не укладывается в установленный формат short, то данный pe зультат будет выведен в экспоненциальной форме. · При вводе десятичных дробей используется точка. . Информация о форматах: команда» help format. Iпример 2. 61 х == [4/3 1.2345е6] format short format short е format short g format long format long g format rat format + 1.3333  1.3333e+OOO 1.3333  1.33333333333333  1.33333333333333 4/3 0.0000 1.2345e006 1.2345e006 0.00000123450000 1.2345e006 1/810045 + 2.3.3. Встроенные математические функции Встроенные математические функции МА TLAB включают следую щие элементарные функции: . без параметров: pi, i, j, eps, realmin, realmax; 
2.4. Данные в MATLAB 23 . триrонометрические sin, asin, sinh, asinh. Аналоrично для cos, tan, cot, sec, csc; · экспоненциальные: exp,log, log10, log2,pow2, sqrt,nthroot, nextpow2 ; · комплексные: abs, angle, complex, conj, imag, real, isreal; . окруrления: fix, floor, ceil, round; . деления с остатком: mod, rem; . знака: sign. IОбратите вниманиеl . Имена функций набираются строчными буквами. . Арrументы функций заключаются в круrлые скобки и разделяются запятыми. . Выходные параметры функций заключаются в квадратные скобки и разделяются запятыми или пробелами. . Список всех встроенных элементарных функций с их кратким описа нием: команда» help elfun. . Список всех встроенных специальных математических функций (функции Бесселя, полиномы Лежандра, rаммафункции и т. д.) С их кратким описанием: команда » help specfun. 2.4. Данные в МА TLAB 2.4.1. Типы данных . Все данные МА TLAB являются массивами. . Размерность массивов не надо указывать явно. . Минимальная размерность массива О х О и может увеличиваться до требуемоrо значения динамически. · Типы данных: logical, char, int8, uint8, int16, uint16, int32,uint32,int64,uint64,singlе,dоublе,сеll,struсt, function handle,user classes,java classes. . По умолчанию все числовые переменные считаются матрицами с комплексными числами. 
24 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ . Вычисления выполняются с удвоенной точностью, поэтому большин ство функций работают с массивами чисел удвоенной точности (dou Ые), а также со строками (char). . МА TLAB использует целые числа для индексирования, а также для работы с rpафикой. . Индексы начинаются с 1. . Тип sparse предназначен для работы с разреженными матрицами. . Типы int *, uint * предназначены для обработки изображений и эффективноrо хранения данных в памяти. . Перечень встроенных типов данных: команда» help datatypes. 2.4.2. Переменные . Имя переменной начинается с буквы, содержит буквы, цифры и сим вол подчеркивания. . Допустимы имена любой длины, но МА TLAB идентифицирует их по первым 31 символам и различает верхний и нижний реrистры. . Для Toro чтобы объявить переменную s и определить ее значение, достаточно в командной строке ввести команду» S == 12.47. МА TLAB создаст для скалярной величины переменную в виде ДBY MepHoro массива S размером 1 х 1, определит ее тип double, при своит указанное значение и выведет результат в окно Command Window. . Переменная есть массив. Двумерный массив  это матрица, OДHOMep ный массив  это BeKTopCTpOKa или векторстолбец, скаляр  это MaT рица размером 1 х 1. Все массивы имеют размерность и валентность, которые изменяются динамически (увеличиваются или уменьшаются по мере необходимости). . Переменные в MATLAB не нужно предварительно описывать, указы вая их тип и размерность. Все данные хранятся в виде массивов: чи словые переменные (внутренний тип numeric), текстовые строки (char), ячейки (cell) и структуры (struct), при помощи которых создаются пользовательские объекты (user object). . Числовые массивы состоят из комплексных чисел с двойной точно стью (тип double) и MorYT храниться в обычном (тип full) или в упакованном виде в случае разреженной матрицы (тип sparse). 
2.4. Данные в MATLAB 25 . Существует несколько дополнительных форматов записи данных в файлы (int8, uint8,...), отличающихся количеством используемых байтов на единицу информации. . Для представления чисел на экране используются различные форматы вывода (команда format). . Для подавления вывода информации на экран в конце оператора CTa вится точка с запятой ; . . Зарезервированные имена: ans, pi, NaN, Inf, end. . Специальная переменная ans содержит результат последней выпол ненной операции, если во введенной команде отсутствует операция присваивания результата «==». Переменную ans можно использовать в выражениях и командах. · Команда »clear очищает рабочее пространство Workspace. . Команда» clear name11 name2 удаляет из рабочеrо простран ства Workspace переменные с именами name1 и name2. . Если в командной строке ввести имя переменной и нажать <Enter>, то в окне Command Window распечатается ее содержимое. . Команда »who возвращает в окне Command Window список всех переменных, содержащихся в WorkSpace. · Команда »whos возвращает список всех переменных, содержа щихся в WorkSpace, с указанием их размерности, количества байт в памяти и класса (типа). . Команда »class (obj) возвращает класс объекта obj. · Команда »isa (obj, , classname') возвращает 1, если объ ект obj принадлежит классу classname или производному от Hero, и О в противном случае. I пример 2. 7 1 » 1+18 ans 19 » S == ans +7 S 26 » S(2) == 4 S  26 4 
26 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ » size(S) ans  1 2 » S(l) == [] s  4 » size(S) ans 1 1 » S == 'This is МATLAВ'; » size(S) ans  1 14 2.4.3. Типы массивов Массивы  основные объекты системы МА TLAB, над которыми выполняются действия. Типы массивов: . одномерные массивы  векторы; . двумерные массивы  матрицы; . мноrомерные массивы  тензоры. IОбратите вниманиеl . Матрица  наиважнейший формат данных в МА TLAB. . Создание матрицы  операция конкатенации []. · Ввод элементов одной строки  через запятую , или пробел. · Ввод строк  через точку с запятой ; . . Скаляр  матрица (1 х 1). . Вектор может быть представлен векторстолбцом (матрица (п х 1)) или векторстрокой (матрица (1 х п)). . Доступ к элементу  при помощи операции индексации ():  один индекс (порядковый номер элемента);  rруппа индексов, разделяемых запятыми (первый индекс  номер строки, второй  номер столбца, все остальные  номера страниц). . Индексация начинается с 1. · Последнее значение индекса  end. . Векторы, как правило, используются для циклов и индексов. 
2.5. Векторы 27 . Элементы любоrо массива упорядочены по столбцам. . Способы создания массивов:  ввод поэлементно всех значений (операция индексации (»);  ввод полноrо списка элементов (операция конкатенации [ ]) для векторов и матриц; операция формирования диапазона значений .,  присваивание значения самому последнему элементу массива;  встроенные функции rенерации массивов. . Справка об элементарных матрицах и матричных манипуляциях: KO манда» help elmat. Iпример 2. 81 » А==l А  1 » А(1,2)==2 А  1 2 » А(2,1)==3 А  1 2 3 О » А(4)==4 А  1 2 3 4 2.5. Векторы 2.5.1. В екторстроки Iпример 2. 91 Создание векторстроки операцией конкатенации. Разделители эле ментов строки  пробелы или запятые. 
28 » V1 == [ 1 О 3 5] V1 1 О 3 5 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ » [1,2+3j,54i,4.5] ans  1.0000 2.0000+3.0000i 5.00004.0000i 4.5000 Создание векторстроки поэлементно. » Ь(l)==l; Ь(2)==3; Ь(3)==5; Ь(4)==2 ь  1 3 5 2 Создание векторстроки при помощи операции формирования диапазона значений. Первое число  начальное значение, второе  шаr, третье  KO нечное значение. » V == 1 : 3 : 12 V  1 4 7 10 Создание векторстроки присваиванием значения последнему элементу. » V3(3) == 9 V3  о о 9 Создание векторстроки операцией конкатенации двух строк. » V== [V1 V3] V  1 о 3 5 о о 9 Изменение существующеrо элемента. » V(3)==17 V  1 о 17 5 о о 9 Изменение rруппы элементов. » V(5:7)==4 V  
2.5. Векторы 29 1 о 17 5 4 4 4 Чтение несуществующеrо элемента. » V (9) ??? Index exceeds matrix dimensions. Запись несуществующеrо элемента. » V(9)==2 V 1 О 17 5 4 4 4 О 2 Операция конкатенации. » v==[V 8 9] v 1 О 17 5 4 4 4 О 2 8 9 У даление элемента или rруппы элементов операцией [ ] : » V(3)==[] V  1 О 5 4 4 4 » V( [1 4 5])==[] v  О 5 4 О 2 » V==l: 15; » V ( [1: 2: end] ) == [] v  2 4 6 8 10 о 2 8 9 8 9 12 14 2.5.2. Специальные векторстроки . а : s : Ь: операция формирования диапазона значений. Вектор [ а, a+s, a+2*s, .." a+n*s], rде nfloor ((ab) /s). Аналоr: функция colon (а, s, Ь) . . а : Ь == а: 1 : Ь: операция формирования диапазона значений с шаrом sl. Аналоr: функция colon (а, Ь). . linspace (а, Ь, n): rенерация вектора из n значений арифметиче ской проrpессии в пределах [а, Ь] . 
30 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ · linspace(a,b):linspace(a,b,100). . logspace (а, Ь, n): rенерация вектора (1 xn), значения KOToporo изменяются с постоянным шаrом в лоrарифмической метрике в пре делах [10 а , 10 b ].logspace(a,b) :logspace(a,b,50). Iпример 2. 101 Создание векторстроки операцией диапазона значений. » V==1:2:10 V  1 » V==[1:5] V  3 5 7 9 1 2 3 4 5 » V==[4.3:8.9] V  4.3000 5.3000 6.3000 7.3000 8.3000 » V==[2.1:0.3:1.1] V  2.1000 1.8000 1.5000 1.2000 » V==[l:3 5 6:2:0] v  1 2 3 5 » V==1:5:2 V  6 4 2 о 1 » V==l:l V Empty matrix: lbyO Iпример 2. 111 » linspace(l, 2, 5) ans 1 1.25 1.5 1.75 2 
2.5. Векторы 31 Iпример 2. 121 » logspace(l, 2, 5) ans 0.1 0.56234 3.1623 17.783 100 Iпример 2. 1 з1 Определение количества элементов, валентности и размера вектора при помощи встроенных функций: length  количество элементов; ndims  валентность; s i z е  размер вдоль каждоrо из измерений. » V1 == [ 1 О 3 5] V1 1 о 3 5 » length (V1) ans 4 » ndims (V1) ans  2 » size(V1) ans  1 4 Таким образом, вектор V1 хранится в двумерном массиве V1 размер ностью 1 х 4 (одна строка и четыре столбца). 2.5.3. Ве кторстолбцы Iпример 2. 141 Задание векторстолбца операцией конкатенации. Элементы разде ляются точкой с запятой. » sl == [ 1; 3; 12] sl 1 
32 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ 3 12 Поэлементное задание векторстолбца. Для каждоrо элемента указыва ются два индекса. » Ь(l,l)=l; Ь(2,1)=3; Ь(3,1)=45 ь  1 3 45 Создание векторстолбца операцией конкатенации двух столбцов. » s =[sl; sl] S  1 3 12 1 3 12 Iпример 2. 151 Определение количества элементов, валентности и размера BeKTOp столбца при помощи встроенных функций. » sl = [ 1; 3; 12]; » length(sl) ans 3 » ndims (sl) ans 2 » size(sl) ans 3 1 
2.5. Векторы 2.5.4. Векторфункции . norm (V, р) : pHopMa вектора У:  norm (V, р) : возвращает Ilvll = Р tlxkl P для 1 <= Р <= 00; Р kl  norm (V) : возвращает norm (V , 2) ;  norm (А, inf) : возвращает mах (abs (V) ) ;  norm (А, inf) : возвращает min (abs (V) ) ; . скаляры:min,mах,sum,рrоd,mеаn,mеdiаn; · векторы той же длины: sort, cumsum, cumprod, fix; . векторы друrой длины: diff, find, unique; . справка: команда» help datafun. Iпример 2. 161 Окруrление элементов вектора в сторону нуля. » V=randn(1,5) *100 V 29.4411 133.6182 71.4325 162.3562 69.1776 » V1=fix(V) V1 29 133 71 162 69 Сортировка вектора. » [S,I]=sort(V1) S 133 69 29 71 162 1 2 5 1 3 4 Индексы положительных элементов. » ind=find(V1>0) ind 1 3 4 33 
34 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ 2.5.5. Операции с векторами Все поэлементные операции применимы как к BeKTopCтpOKaM, так и векторстолбцам. Рассмотрим действие этих операций на примере двух векторов: » v1 = [4 2 3]; » v2 = [3 2 О]; Размеры векторов, к которым применяются поэлементные операции, должны совпадать. Iпример 2. 1 71 Нахождение суммы (+) и разности () двух векторов. » s = v1+v2 s 7 О 3 Iпример 2. 181 Оператор . *: поэлементное умножение векторов. В результате по лучится вектор той же длины, что и исходные, с элементами, равными произведению соответствующих элементов исходных векторов: » u = v1.*v2 u 12 4 О Iпример 2. 191 Оператор . Л: поэлементное возведение в степень: » u = v1. Л 3 u 64 8 27 Показателем может быть вектор той же длины, что и возводимый в степень. При этом каждый элемент первоrо вектора возводится в CTe пень, равную соответствующему элементу BToporo вектора: » u = v1. Л v2 
2.5. Векторы 35 u  64 0.2500 1 Iпример 2. 201 Оператор . /: поэлементное деление векторов одинаковой длины, при этом элементы первоrо вектора делятся на соответствующие элемен ты BToporo вектора: » u = v1./v2 u 1.3333 1 Inf Оператор . \: обратное поэлементное деление элементов BToporo вектора на соответствующие элементы первоrо. » u = v1.\v2 u 0.75 1 О Iпример 2. 211 к поэлементным относятся и операции с вектором и числом. Сло жение вектора и числа прибавляет число к каждому элементу вектора: » u = v1+10 u 14 12 13 То же самое справедливо и для вычитания. Iпример 2. 221 Поэлементное умножение вектора на число как справа, так и слева приведет к одинаковому результату: v1*10 == 10*v1. Делить при по мощи знака / можно вектор на число: v1/10. Деление числа на вектор 1 О /v1 приводит к сообщению об ошибке. Для деления числа на каж дый элемент вектора используется операция . / » u = 10./v1 u 2.5 5 3.3333 
36 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ или: » u =v1.\ 10 u 2.5 5 3.3333 Iпример 2. 2 з1 V. ' , V': транспонирование, комплексносопряженное транспони рование. » V = [3+i; 22i; 10]; » V1=V' v 3li 2+2i 10 » V2=V. ' V2  3+1i 22i 10 Таким образом, операции ' и над вещественными векторами приведут к изменению rеометрии вектора: BeKTopCтpOKa превратится в векторстолбец и наоборот. Iпример 2. 241 Элементарные математические функции работают с массивами по элементно. Так, в результате выполнения команд » х = 2*pi : 0.01 : 2*pi; » у = sin(x); » plot(x,y) МА TLAB создаст два вектора по 1257 элементов (вектор х  значе ний aprYMeHTa и вектор у  значений функции sin) и выведет rрафик функции s in на экран. Iпример 2. 251 Матричное умножение двух векторов. » а = [1 2 3]; Ь = [4 5 6]; » а*Ь 
2.6. Матрицы 37 ??? Error using > mtimes Inner matrix dimensions must agree. » а*Ь' ans  32 2.6. Матрицы 2.6.1. Со здание матриц Iпример 2. 261 Создание матрицы операцией конкатенации. Разделители элементов строки  пробелы или запятые, разделитель строк  точка с запятой. » А=[l 2 3; 4,5,6] А  1 4 2 5 3 6 Создание матрицы как векторстроки, каждый элемент которой яв ляется векторстолбцом. » А = [ [1; 4] [2; 5] [3; 6] ] А  1 2 3 4 5 6 Создание матрицы поэлементно. » А(l,l) = 1. А(1,2) = 2. , , » А(2,1) = 4 . А(2,2) = 4 . , , А  1 2 3 4 5 6 А(l,3) = 3; А(2,3) = 6 Создание матрицы присваиванием значения последнему элементу. » В(2,3)=1 в  
38 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ о о о о о 1 Создание матрицы операцией конкатенации матриц. Аналоr функ ций са t (1, А1 , А2), са t (2 , А1 , А2) . » А1 = [1 2 3; 4 5 6]; А2 = [О О о; 111]; » А = [А1 А2; А2, А1] А  1 2 3 О О О 4 5 6 1 1 1 О О О 1 2 3 1 1 1 4 5 6 Блокматрицы. » А11 = [1 1 1. 1 1 1] ; А12 = [2 2. 2 2] ; , , » А21 = [3 3. 3 3. 3 3] ; , , » А22 = [4 4 4 . 4 4 4 . 4 4 4] ; , , » А = [ [А11 А12; А21 А22] , [5; 5; 5; 5; 5] ; [6 6 6 6 6 6] ] А  1 1 1 2 2 5 1 1 1 2 2 5 3 3 4 4 4 5 3 3 4 4 4 5 3 3 4 4 4 5 6 6 6 6 6 6 2.6.2. Специальные матрицы . []: пустая матрица (О х О); . diag (Х, k): создание диаrональной матрицы или выделение диаrо нали; . еуе (m, n) : (m х п)матрица с единицами на rлавной диаrонали; . gallery (... ): функция, позволяющая получать более пятидесяти стандартных матриц; . еуе (m, n) : (m х п)матрица с единицами на rлавной диаrонали; 
2.6. Матрицы 39 . hilb (n) : (п х п)rильбертова матрица с элементами l/(i+j 1); . magic (n) : (п х п)матрица маrическоrо квадрата с числами от 1 до п 2 ; . ones (m, n) : (m х п)матрица из единиц; . rand (m, n) : (m х п)матрица случайных чисел со значениями из ин тервала [О, 1]; . randn (m, n): (m х п)матрица равномерно распределенных случай ных чисел; . tril (Х, k) : выделение нижней треуrольной части матрицы Х; . triu (Х, k) : выделение верхней треуrольной части матрицы Х; . zeros (m, n) : (m х п)матрица из нулей. Iпример 2. 271 [ ] » еуе(2,3) ans 1 О О О 1 О » triu(mаgiс(3» ans 8 1 6 О 5 7 О О 2 » rаnd(3) ans 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 » А= [ ] А  » mаgiс(3) ans 8 1 6 3 5 7 4 9 2 » diag( [1 2 3] ) ans 1 О О О 2 О О О 3 2.6.3. Доступ к элементам матрицы . Доступ к элементу  при помощи операции индексации ():  один индекс (порядковый номер элемента);  rруппа индексов, разделяемых запятыми (первый индекс  номер строки, второй  номер столбца). 
40 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ . Первое значение индекса  1, последнее значение  end. Отрицатель ное или нулевое значение индекса приводит к сообщению об ошибке. . В качестве индекса может задаваться вектор. . :  краткая форма записи 1 : end. · Чтение несуществующеrо элемента: сообщение об ошибке. . Запись несуществующеrо элемента: недостающие элементы заполня ются нулями. . В памяти компьютера элементы матрицы хранятся по столбцам. A=l 2 3 J l "" а!2 а" J l ", а 4 ", : 5 6 ===> А = а 2 ! а 22 а 2з ===> А = а 2 a s a s 8 9 аз! а З2 а зз аз а 6 а 9 I пример 2.28 1 » А = [11:19; 21:29] А  11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 » А(2,4) ans 24 » А(8) ans 24 » А (1: 2: end) ans 11 12 13 14 15 16 17 18 19 » А(:,2) ans 12 22 » А(:, [2 6 4] ) ans  
2.6. Матрицы 41 12 16 14 22 26 24 » А ( : , 1 : 2 : end) ans 11 13 15 17 19 21 23 25 27 29 » А (2, : ) ans  21 22 23 24 25 26 27 28 29 » A(:,5:end1) = [ ] А  11 12 13 14 19 21 22 23 24 29 » А(1:3,2:3) = оnеs(3,2) А  11 1 1 14 19 21 1 1 24 29 О 1 1 О О » А = А( [1 3] , [5 1]) А  19 11 О О » А(3,3) ??? Index exceeds matrix dimensions. » А(3,3) = 100 А  19 11 О О О О О О 100 
42 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ 2.6.4. Преобразования матриц . А.', А': транспонирование, комплексносопряженное транспониро вание. Аналоr функций transpose (А) , ctranspose (А) . . А ( : ) : преобразование матрицы в векторстолбец. . diag (А, k) : создание диаrональной матрицы или выделение диаrо нали. . fliplr (А) , flipud (А) , rot90 (А) : отражение, поворот. . reshape (А, rn, сп): (rn х сп) матрица из А. Элементы выбирают ся последовательно по столбцам. . repmat (А, rb, сЬ): (rb х сЬ) блокматрица из матрицы А. . tril (А, k) , triu (А, k) : выделение нижней или верхней треуrоль ной части матрицы А. I пример 2. 29 1 » А=[l:3] А  1 2 3 » А (2, : ) =А+3 А  1 2 3 4 5 6 » А( [3 4] , : ) =А+6 А  1 2 3 4 5 6 7 8 9 10 11 12 » fliplr(A) ans 3 2 1 6 5 4 9 8 7 12 11 10 » flipud(A) ans 10 11 12 7 8 9 4 5 6 1 2 3 
2.6. Матрицы 43 » rot90 (А) ans 3 6 9 12 2 5 8 11 1 4 7 10 » tril(A,l) ans О О О 4 О О 7 8 О 10 11 12 » reshape(A,2,6) ans 172 8 4 10 5 11 3 6 9 12 » repmat(A,1,2) ans 1 2 3 1 2 3 4 5 6 4 5 6 7 8 9 7 8 9 10 11 12 10 11 12 » diag( [1,2,3] ,2) » diag(A,2) ans ans О О О О О 7 О О О О О 11 1 О О О О О 2 О О О О О 3 О О 2.6.5. Размеры матриц . size (А) : вектор с количеством строк и столбцов матрицы А. . size (А, k) : k=l: количество строк, k=2: количество столбцов. . [r, с] =size (А) : количество строк в r, количество столбцов в с. . length (А) : возвращает mах (size (А) ) или О для пустой матрицы. Iпример 2. 301 »А = оnеs(3,5); » size(A) ans » size(A,2) ans  3 5 5 » [r,c]=size(A) r  » length(A) ans 3 5 
44 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ с 5 2.7. Операции над матрицами 2.7.1. Арифметические операции . . +, . , . *, . /, . \, . А: поэлементные операторы сложения, вычита ния, умножения, деления и возведения в степень. Если один из опе рандов  скаляр, то он воздействует на каждый элемент друrоrо опе ранда; . А+В: матричное сложение, аналоr А. +В; . AB: матричное вычитание, аналоr А. B; . А *В: матричное умножение (по правилу «строка на столбец» ); . AAn: пкратное матричное умножение; . Х=В/А: левостороннее деление, решение системы линейных ypaBHe ний ХА=В; . Х=А \В: правостороннее деление, решение системы линейных ypaBHe ний АХ=В; . А.': транспонирование матрицы; . А': комплексносопряженное транспонирование матрицы. Iпример 2. 311 » А = [1 2; 3 4]; В=еуе (2) ; 2 3 4 5 » А.*З » А. АЗ ans ans 3 6 1 8 9 12 27 64 »Х = А\В » А. , Х ans 2.0 1.0 1 3 1.5 0.5 2 4 » А+1 ans » А*А ans 7 10 15 22 
2.7. Операции над матрицами 45 » А+В » А. *А » А. /В ans ans Warning: Divide 2 2 1 4 Ьу zero. 3 5 9 16 ans  1 Inf Inf 4 2.7.2. Операции отношения и лоrические операции . >, >=, <, <=, ==, "'=: операторы отношения, аналоrи функций gt, ge, 1 t, le, eq, ne. Поэлементные сравнения матриц одинаковоrо разме ра. Скаляр сравнивается с каждым элементом массива. Результат  лоrическая матрица. . Операции ==, "'= проводят сравнения вещественных и мнимых час тей комплексных чисел, а операции >, <, >=, <=  только вещест венных частей. . &, 1, "': лоrические операторы, аналоrи функций and, or, not, xor. . find: выделение части массива, элементы KOToporo удовлетворяют определенному условию. . isempty, isfinite, isinf, isnan, isprime, isreal: по строение лоrических матриц в зависимости от выполнения условия. I пример 2.32 1 » А = [О 1. 2 3] ; , » А<=В ans 1 О О О » isprime(A) ans В=еуе(2); » А&В ans о о о 1 » A(find( (А>2) А  (А<l) ) ) = 9 о 1 о 1 9 3 2 9 
46 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ 2.7.3. Матричные функции · sum, prod: сумма (про изведение) всех элементов вектора; сумма (произведение ) элементов каждоrо столбца/строки матрицы; . mах, min: максимальный (минимальный) элемент вектора; макси мальный (минимальный) элемент в каждом столбце/строке матрицы; . sort: сортировка, действие аналоrично предыдущим функциям; . all: проверка на наличие нулевоrо элемента в массиве; . any: проверка на наличие ненулевоrо элемента в массиве; . find: нахождение индексов и значений ненулевых элементов; . spy: визуализация ненулевых элементов матрицы; . norm (М) : норма матрицы; · скаляр: rank, det, trace, cond; · вектор: poly, eig, cumprod, fix, min, mах, sum, prod; . матрица: inv, pinv, null; · несколько матриц: eig, lu, qr, svd; . справка: команда» help matfun. I пример 2. зз 1 » А = [2 8 4 . 7 3 9] ; В = [7 1 1. 4 4 О] ; , , » min(A) » min (А, [] ,1) ans ans 2 3 4 2 3 4 » min(A, [],2) » min (min (А) ) ans ans 2 2 3 » min (А, 5) » min(A, В) ans ans 2 5 4 2 1 1 5 3 5 4 3 О » [a,i] = min(A) » sort (А) а  ans  
2.8. Текстовые строки 2 3 4 2 3 4 l 7 8 9 1 2 1 47 2.8. Текстовые строки 2.8.1. Простейшие операции со строками . Тип данных char (<<символ»); . текстовые данные, в том числе и одиночный символ, заключаются с обеих сторон в апострофы: · » sl = 'а'; s2= ' abcd' ; sЗ = 'Hello, МATLAВ!' . символьные переменные в виде массивов (в системе МА TLAB все есть массив) типа char; . печатаемые символы из стандартноrо набора ASCII пред ставлены числами от 32 до 255; . для ввода русских символов следует выбрать в меню File I Pref erences  Command Windows Font шрифт с русской кодиров кой; · конвертация данных: double, char; . ввод текстовых строк: rрупповое присваивание: команда» s2=' abcd'; поэлементное присваивание с помощью операции индексации: » s2(1)='a'; s2(2)='b'; s2(З)='с'; s2(4)='d'; операция конкатенации: команда» s2 = [' аЬ' 'с' 'd']; . вывод текстовой строки в командное окно: команда disp; . ввод с клавиатуры числовоrо или TeKcToBoro значения переменной: команда input; . функции работы со строками: char, num2str, int2str, strcat, strvcat,findstr,strcmp,strrep,upper,lower,blanks; · лоrические запросы: isa, ischar, isletter, isspace; . справка: help strfun. 
48 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ Iпример 2. 341 Вывод в командное окно текстовой строки. » х = 17; »message = [' Variable х = " int2str(x)]; » disp( message ) Iпример 2. 351 Вывод в командное окно сообщенияприrлашения для ввода с кла виатуры числовоrо значения переменной: » Х = input ( 'Х = ? ') Ввод числа с клавиатуры заканчивается нажатием клавиши <Enter>. Введенное число сохраняется в переменной х. Специальный набор из двух символов /n внутри строкиарrумента функции input приводит к выводу сообщения в двух строках. Iпример 2. 361 Вывод в командное окно сообщенияприrлашения для ввода с кла виатуры TeKcToBoro значения переменной: » str = input('str = " 's') Ввод текста с клавиатуры заканчивается нажатием клавиши <Enter>. Если нажать <Enter>, не введя с клавиатуры никакоrо текста, то пере менная str примет значение пустоrо массива. Проверка: функция индикатор isempty (str). 2.8.2. Массивы строк · Массив строк  матрица, состоящая из символов. . Разделитель строк в массиве  точка с запятой ; . . Строки в массиве должны быть одинаковой длины. . Короткие строки дополняют пробелами. . Функция char решает задачу объединения строк разной длины. . Доступ к строкам в массиве: операция индексации. 
2.9. Структуры 49 Iпример 2. 371 » name= ['МATLAВ name  MATLAB MAPLE MATHEMATICA , . , , МAPLE , ; 'МATHEМATICA'] » name = char('МATLAВ', 'МAPLE', 'МATHEМATICA'); » name (1, :) ans  МATLAB 2.9. Структуры 2.9.1. Создание структуры · Структуры  объекты данных (тип struct), содержащие разную по именованную информацию (поля структуры). . Форма: VariableName. FieldName. · Создание структуры:  присваивание значений всем полям при помощи оператора при сваивания;  функцияконструктор struct, позволяющая внести значения cpa зу в несколько полей структуры. . Набор полей структуры (массива структур) можно изменять динами чески. . Поля структуры MorYT содержать любой тип данных. . Отдельная структура  это структурный массив размерности 1 х 1. . Вложенность структур: в качестве имени вложенной структуры BЫ ступает имя поля внешней структуры. . Доступ к структурам, входящим в массив, осуществляется при помо щи индексации: VariableName (1). . Доступ к элементу матрицы, являющейся значением поля структуры, происходит при помощи двух операций индексации и одной операции доступа к полю структуры: VariableName (1) . FieldName(l, 2) . 
50 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ . Вывод содержимоrо отдельных полей массива структур: фиrурные скобки {VariableName.FieldName}, если с полем связаны сим вольные данные, и квадратные скобки [Variable Name. FieldName] , если с полем связаны числовые данные. . Если два массива структур имеют одинаковый набор полей, то допус кается rрупповое присваивание. 2.9.2. Функции ДЛЯ работы со структурами . Функции для работы со структурами: fieldnames: получение названий полей структуры; getfield: получение содержимоrо определенных полей; rmfield: удаление полей структуры; setfield: присвоение значения полю структуры; struct: создание структур и массива структур; struct2cell: преобразование массива структур в ячейки; deal: орrанизация доступа к полям массива структур; isstruct: про верка, является ли указанный объект структурой; isfield: проверка, содержит ли структура указанное поле. Iпример 2. 381 » Human = struct('Name', 'Ivan', 'Age',28); » Human.Info = [1 2; 3 4]; Или: » Human.Name ='Ivan'; » Human.Age = 28; » Human.Info = [11 12; 13 14] Human Name: 'Ivan' Age: 28 Info: [2х2 doubleJ » Human(2) . Info = [21 22; 23 24] Human  1х2 struct array with fields: 
2.9. Структуры 51 Name Age Info » Human(2) ans  Name: [] Age : [ ] Info: [2х2 double] » Human (3) = struct ( 'Name ' , 'Ann' , 'Age' , [] , ... , Info' , [] ) ; » size(Human) ans 1 3 » Human(l) .Number = 123456; Human  1х3 struct array with fields: Name Age Info Number » Student=struct('Name', 'Anton', 'Age',19,... , Info ' , [], , Number' , [] ) ; » Human(2) = Student; » {Human.Name} ans 'Ivan' 'Anton' 'Ann' » [А В C]=deal(Human.Name) А  Ivan в Anton с Ann 
52 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ Iпример 2. 391 Вложенные структуры: » ехt.dаtа=З ext data: 3 » inn.data=[l 2 3 4] inn da t а: [1 2 3 4] » inn.x=lll; » ext.inn=inn ext data: 3 inn: [lх1 struct] » ехt.inn.dаtа(З)=О ext data: 3 inn: [lх1 struct] Iпример 2. 401 Введите команды » 8=struct('name', 'Ben',... , age ' ,21, 'info' , [1,2; 3, 4] ) ; » 8(3) .name='Emil'; » 8(3) .age=19; » 8(3) .info=[ll 12; 13 14]; » 8=[8,struct('name', 'Anna', 'age',20,... , info ' , [1 о; О 1]),... struct ( 'name ' , 'paul' , 'age' ,19, 'info' , [о, о; о, о] ) ] ; Теперь введите команды » 8 » 8.info 
2.10. Массивы ячеек 53 » 8 (1) . info (2,1) » a=[8.info] Что происходит в результате применения следующих команд: fieldnames, isfield, setfield, getfield, rmfield? Iпример 2. 411 Введите команды » clear 8 » 8=struct ( , name ' , Ben ' 'a g e' 21 'info' [ 1 2. 3 , , " , , 8= [ 8. struct ( ' name' 'Anna' 'a g e' 20 , ", , ,... , info ' , [1 о; О 1]); ,... struct('name', 'paul', 'age',19, 'info', [0,0;0,0])] 4] ) ; » В чем разница между примерами 2.40 и 2.41? 2.10. Массивы ячеек 2.10.1. Создание массива ячеек . Массив ячеек (тип cell) : хранение разнородных объектов (масси вов разных размерностей, разнотипных данных). . Массив ячеек состоит из ячеек, или контейнеров, каждый из которых может содержать данные разных типов. . Массив ячеек может быть полем структуры. . Создание массива ячеек:  присваивание значений всем ячейкам при помощи оператора при сваивания;  Функцияконструктор cell, позволяющая внести значения сразу в несколько ячеек массива. · Ячейка  это содержимое плюс некоторая оболочка (служебная CТPYK тура данных) BOKpyr этоrо содержимоrо, позволяющая хранить в ячейке произвольные типы данных любоrо размера. 
54 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ . Выражение любоrо типа данных можно превратить в ячейку, заклю чив ero в фиrурные скобки. . ( ) : доступ к ячейке. · {} : доступ к содержимому ячейки. 2.10.2. Функции ДЛЯ работы с массивами ячеек . cell: создание пустоrо массива ячеек заданноrо размера; . cellfun: применение функции к содержимому массива ячеек; . cellstr: преобразование массива символов в массив ячеек; . cel12struct/ cel12matrix: преобразование массива ячеек в Mac сив структуры / в матрицу; . struct2cell num2cell: преобразование массива структур / чи словоrо массива в ячейки; · deal: извлечение содержимоrо ячеек; . cellplot: отображение содержимоrо массива ячеек в rрафическом окне; . celldisp: вывод содержимоrо массива ячеек в командное окно; . iscellstr: проверка, является ли объект массивом ячеек из строк; . iscell: проверка, является ли указанный объект массивом ячеек. Iпример 2. 421 Создание массива ячеек: » W = {[7 9] 'Hello' З+4i; [1 » hstruct =struct('f1', [ 1 2 » W(1,4) = { hstruct } W [lх2 double] 'Hello' [2х2 double] 5] » W(l,l) 2;3 4] 5 'аЬс'}; 3 ] 'f2' , а ' ) . , , , [3+4i] [lх1 struct] 'аЬс' [ ] ans  [lх2 double] » W{l,l} ans  7 9 
2.10. Массивы ячеек 55 Iпример 2. 4 з1 Хранение текстовых строк разной длины: »W{l}= 'МATLAВ'; W{2}= 'МAPLE'; W{З}= 'МATHEМATICA' W  'MATLAB' 'MAPLE' 'МATHEMATICA' » [А,В,С] = deal(W{:}) А  MATLAB В  MAPLE С  MATHEMATICA Iпример 2. 441 Использование функцииконструктора: » W = cell(size(ones(2,2») W [] [] [ ] [ ] или »W = cell(2,2); » W{1,1}=[2 3] W  [lх2 double] [] [ ] [ ] Удаление HeKoToporo диапазона ячеек из массива ячеек: » W (2, :) = [] W  [lх2 double] [] Доступ к ячейке и содержимому ячейки: » W(l,l) ans  
56 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ [lх2 doubleJ » W{l,l} ans 2 3 2.11. Лабораторный практикум Х!! 2 2.11.1. Теоретические вопросы 1. Разделители операторов, комментарии и «длинные» операторы. 2. Основной тип данных в MATLAB. 3. Как определить тип переменной. 4. Способы создания векторов. 5. Способы создания матриц. 6. Что является разделителем элементов строки матрицы. 7. Что является разделителем строк матрицы. 8. Что такое мноrомерный массив, как ero создать. 9. Что такое размерность и валентность массива. 1 о. Индексация массива. 11. Расположение массива в памяти. 12. Функции для создания «стандартных матриц». 13. Как узнать размеры (друrие параметры) массива. 14. Извлечение элементов, rpуппы элементов из матрицы. 15. У даление элементов, rpуппы элементов из матрицы. 16. Нахождение минимальноrо (максимальноrо элемента) матрицы. 17. Операция формирования диапазона значений. 18. Арифметические операции над матрицами, особенности. 19. Лоrические выражения. 20. Как увидеть «портрет» матрицы. 21. Способы создания текстовых строк. 22. Функции для работы с текстовыми строками. 23. Структуры, массивы структур. 24. Функции для работы со структурами. 25. Массивы ячеек. 26. Доступ к ячейке и доступ к содержимому ячейки. 27. Функции для работы с массивами ячеек. 28. Способы объединения строк разной длины в массив. 
2.11. Лабораторный практикум NQ 2 57 2.11.2. За дания адание 2. 11 Запустите MATLAB, введите команду» help datatypes и изучите встроенные типы данных, представленные в МА TLAB. адание 2. 21 Тщательно проработайте все примеры данной темы. адание 2. з1 Формат представления данных определяется командой format. Команда» help format выводит список возможных форматов представления данных. Создайте матрицу » А = [ 20*rаnd(2,З)7; О Inf NaN] и введите команды » format compact, format long; А » format short е. А , » format rat; А » format +. А , » format short; А адание 2. 41 а) с) е) g) Введите команды и изучите результаты их выполнения. 1 00 200 Ь) 00+00 , oooo , ехр(оо), exp(oo) d) sign(NaN), sign(NaN) sign (00), sign (oo) f) NaN O , 000, 1 МаМ 1/00, 1*00, l/NaN h) log(oo), log(oo), log(O) адание 2. 51 Сложите, отнимите, умножьте и разделите два числа l+Зi и 12i. 
58 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ адание 2.61 Вычислите значения: а) т5п; Ь) sin(5n/ll).J8  3п . с) (J7 5п)2 2 4 , е 2 +6 е + е 4 +е 3 d) 1 J2 .J2 е) 2+3i 23i f) Sin(l+ li ) . +; +T 4i 1+4i 2 2  адание 2.7 1 Вычислите полярные представления комплексных чисел. Изучите для этоrо функции angle и abs. а) z == (13i)5 + (1+3i)5 ; Ь) Z[  +i  JO (2i ? с) z== ; Il+il(l+i) d) Z==51+2i +(1+2i)5 . адание 2.81 Вычислите значения e1+2i, (1+2i) е, (1+2i) (1+2i). адание 2.91 Найдите все решения уравнения I b+2i I + I 84i 1=30. адание 2. 101 Создайте матрицу Ь как BeKTopCTPOKY 1 х4 Ь= (1 2 3 4). TpaHC понируйте BeKTopCтpOKY Ь в векторстолбец с. 
2.11. Лабораторный практикум NQ 2 59 адание 2. 111 Создайте BeKTopCTPOKY 1 х 4 х= (1+2i 2j 3 4). Введите KO манды и определите, в чем состоит их отличие? » у=х' » z=x.' Переведите BeKTopCTPOKY х в BeKTopCTPOKY х= (12i 2+i 3 4). адание 2.121 Создайте матрицу А как матрицу 4 х 3 А== 123 456 789 10 11 12 Для этоrо введите в командном окне команды » clear А » А = [1, 2, 3; 4 5 6; 7, 8, 9; 10 11 12] Предложите еще 34 варианта создания матрицы А. адание 2. 1 з1 Создайте матрицу А как матрицу 4 х 3 А == 1 4 7 10 2 5 18 11 3 6 9 12 Выполните над матрицей А следующие действия (каждое действие BЫ полняется над исходной матрицей А): Э задайте два способа доступа к элементу 7; Э задайте три способа доступа к последнему элементу матрицы; Э выделите третью строку матрицы; Э пер е ставьте в матрице первый и третий столбцы; Э измените порядок следования строк матрицы; 
60 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ э найдите минимальное значение в каждом столбце; Э найдите максимальное значение каждой строки; Э найдите минимальное и максимальное значение матрицы; Э транспонируйте матрицу в векторстолбец; Э транспонируйте матрицу в BeKTopCтpOKY; Э выберите из матрицы все элементы с нечетными порядковыми HO мерами; Э все отрицательные элементы матрицы замените на о; Э все элементы матрицы с порядковыми номерами, кратными 3, заме ните на 33; Э удалите второй столбец; Э удалите третью строку; Э удалите число 18. адание 2. 141 Создайте матрицы размером 4 х 4 из О и 1 при помощи встроенных функций zeros, ones и еуе. адание 2. 151 Создайте симметричную матрицу А размером 10 х 10 из случай ных чисел между О и 8. адание 2. 161 Создайте матрицы размером 3 х 4 из случайных чисел при помощи встроенных функций rand и randn. Определите размер матриц при по мощи функции size. Найдите минимальный и максимальный элементы. адание 2. 1 71 Создайте матрицы размером 3 х 3,4 х 4, 5 х 5, содержащие значения от 1 до n 2 (маrические квадраты) при помощи функции magic. Выдели те из матрицы 5 х 5 верхнюю и нижнюю треуrольные матрицы при по мощи встроенных функций tril и triu. 
2.11. Лабораторный практикум NQ 2 61 адание 2. 181 Задайте команды » clear » А = [1, 2, 3; 4 5 6; 7, 8, 9]; Доступ к элементу матрицы выполняется при помощи команды » а=А(2,З); или » а=А (N) ; Значение N равно... ? адание 2. 191 Задайте команды » clear » А = [1, 2, 3; 4 5 6; 7, 8, 9]; Последовательно введите команды, выполняющие доступ к элемен там матрицы, и изучите результаты их выполнения. > > Ь=А ( 3, : ) > > Ь=А ( : , 2) » Ь=А(1:З,2) » В=А(1:З,2:З) > > В=А ( [1 3],:) > > В=А ( [3 2 1],:) > > В=А ( : , [3:  1 : 1] ) ; » А ( : ) » р=[З 1 2]; » n=[2 3 1]; » А (р, : ) » А (n, : ) » А ( : , р) » А ( : , n) 
62 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ » А(р,р) » A(n,n) адание 2. 201 Последовательно введите команды, выполняющие арифметические действия над матрицами, и изучите результаты их выполнения. » А = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12] » В = А' » С = А.' » G = С Л 2 » о= A » В = А + А; » С = А' * А; » D = В  А; » а = [1:4]; » Е = а' * а. , » f = а * а' . , » Ь = 2. , » d = А/Ь; » В = А. Л 2; » В = А./А; » С = А. *А; » b=diag(A) » B=diag(b) адание 2. 211 Задайте маrическую матрицу А 5 х 5. Какие значения принимают следующие выражения? а)А(2,:) Ь)А(:,4) с) A(end, :) d) А([1,5]) е) A(1,5:2:1) g) A(1:2:end) h) А(:) f) A(5:1:1,5:1:1) i) А ( : , end) 
2.11. Лабораторный практикум NQ 2 63 адание 2. 221 Задайте маrическую матрицу А размера 6 х 6 и докажите все ее Ma rические свойства. адание 2. 2 з1 Создайте матрицу А= [ajkJ размером 6 х 6 следующеrо вида: а) диаrональная, со значениями 1,2,3,4,5,6 по диаrонали; Ь) треуrольная (наддиаrональная): из j>k следует ajkO; с) строrотреуrольная: из j;:::"k следует ajkO; d) единичная диаrональная; е) мономиальная: в каждой строке и в каждом столбце имеется лишь один элемент, отличный от нуля. Изучите для этоrо функции diag, spdiags, tril, triu. адание 2. 241 Создайте тридиаrональную матрицу размером 5 х 5 с единицами по rлавной диаrонали, двойками по диаrонали на одну ниже rлавной, трой ками по диаrонали на одну выше rлавной. Изучите для этоrо функции diag, spdiags. адание 2. 251 Задайте две матрицы А и В размером 1 О х 10. Последовательно введите команды, выполняющие лоrические действия и операции OTHO шения над матрицами, и изучите результаты их выполнения. » А>В А==В A=B А<=В »spy(A>O) spy(A<O.l) spy(A>=B) адание 2. 261 Для 4x матриц и векторов А 2 х 3, В 3 х 3, v 3 х 1, w 2 х 1 BЫ полните последовательно операции с целью контроля их леrитимности: »А+В А+А В+В v+w vw »А*В В*А А'*В В*А' А*А А'*А А*А' В*В 
64 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ »A*v v*A v*A' A'*v w*A' v*v' v'*v B*v B*w адание 2. 271 Запишите следующую систему линейных уравнений в матричной форме и решите ее в MATLAB: а) x+y+z+u=o; xy= 1 ; u+zy=l ; Ь) x+z=4; y+z=2; 2x4y=2. с) х=2у; y+z=5; xи=2; d) хl X2=5 ; Х2ХЗ+Х4=З ; ХЗХ4=1 ; е) Зх+уz=7; х+2z=З; yz=o.  адание 2.28 1 zx=l. х+u=Зу+1. хl +Х4=З . Изобразите rрафики функций cos и sin в интервале [3л:/4; 2л:] в одной системе координат. Примените команду hold оп. адание 2. 291 Изобразите rрафики функций Уl (х) =х2, У2 (х) =х 4 , УЗ (х) =х 8 , У 4 (х) =х 16 , В области хе [о; 2], уе [о; 2] в одной системе координат разными цветами. адание 2. 301 Изобразите rpафики 5 степенных функций Yn (х) =x n , n=1-:-5, в области 2<x<2, 2<y<2 в одной системе координат. f'рафики функ ций нечетных степеней изобразите красным цветом ( , r '), а нечетных  черным ( , k ' ).  адание 2. 31 1 1 2 1 О 1 2 3 2 1 1 Решите систему линейных уравнений 1 2 4 2 1 О 1 2 3 1 
2.11. Лабораторный практикум NQ 2 65 адание 2.321 Изобразите rpафики функций Yn (х) =x 1 / n , n=1-:-4, в области 0<х<4 в одной системе координат линиями разноrо цвета и толщины. адание 2. зз1 Создайте матрицы А размером 12 х 18 и в размером 3 х 6. а) Выделите из матрицы А подматрицу 8 с 9й по 12ю строку и с 3ro по 6 й столбец. Ь) Вставьте в матрицу А матрицу В, начиная с 6й строки и 12ro столбца. с) Создайте матрицу D размером 30 х 30 вида D  [ :Т]- адание 2. 341 Создайте целочисленную случайную матрицу А размером 5 х 5. Разделите ее на четыре матрицы: В размером 3 х 3, 8 размером 3 х 2, D размером 2 х 3, Е размером 2 х 2. адание 2. 351 Создайте матрицы А (10 х 5) и в (12 х 6) из случайных чисел. Пусть матрица С будет матрицей 10 х 9, у которой первые три столбца равны первым трем столбцам матрицы А. Остальные столбцы получа ются из матрицы В, причем три последние строки матрицы В иrнори руются. Создайте матрицу D (1 О х 6), у которой четные столбцы полу чаются из четных столбцов матрицы С, а нечетные  из нечетных столб цов А. адание 2. 361 Иrра «Жизнь» (Conway's Game of Life). Задан торический мир Х размером М х М клеток (М = 101), первоначально заселенный живыми орrанизмами с вероятностью 10 %. В каждой клетке может находиться 
66 т е м а 2. ДАННЫЕ И ВЫЧИСЛЕНИЯ ровно один живой орrанизм. В каждом следующем поколении: орrанизм зарождается в пустой клетке, BOKpyr которой собрались ровно 3 opra низма, или орrанизм поrибает: · от ТОСКИ, если у Hero меньше двух соседей; · rОЛОДА, если у Hero больше трех соседей. Смена поколений равна 100. Каждое поколение отображать rрафически. Прервать надоевшую эпоху можно, нажав клавиши CtrlC. Рис. 2.1. Иrpа «Жизнь» 
ТЕМА 3 ЭЛЕМЕНТЫ проrРАММИРОВАНИЯ Система МА TLAB включает в себя язык проrраммирования  высокоуровневый язык с операторами управления, функциями, CТPYКTY рами данных, BBOДOMBЫBOДOM и возможностями объектно ориенти pOBaHHoro проrраммирования. 3.1. Управление вычислением . Операторы управления: операторы ветвления и операторы цикла:  if: оператор условия: вычисляет лоrическое выражение и выпол няет rруппу операторов, если выражение истинно;  swi tch: оператор переключения: выполняет rруппу операторов в зависимости от значения переменной или выражения;  while: оператор цикла: повторяет rpуппу операторов до тех пор, пока выполняется лоrическое условие;  for: оператор цикла: выполняет rруппу операторов заданное чис ло раз;  break: оператор управления: выполняет досрочный выход из цик лов for или while;  continue: оператор управления: передает управление следующей итерации циклов for или while. . Лоrические выражения операторов управления задаются операторами отношения или лоrическими операторами:  >, >=, <, <=, ==, "'=: операторы отношения, аналоrи функций gt, ge, lt, le, eq, ne.;  &, 1, "': лоrические операторы, аналоrи функций and, or, not, xor;  find: выделение части массива, элементы KOToporo удовлетворя ют определенному условию;  all: проверка на наличие нулевоrо элемента в массиве; 
68 Т е м а 3. ЭЛЕМЕНТЫ проrр АММИРОВАНИЯ  any: проверка на наличие ненулевоrо элемента в массиве. В слу чае применения к матрицам функции all и any возвращают значения по каждому столбцу; isempty, isfinite, isinf, isnan, isprime, isreal, isstr, ischar: индикаторные функции. . Обработка исключительных ситуаций:  назначение: операторы, выполнение которых может привести к ошибке, заключаются в конструкцию между try и catch;  если эти операторы выполняются без ошибок, то управление пере дается первой команде, стоящей после ключевоrо слова end;  если возникает ошибка во время выполнения любоrо из этих опе раторов, то управление передается блоку, заключенному между ключевыми словами catch и end. Если и здесь встречается ошибка, то выполнение проrpаммы прекращается;  ключевые слова try, catch, end. 3.1.1. Оператор условия if . Синтаксис: if expressionl statementsl elseif expression2 statements 2 else statements 3 end . Назначение: оператор условия: вычисляет лоrическое выражение и выполняет rруппу операторов, если выражение истинно. . Ключевые слова if (<<если»), else (<<иначе»), elseif (<<иначе, если»), end (<<конец всей конструкции» ). . Ветви elseif, else MorYT отсутствовать. . Запись if А равносильна записи if А "'=0 и записи if all (А ( : ) ) . . Запись if "'А равносильна записи if А ==0. 
3.1. Управление вычислением 69 . В условных выражениях можно использовать не только переменные, но и массивы; в этом случае истинность условия наступает, коrда ис тинным является условие для каждоrо элемента массива. Iпример з. 11 Изучить работу условноrо оператора, в результате выполнения KO Toporo переменная z получает значение  1, так как матрица А coдep жит элемент, меньший 1, и все условие считается ложным. » А = [7 8; 1 О]; if А >= 1 z = 1, z 1 Iпример з. 21 else z = 1, end Определить знак 8 рациональноrо числа Х: Вариант 1: if Х>О elseif Х<О else end Вариант 2: if Х>О elseif "'Х else end 8 = 1; 8 =1; 8 = о; 8 = 1; 8 = о; 8 =1; Вариант 3 (без оператора if): 8 = (X>O)(X<O); 3.1.2. Оператор переключения switch . Синтаксис: switch switchexpr 
70 Т е м а 3. ЭЛЕМЕНТЫ проrРАММИРОВАНИЯ case caseexpr, statement, . .., statement case {caseexpr1, caseexpr2, саsеехрrЗ,...} statement, . .., statement otherwise, statement, . .., statement end . Назначение: оператор переключения: выполняет rруппу операторов в зависимости от значения переменной или выражения. . Ключевые слова swi tch (<<переключить»), case (<<случай»), otherwise (<<иначе»), end (<<конец всей конструкции»). . Значение выражения переключения swi tchexpr может быть CKa ляром или строкой. . В случае совпадения значения выражения со значением, указанным после case или с одним из значений из списка case, выполняется нижестоящая ветка; если нет совпадения ни с одним из перечислен ных значений, то выполняется ветка, стоящая после ключевоrо слова otherwise. . Строк с ключевым словом case может быть MHoro, а строка с клю чевым словом otherwise  только одна. . После выполнения какойлибо из ветвей case происходит обязатель ный выход из оператора swi tch, поэтому в конструкции нет необ ходимости использовать оператор break. Iпример з. з1 appl = 'МATLAВ'; switch upper(appl) case {'МATLAВ', 'МATHCAD'} disp('Application is numeric') case {'МAPLE', 'МATHEМATICA'} disp('Application is symbolic') otherwise disp('Unknown application') end 
3.1. Управление вычислением 71 Iпример з. 41 n=7 ; switch n case {1,4,9} fprintf ( , %d case {2,З,5,7} fprintf ( , %d case 6 fprintf ( , %d case 8 fprintf('%d  Cubic\n',n); otherwise disp('n must Ье natural number from 1 to 9. '); Quadrate \n' , n) ; Prima\n' , n) ; fасtоriаlЗ!\n',n); end 3.1.3. Оператор цикла while . Синтаксис: while expression statements end . Назначение: повторяет rруппу операторов до тех пор, пока выполня ется лоrическое условие. . Ключевые слова while (<<пока»), end (<<конец конструкции»). . в лоrическом условии можно использовать не только переменные, но и массивы; в этом случае истинность условия наступает, коrда истин ным является условие для каждоrо элемента массива. . Цикл while можно прервать, если применить оператор break внутри тела цикла; во вложенных циклах оператор break осуществ ляет выход только из caMoro BHyтpeHHero цикла. . Передать управление следующей итерации цикла while можно при помощи оператора continue. 
72 Т е м а 3. ЭЛЕМЕНТЫ проrр АММИРОВАНИЯ Iпример з. 51 Вычислить сумму отрезка ряда I1 / n ! : » S=o; n=l; х=l; while х > 1e10 S = S + х; n = n + 1; х = l/factorial(n); end » х х  1.1471e011 » n n  14 Iпример з. 61 Найти наибольшее число n, для KOToporo можно вычислить n ! . » f=l; n=l; while "'isinf(f) n=n+1 ; f=f*n; end » nl ans 170 3.1.4. Оператор цикла for Цикл for используется при выполнении заранее определенноrо числа повторяющихся действий. . Синтаксис: for count = expression statements end 
3.1. Управление вычислением 73 . Назначение: выполняет rpуппу операторов заданное число раз. . Ключевые слова for (<<для»), end (<<конец всей конструкции»). . count  имя переменной цикла; набор возможных значений для пе ременной цикла поставляет выражение expression. · Чаще Bcero выражение expression определяется с помощью опера ции формирования диапазона значений: for count = start:step:final statements end . Переменная цикла count может принимать не только целые, но и вещественные значения любоrо знака. . Цикл for можно прервать, если применить оператор break BHYT ри тела цикла; во вложенных циклах оператор break осуществляет выход только из caMoro BHyтpeHHero цикла. . Передать управление следующей итерации цикла for можно при по мощи оператора continue. Iпример з. 71 Заполнение матрицы lильберта. k=4; а = zeros(k,k); for m = l:k for n = l:k a(m,n) = l/(m+n 1); end end Iпример з. 81 Вместо операции задания диапазона можно явно указывать весь Ha бор возможных значений в виде векторстроки. » for n = [1, 3, 9] a(n) = n Л 2; end 
74 » а а  1 О 9 О О Т е м а 3. ЭЛЕМЕНТЫ проrр АММИРОВАНИЯ о о о 81 IОбратите вниманиеl Для повышения эффективности проrpаммы очень важно векторизо вать алrоритм. Везде, rде это возможно, вместо операторов цикла лучше применять эквивалентные по результатам векторные или матричные операции, так как последние исполняются в системе MATLAB быстрее. Например, вместо k=O; for х = 0:0.01:2*pi k=k+1; y(k) = cos(x); end лучше использовать векторизованную версию кода: х = 0:0.01:2*pi; у = cos(x); так как такой код быстрее исполняется и записывается короче. 3.2. Лабораторный практикум Х!! 3 3.2.1. Теоретические вопросы 1. Операторы управления: операторы ветвления и операторы цикла. 2. Условный оператор if. 3. Оператор переключения swi tch. 4. Оператор цикла for. 5. Оператор цикла while. 6. Операторы break, continue. 7. Векторизация алrоритма. 8. Обработка исключительных ситуаций. 9. Что получится в результате деления l/O, 1/0,0/0. 
3.2. Лабораторный практикум NQ 3 75 3.2.2. Зад ания адание з. 11 Чему равно наибольшее число, для KOToporo можно вычислить фак ториал? (Помощь: Inf, isinf (n) ) адание з. 21 в командной строке введите команду» help while. Изучите правила орrанизации цикла при помощи команды while. Орrанизуйте цикл, вычисляющий факториал числа. Найдите значения 5!, 8!, 23!. адание з. з1 Орrанизуйте цикл, в котором вводите с клавиатуры название дня недели, и при помощи оператора switch определите номер дня недели по названию дня недели. Выход из цикла  по вводу текстовой строки «exit». Обработайте некорректный ввод названия дня недели. Для opra низации ввода числа с клавиатуры выполните сначала задания 3.8 и 3.9. адание з. 41 Орrанизуйте цикл, в котором вводите с клавиатуры номер месяца, и при помощи оператора switch определите название месяца по ero HO меру. Обработайте некорректный ввод номера дня недели. Выход из цикла  по вводу числа о. Для орrанизации ввода числа с клавиатуры выполните сначала задания 3.8 и 3.9. адание з. 51 При помощи операторов for и if создайте матрицу 2 l О О l 2 l О А== О l 2 l О О l 2 Создайте эту же матрицу, не используя операторы управления. 
76 Т е м а 3. ЭЛЕМЕНТЫ проrр АММИРОВАНИЯ адание з. 61 Вычислите значение выражения 1+ 1+ 1+ 1+ 1+ 1+ 1+ 1+ 1 1 1 1 1 1 1 1 1 1 + 1 1+ 1+1 Результат должен равняться золотому сечению (1 +.J5)/2. адание з. 71 Последовательность чисел Фибоначчи имеет следующий вид: nk = nkl + nk2, nl = n2 = 1. Вычислите следующие 1 О элементов этой последовательности при по мощи оператора цикла. Начните с вектора [1 1]. На каждом шаrе цикла добавляйте к этому вектору один элемент. Какой элемент будет превы шать значение 102О? ДЛЯ этоrо орrанизуйте цикл с подходящим услови ем. Последовательность Фибоначчи может быть представлена формулой  F k (lF/ F  1+J5 п k  J5 ' rде  2 . Вычислите значения с 12ro по 20й элемент этой последовательности, не используя для орrанизации вычисления циклы. 
3.2. Лабораторный практикум NQ 3 77 адание з. 81 Функция input. Введите и выполните команды » M=input('Input (nx2)Matrix: ') Input (nx2)Matrix: [1 2;4 1;5 1] м  1 2 4 1 5 1 адание з. 91 Функция input и disp. Введите и выполните команды » A=input('Input the Number : А = ') Input the Number: А  325 А  325 » disp(['The Number А is: ТЬе Number А is: 325 » S=input('Input the String Input the String: S  hello S  int2 str (А) ] ) S = 's' ) hello адание з. 101 3Drрафика. Введите команды » a=linspace(1,10,100); » [х y]=meshgrid(a); » z=sin (х) . *cos (у) ; » surf(x,y,z) Теперь введите команды 
78 Т е м а 3. ЭЛЕМЕНТЫ проrРАММИРОВАНИЯ » colormap winter % default, hot, cool, spring, % summer, autumn, gray, pink... » shading flat % interp, faceted Что изменилось в rрафическом окне Figure? адание з. 111 Оформление rрафиков функций. »X=linspace(0,2*pi); Y=[sin(X);cos(X)]; plot(X,Y) title('Trigonometrische Funktionen') xlabel('Winkel \alpha'); text(pi/4,sin(pi/4),' sin \pi/4 = cos \pi/4') axis equal axis tight grid оп legend(['sin \alpha'; 'cos \alpha'],l) адание 3.121 Построение rрафиков в разных системах координат в одном rpафи ческом окне. Введите команды » [X,Y]=meshgrid(l: .05:1); Z=Х.ЛЗЗ*Х.*У.Л2; surf(X,Y,Z) axis equal axis tight Ьох оп Теперь введите следующие команды: » ind=Z>O.l & Z<O.l; Z(ind)=NaN; subplot(1,2,1) surf(X,Y,Z) 
3.2. Лабораторный практикум NQ 3 79 Что получится в результате выполнения команды » subplot (1,2,1) ? Теперь введите команды » subplot(1,2,2) contour(X,Y,Z,20); axis equal axis tight colorbar('horiz'); Изучите работу функции subplot. адание з. 1 з1 «TOMorpaMMa». 3Drрафика и анимация. Построить rрафик за данной функции двух переменных и просканировать (снизу вверх) ее ro ризонтальные уровни (рис. 3.1). Рис. 3.1. Сканирование 3Dповерхности линиями уровня 
80 Т е м а 3. ЭЛЕМЕНТЫ проrр АММИРОВАНИЯ Для этоrо разбить rpафическое окно F igure на две системы KOOp динат: . в левой системе координат изобразить саму поверхность (3D поверхность ); . в правой системе координат нарисовать карту ее произвольноrо rори зонтальноrо сечения (2Dизображение). В цикле для любоrо уровня z  z О : . из поверхности ВЫРЕЗАТЬ данный уровень; . справа изобразить карту данноrо уровня, то есть местоположение вырезанных ячеек. 
ТЕМА 4 СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ Режимы работы: . Работа в интерактивном режиме: ввод команд с клавиатуры в KO мандной строке командноrо окна Command Window. . Работа с М файлами: сохранение последовательности команд в текстовых файлах, дополнение их комментариями и выполнение из редактора М файлов или запуск из командной строки в KO мандном окне Command Window. Для работы с М файлами предназначен встроенный текстовый pe дактор Мфайлов, который вызывается командой меню File I New  Mfile и работает в своем собственном окне, обеспечивая создание, редактирование, запуск и отладку кода. 4.1. Типы Мфайлов Мфайлы: содержат команды и операторы МА TLAB. Типы М файлов: · файлсценарии (Script Mfiles), содержащие последо вательность команд; . файлфункции (Function Mfiles), в которых описыва ются функции. 4.1.1. Сценарии Сценарий (script)  это текстовый файл, в котором записаны команды, подлежащие последовательному выполнению. Свойства cцe нария: . нет специальноrо оформления; . доступны все переменные, определенные в рабочем пространстве; . не допускает входных и выходных параметров; 
82 т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ · все переменные, которые создаются и используются в сценарии, co храняются в рабочем пространстве Workspace и доступны по OKOH чании работы сценария; . предназначен для упрощения MHoroKpaTHoro вызова rpуппы команд; . не может использоваться в качестве операндов в выражениях или в качестве входных aprYMeHToB функций; . сохранение в файл на диске: текстовый файл с расширением m (Ha пример, file1.m); . для выполнения сценария содержащий ero М файл должен находить ся в текущем каталоrе Current Directory либо путь к нему должен быть указан в пути поиска Search Path; . сохраненный сценарий в любой момент можно выполнить одним из следующих способов:  целиком или частично из редактора Мфайлов;  целиком из командноrо окна, если набрать в командной строке имя файла (без расширения), содержащеrо сценарий, и нажать клавишу <Enter>;  целиком из друrоrо сценария, если в качестве команды указать имя файла (без расширения), содержащеrо сценарий. 4.1.2. Функции . Функции оформляются в виде текстовых файлов с расширением m. . Определение М функции: function [<списоквыхпараметров>] = имяфункции«списоквходпараметров» . М функция включает следующие компоненты:  строка заrоловка функции задает имя функции, количество и порядок следования выходных и входных aprYMeHToB;  первая строка подсказки определяет исчерпывающее KpaT кое назначение функции; выводится на экран командой lookfor или help;  текст подсказки представляет собой более детальное описа ние назначения и способов вызова функции, выводится на экран командой help; 
4.1. Типы Мфайлов 83  тело функции представляет собой непосредственно проrрам мный код, который реализует вычисления и присваивает значения выходным aprYMeHTaM;  комментарий представляет собой текст внутри проrpаммноrо кода, описывающий алrоритм выполнения функции. . По умолчанию внутренние переменные являются локальными и xpa нятся во внутреннем рабочем пространстве, относящемся к данной функции. . Функция используется для расширения возможностей языка MATLAB. . Функция может использоваться как составная часть выражения или в качестве aprYMeHTa друrой функции. . Имя функции должно начинаться с буквы, может содержать любые буквенноцифровые символы и символ подчеркивания. . Допустимость имени функции: команда» isvarname myfun. . Уникальность имени функции определяется по первым N=namelengthmax символам. . МА TLAB различает верхний и нижний реrистр. . Функция допускает входные и выходные параметры. . Входные арrументы функции заключаются в круrлые скобки и сле дуют после имени функции. . Если функция имеет несколько выходных aprYMeHToB, то они заклю чаются в квадратные скобки. . Для разделения входных aprYMeHToB используется запятая, для разде ления выходных aprYMeHToB используется запятая или пробел. . В зависимости от количества входных и выходных aprYMeHToB объяв ления функции Moryт иметь следующие представления: function у = funcName(x) function [] = funcName(x,y,z) function funcName(x) function [x,y,z] = funcName() function [х у z] = funcName(a,b) function funcName . Одна и та же функция может вызываться с разным числом входных и выходных aprYMeHToB (механизм переrpузки функций); при опреде 
84 т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ лении функции в списках входных и выходных aprYMeHToB должно указываться их максимально допустимое количество. . Имена фактических параметров, передаваемых в функцию, Moryт не совпадать с именами формальных aprYMeHToB, указанных в определе нии функции. . Одно строчным комментарием является любая последовательность символов, располаrающаяся за знаком % и до конца текущей строки. · Для записи комментария более чем на одну строку следует использо вать пару символов % { и %}, которые должны занимать отдельные строки непосредственно перед блоком комментария и за ним. . Мфайлы MorYT содержать коды нескольких функций. Первая функ ция в файле  это первичная (основная) функция, вызываемая по име ни М файла. Друrие функции внутри файла  это подфункции, KOTO рые являются видимыми только в пределах данноrо файла. . Справка help видит только первичную функцию и не видит под функции. . Каждая функция имеет собственный заrоловок. Подфункции следуют друr за друrом непрерывно. Ключевое слово function или конец файла означают конец функции (никаких специальных признаков конца функции нет). Подфункции Moryт вызываться в любом порядке, в то время как основная функция выполняется первой. . Если имя файла и имя функции не совпадают, то внутреннее имя функции иrнорируется. Вызов функции происходит по имени файла. . Частные функции размещаются в подкаталоrах со специальным име нем pri vate, видимы только для оrраниченной rруппы функций, находящихся в каталоrе предыдущеrо уровня. . Удаление откомпилированной функции из памяти: команда »clear funcname. . Новые функции добавляются к словарю системы МА TLAB и CTaHO вятся доступными наряду со встроенными функциями. . При включенном режиме echo функция выполняется в режиме ин терпретации и на экран выводятся результаты выполнения каждоrо оператора. . Функции внутри одноrо и Toro же М файла не MorYT обращаться к одним и тем же переменным, если они не объявлены rлобальными пе 
4.1. Типы Мфайлов 85 ременными внутри соответствующих функций или не переданы им в качестве параметров. . В качестве имени подфункции можно использовать имена функций системы MATLAB, т. к. коrда приходит вызов функции из Мфайла, то МА TLAB в первую очередь проверяет, не является ли эта функция подфункцией. . Переменные vargout, vargin имеют тип cell. Они возвращают (назначают) список выходных (входных) aprYMeHToB переменной длины. . Переменные nargout, nargin определяют число реально задан ных выходных (входных) aprYMeHToB функции. . Команда exist проверяет, существует ли переменная или файл с указанным именем. · Оператор ret urn  это оператор выхода из функции. При вводе в командной строке оператор ret urn позволяет закончить отладку. Iпример 4. 11 function n = factorial(n) % FACTORIAL Factorial function. % FACTORIAL(N) for scalar N, is the product of all % the integers from 1 %to N, % FACTORIAL(N) for ND matrix, is the factorial for % еасЬ element of N. N = n(:); if any(fix(N)=N) I lany(N<O) 11... isa(N, 'double') I lisreal(N) error('МATLAВ:factorial:NNegativeInt', 'N must Ье а matrix of nonnegative integers. ') end n(N)170) = 171; m = mах ( [1; n ( : ) ] ) ; N = [1 1 cumprod(2:m)]; n ( :) = N (n+1) ; » help factorial 
86 т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ FACTORIAL Factorial function. FACTORIAL(N) for scalar N, is the product of all the integers from 1 %to N, FACTORIAL(N) for ND matrix, is the factorial for еасЬ element of N. » lookfor factorial FACTORIAL Factorial function. Iпример 4. 21 Вызвать М сценарий: » run MyScript Iпример 4. з1 Вызвать Мфункцию myfunc с тремя входными и двумя BЫXOДHЫ ми арrументами, подавив вывод на экран: » [Х, У] = myfunc(x, у, z); 4.1.3. Рекурсия . Функции MorYT вызывать сами себя (рекурсия); . каждое вложение имеет собственные локальные переменные; . максимальный уровень вложенности составляет 500: команда » get(O, 'RecursionLimit'); . изменить максимальный уровень вложенности: команда » set (О, 'RecursionLimit', N). Iпример 4. 41 function s=summa(n) if n==l s=l; else s=n+summa(nl); end; » summa(500) ans  125250 
4.1. Типы Мфайлов 87 » summa(501) ??? Maximum recursion limit of 500 reached. » get(O, 'RecursionLimit') ans  500 4.1.4. Использование функции в качестве параметра . Передача функции как текстовой строки:  имя функции передается как текстовая строка' FuncName';  функция используется через feval (Name, ParametersList);  список параметров передается при непосредственном вызове функции. Iпример 4. 51 function plotsf(f,xmin,xmax) х = xmin:0.01:xmax; y=feval (f, х) ; plot(x,y) » f='sin' f  sin » plotsf(f,O,pi) . Передача функции как указателя:  имя функции передается как указатель @FuncName;  функция используется при помощи feval (Name, Parameter sList) ;  список параметров передается при непосредственном вызове функции. Iпример 4. 61 function plothf(f,xmin,xmax) х = xmin:0.01:xmax; 
88 т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ y=feval (f, х) ; plot(x,y) » f=@sin f  @sin » plothf(f,O,pi) . Передача функции как встроенной функции:  создается встроенный объект: inline ( 'Expression' );  имена параметров определяются автоматически;  функция используется прямым вызовом. Iпример 4. 71 function plotif(f,xmin,xmax) х = xmin:0.01:xmax; y=f(x); plot(x,y) » f=inline('sin(x) ') f  Inline function: f(x)  sin(x) » plotif(f,O,pi) . Создание и использование анонимной функции:  код состоит из одноrо выражения;  параметры задаются в круrлых скобках через запятую после сим вола @. Iпример 4. 81 » area = @(r) 4*рi*r Л 2 % площадь сферы Вызов: » area(2) » аrеа(З) 
4.2. Переменные и их область действия 89 4.2. Переменные и их область действия Область действия (scope rules) переменной  это правила, KOTO рые устанавливают, какие данные доступны из данноrо места проrрам мы. С точки зрения области действия переменных различают три типа переменных. . Локальные переменные  это переменные, объявленные внутри функ ции. Локальная переменная доступна только внутри функции, в KOTO рой она объявлена, и существует до тех пор, пока выполняется функ ция. При выходе из функции эта переменная и ее значение теряются. . Формальные параметры  это переменные, объявленные при описа нии функции как ее арrументы. Область действия формальных пара метров  блок, являющийся телом функции. . lлобальные переменные  это переменные, объявленные при помощи ключевоrо слова global. 4.2.1. r лобальные переменные . Команда global namel, ... объявляет переменные rлобальными. . Если эта переменная в момент объявления не существует, то ей при сваивается значение пустоrо массива []. · Обращение к rлобальной переменной возможно из любой функции, rде эта переменная объявлена rлобальной. . Команда clear global namel, ... удаляет указанные rлобальные переменные. . Команда clear global удаляет все rлобальные переменные. . Команды who global и whos global выводят список rло бальных переменных. . Команда isglobal (namel) определяет, является ли указанная переменная rлобальной. . Если при объявлении переменной rлобальной уже существует пере менная с тем же именем в рабочей области, то МА TLAB выдает пре дупреждающее сообщение и переводит переменную в разряд rло бальных переменных. 
90 т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ Iпример 4. 91 в файле Ini t. m определены две функции: первичная функция In it (xmin, хтах, step) и под функция ShowNext (dx, у) . Переменная FP объявлена rлобальной и видима в обеих функциях. function Init(xmin,xmax,step) global FP FP= struct('data', [xmin NaN],... 'xLim', [xmin xmin+step], 'yLim', [1 1]); for x=xmin:step:xmax; ShоwNехt(stер,sin(20*х)+sin(2З*х»; pause(O.Ol); end function ShowNext(dx,y) global FP x1=FP.data(end,1)+dx; FP.data= [FP.data; х1 у]; xLim(2)=x1; FP.yLim=[min([min(FP.data(:,2» FP.yLim]) max([max(FP.data(:,2» FP.yLim])]; axis([FP.xLim FP.yLim]); plot(FP.data(:,1),FP.data(:,2»; drawnow » Init(O, 2*pi, 0.01) 4.2.2. Устойчивые переменные · Устойчивые переменные (persistent variables)  это локаль ные переменные, сохраняющие значение между вызовами функции. . Устойчивые переменные объявляются и используются только в пре делах М функции. . Значение устойчивых переменных сохраняется от одноrо вызова функции до друrоrо. 
4.3. Отладка Мфункций 91 . Переменная должна быть объявлена устойчивой до Toro, как она бу дет использоваться в функции. . Объявить устойчивую переменную можно при помощи команды persistent namel, ... . При объявлении устойчивой переменной МА TLAB присваивает ей значение [ ] . . МА TLAB очищает все устойчивые переменные, используемые в функции, если функция очищается по команде clear funcname или если редактируется М файл, содержащий данную функцию. Iпример 4. 101 function findSum(inputvalue) persistent SUМX if isempty(SUМX) SUМX = о; end SUМX = SUМX + inputvalue 4.3. Отладка Мфункций . Окно редактирования М файлов является одновременно и окном BcтpoeHHoro отладчика medi t . ехе. . Пункты меню и кнопки панели инструментов, позволяющие выпол нять отладочные действия:  Set/Clear Breakpoint F12: поставить/убрать точку останова;  Clear All Breakpoints: убрать все точки останова;  Step In F11: выполнять построчно с заходом в вызываемые функции;  Single Step F10: выполнять построчно;  Continue: выполнять до следующей точки останова;  Stop if Errors/Warnings...: установить режимы отладки при возникновении определенных ситуаций;  Qui t Debugging: завершить отладку. . Чтобы в режиме отладки про смотреть значение переменной, ДOCTa точно подвести курсор к ее имени в тексте функции, после чеrо на эк ране появится всплывающий желтый прямоуrольник со значением переменной внутри Hero. 
92 т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ . Содержимое любой переменной может быть выведено в командном окне указанием ее имени и нажатием клавиши <Enter>. . Приrлашение командной строки в режиме отладки: К». · Команды отладки: dbstep, dbstop, dbcont, dbclear, dbquit. 4.4. Лабораторный практикум Х!! 4 4.4.1. Теоретические вопросы 1. Режимы работы в MATLAB. 2. Типы Мфайлов. 3. Различия между М сценарием и М функцией. 4. Как создать функцию в МА TLAB. 5. Типовая структура М файла. 6. Оператор заrоловка функции. 7. Входные/выходные параметры функции. 8. Что является признаком конца функции. 9. Как оформить комментарий. 10. Типы функций. 11. Первичные функции. 12. Подфункции. 13. Анонимные функции. 14. Частные функции. 15. Видимость имен функций. 16. Проверка параметров функций. 17. Переменные и их область действия. 18. Локальные, rлобальные переменные. 19. Устойчивые переменные. 20. Переrpузка функций. 21. Отладка функций. 4.4.2. Зад ания адание 4. 11 Напишите анонимную функцию, вычисляющую: а) площадь треуrольника по формуле f'epoHa; Ь) длину окружности; 
4.4. Лабораторный практикум NQ 4 93 с) площадь Kpyra; d) площадь KpyroBoro сектора; е) площадь правильноrо мноrоуrольника; f) объем цилиндра; g) площадь полной поверхности цилиндра; h) объем конуса; i) объем усеченноrо конуса; j) объем шара; k) площадь сферы. адание 4. 21 Напишите рекурсивную функцию, высчитывающую факториал за данноrо числа. адание 4. з1 Напишите функцию, высчитывающую первые n полиномов Чебы  шева. Первая строка М функции должна иметь вид function Т = tscheby(x,n) Полиномы рассчитываются по формуле То (х) = 1; Тl (х) = х; Tn (х) = 2x*Tn1 (х)  Tn2 (х) ; Постройте rpафики функций в интервале [1, 1 ] . адание 4. 41 Напишите М функцию вида: а) { х, х < О Ь) { цхl:::; 1 f(x)= х 2 ,0:::;х<2; f(x)= x 2 ,1<l x l<2; 4,x 2 O,lxl  2 с) { О, х < О f(x) = sin[ л:; х )0:::; х:::; 1. 1,х> 1 Протестируйте функцию для значений х= [  2, 1/3, 3/2, 2, 6]. По стройте rрафик функции в интервале [3, 3 ] . 
94 т е м а 4. СЦЕНАРИИ, ФУНКЦИИ И ПЕРЕМЕННЫЕ адание 4. 51 Напишите рекурсивную функцию, высчитывающую последователь ность чисел Фибоначчи: nk = nkl + nk2, nl = n2 = 1. адание 4.61 Вычислите рекурсивно значение выражения: 1 1 1 1 1 1 1 1 1 1 + 1 1+ 1+1 1+ 1+ 1+ 1+ 1+ 1+ 1+ 1+ адание 4. 71 «Скользящий rрафик». Напишите функцию, отображающую скользящий rрафик заданной функции. Функция должна иметь следую щий заrоловок и подсказку: function KM4(dx,y) % КМ4  Floating Plot 9- о % Graphics Initialization: % km4('reset', [xmin xmaxJ)  reset plot area % km4('reset')reset plot area ([xmin xmaxJ[O 100J) % Input the next point of graphics: % km4(dx,y)  add new point to current plot % km4(y)  add new point to current plot (step dxl) % EXAMPLE: 
4.4. Лабораторный практикум NQ 4 95 % » % » km4 ('reset', [О 80J) for x0:0.01:10*pi;... km4(0.1,sin(20*x)+sin(23*x)); pause(O.Ol); end 9- о Рис. 4.1. Скользящий rpафик Функция должна выводить rpафик указанной функции. Количество точек вдоль оси Х фиксировано. Если номер текущей отображаемой точ ки превышает заданное количество точек, то rрафик сдвиrается влево вдоль оси Х (<<скользит»), так чтобы количество отображаемых точек вдоль оси Х оставалось постоянным. Диапазон значений вдоль оси У корректируется проrpаммно таким образом, чтобы весь rрафик попадал в область вывода, как показано на рис. 4.1. 
ТЕМА 5 ОБЪЕКТНО ОРИЕНТИРОВАННОЕ проrРАММИРОВАНИЕ Современное объектно ориентированное проrpаммирование OCHO вано на возможности введения новых типов данных и определения опе раций для них. В MATLAB классы пользователя User Classes Ha следуют родительскому классу struct, т. е. все новые типы (классы) данных базируются на структурах. 5.1. Правила создания класса Рассмотрим последовательность создания класса в среде МА TLAB на примере класса myclass. . Класс  это папкаконтейнер  каталоr с именем ...\@myclass. . Для работы с классом myclass текущий каталоr Current Direc tory должен быть открыт на папке, содержащей папкукласс @myclass. . Имя Функцииконструктора класса должно совпадать с названием класса (функция myclass, описанная в Мфайле myclass. m). . Объект класса хранит свои данные в структуре, все поля которой яв ляются скрытыми (pri vate). . Функцииметоды класса реализуются в Мфайлах. Функцияметод  это функция, один из aprYMeHToB которой  объект данноrо класса. Имя М файла  имя действия, реализованноrо функцией. . Скрытые частные (private) функции класса myclass размещаются в папке @myclass\private, не имеют в качестве входноrо apry мента объект класса, используются как вспомоrательные функции и не оперируют непосредственно с объектом класса. . Базовые методы классов МА TLAB:  class constructor: создание объекта класса;  double, char: конверторы; 
5.2. Лабораторный практикум NQ 5 97  display: вывод содержимоrо объекта в командное окно, если BЫ ражение не завершается разделителем точкой с запятой;  set и get: доступ к свойствам объекта (функция get  чтение значений свойств, а функция set  запись новых значений);  subsref: индексная ссылка (переопределение методов для опера торов a(i), a{i}, a.field);  subsasgn: индексное присваивание (переопределение методов для операторов а (i) =Ь, а { i } =Ь, а. f ield=b);  subindex: индексный дескриптор, т. е. использование объекта класса в качестве целочисленноrо индекса друrоrо объекта (переоп ределение методов для х (а»);  end: последний индекс по указанной размерности. . Переопределение арифметических функций и операторов: функции plus, minus, mtimes, ... · Команда » clear classes вызывается после каждоrо переоп ределения класса для удаления объектов класса. . Встроенные функции МА TLAB дЛЯ идентификации объектов классов:  class (р) : определение класса объекта;  isa (р, 'myclass'): проверка принадлежности объекта данному классу;  isobject (р) : выявление принадлежности объекта к какомулибо классу МА TLAB;  methods ( 'myclass' ) : вывод списка методов данноrо класса;  whos р: вывод подробной информации об объекте. 5.2. Лабораторный практикум Х!! 5 5.2.1. Теоретические вопросы 1. Справочные функции: class, isa. 2. Основные принципы ООП, реализованные в MATLAB. 3. Правила создания HOBoro класса. 4. Функции для идентификации класса. 5. Конструктор класса, типы конструкторов. 6. Деструктор класса. 
98 Т е м а 5. ОБЪЕКТНО ОРИЕНТИРОВАННОЕ проrРАММИРОВАНИЕ 7. Методы класса. 8. Работа с индексами: subsref, subsagn, subindex. 9. Правила переопределения арифметических операций, имена фай лов для реализации базовых операций MATLAB. 10. Полиномы в MATLAB, функции: conv, roots, polyval. 11. Изменение свойств объекта: set, get. 12. Конверторы double и char. 13. Вывод на печать display. 14. Дифференцирование и интеrрирование: diff, int. 15. Нахождение корней roots и построение rрафика plot. 5.2.2. Зад ания адание 5. 11 Создайте класс polynom. В классе должны быть реализованы методы, определяющие функциональное назначение данноrо класса. Для создания объектов класса polynom используется функция конструктор. Конструктор должен находиться в Мфайле с именем @polynom/polynom. m. Данный конструктор создает полином из за данноrо вектора коэффициентов полинома при убывающих степенях пе ременной х. В примере применяются три типа конструктора. · Конструктор по умолчанию. Создается шаблон объекта, обычно с пустыми полями. В отдельных случаях поля инициализируются HeKO торыми начальными значениями. . Конструктор копирования. Конструктор возвращает копию объекта. При этом в конструкторе необходимо использовать функцию isa(p, 'polynom'), чтобы определить: является ли входной apry мент объектом данноrо класса? . Конструктор с параметрами. Конструктор создает структуру и ини циализирует ее поля, используя входные данные. Затем из этой структуры конструируется сам объект при помощи встроенной функ ции class (). у этой функции есть два обязательных параметра. Первый  структура, которая будет представлять данные объекта, а второй  текстовая строка, содержащая имя создаваемоrо класса. function р = polynom(a) %POLYNOM Polynomial class constructor. 
5.2. Лабораторный практикум NQ 5 99 % Р  POLYNOM(v) if nargin == О р.с = []; р = class(p, 'polynom'); elseif isa(a, 'polynom') р = а; else р. с = а ( :) '; % constructor wi th parameters р = class(p, 'polynom'); % default constructor % copyconstructor end Для преобразования объекта одноrо класса к друrому классу ис пользуется функцияконвертор. Имя этой функции и имя ее Мфайла должно совпадать с именем класса, к которому она будет преобразовы вать исходный объект. Для преобразования объекта класса polynom обратно в вектор ero коэффициентов используется метод double ( ) : function с = double(p) % @polynom/double.m. с = р.с; Теперь можно преобразовывать векторы в полиномы и обратно: » р = polynom([l 2 4 5]); » double(p) ans  1 2 4 5 Для преобразования объекта к текстовому виду используется метод char () . в примере класса polynom этот метод определяется в Мфайле @polynom/ char . m и используется следующим образом: » р = polynom([l 2 4 5]); » char(p) ans  х Л 3 +2*х Л 2  4*х + 5 Преобразование к текстовому виду используется в методе dis play (), который относится к базовым методам классов MATLAB. Этот 
100 Т е м а 5. ОБЪЕКТНО ОРИЕНТИРОВАННОЕ проrРАММИРОВАНИЕ метод вызывается всякий раз, коrда в среде МА TLAB введено выраже ние, не завершенное точкой с запятой. function display(p) % @polynom/display.m disp (' '); disp([inputname(l),' = ']) disp (' '); disp ( [' , char (р) ] ) disp (' '); Для переопределения основных математических операторов необ ходимо в папкеконтейнере, содержащей методы класса, создать Мфайл с именем, соответствующим имени переопределяемоrо оператора, и в этом файле определить функцию с этим же именем. Так функция, опре деленная в файле @polynom/plus .m, складывает полиномы. function r = plus(p,q) % @POLYNOM/PLUS.M Р = polynom (р) ; q = polynom (q) ; k = length(q.c)  length(p.c); r = polynom([zeros(l,k) р.с] + [zeros(l,k) q.c]); Вызов: » р = polynom([l 2 1 3]); q = polynom([4 5]); р1 = Р + 1; s = Р + q; Создайте класспапку @polynom, определите структуру для xpaHe ния данных, реализуйте для класса polynom следующие методы: · char  преобразование полинома к тестовому виду; . diff  вычисление производной полинома; . display  вывод в командное окно; . double  функцияконвертор полинома в вектор ero коэффициентов; . int  вычисление неопределенноrо интеrрала полинома р. int (р) возвращает интеrpал с нулевым свободным членом, int (р, с) воз вращает интеrpал со свободным членом с; 
5.2. Лабораторный практикум NQ 5 101 . minus  вычитание полиномов; . mtimes  умножение полиномов; . plot  построение rрафика полинома р. Команда plot (р) выводит rрафик полинома в диапазоне, содержащем все ero корни. Команда plot (р, х) выводит rрафик полинома в заданной области определе ния; · pl us  сложение полиномов; . polynom  конструктор; . polyval  вычисление значения полинома р в точке х; . roots  вычисление всех корней полинома; . subsref  операция индексной ссылки, реализующая вычисление значения полинома в указанных точках. 
ТЕМА 6 ВЫСОКОУРОВНЕВАЯ rp АФИКА Высокоуровневая rрафика (HighLevel Graphics) включает команды и функции, предназначенные для построения rрафи ков в прямоуrольных и полярных системах координат, трехмерных по верхностей и линий уровня, rистоrpамм, диаrpамм, анимации и т. д. f'рафические команды высокоrо уровня автоматически контролируют масштаб, выбор цветов, маркировку осей. . Все rрафические изображения строятся в специальном rрафическом окне Figure. . Создание HOBoro окна: пункт меню File I New  New Figure или команда figure. . Активизация окна с номером N или создание окна с указанным HOMe ром: figure (N) . . Переключение между окнами: Alt+Tab. . Построение нескольких rрафиков: в одной системе координат: hold оп; одном окне в разных системах координат: subplot; разных rрафических окнах: figure. · Удаление rрафика: clf, clf reset, cla, cla reset. . Закрытие rрафическоrо окна: close (FigureN) , close all. 6.1. Двумерная rрафика . f'рафик функции одной переменной, векторных и матричных данных в линейном масштабе в декартовой системе координат: plot. plot (х, У)  rpафик с узлами (Xk, Yk); plot (У)  rpафик с узлами (k, Yk); дополнительный строковый aprYMeHT задает: 
6.1. Двумерная rpафика 103 э тип маркеров: ., +, *, о, х, s, d, v, л, <, >, р, h; Э стиль линии: , :,  . ,  ; э цветлинии:у,m,с,r,g,Ь,w,k; plot (х1, у1, х2, у2, ...) или plot (х, [у1; у2; уЗ, ...])  по строение нескольких rpафиков в одной системе координат; справка:» help plot. . f'рафик в полулоrарифмическом или лоrарифмическом масштабах: semilogx (лоrарифмический масштаб по оси х), semilogy (лоrа рифмический масштаб по оси у) и loglog (лоrарифмический Mac штаб по обеим осям). . f'рафик в полярных координатах: polar, ezpolar. . Трианrуляционный rрафик: triplot. · Диаrраммы и rистоrpаммы: area, bar, barh, hist, pie, rose, stem. . Двумерный закрашенный мноrоуrольник: fill. . f'рафик функции в указанном интервале: fplot, ezplot. . Анимированный rрафик плоской линии: comet. . Ступенчатый rрафик: stairs. . f'рафик дискретных значений: steam. . f'рафики линий уровня: contour, contourf. . f'рафик поля направлений: quiver, streamline; вспомоrательные функции: gradient, stream2. . Справка: help graph2d, help specgraph. 6.1.1. 2Drрафики функций Примеры построения rрафиков функций одной переменной. Iпример 6. 11 Функция plot (рис. 6.16.3). 
104 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА » х=З*рi:О.О1:З*рi; » y=sin(x); » plot(x,y) Рис. 6.1. Функция plot » z=x+i*y; » plot (z, '*k: ' ) Рис. 6.2. Функция plot » x=linspace(0,2*pi); » y=[sin(x);cos(x)]; » plot(y) Рис. 6.3. Функция plot 
6.1. Двумерная rpафика 105 Iпример 6. 21 Если для rpафика диапазоны изменения переменных вдоль одной или обеих осей координат слишком велики, то можно воспользоваться функциями построения rpафиков в полулоrарифмическом или лоrариф мическом масштабах. Для этоrо предназначены функции semilogx (ло rарифмический масштаб по оси х), semilogy (лоrарифмический Mac штаб по оси у) и loglog (лоrарифмический масштаб по обеим осям). Построить rрафики функций y=ln (х/2) и z=cos (ln х) на отрез ке [0.1, 10] в лоrарифмическом масштабе по оси х (рис. 6.4). х = 0.1:0.1:10; y=10g(x/2); z=cos(log(x»; semilogx(x, [y;z]) Рис. 6.4. Вывод rpафика функции в полулоrарифмическом масштабе Iпример 6. з1 f'рафики двух функций в одной системе координат (рис. 6.5). » y=sin(x); » z=sin(х)/З; »plot(x, [y;z]) Рис. 6.5. rрафики двух функций в одной системе координат 
106 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА Iпример 6. 41 Построить rрафики в разных rрафических окнах. х = pi:O.01:pi; у = sin (х) ; z = cos(x); u = ехр (х) ; plot(x,y,x,z); figure; plot(x,u); Рис. 6.6. Вывод rpафиков в разные rpафические окна в результате rрафики функций sin и cos выводятся в одном rрафическом окне, а rрафик функции ехр строится в друrом rрафиче ском окне, как показано на рис. 6.6. Iпример 6. 51 Построение rрафиков в одном rрафическом окне в разных системах координат при помощи функции subplot. Диапазоны изменения пере менных на осях координат в этом случае независимы друr от друrа. Изобразить rрафики функций у == Х, у == х 2 И У ==  в одном rрафи ческом окне в разных системах координат (рис. 6.7). х=О: .1: 10; у=х; w=х. Л 2; z=sqrt (х) ; subplot(2,2,1); plot(x) subplot(2,2,2); рlоt(х. Л 2) subplot (2,2, [3 4]); plot(sqrt(x» Рис. 6. 7. Вывод rpафиков в разные оси координат  функция subplot 
6.1. Двумерная rpафика 107 Iпример 6. 61 Построить rрафик функции двух переменных разными способами, размещая их в разных системах координат (рис. 6.8). colormap default [X,Y,Z]= реаks(ЗО); subplot(2,2,1); surf(X,Y,Z); title ( 'surf' ) subplot(2,2,2); соntоurЗ(Х,У,Z); titlе('соntоurЗ') suЬрlоt(2,2,З); contour(X,Y,Z); ti tle ( , contour ' ) subplot(2,2,4); contourf(X,Y,Z); title('contourf') Рис. 6.8. Вывод rpафика в разные системы координат Iпример 6. 71 Визуализация rрафика функции в полярных координатах: функция polar (рис. 6.9). t = о: .01:2*pi; r=sin(2*t) .*cos(2*t); polar (t, r, 'k' ) Рис. 6.9. rрафик функции в полярных координатах  функция polar 
108 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА Iпример 6. 81 Визуализация rрафика функции в полярных координатах (рис. 6.10). phi=linspace(0,2*pi); r=linspace(O,l); polar(phi,r) Рис. 6.10. rрафик функции в полярных координатах  функция polar Iпример 6. 91 Изобразите rpафик функции, заданной параметрически (рис. 6.11): х (t) =sin (2t) , У (t) =cos (t) , О  I t I  2п. х= @ (t) sin (2*t) ; y=@(t) cos(t); ezplot(x,y, [0,2*pi]) Рис. 6.11. rрафик функции, заданной параметрически  функция ezplot 
6.1. Двумерная rpафика 109 Iпример 6. 101 f'рафик функции, заданной кусочным образом (рис. 6.12): { nSin x,3n:::;x:::;n; у == nlxl,n<x<n; . 3 < < 3 nsш X,nx n. х1=З*рi:О.О1:рi; y1=pi*sin(x1); x2=[pi:O.01:pi]; y2=piabs(x2); хЗ=рi:О.О1:З*рi; уЗ=рi*sin(хЗ) .АЗ; plot (х1, у1, ... х2 У 2 ,, хЗ У з ) " " grid оп Рис. 6.12. rрафик функции, заданной кусочным образом Iпример 6. 111 Построить траекторию движения точки в течение 100 секунд, KOOp динаты которой изменяются по закону х= (1+t 2 ) sin (20t), у= (1+t 2 ) cos (20t), как показано на рис. 6.13. t = 0:0.001:10; х= (l+t. А2) . *sin (20*t) ; у= (l+t. А2) . *cos (20*t) ; comet(x,y) Рис. 6.13. Анимированный rpафик плоской линии  функция comet 
110 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА Iпример 6. 121 Построение двумерноrо закрашенноrо мноrоуrольника (рис. 6.14). х=З*рi:О.1:З*рi; y=sin(x); fill(x,y, 'r') Рис. 6.14. Функция fill 6.1.2. Диаrраммы и rистоrраммы Iпример 6. 1 з1 Диаrрамма с областями (рис. 6.15). аrеа(rаnd(10,З» grid оп colormap summer set(gca, 'Layer', 'top'); ti tle 'Stacked Area Р lot ' Рис. 6.15. Диаrpамма с областями  функция area 
6.1. Двумерная rpафика 111 Iпример 6. 141 Столбчатая диаrрамма матричных данных (рис. 6.16). d= rаnd(10,З); bar(d, 'stacked') Рис. 6.16. Столбчатая диаrpамма матричных данных Iпример 6. 151 Столбчатая диаrрамма вектора результатов измерений в зависимо сти от времени измерения в некоторые моменты времени. Пропущенные столбики на диаrрамме соответствуют тем моментам времени, коrда из мерения не проводились (рис. 6.17). time =[0 1 2 4 6 8 9 10 11 12]; data=rand(1,10) *10; bar (time, data) Рис. 6.17. Столбчатая диаrpамма  функция bar 
112 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА Iпример 6. 161 Круrовая диаrрамма (рис. 6.18). x=rand(1,15); explode=x./sum(x)<.05; pie(x,explode) Рис. 6.18. Крyrовая диаrpамма  функция pie Iпример 6. 1 71 Ступенчатый rрафик (рис. 6.19). stаirs([lЗ 642 О]); grid оп Рис. 6.19. Ступенчатый rpафик  функция stairs 
6.1. Двумерная rpафика 113 Iпример 6. 181 lистоrраммы векторных данных. Следующие команды заполняют вектор da t а числами, распределенными по нормальному закону, разби вают интервал, которому они принадлежат, на указанное число равных частей (десять по умолчанию) и строят rистоrрамму попадания чисел в каждый из интервалов (рис. 6.20). data=randn(100000,1); hist (data, 30) Рис. 6.20. rистоrpаммы векторных данных  функция hist Iпример 6. 191 Уrловые rистоrраммы (в полярных координатах) дают наrлядное представление о данных, связанных с измерениями направлений. Apry ментом функции является вектор значений в радианах (рис. 6.21). theta=2*pi*rand(1,50); rose (theta) Рис. 6.21. Уrловая rистоrpамма в полярных координатах  функция rose 
114 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА 6.1.3. Ко нтурные rрафики Iпример 6. 201 Изобразить линии уровня на плоскости ху (функция contour) и подписать для каждой линии уровня соответствующее значение (функ ция clabel), которое принимает на ней исследуемая функция, как пока зано на рис. 6.22. [х, у] =meshgrid (2: .1: 2, ... 1: .1:1); z=х.*ехр(х.Л2у.Л2); [c,h]=contour(x,y,z); clabel(c,h) Рис. 6.22. ЛИНИИ урОВНЯ  фУНКЦИЯ contour Наrлядную информацию об изменении функции дает заливка пря моуrольника на плоскости ху цветом, зависящим от значения функции в точках плоскости (рис. 6.23). [х, у] =meshgrid (2: .1: 2, ... 1:.1:1); z=х.*ехр(х.Л2у.Л2); contourf(x,y,z); colorbar Рис. 6.23. ЛИНИИ урОВНЯ  фУНКЦИЯ fcontour 
6.1. Двумерная rpафика 115 6.1.4. Векторные поля Iпример 6. 211 Вычисление rрадиента сеточной функции. Визуализация BeKTOp функции (рис. 6.24). [х, у] =meshgrid (2: .2: 2, ... 1 : .15: 1) ; z=х.*ехр(х.Л2у.Л2); [dx, dy] =gradient (z, .2, ... .15) ; quiver(x,y,dx,dy) » sx=. 75+... .1*cos(0: .1:2*pi); sy= .1*sin(0: .1:2*pi); streamline (х, у, dx, dy, ... sx,sy) Рис. 6.24. Векторный анализ Iпример 6. 221 Визуализация векторфункции от трех переменных, определенной на некоторой поверхности. Матрицы х, у, z описывают поверхность, а матрицы и, v, w содержат компоненты векторфункции в соответствую щих точках пространства (рис. 6.25). 
116 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА [x,y,z]=sphere; [u,v,w]=surfnorm(x,y,z); mesh (х, у, z) hold оп quivеrЗ(х,у,z,u,v,w) Рис. 6.25. 3Dвекторные поля 6.2. Трехмерная rрафика Изображение rрафиков функций двух переменных (трехмерных ли ний и поверхностей) требует реализации трехмерной rpафики на плос ком экране дисплея компьютера. Высокоуровневые rрафические функ ции системы МА TLAB автоматически реализуют трехмерную rрафику. Мноrие приемы построения и оформления трехмерных rpафиков совпа дают с теми, что используются при построении плоских rрафиков функ ций одной переменной. . f'рафик функции двух переменных в линейном масштабе в декартовой системе координат: рlоtЗ.  рlоtЗ (х, у, z)  rpафик с узлами (Xk, Yk, zk);  дополнительный строковый aprYMeHT задает: Э тип маркеров: ., +, *, о, х, s, d, v, л, <, >, р, h; Э стиль линии: , :, ., ; э цветлинии:у,m,с,r,g,Ь,w,k;  рlоtЗ (х1, у1, zl, х2, у2, z2, ...)  построение нескольких rpa фиков в одной системе координат;  справка:» help рlоtЗ. . f'рафик, заданный параметрически: еzрlоtЗ. . Поверхность, заданная параметрически: ezmesh, ezsurf. 
6.2. Трехмерная rpафика 117 . Поверхность: mesh, surf, surfl, cylinder, sphere; вспомоrа тельные функции: meshgrid, ndgrid. · Каркасные поверхности: mesh, meshc, meshz, peaks, surf, surfc, waterfall; вспомоrательные функции: hidden. . Формирование, построение и маркировка линий уровня: contour, соntоurЗ,соntоurс,соntоurf,сlаЬеl. . Трианrуляционная поверхность: trisurf, trimesh. · Диаrраммы и rистоrpаммы: ЬаrЗ, ЬаrЗh, histЗ, рiеЗ, stеmЗ. . Закрашенный мноrоуrольник в трехмерном пространстве: fillЗ. . f'рафик функции в указанном интервале: fplot, ezplot. . Анимированный rрафик трехмерной линии: соmеtЗ, еzрlоtЗ. . Визуализация функции трех переменных на различных плоскостях или поверхностях: slice, contourslice. . f'рафик поля направлений: quivеrЗ, streamline. · Закрашивание поверхности: shading, brighten, colormap, co lorbar. . Справка: help grарhЗd, help specgraph. 6.2.1. 3D rрафики функций и поверхностей Iпример 6. 2 з1 Построить винтовую линию, как показано на рис. 6.26. t = 0:pi/50:10*pi х = sin (t) ; У = cos (t) ; рlоtЗ(х, у, t); grid оп Рис. 6.26. Трехмерная линия, заданная параметрически 
118 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА Iпример 6. 241 Функция еzрlоtЗ (рис. 6.27). r1=@(t) exp(0.2*t) .*cos(t); r2=@(t) exp(0.2*t) .*sin(t); rЗ = @(t) t; еzрlоtЗ(r1,r2,rЗ, [0,20], 'animate') Рис. 6.27. Анимированный rpафик пространственной линии  функция еzрlоtЗ Iпример 6. 251 Следующий код строит полиrональную поверхность (рис. 6.28). х= [ о 1 о. О 1 О . О О О . О 1 О ] , . , , , , У = [ о о 1 . О О О . О 1 О . О О 1 ] , . , , , , z= [ О О о. О О 1. О О 1.1 О О ] , . , , , , rgb = [ о . 8 . 2] ; fillЗ(х,у,z,rgЬ) grid оп Рис. 6.28. Полиrональная поверхность  функция fillЗ 
6.2. Трехмерная rpафика 119 Iпример 6. 261 Построение 3Dповерхностей (рис. 6.29). [х, у] =meshgrid (2: .1: 2, ... 1: .1:1); z=х.*ехр(х.Л2у.Л2); mesh(x,y,z); » surf(x,y,z) Рис. 6.29. Построение 3Dповерхности  функции mesh, surf Iпример 6. 271 Построение освещенных поверхностей (рис. 6.30). [x,y,z]=peaks(100); surfl(x,y,z) shading interp colormap(gray(1000» ахis([З,З,З,З,8,10]) Рис. 6.30. Построение освещенной 3Dповерхности  функция surfl 
120 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА Iпример 6. 281 Построение линий уровня функции двух переменных (рис. 6.31). [x,y,z]=peaks(100); соntоurЗ(х,у,z,ЗО); Рис. 6.31. Построение линий уровня 3Dповерхности  функция соntоurЗ Iпример 6. 291 Трианrуляция в пространстве (рис. 6.32). х = rand(1,50); у = rand(1,50); z = реаks(6*хЗ,6*хЗ); tri = delaunay(x,y); trisurf(tri,x,y,z) Рис. 6.32. Трианrуляционная поверхность в 3Dпространстве  функция trisurf 
6.2. Трехмерная rpафика 121 Iпример 6. 301 Функция ezsurf. Построение параметрически заданной поверхно сти (рис. 6.33). ezsurf ( 'u*cos (v) , , ... 'u*sin (v) , , '2*v' , ... [ о , 8 *pi] ) ; axis equal colormap default colorbar shading flat Рис. 6.33. Параметрически заданная 3Dповерхность  функция ezsurf Iпример 6. 311 Функция ezmesh. Построение параметрически заданной поверхно сти (рис. 6.34). х=@ (theta, phi) (10+... 4*cos(theta» .*cos(phi); у=@ (theta, phi) (10+... 4*cos(theta» .*sin(phi); z=@(theta,phi) 4*sin(theta) ezmesh(x,y,z) axis equal Рис. 6.34. Параметрически заданная 3Dповерхность  функция ezmesh 
122 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА 6.3. Оформление rрафиков функций Построенные rрафики функций должны быть максимально удобны ми для восприятия, что достиrается при помощи их правильноrо оформ ления: цветом, толщиной и типом линий, которыми проведены сами rpa фики, маркерами в дискретных вычисляемых точках, а также различны ми надписями в пределах rрафическоrо окна и настройками осей систе мы координат rрафическоrо окна. 6.3.1. Управление видом rрафика Ниже приведены основные функции, предназначенные для YCTaHOB ки требуемоrо вида осей координат rрафическоrо окна: . axis ([xmin хmах ymin уmах zmin zmax]), axis ( [xmin хmах ymin уmах]): установка rpаниц осей координат; · axis оп, axis off: восстановление/отключение изображения осей и насечек; . axis ( I ij I ), axis ( I ху 1): матричная/декартова система коорди нат; · axis square, axis normal, axis equal, axis tight, axis auto, axis manual: режимы масштабирования осей; . daspect: изменение или получение масштаба осей; . pbaspect: установка или определение соотношения длин осей; . grid оп, grid off: восстановление/отключение изображения KO ординатной сетки; · Ьох оп, Ьох off: восстановление/отключение изображения систе мы координат в Ьохформате; . view ( [az, el] ), view ( [х, у, z] ), view (2), view (3) : установка или определение точки обзора (положения камеры); · camdolly, camlookat, camorbit, campan, campos, camproj, camroll, camtarget, саmир, camzoom: управление камерой. Iпример 6. 321 Выбор точки обзора view и управление камерой саm*. [х у z] = sphere; sl = surf(x,y,z); % Нижняя сфера 
6.3. Оформление rpафиков функций 123 hold оп s2 = surf(х+З,у,z+З); % Средняя сфера sЗ = surf(x,y,z+6); % Верхняя сфера daspect ([1 1 1]) title('view Ьу default') pause(2) title ( 'view (30,90) , ) viеw(ЗО, 50) % azimuth, elevation for i=0:З60 % полет камеры title(num2str(i*1, 'viеw(аzimuth=%ld,еlеvаtiоn=ЗО) '» view(i*l, 30) end title('camproj orthographic') camproj orthographic title('camproj perspective') camproj perspective % Навести камеру на НИЖНЮЮ сферу title('camera look at bottom') camlookat(sl) % Навести камеру на СРЕДНЮЮ сферу title('camera look at middle') camlookat(s2) % Навести камеру на ВЕРХНЮЮ сферу title('camera look at top') саmlооkаt(sЗ) % Навести камеру на ВСЮ сцену title('camera look at all scene') camlookat(gca) % views the objects identified in % the vector objecthandles % Стандартный вид сверху  2D (плоский) rрафик title('view(2)  2Dscene  view from top') view(2) % Стандартный 3Dвид titlе('viеw(З)  ЗDsсеnе') viеw(З) 
124 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА 6.3.2. Изменение свойств линии . Дополнительный строковый aprYMeHT функций plot, рlоtЗ задает цвет и стиль линии и тип маркеров:  тип маркеров: ., +, *, о, х, s, d, v, л, <, >, р, h;  стиль линии: , :, ., ;  цвет линии: у, m, с, r, g, Ь, w, k;  в строковом aprYMeHTe можно указывать один, два или три символа;  порядок, в котором указываются символы, не существенен. . Изменение толщины линии: изменение свойства 'LineWidth' rpa фическоrо объекта (дескрипторная rрафика). Iпример 6. зз1 Изобразить rрафик красной сплошной линией, на которой в дис кретных вычисляемых точках проставлены черные квадраты (рис. 6.35). х = 0:0.1:3; plot (х, х, 'r' , х, х, 'ks' ) Рис. 6.35. Изменение свойств rpафика Iпример 6. 341 Изменить толщину линии rрафика (рис. 6.36). х = 0:0.1:6; hl = plot(x, sin(x»; set(hl, 'LineWidth',6); Рис. 6.36. Изменение толщины линии 
6.3. Оформление rpафиков функций 125 6.3.3. Надписи на rрафиках Хорошее восприятие rрафиков во MHoroM обеспечивается дополни тельными элементами оформления: наличием координатной сетки, под писями к осям системы координат, заrоловком и леrендой: . clabel: подписи к линиям уровня на контурных rpафиках; . gtext: вывод текста в интерактивно определяемое место на rрафике (указать место мышкой и щелкнуть); . legend: идентификация rрафиков (леrенда); · ti tle: вывод заrоловка; . text: вывод текста в заданную позицию rрафика; · xlabel, ylabel, zlabel: маркировка осей; . colorbar: цветовая леrенда; . grid on/off: координатная сетка. Iпример 6. 351 Вывод и оформление rpафика (рис. 6.37). Текстовые строки Moryт содержать специальные символы, которые вводятся внутри текста после символа \ (<<обратная косая черта»). Обозначения для специальных символов совпадают с обозначениями в системе подrотовки научных текстов ТеХ. Рис. 6.37. Оформление rpафика подписями » X=linspace(0,2*pi); Y=[sin(X);cos(X)]; h1=plot(X,Y) '; set(h1(1), 'linewidth',5, 'linestyle', '') h2=title('Trigonometric Functions'); xlabel('Angle \alpha', 'fontsize',12); 
126 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА hЗ=lеgеnd(['sin \alpha'; 'cos \alpha'],l); sеt([h2,hЗ,gса], 'fontsize', 12); text(pi/4,sin(pi/4), 'sin\pi/4 = cos\pi/4'); axis tight, grid оп 6.4. Сохранение rрафических изображений Форматы rрафических файлов: . Перечень поддерживаемых форматов: imformats, fileformats. . Изображения:  поддерживаемые rрафические форматы чтения и записи: JPEG, TIFF,BМP,PNG,HDF,PCX,XWD;  только чтение (MATLAB 6): GIF, ICO, CUR;  команда чтения: imread, importdata;  команда записи: imwrite;  информация о файле: iminfo;  вывод изображения: image, colormap; дополнительно: getframe,frame2im,capture;  при экспорте в rpафический файл записывается только клиентская часть rpафическоrо окна без меню и панели инструментов;  сохранение клиентской части rрафическоrо окна в выбранном формате: пункт меню File I Save as... rрафическоrо окна;  команда сохранения изображения в буфере обмена в формате Bitmap:» print dbitmap;  команда сохранения изображения в файле указанноrо rрафическо ro формата:» print dformat filename. . Фильмы:  MATLABMovie: getframe, im2frame, movie;  А VIфайлы (MATLAB 6): movie2avi, aviinfo, avifile, aviread,addframe. Iпример 6. 361 Чтение rрафическоrо файла 180. gif. Функция imread считывает rрафическую информацию из файла. В массив ColorMap считывается 
6.5. Лабораторный практикум NQ 6 127 информация о цвете, которую также необходимо заrpужать при выводе изображения в rpафическое окно. » [Image,ColorMap] = imread('180.gif'); » image(Image) Вывод изображения командой image приводит к появлению изо бражения, как показано на рис. 6.38, а. Заrрузка цветовой палитры KO мандой colormap приводит к конечному варианту rрафическоrо изо бражения (рис 6.38, Ь). » colormap(ColorMap) а ь Рис. 638. Считывание и визуализация rpафическоrо файла 6.5. Лабораторный практикум Х!! 6 6.5.1. Теоретические вопросы 1. Высокоуровневая rpафика. 2. Двумерная rpафика. 3. Построение rрафиков функций в декартовых координатах. 4. Построение rрафиков функций в полярных координатах. 
128 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА 5. Построение rрафиков функций, заданных параметрически. 6. Анимированный двумерный rрафик. 7. Диаrраммы и rистоrраммы. 8. Оформление rрафиков функций: оси координат. 9. Оформление rрафиков функций: надписи на rрафике. 1 о. Изменение свойств линий. 11. Трехмерная rрафика. 12. Построение поверхностей. 13. Линии уровня. 14 . Управление камерой. 15. Сохранение rрафических изображений. 16. Форматы rрафических файлов. 6.5.2. Задания адание 6. 11 Построить rpафик функции в полярных координатах: а) ysin (2t) cos (2t) tЕ[0,2л:]; Ь) r  2 со s (phi ), л:/2::; phi ::; л:/2. адание 6. 21 Построить rрафик функции х (t) = etsin t на отрезке [2л:, 2л:]. Отобразить функцию х (t) на отрезке [l, 1] в виде столбчатой диа rраммы без промежутков. адание 6. з1 Представить результат случайных измерений трех величин за четы ре момента времени в виде матрицы случайных значений 3 х 4. Отобра зить результат: а) в виде столбчатой диаrраммы сrpуппированных дaH ных с перекрывающимися столбцами; б) в виде столбчатой диаrраммы с накоплением; в) в виде диаrpаммы с областями. адание 6. 41 в одной системе координат на отрезке [2л:, 2л:] построить rрафики функций f (х) == eO.lx sin 2 х и g(x) == eO.2x sin 2 х. 
6.6. Лабораторный практикум NQ 6 129 адание 6. 51 Построить rрафик функции: а) f(x)==esinO.lx, ХЕ[2л:,2л:]; с) f(х)==(1/з)ISiпх l 2, ХЕ[5л:, 5л:]; е) f(x)==5sin 2 х4соФI, I х I ::;5л:; Ь) f(x)==.J5 +зlсоsхl, ХЕ[2л:, 2л:]; d) f (х) == 4 coslxl, ХЕ [2л:, 2л:]; f) f(x)==sin2xJ3x, xE[lO, 10]. адание 6. 61 Решить rрафически уравнения: а) з х ==4x; d) 4 Х ==5x ; адание 6. 71 Построить rpафик показательной функции f(x) ==102x на отрезке [0.5, 5] в линейном, лоrарифмическом и полулоrарифмическом масшта бах в одном rpафическом окне в разных системах координат. Ь) (1/2 У == х + 3 ; е) зlх ==2x1; с) (1/3Y ==x+l; f)3Х==3/х. адание 6. 81 Построить rрафики изменения суточной температуры за 22 мая, 8 aBrYCTa и 11 сентября. Температура измерялась в течение трех суток каждый час. f'рафики должны быть изображены разным цветом с MapKe рами в узловых точках. Координатная сетка должна отображаться. f'pa фик должен быть снабжен всей необходимой информацией: подписями к осям координат «Время (час)>> и «Температура (С)>>, леrендой, заrолов ком «Суточные температуры». адание 6. 91 Построить rрафик функции sin (2*t) . *cos (2*t) в полярных координатах, tE [0,2л:]. адание 6. 101 Построить rpафик функции, заданной параметрически: а) х (t) o. 5sin (t), У (t) o. 8cos (t), tE[O, 2л:]; 
130 т е м а 6. ВЫСОКОУРОВНЕВАЯ rРАФИКА Ь) х (t)  sin (2t), У (t)  cos (3t), I t I ::;2л:; с) х (t)  (1+t 2 ) sin (20t), У (t)  (1t2) cos (20t), zt, tE[5, 5]; d) x(t)cos(3t) cos(t), y(t)cos(3t) sin(t), tЕ[0,2л:] (rрафик трохоиды). е) x(t) tsin(t), y(t)lcos(t), tЕ[0,4л:]; f) xcos(t), ysin(t), zt, tЕ[0,20л:] (винтовая линия); g) xelt501/50sin(t), yelt501/50cos(t), zt, tE [0,100]; Ь) x(u,v)0.3ucos(v), y(u,v)0.3usin(v), z(u,v)0.6u, u, v Е [2л:, 2л:] (конус); i) x(u,v)cos(u)cos(v), y(u,v)0.7cos(u)sin(v), z (u, v) o. 8sin (u), u, v Е [2л:, 2л:] (эллипсоид). адание 6. 111 Построить прозрачную каркасную поверхность фиrуры, заданной соотношениями: а) x(u,v)0.3 u cos (v), y(u,v)0.3 u sin(v), z (u, v) o. 6u, u, v Е [2л:, 2л:] (конус); Ь) х (u, v) cos (u) cos (v), у (u, v) o. 7cos (u) sin (v), z (u, v) o. 8sin (u), u, v Е [2л:, 2л:] (эллипсоид) на квадратной области определения. адание 6.121 Построить rрафик функции двух переменных на прямоуrольной об ласти определения: а) z(х,у)4siп(2л:х)соs(1.5л:у) (yl)y, xE[l,l],YE[O,l]; Ь) z(х,у)еу2соs(зл:х) (lx)xy, xE[1,1],YE[2,2]; с) z (х, у) x2+ y2, XE [3, 3], YE [3, 3]; d) z(x,y)==sin(  x2+y2 +0.01)/(  x2+y2 +0.01} XE[8, 8], YE[8, 8]; е) z sin(x) .*sin(y), ХЕ[О, 100],YE[0, 100]; f) z  s i n (х) s i n ( у) + . 3 с о s ( 2 х  3 у)  . 2 s i n ( х + 2 у) , х, у Е [О, 100]. 
6.6. Лабораторный практикум NQ 6 131 адание 6. 1 з1 Построить rрафики функций, заданных кусочным образом, в интер вале [3,3]: а) { х,х<о f(x)= х 2 ,0:::::х<2; 4,x2 Ь) 1 Цхl:::::1 f(x) = х 2 ,1 < Ixl < 2; 0,lxl2 с) { О,х<о [(х)= SiП[ Л:;Х }0:::::Х:::::1. 1,х >1 адание 6. 141 Построить rрафик баллистической траектории, заданной параметри чески: х (t) = v t cos (qJ), у (t) = v t sin (qJ)  g t 2 /2. Началь ная скорость v  1 О О км/ч, уrол вылета снаряда: ер  6 О о . адание 6. 151 Построить траекторию движения точки на плоскости или в про странстве в течение времени t: а) x(t)sin(t)/(t+1), y(t)cos(t)/(t+1), tE[O,lO]; Ь) х ( t )  е  I t  5 О I /50 S i n t, У ( t )  е  I t  5 О I /50 С О S t, z  t, t Е [О, 100]; с) х (t) eO.2t cost, у (t) eO.2t sint, zt, t Е [0,20]. адание 6. 161 Построить траекторию движения фиксированной точки на окружно сти, катящейся по прямой (циклоиду). Циклоида описывается парамет рическими зависимостями: х (t) = tsin ( t), У (t) =lcos (t), tE[0,20]. адание 6. 1 71 Создать два rрафических окна. Построить в одном окне rрафики функций f (х) =sin х, g (х) =0. 5sin х, в друrом окне  rрафик функции q (х) =ln х. Оформить rpафические окна: нанести заrоловки, леrенды, подписи к осям. Нанести координатную сетку на второй rpa фик. Арrументы изменяются в пределах [О, 1 О]. 
ТЕМА 7 ОСНОВЫ ДЕСКРИПТОРНОЙ rРАФИКИ Дескрипторная rрафика (Handle Graphics)  это объект но ориентированная rpафическая система, основанная на низкоуровне вых rpафических функциях. Объектами дескрипторной rрафики являют ся базовые rpафические элементы, используемые для визуализации дaH ных. Каждый rрафический объект пронумерован, ему присваивается уникальный идентификатор  дескриптор (handle), используя который можно управлять свойствами rрафических объектов при помощи COOT ветствующих функций. Дескрипторная rрафика позволяет также разра батывать приложения, оснащенные полноценным rрафическим интер фейсом пользователя с кнопками, пунктами меню, окнами редактирова ния, полосами прокрутки и друrими стандартными rрафическими ком  понентами, обычно присутствующими в интерфейсах приложений. 7.1. Описание rрафических объектов 7.1.1. Иерархия rрафических объектов . Древовидная иерархическая структура rрафических объектов. . Каждый тип объекта обладает своими собственными свойствами. . Каждому объекту ставится в соответствие уникальное число дескриптор (Handle). . Типы rрафических объектов (рис. 7.1):  root  вершина иерархии, соответствующая экрану компьютера (Handle О);  figure  окно для вывода rрафики и пользовательских интерфей сов (Handle  номер rpафическоrо окна, натуральное число);  axes  оси (система координат) в rрафическом окне;  uicontrol  управляющий элемент GUI;  uimenu  оконное меню пользователя; 
7.1. Описание rpафических объектов 133  uicontextmenu  контекстное меню пользователя, появляющее ся при щелчке правой кнопки мыши на объекте;  image  двумерное растровое изображение (2Dобъект);  light  источник освещения, воздействующий на rрафические объекты типа patch и surface (3Dобъект);  line  плоская или пространственная линия (3Dобъект);  patch  замкнутый закрашенный полиrон с ребрами (3Dобъект);  rectangle  двумерная фиrура, изменяющаяся от прямоуrольни ка до эллипса (2Dобъект);  surface  трехмерная поверхность (3Dобъект);  text  символьная строка (3Dобъект). Экран компьютера (О) f'рафическое окно (1, 2,...) I шепп I  I  Surface I  Line Rectangle Рис. 7.1. Иерархия rpафических объектов МА TLAB 7.1.2. Дескрипторы rрафических объектов . При помощи дескриптора Handle можно изменять свойства rрафи ческоrо объекта; . gcf: дескриптор активноrо rpафическоrо окна Figure; . gca: дескриптор активной системы координат Axes; 
134 Т е м а 7. ДЕСКРИПТОРНАЯ rРАФИКА . allchild (Н) : дескрипторы всех rpафических объектов, подчинен ных объекту с дескриптором Н; . get: показать свойства объекта:  get (Н): вывод списка текущих значений свойств rрафическоrо объекта с дескриптором Н;  get (Н, 'PropertyName' ): вывод текущеrо значения указанно ro свойства объекта; . set: установить свойства объекта или показать возможные значения отдельноrо свойства:  set (Н) : вывод списка возможных значений всех свойств объекта;  set (Н, 'PropertyName' ): вывод списка возможных значений указанноrо свойства объекта;  set (Н, 'PropertyName' , 'PropetyValue' ): установка HO Boro значения указанноrо свойства объекта; . set (gcf) : вывод списка возможных значений всех свойств текуще ro rpафическоrо окна Figure; . set (gca) : вывод списка возможных значений всех свойств текущей системы координат Axes; . propedit (Н): вызов Редактора Свойств Property Editor для редактирования свойств rрафическоrо объекта с дескриптором Н; . reset (Н) : восстановление стандартных значений свойств по умол чанию rрафическоrо объекта с дескриптором Н; . почти все rрафические функции возвращают дескрипторы созданных ими rрафических объектов; . get (findobj, 'type' ): вывод списка типов всех созданных rpa фических объектов; · delete (findobj ( , Color' , 'k' ) ) : поиск и удаление всех объек тов KpacHoro цвета; · delete (findobj ( 'type' , 'Line' ) ) : удаление всех rрафических объектов типа «линии». Iпример 7. 11 Функция get: вывод списка текущих значений свойств rрафическо ro объекта. 
7.1. Описание rpафических объектов 135 » t = 0:pi/20:2*pi; »h=plot(t,sin(t» % rрафический объект line h  152.0089 » get(h) Color: EraseMode: LineStyle: LineWidth: Marker: MarkerSize: 6 MarkerEdgeColor: MarkerFaceColor: XData: YData: ZData: BeingDeleted: ButtonDownFcn: Children: Clipping: CreateFcn: DeleteFcn: BusyAction: HandleVisibility: HitTest: Interruptible: Selected: SelectionHighlight: Tag: Туре: UIContextMenu: UserData: Visible: Parent: DisplayName: XDataMode: XDataSource: YDataSource: ZDataSource: [1 О О] 'normal' 0.5000 'попе' 'auto' 'попе' [lх41 doubleJ [lх41 doubleJ [lхО double J 'off' [ J [Ох1 double J 'оп' [ J [ J 'queue' 'оп' 'оп' 'оп' 'off' 'оп' , , 'line' [ J [ J 'оп' 151.0048 , , 'manual' , , , , , , 
136 Т е м а 7. ДЕСКРИПТОРНАЯ rРАФИКА Iпример 7. 21 f'рафические объекты и их свойства. Функция set: установка новых значений свойств rрафических объектов (рис. 7.2). » Х=linsрасе(рi/2,З*рi); » Y=[sin(X);cos(X)]; » h1=plot(X,Y) , h1 152.0114 153.0054 » set(h1(1), 'linewidth',5, 'linestyle', '') » set(h1(2), 'linewidth',2) » h2=title('Trigonometric Functions'); » xlabel('Angle \alpha', 'fontsize',12); » hЗ=lеgеnd(['sin \alpha'; 'cos \alpha'],l); » sеt([h2,hЗ,gса], 'fontsize',12); tехt(З*рi/4,sin(З*рi/4),.. . ['sin(З*рi/4) = ',num2str(sin(З*рi/4»],... 'HorizontalAlignment', 'center',... 'BackgroundColor', [.7 .9 .7]); text(pi/2,cos(pi/2),.. . '\leftarrowcos(\pi) = О',... 'HorizontalAlignment', 'left',... 'EdgeColor', 'red'); » axis tight Рис. 7.2. Изменение свойств rpафических объектов 
7.1. Описание rpафических объектов 137 7.1.3. Свойства rрафических объектов figure и axes . figure: открыть rрафическое окно figure (команда); . gcf: получить дескриптор текущеrо объекта figure; . clf: очистить rрафическое окно figure; · close: закрыть rpафическое окно figure; . refresh: обновить rpафическое окно figure; · axes: создать оси координат Axes (команда); . gca: получить дескриптор rрафическоrо объекта Axes; · cla: очистить оси координат Axes. 7.1.4. Свойства по умолчанию rрафических объектов . Возможно изменение значения свойств, установленных по умолча нию, на уровне родительских объектов; · set (О, 'DefaultObjectProperty' , PropertyValue): измене ние заданноrо по умолчанию свойства объекта на уровне родитель cKoro объекта Root (все вновь создаваемые объекты выбранноrо типа будут иметь новое значение по умолчанию указанноrо свойства); · set (gcf, 'DefaultObjectProperty' , PropertyValue): из менение заданноrо по умолчанию свойства объекта на уровне роди тельскоrо объекта Figure (для всех вновь создаваемых в текущем rрафическом окне Figure объектов выбранноrо типа); · set (gca, 'DefaultObjectProperty' , PropertyValue): из менение заданноrо по умолчанию свойства объекта на уровне роди тельскоrо объекта Axes (для всех вновь создаваемых в текущей сис теме координат Axes объектов выбранноrо типа); · get (О, 'default'): возвращает все измененные значения свойств по умолчанию; · get (gcf, 'default' ): возвращает все измененные значения свойств по умолчанию для текущеrо rрафическоrо окна; · get (gca, 'default' ): возвращает все измененные значения свойств по умолчанию для текущей системы координат; · set (О, 'DefaultObjectProperty' , 'remove' ): восстанавли вает значение свойства по умолчанию на уровне объекта Root; 
138 Т е м а 7. ДЕСКРИПТОРНАЯ rРАФИКА · set (gcf, 'DefaultObjectProperty' , 'remove' ): BOCCTaHaB ливает системное значение свойства по умолчанию на уровне текуще ro rpафическоrо окна; · set (gca, 'DefaultObjectProperty' , 'remove' ): BOCCTaHaB ливает системное значение свойства по умолчанию на уровне текущей системы координат. Iпример 7. з1 у становить новое значение по умолчанию, равное 2.5, для свойства «толщина линии» LineWidth rpафическоrо объекта Line на уровне текущеrо rpафическоrо окна. » set(gcf, 'DefaultLineLineWidth',2.5) Iпример 7. 41 у становить новое значение по умолчанию, равное белому, для свой ства «цвет» Color rpафическоrо окна Figure. » set(O, 'DefaultFigureColor', 'Ь') Обратите внимание, что изменять значения свойств по умолчанию для rрафическоrо окна F igure можно только на корневом уровне Root! Iпример 7. 51 При прорисовке в одной системе координат нескольких линий при помощи функции plot или рlоtЗ по умолчанию используются: один стиль линий  сплошная линия, и циклическое чередование цветов. Сле дующий пример (МА TLAB HELP) изменяет значения по умолчанию Ta ким образом, чтобы использовался для всех линий только один цвет (свойство ColorOrder) и циклическое чередование стилей (свойство LineSt у leOrder). %create а figure with а white color scheme » whitebg( 'w') %set default property values that cause the plot %function to produce graphs using varying %linestyles, but not varying colors » set(O, 'DefaultAxesColorOrder', [0.5 0.5 0.8],... 
7.1. Описание rpафических объектов 139 'DefaultAxesLineStyleOrder', 'II: I. ') Теперь всякий раз при вызове команды » Z = peaks; plot(1:49,Z(1:7, :» используется одинаковый цвет [0.5 0.2 0.8] линий и циклически изменя ется стиль линий (рис. 7.3). Рис. 7.3. Циклическое чередование стилей линий Iпример 7. 61 Следующие команды назначают значения red, green и bl ие свойству по умолчанию ColorOrder и значения solid, dashed и dotted lines свойству по умолчанию LineStyleOrder. » set(O, 'DefaultAxesColorOrder', [1 О 0;0 1 о; ,... о о 1], 'DefaultAxesLineStyleOrder', 'II: ') Теперь при прорисовке нескольких линий МА TLAB выполняет циклическую выборку всех цветов последовательно для каждоrо стиля линии (рис. 7.4): » t = 0:pi/20:2*pi; а = ones(length(t),9); for i = 1: 9 а ( : , i) = sin (ti/ 5) , ; end h=plot(t,a) set(h, 'LineWidth',2) 
140 Т е м а 7. ДЕСКРИПТОРНАЯ rРАФИКА Рис. 7.4. Циклическое чередование цветов и циклическое чередование стилей линий Iпример 7. 71 Следующие команды отображают поверхность при помощи rрафическоrо последовательно изменяют ее вид. реrулярную объекта трехмерную Surface и » title('SURFACE  regular surface') t= 0:pi/10:2*pi; [X,Y,Z]= суlindеr(.7+.З*соs(t»; Z= Z0.5; h= surface(X,Y,Z); viеw(З) axis square % Свойства объекта SURFACE set( h, 'FaceColor', 'с', 'EdgeColor', 'Ь', 'LinеWidth',З, 'Marker', 'о', 'MarkerSize',10, 'MarkerFaceColor' ' у ' 'MarkerEd g eColor' 'm' ) . , , , , % Раскраска ребер set ( h, 'FaceColor',' попе', 'Marker',' попе' ) ; set( h, 'EdgeColor', 'flat'); title('FaceColor = попе; EdgeColor = flat') set(h, 'EdgeColor', 'interp'); title('FaceColor = попе; EdgeColor = interp') % Раскраска rраней 
7.1. Описание rpафических объектов 141 set (h, 'FaceColor' , 'с', 'EdgeColor',' попе' ) ; set ( h 'FaceColor' 'flat' ) . , " title('FaceColor = flat; EdgeColor = попе; ') set(h, 'FaceColor', 'interp'); title('FaceColor = interp; EdgeColor = попе') % Раскраска ребер set ( h 'Ed g eColor' 'k' 'LineWidth' О 5 ) . , " , . , title('FaceColor = interp; EdgeColor = black') Введите последовательно команды и изучите их действие. Iпример 7. 81 f'рафический объект patch задается координатами своих вершин и данными цветовой палитры. Существует два способа определения rpa фическоrо объекта patch: . определение координат всех вершин каждоrо полиrона, которые МА TLAB соединяет в поверхность; . определение координат всех уникальных вершин и матрицы, которая указывает, как соединить эти вершины для создания поверхности. Второй способ предпочтителен в тех случаях, коrда описание объ екта содержит MHoro вершин. Любая вершина, совместно используемая при создании нескольких мноrоуrольников, встречается в описании только один раз. Следующий фраrмент кода строит куб, каждая rрань KOToporo pac крашена в свой цвет: » vm=[O О 1 О 1; 1 fm=[l 2 6 clf; viеw(З) ; axis square patch ( 'Vertices ' , vm, 'Faces' , fm, . . . 'FaceVertexCData',hsv(6), 'FaceColor', о; 1 О о; 1 1 о; 1 1; 011]; 5;2 3 7 6;3 4 о 1 о; о о 1; 8 7; 415 8; 1:4; 5:8]; 'flat'); Правильный 10уrольник желтоrо цвета можно построить, вызвав следующие команды: » clf 
142 Тема7. ДЕСКРИПТОРНАЯ rРАФИКА t = 0:pi/5:2*pi; patch (sin (t), cos (t), 'у') axis equal 7.2. Лабораторный практикум Х!! 7 7.2.1. Теоретические вопросы 1. Дескрипторная rрафика. 2. Взаимосвязь между высокоуровневой и дескрипторной rрафи кой. 3. Дескриптор rрафическоrо объекта. 4. Иерархия rpафических объектов. 5. f'рафический объект root. 6. f'рафический объект figure. 7. f'рафический объект axes. 8. Объекты uimenu, uicontextmenu, uicontrol. 9. f'рафический объект image. 10. f'рафический объект light. 11. f'рафический объект line. 12. f'рафический объект patch. 13. f'рафический объект rectangle. 14. f'рафический объект surface. 15. f'рафический объект text. 16. Управление свойствами rрафических объектов. 17. Свойства по умолчанию. 7.2.2. Зад ания адание 7. 11 Изучите свойства rрафических объектов и приведите примеры их использования. адание 7. 21 f'рафический объект Rectangle представляет двумерную закра шенную область, которая может принимать определенную форму от прямоуrольника до эллипса: 
7.2. Лабораторный практикум NQ7 143 » clf; set (gca, 'Visible', 'off'); rectangle( 'Position', [.9 .4 1.8.8], 'Curvature', [1 1], 'FaceColor', [1 .7 .7]); rectangle( 'Position', [.8 .з 1.6.6], 'Curvature', [.5 .5], 'FaceColor', [. 7 1 .7]); rectangle( 'Position', [. 7 .2 1.4 .4], 'Curvature', [О О], 'FaceColor', [.7 .7 1]); Получите дескриптор rрафическоrо объекта Rectangle, выведите текущие и возможные значения ero свойств. Постройте различные пря моуrольники, изменяя значения их свойств. адание 7. з1 Создайте два rpафических окна F igure и циклически выведите rрафики f k (х) =k sin (х) и gk (х) =k cos (х), kl, ...6, ХЕ[3л:, 3л:] поочередно в одно из окон. адание 7. 41 Следующий код использует функцию line для добавления тени к нарисованному rpафику функции sin. Сначала при помощи функции plot рисуется линия, и ее дескриптор сохраняется в hline1. Затем добавляется более широкая и более светлая тень смещением по коорди нате х. Наконец, первая линия помещается поверх второй. » 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]) Добавьте еще две более широкие и более светлые линии. Затем из мените цвет самой тонкой линии на синий, стиль  на пунктирный, а ее толщину установите равной 2 points (1 point = 1/72 inch). Изменения выполните, используя дескриптор rрафическоrо объекта. адание 7. 51 Введите команды, рисующие двадцать линий разных цветов сплошной линией толщиной 0.5 (свойства по умолчанию). 
144 Т е м а 7. ДЕСКРИПТОРНАЯ rРАФИКА » t = 0:pi/20:2*pi; а = ones(length(t),9); for i = 1:20 a(:,i) = sin(ti/5) '; end plot(t,a) Затем найдите все линии KpacHoro цвета и удалите их. После этоrо найдите все линии синеrо цвета и измените их толщину на 2. Найдите все линии какоrолибо третьеrо цвета и измените их стиль на штрих пунктирный. адание 7.61 Напишите Sсriрtфайл compensline .m: % input some pointsusing the mouse disp('Input points. Press the Return key to termi nate the input. ') delete (gca) ; axes ( , xLim' , [О 1 О], , yLim' , [О 1 О] ) ; axis square grid оп [X,Y]=ginput; % calculate а straight line K=[X(:),ones(length(X),l)]\Y(:); m=К(l), с=К(2) % visualize the straight line plot (Х, У, 'ro' ) hold оп C=sprintf (' %dl ',1: size (Х, 1»; С (end) = []; text ( X У С 'Color' 'Ь' 'FontWei g ht' 'bold' ) . ", " " plotx=[min(X),max(X)]; plot(plotx, m*plotx+c); title(sprintf('y=%gx+%g',m,c» Ш Какие действия выполняет этот код? Подтвердите свою rипотезу BЫ числениями и rpафическим изображением. 
ТЕМА 8 ИМПОРТ И ЭКСПОРТ ДАННЫХ 8.1. Чтение/запись файлов разных форматов · Протоколфайл: diary. . Операции над именем файлов: fileparts, filesep, fullfile, tempdir,tempname. . Перемещение данных между файлами и рабочим пространством WorkSpace:importdata,load,save,open,winopen. . Низкоуровневый файловый ввод/вывод (LowLevel File 1/0): fopen, fclose,fwrite,fprintf,fread,fscanf. . Форматированный или с разделителями ввод/вывод в текстовый файл: csvread, csvwrite, dlmread, dlmwrite, textread, textscan. . Документы XML: xmlread, xmlwrite, xslt. . Электронные таблицы (Excel и Lotus 123 файлы): xlsfinfo, xlsread,xlswrite,wk1finfo,wk1read,wk1write. . Научные данные CDF, FITS, HDF форматов: cdfinfo, cdfepoch, cdfread, cdfwrite, fitsinfo, fitsread, hdf, hdfinfo, hdfread,hdf5write. · Аудио, видеофайлы: audioplayer, audiorecorder, Ьеер, lin2mu,mu21in, sound, soundsc, auread, auwrite,wavplay, wavread, wavrecorder, wavwrite, addframe, avifile, aviinfo,aviread,movie2avi. . f'рафические файлы: im2java, imfinfo, imread, imwrite. . Справка: help iofun. 
146 Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ 8.2. Протокол файл . Вся информация, вводимая и выводимая в командное окно Command Window, может быть сохранена в текстовом файле. . Имя протоколфайла: diary <' ProtokolFileName' >. · Имя по умолчанию: diary. . Старт режима протоколирования: diary оп. . Окончание режима протоколирования: diary off. . Изменение статуса режима протоколирования: diary. . Справка: help diary. 8.3. Сохранение данных рабочеrо пространства . Специальный формат МАТ файла, позволяющий сохранять данные из рабочеrо пространства Workspace в файлах на диске и считывать из файла в рабочее пространство. . Сохранение данных из рабочеrо пространства Workspace в файле: save <FileName> <VariablesList>:  файл получает расширение . mat;  save сохраняет значения всех переменных рабочеrо пространства в МАТфайл МATLAВ. mat;  save file сохраняет значения всех переменных рабочеrо про странства в файл file. Если у файла file не указано расшире ние, то данные запишутся в двоичный файл file .mat;  save file Х У z... сохраняет указанные переменные. . load  заrрузка данных из файла в рабочее пространство:  load заrружает все переменные из МАТфайла МATLAВ .mat;  load file Х У Z заrружает указанные переменные;  load file заrружает все переменные из файла file. Если у file нет расширения, то функция ищет файл с именем file или file. mat и рассматривает ero как двоичный МАТфайл;  load ascii file или load mat file заставляет функ цию рассматривать файл или как ASCII файл, или как МА Т файл независимо от расширения; 
8.3. Сохранение данных рабочеrо пространства 147  s = load ( . . .) возвращает содержимое МАТфайла в перемен ной s. Если файл является МАТ файлом, то S  структура, co держащая поляпеременные. Если файл содержит ASCII данные, то S  массив двойной точности. . importdata  заrpузка данных из файла в рабочее пространство Workspace: importdata ( , file') заrружает данные из файла file в pa бочее пространство; A = importdata ( , file ') заrружает данные из файла file в переменную А; A = importdata (' file' , 'delimiter') заrружает данные из файла file, используя delimi ter как разделитель столбцов (в случае TeKcToBoro файла). Iпример 8. 11 Сохранить в файле mydat. mat все переменные, имя которых Ha чинается на аЬс: » save mydat.mat аЬс* Iпример 8. 21 Вызывать команды load и save можно так же, как и функции. » save ( 'mydat . mat " , а " 'Ь', , с ' ) Iпример 8. з1 »A=magic(4); В=еуе(5); » save Saving to: MATLAB.mat » clear » load МATLAВ А » who Your variables are: А 
148 Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ 8.4. Низкоуровневый файловый BBOДBЫBOД . Открыть файл и получить указатель файла (file identifier)  функция fopen. . Выполнить операции с данными файла:  чтение, запись бинарных данных  функции fread, fwrite;  чтение текстовых строк из файла  функции fgets/fgetl;  чтение форматированных ASCII данных  функция fscanf;  запись форматированных ASCII данных  функция fprintf. . Закрыть файл  функция fclose. 8.4.1. Работа с именем файла . fileparts  выделение составляющих пути доступа (входной apry мент  текстовая строка полноrо пути доступа к файлу; выходные ap rументы  составляющие пути доступа: путь, имя файла, расширение, версия); . fullfile  формирование полноrо имени файла из имен каталоrов и имени файла; . filesep  получение символа разделителя имен каталоrов при формировании полноrо пути к файлу (в зависимости от платформы); . tempdir  получение полноrо имени системноrо BpeMeHHoro KaTa лоrа, если он существует (не создавая ero); . tempname  получение уникальноrо имени BpeMeHHoro файла  воз вращает текстовую строку, подходящую для использования в качест ве имени BpeMeHHoro файла (уникальность не rарантируется, но пред полаrается). Iпример 8. 41 » file = '\C:\temp\МATLAВ\myfile.txt'; » [pathstr, name, ext, versn] = fileparts(file) pathstr  \C:\temp\MATLAB name  myfile ext .txt ver sn  " » str = fullfile('C: " 'temp', 'МATLAВ', 'myfun.m') str  C:\temp\МATLAB\myfun.m 
8.4. Низкоуровневый файловый BBOДBЫBOД 149 8.4.2. Работа с бинарными и текстовыми файлами . fopen  открытие файла и получение информации о файлах (BЫXOД ной параметр  файловый идентификатор, который используют все остальные функции низкоуровневоrо файловоrо BBoдaBЫBoдa):  fid = fopen (filename) открывает файл filename для чтения и возвращает файловый идентификатор fid; [fid, message] = fopen (filename, permission) OT крывает файл filename в режиме, указанном в разрешении per mission. В message содержится сообщение о системной ошиб ке, если файл не открыт. . Режимы разрешения permission: , r ' : открыть файл для чтения (по умолчанию); , w ' : открыть файл или создать новый файл для записи, уничтожая старые данные; , а ': открыть файл или создать новый файл для записи, добавляя данные в конец файла; , r+ ' : открыть файл для чтения и записи; , w+ ' : открыть файл или создать новый файл для чтения и записи, уничтожая старые данные; , а + ' : открыть файл или создать новый файл для чтения и записи, добавляя данные в конец файла; , t ' : открыть текстовый файл; , Ь ' : открыть бинарный файл. . fclose  закрытие файлов:  status = fclose (fid) закрывает указанный файл, если он открыт, возвращая О в случае успеха и l в противном случае; status = fclose ( , all ') закрывает все открытые файлы, кроме файлов с идентификатором О, 1 или 2. . ftell  получение текущей позиции в файле. Вызывается: position = ftell (fid) возвращает текущую позицию. . fseek  переустановка текущей позиции в файле. Вызывается: status = fseek (fid, offset, origin) перемещает TeKY щую позицию в файле на offset байтов относительно origin. Допустимые значения aprYMeHTa origin: 
150 Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ  'bof' или  1: от начала файла;  'cof' или о: от текущей позиции в файле;  'eof' или 1: от конца файла. Допустимые значения aprYMeHTa offset:  offset > О  передвижение к концу файла;  offset = О  текущая позиция не изменяется;  offset < О  передвижение к началу файла. . feof  проверка достижения конца файла. Вызывается: eofstat = feof (fid) возвращает 1, если указатель указывает на конец файла, и О в друrих случаях. . frewind  переход на начало файла. frewind (fid) устанавливает текущую позицию файла с иденти фикатором f i d на начало файла. . fread  чтение двоичных данных из файла. [А, count] = fread (fid, size, precision, skip) читает двоичные данные из указанноrо файла в матрицу А. Параметр size определяет количество данных. Если размер не указан, fread читает до конца файла. Параметр precision  это строка, указывающая формат данных ('unsigned', 'char', 'int8', 'double' и т. д.). Па раметр skip указывает число байт, которые будут пропущены каж дый раз после прочтения указанноrо числа данных. . fwr i te  запись двоичных данных в файл. count = fwrite (fid, А, precision) записывает элементы матрицы А по столбцам в файл. Параметр precision такой же, как и функции fread. Выходной aprYMeHT возвращает количество запи санных элементов. . Возможные значения параметра size функции fread:  n: чтение n элементов в векторстолбец;  [m, n]: чтение данных в m строк и n столбцов, при этом запол нение происходит по столбцам. Недостающие элементы заполня ются нулями; n может быть определено как inf, а m  нет;  inf: чтение до конца файла в векторстолбец, содержащий число элементов, равное количеству элементов в файле;  [m, inf]: чтение до конца файла с заполнением m строк по столбцам. Недостающие элементы заполняются нулями. 
8.4. Низкоуровневый файловый BBOДBЫBOД 151 . Функции для чтения и записи информации в текстовый файл:  А = fgetl (fid)  чтение следующей строки TeKcToBoro фай ла, включая символ перевода строки;  А = fgets (fid)  чтение следующей строки TeKcToBoro файла без символа перевода строки; [А, count] = fscanf (fid, format, size)  чтение данных из TeKcToBoro файла, записанных в определенном формате;  count = fprintf (fid, format, А, ...)  форматный вывод в текстовый файл. Если идентификатор файла равен 1 или отсутствует, то вывод идет на экран; А = sscanf (s, format, size)  чтение форматированных данных из строки (а не из TeKcToBoro файла); [s, errmsg] = sprintf (format, А, . . .)  запись формати рованных данных в строку (не в текстовый файл). . Форматные спецификации для чтения и записи текстовых данных: %<+,,O><Number>.<Number>ConversionCharacter. . %: признак начала форматной спецификации. . Значения управляющеrо символа формата данных:  : выравнивание по левому краю;  +: обязательное написание знака числа (+ или );  о: заполнение недостающих значений поля нулями. . Значения управляющеrо символа форматной спецификации:  %с: одиночный символ;  %d: десятичное представление (знаковое);  %f: представление с фиксированной точкой (вещественное);  %е %Е: экспоненциальное представление;  %g %G: более компактное представление %f или %е;  %i: десятичное представление (знаковое);  %0: восьмеричное представление (беззнаковое );  % s: строка символов;  %и: десятичное представление (беззнаковое );  %х %Х: шестнадцатеричное представление. 
152 Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ Iпример 8. 51 Следующий пример открывает файл test1. dat и записывает в He ro 101 раз число типа double и закрывает файл. Затем открывает этот же файл, читает каждое второе число в массив В, переустанавливает Te кущую позицию в начало файла, читает каждое третье число в массив С и закрывает файл. » А=[0:0.01:10]; fid = fopen('test1.dat', 'w'); fwrite(fid, А, 'double'); fclose(fid); fid = fopen('test1.dat', 'r'); [В, count] = fread(fid, inf, 'double',8); frewind (fid) ; [С, count] = fread(fid, inf, 'double',16); fclose(fid); Iпример 8. 61 » х = 0:.1:1; у = [х; ехр(х)]; fid = fopen('exp.txt', 'w'); fprintf(fid, '%6.2f %12.8f\n',y); fclose(fid) Iпример 8. 71 » А=l: 10; » fprintf('Elements of А: '); fprintf(' %d',A); » fprintf('\n'); Elements of А: 1 2 3 4 5 6 7 8 9 10 8.5. Работа с rрафическими файлами · image: отображение rрафическоrо изображения; . imread: чтение rрафических данных из файла в массив; . imwrite: запись rpафических данных из матрицы в файл; 
8.6. Лабораторный практикум NQ 8 153 . imfinfo: получение информации о rрафическом файле и содержа щемся в нем изображении. Iпример 8. 81 FileName = 'signal.bmp'; [Image, ColorMap]= imread(FileName); % Визуализация изображения clf; image (Image) ; colormap(ColorMap) 8.6. Лабораторный практикум Х!! 8 8.6.1. Теоретические вопросы 1. Импорт и экспорт данных. 2. Типы форматов файлов данных, поддерживаемые MATLAB. 3. Работа с именем файла. 4. Перемещение данных рабочеrо пространства. 5. Низкоуровневый файловый ввод/вывод. 6. Ввод/вывод бинарных файлов. 7. Ввод/вывод текстовых файлов. 8. Форматная спецификация текстовых данных. 8.6.2. Зад ания адание 8. 11 у далите из рабочеrо пространства WorkSpace все переменные » clear Теперь введите команды » а = 5; » Ь = [1 2 3; 456]; » с = mаgiс(З); Сохраните созданные переменные и их значения в файл МATLAВ . mat » save 
154 Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ Вновь очистите рабочее пространство и введите команду » s = load [] Что получится в результате? адание 8. 21 Постройте rрафики функций Y=sin (Х) и Z=cos (Х) с шаrом О . 1 на отрезке [3; 3] в одной системе координат. Затем сохраните rрафиче ское изображение в rрафический файл graph. jpeg. Сохраните масси вы Х, У, и Z в файл graph. mat, в бинарный файл graph. dat и TeKCTO вый файл graph. txt. После этоrо очистите рабочее пространство WorkSpace и очистите rрафическое окно Figure1. Прочитайте данные из файла graph. mat и постройте изображение. Прочитайте данные из TeKcToBoro файла graph. txt в массив DATA и постройте изображение в новом rрафическом окне. Наконец, из бинарноrо файла graph. dat BЫ берите данные, хранящие значения Х и cos (Х), и постройте rрафик в том же rрафическом окне в друrой системе координат. адание 8. з1 Создайте в любом текстовом редакторе текстовый файл Weath er. txt. Для каждоrо из четырех rородов: Минск, Мельбурн, Берлин, Токио введите в Hero следующую информацию: 1 я строка содержит Ha звание rорода, 2я строка содержит среднемесячную температуру в тече ние rода (двенадцать значений формата 17.56), третья строка содержит среднемесячное давление в течение rода (двенадцать значений формата 767). В MATLAB создайте структуру weather подходящеrо формата и заrрузите в нее данные из файла Weather. txt. В одном rрафическом окне в разных системах координат, расположенных одна под одной, по стройте: в первой системе координат  rрафики температур, в друrой  диаrраммы давлений. Снабдите rрафики всей необходимой информацией (заrоловок, подписи к осям координат, леrенды). адание 8. 41 Для предыдущеrо задания создайте в МА TLAB структуру we а t h  er подходящеrо формата и заполните ее необходимыми данными. После этоrо сохраните содержимое структуры weather в текстовом файле Weather. txt. 
8.6. Лабораторный практикум NQ 8 155 адание 8. 51 Построить rрафики изменения суточной температуры за 22 мая, 8 aBrYCTa и 11 сентября. Температура измерялась в течение трех суток каждый час. Даты и значения температур представить в виде массива структур. f'рафики должны быть изображены разным цветом с MapKepa ми в узловых точках. Координатная сетка должна отображаться. f'рафик должен быть снабжен всей необходимой информацией: подписями к осям координат «Время (час)>> и «Температура (С)>>, леrендой, заrолов ком «Суточные температуры». После этоrо сохраните информацию в текстовый файл Temperature. txt в три столбца. Первая строка co держит даты измерения температур, остальные строки  результаты из мерения, выровненные по правому краю с двумя знаками после запятой. адание 8. 61 По отсканированным в интерактивном режиме трехмерным точкам построить мноrоrранник (рис. 8.1). Рис. 8.1. Вывод номеров вершин и 3Dповерхности Для этоrо написать функцию, имеющую следующую структуру: function КМLО8( act, filename ) % КМLО8  Input/Output % КМL08('Роints', 'File')  enter ЗDроints 
156 Т е м а 8. ИМПОРТ И ЭКСПОРТ ДАННЫХ % % % % % 1. % % % % % 2. % % % and save into the 'File' КМL08('Раtсh', 'File')  plot Pnt/Fct files surface from о. Диспетчер Оцифровка ЗDточек на rрафике 1.1 Подrотовка осей к вводу точек 1.2 Вывод на ЗDrрафик номеров введенных в отсканированные позиции 1.3. Сохранение точек в файл File.pnt Инициализация осей для вывода rрафика 2.1. Чтение файла координат точек File.pnt 2.2. Чтение файла описания rраней File.fct 2.3. Построение поверхности точек Указания по заданию: 1. Сканирование точек выполните при помощи функции ginput. Для указания координаты Z (высоты) точки надо нажимать цифровую клавишу '0''9'. При этом координаты Х, У указываются перекрести ем мыши непосредственно в осях. 2. Для вывода на 3Drрафик номеров введенных точек в отсканиро ванные позиции изучите следующий код: х=[12 3] '; у=[l 8 4] '; z=[5 9 7] '; c=sprintf('%dl ',l:size(x,l»; c(end)=[]; clf; рlоtЗ(х,у,z, 'о'); hold оп text(x,y,z,c, 'Color', 'Ь', 'FontWeight', 'bold'); grid оп; viеw(З); 3. Отсканированные координаты сохраните в текстовый файл File. pnt. В файле File. pnt указываются координаты Х, У, Z вершин. Одна строка файла  одна вершина 3Dповерхности. 4. В файле File. fct описываются rpани поверхности: 1 я строка: количество вершин на rрани; 2я строка: номера вершин 1 й rрани; ... ; Nя строка: номера вершин (Nl)й rрани. 5. Файлы File. pnt и File. fct записываются в текущий каталоr. 6. Для построения 3Dповерхности примените функцию patch. 
ТЕМА 9 rp АФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ Под rрафическим интерфейсом пользователя (Graphical User Interface  GUI) подразумевается тип экранноrо представления, при котором пользователь может выбирать команды, запускать задачи, вводить и просматривать исходные данные, обрабатывать полученные результаты, используя элементы управления, представленные на экране. f'рафический интерфейс пользователя приложения, созданноrо в среде MATLAB, представляет собой одно или несколько rрафических окон Figures, содержащих элементы управления (кнопки, окна peдaK тирования, списки, переключатели, полосы прокрутки, контейнеры, Me ню, контекстные меню), а также оси координат для вывода информации в rрафическом виде. Разработка приложения, оснащенноrо GUI, предпо лаrает выполнение следующих действий: создание rpафическоrо окна, выбор и расположение необходимых элементов управления в пределах rрафическоrо окна, определение внешнеrо вида элементов интерфейса, а также определение действий, которые будут выполняться при наступле нии какоrолибо события, связанноrо с элементом интерфейса, например при нажатии пользователем кнопки. 9.1. Интерактивный интерфейс . input: интерактивный ввод с клавиатуры. . ginput: rрафический интерактивный ввод координат точек на rpa фике курсором мыши или клавишами клавиатуры. . gtext: вывод текстовой строки в rрафическое окно после интерак тивноrо выбора позиции вывода курсором мыши. . disp: вывод сообщения на экран. . pause: пауза до нажатия какойлибо клавиши или на N секунд. · keyboard: запрос на ввод с клавиатуры. 
158 Т ем а 9. rРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ . wai tfor: блокировка работы до наступления события. . error: печать сообщения об ошибке и выход из М файла. · menu: меню диалоrовоrо ввода. Iпример 9. 11 Следующий фраrмент кода позволяет интерактивно ввести число или текстовую строку с клавиатуры и затем вывести полученную ин формацию в командное окно Command Window. » А= input ( 'А = ,); message = ['variable А = " int2str (А) ] ; disp(message) Str= input('Str = " 's'); message = ['string Str =' Str]; disp(message) 9.2. GUI идескрипторная rрафика 9.2.1. Управляющие элементы . Управляющие элементы: uicontrol. Типы, имеющиеся в распоря жении (определяются свойством Style):  pushbutton  управляющая кнопка;  togglebutton  кнопка с фиксацией нажатоrо состояния;  radiobutton  радиокнопка;  checkbox  индикатор с флажком;  edi t  поле ввода и редактирования текста;  text  статический неизменяемый текст (метка);  slider  линейка прокрутки;  frame  контейнер любых компонентов;  listbox  компонент для отображения раскрытоrо списка строк;  popupmenu  компонент для отображения и редактирования BЫ падающеrо списка строк. · Выпадающее меню: uimenu. · Контекстное меню: uicontextmenu. 
9.2. GUI и дескрипторная rpафика 159 . Интерактивное создание: GUIDE (GUI Design Environment). По команде » guide открывается rрафический редактор Layout Edi tor визуальной реализации GUI. · Объекты uicontrol, uimenu, uicontextmenu являются потом ками объекта Figure и, следовательно, не зависят от Axes. 9.2.2. Основные свойства управляющих элементов . Управляющий элемент uicontrol:  String: надпись на элементе, а также список строк компонентов ListBox и PopupMenu;  Visible: видимость элемента управления;  Enable: доступность элемента управления;  Style: тип элемента управления;  Position: положение и размеры управляющеrо элемента;  Uni t s: единицы измерения;  FontAngle, FontName, FontSize, FontUnits, FontWeight, HorizontalAlignment: настройки шрифта;  т ag: имя элемента;  Callback: управляющее действие;  CreateFcn: действия, выполняемые при создании элемента;  DeleteFcn: действия, выполняемые при удалении элемента. . Управляющий элемент uimenu:  Label: метка меню;  Separator: разделительная линия;  Visible: видимость;  Enable: доступность;  Callback: управляющее действие. . Управляющий элемент uicontextmenu:  Callback: управляющее действие. . Доступ к свойствам управляющих элементов: get и set. 
160 Т ем а 9. rРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ Iпример 9. 21 Команды » figure; set(gcf, 'menubar', 'попе') Ь= uicontrol('Style', 'pushbutton',... 'Units', 'normalized',... 'Position', [.5 .5 .2 .1], 'string', 'Click Here'); ы= uicontrol('Style', 'pushbutton',... 'Units', 'normalized',... 'Position', [.5 .7 .2 .1], 'String', 'Clear'); создают в центре rрафическоrо окна две кнопки. Однако при нажатии на кнопки никакие действия не выполняются. Команды s=' х=О: 0.01: З*рi; plot (х, sin (10*rand (1) *х) ) , ; eval(s) set(b, 'Callback',s) set(bl, 'Callback', 'cla') назначают кнопкам выполнение определенных действий. Iпример 9. з1 Следующий код создает rрафическое окно, пункт меню и четыре кнопки для вывода диаrрамм различноrо вида (рис. 9.1). » figure set(gcf, 'menubar', 'попе', 'units', 'normalized') uimenu('label', '&Close', 'callback', 'close') set(gca, 'position', [.4 .1 .5 .8]) uicontrol('style', 'pushbutton',... 'string', 'Pie Plot', 'units', 'normalized', 'position', [.1 .8 .2 .1],... 'callback', 'pie(rand(1,6»;... axis оп; grid off; Ьох оп; ') uicontrol('style', 'pushbutton', 'string',... 'Area Plot', 'units', 'normalized', 'position', [ . 1 . 6 .2 . 1] , 'callback' , 'area (rand ( 6, 3) ) ; axis оп; grid оп; Ьох оп; ') uicontrol('style', 'pushbutton', 'string',... 'Bar Plot', 'units', 'normalized', 'position', [ . 1 . 4 .2 . 1] , 'callback' , 'bar (rand ( 6, 3) ) ; axis оп; grid оп; Ьох оп; ') 
9.2. GUI и дескрипторная rpафика 161 uicontrol('style', 'pushbutton', 'string',... 'Graph Clear', 'units', 'normalized',... 'position', [.1 .2 .2 .1], 'callback',... 'cla; grid off') uicontrol('style', 'text', 'string', 'Diagram', 'units', 'normalized', 'position', [.4 .9 .2 .05]) Рис. 9.1. rрафический интерфейс пользователя Iпример 9. 41 Следующий пример создает в текущем окне F igure пункты Me ню, выбор которых позволяет пользователю создать новый объект F ig ure, сохранить переменные рабочеrо пространства Workspace в фай ле МATLAВ .mat, а также выйти из MATLAB. Кроме этоrо, определяется разделитель пунктов меню и «rорячая» клавиша Ctrl+Q (рис. 9.2). % 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' ' Q uit' 'Callback' 'exit' , " " 'Se p arator' 'оп' 'Accelerator' ' Q ' ) . " " 
162 Т ем а 9. rРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ Рис. 9.2. Меню Iпример 9. 51 Следующий пример создает контекстное меню, ассоциированное с линией на rрафике, которое появляется всякий раз, коrда пользователь нажимает правую кнопку мыши в любом месте линии на rрафике. Пунк ты меню позволяют пользователю изменить стиль линии (рис. 9.3). Рис. 9.3. Контекстное меню, связанное с линией % Define the context menu cmenu = uicontextmenu; %Define the line, associate it with the context menu hline = plot(1:10, 'UIContextMenu', cmenu); % Define callbackfunctions for context menu items 
9.3. Среда GUIDE 163 cbf1 = [' set (hline, "Linestyle", "")']; cbf2 = ['set(hline, "LineStyle' " сЬfЗ = ['set(hline, "LineStyle' " % Define the context menu items it1=uimenu(cmenu, 'Label', 'dashed', 'Callback',cbf1); it2=uimenu ( cmenu , 'Label' 'dotted' 'Callback' cbf2 ) . , , " itЗ=uimеnu ( сmеnu , 'Label' 'solid' 'Callback' сЬfЗ ) . , , " ":")']; "") ']; 9.3. Среда GUIDE . Визуальная реализация rрафическоrо интерфейса пользователя GUI: среда GUIDE. . Команда» guide: запуск rpафическоrо редактора Layout Edi tor, содержащий палитру rрафических элементов управления и фор му для создания GUI. . Файлы: файл rрафическоrо макета (. fig), файл интерфейса (. m). . Действия:  в командном окне ввести команду » guide и открыть GUIDE Quick Start Dialog Вох;  выбрать шаблон «Blank GUI» на вкладке «Create New GUI»;  для заrрузки существующеrо GUI ввести команду » guide fig1 . fig или выбрать файл на вкладке «Ореп Existing GUI»;  выбрать требуемые rрафические элементы управления из Палит ры компонентов и поместить их на форму;  дважды щелкнуть по выбранному компоненту и в открывшемся инспекторе свойств Р ropert у Inspector установить необхо димые свойства выделенноrо компонента;  для запуска созданноrо в Layout Editor интерфейса GUI BЫ брать команду Tools I Run или «Зеленый треуrольник» на пане ли «rорячих» клавиш;  с помощью KOHTeKcTHoro меню создать М файл с тем же именем, объявить соответствующие компонентам саllЬасkфункции и отредактировать их в редактореотладчике М файлов;  сохранить интерфейс GUI в файле с расширением. fig. 
164 Т ем а 9. rРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ 9.4. Лабораторный практикум Х!! 9 9.4.1. Теоретические вопросы 1. f'рафический интерфейс пользователя (GUI). 2. Способы создания GUI, поддерживаемые MATLAB. 3. Интерактивный интерфейс. 4. Элементы дескрипторной rpафики для создания GUI. 5. Объект uicontrol. 6. Объект uimenu. 7. Объект uicontextmenu. 8. Свойства UIобъектов. 9. Доступ к свойствам UIобъектов. 10. СаllЬасkфункции. 11. Редактор Layout Editor. 12. Типы файлов для создания GUI. 9.4.2. Задания адание 9. 11 Постройте rрафики функций Y=sin (Х) и Z=cos (Х) с шаrом 0.01 на отрезке [3л:; 3л:] в одном rpафическом окне в разных системах KOOp динат. Свяжите с rрафиком функции Y=sin (Х) контекстное меню с тремя пунктами, изменяющими тип линии: dashed, dotted, solid. Свяжите с rрафиком функции Z=cos (Х) контекстное меню с тремя пунктами, изменяющими цвет линии: red, green, Ыие. адание 9. 21 Постройте rрафики функций z==Ecos(x) на отрезке [о; 6л:] и yx2 на отрезке [3л:; 3л:] с шаrом 0.01 в одном rpафическом окне в разных системах координат. Свяжите с rpафиком функции yx2 контекстное меню с двумя пунктами, устанавливающими толщину линии. Выбор первоrо пункта меню увеличивает толщину линии в два раза, выбор BTO poro пункта меню  восстанавливает значение толщины линии по умол чанию. Свяжите с rрафиком функции z == Е cos(x) контекстное меню с тремя пунктами, изменяющими цвет линии: red, green, bl ие. 
9.4. Лабораторный практикум NQ 9 165 адание 9. з1 Постройте стандартную трехмерную поверхность  сферу. Свяжите с поверхностью контекстное меню. Первые три пункта KOHTeKcTHoro Me ню изменяют стиль ребер поверхности: dashed, dotted, solid. Сле дующие четыре пункта меню изменяют цвет поверхности: red, green, Ыие, flat. f'руппы пунктов меню разделите разделительной линией. адание 9. 41 Постройте rpафик функции, заданной параметрически. Свяжите с построенной фиrурой контекстное меню с пунктами, изменяющими Map керы ее узлов: кружок, звездочка, треуrольник, квадрат. Последний пункт меню удаляет маркеры. а) xcos(t), ysin(t), zt, tЕ[0,20л:] (винтовая линия); Ь) xelt501/50sin t, yelt501/50cos t, zt, t Е [0,100]. адание 9. 51 Постройте rладкую поверхность фиrуры, заданной соотношениями: а) z sin(x) .*sin(y), ХЕ[О; 100],YE[0; 100]; Ь) zsin (х) sin (у) +. 3cos (2x3y) . 2sin (х+2у), х, УЕ[О; 100]. Создайте пять пунктов rлавноrо меню, изменяющих цветовую па литру закраски построенной поверхности. адание 9. 61 в середину rрафическоrо окна поместите кнопку. При нажатии на кнопку ее местоположение изменяется случайным образом в пределах Bcero rpафическоrо окна. адание 9. 71 Дан rрафический (JPG )файл, содержащий изображение HeKoToporo аналоrовоrо сиrнала. Следует оцифровать данный сиrнал, то есть пред ставить ero в виде таблицы значений (Х, У). f'рафический интерфейс 
166 Т ем а 9. rРАФИЧЕСКИЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ пользователя должен содержать кнопки, позволяющие выполнить сле дующие действия (рис. 9.4): Рис. 9.4. GUI проrpаммы оцифровки СИrRала . Image: заrрузка и визуализация rрафическоrо изображения. . Digitization: оцифровка сиrнала. В данном режиме при помощи функции ginput оцифровываются координаты (Х, У) точек аналоrо Boro сиrнала. После оцифровки каждой точки значения ее координат сохраняются в массиве данных. Все оцифрованные точки сортируют ся по координате Х и отображаются поверх rрафическоrо изображе ния ломаной KpacHoro цвета. Узлы ломаной выделяются меткой' о' . . Delete: удаление точки оцифрованноrо сиrнала. В данном режиме можно удалить ранее оцифрованную точку. После попадания курсора мыши в метку выбранной точки и нажатия кнопки мыши координаты данной точки удаляются из массива данных. Затем происходит пере рисовка ломаной линии. . Load: сохранение массива координат в бинарном файле. . Save: заrрузка массива координат из бинарноrо файла. . Zoom: увеличение/уменьшение фраrментов изображения. 
ЛИТЕРАТУРА 1. Ануфриев, И Е. Самоучитель MATLAB 5.3/6.х / и. Е. Ануфриев. СПб.: БХВПетербурr, 2004. 736 с. 2. rоворухин, В. Компьютер в математическом исследовании: учеб. курс / В. rоворухин, В. Цибулин. СПб.: Питер, 2001.624 с. 3. Потемкин, В. r. Система MATLAB 5 для студентов / В. [. По темкин. М.: ДИАлоrмиФи, 1998.314 с. 4. Потемкин, В. r. Система инженерных и научных расчетов MATLAB 5.х: в 2 т. / В. [. Потемкин. М.: ДИАЛоrмиФи, 1999. Т. 1.366 с. 5. Потемкин, В. r. Система инженерных и научных расчетов MATLAB 5.х: в 2 т. / В. [. Потемкин. М.: ДИАЛоrмиФи, 1999. Т. 2. 304 с. 6. rолубева, л л Компьютерная математика. Числовой пакет MATLAB: курс лекций / л. л. rолубева, А. э. Малевич, Н. л. Щеrлова. Минск: Бrу, 2007.164 с. 7. Aпgermaпп, А. MATLAB  Simulink  Stateflow. Grundlagen, Tool boxen, Beispiele / А. Angermann, М. Beuschel, М. Rau, U. Wohl farth. Oldenburg Verlag Munchen Wien, 2007. 495 с. 8. Adam, s. MATLAB und Mathematik kompetent einsetzen / S. Adam. WILEYVCH Verlag GmbH & Со. KGaA, Weinheim, 2006. 462 с. 9. ТНЕ MATHWORKS: Getting Started with MATLAB, Version7. The MathWorks Inc., 2007, Online: getstart.pdf 
Учебное издание rолубева Лариса Леонидовна Малевич Александр Эрнестович Щеrлова Наталья Леонидовна КОМПЬЮТЕРНАЯ МАТЕМАТИКА ЧИСЛОВОЙ ПАКЕТ MAТLAB Лабораторный пракl'ИКУМ в авторской редакции Технический редактор r. м Романчук Корректор Л Н. Масловекая Ответственный за выпуск Т. М Турчuняк Подписано в печать 13.11.2008. Формат 60х84/16. Бумаrа офсетная. rарнитура Тайме. Печать офсетная. Уел. печ. л. 10,0. Уч.изд. л. 6,38. Тираж 250 экз. Зак. 1314. Белорусский roсударственный университет. ЛИ N2 02330/0056804 от 02.03.2004. 220030, Минск, проспект Независимости, 4. Отпечатано с ориrиналамакета заказчика. Республиканское унитарное предприятие «Издательский центр Белорусскоrо roсударственноrо университета» ЛП N2 02330/0056850 от 30.04.2004. 220030, Минск, ул. Красноармейская, 6. 
ISBN 978985518081 5 9789855180815