Система MATLAB
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
• Тема 1. Знакомство с MATLAB. Основные объекты языка MATLAB
◦ Общая информация о разделеСтраница
◦ 1.1. Режим прямых вычисленийСтраница
◦ 1.2. Базовые объекты языка MATLABСтраница
◦
•
Тема 2. Операции с матрицами
◦ Общая информация о разделеСтраница
◦ 2.1. Функции генерации типовых матрицСтраница
◦ 2.2. Преобразование матрицСтраница
◦ 2.3. Поэлементные операции с матрицамиСтраница
◦ 2.4. Операции с матрицами в задачах линейной алгебрыСтраница
◦ 2.4.1. Арифметические операции с матрицамиСтраница
◦ 2.4.2. Транспонирование и эрмитово сопряжение матрицСтраница
◦ 2.4.3. Обращение матрицСтраница
◦ 2.4.4. Матричное делениеСтраница
◦ Тест по темам 1 и 2
•
Тема 3. Типы массивов
◦ Общая информация о разделеСтраница
◦ 3.1. Матрицы числового и логического типовСтраница
◦ 3.2. Матрицы символьного типаСтраница
◦ 3.3. Структуры (массивы записей)Страница
◦ 3.4. Массивы ячеекСтраница
◦ 3.5. Определение типа массиваСтраница
◦
◦ Тест по теме 3
•
Тема 5. Режим программирования: script-файлы и function-файлы
◦ Общая информация о разделеСтраница
◦ 5.1. Создание и хранение M-файловСтраница
◦ 5.2. Script-файлыСтраница
◦ 5.3. Function-файлыСтраница
◦ 5.4. Оформление и вывод листинга M-файловСтраница
◦ 5.5. Вывод данныхСтраница
◦ 5.6. Пауза и досрочное прерывание программыСтраница
◦
◦ Тест по теме 5
•
Тема 6. Режим программирования: организация разветвлений и циклов
Для организации разветвлений и циклов в М-файлах используются операторы языка MATLAB, рассматриваемые в следующих разделах.
◦ 6.1. Операторы организации разветвленийСтраница
◦ 6.2. Операторы организации цикловСтраница
◦
◦ Тест по теме 6
Общая информация о разделе
Система MATLAB — это интерактивная система, предназначенная для компьютерного моделирования практически в любой области науки и техники.
Интерфейс MATLAB образуют следующие окна:
• Command Window (Командное окно) — основное окно интерактивной системы MATLAB с активизированной командной строкой.
Из активизированной командной строки пользователь может возвращаться к ранее введенным командам с помощью стрелок "вверх" и "вниз" на клавиатуре;
• Current Folder (Текущая папка) — в этом окне выводится содержимое папки, имя которой отображается в раскрывающемся списке Current Folder на панели инструментов окна MATLAB.
Создание собственной папки в окне Current Folder выполняется с помощью контекстного меню, в котором последовательно выбираются команды New (Новая) и Folder (Папка), и новой папке присваивается имя.
Сохранение пути к собственной папке в окне Current Folder выполняется по команде контекстного меню Add to Path | Selected Folders (Добавить к пути | Выделенные папки);
• Workspace (Рабочая область памяти) — в этом окне выводится список текущих переменных, сохраняемых в рабочей области памяти Workspace до выхода из MATLAB;
• Command History (История команд) — в этом окне выводится построчный список объектов языка MATLAB, вводимых в ходе текущей и предшествующих сессий. Двойным щелчком левой кнопки мыши можно дублировать любую строку из Command History в Command Window.
Система оперативной помощи MATLAB включает в себя:
• справочную систему в формате HTML (Hyper Text Markup Language — язык гипертекстовой маркировки), обращение к которой производится по команде MATLAB Help в пункте меню Help окна MATLAB;
• команду:
help <стандартное имя объекта языка MATLAB>
1.1. Режим прямых вычислений
Режим прямых вычислений (называемый также командным режимом) означает, что вычисления выполняются без составления программы. Объекты языка MATLAB в ходе текущей сессии (сеанса работы до выхода из MATLAB) вводятся построчно в командной строке окна Command Window с соблюдением следующих правил:
• символ " ; " (точка с запятой) в конце строки блокирует автоматический вывод результата;
• символ " ... " (многоточие) в конце строки является признаком продолжения предыдущей строки;
• символ " % " (процент) в начале строки соответствует комментарию.
1.2. Базовые объекты языка MATLAB
К базовым объектам языка MATLAB относятся:
• команды;
• операторы;
• константы;
• переменные;
• функции;
• выражения.
Команда — это объект языка MATLAB со стандартным именем, предназначенный для взаимодействия с системой MATLAB и имеющий формат:
<команда> <содержательная часть>
где <команда> — стандартное имя команды; <содержательная часть> — уточняется для каждой конкретной команды и может отсутствовать.
В конце команды символ ";" не ставится.
Список команд общего назначения выводится по команде:
help general
Некоторые распространенные команды приведены в табл. 1.1. Другие будут рассматриваться по мере изложения материала.
Таблица 1.1. Команды
Команда
Назначение
clc
Очистка окна Command Window
clear
Удаление объектов из Workspace (без содержательной части — очистка Workspace)
ver
Вывод информации об установленной версии MATLAB и пакетах расширения
whos
Вывод содержимого Workspace с дополнительными сведениями
Оператор — это объект языка MATLAB со стандартным именем, предназначенный для разработки программ.
Простейшим оператором является оператор присваивания с форматом:
<имя переменной> = <выражение>
или
<выражение>
В последнем случае значение выражения присваивается переменной со стандартным именем ans.
Константа — это объект языка MATLAB, имеющий в процессе вычислений неизменное значение.
Различают следующие типы констант:
• численные, среди которых выделяют:
1. целые;
2. вещественные;
3. комплексные;
• логические;
• символьные.
Целые и вещественные константы могут вводиться в обычной форме с разделением точкой целой и дробной частей:
>> 158;
>> -17.38;
или в форме E, которой соответствует представление числа в показательной форме:
μ · 10p, (1.1)
где μ — мантисса — вещественная константа, а p — порядок — целая константа; 10 — основание, обозначаемое буквой e:
>> 0.157e-3;
Комплексные константы вводятся в алгебраической форме:
ξ + jη. (1.2)
Мнимая единица вводится как i или j, но выводится всегда как i:
>> 5+3.7j
ans =
5.0000 + 3.7000i
Возможен ввод с использованием символа умножения в мнимой части:
>> 5+3.7*j
ans =
5.0000 + 3.7000i
Стандартные константы — это константы со стандартными именами. Их полный список может быть выведен по команде:
help elmat
а наиболее распространенные константы приведены в табл. 1.2.
Таблица 1.2. Стандартные константы
Стандартное имя константы
Назначение
i или j
Мнимая единица, соответствующая : >> i=sqrt(-1)
pi
Число π
Inf (или inf)
Машинная бесконечность (число, большее максимально допустимого во внутренних вычислениях в MATLAB)
Nan
Не число (Not-a-number). Присваивается неопределенностям типа 0/0, inf/inf, 0∙inf
Логические константы — это константы, принимающие значения 1 (true — истина) или 0 (false — ложь).
Символьные константы — это любые последовательности символов, заключенные в апострофы:
>> 'Sella'
ans =
Sella
Переменная — это объект языка MATLAB, который в процессе вычислений может менять свое значение.
Переменные представляются своими именами (идентификаторами).
Имя переменной составляется из последовательности латинских букв, цифр и символа подчеркивания и начинается с буквы. В MATLAB прописные и строчные буквы различаются.
Массивом называют упорядоченную совокупность данных, объединенных одним именем.
Массив характеризуется:
• размерностью;
Размерность массива равна количеству индексов k, которые указывают на упорядоченность данных в k-мерном пространстве.
Если данные упорядочены в строку (столбец), то их порядок следования указывается с помощью одного индекса, и массив называют одномерным или вектором.
Если данные упорядочены одновременно по строкам и по столбцам, то их порядок следования указывается с помощью двух индексов, и массив называют двумерным или матрицей.
• размером;
В матричной алгебре в качестве размера массива принято указывать произведение числа элементов по каждому индексу, а именно: n — одномерный массив; m · n — двумерный и т. д.
Матрицу называют квадратной порядка n, если число строк равно числу столбцов: m = n.
В MATLAB нижняя граница индексов массива равна единице.
• типом.
Тип массива определяется типом его элементов. Например, элементами числового массива являются численные константы.
Особенностью MATLAB является то, что тип переменной не объявляется, и любая переменная по умолчанию считается матрицей (отсюда и название MATLAB — MATrix LABoratory).
Матрица вводится построчно в квадратных скобках, элементы строки отделяются пробелом или запятой, а строки — точкой с запятой:
>> A=[1 2 3;5 6 7;8 9 7]
A =
1 2 3
5 6 7
8 9 7
Вектор (вектор-строка) размером 1 · n вводится в квадратных скобках, а его элементы — через пробел или запятую:
>> A=[1 4 5 7 8]
A =
1 4 5 7 8
Вектор-столбец размером n · 1 вводится в квадратных скобках, а его элементы — через точку с запятой:
>> A=[1;4;5]
A =
1
4
5
Скаляр размером 1 · 1 можно вводить без квадратных скобок:
>> b=1.5e-3;
Функции в MATLAB представлены двумя разновидностями:
• встроенные;
• внешние.
Встроенная функция (по умолчанию функция) — это объект языка MATLAB со стандартным именем, предназначенный для выполнения действий с параметрами (аргументами), перечисленными через запятую и заключенными в круглые скобки.
Список основных элементарных математических функций, сгруппированных по назначению, представлен в табл. 1.3. Их полный список выводится по команде:
help elfun
Таблица 1.3. Элементарные математические функции
Тип функции
Функция
Назначение
Тригонометрическая
sin(X)
Синус — sin(x)
cos(X)
Косинус — cos(x)
tan(X)
Тангенс — tg(x)
cot(X)
Котангенс — ctg(x)
Экспоненциальная
exp(X)
Экспонента — ex
Логарифмическая
log(X)
Натуральный логарифм — ln(x)
log10(X)
Десятичный логарифм — lg(x)
log2(X)
Логарифм по основанию 2 — log2x
Корень квадратный
sqrt(X)
Корень квадратный
Число по модулю m
mod(X,m)
Число x по модулю m — modmx
С комплексным аргументом
abs(X)
Модуль числа |x|
angle(X)
Аргумент числа x
real(X)
Выделение вещественной части — Re(x)
imag(X)
Выделение мнимой части — Im(x)
conj(X)
Комплексно-сопряженное число
Выражение — это объект языка MATLAB, представляющий собой имеющую смысл совокупность констант, переменных и функций, объединенных символами операций.
К основным типам выражений относятся арифметические и логические выражения.
Арифметическим выражением называют имеющую математический смысл совокупность констант, переменных и функций, объединенных символами (или функциями) арифметических операций:
>> x+sin(a)-sqrt(c+b);
Приоритет операций в арифметических выражениях устанавливается с помощью круглых скобок и старшинства операций внутри них, а именно: сначала вычисляются функции, затем возведение в степень, затем умножение и деление и в заключение — сложение и вычитание. Операции одного ранга выполняются слева направо.
Логическим выражением называют имеющую математический смысл совокупность арифметических выражений, объединенных символами (или функциями) операций отношения и логических операций:
>> (i==j)&((a+b)>sqrt(с));
Простейшим логическим выражением является отношение. Результатом вычисления логического выражения будет логическая константа 1 (true) или 0 (false):
>> sin(3)<0.5
ans =
1
Приоритет операций в логических выражениях устанавливается с помощью круглых скобок и старшинства операций внутри них, а именно: сначала вычисляются арифметические выражения, затем выполняются операции отношения и в заключение — логические операции. Операции одного ранга выполняются слева направо.
Символ операции — это символическое обозначение операции с операндами или операндом (объектами, с которыми выполняется операция).
Функция операции — это эквивалентное обозначение символа операции в виде функции MATLAB.
Большинство символов операций дублируется эквивалентными функциями, однако некоторые операции обозначаются только символом, другие — только функцией.
Основные символы и дублирующие их функции операции, сгруппированные по назначению, представлены в табл. 1.5—1.7.
Их полный список выводится по команде:
help ops
Таблица 1.5. Символы и функции арифметических операций
Символ
Функция
Операция
+
plus(X,Y)
Сложение матричное и поэлементное
-
minus(X,Y)
Вычитание матричное и поэлементное
*
mtimes(X,Y)
Матричное умножение
.*
times(X,Y)
Поэлементное умножение
^
mpower(X,c)
Матричное возведение в целую степень
.^
power(X,c)
Поэлементное возведение в степень
\
mldivide(X,Y)
Левое матричное деление
/
mrdivide(X,Y)
Правое матричное деление
.\
ldivide(X,Y)
Левое поэлементное деление
./
rdivide(X,Y)
Правое поэлементное деление
Таблица 1.6. Символы и функции операций отношения
Символ
Функция
Операция
==
eq(X,Y)
Равно
~=
ne(X,Y)
Не равно
<
lt(X,Y)
Меньше
>
gt(X,Y)
Больше
<=
le(X,Y)
Меньше либо равно
>=
ge(X,Y)
Больше либо равно
Таблица 1.7. Символы и функции логических операций
Символ
Функция
Операция
&
and(X,Y)
И (AND) — истина (true — логическая константа 1), если оба аргумента — истина
|
or(X,Y)
ИЛИ (OR) — истина, если хотя бы один аргумент — истина
~
not(X)
НЕ (NOT) — ложь (false — логическая константа 0), если аргумент — истина, и наоборот
В табл. 1.5—1.7 переменные X и Y — числовые матрицы, а c — скаляр.
• Тема 2. Операции с матрицами
Общая информация о разделе
В MATLAB любая переменная по умолчанию считается матрицей. Тип матрицы определяется типом ее элементов. В этой работе по умолчанию под матрицей будем подразумевать числовую матрицу.
Матрица задается своим именем и размером. Имя матрицы выбирается так же, как и имя простой переменной, а размер указывается произведением m ´ n, где m, n — число строк и столбцов соответственно.
Нижняя граница индексов матрицы равна единице.
Хранение матриц в оперативной памяти организовано по столбцам.
Вектор (вектор-строка) представлен матрицей размером 1 · n, вектор-столбец — матрицей размером n · 1, а скаляр — матрицей размером 1 · 1.
Ввод матриц рассматривался в теме 1.
Вектор, формирующий регулярную сетку, вводят в виде:
<начальное значение>:[<шаг>:]<конечное значение>
Шаг, равный единице, можно не указывать, условным признаком чего служат квадратные скобки.
Например:
>> y=0:pi/4:pi
y =
0 0.7854 1.5708 2.3562 3.1416
>> x=0:9
x =
0 1 2 3 4 5 6 7 8 9
Элементы матрицы могут быть представлены численными константами, простыми переменными, арифметическими выражениями и, в свою очередь, матрицами, например:
>> A=[5.3 sin(pi/4) 3+4*i]
A =
5.3000 0.7071 3.0000 + 4.0000i
>> a=[1 2;3 4], b=[4 5;6 7]
a =
1 2
3 4
b =
4 5
6 7
>> B=[a b]
B =
1 2 4 5
3 4 6 7
Обращение к элементу матрицы происходит по ее имени с указанием индексов строки и столбца в круглых скобках:
>> B(2,4)
ans =
7
По обращению B(i) матрица B воспринимается как вектор, элементы которого сформированы по столбцам:
>> B(5)
ans =
4
Размер матрицы — число строк m и столбцов n — определяется с помощью функции:
size(x)
Длина вектора определяется с помощью функции:
length(x)
Матрица нулевой размерности — пустая матрица — обозначается как A=[]:
>> A=[]; size(A)
ans =
0 0
Имя пустой матрицы сохраняется в Workspace и в дальнейшем может использоваться для формирования матрицы любого размера.
2.1. Функции генерации типовых матриц
В MATLAB можно генерировать большое разнообразие типовых матриц с помощью встроенных функций, список которых может быть выведен по команде:
help elmat
Некоторые из них приведены в табл. 2.1.
Таблица 2.1. Функции генерирования типовых матриц
Функция
Типовая матрица
zeros(M,N)
Нулевая матрица M×N
ones(M,N)
Матрица единиц M×N
eye(N)
Единичная матрица порядка N
rand(M,N)
Матрица M×N случайных чисел размера в диапазоне от 0 до 1, распределенных по равномерному закону
randn(M,N)
Матрица M×N случайных чисел, распределенных по нормальному закону с математическим ожиданием, равным 0, и дисперсией, равной 1
diag(V)
Вектор из диагональных элементов квадратной матрицы V
Диагональная матрица — все элементы равны нулю, кроме диагональных, равных вектору
toeplitz(r)
Матрица Теплица —квадратная матрица с одинаковыми элементами на диагоналях, равными соответствующим элементам первого столбца r
2.2. Преобразование матриц
К операциям преобразования матриц относятся:
• выделение из матрицы вектора-столбца:
A(:,N)
где N — номер столбца;
• выделение из матрицы вектора-строки:
A(M,:)
где M — номер строки;
• выделение подматрицы с указанием граничных индексов:
A(M1:M2,N1:N2)
где:
M1:M2 — номера строк с M1 по M2 включительно;
N1:N2 — номера столбцов с N1 по N2 включительно;
• выделение подматрицы с указанием начальных индексов:
A(M1:end;N1:end)
где:
M1:end — строки с M1 до последней включительно;
N1:end — столбцы с N1 до последнего включительно;
• растягивание матрицы в вектор-столбец:
A(:)
• горизонтальная конкатенация (объединение) подматриц (по столбцам):
A=[A1,A2,A3,...]
где A1,A2,A3,... — объединяемые подматрицы с одинаковым числом строк;
• вертикальная конкатенация подматриц (по строкам):
A=[A1;A2;A3;...]
где A1;A2;A3;... — объединяемые подматрицы с одинаковым числом столбцов;
• копирование матрицы, выполняемое с помощью функции:
repmat(A,m,n)
где:
A — исходная матрица как элемент новой матрицы;
m, n — число копий матрицы A по строкам и столбцам соответственно;
• копирование квадратных матриц, выполняемое с помощью функции:
repmat(A,n)
где:
A — исходная квадратная матрица как элемент новой квадратной матрицы;
n — число копий матрицы A по строкам и столбцам.
2.3. Поэлементные операции с матрицами
К поэлементным операциям с матрицами относятся арифметические операции и вычисление элементарных функций, аргументы которых — матрицы.
Признаком поэлементных арифметических операций является точка перед символом операции:
>> A=[1 2 3;2 -1 5;1 -1 -1], B=[-1 -2 -3;-4 -5 -6;-7 -8 -9]
A =
1 2 3
2 -1 5
1 -1 -1
B =
-1 -2 -3
-4 -5 -6
-7 -8 -9
>> A.*B
ans =
-1 -4 -9
-8 5 -30
-7 8 9
2.3. Поэлементные операции с матрицами
К поэлементным операциям с матрицами относятся арифметические операции и вычисление элементарных функций, аргументы которых — матрицы.
Признаком поэлементных арифметических операций является точка перед символом операции:
>> A=[1 2 3;2 -1 5;1 -1 -1], B=[-1 -2 -3;-4 -5 -6;-7 -8 -9]
A =
1 2 3
2 -1 5
1 -1 -1
B =
-1 -2 -3
-4 -5 -6
-7 -8 -9
>> A.*B
ans =
-1 -4 -9
-8 5 -30
-7 8 9
2.4.1. Арифметические операции с матрицами
К арифметическим операциям с матрицами относятся:
• сложение и вычитание матриц одинакового размера;
Суммой (разностью) матриц A и B размером m · n называется матрица C того же размера с элементами, равными сумме (разности) соответствующих элементов матриц A и B. Для операций сложения и вычитания матриц справедливы обычные законы арифметики:
A + B = B + A;
A – B = –B + A.
Пример сложения матриц:
>> A=[1 2 3;2 -1 5;1 -1 -1]; B=[-1 -2 -3;-4 -5 -6;-7 -8 -9];
>> C=A+B
C =
0 0 0
-2 -6 -1
-6 -9 -10
• умножение матрицы на скаляр (число), эквивалентное операции поэлементного умножения на скаляр;
• умножение матрицы на матрицу;
Операция умножения возможна только в том случае, если число столбцов матрицы A равно числу строк матрицы B.
Произведением матрицы A размером m · n на матрицу B размером n · p называется матрица C размером m · p, элемент i-й строки и k-го столбца которой равен сумме произведений соответственных элементов i-й строки матрицы A и k-го столбца матрицы B:
В общем случае умножение матриц не коммутативно:
AB ≠ BA.
Пример умножения матриц:
>> D=[1 2 5 7;3 8 0 3]
D =
1 2 5 7
3 8 0 3
>> size(D)
ans =
2 4
>> F=[1 2 0;3 8 5;0 3 4;9 7 1]
F =
1 2 0
3 8 5
0 3 4
9 7 1
>> size(F)
ans =
4 3
>> D*F
ans =
70 82 37
54 91 43
• возведение квадратной матрицы в целую степень q, эквивалентное умножению матрицы саму на себя q раз:
>> A=[1 2;4 5]
A =
1 2
4 5
>> B=A^3
B =
57 78
156 213
2.4.2. Транспонирование и эрмитово сопряжение матриц
Транспонирование матрицы — это операция замены каждой строки столбцом с тем же номером.
Эрмитово сопряжение матрицы — это операция транспонирования матрицы с одновременной заменой ее элементов на комплексно сопряженные.
Операции транспонирования и эрмитова сопряжения выполняются с помощью одного и того же символа " ' " (апостроф). Результат зависит от исходной матрицы — является она вещественной или комплексной. В первом случае получим транспонированную, а во втором — эрмитово сопряженную матрицу:
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> A'
ans =
1 4 7
2 5 8
3 6 9
>> C=[3+2i 4-5i;7-5i 1+i;2+2i 1-8i]
C =
3.0000 + 2.0000i 4.0000 - 5.0000i
7.0000 - 5.0000i 1.0000 + 1.0000i
2.0000 + 2.0000i 1.0000 - 8.0000i
>> C'
ans =
3.0000 - 2.0000i 7.0000 + 5.0000i 2.0000 - 2.0000i
4.0000 + 5.0000i 1.0000 - 1.0000i 1.0000 + 8.0000i
Транспонирование комплексной матрицы выполняется с помощью символа поэлементного транспонирования:
>> C.'
ans =
3.0000 + 2.0000i 7.0000 - 5.0000i 2.0000 + 2.0000i
4.0000 - 5.0000i 1.0000 + 1.0000i 1.0000 - 8.0000i
Матрицу с комплексно сопряженными элементами можно получить с помощью функции conj:
>> conj(C)
ans =
3.0000 - 2.0000i 4.0000 + 5.0000i
7.0000 + 5.0000i 1.0000 - 1.0000i
2.0000 - 2.0000i 1.0000 + 8.0000i
2.4.3. Обращение матриц
Матрица B называется обратной к матрице A, если произведение этих матриц дает единичную матрицу I:
AB = BA = I.
Матрица, обратная к матрице A, обозначается как A–1.
Операция обращения возможна только для квадратных матриц с определителем, не равным нулю.
Обратная матрица вычисляется с помощью функции:
inv(A)
а определитель матрицы — с помощью функции:
det(A)
Например:
>> A=[1 2;4 5]
A =
1 2
4 5
>> inv(A)
ans =
-1.6667 0.6667
1.3333 -0.3333
>> det(A)
ans =
-3
2.4.4. Матричное деление
В списке символов арифметических операций содержатся два символа матричного деления с квадратными матрицами A и B порядка n:
• левое матричное деление — A\B, эквивалентное алгебраической операции A–1B, т. е. inv(A)*B;
• правое матричное деление — A/B, эквивалентное алгебраической операции AB–1, т. е. A*inv(B).
Тема 3. Типы массивов
Общая информация о разделе
В MATLAB тип массива (тип данных) определяется типом его элементов. По умолчанию мы имели дело с матрицами, элементы которых представлены константами в форме с плавающей точкой (ПТ) с двойной точностью. Такие массивы относятся к типу double.
Типы числовых и нечисловых массивов представлены в табл. 3.1.
Таблица 3.1. Типы массивов в MATLAB
Символическое обозначение типа массива
Тип массива
Функция преобразования типа
Числовой:
double
вещественный двойной точности
double(X)
single
вещественный одинарной точности
single(X)
int8
целый 8-битовый со знаком
int8(X)
uint8
целый 8-битовый без знака
uint8(X)
int16
целый 16-битовый со знаком
int16(X)
uint16
целый 16-битовый без знака
uint16(X)
int32
целый 32-битовый со знаком
int32(X)
uint32
целый 32-битовый без знака
uint32(X)
int64
целый 64-битовый со знаком
int64(X)
uint64
целый 64-битовый без знака
uint64(X)
logical
Логический
logical(X)
character (char)
Символьный
num2str(X)
structure (struct)
Структура (массив записей)
—
cell
Массив ячеек
—
3.1. Матрицы числового и логического типов
Преобразование матриц числового типа double в матрицы других числовых типов выполняется с помощью специальных встроенных функций (см. табл. 3.1).
При обработке матриц числового целого типа необходимо иметь в виду, что с ними запрещено выполнение арифметических операций, в том числе вычисление большинства встроенных функций, но разрешено выполнение операций отношения и логических операций:
>> T = [159.7 125.7 -125.7];
>> A = int8(T);
A =
127 126 -126
>> B = uint8(T)
B =
160 126 0
>> C = [A> a=['Alla ' 'Woman ' 'Russian']
a =
Alla Woman Russian
• элементы столбца должны содержать одинаковое число символов, при этом пробел считается символом:
>> a=['Alla ';'Woman ';'Russian']
a =
Alla
Woman
Russian
Автоматическое добавление пробелов в элементах столбца с выравниванием по левому краю выполняется с помощью функции:
char('',''...)
где , ... — элементы столбца с произвольным количеством символов.
Одна функция char описывает один столбец матрицы:
>> a = char('Alla','Woman','Russian')
a =
Alla
Woman
Russian
Матрицу символьного типа удобно формировать по столбцам, используя для каждого из них свою функцию char и предусматривая необходимое количество пробелов для разделения столбцов:
>> x = [char('a','aa','aaa') char(' bb',' bbb',' b') ...
char(' cc',' ccc',' c')]
x =
a bb cc
aa bbb ccc
aaa b c
Преобразование в матрицу символьного типа выполняется с помощью функции num2str(x):
>> x = [5 7;-1 9]
x =
5 7
-1 9
>> y = num2str(x)
y =
5 7
-1 9
Здесь x — матрица типа double, а y — матрица символьного типа:
>> [size(x); size(y)]
ans =
2 2
2 5
3.3. Структуры (массивы записей)
Структура (массив записей — struct array) — это разновидность нечислового массива, предназначенного для описания M объектов N параметрами.
Для описания структуры потребуется ввести ряд новых терминов.
Поле (field) — имя параметра.
Значение поля — значение параметра.
Число полей равно количеству параметров N.
Запись — список полей, одинаковый для всех M объектов.
Значение записи — список полей с их значениями для одного объекта.
Число записей равно количеству объектов M.
Структура (массив записей) — это упорядоченная совокупность значений записей, объединенная одним именем.
Имя структуры выбирается так же, как имя простой переменной, а размер равен числу записей M.
Значение каждой i-й записи формируется отдельно по каждому n-му полю:
<имя массива>().<имя n-го поля> = <значение n-го поля>
Таким образом, для формирования M значений записей со списком из N полей, потребуется M · N операторов присваивания.
Сформируем структуру personal для описания трех объектов (M = 3) — трех членов кафедры — четырьмя параметрами (N = 4).
Запись включает в себя следующие поля:
surname — фамилия — скаляр символьного типа;
data — дата рождения (число, месяц, год) — вектор численного типа;
position — должность — скаляр символьного типа;
phd — наличие ученой степени — скаляр логического типа.
Сформируем значения структуры personal по каждому полю:
>> personal(1).surname = 'Иванов';
>> personal(2).surname = 'Петров';
>> personal(3).surname = 'Сидоров';
>> personal(1).data = [1 2 1949];
>> personal(2).data = [5 7 1975];
>> personal(3).data = [5 8 1956];
>> personal(1).position = 'профессор';
>> personal(2).position = 'доцент';
>> personal(3).position = 'зав.лаб.';
>> personal(1).phd = true;
>> personal(2).phd = true;
>> personal(3).phd = false;
Список полей выводится по имени структуры:
>> personal
personal =
1x3 struct array with fields:
surname
data
position
phd
Значение i-й записи выводится по имени структуры с указанием индекса в круглых скобках. Например, значение 2-й записи:
>> personal(2)
ans =
surname: 'Петров'
data: [5 7 1975]
position: 'доцент'
phd: 1
Значение поля в i-й записи выводится по имени структуры с указанием индекса в круглых скобках и имени поля. Например, значение поля surname первой записи:
>> personal(1).surname
ans =
Иванов
Значения поля во всех записях выводятся по имени структуры с указанием имени поля. Например, поля surname:
>> personal.surname
ans =
Иванов
ans =
Петров
ans =
Сидорова
Удаление поля выполняется с помощью функции:
<имя массива> = rmfield(<имя массива>,'<имя поля>')
Например, с поле data:
>> personal = rmfield(personal,'data')
personal =
1x3 struct array with fields:
surname
position
phd
При этом следует иметь в виду, что знак присваивания обязателен. Строка
>> rmfield(personal,'data')
приведёт к тому, что переменной ans будет присвоено значение структуры без поля data, однако в исходной структуре personal поле останется.
3.4. Массивы ячеек
Массив ячеек (cell array) — это наиболее сложный тип массива, элементами которого являются ячейки, представляющее собой массивы любой размерности, любого размера и типа.
Элементы массива ячеек указываются в фигурных скобках.
Сформируем квадратную матрицу ячеек 3×3:
>> A{1,1} = pi;
>> A{1,2} = [1 2 3;4 5 6];
>> A{1,3} = char('abs','angle');
>> A{2,1} = [ones(5,1)]';
>> A{2,2} = zeros(3,1);
>> A{2,3} = 'Alla';
>> A{3,1} = 7 ;
>> A{3,2} = rand(5,1);
>> A{3,3} = personal;
где personal — имя структуры, сформированной в разд. 3.3.
Массив ячеек может быть введён как обычная матрица, только вместо квадратных скобок используются фигурные:
>> B = {pi, personal; sin(0.5*pi) [1 2 3]};
Вывод элементов массива ячеек выполняется по его имени с указанием индексов:
>> A{1,2}
ans =
1 2 3
4 5 6
>> A{3,3}
ans =
1x3 struct array with fields:
surname
age
position
pd
С элементами массива ячеек можно выполнять операции, разрешенные для данного типа массива и с учетом согласования их размерностей и размеров, например:
>> B = sum(A{1,2})+A{1,1}
B =
8.1416 10.1416 12.1416
Графическое представление матрицы ячеек создается с помощью функции:
cellplot(A,'legend')
3.5. Определение типа массива
Для определения типа массива служит функция:
class(<имя массива>)
Например, для массива A, сформированного в разд. 3.4:
>> class(A)
ans =
cell
Тема 5. Режим программирования: script-файлы и function-файлы
Общая информация о разделе
Режим программирования предназначен для разработки программ пользователя в среде MATLAB.
Все программы пользователя, создаваемые в MATLAB, сохраняются на диске и имеют расширение m, поэтому их называют M-файлами.
Различают две разновидности M-файлов:
• script-файл (файл-сценарий);
• function-файл (файл-функция).
В M-файлах, независимо от их вида, должны соблюдаться следующие правила языка MATLAB:
• переменные не объявляются и не описываются;
• не используются метки;
• отсутствует оператор безусловного перехода типа "go to" (т. к. нет меток);
• не фиксируется (оператором или служебным словом) конец программы.
5.1. Создание и хранение M-файлов
Для создания M-файла и его сохранения в папке пользователя необходимо выполнить следующую последовательность действий:
1. В окне MATLAB выбрать в главном меню пункт File | New (Файл | Новый) и определить тип создаваемого M-файла.
2. В раскрывшемся окне Editor (Редактор) набрать текст M-файла построчно.
3. Для сохранения M-файла выбрать в главном меню команду File | Save as (Сохранить как).
4. В раскрывшемся окне Save as выбрать требуемую папку, присвоить имя новому M-файлу (без расширения) и нажать кнопку Save (Сохранить).
При открытом окне редактора после внесения изменений в M-файл необходимо его сохранить перед следующим запуском. Признаком несохраненного файла является символ " * " (звездочка) при его имени в окне редактора.
Создание новой папки выполняется с помощью контекстного меню в окне Current Folder.
Сохранение пути к требуемой папке выполняется по команде контекстного меню Add Path | Selected Folders (Добавить путь | Выбранные папки) или команде главного меню File | Set Path (Файл | Установить путь). Сохранение пути к папке позволять в текущей сессии запускать М-файл, не открывая данную папку.
При запуске M-файлов из текущей папки, путь к ней можно не сохранять.
5.2. Script-файлы
Script-файлом называют создаваемый пользователем M-файл, представляющий собой основную (управляющую) программу.
Термины "script-файл" и "программа" употребляют в тождественном смысле.
Программа состоит из операторов, записываемых построчно. По правилам хорошего стиля программирования рекомендуется:
• в начале программы ставить необязательный оператор-заголовок:
script
• после этого, во избежание конфликта переменных в Workspace и для очистки экрана, можно поставить команды clc и clear.
Имя script-файла выбирается по тем же правилам, что и имя переменной.
Пример простейшего script-файла S1:
script
clc
% Диапазон значений аргумента
x = 0:0.1:7;
% Вычисление значений синусоиды y
y = sin(x);
% Вычисление значений косинусоиды z
z = cos(x);
Обращение к script-файлу в режиме прямых вычислений (или в другом М-файле) осуществляется по его имени:
>> S1
После этого выполняются действия согласно программе.
Все переменные script-файла являются глобальными, т. е. они сохранятся в Workspace и доступны для использования в любых приложениях.
5.3. Function-файлы
Function-файлом называют создаваемый пользователем M-файл, представляющий собой внешнюю функцию (в отличие от встроенных функций MATLAB).
Термины "function-файл" и "внешняя функция" употребляют в тождественном смысле.
Описание function-файла начинается с оператора-заголовка function. Формат описания при нескольких выходных параметрах имеет вид:
function [Y1,Y2,...] = <имя функции>(X1,X2,...)
где:
<имя функции> — имя function-файла, выбираемое подобно имени переменной;
X1, X2,… — список формальных входных параметров;
Y1, Y2,… — список формальных выходных параметров.
При одном выходном параметре имеем короткий формат описания:
function Y = <имя функции>(X1,X2,...)
После заголовка следует тело функции — записанная построчно на языке MATLAB программа определения выходных параметров Y1, Y2,… по входным — X1, X2,….
Пример function-файла F1:
function [z,p] = F1(x,y)
% Вычисление суммы кубов z
z = x.^3+y.^3;
% Вычисление квадратного корня p
p = sqrt(abs(z));
Пример function-файла F2 с одним выходным параметром:
function z = F2(x,y)
% Вычисление суммы кубов z
z = x.^3+y.^3;
Обращение к внешней функции подобно обращению к стандартной функции MATLAB. При нескольких выходных параметрах:
[Y1факт,Y2факт,...] = <имя функции>(X1факт,X2факт,...)
где:
X1факт, X2факт,… — список фактических входных параметров;
Y1факт, Y2факт,… — список фактических выходных параметров.
Фактические значения входных параметров X1факт, X2факт,…, должны быть определены перед обращением к внешней функции.
Варианты обращения к function-файлу F1:
>> [d,c] = F1(2,3);
>> a = 2; b = 3;
>> [d,c] = F1(a,b);
При одном выходном параметре допускается короткий формат обращения:
<имя функции>(X1факт,X2факт,...)
Варианты обращения к function-файлу F2:
>> a = 2; b = 3;
>> d = F2(a,b)+sin(7+F2(5,7));
Разделение параметров function-файлов на формальные и фактические обусловлено тем, что формальные параметры являются локальными, т. е. они (вместе с внутренними переменными function-файла) загружаются в Workspace на время вычисления внешней функции и удаляются из Workspace по завершении вычислений. Фактические же параметры сохраняются в Workspace.
5.4. Оформление и вывод листинга M-файлов
При оформлении М-файлов рекомендуется соблюдать следующие правила:
• включать комментарии, поясняющие назначение переменных, выполняемые действия и т. п.;
• во избежание выводов нежелательных промежуточных результатов ставить точку с запятой.
Вывод листинга M-файла в окне Command Window выполняется по команде:
type <имя M-файла>
5.5. Вывод данных
Вывод данных в окно Command Window во время выполнения программы организуется с помощью функции disp, например:
>> disp(['x ' 'a ' 'b'])
x a b
Для вывода значения численной переменной одновременно с текстом удобно воспользоваться функцией num2str:
>> i = 5;
>> disp([' Коэффициент ',num2str(i),'-го ВАРИАНТА'])
Коэффициент 5-го ВАРИАНТА
5.6. Пауза и досрочное прерывание программы
Приостановить процесс выполнения программы на неопределенное (до нажатия любой клавиши) время можно по команде:
pause
Досрочное прерывание процесса выполнения программы в результате проверки тех или иных условий выполняется по команде
return
Рекомендуется предусмотреть вывод сообщения о причине досрочного прерывания.
Для принудительного снятия script-файла с выполнения следует на клавиатуре нажать комбинацию клавиш + .
Тема 6. Режим программирования: организация разветвлений и циклов
Для организации разветвлений и циклов в М-файлах используются операторы языка MATLAB, рассматриваемые в следующих разделах.
6.1. Операторы организации разветвлений
Имеется две основные разновидности разветвлений, реализуемые двумя операторами MATLAB:
1. Разветвление по условию выполняется с помощью оператора if. Формат оператора if с несколькими условиями имеет вид:
if <условие1>
<фрагмент1>
elseif <условие2>
<фрагмент2>
...
elseif <условиеN-1>
<фрагментN-1>
...
else
<фрагментN>
end
Действие оператора: если значение <условия1> "истинно", то управление передается <фрагменту1>, если значение <условия2> "истинно", то управление передается <фрагменту2> и т. д. вплоть до <условияN-1>; если значения всех условий "ложно", то управление передается <фрагментуN>; после этого оно передается части программы, следующей за end.
Все условия и фрагменты, кроме первых, не являются обязательными.
Пример использования оператора:
if i>j
a(i,j) = 1;
elseif i==j
a(i,j) = -1;
else
a(i,j) = 0;
end
2. Разветвление в зависимости от значения выражения (арифметического, символьного или логического) выполняется с помощью оператора switch следующего формата:
switch <выражение>
case <значение1>
<фрагмент1>
case <значение2>
<фрагмент2>
...
otherwise
<фрагментN>
end
Действие оператора: в зависимости от значения <выражения> управление передается соответствующему <фрагменту>; если значение выражения не равно ни одному из указанных, то управление передается <фрагментуN> (который может отсутствовать); после этого управление передается части программы, следующей за end.
Например:
function y=switchEx(a,b)
x = [pi/6 pi/8 pi/16];
switch (a+b)
case 0
y = sin(x);
case 1
y = cos(x);
otherwise
y = tan(x)
end
6.2. Операторы организации циклов
Имеются две основные разновидности циклов, реализуемые двумя операторами MATLAB:
1. Арифметический цикл с заранее известным (фиксированным) числом повторений организуется с помощью оператора for одного из следующих форматов:
• с простой переменной цикла:
for <переменная> = <нач.значение>:[<шаг>:]<кон.значение>
<тело цикла>
end
где:
<переменная> — имя простой переменной цикла;
<нач.значение>, <кон.значение>, <шаг> — соответственно начальное и конечное значения переменной цикла и шаг ее изменения; если шаг равен 1, то его можно не указывать;
<тело цикла> — повторяющийся фрагмент программы.
Действие оператора: при изменении значений <переменной> от <нач.значения> до <кон.значения> с заданным <шагом> повторяется <тело цикла>, каждый раз с новым значением <переменной>; после этого управление передается части программы, следующей за end.
Например (полужирным шрифтом выделены элементы, вычисляемые в цикле):
x = [2 3 5];
for i = 1:3
x(i) = i^2
end
x =
1 3 5
x =
1 4 5
x =
1 4 9
• с переменной цикла — вектором:
Например:
for <переменная> = <вектор>
<тело цикла>
end
где <вектор> — вектор, как правило, числовой.
Действие оператора: при изменении значений <переменной>, которой последовательно присваиваются значения элементов <вектора>, повторяется <тело цикла>, каждый раз с новым значением <переменной>; после этого управление передается части программы, следующей за end.
Например:
a = [-1 0 15];
for i = a
x = i+a
end
x =
-2 -1 14
x =
-1 0 15
x =
14 15 30
• с переменной цикла — матрицей:
for <переменная> = <матрица>
<тело цикла>
end
где <матрица> — матрица, как правило, числовая.
Действие оператора: при изменении значений <переменной>, которой последовательно присваиваются значения столбцов <матрицы>, повторяется <тело цикла>, каждый раз с новым значением <переменной>; после этого управление передается части программы, следующей за end.
Например:
a = [1 2 3;4 5 6;7 8 9];
for i = a
x = i'
end
x =
1 4 7
x =
2 5 8
x =
3 6 9
2. Итерационный цикл с заранее неизвестным (не фиксированным) числом повторений организуется с помощью оператора while следующего формата:
while <условие>
<тело цикла>
end
где <условие> — логическое выражение, хотя бы одна из переменных которого встречается в <теле цикла>.
Действие оператора: <тело цикла> повторяется до тех пор, пока <условие> "истинно", после чего управление передается части программы, следующей за end.
Пример использования оператора while для вычисления суммы геометрической прогрессии (s) с точностью до ε = 10–4 (e) с выводом после выхода из цикла значения суммы и погрешности вычисления (вектор [s e]):
n = 0; s0 = 0; e = 100;
while e>1e-4
s = s0+(-0.5).^n;
e = abs(s-s0);
s0 = s;
n = n+1;
end
[s e]
ans =
0.6667 0.0001
Принудительный выход из цикла реализуется оператором:
break
после которого управление передается части программы, следующей за end.