1.5. Операции с матрицами
MATLAB ориентирован в первую очередь на работу с матрицами, поэтому среда разработки предоставляет пользователю довольно обширную библиотеку операций и функций для работы с ними. Некоторые матричные операторы приведены в таблице 1.3.
Таблица 1.3
+ | Сложение матриц |
- | Вычитание матриц |
* | Перемножение матриц |
.* | Перемножение элементов матриц |
./ | Деление элементов матриц |
.\ | Поэлементное обратное деление элементов матриц (деление правого операнда на левый) |
.' | Транспонирование |
' | Расчет комплексно-сопряженной (эрмитово-сопряженной) матрицы. Транспонирование матрицы и применение комплексного сопряжения к ее элементам. |
В следующем примере продемонстрирована работа перечисленных операторов:
>> a = [1 0 -2 10 13];
>> b = [-5 1 -1 2 7];
>> a + b
ans =
-4 1 -3 12 20
>> a + 5
ans =
6 5 3 15 18
>> a - b
ans =
6 -1 -1 8 6
>> a.'
ans =
1
0
-2
10
13
>> a.' * b
ans =
-5 1 -1 2 7
0 0 0 0 0
10 -2 2 -4 -14
-50 10 -10 20 70
-65 13 -13 26 91
>> a * b.'
ans =
108
>> a .* b
ans =
-5 0 2 20 91
>> a ./ b
ans =
-0.2000 0 2.0000 5.0000 1.8571
>> a .\ b
ans =
-5.0000 Inf 0.5000 0.2000 0.5385
>> c = [1 + 5i, -5 - 2i
1i, 10 + 3i]
c =
1.0000 + 5.0000i -5.0000 - 2.0000i
0 + 1.0000i 10.0000 + 3.0000i
>> c'
ans =
1.0000 - 5.0000i 0 - 1.0000i
-5.0000 + 2.0000i 10.0000 - 3.0000i
В таблице 1.4 приведены некоторые стандартные функции для работы с матрицами.
Таблица 1.4
sum | Расчет суммы элементов векторов. Расчет суммы элементов в каждом столбце или строке матрицы. |
prod | Расчет произведения элементов векторов. Расчет произведения элементов в каждом столбце или строке матрицы. |
mean | Расчет среднего значения для строк или столбцов матрицы. |
min / max | Нахождение наименьших / наибольших элементов в строках или столбцах матрицы. |
Функция sum предназначена для расчета суммы элементов матрицы. Ее поведение зависит от переданных параметров. Если в функцию sum передать матрицу-строку или матрицу-столбец, то функция sum вернет сумму всех элементов:
>> x = [1 0 -2 10 13];
>> sum (x)
ans =
22
>> sum (x.')
ans =
22
Если функции sum передать двумерную матрицу размерностью M x N в качестве единственного параметра, то она вернет матрицу размерностью 1 x N, каждый элемент которой равен сумме всех элементов в соответствующем столбце:
>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]
a =
1 3 10 -5
2 4 6 8
-10 -12 0 14
>> sum (a)
ans =
-7 -5 16 17
Функция sum может принимать в качестве второго аргумента целое число, которое определяет направление суммирования, то есть по строкам или столбцам необходимо проводить суммирование. Если второй аргумент равен 1, то функция sum работает так же, как и без второго параметра.
>> sum (a, 1)
ans =
-7 -5 16 17
Если второй аргумент равен 2, то суммирование происходит не по столбцам, а по строкам, и для матрицы размерностью M x N результатом будет матрица размерностью M x 1:
>> sum (a, 2)
ans =
9
20
-8
Для вычисления суммы всех элементов двумерной матрицы можно вызвать функцию sum, передав ей результат работы другой функции sum, которой, в свою очередь, передается двумерная матрица:
>> sum (sum (a))
ans =
21
Функции prod работает аналогично функции sum с той лишь разницей, что вместо суммы вычисляется произведение.
>> x = [1 2 -2 10 13];
>> prod (x)
ans =
-520
>> prod (x.')
ans =
-520
>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]
a =
1 3 10 -5
2 4 6 8
-10 -12 0 14
>> prod (a)
ans =
-20 -144 0 -560
>> prod (a, 1)
ans =
-20 -144 0 -560
>> prod (a, 2)
ans =
-150
384
0
>> prod (prod (a) )
ans =
0
Аналогично работает и функция mean, которая возвращает среднее арифметическое для элементов строк или столбцов матрицы:
>> x = [1 2 -2 10 13];
>> mean (x)
ans =
4.8000
>> mean (x.')
ans =
4.8000
>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]
a =
1 3 10 -5
2 4 6 8
-10 -12 0 14
>> mean (a)
ans =
-2.3333 -1.6667 5.3333 5.6667
>> mean (a, 1)
ans =
-2.3333 -1.6667 5.3333 5.6667
>> mean (a, 2)
ans =
2.2500
5.0000
-2.0000
>> mean (mean (a) )
ans =
1.7500
Подобным образом работают и функции min и max, в том числе для нахождения минимального и максимального элементов в столбцах соответственно.
>> x = [1 2 -2 10 13];
>> min (x)
ans =
-2
>> max (x)
ans =
13
>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]
a =
1 3 10 -5
2 4 6 8
-10 -12 0 14
>> min (a)
ans =
-10 -12 0 -5
Для нахождения минимальных (максимальных) элементов в строках матриц используется несколько другая запись:
C = min (A, [], dim)
C = max (A, [], dim)
Здесь A - матрица, в которой нужно найти минимальные (максимальные) элементы, а dim - номер измерения матрицы, в котором нужно искать минимальные (максимальные) значения. Если dim = 1, то такие значения будут искаться в столбцах, что равносильно вызову функций min или max без параметров. Если dim = 2, то минимальные (максимальные) элементы ищутся в каждой строке матрицы.
>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]
a =
1 3 10 -5
2 4 6 8
-10 -12 0 14
>> min (a, [], 2)
ans =
-5
2
-12
Также возможно вызывать функции min / max, передавая им в качестве аргументов две матрицы A и B одинаковой размерности M x N. В этом случае результатом вызова этих функций будет матрица C, размерностью M x N, элементы которой будут равны:
для функции min: C(i, j) = min (A(i, j), B(i, j));
для функции max: C(i, j) = max (A(i, j), B(i, j));
для всех i = 1,... , M, j = 1,... , N. Такое использование функций min / max показано в следующем примере:
>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]
a =
1 3 10 -5
2 4 6 8
-10 -12 0 14
>> b = [2 1 5 -5; -2 -4 10 11; -5 10 2 7]
b =
2 1 5 -5
-2 -4 10 11
-5 10 2 7
>> min (a, b)
ans =
1 1 5 -5
-2 -4 6 8
-10 -12 0 7
>> max (a, b)
ans =
2 3 10 -5
2 4 10 11
-5 10 2 14
Если в качестве второго аргумента функциям min / max передать действительно число (что равносильно матрице 1 x 1), то это равносильно тому, что в качестве второго аргумента была бы передана матрица, размерность которой совпадает с матрицей, переданной в качестве первого аргумента, элементы которой равны переданному числу:
>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]
a =
1 3 10 -5
2 4 6 8
-10 -12 0 14
>> min (a, 2)
ans =
1 2 2 -5
2 2 2 2
-10 -12 0 2
>> max (a, 5)
ans =
5 5 10 5
5 5 6 8
5 5 5 14
Функции min / max, имеют еще один способ вызова, когда эти функции возвращают два параметра. В этом случае в качестве первого параметра будет возвращено то же значение, что и при описанных выше способах вызова, а в качестве второго значения будет возвращена матрица, содержащая номера строк или столбцов, содержащие соответствующие элементы из первой матрицы. Такой вызов функции min показан в следующем примере:
>> a = [1 3 10 -5; 2 4 6 8; -10 -12 0 14]
a =
1 3 10 -5
2 4 6 8
-10 -12 0 14
>> [c, indexes] = min (a)
c =
-10 -12 0 -5
indexes =
3 3 3 1
>> [c, indexes] = min (a, [], 2)
c =
-5
2
-12
indexes =
4
1
2
Описание функций min и max показывает, что в MATLAB одна и та же функция может быть вызвана различными способами или, с другой стороны, может быть создано несколько разных функций с одинаковыми именами, но различными входными или выходными параметрами.
Математические функции, встроенные в MATLAB (такие как cos, sin, sqrt и т.д.) могут принимать в качестве аргумента матрицы (как уже говорилось, числа в MATLAB являются частным случаем матриц размерностью 1 x 1), в результате выполнения таких операций возвращается матрица, того же размера, что и переданный аргумент, а элементы этой матрицы представляют собой элементы первой матрицы, к которым был применена соответствующая функция. Например:
>> x = [0, pi / 3, pi / 2, -pi / 6];
>> cos (x)
ans =
1.0000 0.5000 0.0000 0.8660
>> y = [1 -1 -2 5];
>> abs (y)
ans =
1 1 2 5
>> exp (y)
ans =
2.7183 0.3679 0.1353 148.4132
- Оглавление
- Предисловие
- Раздел 1. Основные сведения о среде программирования «matlab»
- Глава 1. Вычисления в командном режиме
- 1.1. Простейшие математические операции в matlab
- 1.2. Переменные
- 1.3. Создание матриц
- 1.4. Доступ к элементам матриц
- 1.5. Операции с матрицами
- 1.6. Ввод, вывод и работа со строками
- Глава 2. Построение графиков в matlab
- 2.1. Построение графика в виде двумерной линии
- 2.2. Оформление графиков
- 2.3. Построение трехмерных графиков
- 2.4. Построение линий уровня
- 2.5. Построение векторного поля
- 2.6. Отображение нескольких графиков в одном окне
- Глава 3. Скрипты в matlab и управляющие конструкции
- 3.1. Создание и выполнение скриптов в matlab
- 3.2. Оператор for
- 3.3. Логические операции
- 3.4. Оператор if / elseif / else
- 3.5. Оператор while
- 3.6. Операторы break / continue
- 3.7. Оператор switch
- 3.8. Создание функций
- Раздел 2. Краткие теоретические сведения и задания Тема 1. Векторный анализ
- 1.1. Элементы векторного анализа
- Задания
- Тема 2. Уравнения Максвелла (произвольная и гармоническая временная зависимость, статические, стационарные и квазистационарные поля)
- 2.1. Система уравнений электродинамики – уравнения Максвелла
- 2.2. Граничные условия. Принцип эквивалентности
- Задания
- Тема 3. Плоские волны
- 3.1. Явление дисперсии и групповая скорость
- Задания
- Тема 4. Граничные задачи, уравнения и методы
- 4.1. К классификации электромагнитных явлений
- Задания
- 4.2. Метод конечных разностей
- 4.2.1. Конечно-разностная аппроксимация
- 4.2.2. Конечно-разностная аппроксимация уравнений Лапласа и Пуассона
- 4.2.3. Конечно-разностная аппроксимация для граничных узлов
- Задания
- Литература