Вы находитесь на странице: 1из 117

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ


НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ

Хлыбов А.А., Хлыбова О.Н.

MathCAD и MATLAB
Начальный курс
Учебно-методическое пособие

Нижний Новгород
2007
Печатается по решению редакционно-издательского совета НГПУ

Хлыбов А.А., Хлыбова О.Н.


MathCAD и MATLAB. Начальный курс.
Учебно-методическое пособие.
Н. Новгород: НГПУ, 2007. – 117 с.

Учебно-методическое пособие предназначено для студентов


специальности 030600 «Технология и предпринимательство», изучающих
курс «Пакет прикладных программ». Пособие содержит теоретический
материал, примеры, снабженные необходимыми комментариями, и варианты
индивидуальных заданий.
Пособие может быть использовано студентами других вузов, где
изучаются основы работы в MathCAD и MATLAB, а также может быть
полезно всем желающим, применяющим математические и научно-
технические расчеты.

Отв. редактор: канд. техн. наук, доц. Н.О. Рябина


Рецензент: канд. техн. наук, доц. В.П.Хранилов

© Хлыбов А.А., 2007


Хлыбова О.Н., 2007
© НГПУ, 2007

2
СОДЕРЖАНИЕ
Введение ...........................................................................................................................................................4
Глава 1. MathCAD ............................................................................................................................................5
1.1. Основы работы в MathCAD..................................................................................................................5
1.1.1. Математические выражения..........................................................................................................5
1.1.2. Ввод текста .....................................................................................................................................7
1.1.3. Импорт текста.................................................................................................................................8
1.2. Графика системы MathCAD .................................................................................................................9
1.2.1. Построение двухмерных графиков.............................................................................................10
1.2.2. Построение трехмерных графиков .............................................................................................11
1.2.3. Построение пересекающихся фигур...........................................................................................12
1.2.4. Форматирование графиков ..........................................................................................................13
1.2.5. Создание анимационного клипа .................................................................................................16
1.3. Решение уравнений и систем уравнений средствами MathCAD ....................................................16
1.3.1. Численное решение алгебраического уравнения ......................................................................17
1.3.2. Нахождение корней полинома ....................................................................................................19
1.3.3. Решение систем уравнений .........................................................................................................20
1.3.4. Решение уравнений в символьном виде.....................................................................................23
1.4. Символьные вычисления....................................................................................................................23
1.5. Дифференциальные уравнения ..........................................................................................................29
1.5.1. Решение ОДУ первого порядка...................................................................................................30
1.5.2. Решение ОДУ высшего порядка .................................................................................................31
1.5.3. Решение системы ОДУ ................................................................................................................31
1.6. Программирование в MathCAD .........................................................................................................34
Глава 2. MATLAB ..........................................................................................................................................41
2.1. Основы работы в MATLAB................................................................................................................41
2.1.1. Числовые переменные .................................................................................................................42
2.1.2. Форматы чисел .............................................................................................................................43
2.1.3. Задание векторов и матриц..........................................................................................................43
2.1.4. Операции над векторами и матрицами ......................................................................................45
2.1.5. Константы и системные переменные .........................................................................................48
2.2. Графика системы MATLAB ...............................................................................................................49
2.2.1. Двумерная графика ......................................................................................................................49
2.2.2. Трехмерная графика.....................................................................................................................53
2.2.3. Форматирование графиков ..........................................................................................................56
2.2.4. Графики разного типа в одном окне...........................................................................................57
2.2.5. Специальная графика...................................................................................................................59
2.2.6. Операции над графическими объектами....................................................................................60
2.3. Обработка данных...............................................................................................................................61
2.3.1. Статистическая обработка данных .............................................................................................61
2.3.2. Интерполяция и аппроксимация данных ...................................................................................66
2.3.3. Обработка данных в графическом окне .....................................................................................69
2.3.4. Интерполяция периодических функций рядом Фурье..............................................................69
2.3.5. Одномерная табличная интерполяция........................................................................................71
2.4. Основы программирования в MATLAB ...........................................................................................72
2.4.1. Создание класса или объекта ......................................................................................................74
2.4.2. Проверка принадлежности объекта к заданному классу ..........................................................74
2.4.3. Программы и функции.................................................................................................................75
2.5. Решение уравнений и систем уравнений средствами MATLAB ....................................................84
2.5.1. Вычисление нулей функции одной переменной .......................................................................84
2.5.2. Минимизация функции одной переменной ...............................................................................87
2.5.3. Графический способ решения уравнений ..................................................................................88
2.5.4. Системы линейных алгебраических уравнений ........................................................................89
2.5.5. Полиномы .....................................................................................................................................91
2.6. Численные методы ..............................................................................................................................93
2.6.1. Дифференцирование ....................................................................................................................93
2.6.2. Численное интегрирование .........................................................................................................94
2.6.3. Решение обыкновенных дифференциальных уравнений .........................................................97
Литература ....................................................................................................................................................100
Приложение ..................................................................................................................................................101

3
Введение

ВВЕДЕНИЕ
Одной из основных областей применения ПК являются математические
и научно-технические расчеты. Сложные вычислительные задачи,
возникающие при моделировании технических устройств и процессов,
можно разбить на ряд элементарных: вычисление интегралов, решение
уравнений, решение дифференциальных уравнений и т. д. Для таких задач
уже разработаны методы решения, созданы математические системы,
доступные для изучения студентами.
Цель данного пособия - научить пользователя простейшим методам
вычислений с использованием современных информационных технологий.
Наиболее подходящими для этой цели являются математические системы
MathCAD и MATLAB.

4
Глава 1. MathCAD

ГЛАВА 1. MATHCAD

1.1. Основы работы в MathCAD


MathCAD занимает особое место среди множества таких систем
(MATLAB, Maple, Mathematica и др.), так как позволяет записывать на экране
формулы в привычном виде.
С помощью MathCAD можно:
- решить почти любую математическую задачу символьно или
численно;
-размещать текст в любых местах вокруг уравнений, чтобы
документировать процесс решения;
-рисовать двумерные и трехмерные графики;
-пользоваться иллюстрациями из других приложений Windows.
Объединяя в одном рабочем листе текст, графику и математические
выкладки, MathCAD облегчает понимание самых сложных вычислений.
Рабочие документы печатаются в таком же виде, как они выглядят на экране.
MathCAD работает с документами. С точки зрения пользователя,
документ - это чистый лист бумаги, на котором можно размещать блоки трех
основных типов: математические выражения, текстовые регионы и
графические области.
Расположение нетекстовых блоков в документе имеет принципиальное
значение – слева направо и сверху вниз.

1.1.1. Математические выражения


К основным элементам математических выражений MathCAD
относятся типы данных, операторы, функции и управляющие структуры.
Типы данных
• Числа, в том числе действительные, комплексные и встроенные
константы (∞=10307, e=2.718, %=0.01, i=i, j=i, π=3.142), системные
переменные (TOL – точность численных методов=10-3, CTOL – точность
выполнения выражений, используемая в некоторых численных методах=10-3,

5
Глава 1. MathCAD

ORIGIN – номер начального индекса в массивах=0, PRNCOLWIDTH –


установка формата столбца при выводе в файл=8, PRNPRECISION -
установка формата данных при выводе в файл=4, CWD – строковое
представление пути к текущей рабочей папке).
• Строковые выражения. Значением переменной или функции
может быть не только число, но и строка, состоящая из любой
последовательности символов, заключенных в кавычки.
• Массивы – упорядоченные последовательности чисел или строк.
Векторы и матрицы можно задавать различными способами:
• с помощью команды Вставка ⇒ Матрица, или комбинации

клавиш Ctrl + M, или щелчком на кнопке панели Матрица


, заполнив массив пустых полей для не
слишком больших массивов;
• с использованием дискретного аргумента, когда имеется
некоторая явная зависимость для вычисления элементов через их индексы.
Операторы - элементы MathCAD, с помощью которых можно
создавать математические выражения. К ним, например, относятся символы
арифметических операций, знаки вычисления сумм, произведений,
производной и интеграла и т.д.
Оператор определяет:
1. действие, которое должно выполняться при наличии тех или иных
значений операндов;
2. сколько, где и какие операнды должны быть введены в оператор.
Операнд – число или выражение, на которое действует оператор.
Например, в выражении 2*3 числа 2 и 3– операнды оператора * (умножить).
Функция – выражение, согласно которому проводятся некоторые
вычисления с аргументами и определяется его числовое значение.
Существует разница между аргументами и параметрами функции.
Переменные, указанные в скобках после имени функции, являются ее

6
Глава 1. MathCAD

аргументами и заменяются при вычислении функции значениями из скобок.


Переменные в правой части определения функции, не указанные скобках в
левой части, являются параметрами и должны задаваться до определения
функции.
Главным признаком функции является возврат значения, т.е. функция в
ответ на обращение к ней по имени с указанием ее аргументов должна
возвратить свое значение.
Функции в пакете MathCAD могут быть встроенные, т. е.
заблаговременно введенные разработчиками, и определенные пользователем.
Способы вставки встроенной функции:
1. Выбрать пункт меню Вставка ⇒ Функция.
2. Нажать комбинацию клавиш Ctrl + E.

3. Щелкнуть на кнопке .
Форматирование результатов производится с помощью
Формат→Результат. В появившемся диалоговом окне можно установить
систему счисления, формат числа, точность.

1.1.2. Ввод текста


Текстовые области (или по-другому, регион с текстом)– области текста
изменяемого размера, которые могут появляться в любом месте документа.
Текстовые области служат для комментариев, объясняя и аннотируя
уравнения и графики. Текст может использовать любые стили, а также
шрифты всех гарнитур, размеров и начертаний. Автоматически выполняются
переносы по задаваемым границам.
Для того чтобы создать текстовую область, нужно щелкнуть в
свободном месте и выполнить пункт Вставка→Область текста или нажать
клавишу с двойной кавычкой (“). Появится текстовая рамка, которая будет
расширяться по мере ввода текста. Чтобы ввести вторую строку текста
достаточно нажать Enter. Чтобы выйти из текстовой области щелкните вне

7
Глава 1. MathCAD

текстовой области, и текстовая рамка исчезнет. Вставка и удаление текста в


существующую область производится также как в текстовом редакторе.

1.1.3. Импорт текста


Импорт текста возможен из других приложений, например из Word.
Сделать это проще всего через буфер обмена. Сделать это можно двумя
способами:
1. Создайте текстовую область, и, находясь внутри нее, вставьте
содержимое буфера обмена сочетанием [Ctrl + V]. Фрагмент будет вставлен
в виде обычной текстовой области, которую потом можно будет
редактировать стандартными для MathCAD средствами.
2. Не создавая текстовой области, вставьте фрагмент из буфера
обмена. Текст будет вставлен в виде объекта OLE, т.е. для его
редактирования каждый раз будет вызываться то приложение, в котором он
был создан. Чтобы вернуться к редактированию вставленного таким образом
текста, следует дважды щелкнуть на нем мышью.
Второй способ вставки текста применяется в том случае, если
специальное форматирование невозможно осуществить средствами
MathCAD.
Редактирование текста происходит после его выделения. Надо
выбрать Формат⇒Текст, появится диалоговое окно, в котором можно
изменить шрифт, начертание, цвет и размер текста. Этого же можно достичь
с помощью правой кнопки мыши.
Математические символы внутри текста могут потребоваться для
качественного оформления документа. Для создания таких областей
используется команда Вставка→Область математики. Затем обычным
способом вводятся математические выражения. Формулы в тексте влияют на
вычисления точно так же, как если бы были помещены в математический
регион непосредственно в документе. Если необходимо, чтобы
математическая область внутри текста не влияла на вычисления, надо

8
Глава 1. MathCAD

отключить их. Для этого, находясь в режиме редактирования формулы,


выполните команду Формат⇒Свойства и, перейдя на вкладку вычисления,
установите флажок Запретить вычисления.
Выравнивание областей предусмотрено для лучшего восприятия
документа. Для выравнивания надо сначала выделить несколько областей
(математических и текстовых) затем воспользоваться командой
Формат→Выравнивание областей, или нажать на соответствующие кнопки
на панели инструментов. При попытке выровнять области может возникнуть
ситуация, когда они станут перекрываться. В этом случае откроется
диалоговое окно с предупреждением.
Иногда в результате работы на поверхности документа может
появляться «мусор» - лишние символы, которых на самом деле нет в
документе. В этом случае следует сделать обновление документа с помощью
команды Вид→Обновить.

1.2. Графика системы MathCAD


Все графики создаются совершенно одинаково, с помощью панели
инструментов График , различия обусловлены
отображаемыми данными.
В MathCAD встроено несколько различных типов графиков, которые
можно разбить на две большие группы:
¾ Двухмерные графики
• XY (декартовый) график ,
• Полярный график
¾ Трехмерные графики
• График трехмерной поверхности ,

• График линий уровня ,


• Трехмерная гистограмма ,

9
Глава 1. MathCAD

• Трехмерное множество точек ,


• Векторное поле .

1.2.1. Построение двухмерных графиков


Построить график любой скалярной функции f(x) можно двумя
способами. Первый заключается в дискретизации значений функции,
присвоении этих значений вектору и прорисовке графика вектора (рис. 1).

Рис. 1.1
Второй, более простой способ, называемый быстрым построением
графика (рис. 2), заключается во введении функции в один из
местозаполнителей (например, у оси У), а имени аргумента – в
местозаполнитель у другой оси. В результате MathCAD сам создаст график
функции в пределах значений аргумента, по умолчанию принятых равными
от -10 до 10. Можно поменять диапазон значений аргумента, и график
автоматически подстроится под него.

sin( x)

x
Рис. 1.2

10
Глава 1. MathCAD

1.2.2. Построение трехмерных графиков

Трехмерные, или 3D-графики, отображают функции двух переменных


вида Z(X, Y).
Такие графики можно построить несколькими способами:
• применить встроенную функцию MathCAD CreateMesh
CreateMesh(F, x0, x1, y0, y1, xgrid, ygrid, fmap) создает сетку на
поверхности, определенной функцией F, x0, x1, y0, y1 – диапазон изменения
переменных, xgrid, ygrid – размеры сетки переменных, fmap – функция
отображения. По умолчанию CreateMesh создает сетку на поверхности с
диапазоном изменения переменных от –5 до 5 и с сеткой 20×20 точек.
Пример использования функции CreateMesh для построения 3D-
графиков приведен на Рис. 3.

Рис.1.3
• быстрое создание графика
Для «быстрого» создания трехмерных графиков необходимо в
местозаполнитель ввести имя функции от двух переменных (Рис.1.4).

11
Глава 1. MathCAD

Рис. 1.4
• дискретизация значений функции

Рис. 1.5

1.2.3. Построение пересекающихся фигур

Особый интерес представляет собой возможность построения на одном


графике ряда разных фигур или поверхностей с автоматическим учетом их
взаимного пересечения. Для этого надо раздельно задать матрицы
соответствующих поверхностей и после вывода шаблона 3D-графика
перечислить эти матрицы под ним с использованием в качестве разделителя
запятой (Рис. 1.6).

12
Глава 1. MathCAD

(2
f ( x, y ) := sin x + y
2 ) 2 2
g ( x, y ) := x + y − 6 x := 0 .. 20 y := 0 .. 2

:= f ⎡⎢
( x − 10) ( y − 10) ⎤
:= g ⎡⎢
( x − 6) ( y − 6) ⎤
M , ⎥ L , ⎥
x, y ⎣ 5 5 ⎦ x, y ⎣ 3 3 ⎦

M , L, L
Рис. 1.6. Построение двух пересекающихся поверхностей.
1.2.4. Форматирование графиков

Форматирование двухмерных графиков происходит в окне

Форматирование осей включает в себя управление их внешним


видом, диапазоном, шкалой, нумерацией и отображением некоторых
значений на осях при помощи маркеров.
Изменение внешнего вида шкалы, нанесенной на координатную ось,
производится с помощью диалогового окна Форматирование выбранного
графика (Formatting Currently Selected X-Y Plot). Вызвать его можно
двойным щелчком в области графика или Формат ⇒График ⇒Точка Х-У.

13
Глава 1. MathCAD

С помощью флажков и переключателей легко поменять внешний вид


каждой из осей. Доступные опции:
- логарифмический масштаб; удобен, если данные разнятся на
несколько порядков.
- линии сетки;
- нумерация, если убрать этот флажок, то числа, размечающие шкалу,
пропадут.
- автомасштаб.
- показать метки, после включения этой опции надо в появившиеся
местозаполнители ввести числи или имя переменной, значение которой вы
хотите отобразить на оси маркером.
- равные масштабы, оси ОХ и ОУ принудительно рисуются в
одинаковом масштабе.
- стиль осей графика можно выбрать из трех видов: ограниченная
область- прямоугольник; пересечение – оси в виде двух пересекающихся
прямых; без границ – оси не показываются на графике.
С помощью вкладки Traces (Трассировки) можно выбрать вид линий.
Здесь же регулируются следующие параметры:
- легенда, описывает ряд данных,
- символ, вид маркера, которым обозначаются отдельные точки
данных,
- строка: solid-сплошная, dot-пунктир, dash-штрих, dadot-штрих-
пунктир,
- цвет линий и точек данных,
- тип представления ряда данных: lines (линии), points (точки), error
(ошибки), bar (столбцы), step (шаг), draw (рисунок), stem (стержень), solid bar
(гистограмма),
- вес – толщина линии.
Тип графика с отображением погрешностей (ошибок) требует задания
трех серий данных. Помимо пар (ХУ) необходимо задать еще две
14
Глава 1. MathCAD

последовательности данных, представляющих соответствующие значения


ошибок для каждой пары точек.
Для некоторых типов графиков те или иные параметры недоступны,
например, нельзя задать символ для шаговой кривой.
Создать заголовок графика можно на вкладке Метки.
Форматирование трехмерных графиков выполняется с помощью
диалогового окна Формат 3-D графика, которое вызывается двойным
щелчком мыши в области графика.

Изменение типа и масштаба графика происходит на вкладке Общее.


Вращение графика с нажатой левой кнопкой мыши – самый простой способ
ориентации системы координат. Другой способ изменения ориентации – с
помощью полей Вращение, Наклон, Поворот на вкладке Общие, которые в
совокупности определяют соответствующие углы в градусах, и тем самым
задают направление всех осей координат в пространстве. Вкладка Оси
содержит три вложенных вкладки, в которых задаются параметры для
каждой из трех осей. Можно включить или отключить показ линий сетки,
нумерации, задать диапазон по каждой из осей. При помощи вкладки Задние
планы задается показ проекций координатной сетки на три скрытые
плоскости трехмерного графика. На вкладке Дополнительно можно задать
Туман, Прозрачность, Перспективу, Блеск, Подсветку.

15
Глава 1. MathCAD

1.2.5. Создание анимационного клипа


Основной принцип анимации в MathCAD – покадровая анимация.
Номер кадра задается переменной FRAME.
Алгоритм создания анимационного клипа:
• Создайте объект, чей вид зависит от FRAME.
• Убедитесь, что установлен режим автоматического расчета
(Математика ⇒ Автоматическое Вычисление).
• Выберите Вид → Анимация для вызова одноименного
диалогового окна;
• Заключите в выделяющий пунктирный прямоугольник часть
рабочего документа, которую нужно анимировать;
• Установите нижние и верхние границы FRAME (поля От: и До:);
• В поле Скорость введите значение скорости воспроизведения
(кадров/сек);
• Выберите Анимация. После этого в окошке диалогового окна
Анимация будут появляться результаты расчетов выделенной области. По
окончании этого процесса на экране появится окно проигрывателя анимации;
• Запустите просмотр анимации;
• Сохраните анимацию как АVI файл, нажав на кнопку Сохранить
как в окне Анимация;
• Воспроизведите сохраненную анимацию Вид
⇒Воспроизведение.
Сохраненный видеофайл можно использовать за пределами MathCAD.

1.3. Решение уравнений и систем уравнений средствами


MathCAD
Как известно, многие уравнения и системы уравнений не имеют
аналитических решений. В первую очередь это относится к большинству
трансцендентных уравнений. Доказано также, что нельзя построить формулу,

16
Глава 1. MathCAD

по которой можно было бы решить произвольное алгебраическое уравнение


степени выше четвертой. Однако такие уравнения могут решаться
численными методами с заданной точностью (не более значения заданного
системной переменной TOL).
1.3.1. Численное решение алгебраического уравнения
Рассмотрим одно алгебраическое уравнение с одним неизвестным,
f(x)=0. Для решения таких уравнений MathCAD имеет встроенную функцию
root, которая, в зависимости от типа задачи, может включать либо два, либо
четыре аргумента root(f(x),x) и root(f(x),x,a,b);
где f(x) – скалярная функция, определяющая уравнение, х – скалярная
переменная, относительно которой решается уравнение, a,b – границы
интервала, внутри которого происходит поиск корня.
Первый тип функции root требует дополнительного задания
начального значения переменной х. Поиск корня будет производиться вблизи
этого значения. Таким образом, присвоение начального значения требует
априорной информации о примерной локализации корня.
Начальные приближения могут быть:
1. Известны из физического смысла задачи.
2. Известны из решения аналогичной задачи при других исходных
данных.
3. Найдены графическим способом.
Наиболее распространен графический способ определения начальных
приближений. Принимая во внимание, что действительные корни уравнения
f(x) = 0 - это точки пересечения графика функции f(x) с осью абсцисс,
достаточно построить график функции f(x) и отметить точки пересечения f(x)
с осью Ох, или отметить на оси Ох отрезки, содержащие по одному корню.
Построение графиков часто удается сильно упростить, заменив
уравнение f(x) = 0 равносильным ему уравнением: f1(x)=f2(x), где функции
f1(x) и f2(x) - более простые, чем функция f(x). Тогда, построив графики

17
Глава 1. MathCAD

функций у = f1(x) и у = f2(x), искомые корни получим как абсциссы точек


пересечения этих графиков.
Пример решения уравнения с начальным приближением.
Найдем первый корень: Найдем второй корень:

Корни найдены при задании разных начальных приближений.


Отсутствие сходимости функции root
Если после многих итераций MathCAD не находит подходящего
приближения, то появится сообщение Can’t converge to a solution.
(отсутствует сходимость). Эта ошибка может быть вызвана следующими
причинами:
• Уравнение не имеет корней.
• Корни уравнения расположены далеко от начального приближения.
• Выражение имеет локальные max и min между начальным
приближением и корнями.
• Выражение имеет разрывы между начальными приближениями и
корнями.
• Выражение имеет комплексный корень, но начальное приближение
было вещественным.
Чтобы установить причину ошибки, исследуйте график f(x). Он
поможет выяснить наличие корней уравнения f(x) = 0 и, если они есть, то
определить приблизительно их значения. Чем точнее выбрано начальное
приближение корня, тем быстрее будет root сходиться.
Рекомендации по использованию функции root
• Для изменения точности, с которой функция root ищет корень,
нужно изменить значение системной переменной TOL. Если значение TOL

18
Глава 1. MathCAD

увеличивается, функция root будет сходиться быстрее, но ответ будет менее


точен. Если значение TOL уменьшается, то функция root будет сходиться
медленнее, но ответ будет более точен. Чтобы изменить значение TOL в
определенной точке рабочего документа, используйте определение вида
TOL=0.01. Чтобы изменить значение TOL для всего рабочего документа,
выберите команду Математика ⇒ Параметры… ⇒ Переменные ⇒
Допуск сходимости (TOL).
• Если два корня расположены близко друг от друга, следует
уменьшить TOL, чтобы различить их.
• Если функция f(x) имеет малый наклон около искомого корня,
функция root(f(x), x) может сходиться к значению k, отстоящему от корня
достаточно далеко. В таких случаях для нахождения более точного значения
корня необходимо уменьшить значение TOL. Другой вариант заключается в
замене уравнения f(x) = 0 на g(x) = 0
f ( x)
g ( x) = .
d
f ( x)
dx

• Для выражения f(x) с известным корнем “а” нахождение


дополнительных корней f(x) эквивалентно поиску корней уравнения
h(x) = f(x)/(x - a). Подобный прием полезен для нахождения корней,
расположенных близко друг к другу. Проще искать корень выражения h(x),
чем пробовать искать другой корень уравнения f(x) = 0, выбирая различные
начальные приближения.
1.3.2. Нахождение корней полинома
Если функция f(x) является полиномом vnxn + ... + v2x2 + v1x + v0, то
все его корни можно определить, используя встроенную функцию
polyroots(v), где v-вектор, составленный из коэффициентов полинома. Так
как полином n-ой степени имеет ровно n корней (действительных и/или
комплексных, некоторые из них могут быть кратными), то вектор v должен
состоять из n+1 элемента. Результатом действия функции polyroots является

19
Глава 1. MathCAD

вектор, составленный из n корней рассматриваемого полинома. Начальное


приближение вводить не надо.

Вектор v удобно создавать использую команду Символы ⇒


Коэффициенты полинома.
Следующий пример иллюстрирует определение корней полинома
средствами MathCAD:

1.3.3. Решение систем уравнений

MathCAD дает возможность решать также и системы уравнений


(линейные и нелинейные). Максимальное число уравнений и переменных
равно 50. Результатом решения системы будет численное значение искомого
корня.
Для решения систем имеется специальный вычислительный блок,
состоящий из трех частей, идущих последовательно друг за другом:
Given – ключевое слово;
Система, записанная логическими операторами в виде равенств или
неравенств;
Find(x1,…xn) – встроенная функция для решения системы
относительно переменных x1,…xn.
Вставлять логические операторы следует, пользуясь панелью Булевы
. Блок Given/ Find использует для поиска
решения итерационные методы, поэтому требуется задать начальные
значения для всех x1,…xn. Сделать это необходимо до ключевого слова
Given. Значение функции Find есть вектор, составленный из решения по

20
Глава 1. MathCAD

каждой переменной. Таким образом, число элементов вектора равно числу


аргументов Find.
Следующие выражения недопустимы внутри блока решения:
• Ограничения со знаком ≠.
• Дискретный аргумент или выражения, содержащие дискретный
аргумент в любой форме.
• Неравенства вида a < b < c.
Блоки решения уравнений не могут быть вложены друг в друга,
каждый блок может иметь только одно ключевое слово Given и имя функции
Find. Функция, которая завершает блок решения уравнений, может быть
использована аналогично любой другой функции.
Системы линейных алгебраических уравнений

Центральным вопросом вычислительной линейной алгебры является


решение систем линейных алгебраических уравнений (СЛАУ).
В матричной форме СЛАУ записывается в виде: А*х=b, где А –
матрица коэффициентов СЛАУ, х-вектор неизвестных, b-вектор правых
частей уравнений.
СЛАУ имеет единственное решение, если матрица А является
невырожденной, т.е. ее определитель не равен нулю.
В MathCAD СЛАУ можно решить двумя способами.
Для первого способа следует использовать вычислительный блок
Given/Find.

21
Глава 1. MathCAD

Для второго способа используют встроенную функцию lsolve.


Аргументами этой функции являются А – матрица коэффициентов СЛАУ и
b- вектор-столбец свободных членов.
При этом определяют матрицу любым способом.

Сообщение об ошибке No solution was found. Try changing the guess


value or the value of TOL or CTOL. (Решение не найдено) при решении
уравнений появляется, когда:
• Поставленная задача может не иметь решения.
• Для уравнения, которое не имеет вещественных решений, в
качестве начального приближения взято вещественное число и наоборот.
• В процессе поиска решения последовательность приближений
попала в точку локального минимума невязки. Для поиска искомого решения
нужно задать различные начальные приближения.
• Возможно, поставленная задача не может быть решена с
заданной точностью. Попробуйте увеличить значение TOL.
Приближенные решения
Функция Minerr очень похожа на функцию Find (использует тот же
алгоритм). Если в результате поиска не может быть получено дальнейшее
уточнение текущего приближения к решению, Minerr возвращает это
приближение. Функция Find в этом случае возвращает сообщение об
ошибке. Правила использования функции Minerr такие же, как и функции
Find.
Minerr(x1,x2,...) возвращает приближенное решение системы
уравнений. Число аргументов должно быть равно числу неизвестных.

22
Глава 1. MathCAD

Замечание: Если Minerr используется в блоке решения уравнений,


необходимо всегда включать дополнительную проверку достоверности
результатов.

1.3.4. Решение уравнений в символьном виде

Решение уравнений в символьном виде позволяет найти точные или


приближенные корни уравнения:
• Если решаемое уравнение имеет параметр, то решение в символьном
виде может выразить искомый корень непосредственно через параметр.
Поэтому вместо того, чтобы решать уравнение для каждого нового значения
параметра, можно просто заменять его значение в найденном символьном
решении.
• Если нужно найти все комплексные корни полинома со степенью
меньше или равной 4, символьное решение даст их точные значения в одном
векторе или в аналитическом или цифровом виде.
Чтобы решить систему уравнений в символьном виде, необходимо
выполнить следующее:
• Напечатать ключевое слово Given.
• Напечатать уравнения в любом порядке ниже слова Given.
• Напечатать функцию Find, соответствующую системе уравнений.
• Ввести оператор символьного вывода →.
• Щелкнуть мышью на функции Find.

1.4. Символьные вычисления


Наряду с численным вводом, в MathCAD имеется возможность
символьного, или аналитического, вычисления значения выражения.
Символьные вычисления в MathCAD можно осуществить в двух
различных вариантах:
• с помощью команд меню,

23
Глава 1. MathCAD

• с помощью оператора символьного вывода →, ключевых слов


символьного процессора и обычных формул (в справочной системе
MathCAD этот способ называется символьными вычислениями в реальном
времени – live symbolic evaluation).
Первый способ более удобен, когда требуется быстро получить какой-
либо аналитический результат для однократного использования, не сохраняя
сам ход вычислений. Второй способ более нагляден, т.к. позволяет
записывать выражения в традиционной математической форме и сохранять
символьные вычисления в документах MathCAD. Кроме того, аналитические
преобразования, проводимые через меню, касаются только одного,
выделенного в данный момент выражения. Соответственно, на них не влияют
формулы, находящиеся в документе выше этого выделенного выражения
(например, операторы присваивания значений каким-либо переменным).
Оператор символьного вывода, напротив, учитывает все предыдущее
содержимое документа и выдает результат с его учетом.
Для символьных вычислений при помощи команд предназначено
главное меню Символика, объединяющее математические операции, которые
MathCAD умеет выполнять аналитически. Для реализации второго способа
применяется специальная панель инструментов (рис.3.1), на которой
находятся кнопки, соответствующие специфическим командам символьных
преобразований.

Символьные операции можно выполнять двумя способами:


- непосредственно в командном режиме (используя операции меню
Символы);

24
Глава 1. MathCAD

- с помощью операторов символьного преобразования (используя

палитру инструментов Символы ).


Разложение на множители (expand)

Sin(2*x)
Первый способ (с помощью меню).
• Ввести выражение sin(2*x)
• Выделить его целиком
• Выбрать в главном меню Символика⇒Разложить (расширить)
После этого ниже появится результат.
Второй способ (с помощью оператора →).
• Ввести выражение sin(2*x)
• Нажать кнопку Expand
• Ввести в местозаполнитель после появившегося ключевого слова
expand имя переменной,
• Ввести оператор символьного вывода →
• Нажать Enter либо щелкнуть мышью за пределами выражения.
sin ( 2 ⋅ x) expand , x → 2 ⋅ sin ( x) ⋅ cos ( x)
Оператор символьного вывода можно ввести несколькими способами:
• нажатием кнопки на панелях Вычисления или Символьный
• сочетанием клавиш Ctrl+<.>.
Не всякое выражение поддается аналитическим преобразованиям. Если
задача не имеет аналитического решения или оказывается слишком сложной
для символьного процессора MathCAD, то в качестве результата выводится
само выражение.
Упрощение выражений (Simplify)
При упрощении используются различные арифметические формулы,
приведение подобных, тригонометрические тождества и т.д.
2 2 2
( x + 2 ⋅ y ) ⋅ z − z ⋅ ( x + 5 ⋅ y ) + z simplify → z ⋅ x + 2 ⋅ z ⋅ y − z ⋅ x − 5 ⋅ z ⋅ y + z

25
Глава 1. MathCAD

Упрощение выражения с подстановкой значения переменных:


x := 10 y := 1

2 2
( x + 2 ⋅ y ) ⋅ z − z ⋅ ( x + 5 ⋅ y ) + z simplify → 13 ⋅ z − 15 ⋅ z

Упрощение выражений, содержащих числа, производится по-разному,


в зависимости от наличия в числах десятичной точки. Если она есть, то
выполняется непосредственное вычисление выражения:
1
2
5 simplify → 5

5.001simplify → 2.236291573118 31768

Разложение на множители (Factor)

Эта операция позволяет разложить полиномы на произведение более


простых полиномов, а целые числа – на простые сомножители. Применяя
команду меню, не забывайте перед ее вызовом выделить все выражение или
его часть, которую планируете разложить на множители. При применении
операторов удалите местозаполнитель, нажав клавишу Delete.
4 (2 )
x − 16 factor → ( x − 2) ⋅ ( x + 2) ⋅ x + 4
2
28 factor → 2 ⋅ 7

Приведение подобных слагаемых (Collect)


После ключевого слова Collect надо ввести имя переменной,
относительно которой требуется привести подобные. Допускается задание
нескольких переменных через запятую. В этом случае приведение подобных
осуществляется последовательно по всем переменным.

26
Глава 1. MathCAD

2 ( 2 )
( x + 2 ⋅ y ) ⋅ z − z ⋅ y ⋅ ( x + 5 ⋅ y ) + z collect, x → z − z ⋅ y ⋅ x + 2 ⋅ z ⋅ y − 5 ⋅ z ⋅ y + z
2 2

2 2 2 ( 2 )
( x + 2 ⋅ y ) ⋅ z − z ⋅ y ⋅ ( x + 5 ⋅ y ) + z collect, y → −5 ⋅ z ⋅ y + 2 ⋅ z − z ⋅ x ⋅ y + z ⋅ x + z
2 2
( x + 2 ⋅ y ) ⋅ z − z ⋅ y ⋅ ( x + 5 ⋅ y ) + z collect, z → −z ⋅ y ⋅ ( x + 5 ⋅ y ) + ( x + 2 ⋅ y + 1) ⋅ z

2 ( 2 ) 2
( x + 2 ⋅ y ) ⋅ z − z ⋅ y ⋅ ( x + 5 ⋅ y ) + z collect, x, y , z → z − z ⋅ y ⋅ x + 2 ⋅ z ⋅ y − 5 ⋅ z ⋅ y + z
2

Коэффициенты полинома (Polynomial Coefficients)


Если выражение является полиномом относительно некоторой
переменной, заданным не в обычном виде, а как произведение других, более
простых полиномов, то коэффициенты легко определяются с помощью
оператора Coeffs.
⎛ 50 ⎞
⎜ ⎟
⎜ 28 ⎟
( x − 4) ⋅ ( x − 7) ⋅ x + 50 coeffs , x →
⎜ −11 ⎟
⎜ 1 ⎟
⎝ ⎠

Разложение на элементарные дроби (Сonvert to Fractions)


Чтобы разложить сложную дробь на более простые дроби, следует
либо выполнить команду Символика ⇒Переменная ⇒Преобразовать в
элементарную дробь, либо указать ключевое слово parfrac. Применяя меню
(первый способ) не забывайте перед выбором его команды выделить
переменную, по которой будет производиться разложение, а если
используется второй способ (с оператором символьного вывода), то имя
переменной следует указать после ключевого слова.
2
11 ⋅ x + 9 ⋅ x + 1 21 63
convert, parfrac, x → 11 − +
2 x− 1 x− 2
x − 3⋅ x+ 2

Подстановка переменной (Substitute)


При помощи меню подстановка производится следующим образом:
• выделить значение переменной, которое необходимо подставить;
• скопировать значение переменной в буфер обмена;

27
Глава 1. MathCAD

• выделить в выражении, в которое требуется подставить значение,


переменную, которая будет заменяться;
• выполните команду Символика ⇒Переменная ⇒Заменить.
Для осуществления той же операции с помощью оператора
символьного вывода используйте ключевое слово Substitute. После него
необходимо ввести логическое выражение, показывающее, какую именно
переменную, какой формулой следует заменить.
( 2 )
sin k ⋅ x + b ⋅ x subst itut e , k a⋅x
2 ( 4 )
→ sin a ⋅ x + b ⋅ x

Ряды и произведения
Чтобы вычислить символьно конечную или бесконечную сумму или
произведение:
• введите выражение. Символ ∞ вводится с помощью клавиш
Ctrl+Shift+Z;
• в зависимости от желаемого стиля символьных вычислений
выберите команду Символика ⇒Упростить или введите оператор
символьного вывода →.
∞ n
simplify → exp⎛⎜
1 1⎞
∑ n

⎝ 2⎠
n = 0 2 n!

Матричная алгебра
Так как большинство операций и встроенных функций осуществляются
над матрицами точно так же, как и над обычными числами, к матричным

28
Глава 1. MathCAD

вычислениям можно применять команду упрощения Simplify. Кроме того,


имеется несколько кнопок на панели Символика, относящихся к матрицам.
Это Транспонирование, Обратная матрица и Определитель. Выполняются
действия с матрицами в той же последовательности, что и операции со
скалярными переменными.
Стиль представления результатов вычислений

На наглядность вычислений влияет стиль представления их


результатов. Следующая команда позволяет задать тот или иной стиль:
Стиль Вычислений... — задать вывод результата символьной
операции под основным выражением, рядом с ним или вместо него.

1.5. Дифференциальные уравнения

Дифференциальные уравнения – это уравнения, в которых


неизвестными являются не переменные (т.е. числа), а функции одной или
нескольких переменных. Если в уравнение входят производные только по
одной переменной, то они называются обыкновенными дифференциальными
уравнениями (ОДУ). В противном случае говорят об уравнениях в частных
производных. Таким образом, решить дифференциальное уравнение – значит
определить неизвестную функцию на определенном интервале изменения ее
переменных.
ОДУ имеет единственное решение, если помимо уравнения заданы
начальные или граничные условия.
Имеются два типа задач, которые возможно решить с помощью
MathCAD:
- задачи Коши – для которых определены начальные условия на
искомые функции, т.е. заданы значения этих функций в начальной точке
интервала интегрирования уравнения;
- краевые задачи – для которых заданы определенные соотношения
сразу на обеих границах интервала.

29
Глава 1. MathCAD

Дифференциальное уравнение первого порядка может по определению


содержать, помимо самой искомой функции, только ее первую производную.
В большинстве случаев ДУ можно записать в стандартной форме (форме
Коши):
1
y ( t) f( y ( t ) , t )
Внимание: MathCAD умеет работать только с такой формой записи.

1.5.1. Решение ОДУ первого порядка


Вычислительный блок для решения одного ОДУ, реализующий
численный метод Рунге-Кутта, состоит из трех частей:
Given – ключевое слово;
ОДУ и начальное условие, записанное с помощью логических
операторов, причем начальное условие должно быть в форме y(t0)=b;
Odesolve(t,t1) – встроенная функция для решения ОДУ относительно
переменной t на интервале (t0,t1). Допустимо задание функции Odesolve
(t,t1,step) с тремя параметрами, где step – внутренний параметр численного
метода, определяющий количество шагов.

MathCAD требует, чтобы конечная точка интегрирования ОДУ лежала


правее начальной, иначе будет выдано сообщение об ошибке. Результатом
применения блока Given\ Odesolve является функция у(t), определенная на
промежутке (t0,t1). Можно построить ее график или получить значение
внутри интервала.

30
Глава 1. MathCAD

1.5.2. Решение ОДУ высшего порядка

В MathCAD с помощью вычислительного блока Given\ Odesolve


можно решать ОДУ высшего порядка. Для корректной постановки задачи
Коши требуется задать n начальных условий на саму функцию и ее
производные от первого до (n-1)-го порядка включительно.
Внутри вычислительного блока:
• ОДУ должно быть линейно относительно старшей производной,
• начальные условия должны иметь форму y(t)=b или y(n)(t)=b.
Рассмотрим осциллятор с затуханием:

Можно свести ОДУ высшего порядка к эквивалентной системе ОДУ


первого порядка и решить эту систему.

1.5.3. Решение системы ОДУ


Для решения системы ОДУ имеются три встроенные функции,
соответствующие трем численным методам:
rkfixed (y0,t0,t1,M,D) – метод Рунге – Кутты с фиксированным шагом,
Rkadapt (y0,t0,t1,M,D) – метод Рунге – Кутты с переменным шагом,
Bulstoer (y0,t0,t1,M,D) – метод Булирша-Штера.
Где y0 – вектор начальных значений в точке t0 размера Nx1, t0 –
начальная точка расчета, t1- конечная точка расчета, М – число шагов, на
которых численный метод находит решение, D-векторная функция размера
Nx1 двух аргументов – скалярного t и векторного y. При этом у – искомая
функция аргумента t того же размера.

31
Глава 1. MathCAD

Каждая из приведенных функций выдает решение в виде матрицы


размера (M+1)x(N+1). В ее левом столбце находятся значения аргумента t,
делящие интервал на равномерные шаги, а в остальных N столбцах –
значения искомых функций y0(t), y1(t),..,yN-1(t), рассчитанные для этих
значений аргумента. Так как всего точек (помимо начальной) М, то строк в
матрице решения будет М+1.
Сведем уравнение второго порядка к системе уравнений

Решение будет выведено в виде матрицы размера (M+1)x(N+1), т.е.


101х3. Посмотреть все компоненты матрицы, которые не помещаются на
экране, можно с помощью полосы прокрутки.
Определяя матрицу D, помните, что она должна быть обязательно
функцией двух аргументов, второй ее аргумент должен быть вектором того
же размера, что и сама функция D. Точно такой же размер должен быть и у
вектора начальных значений.
Чтобы построить график решения, надо отложить соответствующие
компоненты матрицы решения по координатным осям: значения аргумента
u<0> - вдоль оси Х, а u<1> и u<2> - вдоль оси У. Все операции выполняются с
помощью панели Матрица.

32
Глава 1. MathCAD

0.1

〈 1〉 0
u

− 0.1
0 20 40 60
0 〈 0〉 50
u

Фазовый портрет системы более нагляден. Он имеет одну


стационарную точку (аттрактор), на которую «накручивается» решение. В
теории динамических систем аттрактор такого типа называется фокусом. Для
его построения надо по оси Х поставить u<1> , а по оси У - u<2>.
0.1
0.078

〈2〉 0
u

− 0.093 0.1
0.1 0 0.1
− 0.084 〈1〉 0.1
u

Замечание: В общем случае, если система состоит из n ОДУ, то фазовое


пространство является n-мерным и наглядность теряется. Для визуализации
фазового портрета приходится строить его различные проекции.
При решении системы ОДУ может возникнуть ошибка «Found a number
with a magnitude greater than 10^307» (Найдено число, превышающее
значение 10307). Данная ошибка может означать не то, что решение
действительно расходится, а просто не хватает шагов для корректной работы
численного алгоритма. Подобные проблемы могут быть устранены при
помощи увеличения числа шагов численного метода.
Мы рассмотрели решения только линейных уравнений и систем, т.е.
содержащих только первую степень неизвестных функций и их производных.
Нелинейные системы уравнений, например, известные модели динамики

33
Глава 1. MathCAD

популяций (модель Вольтерра), генератора автоколебаний (Ван дер Поля),


турбулентной конвекции (Лоренца) и другие, решаются аналогично.

1.6. Программирование в MathCAD


Для вставки программного кода в документы MathCAD имеется
специальная панель инструментов Программирование. Большинство кнопок
этой панели выполнено в виде текстового представления операторов
программирования, поэтому их смысл легко понятен.

Программирование имеет ряд преимуществ:


• возможность применения циклов и условных операторов;
• простота создания функций и переменных, требующих нескольких
простых шагов;
• возможность создания функций, содержащих закрытый для
остального документа код, включая преимущества использования
локальных переменных и обработку ошибок.
Программный модуль обозначается в MathCAD вертикальной чертой,
справа от которой последовательно записываются операторы языка
программирования.
Чтобы создать программный модуль, надо:
1. ввести часть выражения, которая будет находиться слева от знака
присваивания и сам знак присваивания, например, f(x).
2. нажать на панели Программирование кнопку Add Line
(добавить строку программирования), если приблизительно
известно, сколько строк будет содержать программа, можно
многократным нажатием на эту кнопку ввести соответствующее

34
Глава 1. MathCAD

количество строк. Вставить строку программного кода можно в


любой момент с помощью той же кнопки Add Line.
3. в появившиеся местозаполнители ввести желаемый программный
код, используя программные операторы.
После того как программный модуль полностью определен и ни один
местозаполнитель не остался пустым, функция может использоваться
обычным образом, как в численных, так и в символьных расчетах.
Имена программных операторов нельзя вводить с клавиатуры. Для их
вставки можно применять панель инструментов или сочетания клавиш,
которые приведены в тексте всплывающей подсказки.
Таким образом, программа MathCAD есть выражение, состоящее из
последовательности операторов, каждый из которых является, в свою
очередь, выражением.
Язык программирования не был бы эффективным, если бы не позволял
создавать внутри программных модулей локальные переменные.
Присваивание в пределах программ, в отличие от документов MathCAD,
производится с помощью оператора Локальное присваивание (Local
Definition), который вставляется с помощью кнопки с изображением
стрелки«←». Ни оператор присваивания :=, ни оператор ввода = в пределах
программы не применяются.
Пример 1. вычислить значение f(x), заданное выражением f(x):=z+5
f( x) := z ← 5
z+ x

f( 6) = 11

Условные операторы (if, otherwise)


Действие условного оператора if состоит из двух частей. Сначала
проверяется логическое выражение (условие) справа от него. Если оно
истинно, выполняется выражение слева от оператора if. Если ложно,

35
Глава 1. MathCAD

выполнение программы продолжается переходом к ее следующей строке.


Вставить условный оператор можно следующим образом:
• создайте новую строку программного кода, нажав кнопку Add Line,
• нажмите кнопку if и справа от него введите условие (панель
Булевы),
• выражение, которое должно выполняться, если условие истинно,
введите слева от оператора if,
Оператор otherwise используется совместно с одним или несколькими
условными операторами if и указывает на выражение, которое будет
выполнено, если ни одно из условий не оказалось истинным.
Пример 2.

f( x) := "negat ive" if x < 0


if x > 0
"posit iv"
"big posit ive" if x > 1000
"zero " ot herwise

f( 1) = "posit iv"

( 5) = "big posit ive"


f 10

Рассмотрим использование оператора if для задания кусочно-гладкой


функции.
Пример 3.

36
Глава 1. MathCAD

Можно определить функцию непосредственно, при помощи


встроенной функции if:

(
g ( x) := if x > 2 , 0 , 4 − x
2 )
но это определение хотя и более краткое, но менее наглядное.
Пример 4.

Эквивалентное, но намного более сложное, определение этой же


функции:

( ( ( 2
H( x) := if −2 ≤ x ≤ −1.3, F( x) , if −1.3 ≤ x ≤ 0 , −F( x) , if 0 ≤ x ≤ 1.4, F( x) , x)))
Операторы цикла (for, while, break, continue)
В языке программирования MathCAD имеются два оператора цикла:
for и while. Первый из них дает возможность организовать цикл по
некоторой переменной, заставляя ее пробегать некоторый диапазон значений.
Второй создает цикл с выходом из него по некоторому логическому условию.
Если выбран оператор for, то в соответствующие местозаполнители надо
вставить имя переменной и диапазон ее значений, если while – то логическое
выражение, при нарушении которого должен осуществляться выход из
цикла. В нижний местозаполнитель вводится тело цикла, т.е. выражение,
которое должно выполняться циклически. Важно, чтобы в программе
присутствовал оператор, делающий условие цикла ложным. В противном
случае, цикл будет выполняться бесконечно. Если выполняемая программа
зациклилась, то ее можно остановить, нажатием клавиши Esc.

37
Глава 1. MathCAD

Пример 5.

x := z← 0
for i ∈ 0 .. 6
z ← z + 2⋅ i

Пример 6. Поиск первого элемента вектора, превосходящего заданное


значение.
Создание вект ора

m := 0 .. 2500 v := 1 + sin ( m)
m

t( v , t hres) := j←0 инициализация с четчика


while v ≤ t hres
j
j← j+ 1
j возв рат значения

t ( v , 1.98) = 8 Величина 1,98 впервые превосходится


вось мым элементом в ектора.

Иногда необходимо досрочно завершить цикл, т.е. не по условию в его


заголовке, а в некоторой строке тела цикла. Например, для предыдущей
программы существует вероятность зацикливания. Если каждый элемент
вектора меньше, чем заданное число, то условие никогда не станет ложным и
поиск выйдет за пределы вектора, что приведет к сообщению об ошибке
«индекс вне границ». Чтобы этого не случилось, предназначен оператор
break.
Пример 7. Поиск первого элемента вектора, превосходящего заданное
значение, с использованием оператора break.

38
Глава 1. MathCAD

Например, как только значение переменной цикла i достигнет 2, цикл,


благодаря оператору break в последней строке программного модуля,
прерывается. Соответственно, значение переменной Х остается равным
х=0+1+2=3.
Пример 8.
x := z ← 1
x := z ← 0
for i ∈ 0 .. 5 while z < 10

z← z+ i z← z+ 1
( break ) if i 2 ( break ) if z > 5

x= 3 x= 6

Чтобы четче обозначить границы завершения тела цикла, в его конце


может использоваться дополнительная строка с оператором continue.

x := z ← 1 x := z ← 0
while z < 10 for i ∈ 0 .. 5
z← z+ 1 z← z+ i
cont inue cont inue

x = 10 x = 15

Рекурсия является одним из методов программирования и заключается


в определении функции через саму себя. Рекурсивное определение функции
должно состоять, по меньшей мере, из двух частей:

39
Глава 1. MathCAD

• начального определения, предотвращающего бесконечную


рекурсию,
• определения функции в терминах предыдущего значения
функции.
Основная идея подобна идее математической индукции: если можно
получить значение f(n+1) из f(n) и известно f(0), то известна и вся функция f.
Пример 9. Нахождение факториала.

f ( n ) := 1 if n 1
( n ⋅ f ( n − 1) ) ot herwise

f ( 3) = 6
f ( 5) = 120
Но рекурсивные определения функции, несмотря на их краткость и
элегантность, не всегда являются самыми эффективными в вычислительном
отношении. Часто определения, использующие операторы цикла, вычисляют
нужные значения быстрее.
Возврат значения (return)
Можно прервать выполнение программы в любой ее точке (например с
помощью условного оператора) и выдать некоторое значение, применив
оператор return. В этом случае при выполнении указанного условия значение,
выведенное в местозаполнитель после return, возвращается в качестве
результата, а никакой другой код больше не выводится.
Пример 10.

40
Глава 2. MATLAB

ГЛАВА 2. MATLAB

2.1. Основы работы в MATLAB


MATLAB – интерактивная диалоговая система, поэтому большая часть
ее главного окна предназначена для ввода команд и вывода результатов.

Главное окно MATLAB


MATLAB может работать как очень большой и мощный калькулятор,
при этом математические выражения записываются традиционно.
Переменные в MATLAB могут быть числовыми, символьными,
векторными или матричными. Имя переменной начинается с латинской
буквы, далее могут быть буквы и цифры и символ подчеркивания
(идентифицируются не более 19 символов). Недопустимо включать в имена
переменных пробелы и специальные знаки. Строчные и прописные буквы
здесь различаются. В системе MATLAB можно задавать переменным
определенные значения. Для этого используется операция присваивания,
вводимая знаком равенства =:
Имя_переменной = выражение.
Типы переменных заранее не декларируются, они определяются
выражением, значение которого присваивается переменной.

41
Глава 2. MATLAB

2.1.1. Числовые переменные


Это числа, векторы, матрицы и многомерные массивы. Число –
простейший объект языка MATLAB, оно может быть любого типа. В
компьютере все числа представлены примерно с 16 десятичными знаками,
под каждое вещественное число отводится 8 байтов, под комплексное – 16.
При записи чисел надо помнить:
• целая часть от дробной отделяется точкой,
• для отделения порядка числа используется символ е,
• знак «плюс» не проставляется, а знак «минус» у числа называется
унарным минусом,
• пробелы между символами в числах не допускаются.
Для простого вычисления достаточно ввести выражение и нажать Enter.
Иногда вводимое математическое выражение может оказаться настолько
длинным, что для него не хватит одной строки. В этом случае часть
выражения можно перенести на другую строку с помощью знака многоточия
«…» (3 или более точки). Для предотвращения вывода на экран любой

операции в конце ввода ставится знак (;) точка с запятой.


>> 4+exp(3)/5
ans =
8.0171
Так как мы не присвоили переменной никакого имени, то MATLAB
автоматически создал переменную с именем ans.
При работе с комплексными числами используются функции:
• abs – модуль комплексного числа,
• real – действительная часть,
• imag – мнимая часть,
• angle – фаза

42
Глава 2. MATLAB

2.1.2. Форматы чисел


По умолчанию MATLAB выдает числовые результаты в
нормализованной форме с четырьмя цифрами после десятичной точки и
одной до нее.
Для установки формата представления чисел используется команда
format name, где name – имя формата. Для числовых данных name может
быть следующим:
• short – короткое представление в фиксированном формате (5 знаков),
• shorte – короткое представление в экспоненциальном формате (5 знаков
мантиссы и 3 знака порядка),
• long – длинное представление в фиксированном формате (15 знаков),
• longe – длинное представление в экспоненциальном формате (15 знаков
мантиссы и 3 знака порядка),
• hex – представление чисел в шестнадцатеричной форме,
• bank – представление для денежных единиц.
Задание формата сказывается только на форме вывода числа.
Вычисления все равно происходят в формате двойной точности, а ввод чисел
возможен в любом удобном для пользователя виде.

2.1.3. Задание векторов и матриц

Для формирования упорядоченных числовых последовательностей


используют оператор двоеточие (:):
Начальное_значение: Шаг: Конечное_значение
Создается возрастающая последовательность чисел, которая
начинается с начального значения, идет с заданным шагом и заканчивается
конечным значением. Если шаг не задан, то он принимает значение равное 1.
Если конечное значение меньше начального, то выдается сообщение об
ошибке.
1). >> 1:5 – шаг не указан

43
Глава 2. MATLAB

ans = 1 2 3 4 5
2). >> 1:2:6 шаг равен 2
ans = 1 3 5
Задание вектора
Для задания вектора надо:
• перечислить его элементы в квадратных скобках, разделяя их
пробелами или запятыми;
вектор-строка: >>v=[1 2 3]
>>v = 1 2 3
вектор-столбец: >> v=[1 2 3]'
v=
1
2
3
• воспользоваться функцией linspace для задания вектор-строки или
linspase’ для задания вектора-столбца (эти команды применимы только
для задания вещественных векторов)
>> a=linspace(1,6,5)
a = 1.0000 2.2500 3.5000 4.7500 6.0000
Задание матриц
Строки матрицы при вводе отделяются точкой с запятой:
>>M=[1 2 3;4 5 6;7 8 9]
>>M = 1 2 3
4 5 6
7 8 9
Возможен ввод векторов и матриц в виде арифметических выражений,
содержащих любые, доступные системе функции, например:
format short
>>v=[6/2 sqrt(16) 2^3]
>>v = 3 4 8
44
Глава 2. MATLAB

Для указания отдельного элемента вектора или матрицы используются


выражения вида v(I) или M(I,J).
>>v(1)
>>ans = 3
Возможно задание векторов и матриц с комплексными элементами:
>>M=[2+3*i 4+2*i; 1-3*i 5+i]
или
i=sqrt(-1);
>>M=[2 4; 1 5] +i*[3 2; -3 1]
это создает матрицу:
>>M =
2.0000 + 3.0000i 4.0000 + 2.0000i
1.0000 - 3.0000i 5.0000 + 1.0000i
Имеется также ряд особых функций для задания векторов и матриц.
Например, функция magic(n) задает магическую матрицу размерности n*n, в
которой сумма всех столбцов, всех строк и всех диагоналей равна одному и
тому же числу.

2.1.4. Операции над векторами и матрицами


Оператор – это специальное обозначение для определенной операции
над данными – операндами.
Большинство операторов относится к матричным операциям, поэтому
следует помнить о правилах операций над матрицами. Например, различать
умножение слева и справа, знак (/) означает деление слева направо, а знак (\)
– деление справа налево.
Произведение. Умножим матрицу на 2, т.е. получим матрицу, каждый
элемент которой в два раза больше элемента исходной матрицы. Для
умножения матрицы на скаляр допустимы оба оператора.
format short
M=[1 2 3; 4 5 6];

45
Глава 2. MATLAB

>>D=M*2
>>D = 2 4 6
8 10 12
При умножении матрицы на матрицу или вектор следует различать
умножение справа и слева:
>> format short
>> M=[1 2; 3 4];
>> N=[4 5; 6 7];
>> C=M*N >> D=N*M
C= 16 19 D= 19 28
36 43 27 40
Сумма. Найдем сумму двух матриц.
format short
>> M=[1 2; 3 4];
>> N=[3 4; 1 2];
>> C=M+N
C= 4 6
4 6
Аналогично ищется разность и частное.
Если надо провести операции сразу над всем массивом, то перед
знаком операции ставится точка. Например, оператор (*) означает
умножение для векторов и матриц, а оператор (.*) – поэлементное
умножение всех элементов массива.
Применим к векторам v и u операцию деления (/):
>> v=[2 6 10];
>> u=[1 3 5];
>> v/u
ans = 2 – скаляр, выражающий отношение векторов.
Применим к векторам v и u операцию почленного деления (./):
>> v./u
46
Глава 2. MATLAB

ans = 2 2 2 - вектор
Удаление отдельных столбцов или строк
Для удаления отдельных столбцов или строк матрицы используются
пустые квадратные скобки [].
Рассмотрим матрицу M=[1 4 7; 2 5 8; 3 6 9].
Удалим второй столбец, используя оператор двоеточие (:)
>> M(:,2)=[]
M= 1 7
2 8
3 9
Удалим вторую строку:
>> M(2,:)=[]
M= 1 7
3 9
Преобразование вектора в диагональную матрицу
>> v=1:3
v= 1 2 3
>> diag(v) = 1 0 0
0 2 0
0 0 3
Сведение матрицы к треугольному виду
>> A=[1 2 3; 6 5 4; 7 8 9];
>> triu(A) = 1 2 3
0 5 4
0 0 9
Конкатенация
Операция конкатенации – объединение малых матриц в большую
A=[1 2; 3 4]; C= 1 2 3 6
B=[2 4; 5 6]; 3 4 8 10
C=[A A+B;A-B B] -1 -2 2 4

47
Глава 2. MATLAB

-2 -2 5 6

Вычисление суммы столбцов матрицы


>> sum(C)
ans = 1 2 18 26
Вычисление суммы строк матрицы
>> sum(C.')
ans = 12 25 3 7
Вычисление суммы диагоналей матрицы
>> sum(diag(C))
ans = 13
Размерность матрицы (функция size)
>> A=[1 2; 5 6]
>> size(A)
ans = 2 2
Обратная матрица (функция inv)
>> A=[1 2; 3 4];
>> B=inv(A)
B = -2.0000 1.0000
1.5000 -0.5000
Определитель (функция det)
>> det(A)
ans = -2
Транспонирование
>> A'
ans = 1 3
2 4

2.1.5. Константы и системные переменные


Константа – это предварительно определенное числовое или
символьное значение, представленное уникальным именем. Числа являются
безымянными числовыми константами. Другие виды констант в MATLAB
принято называть системными переменными, поскольку они, с одной

48
Глава 2. MATLAB

стороны, задаются системой, а с другой, могут переопределяться


(см. приложение).
Символьная константа – это цепочка символов, заключенных в
апострофы, например, ‘Привет’ или ‘2+3’. Если в апострофы помещено
математическое выражение, то оно не вычисляется, однако с помощью
специальных функций преобразования символьные выражения могут быть
преобразованы в вычисляемые.
Текстовые комментарии используются для наглядности описания, и
вводятся с помощью символа %. Комментарии можно вводить как на
русском, так и на английском языках. Но не рекомендуется вводить
русскоязычные комментарии в тесты m-файлов при подготовке их в
редакторе/отладчике, это нередко делает программы неработоспособными.

2.2. Графика системы MATLAB


В режиме прямых вычислений доступны почти все возможности
системы, в том числе построение графиков. При этом графики строятся в
отдельных масштабируемых и перемещаемых окнах.
2.2.1. Двумерная графика
Для построения графика надо:
• задать интервал изменения аргумента
• использовать команду построения графиков plot
Пример:
>> x=0:0.1:10;
>> plot(sin(x))
В главном меню окна графика есть кнопка Tools, опции которой
позволяют легко управлять параметрами графика. Также можно вызвать окно
свойств выполнив Edit→Figure Properties/

49
Глава 2. MATLAB

Построение в одном окне графиков нескольких функций.


Функции могут быть обозначены переменными, не имеющими явного
указания аргумента: y1=sin(x); y2=cos(x); y3=x*sin(x);
Это обусловлено тем, что переменные y1, y2, y3…являются векторами,
как и переменная x. Используем одну из форм команды
plot(a1,f1,a2,f2,a3,f3,…), где a1, a2, a3 –векторы аргументов функций (в
нашем случае они все - x), а f1, f2, f3 – векторы значений функций, графики
которых строятся в одном окне.
Для построения в одном окне графиков нескольких функций надо:
• задать эти функции;
• использовать одну из команд plot, например plot(a1,f1,a2,f2,a3,f3,…);
Пример:
>> x=-5:0.5:5;
>> y1=sin(x); y2=cos(x); y3=sin(x)./х;
>> plot(x,y1,x,y2,x,y3)
Обратите внимание на задание третьей функции. Если х представляет
собой массив (вектор), то нельзя использовать оператор матричного деления
(/) (или умножения (*)). При вычислении функции, в нашем случае - sin(x)/x,
надо использовать оператор почленного деления (./). При таком задании
функции построение графика возможно, но возникает предупреждение о
делении на ноль, в момент, когда х=0:
50
Глава 2. MATLAB

Warning: Divide by zero.


(Type "warning off MATLAB:divideByZero" to suppress this warning.)

• Команда fplot
Команда fplot(‘f(x)’,[xmin xmax]) позволяет строить графики функций,
которые имеют устранимые неопределенности. Команда fplot позволяет
строить графики функции f(x), заданной в символьном виде, в интервале
изменения аргумента x от xmin до xmax без фиксированного шага
изменения x.
Пример:
>> clear; fplot('sin(x)/x',[-15,15]); grid on

Здесь команда clear очищает графическое окно, а команда grid on


включает отображение сетки.
Графики в полярных координатах (функция polar(phi,r)), где phi –
угловые координаты точек в радианах, r- соответствующие им радиусы.
51
Глава 2. MATLAB

Пример:
x=1:.01:3; nx=length(x); r=x.^2; fi=linspace(0,5*pi,nx); polar(fi,r)

Столбцовые диаграммы (команда bar(V))


В прикладных расчетах часто встречаются графики, именуемые
столбцовыми диаграммами, отражающие содержание некоторого вектора V.
При этом каждый элемент вектора представляется столбцом, высота
которого пропорциональна значению элемента. Столбцы нумеруются и
масштабируются по отношению к максимальному значению наиболее
высокого столбца. Особенно часто столбцовые диаграммы используются при
представлении данных финансово-экономических расчетов.
Пример:
>> V=[1,2,3,4,5,4,3,2,1];
>> bar(V)

График в виде ступенчатой линии (команда stairs(x,f(x)))


>> x=-5:0.1:5;
>> stairs(x,x.^2)

52
Глава 2. MATLAB

График в виде «стебельков» (команда stem(x,y))


>> x=-5:0.1:5;
>> y=x.^3;
>> stem(x,y)

2.2.2. Трехмерная графика


В MATLAB имеется функция plot3(x,y,z), которая является
трехмерным аналогом функции plot, т.е. она позволяет строить линию в
трехмерном пространстве по координатам точек.
Для построения графика функции двух переменных в виде
поверхностей используют функции:
• mesh(x,y,z) – построение поверхности в виде сетки с закрашенными
ребрами и незакрашенными четырехугольными ячейками;
• meshc(x,y,z) – комбинация функций mesh и contour. Линии уровня
выводятся на нижней координатной плоскости;
• meshz(x,y,z) – то же что и mesh, но с краев построенной сетчатой
поверхности вниз спадает «занавес»;

53
Глава 2. MATLAB

• surf(x,y,z) – построение сетчатой поверхности. Координаты углов


каждой ячейки задаются значениями четырех соседних элементов
массивов x,y,z с индексами (i,j), (i, j+1), (i+1, j), (i+1, j+1). Значение
массива z рассчитываются по формуле функциональной зависимости с
использованием поэлементных операций над массивами x,y;
• surfc(x,y,z) - комбинация функций surf и contour. Линии уровня
выводятся на нижней координатной плоскости;
• waterfall(x,y,z) – то же что и mesh, но ребра, разделяющие ячейки,
проводятся только вдоль оси OX. В результате объемное тело выглядит
«нарезанным на ломтики»;
• stem3(x,y,z) – вывод трехмерного графика в виде «стебельков»,
начинающихся при z=0 в точках, задаваемых массивами x,y. Высота
«стебельков» определяется массивом z;
• contourf(x,y,z) – то же что contour, но пространство между линиями
равного уровня окрашено в разные цвета в зависимости от значений z;
• contour3(x,y,z) - то же что contour, но линии равного уровня рисуются
не в одной плоскости, а в зависимости от значений z;
• pcolor(x,y,z) – строит двумерный график, представляющий собой
сетку. Тот же результат можно получить, если для поверхности,
построенной с помощью функции surf, установить точку обзора точно
сверху
Команда surf
• сначала надо задать (сетку) диапазон изменения параметров x и y.
Удобнее всего массивы формировать с помощью специальной функции
[x,y]=meshgrid(x,y). Формируемые массивы имеют length(y) строк и
length(x) столбцов;
• затем задать функцию, зависящую от двух переменных;
• применить функцию surf.

54
Глава 2. MATLAB

x=-5:0.2:5;
[x,y]=meshgrid(x);
z=sinc(sqrt(x.^2+y.^2));
surf(x,y,z)
colormap gray (вывод графика серого
цвета)

Команда mesh(x,y,z)
>>[x,y]=meshgrid(-5:0.1:5);
>> z=x.*sin(x+y);
>> mesh(x,y,z)

Команда Plot3

[x,y]=meshgrid([-3:0.15:3]);
z=x.^2+y.^2;
plot3(x,y,z)

55
Глава 2. MATLAB

2.2.3. Форматирование графиков


В большинстве случаев параметры оформления графиков, выбираемые
по умолчанию, оказываются вполне приемлемыми. Однако иногда для
повышения выразительности изображения возникает необходимость
изменить тип и цвет линий, нанести на график поясняющие надписи и т. п. В
данном разделе кратко рассматриваются соответствующие средства
MATLAB.
При форматировании графиков в MATLAB используется принцип
визуального контроля за видом всех объектов графиков.
В окне Property Editor (Edit→Figure Properties) необходимо выбрать
объект редактирования:

затем задать нужные параметры объекта.


Для каждого объекта графика открывается свое окно со своим набором
параметров.
Дополнительно на график можно нанести:

• надписи (Insert → Text) кнопка панели инструментов

• стрелки (Insert → Arrow), кнопка ;

• линии (Insert→ Line), кнопка ;


• легенду (Insert → Legend);
• шкалу цвета (Insert → Colorbar);
• изменить размеры графика (Tools → Zoom), кнопки ;
• создать титульные надписи (Insert → Title).
При форматировании графиков работает контекстное меню правой
кнопки мыши. Для переключения в режим редактирования графика нужно

56
Глава 2. MATLAB

щелкнуть на кнопке Edit Plot (Редактировать график) с изображением


курсора-стрелки. В этом режиме графиком можно управлять с помощью
контекстного меню. С помощью мыши можно также выделить график.
Щелчок левой клавишей выводит рамку вокруг рисунка. Теперь на график
можно наносить стрелки, поясняющие надписи (кнопка с буквой А) и т. д.
Все возможности форматирования графиков доступны и программным
способом, путем задания соответствующих графических команд, параметров
и примитивов.
Управление осями
Команды управления осями: axis off, axis on, axis ([-10,10,-5,20]), axis
auto, axis equal, axis square.
Размеры осей можно задавать и для трехмерной графики, но цвета в
ней используются для характеристики величины ординаты и команда zoom
там не работает.
Управление цветом
MATLAB позволяет управлять цветом графика, типом линии и
способом отображения точек данных. Для этого используется
дополнительный параметр команд plot, stem и т. n. Этот параметр
представляет собой текстовую строку 'LineSpec', символы которой и
указывают нужные режимы: plot(x. у, 'LineSpec')
Список возможных символов и их значения приведены в приложении.
Перечисленные в таблице символы можно комбинировать. К примеру,
строка ' -. dr' задаст вывод точек графика ромбиками (d), а соединяющих
точки линий — штрихпунктиром (- .)• И точки, и линии при этом будут
красного цвета (r).

2.2.4. Графики разного типа в одном окне


При необходимости можно расположить несколько координатных осей
с различными графиками без наложения их друг на друга. Для этого
используются команды:

57
Глава 2. MATLAB

• subplot – создает новые объекты класса axes (подокна);


• subplot(m,n,p) - или subplot(mnp) – разбивает графическое окно на
m*n подокон, где m – число подокон по горизонтали, n – по вертикали,
а p – номер подокна, в которое будет выводиться текущий график
(подокна отсчитываются последовательно по строкам);
• subplot(H), где H – дескриптор для объекта axes, дает альтернативный
способ задания подокна для текущего графика;
• subplot(‘position’, [left bottom width height]) – создает подокно с
заданными нормализованными координатами (в пределах от 0.0 до
1.0);
• subplot(111) и clf reset – удаляют все подокна и возвращают
графическое окно в обычное состояние.
Пример:
Построим четыре графика различного типа в одном окне с помощью
функции subplot:
>> x=-5:0.1:5;
>>[x,y]=meshgrid(x);
>> z=x.^2+y.^2;
>> subplot(2,2,1),plot(x,sin(x))
>> subplot(2,2,2),plot(sin(5*x),cos(2*x+0.2))
>> subplot(2,2,3), plot3(x,y,z)
>> subplot(2,2,4),surf(peaks) {где peaks – встроенный объект}

58
Глава 2. MATLAB

Для всех графиков возможна индивидуальная настройка вида.

2.2.5. Специальная графика

Движение точки на плоскости


Для отображения движения точки по траектории используется команда
comet. При этом движущаяся точка напоминает ядро кометы с хвостом.
Используются следующие формы представления этой команды:
comet (Y) — отображает движение «кометы» по траектории, заданной
вектором Y;
comet (X.Y) — отображает движение «кометы» по траектории,
заданной парой векторов Y и X;
comet (X.Y.p) — аналогична предшествующей команде, но позволяет
задавать длину хвоста кометы (отрезка траектории, выделенного цветом) как
p*1ength(Y), где length(Y) - размер вектора Y. а р<1. По умолчанию р = 0.1
Если Вы используете лупу или как-то иначе пытаетесь изменить размер
рисунка или используете вкладку Copy Figure меню Edit, то график,
полученный при использовании comet или cometS, исчезает.
Движение точки в пространстве
Есть еще одна команда, которая позволяет наблюдать движение точки,
но уже в трехмерном пространстве. Это команда comet3:
comet3(Z) — отображает движение точки с цветным «хвостом» по
трехмерной кривой, определенной массивом Z;
comet3 (X.Y.Z) — отображает движение точки «кометы» по кривой в
пространстве, заданной точками [X(i),Y(i),Z(i)];
comet3(X,Y,Z,p) — аналогична предшествующей команде с заданием
длины «хвоста кометы» как p*1ength(Z). По умолчанию параметр р равен 0.1.
Разумеется, движение точки по заданной траектории, как в двумерном,
так и в трехмерном пространстве является самым простейшим примером
анимации. Тем не менее, эти средства существенно расширяют возможности
графической визуализации при решении ряда задач динамики.

59
Глава 2. MATLAB

Основные средства анимации


Для более сложных случаев анимации возможно применение техники
мультипликации. Она сводится к построению ряда кадров изображения,
причем каждый кадр появляется на некоторое время, затем стирается и
заменяется на новый кадр, несколько отличающийся от предшествующего.
Если это отличие незначительно, то создается иллюзия плавного
перемещения объекта.
Отметим кратко основные команды, реализующие анимацию в системе
MATLAB:
capture — захват видеоизображения;
getframe — создание кадра для анимации;
moviein — выполнение анимации;
rotate — вращение фигуры;
frame2im — преобразование кадра в графический образ;
im2frame — преобразование графического образа в кадр.

2.2.6. Операции над графическими объектами

К графическим объектам применяется ряд операций:


set — установка свойств (параметров) графического объекта;
get — вывод свойств графического объекта;
reset — восстановить свойства графического объекта по умолчанию;
delete — удалить созданный графический объект;
gсо — возвращает дескриптор текущего графического объекта;
gcbo — возвращает дескриптор объекта, чья функция в данный момент
выполняется;
gcbf — возвращает дескриптор окна, содержащего объект, функция
которого в данный момент выполняется;
drawnow — выполнить очередь задержанных графических команд;
findobj — найти объекты с заданными свойствами;
copyobj — скопировать объект и порожденные им объекты.

60
Глава 2. MATLAB

Кроме того, имеются три утилиты, связанные с операциями над


объектами:
closereq — закрыть окно по запросу;
ishandle — проверить дескриптор на истинность;
newplot — восстановить свойства объекта, измененные nextPlot.
Назначение большинства этих операций достаточно очевидно.

2.3. Обработка данных


2.3.1. Статистическая обработка данных
Нахождение максимального и минимального элементов массива
Самый простой анализ данных, содержащихся в некотором массиве,
заключается в поиске его элементов с максимальным и минимальным
значениями. В системе MATLAB определены следующие быстрые функции
для нахождения минимальных и максимальных элементов массива:
• mах(А) — возвращает наибольший элемент, если А — вектор;
или возвращает вектор-строку, содержащую максимальные элементы
каждого столбца, если А — матрица, в многомерных массивах работает с
первой не единичной размерности;
• mах(А,В) — возвращает массив того же размера, что А и В,
каждый элемент которого есть максимальный из соответствующих элементов
этих массивов;
• max(A,[ ],dim) — возвращает наибольшие элементы по столбцам
или по строкам матрицы в зависимости от значения скаляра dim. Например,
тах(А,[ ],1) возвращает максимальные элементы каждого столбца матрицы А;
• [C,I] =max(A) — кроме максимальных значений возвращает
вектор индексов I этих элементов.
Примеры:
a=[1 2 3;4 5 1;6 7 2]; b=[2 7 6;8 5 9;3 4 6];

61
Глава 2. MATLAB

max(a) max(a,b)
ans = ans =
6 7 3 2 7 6
8 5 9
6 7 6

Для быстрого нахождения элемента массива с минимальным


значением служит следующая функция:
• min(A) — возвращает минимальный элемент, если А — вектор;
или возвращает вектор-строку, содержащую минимальные элементы каждого
столбца, если А — матрица;
• min(A,B) — возвращает массив того же размера, что А и В,
каждый элемент которого есть минимальный из соответствующих элементов
этих массивов;
• min(A,[ ],dim) — возвращает наименьший элемент по столбцам
или по строкам матрицы в зависимости от значения скаляра dim. Например,
mах(А,[ ],1) возвращает минимальные элементы каждого столбца матрицы А;
• [C,I] = min(A) — кроме минимальных значений возвращает
вектор индексов этих элементов.
Пример:
A=magic(4)
A =16 2 3 13 [C.I]=min(A)
5 11 10 8 C=
9 7 6 12 I: [4 2 3 1]
4 14 15 1
Работа указанных функций базируется на сравнении численных
значений элементов массива А, что и обеспечивает высокую скорость
выполнения операций.
Нахождение средних, срединных значений массива и стандартных
отклонений
62
Глава 2. MATLAB

Элементарная статистическая обработка данных в массиве обычно


сводится к нахождению их среднего значения, медианы (срединного
значения) и стандартного отклонения. Для этого в системе MATLAB
определены следующие функции:
• mean (А) — возвращает арифметическое среднее значение
элементов массива, если А — вектор; или возвращает вектор-строку,
содержащую средние значения элементов каждого столбца, если А —
матрица. Арифметическое среднее значение есть сумма элементов массива,
деленная на их число;
• mean(A,dim) — возвращает среднее значение элементов по
столбцам или по строкам матрицы в зависимости от значения скаляра dim
(dim=l по столбцам и dim=2 по строкам соответственно).
Примеры:
A=[1 4 3; 3 6 12; 8 11 9]
A= b=mean(A)
1 4 3 b=
3 6 12 4 7 8
8 11 9

• median (A) — возвращает медиану, если А — вектор; или вектор-


строку медиан для каждого столбца, если А — матрица;
• median(A,dim) — возвращает значения медиан для столбцов или
строк матрицы в зависимости от значения скаляра dim.
Примеры:
A=magic(3) M=median(A) M=median(A,2)
A= M= M=
8 1 6 4 5 6 6
3 5 7 5
4 9 2 4

63
Глава 2. MATLAB

• std(X) — возвращает стандартное отклонение элементов массива,


если X — вектор. Если X — матрица, то std(X) возвращает вектор-строку,
содержащую стандартное отклонение элементов каждого столбца (обратите
внимание, что оно отличается от среднеквадратического отклонения);
• std(X.flag) — возвращает то же значение, что и std(X), если
flag=0; если flag=l, функция std(X.l) возвращает среднеквадратическое
отклонение (квадратный корень из несмещенной дисперсии);
• std(X.flag.dim) — возвращает стандартное или
среднеквадратическое отклонения по рядам (dim=2) или по столбцам(dim=1)
матрицы X в зависимости от значения переменной dim.
Примеры:
» X = linspace(0,3*pi,10)
X = Columns 1 through 7
0 1.0472 2.0944 3.1416 4.1888 5.2360 6.2832
Columns 8 through 10
7.3304 8.3776 9.4248
» s = std(X)
s=
3.1705
Функции сортировки элементов массива
Многие операции статистической обработки данных выполняются
быстрее и надежнее, если данные предварительно отсортированы. Кроме
того, нередко представление данных в отсортированном виде более наглядно
и ценно. Ряд функций служит для выполнения сортировки элементов
массива:
• sort (А) — в случае одномерного массива А сортирует и
возвращает элементы по возрастанию их значений; в случае двумерного
массива происходит сортировка и возврат элементов каждого столбца.
Допустимы вещественные, комплексные и строковые элементы. Если А
64
Глава 2. MATLAB

принимает комплексные значения, то элементы сначала сортируются по


абсолютному значению, а затем, если абсолютные значения равны, по
аргументу. Если А включает NaN-элементы, sort помещает их в конец;
• [В, INDEX] = sort(A) — наряду с отсортированным массивом
возвращает массив индексов INDEX. Он имеет размер size(A), с помощью
этого массива можно восстановить структуру исходного массива.
• sort(A,dim) — для матриц сортирует элементы по столбцам
(dim=l) или по рядам в зависимости от значения переменной dim.
Примеры:
A=magic(3) [B,INDEX]=sort(A) sort(A,2)
A= B= ans =
8 1 6 3 1 2 1 6 8
3 5 7 4 5 6 3 5 7
4 9 2 8 9 7 2 4 9
• sortrows(A) — выполняет сортировку рядов массива А по
возрастанию и возвращает отсортированный массив, который может быть
или матрицей, или вектором-столбцом;
• sortrows(A,column) — возвращает матрицу, отсортированную по
столбцам, точно указанным в векторе column. Например, sortrows(A,[2 3])
сортирует строки матрицы А сначала по второму столбцу, и затем, если его
элементы равны, по третьему;
• [В, index] = sortrows (А) — также возвращает вектор индексов
index. Если А — вектор-столбец, то B=A(index). Если А — матрица размера
m*n, то B=A(index.:).
B=[1 5 7; 8 12 4; 6 7 14]
B= C=sortrows(B) d=sortrows(B,3)
1 5 7 C= d=
8 12 4 1 5 7 8 12 4
6 7 14 6 7 14 1 5 7

65
Глава 2. MATLAB

8 12 4 6 7 14
• cplxpair(A) — сортирует элементы по строкам или столбцам
комплексного массива А, группируя вместе комплексно сопряженные пары.
Затем найденные пары сортируются по возрастанию действительной части.
Внутри пары элемент с отрицательной мнимой частью является первым.
Действительные элементы следуют за комплексными парами. Заданный по
умолчанию порог 100*eps относительно abs(A(i))) определяет, какие числа
являются действительными и какие элементы являются комплексно
сопряженными. Если А — вектор, cpl xpair (А) возвращает А вместе с
комплексно сопряженными парами. Если А — матрица, cpl xpai r(А)
возвращает матрицу А с комплексно сопряженными парами, сортированную
по столбцам;
• cplxpalr(A,tol) — отменяет заданный по умолчанию порог и
задает новый tol;
• cplxpair(A.[],dim) — сортирует матрицу А по строкам или по
столбцам в зависимости от значения параметра dim;
• cplxpair(A,tol ,dim) — сортирует матрицу А по строкам или по
столбцам в зависимости от значения параметра dim, используя заданный
порог tol.

2.3.2. Интерполяция и аппроксимация данных


Под аппроксимацией обычно подразумевается описание некоторой,
порой не заданной явно, зависимости или совокупности представляющих ее
данных с помощью другой, обычно более простой или более единообразной
зависимости. Часто данные находятся в виде отдельных узловых точек,
координаты которых задаются таблицей данных. Результат аппроксимации
может не проходить через узловые точки.
Напротив, задача интерполяции — найти данные в окрестности
узловых точек. Для этого используются подходящие функции, значения
которых в узловых точках совпадают с координатами этих точек. Например,

66
Глава 2. MATLAB

при линейной интерполяции зависимости у(х) узловые точки соединяются


друг с другом отрезками прямых и считается, что искомые промежуточные
точки расположены на этих отрезках.
Для повышения точности интерполяции применяют параболы
(квадратичная интерполяция) или полиномы более высокой степени
(полиномиальная интерполяция). Для обработки данных MATLAB
использует различные функции интерполяции и аппроксимации данных.
Полиномиальная регрессия
Одна из наиболее известных аппроксимаций — полиномиальная. В
системе MATLAB определены функции аппроксимации данных полиномами
по методу наименьших квадратов — полиномиальной регрессии. Это
выполняет функция, приведенная ниже:
• polyfit(x,y,n) — возвращает вектор коэффициентов полинома р(х)
степени n, который с наименьшей среднеквадратичной погрешностью
аппроксимирует функцию у(х). Результатом является вектор-строка длиной
n+1, содержащий коэффициенты полинома в порядке уменьшения степеней х
и у;
• [p,S] = polyfit(x,y,n) — возвращает коэффициенты полинома р и
структуру S для использования вместе с функцией polyval с целью
оценивания или предсказания погрешности;
• [p,S] = polyfit(x,y,n,mu) возвращает коэффициенты полинома р и
структуру S для использования вместе с функцией polyval с целью
оценивания или предсказания погрешности, но так, что происходит
центрирование (нормирование) и масштабирование х, xnorm = (х -
mu(l))/mu(2), где mu(l) = mean(x) и mu(2) = std(x). Центрирование и
масштабирование не только улучшают свойства степенного многочлена,
получаемого при помощи polyval, но и значительно повышают качественные
характеристики самого алгоритма аппроксимации.
Пример: Полиномиальная регрессия для функции sin
x=(-3:0.2:3)';
67
Глава 2. MATLAB

y=sin(x);
p=polyfit(x,y,3)
p = -0.0953 -0.0000 0.8651 0.0000
x=(-4:0.2:4)';
y=sin(x);
f=polyval(p,x);
plot(x,y,'o',x,f)

Рисунок, построенный в этом примере, дает наглядное представление о


точности полиномиальной аппроксимации. Следует помнить, что она
достаточно точна в небольших окрестностях от точки х = 0, но может иметь
большие погрешности за их пределами или в промежутках между узловыми
точками.
График аппроксимирующего полинома третьей степени на рисунке
показан сплошной линией, а точки исходной зависимости обозначены
кружками. К сожалению, при степени полинома свыше 5 погрешность
полиномиальной регрессии (и аппроксимации) сильно возрастает и ее
применение без центрирования и масштабирования становится рискованным.
Обратите внимание на то, что при полиномиальной регрессии узловые точки
не ложатся точно на график полинома, поскольку их приближение к нему
является наилучшим в смысле минимального среднеквадратического
отклонения.

68
Глава 2. MATLAB

2.3.3. Обработка данных в графическом окне

В меню Tools имеются две команды для обработки данных:


Basic Fiting – основные виды аппроксимации (регрессии);
Data Statistics – статистические параметры данных.
Пусть некая зависимость y(x) задана векторами координат ее точек:
>> x=[2,4,6,8,10,12,14];
>> y=[3.76,4.4,5.1,5.56,6,6.3,6.7];
>> plot(x,y,'o');
Ниже показан пример выполнения полиномиальной аппроксимации
для степеней полинома 1 и 3.

Опция Show equation выводит на график уравнения регрессии.

2.3.4. Интерполяция периодических функций рядом Фурье


Под интерполяцией обычно подразумевают вычисление значений
функции f(x) в промежутках между узловыми точками.
Линейная, квадратичная и полиномиальная интерполяция реализуются
при полиномиальной аппроксимации. А вот для периодических (и особенно
для гладких периодических) функций хорошие результаты может дать их

69
Глава 2. MATLAB

интерполяция тригонометрическим рядом Фурье. Для этого используется


следующая функция:
• interpft(x,n) — возвращает вектор у, содержащий значения
периодической функции, определенные в n равномерно расположенных
точках. Если length(x)=rr и х имеет интервал дискретизации dx, то интервал
дискретизации для у составляет dy=dx*m/n, причем n не может быть
меньше, чем r. Если X — матрица, interpft оперирует столбцами X,
возвращая матрицу Y с таким же числом столбцов, как и у X, но с n
строками. Функция y=interpft(x,n,dim) работает либо со строками, либо со
столбцами в зависимости от значения параметра dim.
Пример:
x=0:0.1:10; y=sin(x).^3; (задаем интервал от 0 до 10 и функцию)
x1=0:0.1:10; y1=interpft(y,101); (задаем интерполирующую функцию)
plot(x,y, 'k'), (выводим график функции, черный цвет)
hold on, plot(x1,y1, 'kd') (в этом же окне (hold on) выводим
интерполирующую функцию, черный цвет, ромбики )

Рисунок иллюстрирует эффективность данного вида интерполяции на


примере функции sin(x).^3.

70
Глава 2. MATLAB

2.3.5. Одномерная табличная интерполяция


В ряде случаев очень удобна сплайновая интерполяция и
аппроксимация таблично заданных функций. При ней промежуточные точки
ищутся по отрезкам полиномов третьей степени — это кубическая
сплайновая интерполяция. При этом обычно такие полиномы вычисляются
так, чтобы не только их значения совпадали с координатами узловых точек,
но также, чтобы в узловых точках были непрерывны производные первого и
второго порядков. Такое поведение характерно для гибкой линейки,
закрепленной в узловых точках, откуда и происходит название spline
(сплайн) для этого вида интерполяции (аппроксимации). Для одномерной
табличной интерполяции используется функция interpl:
• yi = Interpl(x,Y,xi) — возвращает вектор yi, содержащий
элементы, соответствующие элементам xi и полученные интерполяцией
векторов х и Y. Вектор х определяет точки, в которых задано значение Y.
Если Y — матрица, то интерполяция выполняется для каждого столбца Y и
у1 имеет длину length (xi) - by- size (Y. 2);
• yi = interpl (x.Y.xi .method) — позволяет с помощью параметра method
задать метод интерполяции:
• 'nearest' — ступенчатая интерполяция;
• 'linear' — линейная интерполяция (принята по умолчанию);
• 'spline' — кубическая сплайн-интерполяция;
• 'cubic' или 'pchip' — интерполяция многочленами Эрмита;
• yi = interpl (x,Y,xi ,method, значение величин вне пределов изменения
х) — позволяет отобразить особенные точки на графике;
• yi = i nterpl(х, Y, xi, method,' сообщение') — позволяет изменить
сообщение об особенных точках на графике.
Все методы интерполяции требуют, чтобы значения х изменялись
монотонно. Когда х — вектор равномерно распределенных точек, для более
быстрой интерполяции лучше использовать методы '*1inear', '*cubic',

71
Глава 2. MATLAB

'*nearest' или '*spline'. Обратите внимание, что в данном случае


наименованию метода предшествует знак звездочки.
Пример. Интерполяция функции косинуса:
x=0:10;y=cos(x); xi=0:0.1:10; yi=interpl(x,y,xi); plot(x,y,'x',xi,yi,'g'),
hold on yi=interpl(x,y,xi.'spline'); plot(x,y,'o ' ,xi,yi,'m'), grid,hold off

2.4. Основы программирования в MATLAB


До сих пор мы в основном использовали систему MATLAB в режиме
непосредственного счета — в командном режиме. Однако при решении
серьезных задач возникает необходимость сохранения используемых
последовательностей вычислений, а также их дальнейшей модификации.
Иными словами, существует необходимость программирования решения
задач.
В основе объектно-ориентированного программирования лежат три
основных положения.
• Инкапсуляция — объединение данных и программ и передача
данных через входные и выходные параметры функций. В результате
появляется новый элемент программирования — объект.
• Наследование — возможность создания родительских объектов
и новых дочерних объектов, наследующих свойства родительских объектов.
Возможно также множественное наследование, при котором класс наследует
свойства нескольких родительских объектов. На наследовании основаны
система задания типов данных, дескрипторная графика и многие другие
приемы программирования. Примеры наследования мы уже неоднократно
отмечали.
• Полиморфизм — присвоение некоторому действию одного
имени, которое в дальнейшем используется по всей цепочке создаваемых
объектов сверху донизу, причем каждый объект выполняет это действие
присущим ему способом.

72
Глава 2. MATLAB

В дополнение к этим положениям объектно-ориентированное


программирование в MATLAB допускает агрегирование объектов, т. е.,
объединение частей объектов или ряда объектов в одно целое.
Объект можно определить как некоторую структуру, принадлежащую к
определенному классу. В MATLAB определены следующие семь основных
классов объектов:
• double — числовые массивы с элементами-числами двойной
точности;
• sparse — двумерные числовые или комплексные разреженные
матрицы;
• char — массивы символов;
• struct — массивы структур (записей);
• cell — массивы ячеек;
• javaarray — массивы Ява;
• functionjnandle — дескрипторы функций.
Для MATLAB характерно, что никакие классы объектов (в том числе
заново создаваемые) не требуют объявления. Например, создавая
переменную nаmе='Иван', мы автоматически получаем объект в виде
переменной name класса char. Таким образом, для переменных
принадлежность к тому или иному классу определяется их значением.
Является ли переменная объектом, можно определить при помощи функции
isobject (HMfl переменной). Аналогичная функция isjava определяет,
является ли переменная объектом Java.
Для создания новых классов объектов служат конструкторы классов.
По существу, это m-файлы, имена которых совпадают с именами классов
@Имя_класса, но без символа @. Этим символом помечаются подпапки
системы MATLAB, в которых имеются конструкторы классов. Множество
таких папок с примерами конструкторов классов вы найдете в подпапках
MATLAB\TOOLBOX.

73
Глава 2. MATLAB

2.4.1. Создание класса или объекта


Для создания класса объектов или объектов, а также для их
идентификации служит функция class. Формы ее применения представлены
ниже.
• class (OBJ) — возвращает класс указанного объекта OBJ. Типы
стандартных классов double, sparse, char, cell, struct, functionjiandle были
перечислены выше. int8 — 8-разрядный массив целых чисел со знаком; uintS
— 8-разрядный массив целых чисел без знака; intlG — 16-разрядный массив
целых чисел со знаком; uint!6 — 16-разрядный массив целых чисел без знака;
int32 — 32-разрядный массив целых чисел со знаком; uint32 — 32-разрядный
массив целых чисел без знака; <class_name> — класс, определенный
пользователем; <java_class> — имя класса Ява;
• OBJ=class(S, 'classjiame' ,PARENT1,PARENT2....) — создает
объект класса 'classname' на базе структуры S и родительских объектов
PARENT1, PARENT2,... При этом создаваемый объект наследует структуру
и поля родительских объектов. Объекту OBJ в данном случае присуще
множественное наследование;
• OBJ=class(struct[ ], 'classjiame' , PARENT1, PARENT2,...) — не
может иметь никаких полей, кроме унаследованных от родительских
объектов.
Обратите внимание на то, что эта функция обычно используется в
составе m-файлов конструкторов классов объектов.

2.4.2. Проверка принадлежности объекта к заданному классу


Для контроля принадлежности заданного объекта к некоторому классу
служит функция isa:
• isa (OBJ, 'Имя_класса') — возвращает логическую 1, если OBJ
принадлежит классу с указанным именем. Дополнительно к вышеописанным
выделяет классы numeric и single. Но не обнаруживает класс logical. Нужно
использовать функцию islogical, чтобы проверить принадлежность к этому
классу.
74
Глава 2. MATLAB

Примеры применения этой функции:


Х=[1 2 3]; isa(X,'char')
ans =
0
isa(X,'double')
ans =
1

2.4.3. Программы и функции


Сессии в командном режиме работы не сохраняются в памяти
компьютера (ведение дневника не в счет). Хранятся только определения
созданных в ходе их выполнения переменных и функций. А вот программы
на языке программирования MATLAB сохраняются в виде текстовых m-
файлов. При этом могут сохраняться как целые программы в виде файлов-
сценариев, так и отдельные программные модули — функции. Кроме того,
важно, что программа может менять структуру алгоритмов вычислений в
зависимости от входных данных и данных, создаваемых в ходе вычислений.
Текстовые файлы, содержащие операторы MATLAB могут быть двух
типов: программы (script; иногда используют дословный перевод –
«сценарий») и функции (function). Между ними имеются следующие
различия:
• функции имеют заголовок function, а программы – script или вовсе не
имеют заголовка;
• функции могут принимать входные параметры и возвращать
результаты вычислений, а программы – нет;
• программы используют рабочую область памяти среды MATLAB, а
каждая функция при вызове создает свою собственную рабочую
область памяти и использует для внешних связей только параметры и
глобальные переменные.

75
Глава 2. MATLAB

Синтаксис
• для разделения операторов и строк используют точку с запятой (;) или
запятую (,);
• длинные строки можно делить на части используя троеточие (…);
• комментарий начинается символом процента (%).
Функции редактирования и работы с файлами обеспечиваются
редактором/отладчиком М-файлов. Для его запуска необходимо либо
создать новый М-файл (File→New→M-file), либо открыть уже
существующий (File→Open). Для запуска файла его надо сохранить,
используя команду File→Save as. После сохранения М-файла
редактор/отладчик можно закрыть, а сохраненный файл можно запустить из
командной строки.
Тело М-файла может содержать любые математические и логические
выражения, а также управляющие структуры (например, циклы и условные
выражения). Он реализует модульный и объектно-ориентированный подход к
подготовке программ и имеет средства для создания интерфейса
пользователя.
Логические операторы
В качестве логических условий в условных операторах и циклах while
(см. далее) могут использоваться числовые скалярные значения. При этом
нулевое значение трактуется как «ложь» (false), а любое ненулевое — как
«истина» (true). Кроме того, для формирования условий часто используются
операторы сравнения = (равно), ~= (не равно), < (меньше), > (больше), <=
(меньше или равно), >= (больше или равно). Следует иметь в виду, что для
массивов они производят поэлементное сравнение, возвращая массив такого
же размера, как сравниваемые аргументы. Результирующий массив содержит
единицы там, где сравнение элементов дало выполнение условия, и нули там,
где условие сравнения выполнено не было.

76
Глава 2. MATLAB

Для формирования логических условий полезны также следующие


функции:
• all(х) — возвращает 1, если все элементы х отличны от нуля;
• any(х) — возвращает 1, если хотя бы один элемент х отличен от нуля;
• isequal(x, у) — возвращает 1, если значения х и у совпадают. В отличие
от конструкции all(х==у), использование данной функции не приведет
к ошибке, если размеры х и у не совпадают;
• isempty(x) — возвращает 1, если х является пустой матрицей (то есть
имеет размер 0x0).
Имеется еще довольно много функций проверки разнообразных
условий, имена которых имеют вид is.... За более подробной информацией
обратитесь к справочной системе.

2.4.3.1. Условный оператор


Условный оператор в MATLAB реализуется с помощью ключевых слов
if, else и end:
if cond
% ветвь, выполняемая, если cond истинно
else
% ветвь, выполняемая, если cond ложно
end
Здесь cond — проверяемое значение.
Для оператора if, вложенного в ветвь else другого (внешнего)
оператора if, есть сокращенная форма записи с использованием ключевого
слова elseif:
if condl
% ветвь, выполняемая, если cond1 истинно
elseif cond2
% ветвь, выполняемая, если condl ложно, a cond2 истинно
else

77
Глава 2. MATLAB

% ветвь, выполняемая, если condl и cond2 ложны


end
Аналогичным образом можно использовать elseif несколько раз.

2.4.3.2. Оператор выбора


Если в условном операторе выбирается одна из двух возможных
альтернатив, то оператор выбора реализует разветвление программы на
несколько путей. Выбор конкретного пути зависит от значения заданной
переменной. Запись оператора выбора в MATLAB производится с помощью
ключевых слов switch, case, otherwise и end:
switch x
case xl
% ветвь, выполняемая, если х равно xl
case x2
% ветвь, выполняемая, если х равно х2
otherwise
% ветвь, выполняемая, если все условия case не соблюдаются
end
При выполнении оператора switch значение х поочередно сравнивается
с xl, х2 и т. д. При обнаружении первого совпадения выполняются операторы
соответствующей ветви, после чего производится выход из оператора
выбора. Таким образом, в отличие от аналогичного оператора языка С+,
«проваливания» на следующую ветвь не происходит и операторы break в
конце каждой ветви в MATLAB не нужны.

2.4.3.3. Циклы
Для реализации циклов в MATLAB имеется два оператора — for и
while.
Оператор for
В операторе for переменная-счетчик цикла поочередно принимает
значения элементов некоторого вектора:

78
Глава 2. MATLAB

for k = х
% тело цикла
end
Операторы, входящие в тело цикла, будут выполняться при значении
переменной к, равном х(1), затем х(2) и т. д. до x(end). После завершения
цикла значение к остается равным x(end).
Разумеется, чаще всего в цикле for используется последовательный
перебор целочисленных значений счетчика цикла:
for k = 1:N
Однако при необходимости можно использовать дробное значение
шага for k = -1:0.01:1 или перебор произвольных значений for к = [1 10 pi 9
ln(3)].
Оператор while
Второй тип циклов реализуется с помощью оператора while. Тело
цикла выполняется, пока условие cond остается истинным (то есть значение
cond отлично от нуля):
while cond
% тело цикла
end
Если cond изначально имеет нулевое значение, тело цикла не будет
выполнено ни разу.
Оператор break
Чтобы реализовать досрочное завершение цикла, используется
оператор break. Разумеется, он должен применяться в сочетании с условным
оператором, например так:
for k = 1:N
% первая половина тела цикла
% проверка дополнительного условия завершения
if cond
break
79
Глава 2. MATLAB

end
% вторая половина тела цикла
end
Оператор break можно использовать для реализации циклов с
проверкой условия завершения не в начале (как делает оператор while), а в
произвольном месте цикла. Для этого с помощью оператора while создается
«вечный» цикл, а его завершение производится оператором break:
while 1 % «вечный» цикл
% первая половина тела цикла
% проверка условия завершения
if cond
break
end
% вторая половина тела цикла
end
Кроме оператора break для управления выполнением программы
внутри цикла имеется оператор continue. Размещенный внутри цикла for или
while, этот оператор передает управление на проверку условия завершения
цикла, пропуская при этом оставшийся фрагмент тела цикла. Это позволяет
сделать код более наглядным, избежав использования длинного оператора if.

2.4.3.4. Примеры программ


1. Напишем программу вычисления корней квадратного
уравнения.
% решить квадратное уравнение ax^2+dx+c
%вводим значения параметров уравнения
a=input('a=');
b=input('b=');
c=input('c=');
% вычислим дискриминант

80
Глава 2. MATLAB

d=b*b-4*a*c;
% проверим знак дискриминанта
if d<0
disp('действительных корней нет');
else
x1=(-b-sqrt(d))/(2*a)
x2=(-b+sqrt(d))/(2*a)
end
2. Определим рабочий или выходной день недели по его номеру
% вводим номер дня недели
n=input('n=');
switch n
case 1
disp('рабочий')
case 2
disp('рабочий')
case 3
disp('рабочий')
case 4
disp('рабочий')
case 5
disp('рабочий')
otherwise
disp('выходной')
end
3. Ввод вектора осуществляется с помощью функции strcat,
предназначенной для объединения строк в одну строку, int2str – преобразует
число в строку символов.
N=input('N=')
for i=1:N
81
Глава 2. MATLAB

x(i)=input(strcat('x(',int2str(i),')='));
end
4. Ввод матрицы
n=input('n=');
m=input('m=');
for i=1:n
for j=1:m
a(i,j)=input(strcat('a(',int2str(i),',',int2str(j),')='));
end
end
5. Найти максимальный элемент массива
% положим первый элемент массива максимальным, его номер = 1,
затем все элементы, начиная со второго сравниваем с первым в цикле.
N=input('N=')
for i=1:N
x(i)=input(strcat('x(',int2str(i),')='));
max=x(1);
Nmax=1;
for i=2:N
if x(i)>max
max=x(i);
Nmax=i;
end
end
end
max
6. Найти минимальный элемент последовательности
N=input('N=')
for i=1:N
x(i)=input(strcat('x(',int2str(i),')='));
82
Глава 2. MATLAB

min=x(1);
Nmin=1;
for i=2:N
if min>x(i)
min=x(i);
Nmin=i;
end
end
end
min
Nmin
7. Вычисление факториала
n=input('n=')
y=1;
for i=1:n
y=y*i;
end
end
y
8. Пример кода, являющегося частью функции magic.m,
генерирующего магический квадрат M для нечётных значений размера
стороны n:
[J,I] = meshgrid(1:n);
A = mod(I+J-(n+3)/2,n);
B = mod(I+2*J-2,n);
M = n*A + B + 1;
sin R
9. Пример кода, рисующего график функции sinc-функции :
R
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)
10. Вычисление факториала с помощью М-функции
83
Глава 2. MATLAB

function y=f(n)
n=input('n=');
for i=1:n
if i<=1
y=1;
else
y=i*y;
end
end
end
Можно просто воспользоваться встроенной функцией factorial(n).

2.5. Решение уравнений и систем уравнений средствами


MATLAB
2.5.1. Вычисление нулей функции одной переменной
Ряд функций системы MATLAB предназначен для работы с
функциями. Под функциями понимаются как встроенные функции, например
sin(x) или ехр(х), так и функции пользователя, например f(x), задаваемые как
m-файлы-функции. По аналогии с дескрипторами графических объектов
могут использоваться объекты класса дескрипторов функций, задаваемых с
помощью символа @, например: fe=@exp.
Численные значения таких функций, заданных дескрипторами,
вычисляются с помощью функции feval:
fe=@exp;
feval(fe,1.0)
ans =
2.7183
Довольно часто возникает задача решения нелинейного уравнения вида
f(x) = 0
Соответствующая функция MATLAB, решающая данную задачу,
приведена ниже:
84
Глава 2. MATLAB

• fzero(@fun,x) — возвращает уточненное значение х, при котором


достигается нуль функции fun, представленной в символьном виде, при
начальном значении аргумента х. Возвращенное значение близко к
точке, где функция меняет знак, или равно NaN, если такая точка не
найдена;
• fzero(@fun,[xl x2]) — возвращает значение х, при котором fun(x)=0 с
заданием интервала поиска с помощью вектора x=[xl х2], такого, что
знак fun(x(D)) отличается от знака fun(x(2)). Если это не так, выдается
сообщение об ошибке. Вызов функции fzero с интервалом гарантирует,
что fzero возвратит значение, близкое к точке, где fun изменяет знак;
• fzero(@fun,x,tol) — возвращает результат с заданной погрешностью
tol;
• fzero(@fun,x,tol ,trace) — выдает на экран информацию о каждой
итерации;
• fzero(@fun,х,tol, trace,Р1,Р2,...) — предусматривает дополнительные
аргументы, передаваемые в функцию fun(x,Pl,P2,...). При задании
пустой матрицы для tol или trace используются значения по
умолчанию. Пример: fzero(fun,x,[ ],[ ],Р1).
Для функции fzero ноль рассматривается как точка, где график
функции fun пересекает ось х, а не касается ее. В зависимости от формы
задания функции fzero реализуются следующие хорошо известные
численные методы поиска нуля функции: деления отрезка пополам, секущей
и обратной квадратичной интерполяции. Приведенный ниже пример
показывает приближенное вычисление π/2 из решения уравнения cos(x)=0 с
представлением косинуса дескриптором:
x= fzero(@cos,[1 3])
x=
1.5708

85
Глава 2. MATLAB

В более сложных случаях рекомендуется строить график функции f(x)


для приближенного определения корней и интервалов, в пределах которых
они находятся.
Пример:
%Функция, корни которой
ищутся
function f=funl(x)
x=0:0.1:10;
f=0.25*x+sin(x)-1;
plot(x,f) grid
end

Из рисунка нетрудно заметить, что значения корней заключены в


интервалах [0.5 1], [2 3] и [5 6]. Найдем их, используя функцию fzero:
xl=fzero(@funl,[0.5 1]) xl = 0.8905
x2=fzero(@funl,[2 3]) x2 = 2.8500
x3=fzero(@funl,[5 6]) x3 = 5.8128
К сожалению, сразу найти все корни функция fzero не в состоянии.
Решим эту же систему при помощи функции fsolve из пакета Optimization
Toolbox, которая решает систему нелинейных уравнений вида f(x)=0 методом
наименьших квадратов, ищет не только точки пересечения, но и точки
касания.
fsolve(@funl,0:10 )
ans =
Columns 1 through 7
0.8905 0.8905 2.8500 2.8500 2.8500 5.8128 5.8128
Columns 8 through 11
5.8128 2.8500 2.8500 10.7429

86
Глава 2. MATLAB

2.5.2. Минимизация функции одной переменной


Еще одна важная задача численных методов — поиск минимума
функции f(x) в некотором интервале изменения х — от х 1 до х 2 . Если нужно
найти максимум такой функции, то достаточно поставить знак «минус»
перед функцией.
Для решения этой задачи используется функция [X,fval,exitflag,output]
= fminbnd(@fun.x1,x2,options, p1,p2,...)
• fminbnd(@fun,xl,x2) — возвращает значение х, которое является
локальным минимумом функции fun(x) на интервале xl<x<x2;
• fminbnd(@fun,xl,x2,options) — сходна с описанной выше
формой функции, но использует параметры tolX, maxfuneval, maxiter, display
из вектора options, предварительно установленные при помощи команды
optimset (смотрите описание lsqnonneg);
• fminbnd(@fun,xl,x2,options,P1,P2...) — сходна с описанной
выше, но передает в целевую функцию дополнительные аргументы: Р1, Р2.....
Если требуется использовать параметры вычислений по умолчанию, то
вместо options перед P1, Р2 необходимо ввести [ ] (пустой массив);
• [x,fval] = fminbnd(...) — дополнительно возвращает значение
целевой функции fval в точке минимума;
• [x,fval ,exitflag] = fminbndL) —дополнительно возвращает
параметр exitflag, равный 1, если функция сошлась с использованием
options.tolX, и 0, если достигнуто максимальное число итераций
options.maxiter.
Используются следующие обозначения: xl:х2 — интервал, на котором
ищется минимум функции; Р1,Р2... — дополнительные, помимо х,
передаваемые в функцию аргументы; fun — строка, содержащая название
функции, которая будет минимизирована; options — вектор параметров
вычислений. В зависимости от формы задания функции fminbnd вычисление
минимума выполняется известными методами золотого сечения или
параболической интерполяции.

87
Глава 2. MATLAB

Пример:
options=optimset('tolX',1.e-10);
[x]=fminbnd(@cos,3,4,options)
x= 3.1416
Значительно сложнее задача минимизации функций нескольких
переменных f(х 1 ,...). При этом значения переменных представляются
вектором х, причем начальные значения задаются вектором х0. Для
минимизации функций ряда переменных MATLAB обычно использует
разновидности симплекс-метода Нелдера-Мида. Мы не будем рассматривать
эту задачу.

2.5.3. Графический способ решения уравнений


1. Найти корни уравнения x ⋅ sin( x ) = 0 на отрезке [0,3].
2

Программа:
1;x=0:.01:3; f=x.*sin(x.^2); plot(x,[f;0*f]), grid
2;ginput (% в команде ginput точка снимается нажатием левой клавиши
мыши, Enter – выход из ginput).

Полученные корни и график


функции:
1.7869 -0.0439
2.4919 -0.0088

2. Построим график неявной функции f(x,y)≡x3y-2xy2+y-0.2=0,


x,y=[0,1].

88
Глава 2. MATLAB

1;h=.02; x=0:h:1; [X,Y]=meshgrid(x);


f=X.^3.*Y-2*X.*Y.^2+Y-.2;
2;v=[0,0];
Выясним, какой знак имеет f в
области G, для чего выполним:
mesh(x,x,f.*(f>0))

Это пример трехмерной графики. В ней цвет используется для


изображения амплитуды (значения z), изменяясь с ростом z от темно-синего
через голубой, зеленый и желтый до темно-красного.
Вычислим площадь S этой области:
4;S=h^2*sum(f(:)>=0) (S=0.7296)
5;V=h^2*sum(f(f>=0)) (V=0.1268)

2.5.4. Системы линейных алгебраических уравнений


Для реализации различных алгоритмов решения СЛАУ и связанных с
ними матричных операций применяются следующие операторы: +,-,*,/, \, *, '
Как отмечалось ранее, MATLAB имеет два различных типа арифметических
операций — поэлементные и для массивов (векторов и матриц) в целом.
Матричные арифметические операции определяются правилами линейной
алгебры.
Арифметические операции сложения и вычитания над массивами
выполняются поэлементно. Знак точки «.» отличает операции над
элементами массивов от матричных операций. Однако, поскольку операции
сложения и вычитания одинаковы для матрицы и элементов массива, знаки
«.+» и «.-» не используются. Рассмотрим другие операторы и выполняемые
ими операции:
• * — матричное умножение;
• С = А*В — линейное алгебраическое произведение матриц А и В:
n
C (i, j ) = ∑ A(i, k ) ⋅ B(k , j )
k =1

89
Глава 2. MATLAB

Для случая нескалярных А и В число столбцов матрицы А должно


равняться числу строк матрицы В. Скаляр может умножаться на матрицу
любого размера.
• / — правое деление. Выражение Х=В/А дает решение ряда
систем линейных уравнений АХ=В, где А — матрица размера тхп и В —
матрица размера nxk;
• \ — левое деление. Выражение Х=В\А дает решение ряда систем
линейных уравнений ХА=В, где А — матрица размера тхп и В — матрица
размера nxk. Если А — квадратная матрица, то А\В — примерно то же самое,
что и inv(A)*B, в остальных случаях возможны варианты, отмеченные ниже.
Если А — матрица размера пхп, а В — вектор-столбец с п
компонентами или матрица с несколькими подобными столбцами, тогда
Х=А\В — решение уравнения АХ=В, которое находится хорошо известным
методом исключения Гаусса.
Пример: Для невырожденной квадратной матрицы A и вектора-столбца
b вектор-стобец x=b/А есть решение системы линейных уравнений Ax=b.
Система Ax=b решается одним из трех способов.
>> A=[2 1 0 1;1 -3 2 4; -5 0 -1 -7; 1 -6 2 6];
>> b=[8 9 -5 0];
1 способ:
>> x=b/A
x = 3.0000 -4.0000 -1.0000 1.0000
2 способ:
>> x=b*A^-1
x = 3.0000 -4.0000 -1.0000 1.0000
3 способ:
>> x=b*inv(A)
x = 3.0000 -4.0000 -1.0000 1.0000
Как и следовало ожидать, результат решения одинаков.

90
Глава 2. MATLAB

Для решения систем нелинейных уравнений следует также


использовать функцию solve из пакета Symbolic Math Toolbox. Эта функция
способна выдавать результат в символьной форме, а если такого нет, то она
позволяет получить решение в численном виде.

2.5.5. Полиномы
Полиномы (их принято называть также степенными многочленами) —
широко известный объект математических вычислений и обработки данных.
Обычно полином записывается в виде
p ( x ) = a n x n + a n −1 x n −1 + ... + a 2 x 2 + a1 x + a 0

Умножение и деление полиномов


Ниже приведены функции, осуществляющие умножение и деление
полиномов, или, что тоже самое, свертку двух входных векторов, в которых
находятся коэффициенты полиномов, и операцию, обратную свертке.
• w = conv(u,v) — возвращает свертку векторов и и v.
Алгебраически свертка — то же самое, что и произведение полиномов, чьи
коэффициенты — элементы векторов и и v. Если длина вектора и равна т, а
длина вектора v — п, то вектор w имеет длину т+п-1, а его k-й элемент
вычисляется по следующей формуле w(k ) = ∑ u ( j ) ⋅ v(k + 1 − j )
j

Пример:
f=[2 3 5 6];d=[7 8 3];r=conv(f,d)
r= 14 37 65 91 63 18
• [q,r] = deconv(v,u) —возвращает результат деления полинома v
на полином u. Вектор q представляет собой частное от деления, а г — остаток
от деления, так что выполняется соотношение v=conv(u,q)+r.
Пример:
t=[14 37 65 91 63 18];r=[7 8 3];[w,e]=deconv(t,r)
w = 2.0000 3.0000 5.0000 6.0000
e = 1.0e-013 * 0 0 0.1421 -0.1421 -0.2132 -0.1066
Вычисление полиномов
91
Глава 2. MATLAB

Ниже приведены функции вычисления коэффициентов


характеристического полинома, значения полинома в точке и матричного
полинома.
• poly(A) — для квадратной матрицы А размера пхп возвращает
вектор-строку размером n+1, элементы которой являются коэффициентами
характеристического полинома det(A-sI), где I — единичная матрица, as —
оператор Лапласа. Коэффициенты упорядочены по убыванию степеней.
• poly(r) — для вектора r возвращает вектор-строку р с
элементами, представляющими собой коэффициенты полинома, корнями
которого являются элементы вектора r. Функция roots(p) является обратной,
ее результаты, умноженные на целое число, дают poly(r ).
Приведенная ниже функция вычисляет корни (в том числе
комплексные) для полинома вида
p ( x ) = a1 x n + a 2 x n −1 + ... + a n −1 x 2 + a n x + a n +1

roots(a) — возвращает вектор-столбец, чьи элементы являются


корнями полинома p, где а – вектор коэффициентов полинома.
Разложение на простые дроби
Для отношения полиномов b и а используются следующие функции:
• [r,p,k] = res I due (b, a) — возвращает вычеты, полюса и
многочлен целой части отношения двух полиномов b(s) и a(s) в виде
b(s ) b1 + ... + bm s − m
=
a(s ) a1 + ... + a n +1 s − n

• [b,a] = residue(r,p,k) — выполняет обратную свертку суммы


простых дробей в пару полиномов с коэффициентами в векторах b и а.
В приложении приведены другие функции для решения полиномов.

92
Глава 2. MATLAB

2.6. Численные методы


2.6.1. Дифференцирование
• diff(X) — возвращает конечные разности смежных элементов
массива X. Если X — вектор, то diff(X) возвращает вектор разностей
соседних элементов [Х(2)-Х(1) Х(3)-Х(2) ... X(n)-X(n-D], у которого
количество элементов на единицу меньше, чем у исходного вектора X. Если
X — матрица, то diff(X) возвращает матрицу разностей столбцов: [X(2:m, :)-
X(l:m-l. :)];
• Y = diff(X,n,dim) — возвращает конечные разности для матрицы
X по строкам или по столбцам в зависимости от значения параметра dim.
Если порядок n равен величине dim или превышает ее, то diff возвращает
пустой массив.
Используя функцию diff, можно строить графики производных
заданной функции. Пример этого показан ниже. Для получения
приближенных численных значений производной от функции sin(Х) вектор
конечно-разностных значений D поделен на шаг точек по х. Как и следовало
ожидать, полученный график очень близок к графику функции косинуса.
Обратите внимание, что по оси х отложены номера элемента вектора X, а не
истинные значения х.

Х=0:0.05:10; S=sin(X);
D=diff(S); plot(D/0.05)

Пакет расширения Symbolic Math Toolbox позволяет выполнять


дифференцирование функций в аналитическом виде, т. е. точно. Это, однако,
не всегда нужно.

93
Глава 2. MATLAB

2.6.2. Численное интегрирование


Численное интегрирование традиционно является одной из важнейших
сфер применения математического аппарата. Численное интегрирование
заключается в приближенном вычислении определенного интеграла вида
b

∫ y(x )dx
a

одним из многочисленных численных методов, для вычисления


неопределенного интеграла по рекурсивному алгоритму усредняются
значения b=a+dn, где d — предельно малая величина.

2.6.2.1. Метод трапеций


Приведенные ниже функции выполняют численное интегрирование
методом трапеций и методом трапеций с накоплением.
• trapz(Y) — возвращает определенный интеграл, используя
интегрирование методом трапеций с единичным шагом между отсчетами.
Если Y — вектор, то trapz(Y) возвращает интеграл элементов вектора Y, если
Y — матрица, то trapz(Y) возвращает вектор-строку, содержащую интегралы
каждого столбца этой матрицы;
• trapz(X,Y) — возвращает интеграл от функции Y по переменной
X, используя метод трапеций (пределы интегрирования в этом случае
задаются начальным и конечным элементами вектора X);
• trapz(...,dim) — возвращает интеграл по строкам или по
столбцам для входной матрицы в зависимости от значения переменной dim.
Примеры:
1). Y=[1 2 3 4]; 2). X=0:pi/70:pi/2;
trapz(Y) Y=cos(X);
ans = 7.5000 Z = trapz(Y)
Z = 22.2780

• cumtrapz(Y) — возвращает численное значение определенного


интеграла для функции, заданной ординатами в векторе или матрице Y с
94
Глава 2. MATLAB

шагом интегрирования, равным единице (интегрирование методом трапеций


с накоплением). В случае когда шаг отличен от единицы, но постоянен,
вычисленный интеграл достаточно умножить на величину шага. Для
векторов эта функция возвращает вектор, содержащий результат
интегрирования с накоплением элементов вектора Y. Для матриц —
возвращает матрицу того же размера, что и Y, содержащую результаты
интегрирования с накоплением для каждого столбца матрицы Y;
• cumtrapz(X, Y) — выполняет интегрирование с накоплением от Y по
переменной X, используя метод трапеций. X и Y должны быть векторами
одной и той же длины или X должен быть вектором-столбцом, a Y —
матрицей;
• cumtrapz(...,dim) — выполняет интегрирование с накоплением
элементов по размерности, точно определенной скаляром dim. Длина вектора
X должна быть равна size(Y.dim).

2.6.2.2. Численное интегрирование методом квадратур


Приведенные ниже функции осуществляют интегрирование и двойное
интегрирование, используя квадратурную формулу Симпсона или метод
Гаусса-Лобатто. Квадратура — численный метод нахождения площади под
графиком функции/(т), т. е. вычисление определенного интеграла вида
b

∫ y(x )dx .
a
В приведенных ниже формулах подынтегральное выражение fun

обычно задается в форме дескриптора функции, поэтому с дидактическими


целями используем нотацию @fun.
Функции quad и quadl используют два различных алгоритма
квадратуры для вычисления определенного интеграла. Функция quad
выполняет интегрирование по методу низкого порядка, используя
рекурсивное правило Симпсона.

95
Глава 2. MATLAB

• quad(@fun,a,b) — возвращает численное значение определенного


интеграла от заданной функции @fun на отрезке [а b]. Используется
адаптивный метод Симпсона;
• quad(@fun,a,b,tol) — возвращает численное значение определенного
интеграла с заданной относительной погрешностью tol. По умолчанию
to1=l.E-6. Можно также использовать вектор, состоящий из двух элементов
tol =[rel_tol abs_tol], чтобы точно определить комбинацию относительной и
абсолютной погрешности;
• quad(@fun,a,b,tol,trace) — возвращает численное значение
определенного интеграла и при значении trace, не равном нулю, строит
график, показывающий ход вычисления интеграла;
• quad(@fun,a,b,tol,trace,PI,P2,...) — возвращает численное значение
определенного интеграла по х от подынтегральной функции fun, использует
дополнительные аргументы P1, P2,..., которые напрямую передаются в
подынтегральную функцию: G=fun(X.Pl,P2,...).
• dblquad(@fun,inmin,inmax,outmin,outmax) — вычисляет и
возвращает значение двойного интеграла для подынтегральной функции fun
(Inner, outer), по умолчанию используя квадратурную функцию quad. Inner —
внутренняя переменная, изменяющаяся на закрытом интервале от inmin до
inmax, a outer — внешняя переменная, изменяющаяся на закрытом интервале
от outmin до outmax. Первый аргумент @fun — строка, описывающая
подынтегральную функцию. Это может быть либо дескриптор функции, либо
объект inline (в последнем случае символ «@» в ее записи отсутствует).
Обычная запись в апострофах теперь недопустима. Эта функция должна быть
функцией двух переменных вид: fout=fun(inner.outer). Функция должна брать
вектор inner и скаляр outer возвращать вектор fout, который является
функцией, вычисленной в outer и каждом значении inner;
• dblquad(@fun,inmin,inmax,outmin,oiitmax,tol,trace) — передает в
функцию dblquad параметры tol и trace. Смотрите справку по функции quad
для получения информации о параметрах to! и trace;
96
Глава 2. MATLAB

• dblquad(@fun,inmin,inmax,outmin,outmax,tol,trace,order) — передает
параметры tol и trace для функции quad или quadl в зависимости от значения
строки order. Допустимые значения для параметра order — @quad , @quadl
или имя любого определенного пользователем квадратурного метода с таким
же вызовом и такими же возвращаемыми параметрами, как у функций quad и
quad1. По умолчанию вызывается @quad. поскольку подынтегральные
функции могут быть негладкими.

2.6.3. Решение обыкновенных дифференциальных уравнений


Анализ поведения многих систем и устройств в динамике, а также
решение многих задач в теории колебаний и в поведении упругих: оболочек
обычно базируются на решении систем обыкновенных дифференциальных
уравнений (ОДУ). Их, как правило, представляют в виде системы из
дифференциальных уравнений первого порядка в форме Коши:
⎧ dy
⎪ =y
'

⎨ dt
⎪ y ' = f ( y, t )

с граничными условиями b=y(t0 ,tend , p), где tend , t0 — начальные и конечные
точки интервалов. Параметр t не обязательно означает время, хотя чаще
всего решение дифференциальных уравнений ищется во временной области.
Вектор b задает начальные и конечные условия.
Для решения систем ОДУ в MATLAB реализованы различные методы.
Их реализации названы решателями ОДУ. Приведем два основных
решателя:
• ode45 — одношаговые явные методы Рунге-Кутта 4-го и 5-го
порядка. Это классический метод, рекомендуемый для начальной пробы
решения. Во многих случаях он дает хорошие результаты;
• ode23 — одношаговые явные методы Рунге-Кутта 2-го и 4-го
порядка. При умеренной жесткости системы ОДУ и низких требованиях к
точности этот метод может дать выигрыш в скорости решения;

97
Глава 2. MATLAB

Для решения жестких систем уравнений рекомендуется использовать


только специальные решатели ode 15s , ode23s, ode23t. ode23tb:
Использование решателей систем ОДУ
В описанных далее функциях для решения систем дифференциальных
уравнений приняты следующие обозначения и правила:
• options — аргумент, создаваемый функцией odeset (еще одна
функция — odeget или bvpget (только для bvp4c)— позволяет вывести
параметры, установленные по умолчанию или с помощью функции odeset
/bvpset);
• tspan — вектор, определяющий интервал интегрирования [t0 tfinal].
Для получения решений в конкретные моменты времени t0, tl,..., tfinal
(расположенные в порядке уменьшения или увеличения) нужно использовать
tspan = [t0 tl ... tfinal];
• у0 — вектор начальных условий;
• pi, р2,.„ — произвольные параметры, передаваемые в функцию F;
• Т, Y — матрица решений Y, где каждая строка соответствует
времени, возвращенном в векторе-столбце Т.
Перейдем к описанию функций для решения систем
дифференциальных уравнений:
• [T,Y] = solver(@F,tspan,у0) — где вместо solver подставляем имя
конкретного решателя — интегрирует систему дифференциальных
уравнений вида у'=F(t,y) на интервале tspan с начальными условиями у0. @F
— дескриптор ODE-функции. Каждая строка в массиве решений Y
соответствует значению времени, возвращаемому в векторе-столбце Т;
• [T,Y] = solver(@F, tspan, y0, options) — дает решение, подобное
описанному выше, но с параметрами, определяемыми значениями аргумента
options, созданного функцией odeset. Обычно используемые параметры
включают допустимое значение относительной погрешности RelTol (по
умолчанию le-З) и вектор допустимых значений абсолютной погрешности
AbsTol (все компоненты по умолчанию равны 1е-6);
98
Глава 2. MATLAB

• [T,Y] = solver(@F,tspan,yO,options,pl,p2...) — дает решение,


подобное описанному выше, передавая дополнительные параметры pi, р2,... в
m-файл F всякий раз, когда он вызывается. Используйте options=[], если
никакие параметры не задаются.
Другие функции можно найти в справочной системе.
Пример: Покажем применение решателя ОДУ на ставшем
классическом примере — решении уравнения Ван-дер-Поля, записанного в
виде системы из двух дифференциальных уравнений:
y1' = y 2
y 2' = 100(1 − y1 ) y 2 − y1
2

при начальных условиях


y1(0) = 0;
y2(0) = 1.
Перед решением нужно записать систему дифференциальных
уравнений в виде ode-функции. Для этого в главном меню выберем File
→New→M-File и введем:
function dydt = vdp100(t,y)
dydt = zeros(2,1); % a column vector
dydt(l) = y(2);
dydt(2) = 100*(1-y(1)^2)*y(2)-y(1);
Сохраним m-файл-функцию. Тогда решение решателем ode15s и
сопровождающий его график можно получить, используя следующие
команды:
[t,y]=odel5s(@vdp100,[0 30],[2 0]);
plot(t,y)
hold on;gtext('yl');gtext('y2')
Последние команды позволяют с помощью мыши нанести на графики
решений y1 = y(1) и у2 = y(2) помечающие их надписи.

99
Глава 2. MATLAB

ЛИТЕРАТУРА
1. Дьяконов В.П. MATLAB 6.0/6.1/6.5/6.5+Simulink 4/5. Обработка
сигналов и изображений.-М.: СОЛОН-Пресс, 2005.
2. Дьяконов В.П. MATLAB. Учебный курс. СПб.: ПИТЕР, 2001.
3. Дьяконов В.П., Абраменкова И.В. MathCAD 8 PRO в
математике, физике и Internet. - М.: “Нолидж”, 2000. - 512 с.: ил.
4. Ивановский Р.И. Компьютерные технологии в науке и
образовании. Практика применения систем Mathcad Pro. Учебное
пособие. М.: Высшая школа, 2003.
5. Кирьянов Д.В. Самоучитель MathCAD 11. С.-Петербург, 2003
6. Лазарев Ю.Ф. MatLAB 5.X. (Серия «Библиотека студента») К.:
Издательская группа BHV, 2000.
7. Могилев А.В. и др. Информатика: Учебное пособие для
студентов пед. вузов. – М.: Изд. центр «Академия», 2000.
8. Плис А.И., Сливина Н.А. Mathcad 2000. Лабораторный
практикум по высшей математике. - М.: Высш. шк., 2000. - 716
с.: ил.
9. Плис А.И., Сливина Н.А. Mathcad. Математический практикум
для инженеров и экономистов. Учебное пособие.-М.: Финансы и
статистика, 2003.
10. Сергиенко А.Б. Цифровая обработка сигналов. СПб.: Питер,
2002.

100
Приложение

ПРИЛОЖЕНИЕ
Системные переменные
i или j мнимая единица
pi число π
eps погрешность операций над числами с плавающей точкой (2-52)
realmin наименьшее число с плавающей точкой (2-1022)
realmax наибольшее число с плавающей точкой (21023)
inf значение машинной бесконечности
ans переменная, хранящая результат последней операции
NaN указание на нечисловой характер данных (Not-a-Number)

Уничтожение определений переменных


clear уничтожение определений всех переменных
clear x уничтожение определений переменной Х
clear a,b,c уничтожение определений нескольких переменных

Список возможных символов и их значения при форматировании


графиков
Символ Назначение
Управление цветом
b Синий (по умолчанию) — Blue
с Голубой — Cyan
g Зеленый — Green
к Черный —blасК
m Фиолетовый — Magenta
r Красный — Red
w Белый — White
y Желтый — Yellow
Управление типом линии
- Непрерывная (по умолчанию)
-- Пунктирная, длинный штрих
: Пунктирная, короткий штрих
-. Штрихпунктирная
Управление маркерами точек данных
. Точка (по умолчанию)
+ Знак «плюс»
* Звездочка
101
Приложение

0 Кружок
X Крестик
S Квадрат — Square
d Ромб — Diamond
Р Пятиугольник — Pentagon
h Шестиугольник — Hexagon
v Треугольник острием вниз
^ Треугольник острием вверх
< Треугольник острием влево
> Треугольник острием вправо

Файловая система MATLAB


Система MATLAB состоит из многих тысяч файлов, находящихся в
множестве папок. Полезно иметь представление о содержании основных
папок, поскольку это позволяет быстро оценить возможности системы —
например, узнать, какие операторы, функции или графические команды
входят в систему.
В MATLAB особое значение имеют файлы двух типов — с
расширениями .mat и .m. Первые являются бинарными файлами, в которых
могут храниться значения переменных. Вторые представляют собой
текстовые файлы, содержащие внешние программы, определения команд и
функций системы. Именно к ним относится большая часть команд и
функций, в том числе задаваемых пользователем для решения своих
специфических задач. нередко встречаются и файлы с расширением .с (коды
на языке Си), файлы с откомпилированными кодами MATLAB с
расширением .mех и другие. Исполняемые файлы имеют расширение .ехе.
Особое значение имеет папка MATLAB/TOOLBOX/MATLAB. В ней
содержится набор стандартных m-файлов системы. Просмотр этих файлов
позволяет детально оценить возможности поставляемой конкретной версии
системы. Ниже перечислены основные подпапки с этими файлами (деление
на категории условно, на самом деле все подпапки находятся в общей папке
MATLAB/TOOLBOX/MATLAB).
Подпапка команд общего назначения:

102
Приложение

• General — команды общего назначения: работа со справкой,


управление окном MATLAB, взаимодействие с операционной системой и т.
д.
Подпапки операторов, конструкций языка и системных функций:
• ops — операторы и специальные символы;
• lang — конструкции языка программирования;
• strfun — строковые функции;
• iofun — функции ввода/вывода;
• timefun — функции времени и дат;
• datatypes — типы и структуры данных.
Подпапки основных математических и матричных функций:
• elmat — команды создания элементарных матриц и операций с ними;
• elfun — элементарные математические функции;
• specfun — специальные математические функции;
• matfun — матричные функции линейной алгебры;
• datafun — анализ данных и преобразования Фурье;
• polyfun — полиномиальные функции и функции интерполяции;
• funfun — функции функций и функции решения обыкновенных
дифференциальных уравнений;
• soarfun — функции разреженных матриц.
Подпапки команд графики:
• graph2d — команды двумерной графики;
• graph3d — команды трехмерной графики;
• specgraph — команды специальной графики;
• graphics — команды дескрипторной графики;
• uitools — графика пользовательского интерфейса.
Полный состав файлов каждой подпапки (их список содержится в
файле contents.m) можно вывести на просмотр с помощью команды help имя,
где имя —название соответствующей подпапки.

103
Приложение

Функции оформления графиков


• axis([xmin xmax ymin ymax]) — настройка предельных значений осей для
двумерного графика;
• axis([xmin xmax ymin ymax zmin zmax]) — настройка предельных
значений осей для трехмерного графика;
• axis auto — автоматический выбор пределов (этот режим установлен по
умолчанию);
• axis tight — предельные значения осей в точности соответствуют
диапазонам изменения данных;
• axis equal — для всех осей графика устанавливается одинаковый масштаб;
• axis image — то же, что комбинация axis equal и axis tight;
• axis square — делает длину осей одинаковой (а область графика —
квадратной);
• axis normal — отменяет действие режимов axis square и axis equal;
• axis off — отключает отображение осей вместе с оцифровкой, подписями
и фоном графика;
• axis on — включает отображение осей, их оцифровки, подписей, а также
фона графика;
• grid — включение (grid on) и выключение (grid off) отображения линий
сетки;
• box — включение (box on) и выключение (box off) отображения
обрамляющего график прямоугольника или параллелепипеда;
• legend('stringl', 'string2', 'string3', ...) — добавление аннотации («легенды») к
графику. Каждая из строк-параметров задает аннотацию для одной из
выведенных на график зависимостей;
• title( 'text') — добавление заголовка к графику;
• xlabel (' text') — добавление подписи к оси х;
• ylabel (' text') — добавление подписи к оси у;
• zlabel (' text') — добавление подписи к оси z;

104
Приложение

• text(x, у, 'string') или text(х, у, z, 'string') — размещение строки 'string' в


точке двумерного или трехмерного графика с указанными координатами;
• xlim([xmin xmax]) — задание пределов по оси x,
• ylim([ymin ymax]) — задание пределов по оси у,
• zlim([zmin zmax]) — задание пределов по оси z.
Обзор функций
Получить справку по конкретному разделу можно, набрав в команд-
ной строке следующий текст:
» help имя_раздела -
В результате будет выведен список функций данного раздела с краткими
комментариями по их назначению.
Audio
В данном разделе содержатся функции работы со звуковой картой
компьютера.
Datafun
В этом разделе сосредоточены разнообразные функции анализа данных.
Большинство из них ориентировано на работу с векторным аргументом;
матрицы обрабатываются по столбцам. Вот список важнейших функций:
Базовые операции:
• max, min — вычисление наибольшего и наименьшего элемента, а также
индекса этого элемента;
• mean, median, var, std — оценка среднего значения, медианы, дисперсии и
среднеквадратического отклонения;
• sort, sort rows — сортировка (по возрастанию) элементов и строк матрицы;
• sum, prod — сумма и произведение элементов;
• hist, histc — построение гистограммы и расчет данных для нее;
• trapz — численное интегрирование методом трапеций;
• cumsum — расчет частичных сумм элементов (численное интегрирование
методом прямоугольников);
• cumprod — расчет частичных произведений элементов.

105
Приложение

Конечные разности:
• diff — вычисление разностей между соседними элементами;
• gradient — аппроксимация градиента;
• del 2 — дискретный лапласиан.
Корреляция:
• corrcoef — коэффициент взаимной корреляции;
• cov — ковариационная матрица;
• subspace — расчет угла между векторами.
Фильтрация и свертка:
• fiIter, fi1ter2 — одномерная и двумерная дискретная фильтрация;
• conv, deconv — свертка (умножение полиномов) и обращение свертки
(деление полиномов);
• conv2, convn — двумерная и многомерная свертка;
• detrend — удаление линейного тренда.
Преобразование Фурье:
• fft, fft2, fftn — одномерное, двумерное и многомерное прямое дискретное
преобразование Фурье;
• ifft, ifft2, ifftn — одномерное, двумерное и многомерное обратное
дискретное преобразование Фурье;
• fftshift, ifftshift — два зеркальных варианта перестановки половин вектора
или квадрантов матрицы.
Datatypes
В этом разделе сосредоточены средства поддержки типов данных MATLAB.
Demos
В данном разделе собраны демонстрационные примеры.
Elfun
Содержатся файлы, реализующие элементарные математические функции. В
большинстве случаев эти функции встроены в ядро системы, так что в М-
файлах хранится только текст справки.
Тригонометрические функции:
• sin, sinh — синус и гиперболический синус;
• asin, asinh — арксинус и гиперболический арксинус;

106
Приложение

• cos, cosh — косинус и гиперболический косинус;


• acos, acosh — арккосинус и гиперболический арккосинус;
• tan, tanh — тангенс и гиперболический тангенс;
• atan, atanh — арктангенс и гиперболический арктангенс;
• atan2 — вычисление угловой координаты точки по паре ее декартовых
координат;
• sec, seen — секанс и гиперболический секанс;
• asec, asech — арксеканс и гиперболический арксеканс;
• esc, csch — косеканс и гиперболический косеканс;
• acsc, acsch — арккосеканс и гиперболический арккосеканс;
• cot, coth — котангенс и гиперболический котангенс;
• acot, acoth — арккотангенс и гиперболический арккотангенс.
Экспоненциальные функции:
• ехр, log — экспонента и натуральный логарифм;
• log10 — десятичный логарифм;
• log2 — двоичный логарифм, а также выделение порядка и мантиссы
числа;
• pow2 — функция 2x а также «сборка» числа из мантиссы и порядка;
• realpow, reallog, realsqrt — версии оператора возведения в степень, а также
функций log и sqrt, возвращающие только вещественные результаты (если
аргументы функции таковы, что результат должен оказаться
комплексным, выдается сообщение об ошибке);
• sqrt — квадратный корень;
• nextpow2 — ближайшая «сверху» степень двойки.
Функции для работы с комплексными числами:
• abs, angle — модуль и аргумент (фаза) комплексного числа;
• complex — «сборка» комплексного числа из вещественной и мнимой
частей;
• conj — комплексное сопряжение;
• real, imag — вещественная и мнимая части комплексного числа;

107
Приложение

• unwrap — устранение скачков фазы;


• isreal — проверка вещественности массива;
• cplxpair — сортировка чисел по комплексно-сопряженным парам.
Округление и остаток:
• fix, floor, ceil, round — округление в сторону нуля, вниз, вверх, к
ближайшему целому числу;
• rem, mod— остаток от деления и взятие числа по заданному модулю
(остаток со знаком);
• sign — знаковая функция.
Elmat
В данном разделе собраны функции элементарных матричных операций.
Создание элементарных матриц:
• zeros, ones — матрицы, заполненные нулями и единицами;
• eye — единичная матрица;
• repmat — дублирование матрицы «мозаикой»;
• rand, randn — генерация случайных чисел с равномерным и нормальным
распределением;
• linspace, logspace — генерация арифметической и геометрической
прогрессии;
• freqspace — генерация вектора частот для анализа частотных
характеристик;
• meshgrid — генерация массивов координат для построения трехмерных
графиков.
Информационные функции:
• size, length, numel — размер массива, длина вектора, число элементов
массива;
• ndims — число размерностей массива;
• disp — вывод значения переменной;
• isempty, isnumeric, islogical — проверка, является ли массив пустым,
числовым, логическим;

108
Приложение

• isequal, isequalwithequalnans — проверка пары массивов на равенство


(первая функция считает элементы, равные NaN, несовпадающими, вторая
— сопадающими);
• logical — преобразование числовых величин в логические.
Преобразования матриц:
• cat — соединение массивов;
• reshape — изменение размеров матрицы при сохранении числа элементов;
• diag — создание диагональных матриц и выделение вектора диагональных
элементов матрицы;
• blkdiag — создание блочно-диагональной матрицы;
• tril , triu — выделение нижнего и верхнего треугольных блоков матрицы;
• fliplг, fIipud — зеркальное отражение матрицы относительно
вертикальной и горизонтальной осей;
• flipdim — зеркальное отражение многомерного массива относительно
указанной размерности;
• rot90 — поворот матрицы на 90°;
• find — индексы ненулевых элементов;
• end — последний индекс вдоль данной размерности;
• sub2ind, ind2sub — преобразование набора индексов в линейный индекс
и обратно.
Специальные переменные и константы:
• ans — результат последней операции;
• eps — относительная точность вычислений с плавающей запятой;
• realmin, realmax — минимально и максимально возможные числа с
плавающей запятой;
• pi — число π;
• i, j — мнимая единица;
• inf — бесконечность;
• NaN — нечисловое значение (Not-a-Number);

109
Приложение

• Isnan, isinf, isfinite — проверка на NaN, бесконечность и конечность


значения.
Специальные матрицы.
К этой категории относятся функции, генерирующие матрицы Адамара
(hadamard), Ганкеля (hankel), Гильберта (hilb), Паскаля (pascal) и др. Для
задач, связанных с обработкой сигналов, особый интерес представляет
функция toeplitz, предназначенная для построения матриц с теплицевой
структурой (у таких матриц вдоль диагоналей расположены одинаковые
значения). Поскольку именно такой вид имеют корреляционные матрицы
стационарных случайных сигналов, функцию toeplitz можно использовать
для построения корреляционной матрицы по отсчетам корреляционной
функции.
Funfun
В данном разделе собраны функции поиска минимумов и нулей функций,
численного интегрирования, а также численного решения
дифференциальных уравнений. Все эти операции требуют создания М-файла
функции, с которой будет вестись работа, поэтому данный раздел и получил
такое имя — «Function functions». Вот важнейшие функции этого раздела:
• fzero — решение нелинейных уравнений;
• fminsearch — многомерная нелинейная минимизация без ограничений;
• fminbnd — скалярная нелинейная минимизация с ограничениями;
• quad, quad1 — численное интегрирование;
• dbiquad, triplequad — численное вычисление двойных и тройных
интегралов;
• ode45, ode23, odell3, ode23t, odel5s, ode23s, ode23tb — различные методы
численного решения дифференциальных уравнений.
General
Данный раздел содержит функции общего назначения. Сюда относятся
команды работы со справочной системой, управления рабочей областью
памяти, открытия и сохранения файлов, настройки пути поиска файлов,

110
Приложение

управления командным окном, средства вызова команд операционной


системы, а также отладочные средства.
Graph2d, Graph3d
В данных разделах содержатся средства двумерной и трехмерной графики.
Graphics
В этом разделе собраны средства поддержки дескрипториой графики
(Handle Graphics®) MATLAB. Вкратце ее идею можно описать следующим
образом. Все графические функции, такие как figure, plot и прочие, могут
возвращать результат — число или несколько чисел, являющихся
дескрипторами (handle) созданных функцией графических объектов —
графических окон, координатных осей, графиков и т. д. Эти дескрипторы
используются для получения программного доступа к графическим объектам
и их свойствам.
lofun
К данной категории относятся средства файлового ввода/вывода.
Lang
В данном разделе собраны конструкции языка программирования MATLAB:
• try и catch — операторы для обработки исключительных ситуаций
(exception);
• eval (S) — вычисление MATLAB-выражения, заданного в виде строкового
входного параметра S;
• feval(F, xl, х2, ...) — вычисление функции, имя которой задано строковым
входным параметром F, с передачей ей входных параметров xl, х2 и т. д.;
• global — определение глобальной переменной;
• persistent — определение локальной переменной функции, значение
которой сохраняется при следующем вызове функции;
• exist — проверка существования переменной или функции;
• isglobal — проверка глобальности переменной;
• disp — вывод значения переменной в командное окно MATLAB;
• fprintf, sprintf — запись форматированных данных в поток вывода и в
строковую переменную;

111
Приложение

• input — запрос на ввод значения переменной пользователем;


• pause — приостановка работы программы.
Matfun
В данном разделе собраны матричные функции линейной алгебры. Отметим
лишь важнейшие из них:
• norm — норма матрицы или вектора;
• rank — ранг матрицы;
• det, trace — определитель и след (сумма диагональных элементов)
матрицы;
• \ и / — решение систем линейных уравнений (матричное деление);
• inv — обращение матрицы;
• eig — расчет собственных чисел и собственных векторов матрицы;
• svd — разложение по сингулярным числам;
• poly — характеристический полином матрицы;
• expm, logm, sqrtm — матричная экспонента, матричный логарифм,
матричный квадратный корень.
Ops
Данный раздел посвящен операторам и символам, имеющим для MATLAB
специальное значение. Поскольку поддержка этих базовых возможностей
встроена в ядро системы, в каталоге Ops в основном содержится лишь
справочная информация. Исключением являются, в частности, функции
работы с битовыми представлениями неотрицательных целых чисел и
функции, реализующие операции с множествами:
• bitand, bitor, bitcmp, bitxor — побитовые логические операции «И»,
«ИЛИ», «НЕ», «исключающее ИЛИ»;
• bitmax — максимальное целое число, которое можно точно представить в
используемом MATLAB формате с плавающей запятой. Для платформы
PC это значение равно 253 - 1;
• bitget, bitset — считывание значения бита с заданным номером и его
установка в заданное значение;

112
Приложение

• bitshift — побитовый сдвиг на заданное число разрядов;


• unique — удаление из массива повторяющихся элементов;
• union, intersect, setdiff, setxor — операции объединения, пересечения,
вычитания и «исключающего ИЛИ» над множествами;
• ismember — проверка принадлежности элемента к множеству.
Polyfun
В данном разделе собраны функции интерполяции и работы с полиномами.
Перечислим лишь наиболее важные для задач обработки сигналов функции
работы с полиномами:
• roots, poly — поиск корней полинома и расчет коэффициентов полинома
по его корням;
• polyval, polyvalm — вычисление значения полинома в заданной точке от
числового и матричного аргумента;
• residue — представление дробно-рациональной функции в виде суммы
простых дробей;
• polyfit — полиномиальная аппроксимация данных;
• polyder — дифференцирование полиномов, их произведений и отношений;
• polyint — интегрирование полиномов;
• conv, deconv — умножение и деление полиномов.
Sparfun
В некоторых предметных областях приходится иметь дело с матрицами
очень большого размера, у которых отлична от нуля лишь малая часть
элементов. Такие матрицы называются разреженными (sparse). На хранение
нулевых элементов и выполнение математических операций с ними впустую
тратится много ресурсов компьютера. В данном разделе собраны функции,
позволяющие хранить матрицы и выполнять матричные операции
непосредственно в разреженном виде, то есть хранить только значения и
индексы ненулевых элементов матриц. В задачах обработки сигналов такие
матрицы практически не встречаются.
Specfun

113
Приложение

В этом разделе находятся специальные математические функции. Вот


важнейшие из них:
• airy — функции Эйри;
• besselj, bessely, besselh, besseii, besselk — функции Бесселя;
• beta, betainc, betaln — бета-функция, неполная бета-функция и логарифм
бета-функции;
• ellipj — эллиптические функции Якоби;
• ellipke — полный эллиптический интеграл;
• erf, erfс, erfcx, erfinv — функция ошибок: обычная, дополнительная,
масштабированная дополнительная, обратная;
• expint — интегральная экспонента;
• gamma, gammainc, gammain — гамма-функция, неполная гамма-функция и
логарифм гамма-функции;
• psi — пси-функция (дигамма-функция);
• legendre — присоединенная функция Лежандра;
• cross — векторное произведение;
• dot — скалярное произведение векторов;
• factor — разложение натурального числа на простые множители;
• isprime — проверка, является ли натуральное число простым;
• primes — генерация простых чисел;
• gcd, lcm — наибольший общий делитель и наименьшее общее кратное;
• rat — рациональная аппроксимация;
• perms — генерация всех возможных перестановок элементов вектора;
• nchoosek — расчет биномиальных коэффициентов;
• factorial — факториал.
Specgraph
В данном разделе собраны специализированные графические функции. Сюда
относятся разнообразные диаграммы (area, bar, barh, pie и др.), функции stem,
stairs, contour и contourf, а также многие другие. Особый интерес
представляют функции, имена которых начинаются с букв ez (от «easy» —
114
Приложение

«легкий») — ezplot, ezpolar, ezcontour, ezcontourf, ezgraph3, ezmesh, ezmeshc,


ezplot; ezsurf и ezsurfc. Они позволяют строить графики соответствующих
типов, задавая не массивы данных, а строки, в которых записаны формулы
для вычислений. Также в данном разделе имеются функции чтения и записи
графических файлов, трехмерной визуализации и анимации.
Strfun
К данному разделу относятся функции работы со строками:
• blanks, deblank — создание строки, заполненной пробелами, и удаление
концевых пробелов из строки;
• strcat — соединение строк;
• strcmp, strcmpi — сравнение строк с учетом и без учета регистра
символов;
• strncmp, strncmpi — сравнение первых N символов строк с учетом и без
учета регистра символов;
• findstr — поиск одной строки внутри другой;
• upper, lower — преобразование строки к верхнему и нижнему регистрам;
• num2str, str2num — преобразование числа в строку и обратно;
• int2str — преобразование целого числа в строку;
• str2double — преобразование строки в число в формате double;
• sprintf — запись форматированных данных в строку;
• hex2dec, dec2hex — преобразование шестнадцатеричной строки в целое
число и обратно;
• bin2dec, dec2bin — преобразование двоичной строки в целое число и
обратно;
• base2dec, dec2base — преобразование строки, записанной в произвольной
системе счисления, в целое число и обратно.
Timefun
В данном разделе собраны функции работы с датами и временем.
Важнейшими из них являются следующие:
• now — текущие дата и время в виде числа;

115
Приложение

• date — текущая дата;


• cl ock —текущие дата и время в виде вектора;
• tic, toc — запуск и остановка таймера;
• pause — приостановка работы программы на заданное время.
Uitools
MATLAB позволяет создавать программы, имеющие графический
пользовательский интерфейс. В данном разделе библиотеки собраны
средства, обеспечивающие соответствующие функции. Запуск конструктора
форм производится функцией guide.
Verctrl
Функции данного раздела обеспечивают взаимодействие MATLAB с
системами контроля версий файлов (version control system, VCS).
Winfun
В данном разделе собраны функции взаимодействия MATLAB с
операционной системой Windows через интерфейсы DDE и ActiveX.

116
УЧЕБНОЕ ИЗДАНИЕ
Хлыбов Александр Анатольевич
Хлыбова Ольга Николаевна
MathCAD и MATLAB.
Начальный курс.
Учебно – методическое пособие
Печатается в авторской редакции

Подписано в печать Печать оперативная.


Объем 7,3 п.л. Тираж 100 экз. Заказ

Нижегородский государственный педагогический университет


603950, Нижний Новгород, ГСП – 37, ул. Ульянова, 1
Полиграфический участок АНО «МУК НГПУ»
603950, Нижний Новгород, ГСП – 37, ул. Ульянова, 1

117

Вам также может понравиться