36. Методы программирования в MATLAB (210700.62

advertisement
1
1. Информация из ФГОС, относящаяся к дисциплине “Методы программирования в МаtLab”
1.1. Вид деятельности выпускника
Дисциплина охватывает круг вопросов, относящихся к экспериментальноисследовательской деятельности выпускника.
1.2. Задачи профессиональной деятельности выпускника
В дисциплине рассматриваются указанные в ФГОС задачи профессиональной деятельности выпускника:
- внедрение и эксплуатация информационных систем;
- математической моделирование инфокоммуникационных процессов и объектов на
базе как стандартных пакетов автоматизированного проектирования и исследований, так
и самостоятельно создаваемых оригинальных программ.
1.3. Перечень компетенций, установленных ФГОС
Освоение программы настоящей дисциплины позволит сформировать у обучающегося следующие общекультурные компетенции:
- знать и использовать основные законы естественнонаучных дисциплин в профессиональной деятельности, применять методы математического анализа и моделирования,
теоретического и экспериментального исследования (ОК-9);
и профессиональные компетенции:
- иметь навыки самостоятельной работы на компьютере и в компьютерных сетях;
осуществлять компьютерное моделирование устройств, систем и процессов с использованием универсальных пакетов прикладных компьютерных программ (ПК-2).
1.4. Перечень умений и знаний, установленных ФГОС
Студент после освоения программы настоящей дисциплины должен:
- знать математические программы для использования возможностей компьютеров
для качественного исследования свойств различных математических моделей; законы и
методы накопления, передачи и обработки информации с помощью компьютера;
- уметь использовать возможности вычислительной техники и программного обеспечения;
- владеть основными методами работы на компьютере с использованием универсальных прикладных программ.
2. Цели и задачи освоения программы дисциплины
- создать необходимую основу для использования современных средств вычислительной техники и прикладных программ при изучении студентами естественнонаучных,
общепрофессиональных и специальных дисциплин;
- освоение предусмотренного программой теоретического материала и приобретение
практических навыков использования информационных систем и технологий на базе современных ПК.
3. Место дисциплины в структурно-логической схеме
Курсу «Методы программирования в МаtLab» предшествуют дисциплины: физика,
математический анализ, информатика.
2
Знания и умения, приобретаемые студентами после освоения содержания дисциплины, будут использоваться в большинстве общепрофессиональных и специальных дисциплин направления «Инфокоммуникационные технологии и системы связи».
4. Компетенции обучающегося, формируемые в результате освоения
дисциплины (результаты освоения дисциплины)
В результате освоения дисциплины обучающийся должен:
уметь:
- подготовить задачу для решения на ПК, включая ее математическую постановку,
выбор метода решения, описание алгоритма и составление программы;
- применять возможности базовой системы MATLAB для выполнения расчетов и
анализа данных;
- использовать математические методы в технических приложениях;
- проводить необходимые расчеты в рамках построенной модели;
- использовать возможности современной вычислительной техники и программного
обеспечения для решения инженерно-технических задач.
знать:
- возможности, принципы построения и правила использования системы MATLAB;
- основные компоненты базовой системе MATLAB;
- основные приемы программирования в среде MATLAB;
владеть:
- навыками работы пользователя и программиста в интегрированных средах, использующих "оконный интерфейс";
- навыками работы на персональных компьютерах в среде MATLAB;
- практическими навыками решения вычислительных задач в среде MATLAB.
5. Основная структура дисциплины
Таблица 1 – Структура дисциплины
Вид учебной работы
Трудоемкость, часов
Всего
Семестр № 3
Общая трудоемкость дисциплины
Аудиторные занятия, в том числе:
лекции
лабораторные работы
практические/семинарские занятия
Самостоятельная работа (в том числе курсовое проектирование)
Вид промежуточной аттестации (итогового контроля по дисциплине), в том числе
курсовое проектирование
144
51
17
34
39
144
51
17
34
39
экзамен
экзамен
6. Содержание дисциплины
6.1 Перечень основных разделов и тем дисциплины:
Введение
1. Основы интерфейса MATLAB
Общие сведения. Инсталляция и первый запуск системы MATLAB. Составляющие
системы MATLAB. Пользовательский интерфейс MATLAB. Панели инструментов. Работа с вычислительными сессиями. Справочная система MATLAB. Вычислительные сред3
ства MATLAB. MATLAB как универсальный калькулятор Константы и системные переменные Математические выражения и их компоненты.
2. Работа с массивами
2.1 Задание векторов и матриц.
Обращение к элементам векторов и матриц. Создание новых матриц на основе существующих. Формирование векторов и матриц определенного вида.
2.2 Операции с векторами.
Векторные действия над векторами. Сложение векторов. Транспонирование вектора.
Умножение и деление вектора на число. Умножение двух векторов. Поэлементное преобразование векторов.
2.3 Операции с матрицами.
Поэлементное преобразование матриц. Матричные действия над матрицами. Возведение матрицы в целую степень.
2.4 Функции, используемые для работы с векторами и матрицами.
Сортировка, нахождение экстремальных элементов, размер массива, количество
элементов, суммирование и перемножение элементов.
3. Графические средства MATLAB
3.1 Построение графиков функции одной переменной
Построение графиков в линейном масштабе. Построение графиков в логарифмическом масштабе. Построение графиков в масштабе полярных координат. Вывод нескольких графиков в одном окне. Изменение масштаба графика.
3.2 Диаграммы и гистограммы.
Столбцовые диаграммы. Круговые диаграммы. Гистограммы.
3.3 Трехмерная графика
Построение трехмерных линий. Каркасные поверхности. Закрашенные поверхности.
Создание контурных графиков. Управление точкой обзора. Изменение цветовой палитры.
Установка параметров освещенности объекта. Работа с камерой. Движение точки по траектории. Сохранение, экспорт и печать графиков.
4. Создание и использование m-файлов в MATLAB
4.1 Типы m-файлов.
Файл-программы. Файл-функции.
4.2 Файл-программы.
Создание m-файлов. Выполнение, редактирование файл-программ.
4.3 Файл-функции.
Создание, сохранение выполнение файл-функций. Файл-функции с несколькими
входными и выходными аргументами. Разновидности функций. Режим ячейки.
5. Операторы управления вычислительным процессом
5.1 Операторы управления
Операторы условного перехода, переключения, цикла. Операторы прерывания. Применение конструкции управления try...catch.
5.2 Диалоговые программы
5.3 Отладка программ.
Использование редактора/отладчика m-файлов для отладки программ. Использование командной строки для отладки программ.
6. Методы вычислений в MATLAB
6.1 Операции над полиномами
Вычисление значения полинома. Вычисление корней полинома. Умножение и деле4
ние полиномов. Дифференцирование и интегрирование полиномов.
6.2 Функции линейной алгебры
Основные определения алгебры матриц. Вычисление основных параметров матриц.
Обращение матриц. Собственные значения и собственные векторы. Матричные функции.
Решение систем линейных уравнений.
6.3 Исследование функций.
Решение уравнений. Поиск минимума функции
6.4 Вычисление определенных интегралов.
Вычисление определенных интегралов методом трапеций. Более точные методы вычисления определенных интегралов. Вычисление двойных интегралов.
6.5 Дифференциальные уравнения.
Решение обыкновенных дифференциальных уравнений. Решение систем дифференциальных уравнений.
6.2 Краткое содержание теоретической части разделов и тем дисциплины
ВВЕДЕНИЕ
Система MatLAB (сокращение от MATrix LABoratory - матричная лаборатория)
представляет собой интерактивную компьютерную систему для выполнения инженерных
и научных расчетов, ориентированную на работу с массивами данных.
Главные преимущества MatLAB, по сравнению с другими математическими системами и пакетами, состоят в следующем:
- система MatLAB специально создана для проведения именно инженерных расчетов: математический аппарат, который используется в ней, предельно приближен к современному математическому аппарату инженера и ученого и опирается на вычисления с
матрицами, векторами и комплексными числами;
Основной объект системы MatLAB - прямоугольный числовой массив (матрица), который допускает комплексные элементы. Использование матриц не требует явного указания их размеров. Система MatLAB выполняет операции с векторами и матрицами даже в
режиме непосредственных вычислений без какого-либо программирования.
В базовый набор слов системы входят: спецзнаки; знаки арифметических и логических операций; арифметические, тригонометрические и некоторые специальные математические функции; функции быстрого преобразования Фурье и фильтрации; векторные и
матричные функции; средства для работы с комплексными числами; операторы построения графиков в декартовой и полярной системах координат, трехмерных поверхностей и
т.п.
- язык программирования системы MatLAB очень прост, близок к языку
BASIC, посилен любому начинающему; он содержит всего несколько десятков операторов; незначительное количество операторов компенсируется большим числом процедур и
функций, содержание которых легко понятно пользователю с соответствующей математической и инженерной подготовкой;
Запись программ в системе является традиционной и потому обычной для большинства пользователей персональных компьютеров. Кроме того система дает возможность
редактировать программы при помощи любого привычного для пользователя текстового
редактора.
- MatLAB является открытой системой; это означает, что практически все процедуры
и функции MatLAB доступны не только для использования, но и для корректировки и
5
модифицирования; MatLAB - система, которая может расширяться пользователем по его
желанию созданными им программами и процедурами (подпрограммами); пользователь
может ввести в систему любую новую команду, оператор или функцию и пользоваться
потом ими так же просто, как и встроенными операторами и функциями.
- MatLAB можно использовать как чрезвычайно мощный научный калькулятор и в
то же время можно составлять собственные отдельные программы с целью многоразового их использования для исследований.
Работа в среде MatLAB может осуществляться в двух режимах:
- в режиме калькулятора, когда вычисления осуществляются сразу после
набора очередного оператора или команды MatLAB; при этом значение результатов вычисления могут присваиваться некоторым переменным, или результаты получаются непосредственно, без присваивания (как в обычных калькуляторах);
- путем вызова имени программы, написанной на языке MatLAB, предварительно составленной и записанной на диске, которая содержит все необходимые команды, обеспечивающие ввод данных, организацию вычислений и вывод результатов на
экран (программный режим).
В обоих режимах пользователю доступны практически все вычислительные возможности системы, в том числе по выводу информации в графической
форме. Программный режим позволяет сохранять разработанные вычислительные алгоритмы и, таким образом, повторять вычисления при других входных данных.
- MatLAB можно легко интегрировать с текстовым редактором Word, что делает возможным использование MatLAB при создании текстовых документов с включением в
них сложных расчетов и графиков.
Возможности системы огромны, а по скорости выполнения задач она опережает
многие другие подобные системы. Для решения специализированных задач разработаны
пакеты расширений системы MatLAB с дополнительными функциями. Такие пакеты называются Toolboxes.
РАЗДЕЛ 1. ОСНОВЫ ИНТЕРФЕЙСА MATLAB
Запуск программы MatLAB осуществляется так же, как и запуск любой другой программы.
После запуска программы, на короткое время появляется окно с изображением логотипа MatLAB и некоторой информацией, а затем запустится основное окно программы
MatLAB - Рабочий стол. Пользователь может настроить это окно в соответствии со
своими предпочтениями. Вернуться к первоначальной установке можно с помощью команды
Desktop/ Desktop Layout/Default
(Рабочий стол/План рабочего стола/По умолчанию)
По умолчанию Рабочий стол включает в себя:
- строку заголовка (наименование программы - MatLAB);
- строку меню, в которой находятся меню File (Файл), Edit (Правка), Debug (Отладка), Desktop (Рабочий стол), Window (Окно), Help (Справка);
- панель инструментов с кнопками, позволяющими выполнить некоторые наиболее
распространенные операции;
- панель Shortcuts (Ярлыки), где можно создать кнопки для быстрого запуска наиболее часто используемых команд или наборов команд;
и четыре внутренних окна, одно из которых скрыто:
6
- окно Command Window (Командное окно)
- окно Command History (История команд)
- окно просмотра Current Directory (Текущая папка)
- окно просмотра Workspace (Рабочая область).
Окно Command Window (Командное окно) является основным в MatLAB. В нем появляются символы команд, которые набираются пользователем на клавиатуре дисплея,
отображаются результаты выполнения этих команд, текст исполняемой программы и информация об ошибках выполнения программы, распознанных системой.
Признаком того, что MatLAB готов к восприятию и выполнению очередной команды, является возникновение в последней строке текстового поля окна знака приглашения
'»', после которого расположена мигающая вертикальная черта. Строка со знаком приглашения '»' называется строкой ввода или командной строкой.
Для того чтобы программа MatLAB выполнила введенную команду или вычислила заданное выражение, после ввода команды или выражения следует нажать клавишу
<Еnter>. Пока не нажата клавиша <Еnter> вводимое выражение может быть отредактировано или удалено. После нажатия данной клавиши введенное выражение невозможно модифицировать. Если же вы поместите на него курсор и нажмете какую-либо клавишу на
клавиатуре, курсор будет автоматически перемещен в строку ввода. Редактировать строку ввода, можно используя клавиши <↑>, <↓> чтобы вновь отобразить предыдущую команду, затем можно исправить команду с помощью клавиш <←>,< →> и нажать клавишу
<Еnter>.
MatLAB запоминает значения всех переменных, используемых в текущем сеансе работы. Переменные занимают в памяти компьютера определенное место, которое называется рабочим пространством.
Окно Workspace (Рабочее пространство) содержит список текущих переменных и их
размеры (но не значения переменных). В данном окне информация о переменных представлена в виде таблицы, по умолчанию состоящей из следующих столбцов: Name – имя
переменной, Value – значение переменной, Class – тип переменной.
Окно Workspace имеет панель инструментов, включающую команды для создания,
сохранения и удаления переменных, для просмотра имеющихся переменных, для открытия файлов с данными и др. Если в окне Workspace дважды щелкнуть на строке, соответствующей какой-либо переменной, информация о ней отобразится в отдельном окне Array Editor (Редактор массива).
Окно Command History (История команд) содержит перечень команд, которые вводятся в Командном окне в течение каждого сеанса. Здесь же отображаются дата и время
каждого сеанса работы в MatLAB.
Если в окне Command History (История команд) щелкнуть мышью на одной из записей (команд), эта команда будет немедленно выполнена в окне Command Window (Командное окно). Однако зачастую необходимо редактировать предыдущую команду перед
ее выполнением. Если щелкнуть правой кнопкой мыши на какой-либо команде, то откроется контекстное меню, содержащее ряд команд.
Кнопки для быстрого запуска наиболее часто используемых команд можно добавить
на панель Shortcuts. Здесь уже имеется две кнопки – How to Add (Как добавлять), щелкнув на которой, можно получить справочную информацию о добавлении кнопок, и
What’s New (Новшества), которая позволяет получить быстрый доступ к разделу справочной системы MatLAB , содержащей информацию о новых возможностях последней
версии системы.
7
Новые файлы, которые вы создаете в программе MatLAB, будут храниться в вашем
текущем каталоге. Имя этого каталога отображается на панели инструментов Рабочего
стола, а файлы и подкаталоги, которые содержит текущий каталог, отображаются в окне
Current Directory (Текущий каталог).
В левом нижнем углу главного окна MatLAB находится кнопка Start (Пуск), позволяющая получить быстрый доступ к различным компонентам системы MatLAB, демонстрационным примерам, а также справочной информации
Простейший способ завершить сессию MatLAB - ввести команду quit в
командной строке. Можно также щелкнуть мышью на кнопке [х], которая обычно закрывает окна. Еще один способ выхода - использовать команду меню File/Exit MatLAB
(Файл/Закрыть MatLAB).
РАЗДЕЛ 2. РАБОТА С МАССИВАМИ
Массив – упорядоченный набор однородных данных. У массива должно быть имя.
Массивы бывают: одномерные, двумерные, многомерные. Размер массива определяется
количеством элементов вдоль каждого из его измерений. Доступ к элементам массива
осуществляется при помощи индекса. В MatLAB нумерация элементов массивов начинается с единицы. Это значит, что индексы должны быть больше или равны единице.
2.1 Задание векторов и матриц
Вектор в MatLAB - это одномерный массив данных.
Чтобы задать вектор, необходимо выполнить следующие действия.
1 Задать в командной строке имя вектора и оператор присваивания (=).
2. Ввести открывающую квадратную скобку, после чего указать значения элементов
вектора, отделяя их с помощью пробелов или запятых.
3. Ввести закрывающую квадратную скобку и нажать клавишу <Еnter>, чтобы программа вывела получившийся вектор на экран.
Примеры ввода
>> z=[2,4,6,8]
>> Y=[4 -3 5 -2 8 1]
Если при задании вектора значения его элементов разделить символами точки с запятой (;), то получится вектор-столбец
>> n=[1;2;3]
Также вектор-столбец можно получить из вектора-строки если ввести символ (‘) после имени массива.
Длинный вектор можно вводить частями, которые потом нужно объединять с помощью
операции объединения векторов в строку : v = [ v1 v2 ].
Язык MatLAB дает пользователю возможность сокращенного введения вектора, значения элементов которого составляют арифметическую прогрессию. Если обозначить: nz
- начальное значение этой прогрессии (значение первого элемента вектора); kz - конечное
значение прогрессии (значение последнего элемента вектора); h - разность прогрессии
(шаг), то вектор можно ввести с помощью короткой записи V = nz : h : kz . Шаг может
быть дробным или отрицательным.
>> v=1:4:13
Если шаг не указан, то он по умолчанию принимается равным единице
>> w=-0.5:2
Матрица – это двухмерный массив.
Ввод значений элементов матрицы осуществляется в MatLAB в квадратных скобках,
по строкам. При этом элементы строки матрицы один от другого отделяются пробелом
или запятой, а строки одна от другой отделяются знаком ";"
8
>> A=[1 2 3;4 5 6;7 8 9]
Обращение к элементам векторов и матриц
Обращение к любому элементу заданной матрицы в MatLAB осуществляется путем
указания (в скобках, через запятую) после имени матрицы двух целых положительных
чисел, которые определяют соответственно номера строки и столбца матрицы, на пересечении которых расположен этот элемент.
Если ввести выражение с одним индексом MatLAB отобразит значение того элемента матрицы, который располагался бы в строке с номером, соответствующим этому индексу, если бы все столбцы матрицы выстроились в один общий столбец.
Для обращения к элементам векторов в скобках указывается один индекс.
MatLAB предоставляет удобный способ обращения к блокам последовательно расположенных элементов вектора. Для этого служит индексация при помощи знака двоеточия.
Создание новых матриц на основе существующих
Иногда нужно создать меньшую матрицу из большей, формируя ее путем извлечения
из последней матрицы элементов ее нескольких строк и столбцов, или, наоборот, вставить меньшую матрицу таким образом, чтобы она стала определенной частью матрицы
большего размера. Это в MatLAB делается с помощью знака двоеточия (" : "). Пусть нужно создать вектор V1, состоящий из элементов третьего столбца матрицы A.
>> A=[1 2 3;4 5 3.1416;7 8 9]
>> V1=A(:,3)
Допустим, что необходимо из матрицы А образовать матрицу В размером (2х2), которая состоит из элементов левого нижнего угла матрицы А.
>> A = [ 1 2 3 4; 5 6 7 8; 9 10 11 12]
>> B = A(2:3, 1:2)
Преобразовать матрицу (А) в единый вектор (V) можно с помощью обычной записи
"V = A(:)". При этом создается вектор-столбец с количеством элементов (m х n), в котором столбцы заданной матрицы размещены сверху вниз в порядке самих столбцов
Можно "расширить" матрицу, составляя ее из отдельных заданных матриц. Если заданы несколько матриц А1, А2,... АN с одинаковым количеством строк, то их можно объединить в единую матрицу А, объединяя блоки в одну "строку" таким образом: A = [A1,
A2,... , AN]. Эту операцию называют горизонтальной конкатенацией (сцеплением) матриц.
Вертикальная конкатенация матриц реализуется (при условии, что все составные
блоки-матрицы имеют одинаковое количество столбцов) аналогично, путем применения
для отделения блоков вместо запятой точки с запятой: A = [A1; A2;... ; AN].
Создавать новые массивы можно также путем удаления строк и столбцов исходных
массивов. Для этого используются парные квадратные скобки ([ ]), которые в MatLAB
обозначают пустой маcсив.
Кроме того, в MatLAB существует несколько функций, позволяющих формировать
новые массивы путем перестановки частей имеющихся матриц.
- fliplr(A) - формирует матрицу, переставляя столбцы известной матрицы А относительно вертикальной оси:
- flipud(A) - переставляет строки заданной матрицы А относительно горизонтальной
оси:
- rot90(A) - формирует матрицу путем "поворота" заданной матрицы А на 90 градусов против часовой стрелки:
9
Формирование векторов и матриц определенного вида
MatLAB имеет несколько функций, которые позволяют формировать векторы и матрицы определенного вида. К таким функциям относятся:
- zeros(m,n) - создает матрицу размером (m x n) с нулевыми элементами:
- ones(m,n) - создает матрицу размером (m x n) с единичными элементами:
- eye(m,n) - создает единичную матрицу размером (m x n), т. е. с единицами по главной диагонали и остальными нулевыми элементами;
- rand(m,n) - создает матрицу размером (m x n) из случайных чисел, равномерно распределенных в диапазоне от 0 до 1;
- randn(m,n) - создает матрицу размером (m x n) из случайных чисел, распределенных
по нормальному (гауссовому) закону с нулевым математическим ожиданием и среднеквадратичным отклонением, равным единице:
Если рассмотренные функции заданы с одним аргументом, то будет создана квадратная матрица соответствующего вида.
Рассмотрим еще несколько функций MatLAB, служащих для создания векторов и
матриц:
- magic(n) – создает магическую матрицу, у которой сумма элементов каждого
столбца, строки и диагонали равна одному и тому же числу. Эта функция имеет единственный аргумент, определяющий размер создаваемой квадратной матрицы.
- pascal(n) - создает матрицу Паскаля размером (n x n).
Процедура diag(х) - формирует или извлекает диагональ матрицы.
Если х - матрица, то функция diag создает вектор-столбец, который состоит
из элементов главной диагонали заданной матрицы х. Если при этом указать дополнительно номер диагонали, то можно получить вектор-столбец из элементов любой диагонали матрицы х. Если х - вектор, то функция diag(х) создает квадратную матрицу с вектором х на главной диагонали.
Чтобы установить заданный вектор на другую диагональ, при обращении к функции
необходимо указать еще один параметр (целое число) - номер диагонали (при этом диагонали отсчитываются от главной вверх).
2.2 Операции с векторами
В MatLAB операции, выполняемые с векторами делятся на два типа:
- операции поэлементного преобразования векторов - это действия, которые преобразуют элементы вектора, но не являются операциями, разрешенными математикой;
- векторные операции - т. е. такие, которые предусмотрены векторным исчислением
в математике.
Векторные действия над векторами
Векторное исчисление предусматривает следующие операции над векторами:
- сложение и вычитание векторов одинакового типа;
- транспонирование векторов;
- умножение и деление вектора на число;
- векторное произведение векторов.
Сложение векторов. Суммироваться могут только векторы одинакового типа (т. е.
такие, которые являются или векторами-строками, или векторами-столбцами), имеющие
одинаковую длину (т. е. одинаковое количество элементов).
Если X и Y - именно такие векторы, то их сумму Z можно получить, введя команду
>> v = x + y
Аналогично с помощью арифметического знака ' - ' осуществляется вычитание векторов,
10
имеющих одинаковую структуру
>> v = x - y
Транспонирование вектора осуществляется применением знака апострофа, который записывается сразу за записью имени вектора, который нужно
транспонировать.
>> x'
Умножение вектора на число осуществляется в MatLAB с помощью знака арифметического умножения ' * ' таким образом: Z = X*r или Z = r*X, где r - некоторое действительное число.
>> v = 2*x
Деление вектора на число происходит с помощью обычного оператора деления ' / ',
однако деление числа на вектор невозможно.
>> x/2
Умножение двух векторов определено в математике только для векторов одинакового размера (длины) и лишь тогда, когда один из векторов-множителей строка, а второй
- столбец. Иначе говоря, если векторы X и Y являются строками, то математическое
смысл имеют лишь две формы умножения этих векторов: U =X' * Y и V = X * Y'. При
этом в первом случае результатом будет квадратная матрица, а во втором - число. В
МatLAB умножение векторов осуществляется применением обычного знака умножения '
* ', который записывается между множителями-векторами.
>> x = [1 2 3]; y = [4 5 6]; v = x' * y
v=
4 5 6
8 10 12
12 15 18
>> v = x * y'
v=
32
Для векторов, состоящих из трех элементов в MatLAB существует функция cross, которая
позволяет найти векторное произведение двух векторов.
>> v1 = [1 2 3]; v2 = [4 5 6];
>> cross(v1,v2)
Поэлементное преобразование векторов
В языке MatLAB предусмотрен ряд операций, которые преобразуют заданный вектор
в другой того же размера и типа, но не являются операциями с вектором как математическим объектом. К таким операциям относятся, например, все элементарные математические функции, которые зависят от одного аргумента.
Например, запись вида Y = sin(X), где X - некоторый известный вектор, приводит к
формированию нового вектора Y, имеющего тот же тип и размер, но элементы которого
равняются синусам соответствующих элементов вектора-аргумента X.
>> x = [ -2,-1,0,1,2];
>> y = sin(x)
>> z = tan(x)
>> v = exp(x)
Кроме этих операций в МаtLAB предусмотрено несколько операций поэлементного
преобразования, осуществляемых с помощью знаков обычных арифметических действий.
Эти операции применяются к векторам одинакового типа и размера. Результатом их
11
есть вектор того же типа и размера.
Добавление (отнимание) числа к (из) каждому элемента вектора. Осуществляется с
помощью знака ' + ' (' - ').
Поэлементное умножение векторов. Проводится с помощью совокупности знаков ' .*
', которая записывается между именами перемножаемых векторов x.*y. В результате получается вектор, каждый элемент которого является произведением соответствующих
элементов векторов - "сомножителей".
Поэлементное деление векторов. Осуществляется с помощью совокупности знаков './
': x./y. Результат - вектор, каждый элемент которого является частным от деления соответствующего элемента первого вектора на соответствующий элемент второго вектора.
Поэлементное деление векторов в обратном направлении. Осуществляется с помощью совокупности знаков '.\ ': x.\y. В результате получают вектор, каждый элемент которого является частным от деления соответствующего элемента второго вектора на соответствующий элемент первого вектора.
Поэлементное возведение в степень. Осуществляется с помощью совокупности знаков '.^ ': x.^y/ Результат - вектор, каждый элемент которого является соответствующим
элементом первого вектора, возведенным в степень, величина которой равняется значению соответствующего элемента второго вектора.
Вышеуказанные операции позволяют очень просто вычислять (а затем строить графики) сложныx математических функций, не используя при этом операторы
цикла, т. е. осуществлять построение графиков в режиме калькулятора. Для этого достаточно задать значение аргумента как арифметическую прогрессию, а потом записать
нужную функцию, используя знаки поэлементного преобразования векторов.
2.3 Операции с матрицами
Операции, выполняемые в MatLAB с матрицами, также можно разделить на два типа:
- поэлементные операции над матрицами, не допустимые с точки зрения математики;
- матричные операции, которые соответствуют правилам матричного исчисления в
математике.
Поэлементное преобразование матриц
Для поэлементного преобразования матрицы пригодны все указанные ранее алгебраические функции. Каждая такая функция формирует матрицу того же размера, что и
заданная, каждый элемент которой вычисляется как указанная функция от соответствующего элемента заданной матрицы. Кроме этого, в
MatLAB определены операции поэлементного умножения матриц одинакового размера
(совокупностью знаков ' .* ', записываемой между именами перемножаемых матриц), поэлементного деления (совокупности './ ' и '.\'), поэлементного возведения в степень (совокупность '.^' ), когда каждый элемент первой матрицы возводится в степень, равную
значению соответствующего элемента второй матрицы.
Матричные действия над матрицами
К матричным действиям над матрицами относят такие операции, которые
используются в матричном исчислении в математике и не противоречат ему.
Базовые действия с матрицами:
- сложение и вычитание;
- транспонирование;
- умножение матрицы на число;
- умножение матрицы на матрицу;
12
- возведение матрицы в целую степень
осуществляются в языке MatLAB с помощью обычных знаков арифметических операций.
При использовании этих операций важно помнить условия, при которых эти операции
являются возможными:
- при сложении или вычитании матрицы должны иметь одинаковые размеры;
- при умножении матриц количество столбцов первой матрицы должно совпадать с количеством строк второй матрицы.
Невыполнение этих условий приведет к появлению в командном окне сообщения об
ошибке.
Возведение матрицы в целую степень осуществляется в MatLAB с помощью знака
"^" - A^n. При этом матрица должна быть квадратной, а показатель степени - целым
(положительным или отрицательным) числом. Это матричное действие эквивалентно умножению матрицы A на на себя n раз (если n - положительно) или умножению обратной
матрицы на себя (при n отрицательно).
Для вычисления матрицы, обратной для заданной в MatLAB существует функция
inv(А). При этом исходная матрица должна быть квадратной, а ее определитель не должен равняться нулю.
Также в языке MatLAB есть две новые, неопределяемые в математике функции деления матриц. При этом вводятся понятие деления матриц слева направо и деление матриц справа налево. Первая операция записывается с помощью знака ' / ' , а вторая - ' \ '.
Операция В / A эквивалентна последовательности действий B * inv(A). Аналогично операция A\B равносильна совокупности операций inv(A)*B.
2.4 Функции, используемые для работы с векторами и матрицами
MatLAB включает различные функции для обработки элементов массивов. Это, в частности, функции, позволяющие вычислить сумму или произведение элементов массива,
отсортировать элементы массива заданным образом, отыскать максимальные и минимальные значения элементов массивов. Полный список функций обработки данных можно отобразить на экране с помощью команды help datafun.
Имеются также функции, предоставляющие информацию о размере и размерности
массива, о количестве элементов вектора и т.д.
Размер массива – функция size(А).
Количество элементов, из которых состоит вектор-строка или вектор-столбец –
функция length(В).
Сумма элементов вектора – функция sum(В), произведение элементов вектора –
функция prod(B).
Если в качестве аргумента функции sum (или функции prod) задана матрица, то
MatLAB выдаст вектор-строку, число элементов которой равно числу столбцов матрицы,
причем каждый из этих элементов является суммой (произведением) элементов соответствующего столбца.
По умолчанию суммирование и перемножение элементов массива с помощью функций sum и prod выполняется по столбцам. Чтобы выполнить соответствующие операции
для строк, указанные функции следует вызвать с двумя входными аргументами. Первым
из аргументов задается имя матрицы, вторым – номер индекса, по которому требуется
выполнить суммирование или перемножение: 1 – по столбцам (по умолчанию), 2 – по
строкам sum(A,2).
Упорядочить элементы вектора по возрастанию – функция sort(А).
Если аргументом этой функции является матрица, система упорядочивает в порядке
13
возрастания элементы каждого из ее столбцов. Чтобы упорядочить по возрастанию элементы строк матрицы, вторым аргументом данной функции нужно задать число 2:
sort(A,2).
Функцию sort можно задать и с двумя выходными аргументами. В результате в первый выходной аргумент будет записан упорядоченный массив, а во второй – массив индексов соответствия элементов заданного и упорядоченного массивов: [A1, ind]=sort(A,2).
Определение минимального и максимального элементов вектора – функции min(B) и
max(B).
В результате применения функций min и max к матрицам выводится вектор-строка,
состоящая из минимальных и максимальных элементов в соответствующих столбцах
матрицы.
Если требуется определить максимальные и минимальные элементы не в столбцах, а
в строках заданной матрицы - min(C,[],2), max(C,[],2)
РАЗДЕЛ 3. ГРАФИЧЕСКИЕ СРЕДСТВА MATLAB
3.1 Построение графиков функции одной переменной
Построение графиков в линейном масштабе
Строить графики в системе MatLAB можно даже при работе в “режиме калькулятора”.
В частности, для построения графика функции одной переменной необходимо выполнить следующие действия.
1. Задать вектор значений аргумента.
2. Вычислить вектор соответствующих значений функции.
3. Воспользоваться специальной функцией для вывода графика на экран.
Основной функцией, обеспечивающей построение графиков на экране дисплея, является
функция plot. В зависимости от входных аргументов функция plot позволяет строить один
или несколько графиков, изменять цвет и стиль линий и добавлять маркеры на каждый
график.
Общая форма обращения к ней:
plot(x1, y1, s1, x2, y2, s2,...).
Здесь x1, y1 - заданные векторы, элементами которых являются массивы
значений аргумента (х1) и функции (y1), отвечающие первой кривой графика; x2, y2 массивы значений аргумента и функции второй кривой и т.д. При этом предполагается,
что значения аргумента откладываются вдоль горизонтальной оси графика, а значения
функции - вдоль вертикальной оси.
Переменные s1, s2,... являются символьными (их указание не является обязательным). Любая из них может содержать до трех специальных символов, определяющих соответственно:
а) тип линии, которая соединяет отдельные точки графика;
б) тип точки графика;
в) цвет линии.
Если переменные s не указаны, то параметры устанавливаются по умолчанию.
Графики в MatLAB всегда выводятся в отдельное графическое окно. Когда вы выполняете первую графическую команду в сессии программы MatLAB, график отображается в новом окне Figure 1 (Изображение 1). Последующие графические команды либо
модифицируют, либо заменяют график в этом окне.
Графическое окно включает область графика, собственное меню и панель инструментов.
14
Построим график функции
y = 2*sin(x /2+π/2)
на промежутке от -4π до +4π с шагом π/100.
В командном окне последовательность операций будет выглядеть так:
>> x = -4*pi:pi/100:4*pi;
>> y = 2*sin(x/2+pi/2);
>> plot(x,y)
Для отображения линий сетки служит команда grid on, а для отключения — команда grid
off. Линии сетки в MatLAB соответствуют целым шагам измерения, что облегчает чтение
графика.
Вывод различных надписей на график производится с помощью функций xlabel (название горизонтальной оси), ylabel (название вертикальной оси), title (заголовок графика)
и text (надпись в заданном месте рисунка). При этом текстовые аргументы перечисленных функций всегда следует заключать в апострофы.
Если на одних осях строятся графики нескольких функций, то с помощью команды
legend на графике можно разместить легенду с информацией о линиях. Команда legend
задается с несколькими аргументами, число и порядок которых соответствуют линиям
графика. Для изменения местоположения легенды на графике нужно поместить на нее
указатель мыши, нажать ее левую кнопку и перетащить легенду на новое место. Чтобы
отредактировать легенду нужно дважды щелкнуть на ней мышью.
Команда text(x, y, ‘<текст>’) позволяет расположить указанный текст на поле графика, при этом начало текста помещается в точку с координатами x и y. Значения указанных
координат должны быть представлены в единицах величин, откладываемых по осям графика, и находиться внутри диапазона изменения этих величин. Часто это неудобно, так
как требует предварительного знания этого диапазона, что не всегда возможно.
Более удобно для размещения текста внутри поля графика использовать
команду gtext(‘<текст>’), которая высвечивает в активном графическом окне перекрестие, перемещение которого с помощью мыши позволяет указать место начала вывода
указанного текста. После этого нажатием левой клавиши мыши или любой клавиши текст
вводится в указанное местою. Пример оформления графика
>> grid on
>> title('Функция y = 2*sin(x /2+π/2))');
>> xlabel('x'); ylabel('y');
>> legend('1-й график')
Если далее, не закрывая графическое окно Figure 1, ввести команды для построения
другого графика функции, то он отобразится в этом же графическом окне вместо прежнего графика.
Если на одном графике необходимо построить две функции y(x) и z(x), то команда
plot будет иметь вид plot(x,y,x,z).
Вывести две (или несколько) кривые в одно окно можно также используя команду
hold on. После выполнения данной команды все графики будут выводиться в одно окно.
Отмерить этот режим можно командой hold off .
Если две функции имеют несопоставимые значения и их отображение в одном масштабе невозможно, в этом случае будет полезна функция plotyy, позволяющая отобразить
оба графика в одном окне с двумя вертикальными осями, каждая из которых имеет подходящий масштаб.
На экране цвет графика и цвет соответствующей ему оси ординат совпадают.
15
Если такой вариант не устраивает, можно построить графики в разных графических
окнах, воспользовавшись командой figure.
Это окно становится текущим, т.е. здесь будут отображаться все последующие графики
функций, если при их построении не использовать команду figure.
Для того чтобы сделать текущим графическое окно Figure 1, щелкните на нем мышью. После этого все вводимые команды будут вызывать изменения именно в этом окне.
При построении графиков можно установить параметры графических линий: цвет,
тип и толщину, просто добавляя третий аргумент в строку для каждой пары х-у. Этот аргумент заключается в апострофы и может состоять из трех символов, определяющих
цвет, тип маркера, помечающего точки на графике и тип линии.
Порядок следования символов в аргументе роли не играет. Если задать не все символы, будут использованы параметры, заданные по умолчанию. Если указан символ, определяющий тип маркера, но не указан символ для типа линии, на графике отобразятся
только маркеры, не соединенные между собой.
Изменить параметры графических линий можно и непосредственно в окне Figure 1,
использовав пункт меню Edit/Axes Properties…( Редактирование/ Свойства осей…) или
Edit/Figure Properties…( Редактирование/ Cвойства фигуры…)
Построение графиков в логарифмическом масштабе
Графики некоторых функций будут выглядеть лучше, если построить их в логарифмическом масштабе. В MatLAB для этого предусмотрены функции
semilogx, semi logy и loglog.
С помощью функции semilogx можно задать логарифмический масштаб только по оси
абсцисс, посредством функции semilogy— логарифмический масштаб только по оси ординат, а функция loglog позволяет задать логарифмический масштаб сразу по двум координатным осям.
Синтаксис этих функций аналогичен синтаксису функции plot: они принимают аргументы, заданные в виде пары векторов значений абсцисс и ординат.
Построение графиков в масштабе полярных координат
Для построения графика в масштабе полярных координат предназначена функция
polar.
Вывод нескольких графиков в одном окне
Графическое окно MatLAB можно разделить на несколько подокон и вывести в каждом из них график различных функций, используя процедуру subplot. Обращение к этой
процедуре должно предшествовать обращению к процедурам plot, loglog, semilogx и
semilogy и иметь такой вид:
subplot(m,n,p),
где m - указывает, на сколько частей разделяется графическое окно по вертикали, n - по
горизонтали, а р - номер подокна, в котором будет строиться график. При этом подокна
нумеруются слева направо построчно сверху вниз (так, как по строкам читается текст
книги).
Изменение масштаба графика
Обычно графики, получаемые с помощью процедур plot, loglog, semilogx и semilogy,
автоматически строятся в таких масштабах по осям, чтобы в поле графика поместились
все вычисленные точки графика, включая максимальные и минимальные значения аргумента и функции. Тем не менее, MatLAB имеет возможности установления и других режимов масштабирования. Это достигается за счет использования процедуры axis:
16
- axis([xmin xmax ymin ymax]) явное задание диапазонов изменения переменных по
осям координат.
- axis auto возврат к масштабу принятому по умолчанию.
- axis square устанавливает одинаковый диапазон изменения переменных по осям
графика.
- axis equal обеспечивает одинаковый масштаб по обоим осям графика.
Для получения более подробной информации о функции axis нужно выбрать команду
help axis.
3.2 Диаграммы и гистограммы
Наглядным способом представления векторных и матричных данных являются диаграммы и гистограммы. Значение элемента вектора пропорционально высоте столбика
диаграммы (в случае столбчатой диаграммы) или площади сектора диаграммы (для круговой диаграммы). Гистограммы используются для получения информации о распределении данных по заданным интервалам.
Столбцовые диаграммы
Для построения столбцовых диаграмм применяется функция bar.
Каждый элемент вектора представляется в виде столбца, высота которого пропорциональна его значению. При этом по оси абсцисс откладывается номер элемента, а по
оси ординат — его значение.
Если требуется построить график зависимости значений элементов вектора не от их
номеров, а от других величин, последние нужно задать в виде вектора с возрастающими
значениями.
Функцию bar можно также использовать для отображения содержимого матрицы в
виде столбцовой диаграммы.
В этом случае каждому элементу матрицы тоже соответствует один столбец с высотой, пропорциональной его значению, но для наглядности столбцы, относящиеся к одной
строке, сгруппированы и изображены разными цветами.
Если в качестве дополнительного аргумента функции bar задать число 1, столбцы на
графике, соответствующие одной группе, отобразятся без интервалов между ними
bar(DATA,1).
Задание числа, большего 1, приведет к отображению диаграммы с перекрывающимися столбцами внутри группы bar(DATA,1.5). (По умолчанию ширина столбца устанавливается равной 0.8.)
Если в качестве дополнительного аргумента функции bar задать строку 'stacked' (например, bar (DATA, ' stacked' )), можно построить диаграмму с накоплением, где каждая
группа элементов отображается в виде столбца, состоящего из нескольких частей. Число
этих частей равно числу элементов в группе, а их размер соответствует вкладу каждого
элемента в сумму внутри группы.
Кроме функции bar, в MаtLAB имеется функция barh, посредством которой строятся столбцовые диаграммы с горизонтальным расположением столбцов, а также функция
bаг3, предназначенная для создания трехмерных столбцовых диаграмм. Синтаксис этих
функций аналогичен синтаксису функции bar.
Круговые диаграммы
На основе круговой диаграммы легко определить, какой процент от суммы всех элементов массива составляет каждый конкретный элемент этого массива. Круговые диаграммы строятся с помощью функции pie.
Если сумма элементов вектора меньше 1, функция pie построит круговую диаграмму
17
с пропущенным сектором.
Для наглядности на круговой диаграмме можно отделить один или несколько секторов. Для этого нужно ввести дополнительный вектор, который по размеру равен вектору
со значениями, но состоит из нулей и единиц (причем единицы устанавливаются в позициях, соответствующих позициям отделяемых элементов в векторе значений). Этот дополнительный вектор нужно задать в качестве второго аргумента функции pie.
Помимо функции pie, существует функция piе3, позволяющая строить трехмерные круговые диаграммы. Ее синтаксис аналогичен синтаксису функции pie.
Гистограммы
Обработка данных включает вопрос о том, сколько данных попало в тот
или иной интервал. Для получения наглядного представления о распределении данных
служит функция hist.
Пример
>> x=randn(10000,1);
>> hist(x)
Если задать приведенные выше команды, то система выполнит следующие действия.
1. Сгенерирует с помощью функции randn вектор, состоящий из 10 000 случайных чисел, распределенных по нормальному закону.
2. По умолчанию разобьет интервал, которому принадлежат эти числа, на десять равных
подинтервалов.
3. Вычислит количество чисел, попавших в тот или иной подинтервал.
4. Построит гистограмму попадания случайных чисел в каждый из десяти интервалов
Если интервал, которому принадлежат числа, требуется разбить на большее количество подинтервалов, это количество нужно задать вторым входным аргументом функции
hist. Например, чтобы выполнить разбиение интервала на 20 подинтервалов - hist(x,20).
3.3 Трехмерная графика
Построение трехмерных линий
Рассмотрим основные возможности высокоуровневой графики системы MATLAB,
которые касаются построения графиков функций двух переменных (трехмерных линий,
поверхностей в пространстве и линий уровня).
Аналогично процессу построения графика функции одной переменной, создание
графиков функций двух переменных включает следующие основные этапы.
1. Задание массивов значений аргумента (в частности, формирование массивов,
хранящих информацию о координатах узлов сетки на области определения функции).
2. Вычисление массива соответствующих значений функции.
3. Вызов специальной функции для вывода графика на экран.
4. Отображение на графике дополнительной информации (название графика, заголовки осей, соответствие цветов значениям функции, изменение палитры цветов и т.д.).
Построение трехмерных линий
Трехмерным аналогом функции plot является функция plot3, которая позволяет создавать трехмерные линии. Если имеются три вектора х, у и z одинаковой длины, то в результате задания функции
plot3(x,y,z)
программа MATLAB построит трехмерную линию, координаты которой соответствуют
элементам векторов х, у и z, и выполнит ее проектирование на плоскости, отобразив соответствующий график.
Функция plot3, так же как и функция plot, принимает дополнительный аргумент, за18
дающий параметры графической линии (такие как цвет, тип линии и тип маркера, помечающего точки на графике).
Если в качестве входных аргументов функции plot3 задать не векторы, а матрицы Х,
Y и Z одинаковых размеров, то данная функция отобразит целый набор линий в пространстве, количество которых будет соответствовать числу столбцов матриц.
Каркасные поверхности
Для построения каркасных поверхностей применяется функция mesh(X,Y,Z).
Линии построенной поверхности окрашены в разные цвета. Эти цвета соответствуют
значениям функции. По умолчанию более высоким значениям функции соответствуют
оттенки красного цвета, а более низким - синего.
Чтобы сделать “прозрачной” каркасную поверхность, отобразив ее скрытые части,
применяется команду hidden off. Отменить "прозрачность" можно с помощью команды
hidden on.
Если к имени функции mesh добавить букву с, то можно построить каркасную поверхность с линиями уровня функции, спроектированными на плоскость ху.
Применение функции meshz позволяет изобразить каркасную поверхность с перпендикулярами, опущенными из граничных точек поверхности на плоскость xу.
Закрашенные поверхности
С помощью функции surf можно построить каркасную поверхность, каждая клетка
которой закрашивается определенным цветом. В данном случае линии поверхности отображаются черным цветом, а цвет каждой клетки зависит от значения функции в некоторой характерной точке этой клетки.
Функцию surf также можно вызывать с тремя входными аргументами.
Применив одну из следующих команд, можно изменить вид закрашенной поверхности:
shading flat - скрыть отображение линий поверхности;
shading interp - скрыть отображение линий поверхности и сгладить цвета между соседними элементами поверхности;
hading faceted - вернуться к виду поверхности, заданному по умолчанию.
Если вместо функции surf применить функцию surfc(X,Y,Z), то можно построить закрашенную поверхность с линиями уровня, спроектированными на плоскость ху.
Создание контурных графиков
Для построения контурных графиков в MATLAB предусмотрены такие функции, как
contour, contourf и contour3. С их помощью строятся так называемые линии уровня, или
изолинии.
Например, с помощью функции contour можно построить проекции линий уровня на
плоскости ху. Данная функция имеет несколько вариантов вызова. Если обратиться к ней
с тремя входными аргументами contour(X,Y,Z) получится график изолиний.
Для того чтобы такой график стал более информативным, нужно возле каждой линии уровня отобразить значение, которое соответствует значению функции. Для этого
используется функция сlabel (С , h). При вызове данной функции ей нужно задать два
входных параметра - матрицу С, содержащую информацию о линиях уровня, и указатель
h на график, где отображаются эти линии уровня. Требуемые для функции clabel параметры автоматически генерирует функция contour, если се вызвать с двумя выходными
аргументами С и h.
Использование функции contourf (X,Y,Z) позволяет заполнить разными цветами
19
промежутки между изолиниями. Для построения изолиний в пространстве применяют
функцию contour3.
Задав четвертым входным аргументом функций contour и contour3 скалярное значение, можно указать программе количество уровней, для которых следует построить изолинии. По умолчанию количество уровней выбирается автоматически.
Аналоги всех рассмотренных выше функций для построения трехмерных графиков
можно найти в раскрывающемся списке кнопки для создания графиков, находящейся на
панели инструментов окна Workspace (Рабочее пространство). Выберите в окне Workspace одну из переменных, в которой хранятся исходные значения для построения трехмерного изображения. Затем щелкните на кнопке со стрелкой, находящейся на панели
инструментов этого окна рядом с кнопкой с изображением графика. В раскрывшемся
списке щелкните на элементе More Plots (Другие графики), после чего раскроется диалоговое окно Plot Catalog (Каталог графиков). В списке Categories (Категории) данного окна
выберите подходящий элемент, а в списке Plot Types (Типы графиков) — требуемую
функцию. После этого в Plotted Variables (Отображаемые переменные) введите через запятую все переменные, в которых хранятся исходные значения для построения трехмерного изображения, и щелкните на кнопке Plot в этом окне, чтобы вывести график на экран.
Для установки дополнительных параметров трехмерных графиков подходят многие
функции, которые применяются для задания параметров двухмерных графиков. В частности, можно использовать такие функции, как xlabel, ylabel, zlabel (выводит название
оси х, y или z), title (добавляет заголовок графика).
Параметры масштабирования осей трехмерного графика так же, как и в случае двухмерного графика, можно задать с помощью функции axis, которую теперь следует вызвать в следующем виде
axis ([xmin xmax ymin уmах zmin zmax])
Чтобы разместить несколько трехмерных графиков в одном графическом окне, используется функция subplot.
Если требуется определить координаты какой-либо точки на графике, щелкните на
панели инструментов Figure (График) графического окна на кнопке Data Cursor (Указатель данных), а затем щелкните на интересующей вас точке графика. Программа отобразит небольшое окошко, в котором будут показаны координаты данной точки.
Панель инструментов Figure (График) можно отобразить, выбрав в графическом окне
команду View\Figure Toolbar (Вид\Панель инструментов График).
Помимо этого, возможно изменение и других параметров трехмерных графиков, в
частности положения точки обзора, параметров цветовой палитры, параметров освещенности и расположения камеры.
Управление точкой обзора
Все трехмерные графики, которые мы строили до сих пор, можно было увидеть
лишь из одной точки обзора. Иными словами, оси координат х, у и z на изображении всегда были повернуты одинаково. Однако в MATLAB имеется возможность, изменяя точку
обзора, рассмотреть созданное изображение с разных сторон.
Точка обзора — это позиция, с которой мы видим трехмерное изображение. Точка
обзора характеризуется двумя параметрами (рис. 8.15): азимутом (Az) и углом возвышения (Еl).
Азимут определяет угол поворота вокруг оси z и отсчитывается от оси, противоположной у, в направлении против часовой стрелки. А угол возвышения — это угол между
20
отрезком, направленным из начала координат в точку обзора, и плоскостью ху. При этом
расстояние от точки обзора до изображения не учитывается.
При построении трехмерных графиков с помощью таких функций, как mesh и surf,
по умолчанию MATLAB устанавливает следующие значения азимута и угла возвышения:
Az=-37,5° и Е1=30°.
Функция view позволяет изменить положение точки обзора. Она допускает несколько способов вызова. В частности, возможны следующие варианты обращения
view(Az, El), view([х, у, z]), view(2).
В первом случае входными аргументами этой функции являются значения азимута и
угла возвышения, а во втором - декартовы координаты точки обзора. Третий вариант обращения позволяет вернуться к значениям азимута и угла возвышения, принятым по
умолчанию для двухмерных (Az=0°, Е1=90°) и трехмерных изображений (Az=-37,5°,
Еl=30°) соответственно.
Альтернативным (и более простым) способом изменения точки обзора в MATLAB
является использование специальной кнопки на панели инструментов Figure (График)
графического окна. Если в графическом окне отображается трехмерный график, эта
кнопка имеет название Rotate 3D (Вращать трехмерное изображение).
Изменение цветовой палитры
Чтобы установить точное соответствие между цветом, отображенным на трехмерном
графике, и значением функции, можно воспользоваться командой colorbar, после вызова
которой рядом с графиком появляется столбик с текущей цветовой палитрой и цифрами,
определяющими значения функций.
Этой команде соответствует кнопка Insert Colorbar (Добавить цветовую палитру) на
панели инструментов Figure графического окна.
Изменить цветовую палитру можно также с помощью функции colormap (название
палитры).
С помощью команды colormap (' default') можно вернуться к палитре, используемой по
умолчанию.
Установка параметров освещенности объекта
Еще большей реалистичности в изображении трехмерных объектов можно добиться,
задав параметры освещенности для объекта.
Построить освещенную поверхность можно с помощью функции surf1, которая
"предполагает", что в пространстве расположен некоторый источник света, освещающий
поверхность. На графиках, построенных с помощью данной функции, более освещенные
участки поверхности изображаются красным цветом, а менее освещенные - синим. Более
естественно такие поверхности выглядят, если заменить заданную по умолчанию палитру
цветов такими палитрами, как gray, copper, pink и задать сглаживание цветов на графике с
помощью команды shading interp.
По умолчанию источник света имеет следующие координаты: значение азимута
Az=7,5° и угол возвышения Е1=30°.Положение источника света можно изменить, задав
дополнительным входным аргументом функции surfl вектор, включающий новые значения азимута и угла возвышения surfl(X,Y,Z,[40, 40]). Создать источник света можно и
другим способом— с помощью функции сamlight.
Многократное применение функции camlight с разными аргументами позволяет создать несколько источников света, расположенных в разных местах.
В жизни вид освещенной поверхности во многом зависит от материала поверхности. В
MATLAB управлять свойствами материала, из которого создана поверхность, позволяет
21
функция material. Однако результаты вызова этой функции будут видны только после освещения поверхности источником света.
Работа с камерой
Программа MATLAB позволяет рассмотреть трехмерный объект, изображенный в графическом окне, не только с разных сторон, но с различного расстояния, как бы через объектив воображаемой фотокамеры. Можно приближать и удалять трехмерные изображения,
перемешать и вращать их относительно разных координатных осей, т.е. делать с ними все
то, что возможно было бы проделать с реальным объектом, держа в руках фотокамеру.
Реализовать перечисленные возможности позволяет специальная панель инструментов графического окна, которая называется Camera (Камера).
Все команды панели инструментов Camera продублированы в контекстном меню,
которое можно открыть, щелкнув на изображении правой кнопкой мыши.
Движение точки по траектории
При решении некоторых задач требуется построить траекторию движения точки на
плоскости или в пространстве, а иногда и проследить за ее движением по этой траектории.
Для построения траектории точки, которая движется на плоскости, в MATLAB предусмотрена функция comet. А построить траекторию точки, движущейся в пространстве,
позволяет функция comet3.
Интерактивное редактирование графиков
Редактирование графиков в MATLAB проще всего выполнить с помощью меню и
панелей инструментов графического окна. С помощью этих инструментов можно быстро
и легко изменить вид графика, настроить те или иные параметры форматирования (изменить свойства осей, линий, поверхностей, заголовка, подписей и т.д.). Это очень удобно
при работе с небольшим количеством графиков.
При создании серьезных программ в MATLAB интерактивных средств редактирования графиков будет недостаточно. В этом случае нужно обратиться к средствам дескрипторной графики MATLAB, которая позволяет получить доступ к свойствам всех графических объектов с помощью специальных функций. При этом все свойства графика задаются в процессе создания программы, а не устанавливаются вручную после отображения
графика на экране. Однако для того чтобы использовать средства дескрипторной графики, нужно изучить основы объектно-ориентированного программирования.
Сохранение, экспорт и печать графиков
Чтобы сохранить графическое окно MatLAB, выберите команду Save (Сохранить)
или Save As (Сохранить как) в меню File (Файл) данного окна.
Чтобы вывести график из графического окна (фигуры) на печать, выберите команду
Print (Печать) в меню File (Файл) данного окна.
РАЗДЕЛ 4. СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ M-ФАЙЛОВ В MATLAB
4.1 Типы m-файлов
M-файлом называется текстовый файл с расширением .m, содержащий набор инструкций на языке системы MatLAB.
В MatLAB существует два типа m-файлов:
- файл-программы (Script M-Files);
- файл-функции (Function M-Files).
Файл-программы (их также называют скриптами или сценариями) являются
самым простым типом m-файлов, так как просто состоят из последовательности команд и не имеют входных и выходных аргументов. Файл-программы полезны для ав22
томатизации выполнения большого набора инструкций.
В файл-функциях описываются функции, определяемые пользователем. В отличие от файл-программ, файл-функции могут принимать исходные данные в виде набора входных параметров и выдавать результаты в виде набора выходных значений.
Основное различие между файл-программами и файл-функциями состоит в
работе с переменными. Файл-программы работают только с переменными рабочего
пространства и не имеют локальных переменных. (Т.е. все переменные, определенные
в файл-программе, после ее выполнения становятся доступны в рабочем пространстве
и могут быть использованы в других файл-программах или командах, вводимых в командной строке, аналогично, в файл-программе могут быть использованы все переменные, уже определенные в командном окне.) Таким образом, рабочее пространство
становится общим для всех файл-программ, используемых в данном сеансе работы с
MATLAB. А это означает, что при выполнении нескольких файл-программ необходимо следить за тем, чтобы общие переменные в них были согласованы.)
Все переменные, используемые внутри файл-функции, а также определенные в качестве ее входных и выходных аргументов, воспринимаются программой как локальные.
Они доступны только в теле данной файл-функции. Переменные, используемые в файлфункциях, являются полностью изолированными от рабочего пространства системы
MATLAB.
4.2 Файл-программы
Создание m-файлов
Чтобы создать файл-программу необходимо выполнить следующие действия:
- в главном меню MatLAB выбрать команду File\New\M-file (Файл\Новый\М-файл),
в результате чего раскроется окно редактора m-файлов.
- в этом окне ввести последовательность команд.
- сохранить файл-программу: File\Save as (Файл\Сохранить как).
Рассмотрим основные особенности записи текста программы (М-файла)
языком MatLAB.
1. Обычно каждый оператор записывается в отдельной строке текста программы.
Признаком конца оператора является символ (он не появляется в окне) возврата каретки и
перехода на следующую строку, который вводится в программу при нажатии клавиши
<Enter>, т. е. при переходе на следующую строку.
2. Можно размещать несколько операторов в одной строке. Тогда предыдущий оператор этой строки должен заканчиваться символом ' ; ' или ' , '.
3. Можно длинный оператор записывать в несколько строк. При этом предыдущая
строка оператора должна заканчиваться тремя точками (' ... ').
4. Если очередной оператор не заканчивается символом ' ; ', результат его
действия при выполнении программы будет выведен в командное окно. Чтобы
предотвратить вывод на экран результатов действия оператора программы, запись этого
оператора в тексте программы должна заканчиваться символом ' ; '.
5. Строка программы, начинающаяся с символа ' % ', не выполняется. Эта
строка воспринимается системой MatLAB как комментарий. Таким образом, для ввода
комментария в любое место текста программы достаточно начать соответствующую
строку с символа ' % '.
6. Строки комментария, предшествующие первому выполняемому оператору программы, т. е. такому, который не является комментарием, воспринимаются системой
MatLAB как описание программы. Именно эти строки выводятся в командное окно, если
23
в нем набрана команда
help <имя файла>
7. В программах на языке MatLAB отсутствует символ окончания текста программы.
8. В языке MatLAB переменные не описываются и не объявляются. Любое новое
имя, появляющееся в тексте программы при ее выполнении, воспринимается системой
MatLAB как имя матрицы. Размер этой матрицы устанавливается при предварительном
вводе значений ее элементов либо определяется действиями по установлению значений
ее элементов, описанными в предшествующих операторах или процедуре.
4.3 Создание файл-функций
Выполнить созданную файл-программу можно одним из следующих способов:
- в редакторе m-файлов выбрать команду Debug\Run (Отладка\ Запуск), щелкнуть
на кнопке Run панели инструментов либо нажать клавишу <F5>;
- ввести имя m-файла (без расширения!), содержащего файл-программу, в командную строку и нажать клавишу <Enter>.
При работе с редактором m-файлов имеется возможность запустить на выполнение
только часть команд, из которых состоит m-файл. Для этого нужно выделить с помощью
мыши требуемый блок команд и выбрать команду Text\Evaluate selection
(Текст\Выполнить выделенный фрагмент) либо нажать клавишу <F9>.
При вызове файл-программы из командной строки MatLAB прежде всего проверяет,
не является ли введенное имя файл-программы именем одной из переменных рабочего
пространства. Если данное имя отсутствует в списке переменных, MatLAB проверяет, нет
ли встроенной функции с таким именем. Не найдя ни переменной, ни функции с заданным именем, система переходит к поиску m-файла, который имеет данное имя. Найдя mфайл, программа выполняет его, иначе выводит сообщение об ошибке.
После выполнения файл-программы в рабочем пространстве становятся доступны
все переменные, которые были в ней определены.
Чтобы результаты М-файла-сценария были воспроизводимы, сценарий должен быть
автономным, независимым от других переменных, которые вы можете задать где-либо в
течение сессии программы MATLAB, оставшаяся от предыдущих вычислений графика
должна быть также удалена.
Для этого можно ввести строку clear all в начало М-файла-сценария, чтобы быть уверенным, что предыдущие настройки переменных не повлияют на результаты. Можно
также ввести строку close all в начале М-файла-сценария, создающего графику, чтобы закрыть все окна изображений и начать «с чистого листа».
Редактирование файл-программ
Если вы захотите изменить созданный m-файл, внесите соответствующие изменения
в текст программы, сохраните эти изменения и вновь запустите файл-программу.
4.3 Файл-функции
Создание файл-функций
Файл-функции отличаются от файл-программ тем, что имеют входные и выходные
параметры. При этом можно создавать файл-функции:
- с одним входным и одним выходным параметром
- c несколькими входными или выходными параметрами
- с переменным числом входных и выходных параметров.
Все переменные, используемые в файл-функциях, являются изолированными от рабочего пространства системы MatLAB, что позволяет реализовывать с помощью файл24
функций независимые фрагменты кода для решения конкретных задач.
Файл-функции, так же как и файл-программы состоят из набора команд на языке
системы MatLAB и сохраняются в текстовых файлах с расширением .m, однако имеют
несколько другой синтаксис.
Файл-функция всегда должна состоять из следующих частей:
- заголовок функции. Включает объявление function, имя функции, а также список
входных и выходных параметров.
- тело функции. Состоит из инструкций на языке MatLAB , позволяющих вычислить
значение функции.
Сохранение файл-функций
Введя файл-функцию, сохраните ее в текущем рабочем каталоге. Для этого выполните следующее.
В окне редактора m-файлов выберите команду File\Save as (Файл\Сохранить как).
(Файл\Сохранить как). Раскроется диалоговое окно Save file as, где по умолчанию отобразится подкаталог work основного каталога MatLAB.
В полях File name (Имя файла) и Files of type (Тип файла) аналогового окна Save file
as автоматически появятся требуемые имя и тип файл-функции. Не изменяйте содержимое этих полей!
Имя m-файла, в котором хранится файл-функция, обязательно должно совпадать с
именем функции.
Каталог, в котором содержатся файл-функции, должен быть текущим, или путь к нему должен быть добавлен в пути поиска, иначе MATLAB просто не найдет функцию или
вызовет вместо нее другую с тем же именем (если она находится в каталогах, доступных
для поиска).
Узнать, какой каталог является текущим, можно в поле Current Directory, отображаемом на панели инструментов главного окна MATLAB. По умолчанию текущим является
каталог work основного каталога MATLAB. Содержимое текущего каталога можно увидеть в окне Current Directory.
Чтобы изменить текущий каталог, введите путь к новому каталогу в поле Current Directory либо выберите его в раскрывающемся списке этого поля. Или же щелкните на
кнопке Browse for folder (Найти папку), справа от поля Current Directory, и отыщите нужную папку в раскрывшемся диалоговом окне Обзор папок. Альтернативным способом узнать, какой каталог рабочего каталога является текущим, можно, введя в командную
строку команду pwd (либо команду cd без аргументов).
Ввод команды cd с аргументом, описывающим путь к какому-либо каталогу, позволяет объявить этот каталог текущим.
Чтобы установить пути поиска для других каталогов, в которых хранятся m-файлы,
используется диалоговое окно Set Path (Установить путь), вызываемое командой File\Set
Path главного меню MATLAB.. Чтобы создать путь поиска для какого-либо каталога,
щелкните в данном окне на кнопке Add Folder (Добавить папку) и в раскрывшемся диалоговом окне Обзор папок выберите нужный каталог или создайте таковой, если его не существует. Кнопка Add with subfoiders (Добавить с дочерними папками) позволяет добавить требуемый каталог в путь поиска, включая все его подкаталоги.
Выполнение файл-функций
Созданную файл-функцию можно использовать как в командном режиме (аналогично любой встроенной функции MATLAB), так и вызывать из других файл-программ или
файл-функций. При вызове файл-функции нужно указать все ее входные и выходные па25
раметры.
При вызове файл-функции MATLAB проверяет, относится ли се имя к какой-либо
переменной, встроенной функции либо к m-файлу в текущем рабочем каталоге или в каталоге, установленном в пути поиска. И если объект с таким именем уже есть, то будет
выполнен именно он. Поэтому чтобы не возникло путаницы, файл-функциям, как и файлпрограммам, следует назначать уникальные имена.
Внесение изменений в текст файл-функции без сохранения файла — часто распространенная ошибка начинающих пользователей. Если файл не сохранен, то, как не сложно
убедиться, будет вычисляться старая функция. О том, что файл изменен и не сохранен,
свидетельствует звездочка в заголовке окна редактора рядом с именем редактируемого
файла.
Файл-функции с несколькими входными и выходными аргументами
Если функция имеет несколько выходных параметров (т.е. возвращает несколько
значений), их указывают в квадратных скобках через запятую после объявления function.
При этом структура функции будет иметь следующий вид.
function [yl, у2, ..., уn] = Имя_функции (Список входных параметров) % Комментарий
у1=выражение
у2 = выражение
yn=выражение
А вызвать такую функцию можно следующим образом
[yl, у2, ..., уn] = Имя_функции(Список входных параметров)
Разновидности функций
Иногда при написании файл-функции требуется создавать так называемые подфункции, в которых выполняются промежуточные вычисления.
Использование подфункций основано на выделении части алгоритма в самостоятельную функцию, текст которой содержится в том же файле, что и основная функция.
function simple;
% Основная функция
fl = f(1.1, 2.1)
fl = f(3.1, 4.2)
fl = f(-2.8, 0.7)
function z=f(x,y);
% Подфункция
z = x^3 - 2*y^3 + 3*(x^2 + y^2) - x*y + 9;
Первая функция simple является основной функцией в simple.m, именно ее операторы выполняются, если пользователь вызывает simple, например, из командной строки.
Каждое обращение к подфункции f в основной функции приводит к переходу к размещенным в подфункции операторам и последующему возврату в основную функцию.
Файл-функция может содержать одну или несколько подфункций со своими входными и выходными параметрами, но основная функция может быть только одна. Заголовок новой подфункции одновременно является признаком конца предыдущей. Основная
функция обменивается информацией с подфункциями только при помощи входных и выходных параметров. Переменные, определенные в подфункциях и в основной функции,
являются локальными, они доступны в пределах своей функции.
Один из возможных вариантов использования переменных, которые являются общими для всех функций М-файла, состоит в объявлении данных переменных в начале ос26
новной функции и подфункции как глобальных, при помощи global со списком имен переменных, разделяемых пробелом
function simple2;
% Основная функция
global ALP BET
ALP =5.3;
BET = 9.1;
fl = f(1.1, 2.1)
function z=f(x,y);
% Подфункция
global ALP BET
z = x^3 - 2*y^3 + 3*(x^2 + y^2) - x*y + 9+ALP*BET;
Отметим, что лучшим способом обмена переменными между основной функцией и подфункциями является передача их в параметрах подфункции. Значение глобальных переменных может быть случайно изменено в рабочей среде или при вызове другой файлпрограммы или файл-функции, которая обращается к одноименным глобальным переменным.
Режим ячейки
М-файл - сценарий можно разделять на части (фрагменты) и работать с каждым
фрагментом по отдельности (в пошаговом режиме), что облегчает процесс редактирования и тестирования программы. В качестве фрагментов удобно задавать блоки программы, выполняющие отдельные задачи.
Чтобы обозначить блок программы как фрагмент, поместите курсор в том месте программы, где вы хотите начать новый фрагмент, и выполните одно из следующих действий:
- выберите команду Cell\Insert Cell divider (Фрагмент\Вставить разделитель фрагментов);
- щелкните на кнопке Insert cell divider на панели фрагментов;
- введите символы %% и нажмите клавишу <Enter>.
В результате программа вставит новую строку, начинающуюся символом фрагмента
(%%). Текст, который вы введете в эту строку после символов %%, будет считаться заголовком фрагмента и при выполнении программы будет игнорироваться.
Фрагмент включает строки кода до следующего символа %%. При щелчке мышью
на блоке программы, обозначенном в качестве фрагмента, он выделяется желтым цветом.
В режиме фрагментов появляется дополнительная панель, содержащая ряд инструментов для работы с фрагментами программы.
РАЗДЕЛ 5. ОПЕРАТОРЫ УПРАВЛЕНИЯ ВЫЧИСЛИТЕЛЬНЫМ
ПРОЦЕССОМ
В MatLAB, как и в любом языке программирования, имеются специальные управляющие конструкции, которые позволяют задавать последовательность выполнения команд в программах. К специальным операторам управления относятся:
- операторы цикла for и while
- условный оператор if
- переключатель switch…case
- конструкция try…catch
- операторы break, continue и return.
Такие операторы можно использовать как в файл-программах, так и в файл27
функциях.
5.1 Операторы управления
Оператор условного перехода
Конструкция оператора перехода по условию в общем виде такова:
if <условие>
<операторы1>
else
<операторы2>
end
Работает оператор так. Сначала проверяется, выполняется ли указанное условие. Если
оно выполнено, программа выполняет совокупность <операторов1>. Если условие не выполнено, выполняется последовательность <операторов2>.
Сокращенная форма условного оператора имеет вид:
if <условие>
<операторы>
end
Действие оператора в этом случае аналогично, за исключением того, что при невыполнении заданного условия выполняется оператор, следующий за оператором end.
В качестве условия используются выражения типа:
<имя переменной1> <операция сравнения> <имя переменной2>
Условие может быть составным, т. е. состоять из нескольких простых условий, объединенных знаками логических операций.
Знаками логических операций в языке MatLAB являются:& - логическая операция “И”
(“AND”); | - логическая операция “ИЛИ” (“OR”); ~ - логическая операция “НЕТ” (“NOT”).
Допустима еще одна конструкция оператора условного перехода:
if <условие1>
<операторы1>
elseif <условие2>
<операторы2>
elseif <условие3>
<операторы3>
...
else
<операторы>
end
Оператор elseif выполняется тогда, когда <условие1> не выполнено. При
этом сначала проверяется <условие2>. Если оно выполнено, выполняются <операторы2>, если же нет, <операторы2> игнорируются, и происходит переход к следующему оператору elseif, т. е. к проверке выполнения <условия3>. Аналогично, при выполнении его выполняются <операторы3>, в противном случае происходит переход к следующему оператору elseif. Если ни одно из условий в операторах elseif не выполнено выполняются <операторы>, размещенные за оператором else. Так может быть обеспечено разветвление программы по нескольким направлениям.
Оператор переключения
Оператор переключения имеет такую структуру:
switch <выражение, скаляр или строка символов>
case <значение1>
28
<операторы1>
case <значение2>
<операторы2>
...
otherwise
<операторы>
end
Он осуществляет разветвление вычислений в зависимости от значений некоторой переменной или выражения, сравнивая значение, полученное в результате вычисления выражения в строке switch, со значениями, указанными в строках со словом
case. Соответствующая группа операторов case выполняется, если значение выражения
совпадает со значением, указанным в соответствующей строке case. Если значение выражения не совпадает ни с одним из значений в группах case, выполняются операторы, которые следуют за словом otherwise.
Операторы цикла
В языке MatLAB есть две разновидности операторов цикла - условный и
арифметический.
Оператор цикла с предусловием имеет вид:
while <условие>
<операторы>
еnd
Операторы внутри цикла выполняются лишь в случае, если выполнено условие, записанное после слова while. При этом среди операторов внутри цикла обязательно должны быть такие, которые изменяют значения одной из переменных, указанных в условии
цикла.
Арифметический оператор цикла имеет вид:
for <var> = <НЗ> : <Ш> : <КЗ>
<операторы>
end,
где < var > - переменная цикла, которая при каждом повторении цикла изменяется от начального значения <НЗ> до конечного значения <КЗ> с шагом <Ш>.
В этом случае <операторы> внутри цикла выполняются несколько раз (каждый раз
при новом значении управляющей переменной) до тех пор, пока значение управляющей
переменной не выйдет за пределы интервала между <НЗ> и <КЗ>. Если параметр <Ш>
не указан, по умолчанию его значение принимается равным единице.
При программировании в MatLAB рекомендуется избегать использования циклов,
т.к. многие операции будут выполняться быстрее, если вместо циклов использовать поэлементные операции.
В MatLAB предусмотрены специальные операторы, позволяющие избежать ошибок
в программах. Например, управляющая конструкция try.. . catch позволяет распознать
различные ситуации, которые могут привести к сбою в программе, и если они случаются
— выполнить необходимые действия для предотвращения проблем. Оператор return
служит для досрочного завершения работы файл-функции и выхода из нее, а оператор
break может использоваться для досрочного выхода из циклов for и while.
Операторы прерывания
Чтобы досрочно выйти из цикла (например, при выполнении некоторого условия)
применяют оператор break. Когда программа сталкивается с этим оператором, выполне29
ние цикла досрочно прекращается, и начинает выполняться оператор, следующий за словом end цикла.
Если оператор break применяется во вложенном цикле, то он осуществляет выход
только из внутреннего цикла. Вне циклов for и while оператор break не работает. В этом
случае нужно использовать оператор return. Он предназначен для возврата в вызывающую функцию или в режим работы с клавиатурой.
В MatLAB имеется также оператор continue, который позволяет перейти к следующей итерации в циклах for и while, игнорируя все операторы, которые следуют за ним в
теле цикла. Причем если этот оператор встречается во вложенном цикле, то осуществляется переход к следующей итерации основного цикла.
Применение конструкции управления try...catch
Какой бы идеальной ни казалась созданная вами в MatLAB программа, все равно могут существовать условия, при которых возможно возникновение ошибок. В MatLAB
предусмотрена специальная конструкция управления, которая поможет корректно выйти
из нежелательных ситуаций.
Если в программе имеются команды, выполнение которых может привести к ошибочным результатам, поместите эти команды в конструкцию управления try. . .catch, называемую также "перехватчиком" исключительных ситуаций.
Управляющая конструкция try . . . catch имеет такой синтаксис.
try
Инструкции1
catch
Инструкции2
end
Она работает следующим образом. При обычных условиях выполняется только блок
команд Инструкции1. Но если при попытке выполнения этого блока возникает какаялибо исключительная ситуация (например, программа не может отыскать файл, к которому задано обращение, либо невозможно выполнение арифметической операции с заданными значениями), управление переходит к группе команд Инструкции2. В блоке Инструкции2 обычно задаются команды, которые нужно выполнить при возникновении
ошибки в блоке Инструкции1. Это может быть либо вывод на экран предупреждающего
сообщения, связанного с ошибкой в блоке команд Инструкции1, либо команды, позволяющие обойти данную ошибку и перейти к выполнению дальнейших действий и программе.
Обычно не часто возникают ситуации, в которых нужно использовать конструкцию
try. . . catch, но для повышения надежности программы она не помешает (а вреда она в
любом случае не принесет).
5.2 Диалоговые программы
Часто приходится создавать программы, которые способны не просто выполнять какие-либо команды и выдавать результаты, но и обмениваться информацией с пользователем в процессе работы. На определенном этапе такая программа может прервать свою
работу и выдать запрос пользователю, а ее дальнейшее поведение — например, продолжить или прекратить вычисления — будет зависеть от введенного пользователем ответа
на этот запрос. Интерактивное взаимодействие пользователя с программой реализуется
путем создания интерфейса с помощью командной строки.
Для организации диалога с программой в MatLAB существуют специальные команды.
30
Функция input позволяет вывести в командном окне запрос пользователю и получить
от него ответ. Формат ее вызова таков.
x=input('запрос')
В ответ на запрос, выданный программой, пользователь может ввести с клавиатуры
числовое значение либо любое допустимое в MatLAB выражение, которое будет вычислено на основе текущих переменных рабочего пространства и возвращено как значение
функции input. Это значение в дальнейшем может быть использовано в других операторах данной программы.
Если функцию input вызвать в формате
x=input('запрос', 's')
то значение, введенное пользователем в ответ на запрос, будет интерпретироваться как
строка символов.
Если в текст запроса ввести символы \n, курсор будет перемещен на следующую
строку. Таким образом, можно задать приглашение, состоящее из нескольких строк.
Функция disp имеет формат вызова
y=disp(Выражение)
и служит для вывода в командное окно результатов вычислений либо текстовых сообщений. При ее использовании результат не присваивается ни переменной ans, ни какой-либо
другой переменной. Входным аргументом функции disp может быть массив значений,
выражение MatLAB, текстовая строка (текстовые значения следует заключать в одинарные кавычки).
Особенностью этой команды является то, что аргумент у нее может быть
только один. Поэтому невозможно без специальных мер осуществить вывод нескольких
переменных и, в особенности, объединение текста с численными значениями некоторых
переменных, что часто необходимо для удобного представления информации.
Для устранения этого недостатка используют несколько способов.
Чтобы вывести значения нескольких переменных в одну строку (например, при создании таблиц данных), нужно создать единый объект, который содержал бы все эти значения. Это можно сделать, объединив соответствующие переменные в вектор, пользуясь
операцией создания вектора-строки:
x = [x1 x2 ... x].
Тогда вывод значений нескольких переменных в одну строку будет иметь вид:
disp ([x1 x2 ... x]).
Сложнее объединить в одну строку текст и значение переменных, что часто бывает
необходимо. Трудности возникают потому, что нельзя объединять текстовые и числовые
переменные, так как они являются данными разных типов.
Одним из путей преодоления этого препятствия есть перевод числового значения
переменной в символьную (текстовую) форму. Для этого используется функция num2str,
которая осуществляет такое преобразование. Запись:
y = num2str(x)
превратит числовое значение переменной "х" в текстовое представление. При
этом форма представления определяется установленным режимом вывода чисел на экран
(Numeric Format
Если Т - текстовая переменная, или некоторый текст, а Х – числовая переменная, то
вывод их в одной строке можно обеспечить обращениям
disp ([T num2str(X)])
Другим средством достижения того же результата есть использование функции
31
sprintf. Обращение к ней имеет вид:
Y = sprintf (‘<текст1> %g <текст2>’, X)
В результате получается текстовая строка Y, состоящая из текста, указанного в
<текст1>, и значения числовой переменной Х в соответствия с форматом %g, причем
текст из фрагмента <текст2> располагается после значения переменной Х.
Эту функцию можно использовать в команде disp в виде:
disp (sprintf (‘<текст> %g', X) )
Для вывода в командное окно предупреждающих сообщений вместо функции disp
лучше применять функцию warning, имеющую такой формат вызова
warning ( ' Предупреждающее сообщение ' )
При ее использовании вывод предупреждении можно подавить командой
warning off, а затем вновь возобновить с помощью команды warning on
Предупреждающие сообщения, выдаваемые с помощью функции warning в командном окне, будут предваряться словом "Warning".
Для вывода в командное окно сообщений об ошибках используют функцию error
error('Сообщение об ошибке')
Сообщения об ошибках, выводимые с помощью функции error, в командном окне предваряются тремя вопросительными знаками (???) и отображаются красным цветом. После
вывода сообщения об ошибке с помощью функции error работа программы будет корректно завершена.
Команда pause временно прекращает выполнение программы до тех пор,
пока пользователь не нажмет любую клавишу клавиатуры. Если после названия команды
указать в скобках некоторое положительное целое число n, то задержка выполнения программы будет осуществлена на протяжении n секунд.
Если в тексте М-файла встречается команда keyboard, то при выполнении
программы выполнение М-файла прекращается, и управление передается клавиатуре.
Этот специальный режим работы сопровождается появлением в командном окне MatLAB
нового вида приглашения к действиям k>>.
В этом режиме пользователь может осуществить любые действия, проверить или изменить данные. При этом ему доступны все команды и процедуры системы MatLAB. Для
завершения работы в этом режиме необходимо ввести команду return. Тогда система
продолжит роботу программы с оператора, следующего за командой keyboard.
5.3 Отладка программ
Отладка программы — это процесс выявления места расположения ошибок и нахождения их причины. В программе MATLAB для этого предусмотрено множество вспомогательных средств. Все эти средства реализованы в редакторе m-файлов (поэтому его
также называют и отладчиком m-файлов).
Одним из таких средств является возможность отображать различными цветами разные элементы программы (переменные, операторы, константы, ключевые слова языка
программирования, комментарии и т.д.), а также выравнивания строк программы в зависимости от используемых ключевых слов и управляющих конструкций. Таким образом
редактор автоматически выполняет синтаксический контроль листингов программ. Однако ошибки иного рода система отыскать не в состоянии.
Простые программы обычно не нуждаются в использовании специальных инструментов отладки. Корректного выполнения программы, как правило, можно достичь после
нескольких запусков кода с использованием различных входных данных. Можно также
задать просмотр результатов промежуточных вычислений, удалив в программе символы
32
точки с запятой (;), которыми завершаются инструкции, либо ввести дополнительные переменные для отображения хода вычислений, а после проверки вернуть код к его исходному виду.
Если ошибка возникает в процессе выполнения программы, MATLAB пытается ее
идентифицировать самостоятельно и выводит в командное окно сообщение, описывающее приблизительный характер ошибки и номер строки, в которой она обнаружена. Если
щелкнуть мышью на подчеркнутом фрагменте данного сообщения, то соответствующий
m-файл раскроется в редакторе/отладчике m-файлов, и курсор отобразится в строке с
ошибкой. Но на мнение MATLAB полагаться не стоит, поскольку оно не всегда отражает
реально происходящие процессы.
Если же вы имеете дело со сложной программой, то простыми приемами проверки
не обойтись. В этом случае полезно воспользоваться специальными инструментами отладки.
Одним из таких средств является возможность работы программы в режиме фрагментации, который был рассмотрен в лекции 5. С помощью команд меню Cell (Фрагмент)
можно разбить программу на несколько фрагментов и протестировать каждый из них в
пошаговом режиме. В качестве фрагментов обычно задают блоки программы, выполняющие отдельные задачи. Отладка кода в режиме фрагментации больше подходит для
пошагового выполнения файл-программ, чем файл-функций.
Другой приемом отладки - размещение в тексте программы точек останова (пли
прерывания) и дальнейшее пошаговое выполнение кода, при котором имеется возможность просмотреть содержимое рабочего пространства (т.е. всех значений переменных,
использующихся в программе). Такая отладка может быть выполнена либо средствами
редактора/отладчика m-файлов, либо путем ввода соответствующих команд в командую
строку.
Использование редактора/отладчика m-файлов для отладки программ
Все инструменты отладки реализованы в редакторе/отладчике m-файлов. Команды,
используемые в режиме отладки, представлены в меню Debug (Отладка) редактора/отладчика m-файлов и продублированы кнопками на панели инструментов.
Обычно последовательность действий при отладке такова.
1. Открыть программу в редакторе/отладчике m-файлов.
2. Установить точки останова в нужных строках. Это можно сделать с помощью
упомянутой выше команды Set/Clear Breakpoint, соответствующей ей кнопки на панели
инструментов окна редактора, клавиши <F12>, либо просто щелкнув мышью в нужной
строке на столбце точек останова, который находится справа от столбца с номерами
строк.
3. Запустить программу на выполнение из командного окна либо из редактора/отладчика m-файлов. В результате, как только программа достигнет точки останова, ее
выполнение будет на этой точке прервано и MATLAB перейдет в режим отладки. Признаком перехода в этот режим является изменение знака приглашения ко вводу команды
в командной строке с >> на К>>. А в окне редактора рядом с первой точкой останова появляется зеленая стрелка.
4. Провести тестирование программы. В частности, можно выполнить программу в
пошаговом режиме (нажимая клавишу <F10>), просмотреть содержимое рабочего пространства, текущие значения переменных и значения выражений. Чтобы узнать значение
какой-либо переменной, подведите курсор к се имени - на экране отобразится желтый
прямоугольник с информацией об этой переменной. В режиме отладки можно также ме33
нять значения переменных, наблюдая за изменениями в программе.
Использование командной строки для отладки программ
Можно выполнить отладку программы не в редакторе/отладчике m-файлов, а используя набор специальных команд отладки. Краткое описание основных команд (или
функций) отладки, а также ссылку на страницу с информацией об отладке в справочной
документации MATLAB, можно получить, введя в командную строку команду help
debug.
Чтобы в командном режиме отладки задать точки останова в программе, прежде всего нужно вывести се листинг с пронумерованными строками. Это, например, делается с
помощью команды dbtype.
Обычный листинг m-файла (не включая столбец с номерами строк) позволяет вывести
команда type.
Команда dbstop, служащая для задания точек останова, имеет несколько форматов
вызова (о них можно узнать с помощью команды help dbstop), однако простейшим из них
является такой, при котором указывается имя m-файла и номер строки, где следует задать
останов, например: K>> dbstop имя файла 10. Установив точки останова, их можно просмотреть с помощью команды dbstatus.
Когда при выполнении программа достигает точки останова, происходит переход в
режим отладки, о чем свидетельствует изменение знака приглашения к вводу команды в
командной строке.
Для быстрого перехода в командный режим отладки в командную строку можно
ввести команду keyboard.
Пошаговое выполнение программы в режиме отладки производится с помощью
функции dbstep. Если се вызвать без параметров, будет выполнена следующая строка
программы. Если же в качестве параметра задать числовое значение, то будет выполнено
соответствующее ему число строк.
Выполнив отладку m-файла, выйдите из режима отладки посредством команды dbquit.
РАЗДЕЛ 6. МЕТОДЫ ВЫЧИСЛЕНИЙ В MATLAB
MatLAB обладает большим набором специальных функций, реализующих различные численные методы. Нахождение корней уравнений и систем, приближение табличных функций, интегрирование, решение задач линейной алгебры, оптимизация, решение
систем обыкновенных дифференциальных уравнений, работа с разреженными матрицами
— вот некоторые из возможностей, предоставляемых MatLAB. Рассмотрим решение типовых задач на применение вычислительных методов.
6.1 Операции над полиномами
В системе MatLAB имеется множество функций для работы с полиномами. С помощью этих функций можно вычислить значение полинома, найти корни полинома, выполнить операции умножения и деления полиномов, а также произвести дифференцирование
и интегрирование полиномов.
Полином (или многочлен) — это выражение вида
В MatLAB полином задается и хранится в виде вектора, элементами которого являются коэффициенты полинома:
Число элементов данного вектора (т.е. число коэффициентов) должно быть на единицу больше степени полинома, причем нулевые коэффициенты тоже должны содержаться в векторе. Например, для задания полинома
34
следует ввести такую команду.
>> p=[4 -8 0 0.5 -2.5 10]
Вычисление значения полинома
Для вычисления значения полинома по заданному значению его аргумента в
MatLAB предусмотрена функция polyval. Обращение к ней:
y = polyval(p,x),
где p - заданный вектор коэффициентов полинома, x – заданное значение аргумента.
В качестве аргумента может быть задан вектор или матрица. В этом случае значение
полинома будет вычислено для каждого элемента данного вектора или матрицы, а в результате получится вектор или матрица того же размера, что и аргумент х.
Вычисление корней полинома
Вычислить все корни полинома можно с помощью функции roots, которая возвращает вектор-столбец, элементами которого являются корни заданного полинома (в том числе и комплексные).
Число корней полинома должно совпадать со степенью полинома.
Обратная операция - построение вектора р коэффициентов приведенного полинома
(т.е. такого полинома, у которого коэффициент при старшей степени равен 1) по заданному вектору его корней - осуществляется функцией poly:
p = poly(х).
Здесь х - заданный вектор значений корней, p - вычисленный вектор коэффициентов полинома.
Умножение и деление полиномов
Умножение полиномов. Произведением двух полиномов степеней n и m
соответственно называют полином степени n+m, коэффициенты которого определяют
простым перемножением этих двух полиномов.
Эту операцию в математике называют сверткой векторов (а сам вектор, получаемый
в результате такой процедуры - вектором-сверткой двух векторов).
В MatLAB ее осуществляет функция
w=conv(u, v).
Здесь w — вектор коэффициентов полинома, полученного в результате перемножения полиномов, заданных векторами u и v.
Деление полиномов. Разделить многочлен u на многочлен v – значит найти многочлены p (частное) и q (остаток), удовлетворяющие требованиям:
1. Должно соблюдаться равенство
2. Степень многочлена q должна быть ниже степени многочлена v
В MatLAB деление полинома u на полином v, т. е. обратную свертку векторов осуществляет функция
(p,q)=deconv(u, v)
р и q — это векторы коэффициентов полинома-результата (частного) и полинома-остатка,
полученных в результате деления полиномов, заданных векторами u и v.
Дифференцирование и интегрирование полиномов
Вычисление производной от полинома осуществляется функцией polyder. Эта
функция создает вектор коэффициентов полинома, представляющего собой производную
от заданного полинома. Она имеет три вида обращений:
- dp = polyder(p) - по заданному полиному р функция вычисляет вектор dp, элементы
которого являются коэффициентами полинома-производной от заданного полинома:
35
- dp = polyder(p1,p2) – функция вычисляет производную dp от произведения двух полиномов, заданных векторами коэффициентов р1 и р2:
-[q,p] = polyder(p1,p2) - функция вычисляет производную от отношения (p1/p2) двух
полиномов р1 и р2 и выдает результат в виде отношения (q/p) полиномов q и p.
Для интегрирования полиномов служит функция polyint, которая имеет такой синтаксис
q=polyint(p,k)
Здесь k - это константа интегрирования (свободный член первообразной), которая
может быть опущена (по умолчанию она равна 0).
6.2 Функции линейной алгебры
К линейной алгебре относят такие задачи, как вычисление нормы, определителя и ранга
матриц, обращение и псевдообращение матриц, разложение матриц, вычисление собственных значений и векторов, сингулярных чисел матриц, вычислять функции от матриц,
решение системы линейных уравнений и т.д.
Основные определения алгебры матриц
Напомним некоторые определения алгебры матриц. Если m·n выражений расставлены в прямоугольной таблице из m строк и n столбцов, то говорят о матрице размера m ×
n. Матрица размером m × n (m ≠ n) называется прямоугольной, если m = n, то матрица называется квадратной матрицей порядка n.
С квадратной матрицей связано понятие определителя или детерминанта.
Определителем матрицы А является число detA или Δ, вычисляемое по правилу
,
где сумма распределена на всевозможные перестановки (i1, i2,… in) элементов 1, 2, …, n и,
следовательно, содержит n! слагаемых, причем λ=0, если перестановка четная, и λ=1, если
перестановка нечетная.
Квадратная матрица называется невырожденной, если ее определитель отличен от нуля.
В противном случае матрица называется вырожденной, или сингулярной.
Одна из важных задач вычислительной линейной алгебры – это нахождение собственных чисел и собственных векторов матрицы. Пусть А – матрица размерностью n × n.
Любой ненулевой вектор x, принадлежащий некоторому векторному пространству, для
которого
где х – некоторое число, называется собственным вектором матрицы А, а λ – соответствующим ему собственным значением матрицы А.
Уравнение
эквивалентно уравнению
. Это однородная система
линейных уравнений, нетривиальные решения которой являются искомыми собственными векторами. Она имеет нетривиальное решение только тогда, когда
.
Многочлен
называется характеристическим многочленом матрицы А, а
уравнение
- характеристическим уравнением матрицы А. Если λi - собственные значения А, то нетривиальные решения однородной системы линейных уравнений
есть собственные векторы А, принадлежащие собственному значению
λi.
Матрица А≠0 имеет ранг rang(A)=p, если А имеет по меньшей мере одну невырожденную подматрицу порядка р, а все квадратные подматрицы А более высоких порядков
вырождены.
36
Рассмотрим некоторые основные функции MatLAB в этой области.
Вычисление основных параметров матриц
Функция
d = det(A)
вычисляет определитель (или детерминант) квадратной матрицы на основе треугольного разложения методом исключения Гаусса.
Функция
r = rank(A)
служит для вычисления ранга матрицы, который определяется как количество сингулярных чисел матрицы, не являющихся пренебрежимо малыми.
Функция
t = trace(A)
вычисляет след матрицы А, равный сумме ее диагональных элементов.
Обращение матриц
Обратной матрицей для квадратной невырожденной матрицы А (определитель такой матицы не равен нулю) называют матрицу А-1, которая при умножении на матрицу А
справа и слева дает единичную матрицу.
В MATLAB обращение матрицы выполняется с помощью встроенной функции inv.
Собственные значения и собственные векторы
Функция eig используется для вычисления собственных значений матриц. У нее несколько форматов вызола. Ecли эту функцию вызвать в формате L=eig (A), то получим
вектор-столбец, содержащий собственные значения матрицы А. Если же применить формат вызова [V, E]=eig (А), то кроме матрицы собственных значений Е получим матрицу
собственных векторов V, причем будет выполняться равенство: A*V=V*E.
Матричные функции
В программе MATLAB имеются встроенные матричные функции, которые выполняют вычисления с целыми матрицами по правилам линейной алгебры. Это такие функции, как expm, logm, sqrtm.
Решение систем линейных уравнений
Система линейных уравнений
………..
в матричном виде записывается как
Ax = b,
где А - это матрица коэффициентов системы (ее еще называют основной матрицей системы), b - вектор, задающий неоднородность системы (если все элементы b равны нулю,
система называется однородной), х - вектор неизвестных системы. Расширенной матрицей системы называется матрица D, полученная в результате горизонтальной конкатенации матрицы А и вектора b (т.е. D= [A b]).
Cистема линейных уравнений имеет решение тогда и только тогда, когда ранг матрицы коэффициентов системы равен рангу расширенной матрицы
rank (A) =rank(D)
37
В системе MATLAB для решения систем линейных уравнений предусмотрены знаки
операций / и \.
Простейшим случаем является так называемая квадратная крамеровская система Ах=b,
у которой rank (A) =rank (D) =m=n и определитель которой det (А) отличен от нуля. Такая
система имеет единственное решение - x=A-1b, что в терминах MATLAB эквивалентно
выражению x=inv(A) *b. Здесь под inv(A) понимается вычисление матрицы, обратной к
матрице A .
Для решения крамеровской системы Ах=b существует альтернативная запись: х=А\b.
Здесь применяется оператор обратного деления матриц "\".
Операцию / называют правым делением матрицы. Выражение A/b примерно соответствует вычислению выражения b*inv(A) . Значит, эта операция
позволяет решать системы линейных уравнений вида x⋅ A= B.
6.3 Интерполяция и аппроксимация данных
Для анализа экспериментальных данных, которые представлены в виде таблиц и задают зависимость одних физических величин от других, применяют такие средства, как
интерполяция, сглаживание и аппроксимация.
Если имеются некоторые табличные данные, возникает задача - найти непрерывную
кривую, которая наилучшим образом соответствовала бы заданной экспериментальной
зависимости. Обычно такие данные удобно интерпретировать в виде полиномиальной
функции или сплайна.
Программа MATLAB содержит встроенные функции для аппроксимации и интерполяции экспериментальных данных.
Полиномиальная аппроксимация
Полиномиальная аппроксимация данных измерений, которые сформированы как
некоторый вектор Y, при некоторых значениях аргумента, которые образуют вектор Х
такой же длины, что и вектор Y, осуществляется функцией
p=polyfit(X, Y, n).
где n - порядок аппроксимирующего полинома.
Эта функция реализует метод наименьших квадратов.
Результатом действия этой процедуры является вектор длиной (n +1) из коэффициентов аппроксимирующего полинома.
Выполнение приближения методом наименьших квадратов не всегда дает хороший
результат. При увеличении степени полинома качество приближения может ухудшаться.
Интерполяция сплайнами
Повысить качество аппроксимации экспериментальных данных можно с помощью
сплайнов. Сплайн — это непрерывная гладкая функция, которая на отрезках области определения равна полиномам определенной степени. Иными словами, при таком способе
интерполяции экспериментальные точки попарно соединяются отрезками полиномов.
Обычно используют полиномы третьей степени. Поэтому данный метод и получил название интерполяция кубическими сплайнами.
Интерполяцию кубическими сплайнами можно выполнить с помощью функции
spline. При обращении
YY=spline(X,Y,XX)
38
она интерполирует значение вектора Y, заданного при значениях аргумента, представленных в векторе Х, и выдает значение интерполирующей функции в виде вектора YY
при значениях аргумента, заданных вектором XX. В случае, если вектор Х не указан, по
умолчанию принимается, что он имеет длину вектора Y и любой его элемент равен номеру этого элемента.
Для одномерной интерполяции табличных данных в MATLAB имеется функция interp1. Обращение к ней в общем случае имеет вид:
YY = interp1(X,Y,XX,method)
и позволяет дополнительно указать метод интерполяции в четвертом входном аргументе:
'nearest' - ступенчатая интерполяция; 'linear' - линейная; ‘cubic' - интерполяция кусочными
полиномами Эрмита 3-й степени; ' pchip' - интерполяция кусочными полиномами Эрмита
3-й степени; ‘spline' - кубическими сплайнами.
Если метод не указан, осуществляется по умолчанию линейная интерполяция.
В MATLAB можно интерполировать не только одномерные данные. Для интерполирования двухмерных данных предназначена функция interp2, трехмерных- функция
interp3, а многомерных - функция interpn.
6.4 Исследование функций
В данном разделе описаны средства MATLAB, предусмотренные для решения нелинейных уравнений и нахождения минимумов функций.
Решение уравнений (Нахождение нулей функций)
Имеются две разновидности нелинейных уравнений: алгебраические, трансцендентные.
Основная форма записи этих уравнений
F(x)=0
Задача приближенного вычисления корней уравнения распадается на две:
- отделение корней уравнения, т.е. отыскание достаточно тесных промежутков, в каждом из которых содержится только один корень уравнения;
- вычисление корня с заданной точностью, если известно некоторое начальное его
приближение в области, не содержащей других корней.
Решение уравнения F(x)=0 , или нахождение нулей функции по заданному начальному приближению, осуществляется с помощью функции:
х=fzero(fun, x0),
где х0 - это начальное приближение к корню, fun - функция, корень которой вычисляется,
а х - полученное приближение значения корня.
Аргумент х0 может быть задан либо в виде скалярного значения, вблизи которого
возможно наличие корня, либо в виде вектора из двух значений [m n] (причем n>m), элементы которого представляют собой интервал, на границах которого функция fun имеет
разные знаки (что означает наличие хотя бы одного корня на этом промежутке).
Аргумент fun задается:
- либо как указатель на функцию (например, @sin, @cos или @myfun).
- либо как формула с одной независимой переменной, заключенная в одинарные кавычки. Пусть требуется найти корни уравнения cos(x)= x , что эквивалентно нахождению
нулей функции, вычисляемой по формуле y = cos(x)−x.
- либо как имя файл-функции (в одинарных кавычках), вычисляющей левую часть
уравнения
Если функцию fzero вызвать с двумя выходными параметрами, то можно получить
значение функции в найденной точке.
39
Если найдено абсолютно точное значение корня, то значение функции в этой точке
равно нулю. Таким образом, величина функции в приближенно найденном нуле косвенно
характеризует погрешность результата.
В задаче о нахождении нулей функции сложным моментом является нахождение начального приближения к нулю функции, а также априорная оценка их количества. Поэтому важно параллельно с применением функций типа roots или fzero визуализировать
поведение искомых функций на том или ином отрезке значений аргумента (построить
график функции).
Для построения графика вместо функции plot воспользуемся функцией fplot, работать с которой намного проще. В первом аргументе функции fplot достаточно задать имя
файл-функции, график которой требуется построить, а во втором — вектор-строку из
двух элементов, определяющих границы отрезка, на котором нужно построить график.
Преимуществом использования функции fplot для построения графиков является то,
что она автоматически подбирает шаг аргумента, что позволяет более точно описать поведение функции.
Для определения корней многочлена используется функция
y= roots(z),
где z – вектор коэффициентов многочлена.
Функция roots не позволяет получить решение, если коэффициенты многочлена заданы в
виде символьных переменных.
Для решения уравнений может также использоваться функция
y=solve('f(x)', x),
где 'f(x') – решаемое уравнение, записанное в одиночных кавычках; x – искомое неизвестное.
Уравнение F(x)=0 записывается в произвольной форме. При этом, если знак равенства отсутствует, то программа воспринимает уравнение в виде F(x)=0.
Аргумент х при решении уравнения можно опустить
Функция solve позволяет найти не только вещественные, но и комплексные корни
уравнения F(x)=0.
Функция solve позволяет решать уравнения, представленные в аналитическом виде.
Функция solve имеет следующий недостаток. Она не требует информации о начальном значении корня, поэтому в случае трансцендентного уравнения и в ряде других случаев она не находит всех корней уравнения.
Поиск минимума функции
В системе MATLAB имеются специальные функции для поиска минимума заданных
функций. При этом возможен поиск минимума как для функции одной вещественной переменной, так и для функций многих переменных.
Вычисление локального минимума функции одной переменной на заданном отрезке
в MATLAB выполняет функция fminbnd, синтаксис которой аналогичен синтаксису
функции fzero. При ее использовании также рекомендуется предварительно построить
график исследуемой функции, чтобы можно было точнее определить отрезки поиска минимумов.
Самый простой способ обращения к функции fminbnd имеет вид:
х=fminbnd(fun,xl,х2),
где значения х1 и х2 задают границы отрезка поиска минимума, fun - функция, локальный минимум которой вычисляется (задается как имя файл-функции в одинарных кавычках, либо как формула с одной независимой переменной, заключенная в одинарные ка40
вычки), х - вычисленное значение, при котором достигается минимум.
Чтобы узнать значение исследуемой функции в точке минимума, нужно вызвать
функцию fminbnd с двумя выходными аргументами
>> [x,f]=fminbnd((fun,xl,х2)
Для нахождения локального максимума в MATLAB не предусмотрено специальной функции. Однако найти локальный максимум требуемой функции, очевидно,
можно путем вычисления локального минимума для функции, имеющей обратный знак.
Для поиска минимума функции нескольких переменных используется функция fminsearh.
х=fminsearh (fun,x0),
где fun – функция нескольких переменных, для которой ищется минимум, x0 – вектор ее
аргументов, с которого начинается поиск.
Для функции нескольких переменных также важно априорно оценить количество и
приблизительное нахождение локальных минимумов. В этом может помочь построение
трехмерных графиков.
6.5 Вычисление определенных интегралов
Задача численного интегрирования формулируется следующим образом. Требуется
найти определенный интеграл
,
где функция f(x) считается непрерывной на участке [a, b].
В подавляющем большинстве случаев выразить интеграл через элементарные функции не удается, поэтому для приближенного вычисления интеграла функцию f(x) заменяют некоторой аппроксимирующей функцией, которая легко вычисляется в рамках
элементарных процедур. Часто в качестве аппроксимирующей функции выступает полином.
Вычисление определенных интегралов методом трапеций
Самым простым и наиболее распространенным методом вычисления определенных
интегралов является метод трапеций. Вычисление интегралов по формуле трапеций в
MATLAB выполняется с помощью функции trapz, к которой можно обратиться следующим образом.
z=trapz(x,y)
Результатом данного обращения будет вычисление площади криволинейной трапеции, расположенной под графиком функции у(х), в котором все точки, заданные векторами х и у, соединены прямыми. Обычно для интегрирования выбирают равномерную сетку, т.е. значения элементов вектора х задают отстоящими друг от друга на определенную
величину, именуемую шагом интегрирования. Очевидно, чем меньше шаг интегрирования, тем больше точность вычисления интеграла.
Если вектор х не задан, обращение к функции имеет вид z = trapz(y) и по умолчанию
предполагается, что шаг интегрирования является постоянным и равен единице.
Обычно для достижения высокой точности требуется выполнять интегрирование с
очень малыми шагами, а контроль достигнутой точности осуществлять путем сравнения
последовательных результатов. При одном и том же шаге интегрирования методы более
высоких порядков точности достигают более точных результатов.
Более точные методы вычисления определенных интегралов
Методы интегрирования более высоких порядков точности в MATLAB реализованы
в таких функциях, как quad и quadl. Эти функции больше подходят для интегрирования
41
гладких функций.
Работа функции quad основана на квадратурной формуле Симпсона, а функция quadl
вычисляет определенные интегралы по более точным квадратурным формулам ГауссаЛобатто. При использовании этих функций шаг интегрирования не задается (его программа подбирает автоматически). Зато можно указать требуемую точность вычисления
интеграла. По умолчанию функции quad и quadl вычисляют приближенное значение интеграла с точностью, равной 10-6.
Самый простой способ обращения к функциям quad и quadl имеет вид
q=quad(fun,a,b)
q=quadl(fun,a,b)
где fun- указатель на подынтегральную функцию, а переменные а и b - нижний и верхний
пределы интегрирования.
Аргумент fun задается либо как указатель на функцию (например, @myfun, где myfun - имя функции), либо как формула с одной независимой переменной, заключенная в
одинарные кавычки, либо как имя файл-функции (в одинарных кавычках), вычисляющей
подынтегральную функцию.
Если необходимо повысить точность вычислений определенных интегралов, нужно задать более высокое значение точности (по сравнению с заданным по умолчанию значением 10-6) в дополнительном четвертом аргументе функций quad и quadl
>> q=quad('integ',0,3,1.e-16).
При этом интеграл будет вычисляться несколько медленнее, так как увеличится количество вычислений подынтегральной функции.
Для того чтобы помимо значения интеграла узнать количество точек, в которых каждая из функций quad и quadl вычисляет подынтегральную функцию, нужно задать два
выходных аргумента
>> [q,kol]=quad('integ',0,3).
В данном случае для достижения одной и той же точности, равной 10-6, функции quad понадобилось выполнить меньшее количество вычислений, чем функции quadl.
Вычисление двойных интегралов
Для приближенного вычисления двойных интегралов используется функция dblquad,
самый простой способ вызова которой имеет вид:
q=dblquad(fun,xmin,xmax,ymin,ymax)
где fun - указатель на подынтегральную функцию, переменные xmin и хmах — пределы
внутреннего интегрирования по х, ymin и ymax - пределы внешнего интегрирования по у.
Точность вычисления двойного интеграла можно задать в дополнительном шестом
аргументе функции dblquad (по умолчанию точность равна 10-6).
>>q=dblquad('dinteg',pi/2,pi,0,pi/2,1e-10)
По умолчанию функция dblquad выполняет вычисления на основе функции quad.
Однако метод вычислений можно изменить, задав дополнительным седьмым аргументом,
например, строку 'quadl'.
>> q=dblquad('dinteg',pi/2,pi,0,pi/2,'quadl')
6.6 Дифференциальные уравнения
Дифференциальные уравнения широко используются в различных областях науки и
техники для математического моделирования разнообразных физических процессов.
Система MATLAB имеет встроенные средства как для решения обыкновенных дифференциальных уравнений и их систем, так и для дифференциальных уравнений в частных производных.
42
В данном разделе рассмотрены возможности программы MATLAB, касающиеся
численного решения обыкновенных дифференциальных уравнений произвольного порядка и систем с начальными условиями - так называемой задачи Коши (задачи с начальными условиями).
Замечание. Производная f'(x) есть угловой коэффициент к графику функций y=f(x) в точке х. Решить дифференциальное уравнение – значит найти функцию y=f(x), которая удовлетворяет этому уравнению.
Обыкновенное дифференциальное уравнение - это уравнение, содержащее аргумент,
искомую функцию этого аргумента и ее производные различных порядков
F(t, у, у', ..., y(n))=0.
Наивысший порядок производной искомой функции в данном уравнении называется
порядком дифференциального уравнения. Решением (или интегралом) дифференциального уравнения является такая функция, которая при подстановке в дифференциальное
уравнение обращает его в верное равенство.
Самым простым случаем является дифференциальное уравнение 1-го порядка, разрешенное относительно производной.
Если переменная у является вектором, то речь идет о системе дифференциальных
уравнений. Дифференциальные уравнения и системы порядка 2 и выше обычно можно
свести к системам уравнений 1-го порядка, введя такое количество вспомогательных
функций, которое соответствует порядку уравнения.
Так, для того чтобы свести к системе уравнений 1-го порядка уравнение y"=F(t, у,y'),
нужно использовать подстановку: у1=у и у2=у'. В результате получится следующая система
у1'=у2
у2'= F(t, у1,y2)
Решение обыкновенных дифференциальных уравнений
Задача Коши для обыкновенного дифференциального уравнения 1-го порядка состоит в том, чтобы найти функцию y=y(t), которая бы удовлетворяла этому уравнению, а
также начальному условию у(t0)=у0 при заданных значениях t0 и у0.
В MATLAB имеется целый ряд встроенных функций, предназначенных для решения
задачи Коши для обыкновенных дифференциальных уравнений. Это такие функции, как
ode45, ode23, odell3, ode15s, ode23s, ode23t и ode23tb. Их еще называют солверами (от
англ. слова solver, которое переводится как "решатель").
В перечисленных функциях реализованы различные методы решения дифференциальных уравнений, поэтому выбор той или иной функции зависит от характеристик решаемой задачи.
Функции с суффиксом s предназначены для решения так называемых жестких систем дифференциальных уравнений (это такие системы дифференциальных уравнений,
решения которых на разных отрезках изменения независимых переменных ведут себя по
разному: в одних местах наблюдается чрезвычайно быстрое изменение зависимых переменных, в то время как в других местах имеет место их очень медленное изменение).
Наиболее употребительной является функция ode45, реализующая формулы РунгеКутта 4-го и 5-го порядка точности.
В функции ode23 также используются формулы Рунге-Кутта, но более низкого порядка точности. Ее применяют для задач, содержащих небольшую жесткость. Для решения нежестких задач с высокой точностью лучше использовать функцию odel13.
Если решаемая система дифференциальных уравнений является жесткой, то более
43
подходящим солвером будет odel5s, работа которого основана на численных методах
дифференцирования и формулах "дифференцирования назад". Для решения жестких задач с невысокой точностью подойдет солвер ode23s, использующий одношаговый метод
Розенброка 2-го порядка.
Для высокоточного решения умеренно жестких задач служит солвер ode23t, основанный на неявном методе трапеций с использованием "свободной" интерполяции. А солвер ode23tb использует неявный метод Рунге-Кутта с первым шагом по методу трапеций
и вторым шагом по методу "дифференцирования назад" 2-го порядка. Он подходит для
решения жестких систем, если не требуется высокая точность.
В самом простом случае синтаксис вызова перечисленных выше функций один и тот
же
[t,Y]= solver(odefun, tspan, y0),
где solver - название соответствующего солвера (например, ode45 или ode23),
t - вектор-столбец, содержащий значения независимой переменной (обычно это значения
времени), Y - массив решений, каждая строка которого соответствует определенному
элементу вектора t. Аргумент odefun - это указатель на функцию, которая вычисляет правые части системы дифференциальных уравнений (в частности, имя файл-функции в
одинарных кавычках), tspan — вектор, определяющий интервал интегрирования (можно
задать и промежуточные значения), а у0 - скаляр или вектор-столбец, в котором задаются
начальные условия.
6.3 Содержание лабораторных работ
6.3.1 Перечень рекомендуемых лабораторных работ
1. Простейшие вычисления в MATLAB
2. Вектора и матрицы
3. Операции над векторами.
4. Операции над матрицами.
5. Графики, диаграммы и гистограммы.
6. Программирование.
7. Интерполяция и аппроксимация данных.
8. Решение уравнений
9. Численные методы в MATLAB.
10. Базовые операции символьной математики системы MATLAB.
11. Символьные вычисление в MATLAB
6.3.2 Задание на лабораторные работы.
Лабораторная работа 1.
Вычислить значение выражения с использованием встроенных математических
функций в режиме калькулятора.
Лабораторная работа 2.
Освоить различные способы формирования векторов и матриц и их модификацию.
Лабораторная работа 3.
Освоить векторные и поэлементные операции с векторами.
Лабораторная работа 4.
Освоить функции поэлементного преобразования матрицы и обычные матричные
операции.
Лабораторная работа 5.
Освоить построение и оформление графиков в различных системах координат, поверхностей разного вида, диаграмм.
44
Лабораторная работа 6.
Познакомиться с понятиями m-файла в MATLAB. Научиться составлять программы
решения задач на разветвляющиеся и циклические алгоритмы
Лабораторная работа 7.
Освоить функции MATLAB, предназначенные для аппроксимации и интерполяции
данных.
Лабораторная работа 8.
Познакомиться с некоторыми методами решения уравнений, реализовать их с помощью функций MATLAB.
Лабораторная работа 9.
Познакомиться с методами численного интегрирования и дифференцирования, реализовать их с помощью функций MATLAB.
Лабораторная работа 10.
Научиться использовать элементарные операторы пакета символьных вычислений
Symbolic Math Toolbox.
Лабораторная работа 11.
Научиться использовать специальные функции пакета символьных вычислений
Symbolic Math Toolbox.
6.3.3 Методические указания по выполнению лабораторных работ.
Лабораторная работа № 1
Простейшие вычисления в MATLAB.
Цель работы – научиться вычислять алгебраические выражения с использованием
встроенных математических функций (работая из командной строки MatLab).
Порядок выполнения работы
1. Вычислите значение выражения
2. Найдите значения выражений, используя присвоение переменных
3. Проведите вычисления по заданной формуле при заданных значениях переменных. Сравните полученный результат с приведенным ответом.
45
Контрольные вопросы
1. Как представляются действительные числа при вычислениях в системе MatLAB?
2. Как изменить формат представления действительных чисел в командном окне?
3. Каким образом объявляются переменные в языке MatLAB?
4. Как сделать так, чтобы результат действий, записанных в очередной строке а) выводился в командное окно; б) не выводился на экран?
5. Какую роль играет системная переменная ans?
6. Как возвратить в командную строку ранее введенную команду?
7. Как ввести значения комплексного числа, и в каком виде оно выведется на экран?
8. Как на языке MatLAB обеспечить сложение, вычитание, умножение, деление и возведение в степень комплексных чисел?
9. Какие функции работы с комплексными числами предусмотрены в MatLAB
Лабораторная работа № 2
Вектора и матрицы
Цель работы – научиться работать с векторами и матрицами (работая из командной
строки MatLab).
Порядок выполнения работы
1. Вывести второй элемент вектора-строки s = (0.3 5.8 4.8 3.1 6.2 2.3), заменить
пятый элемент вектора-строки на 5.7, записать в массив w первый, пятый и третий элементы.
2. В массиве вектора-строки n = (1.8 6.4 9.3 0.5 2.1 3.7 2.9) заменить нулями элементы с четвертого по седьмой, создать новый массив nl, используя элементы массива n
со второго по пятый и составить массив n2, содержащий элементы n, кроме второго (используя сцепление строк).
3. Заполните вектор-столбец элементами, начинающимися с нуля и до единицы с
шагом 0.1 (используя операцию транспонирование) и вектор-строку, начинающуюся с
единицы до двух с шагом - 0.2.
4. a) введите четыре квадратные матрицы (А, В, С, D) размерностью два и создайте
из них блочную матрицу
.
б) составьте блочную матрицу
в) выделите блоки из полученной матрицы
и выделите 3-ю строку из матрицы М.
46
, где
,
,
.
5. Удалите первую строку матрицы К из № 5 и 3-й столбец.
6. а) Заполните прямоугольную и квадратную матрицу нулями, единицами и случайными числами при помощи индексации и встроенных функций;
б) заполните вектор-строку семью случайными числами;
в) создайте диагональную матрицу, у которой все вне диагональные элементы равны
нулю.
7. Заполните и запишите в файлы матрицы:
Контрольные вопросы
1. Опишите способы создания одномерных массивов в MATLAB.
2. Опишите способы создания двумерных массивов в MATLAB.
3. Как обратиться к элементу вектора, к элементу матрицы?
4. Как удалить один/несколько элементов и вектора?
5. Как удалить строку/столбец из матрицы?
6. Какие функции имеются в MatLAB для формирования матриц определенного вида?
7. Горизонтальная/вертикальная конкатенация матриц.
Лабораторная работа № 3
Операции над векторами
Цель работы – научиться производить математические операции, поэлементные операции с векторами, вычислять функции от элементов векторов.
Порядок выполнения работы
1.Вычислить сумму векторов:
2.Перемножить элементы вектора-столбца
 3.7 
 2.4 
 
1.5 
z  
 0.2 
 9.6 
 
 5.3 
найти минимальный и максимальный элементы вектора z и индекс (порядковый номер)
максимального элемента (вызвать функцию max с двумя выходными аргументами).
3. Упорядочить вектор-строку r = (-0.2 6.3 -9.4 3.8 7.4 0.1):
47
а) по возрастанию;
б) по убыванию;
в) в порядке возрастания их модулей;
г) по возрастанию с двумя выходными аргументами (это приведет к
образованию массива индексов соответствия элементов упорядоченного
и исходного массивов).
4. а) Перемножить вектор-строки vl =(2 8 -4 3) и v2=(-5 7 -3 1);
б) возвести во вторую степень вектор vl;
в) все элементы первого вектора vl возвести в степень, равную соответствующим элементам второго вектора v2;
г) разделить вектор vl на v2 и v2 на vl;
д) к вектору-строке v = (8 10 2 4) прибавить число 3,8, вычесть его из
вектора, умножить вектор v на число 2 и разделить на это же число.
5. Выведите таблицу значений функции
в точках 0.1, 0.3, 0.4, 0.6,1.3, 1.4, 2.1.
Контрольные вопросы
1. Как вводятся векторы в языке MatLAB?
2. Какими функциями можно формировать векторы в языке MatLAB?
3. Векторные операции над векторами.
4. Какие функции MatLAB разрешают преобразовывать вектор поэлементно?
5. С помощью каких средств в MatLAB осуществляются основные операции
с векторами?
Лабораторная работа № 4
Операции над матрицами
Цель работы – научиться производить математические операции, поэлементные операции с матрицами, вычислять функции от элементов матриц.
Порядок выполнения работы
1. а) Найдите сумму и разность матриц
б) умножьте матрицы С и
в) полученную матрицу умножьте на 6.
2. Найдите значение выражения (А + С)В2(А - С)Т
3. В матрице M:
a) вычислите сумму по столбцам и по строкам;
б) отсортируйте элементы этой матрицы в порядке возрастания их столбцов и строк;
в) вычислите максимальные и минимальные элементы в соответствующих столбцах матрицы М и строках:
48
4. Вычислите выражение
5. Решите систему из 3 уравнений (используя операцию обратного деления)
Контрольные вопросы
1. Как вводятся матрицы в системе MatLAB?
2. Как сформировать матрицу: а) по заданным векторам ее строк? б) по
заданным векторам ее столбцов? в) по заданным векторам ее диагоналей?
3. Какие функции поэлементного преобразования матрицы есть в MatLAB?
4. Как осуществляются в MatLAB обычные матричные операции?
5. Как найти сумму и произведение элементов матрицы?
6. Как решить в MatLAB систему линейных алгебраических уравнений?
Лабораторная работа № 5
Графики, диаграммы и гистограммы
Цель работы – научиться представлять векторные и матричные данные в виде графиков, диаграмм и гистограмм.
Порядок выполнения работы
1. Отобразите функцию
на отрезке [-1, 1] в виде
столбчатой диаграммы без промежутков.
2. Напишите команды построения диаграммы с отдельным сектором, соответствующим минимальному значению среди элементов вектора, автоматически создав вспомогательный вектор. Используйте функции zeros для создания нулевого вектора той же длины, что х, и min с двумя выходными аргументами для поиска номера минимального элемента в векторе х.
3. Постройте графики функций
и
на отрезке [-2π, 2π]. Сгенерируйте вектор-строку значений аргумента х и векторы-строки
f и g, содержащие значения функций.
4. Сравните две функции:
5. Постройте графики функций
и
на отрезке [0.1, 5] в логарифмическом масштабе по оси х
6. Постройте график функции, заданной кусочным образом:
Сначала необходимо вычислить каждую из трех ветвей, т.е. фактически получить
49
три пары массивов: xl и yl, х2 и у2, х3 и у3, затем объединить значения абсцисс в вектор
х, а значения ординат в у и построить график функции, задаваемой парой массивов х и у.
7. Постройте график функции
на прямоугольной области определения
,
:
- построить график с каркасной поверхностью (сделать ее “прозрачной” и вернуть в
обычный вид);
- залить каждую клетку поверхности определенным цветом, зависящим от значения
функции в точках, соответствующих углам клетки;
-получить поверхность, плавно залитую цветом;
- вывести рядом с графиком столбик, устанавливающий соответствие между цветом и
значением функции;
- сменить палитру, материал поверхности и изменить освещенность поверхности.
8. Построить поверхность, состоящую из линий уровня, соответствующих значениям
функции от 0 до 1 с шагом 0,01.
Контрольные вопросы
1. Как построить декартовый и полярный графики функции одной переменной?
2. Как построить несколько графиков в одной системе координат?
3. Как построить графики в разных подобластях одного графического окна?
4. Как изменить цвет и стиль линий на графиках?
5. Как сделать надписи на осях, на полученном рисунке?
6. Как сделать заголовок для графика?
7. Как построить график функции двух переменных?
8. Как построить график поверхности?
Лабораторная работа № 6
Программирование
Цель работы – научиться использовать операторы цикла, операторы ветвления и
операторы прерывания в исключительных случаях при создании в m-файлов.
Порядок выполнения работы
1. Напишите файл-программу и файл-функцию для вычисления суммы
2. Напишите файл-программу для вычисления выражения
Для х=2, 3, … n+1 и y=1, 2, …n.
3. Напишите файл-функцию для нахождения суммы ряда для заданного х (разложение в ряд cos x и ex)
пока слагаемые функции больше 10-10.
Сравните полученные результаты, построив графики функций cos созданной и встроенной на отрезке [-π, π] на одних осях, и графики exp на отрезке [-2π, 2π].
4. Создайте матрицу произвольного размера. Заполните случайными числами. Найдите минимальный и максимальный элемент матрицы.
50
5. Задать массив целых положительных чисел и определить, сколько в нем простых
чисел. Если простые числа найдены, то вывести их количество и сами эти числа
6. Создать файл-функцию для вычисления выражения
. Перед вычислением
функции провести проверку значения аргумента х и вывести в командное окно предупреждение, если результат будет комплексным числом.
7. Создать файл-функцию, которая по коэффициентам квадратного уравнения находит только вещественные его корни, а для комплексных выдает ошибку. Предусмотреть
проверку количества входных и выходных параметров и выдавать сообщение об ошибке.
Учесть, что файл-функция не может принимать массивы в качестве входных аргументов.
Проверка количества аргументов. Функции nargin и nargout позволяют определить количество входных и выходных аргументов вызываемой функции. Эту информацию в дальнейшем можно использовать в операторах условия для изменения хода вычислений.
8. Вычислить функцию
а) Проверить число входных аргументов, если число входных аргументов не равно
единице, то завершить работу файл-функции с сообщением об ошибке (выход по ошибке).
б) Проверить, является ли входной аргумент вектором или числом, один из размеров
входного аргумента должен быть равен единице. Если это условие не выполняется, то
выход по ошибке.
в) нахождение длины входного аргумента
г) создание вектора выходного аргумента того же размера, что и входной аргумент и
заполнение его нулями
д) перебор всех элементов входного вектора с использованием цикла for, вычисление
от них значений кусочно-заданной функции и запись в соответствующие элементы выходного вектора.
Построить график функции на отрезке [-3π, 3π] с помощью функции fplot и plot.
Контрольные вопросы
1. Какие средства управления ходом вычислительного процесса предусмотрены в языке
MatLAB?
2. Как можно организовать вычисления по циклу в языке MatLAB?
3. Какие операторы ветвления существуют в MatLAB?
4. Какие операторы прерывания Вы знаете?
5. Как организовать вывод таблицы результатов вычислений в командное окно MatLAB?
6. Назначение функции fplot?
7. Как осуществить сложные (многооператорные) вычисления в режиме калькулятора?
Лабораторная работа № 7
Интерполяция и аппроксимация данных
Цель работы – научиться использовать аппроксимирующие и интерполирующие
функции MATLAB для анализа экспериментальных данных
Порядок выполнения работы
1. Задать полином
2. Вычислить значение полинома в точке х=2,8.
51
3. Вычислить корни полинома.
4. По найденному вектору корней найти коэффициенты полинома.
5. Задать значения экспериментальных данных, например x=[0.44;0.49;
0.56;0.63;0.71;0.76] и y=[1.636;1.732;1.877;2.031;2.228;2.360].
6. Найти непрерывную кривую, которая наилучшим образом соответствовала бы заданной экспериментальной зависимости. Для этого использовать:
а) аппроксимацию полиномами при разных значениях порядка полинома; построить
график исходной зависимости и аппроксимирующие графики;
б) выполнить интерполяцию различными методами; построить график исходной зависимости и интерполирующие графики.
Контрольные вопросы
1. Какой объект в MatLAB называется полиномом?
3. При помощи каких функций можно найти корни заданного полинома, значение полинома по известному значению аргумента?
4. Какие функции позволяют найти производную от полинома?
5. Что такое аппроксимация?
6. Что такое интерполяция?
7. Что такое узлы интерполяции?
8. В чем заключается задача отыскания интерполирующего многочлена?
9. Что такое сплайн? Как происходит процесс интерполирования сплайнами?
10. Какие методы интерполяции вам известны?
Лабораторная работа № 8
Решение уравнений
Цель работы – ознакомится с численными методами решения линейных и нелинейных уравнений и систем уравнений. Получить навыки в использовании программных
средств для проверки полученных результатов.
Порядок выполнения работы
1. Отделить корни трансцендентного уравнения x 2  sin x  1  0 графически.
2. Провести численное отделение корней.
3. Решить уравнение x 2  sin x  1  0 методом половинного деления с точностью
0,001 (промежуток изоляции корня [1,4; 1,5]).
4. Решить уравнение x 2  sin x  1  0 методом итераций с точностью 0,001 (промежуток изоляции корня [1,4; 1,5]).
5. Решить уравнения в среде MATLAB с помощью встроенных функций.
6. Найти решение системы методом Гаусса:
1, 23х1  3,25 х 2  8,69 х3  10,33,

7,03 х1  4,81х 2  0, 27 х 3  6, 43,
4,49 х  7,55 х  12,51х  41,53.
1
2
3

7. Решить систему уравнений п. 6 в системе MATLAB с помощью встроенной функции.
8. Решить систему нелинейных уравнений методом Ньютона с точностью 0,001:
sin( x  0,6)  y  1,6,

3 x  cos y  0,9.
9. Решить уравнения в среде MATLAB с помощью встроенных функций.
52
Контрольные вопросы
1. Что значит отделить корень?
2. Какие существуют методы отделения корней?
3. Как находят границы расположения корней алгебраического уравнения?
4. Суть графического отделения корней уравнения.
5. Суть численного отделения корней уравнения.
6. Какие существуют методы решения уравнения с одной переменной?
7. Какие вы знаете группы методов решения систем линейных уравнений?
8. Назначение функций solve и fzero, roots.
Лабораторная работа № 9
Численные методы в MATLAB
Цель работы – ознакомится с численными методами дифференцирования и интегрирования. Получить навыки в использовании программных средств для проверки полученных результатов.
Порядок выполнения работы
5
1. Вычислить интеграл  ln xdx методом левых и правых прямоугольников, трапеций
3
и Симпсона. Решить тот же интеграл с использованием соответствующих функций MATLAB. Сравнить полученные результаты и сделать вывод.
2. Методом Эйлера найти значения дифференциального уравнения y   x  cos( y /  )
на отрезке [1,7; 2,7], для которого у(1,7)=5,3, приняв h=0,1.
Решить ту же задачу с использованием соответствующей функции MATLAB. Сравнить
результаты и сделать вывод.
3. Найдите решение дифференциального уравнения первого порядка с указанным
начальным условием на заданном отрезке Рунге-Кутта:
y  х  cos( x / ), y(1.7)  5.3, [1.7; 2.7], h  0.1.
Решить ту же задачу с использованием соответствующей функции MATLAB. Сравнить
результаты и сделать вывод.
x   y  y  e t ,
4. Решить систему 
при данных начальных условиях
2 x   y  2 y  cos t
3
4
t 0  0, x 0   , y 0 
методом Эйлера. Построить графики функций.
17
17
t
 
5. Решить систему  x  3y  cos t  e t , при данных начальных условиях
 y  4 y  cos t  2e .
3
4
t 0  0, x 0   , y 0 
методом Рунге-Кутта. Построить графики функций.
17
17
t
 
6. Решить систему  x  3y  cos t  e t , при данных начальных условиях
 y  4 y  cos t  2e .
3
4
t 0  0, x 0   , y 0 
с использованием функции ode(). Построить графики функций.
17
17
53
7. Решить дифференциальное уравнение второго порядка y  2 y  y  6xe x при
данных начальных условиях y(0)  y(0)  1 . Построить графики функций.
Контрольные вопросы
1. Какие существуют методы интегрирования функций?
2. Графическая интерпретация метода трапеций и метода Симпсона.
3. Какие функции в MATLAB реализуют метода трапеций и метода Симпсона?
4. Какие существуют методы решения дифференциальных уравнений?
5. Что такое “солверы”?
6. Какие функции предназначены для решения жестких систем уравнений?
7. Для чего предназначена функция ode45?
Лабораторная работа № 10
Базовые операции символьной математики системы MATLAB.
Цель работы – научиться использовать возможности базовых операций пакета символьных вычислений Symbolic Math Toolbox.
Порядок выполнения работы
1. Создать символьные переменные x, y, z и матрицу А размером 3х3
- c помощью команды sym;
- с помощью команды syms.
Вывести результат в командной строке.
2. Проверить рабочую область c помощью команды whos.
3. Создать символьную числовую матрицу В размером 3х3. Вывести результат в командной строке.
4. Найти детерминант символьной матрицы А и символьной числовой матрицы В —
det без присвоения результата и с присвоением результата ячейкам под именем A1 и В1.
5. Найти детерминант символьной матрицы 2-го порядка.
6. Выделить диагонали заданной символьной матрицы А и символьной числовой
матрицы В.
7. Создать символьную диагональную и числовую символьную диагональную матрицы по заданной.
8. Вычислить собственные значения и собственные вектора символьно-числовой
матрицы.
9. Построить график символьных функций — ezplot
f=sin(t)
- область определения по умолчанию от -2*pi до 2*pi;
- задаваемая область определения от -4*pi до 6*pi.
10. Создать полином по вектору заданных коэффициентов — poly2sym.
11. Выделить коэффициенты из заданного полинома - sym2poly.
12. Разложить на множители многочлен
13. Используя команды simplify или simple для упрощения выражения
14. Решить квадратное уравнение
54
.
15. Решить нелинейное уравнение
16. Решить в символьной форме систему линейных уравнений
3x  4 y  5z  2
 2 x  3 y  7 z  1
 x  6 y  z  3
Проверить ответ, используя матричное умножение.
17. Решить систему нелинейных уравнений
18. Решить систему трансцендентных уравнений
0,5e t 3 - 2e t 2 - 2e t1 - 1 = 0

0,5t
0,5t
0,5t
0,5e 3 - 2e 2 - 2e 1 - 1 = 0
0,5e 0,25t 3 - 2e 0,25t 2 - 2e 0,25t1 - 1 = 0

Контрольные вопросы
1. Как создать символьные переменные?
2. К какому классу относятся символьные переменные?
3. Для чего предназначена функция vpa?
4. Что можно сделать при помощи функции ezplot?
5. Назначение функций: collect, expand, homer и factor.
6. Чем отличаются функции simplify или simple?
7. Назначение функции subs.
8. Какие функции используются для решения уравнений?
Лабораторная работа № 11
Символьные вычисление в MATLAB
Цель работы – научиться использовать возможности пакета символьных вычислений
Symbolic Math Toolbox для вычисление пределов, сумм, дифференцирования и интегрирования..
Порядок выполнения работы
1. Найти производные следующих функций, и, если возможно, упростить ответ
2. Определить, может ли программа MATLAB вычислить эти интегралы в символьной
форме, а для бесконечных интегралов проверить результаты путем дифференцирования
3. Вычислить пределы
4. Найти суммы
55
5. Вычислить многочлен Тейлора с указанной степенью n и точкой с
Контрольные вопросы
1. Нахождение символьных выражений для сумм.
2. Как найти предел символьного выражения.
3. Какая функция используется для вычисление производных.
4. Какие аргументы должны быть заданы в функции int.
5. Как вычислить многочлен Тейлора с указанной степенью точности.
Требования к отчету по лабораторным работам 1-11.
Отчет по лабораторной работе должен быть оформлен в соответствии с требованиями
ГОСТ 2.105, ГОСТ 2.106, СТО ИрГТУ.005-2009 и содержать:
1. Цель работы.
2. Задание.
3. Решение задачи.
4. Результаты решения задачи.
5. Тексты программ.
6. Ответы на контрольные вопросы.
6.4. Содержание практических занятий
Практические занятия в программе данной дисциплины не предусмотрены.
6.5 Содержание самостоятельной работы
6.5.1 Общий перечень заданий для самостоятельной работы
Самостоятельная работа включает
- подготовку к лабораторным работам;
- обработку результатов лабораторных работ и их оформление;
- проработку теоретических разделов дисциплины и написание конспекта;
- подготовка к тестированию;
- подготовка к экзамену.
6.5.2 Методические рекомендации по выполнения заданий самостоятельной работы.
Подготовка к лабораторным занятиям включает обновление в памяти материалов
лекций, содержащих теоретические сведения, и учебной литературы. При этом, как правило, достаточным оказывается прочитать только литературу по основному списку.
Обработка результатов лабораторных работ и их оформление заключается в составлении отчета по лабораторной работе, который должен включать цель работы, задание,
результаты выполнения работы, ответы на контрольные вопросы.
Теоретические разделы для самостоятельной проработки: Публикация и М-книги.
Цель работы: научиться технологии создания m-книги.
Задание: В работе должны быть рассмотрены следующие вопросы
1. Работа в среде Notebook. Команды Notebook.
2. Написание М-книги.
3. Использование операторов системы MATLAB внутри текста.
4. Зоны вычислений.
5. Преобразование ячейки в текст.
56
6. Вычисление ячеек. Операции с результатами вычислений.
7. Управление форматом вывода чисел. Управление графическим выводом. Команды
Notebook.
Работа проводится группой студентов (3-4 человека).
Форма выполнения работы: конспект, презентация выполнения одной из лабораторных
работ в формате m-книги.
Подготовка к тестированию включает проработку конспекта лекций по теме тестирования.
Подготовка к экзамену включает проработку конспекта лекций и рекомендованной
литературы, а также ответы на контрольные вопросы для предварительной самостоятельной оценки своих знаний.
6.5.4. Содержание курсового проекта (курсовой работы)
Курсовой проект в программе данной дисциплины не предусмотрен.
6.5.5. Учебно-методическое обеспечение самостоятельной работы студентов
1. Хант, Б. Р. Matlab R2007 с нуля. / Б. Р. Хант, Р. Л. Липсмен, Д. М. Розенберг. – М.:
Лучшие книги, 2008. - 352 с.
2. Ануфриев, И. Е. MATLAB 7 / И. Е. Ануфриев, А. Б. Смирнов, Е. Н. Смирнова. – СПб.:
БХВ-Петербург, 2005. – 1104 с.
7. Применяемые образовательные технологии
При реализации данной программы применяются образовательные технологии, описанные в табл. 2.
Таблица 2 - Применяемые образовательные технологии
Технологии
Слайд - материалы
Виртуальное моделирование
Работа в команде
Игра
Проблемное обучение
Проектный метод
Исследовательский метод
Виды занятий
Лекции Лаб.р. Практ./Сем.
СРС Курсовой проект
+
+
практические
курсовой проект
занятия не
+
не предусмотрен
предусмотрены
Тренинг
Другие методы
8. Контрольно-измерительные материалы и оценочные средства для текущего
контроля успеваемости, промежуточной аттестации по итогам освоения дисциплины
8.1. Краткое описание контрольных мероприятий, применяемых контрольноизмерительных технологий и средств.
Целью текущего контроля знаний студентов является проверка и оценка усвоения
ими теоретического, практического материала и приобретенных знания, умений и навыков.
Текущий контроль обеспечивается:
- допуском к выполнению лабораторных работ и защитой результатов выполнения
лабораторных работ;
- проверкой выполнения самостоятельной работы;
- тестированием по разделам теоретической части курса;
- ежемесячной аттестацией студентов по результатам посещения лекционных занятий, выполнения и защиты лабораторных работ.
57
Итоговый контроль заключается в проведении устного экзамена.
8.2. Описание критериев оценки уровня освоения учебной программы.
К экзамену допускаются студенты, выполнившие все индивидуальные задания и
защитившие лабораторные работы.
8.3. Контрольно измерительные материалы для итоговой аттестации по дисциплине
Экзаменационный билет содержит два вопроса: теоретический ответ должен быть
подтвержден практическими примерами, выполненными на компьютере в среде MATLAB.
Вопросы к экзамену
1. Система MATLAB. Преимущества.
2. Интерфейс MATLAB.
3. Работа в MATLAB “в режиме калькулятора”. Назначение переменной ans. Ввод действительных чисел. Форматы данных. Правила использования переменных. Просмотр и
удаление переменных рабочего пространства.
4. Простейшие арифметические действия. Редактирование выражений.
5. Операторы отношения. Логические операторы.
6. Элементарные математические функции. Функции для побитовых операций. Функции
комплексного аргумента.
7. Сохранение рабочего пространства.
8. Задание векторов и матриц. Обращение к элементам. Создание новых матриц на основе
существующих.
9. Формирование векторов и матриц определенного вида.
10. Векторные действия над векторами. Поэлементное преобразование векторов.
11. Поэлементное преобразование матриц. Матричные действия над матрицами.
12. Функции, используемые для работы с векторами и матрицами.
13. Построение графиков в линейном масштабе. Графическое окно.
Отображение сетки. Надписи на графиках.
14. Вывод нескольких графиков в одном окне, функции hold on и subplot.
15. Графики, отображаемые на разных отрезках. Графики в логарифмическом масштабе, в
полярных координатах. Использование функции plotyy.
16. Построение графиков в разных графических окнах. Параметры графических линий.
Изменение масштаба графика.
17. Построение диаграмм, столбцовые диаграммы.
18. Построение диаграмм, круговые диаграммы.
19. Построение гистограмм.
20. Построение трехмерных линий. Использование функции meshgrid.
21. Построение каркасных поверхностей.
22. Построение закрашенных поверхностей.
23. Создание контурных графиков. Движение точки по траектории.
24. Управление точкой обзора.
25. Изменение цветовой палитры. Установка параметров освещенности объекта. Управление свойствами материала. Работа с камерой.
26. Типы m-файлов. Создание, выполнение, редактирование файл-программ. 27. Файлфункции. Создание, сохранение выполнение файл-функций.
28. Файл-функции с несколькими входными и выходными аргументами. Подфункций.
29. Операторы условного перехода.
30. Операторы переключения.
58
31. Операторы цикла.
32. Операторы прерывания.
33. Диалоговые программы.
34. Отладка программ. Режим ячейки.
35. Использование командной строки для отладки программ.
36. Операции над полиномами.
37. Полиномиальная аппроксимация.
38. Интерполяция сплайнами.
39. Функции линейной алгебры.
40. Решение уравнений: функции fzero, roots, solve.
41. Поиск минимума функций.
42. Вычисление интегралов.
43. Решение дифференциальных уравнений.
44. Работа в среде Notebook. Команды Notebook.
45. Написание М-книги.
46. Использование операторов системы MATLAB внутри текста.
47. Зоны вычислений. Преобразование ячейки в текст. Вычисление ячеек. Операции с результатами вычислений.
48.Управление форматом вывода чисел. Управление графическим выводом.
49. Символьные переменные и функции, матрицы и векторы.
50. Вычисления с символьными переменными. Графическое представление функций.
51. Упрощение, преобразование и вычисления символьных выражений.
52. Нахождение символьных выражений для сумм. Вычисление пределов.
53. Символьное дифференцирование.
54. Символьное интегрирование.
9. Рекомендуемое информационное обеспечение дисциплины
9.1 Основная учебная литература
9.1.1 Плохотников К.Э. Вычислительные методы. Теория и практика в среде MATLAB:
курс лекций. Учебное пособие для вузов. - М.: Горячая линия - Телеком, 2009. –496 с.
9.1.2 Хант, Б. Р. Matlab R2007 с нуля. / Б. Р. Хант, Р. Л. Липсмен, Д. М. Розенберг. – М.:
Лучшие книги, 2008. - 352 с.
9.1.3. Ануфриев, И. Е. MATLAB 7 / И. Е. Ануфриев, А. Б. Смирнов,
Е. Н. Смирнова. – СПб.: БХВ-Петербург, 2005. – 1104 с.
9.2 Дополнительная учебная и справочная литература.
9.2.1 Дьяконов В., Круглов В. Математические пакеты расширения MatLAB.
Специальный справочник. - СПб.: Питер, 2001. - 475с.
9.2.2 Алексеев Е.Р., Чеснокова О.В. Решение задач вычислительной математики в пакетах
Mathcad 12, MATLAB 7, Maple 9. — М.: НТ Пресс, 2006. - 496 с.
9.3 Электронные образовательные ресурсы:
9.3.1 Ресурсы ИрГТУ, доступные в библиотеке университета и в локальной сети
университета:
http://library.istu.edu/hoe
http://www2.viniti.ru
9.3.2 Ресурсы сети Интернет
http://www.window.edu.ru
http://www.pilab.ru
http://www.edu.nstu.ru
59
60
Download