В этом разделе содержится введение в создание матриц и выполнение базовых матричных вычислений в MATLAB ® .
Среда MATLAB использует матрицу терминов для указания переменной, содержащей вещественные или комплексные числа, расположенные в двумерной сетке. В более общем случае массив представляет собой вектор, матрицу или более высокую размерную сетку чисел. Все массивы в MATLAB являются прямоугольными в том смысле, что векторы компонентов вдоль любого размера имеют одинаковую длину. Математические операции, определенные на матрицах, являются предметом линейной алгебры.
MATLAB имеет множество функций, создающих различные типы матриц. Например, можно создать симметричную матрицу с элементами на основе треугольника Паскаля:
A = pascal(3)
A =
1 1 1
1 2 3
1 3 6
Или можно создать несимметричную магическую квадратную матрицу, которая имеет равные суммы строк и столбцов:
B = magic(3)
B =
8 1 6
3 5 7
4 9 2
Другой пример - прямоугольная матрица случайных чисел 3 на 2. В этом случае первый вход в randi описывает диапазон возможных значений для целых чисел, а два вторых ввода описывают количество строк и столбцов.
C = randi(10,3,2)
C =
9 10
10 7
2 1Вектор-столбец является матрицей m-by-1, вектор-строка - матрицей 1 на n, а скаляр - матрицей 1 на 1. Для определения матрицы вручную используйте квадратные скобки. [ ] для обозначения начала и конца массива. В скобках используйте точку с запятой ; для обозначения конца строки. В случае скаляра (матрица 1 на 1) скобки не требуются. Например, эти операторы создают вектор столбца, вектор строки и скаляр:
u = [3; 1; 4] v = [2 0 -1] s = 7
u =
3
1
4
v =
2 0 -1
s =
7
Дополнительные сведения о создании и работе с матрицами см. в разделах Создание, конкатенация и расширение матриц.
Сложение и вычитание матриц и массивов выполняют поэлементно или поэлементно. Например, добавление A кому B а затем вычитание A после результата восстанавливается B:
X = A + B
X =
9 2 7
4 7 10
5 12 8Y = X - A
Y =
8 1 6
3 5 7
4 9 2Сложение и вычитание требуют, чтобы обе матрицы имели совместимые размеры. Если размеры несовместимы, возникает ошибка:
X = A + C
Error using + Matrix dimensions must agree.
Дополнительные сведения см. в разделе Операции с массивом и матрицей.
Вектор строки и вектор столбца одинаковой длины могут быть умножены в любом порядке. Результатом является скаляр, называемый внутренним произведением, или матрица, называемая внешним произведением:
u = [3; 1; 4]; v = [2 0 -1]; x = v*u
x =
2X = u*v
X =
6 0 -3
2 0 -1
8 0 -4Для вещественных матриц операция транспонирования взаимозаменяется aij и aji. Для комплексных матриц другое соображение состоит в том, следует ли брать комплексное сопряжение комплексных элементов в массиве, чтобы сформировать комплексное сопряженное транспонирование. MATLAB использует оператор апострофа (') для выполнения комплексного сопряженного транспонирования и оператора «точка-апостроф» (.') для транспонирования без конъюгации. Для матриц, содержащих все вещественные элементы, два оператора возвращают один и тот же результат.
Примерная матрица A = pascal(3) симметричен, поэтому A' равно A. Однако B = magic(3) не симметричен, поэтому B' имеет элементы, отраженные по основной диагонали:
B = magic(3)
B =
8 1 6
3 5 7
4 9 2X = B'
X =
8 3 4
1 5 9
6 7 2Для векторов транспозиция превращает вектор строки в вектор-столбец (и наоборот):
x = v'
x =
2
0
-1Если x и y оба вещественные векторы столбцов, затем произведение x*y не определен, но два продукта
x'*y
и
y'*x
получить тот же скалярный результат. Эта величина используется так часто, она имеет три различных названия: внутреннее произведение, скалярное произведение или скалярное произведение. Существует даже выделенная функция для точечных продуктов с именем dot.
Для комплексного вектора или матрицы: z, количество z' не только транспонирует вектор или матрицу, но и преобразует каждый комплексный элемент в его комплексное сопряжение. То есть изменяется знак мнимой части каждого комплексного элемента. Например, рассмотрим комплексную матрицу
z = [1+2i 7-3i 3+4i; 6-2i 9i 4+7i]
z = 1.0000 + 2.0000i 7.0000 - 3.0000i 3.0000 + 4.0000i 6.0000 - 2.0000i 0.0000 + 9.0000i 4.0000 + 7.0000i
Комплексное сопряженное транспонирование z является:
z'
ans = 1.0000 - 2.0000i 6.0000 + 2.0000i 7.0000 + 3.0000i 0.0000 - 9.0000i 3.0000 - 4.0000i 4.0000 - 7.0000i
Неконъюгированная комплексная транспозиция, где комплексная часть каждого элемента сохраняет свой знак, обозначается как z.':
z.'
ans = 1.0000 + 2.0000i 6.0000 - 2.0000i 7.0000 - 3.0000i 0.0000 + 9.0000i 3.0000 + 4.0000i 4.0000 + 7.0000i
Для комплексных векторов два скалярных произведения x'*y и y'*x являются комплексными сопряжениями друг друга, и скалярное произведение x'*x комплексного вектора с самим собой является реальным.
Умножение матриц определяют способом, отражающим состав лежащих в основе линейных преобразований и обеспечивающим компактное представление систем одновременных линейных уравнений. Матричное произведение C = AB определяется, когда размер столбца A равен размеру строки B, или когда один из них является скаляром. Если А представляет собой m-by-p и В представляет собой p-by-n, их продукт С представляет собой m-by-n. Фактически продукт можно определить с помощью MATLAB. for петли, colon нотация и векторные точечные произведения:
A = pascal(3); B = magic(3); m = 3; n = 3; for i = 1:m for j = 1:n C(i,j) = A(i,:)*B(:,j); end end
MATLAB использует звездочку для обозначения умножения матрицы, как в C = A*B. Матричное умножение не коммутативно; то есть A*B обычно не равно B*A:
X = A*B
X =
15 15 15
26 38 26
41 70 39Y = B*A
Y =
15 28 47
15 34 60
15 28 43Матрица может быть умножена справа на вектор-столбец, а слева на вектор-строку:
u = [3; 1; 4]; x = A*u
x =
8
17
30v = [2 0 -1]; y = v*B
y =
12 -7 10Умножение прямоугольной матрицы должно удовлетворять условиям совместимости размеров. С тех пор A 3 на 3 и C равно 3 на 2, их можно умножить, чтобы получить результат 3 на 2 (общая внутренняя размерность отменяется):
X = A*C
X =
24 17
47 42
79 77Однако умножение не работает в обратном порядке:
Y = C*A
Error using * Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches the number of rows in the second matrix. To perform elementwise multiplication, use '.*'.
Можно умножить все на скаляр:
s = 10; w = s*y
w = 120 -70 100
При умножении массива на скаляр этот скаляр неявно расширяется таким же образом, как и размер других входных данных. Это часто называют скалярным расширением.
Общепринятая математическая нотация использует заглавную букву I для обозначения тождественных матриц, матриц различных размеров с единицами на главной диагонали и нулями в другом месте. Эти матрицы имеют свойство, что AI = A и IA = A всякий раз, когда размеры совместимы.
Первоначальная версия MATLAB не могла использовать I для этой цели, потому что она не различала прописные и строчные буквы, и я уже служил в качестве подстрочного индекса и сложного блока. Так была введена игра слов на английском языке. Функция
eye(m,n)
возвращает прямоугольную единичную матрицу m-на-n и eye(n) возвращает квадратную единичную матрицу n-by-n.
Если матрица A является квадратным и несингулярным (ненулевой определитель), то уравнения AX = I и XA = I имеют одно и то же решение X. Это решение называется обратным A и обозначается как A-1. inv функция и выражение A^-1 оба вычисляют обратную матрицу.
A = pascal(3)
A =
1 1 1
1 2 3
1 3 6X = inv(A)
X =
3.0000 -3.0000 1.0000
-3.0000 5.0000 -2.0000
1.0000 -2.0000 1.0000A*X
ans =
1.0000 0 0
0.0000 1.0000 -0.0000
-0.0000 0.0000 1.0000Определитель, рассчитанный det является мерой масштабного коэффициента линейного преобразования, описанного матрицей. Когда определитель точно равен нулю, матрица является сингулярной и обратной не существует.
d = det(A)
d =
1Некоторые матрицы почти сингулярны, и несмотря на то, что существует обратная матрица, вычисление подвержено числовым ошибкам. cond функция вычисляет номер условия для инверсии, который дает указание на точность результатов от инверсии матрицы. Номер условия находится в диапазоне от 1 для численно стабильной матрицы Inf для сингулярной матрицы.
c = cond(A)
c = 61.9839
Редко требуется формировать явную обратную матрицу. Частое злоупотребление inv возникает при решении системы линейных уравнений Ax = b. Лучший способ решить это уравнение с точки зрения как времени выполнения, так и численной точности - использовать оператор обратной косой черты матрицы x = A\b. Посмотрите mldivide для получения дополнительной информации.
Продукт Кронекера, kron(X,Y), из двух матриц - большая матрица, сформированная из всех возможных произведений элементов X с теми из них, которые Y. Если X m-by-n и Y p-by-q, затем kron(X,Y) mp-by-nq. Элементы расположены так, что каждый элемент X умножается на всю матрицу Y:
[X(1,1)*Y X(1,2)*Y . . . X(1,n)*Y
. . .
X(m,1)*Y X(m,2)*Y . . . X(m,n)*Y]Произведение Кронекера часто используется с матрицами нулей и единиц для наращивания повторяющихся копий малых матриц. Например, если X - матрица 2 на 2
X = [1 2
3 4]и I = eye(2,2) является единичной матрицей 2 на 2, то:
kron(X,I)
ans =
1 0 2 0
0 1 0 2
3 0 4 0
0 3 0 4и
kron(I,X)
ans =
1 2 0 0
3 4 0 0
0 0 1 2
0 0 3 4В стороне от kron, некоторые другие функции, которые полезны для репликации массивов repmat, repelem, и blkdiag.
P-норма вектора x,
1р,
вычисляется с помощью norm(x,p). Эта операция определена для любого значения p > 1, но наиболее распространенными значениями p являются 1, 2 и ∞. Значение по умолчанию - p = 2, что соответствует евклидовой длине или векторной величине:
v = [2 0 -1]; [norm(v,1) norm(v) norm(v,inf)]
ans =
3.0000 2.2361 2.0000P-норма матрицы A,
,
может быть вычислено для p = 1, 2 и ∞ norm(A,p). Опять же, значение по умолчанию - p = 2:
A = pascal(3); [norm(A,1) norm(A) norm(A,inf)]
ans = 10.0000 7.8730 10.0000
В случаях, когда требуется вычислить норму каждой строки или столбца матрицы, можно использовать vecnorm:
vecnorm(A)
ans =
1.7321 3.7417 6.7823MATLAB поддерживает многопоточные вычисления для ряда линейных алгебр и числовых функций. Эти функции автоматически выполняются в нескольких потоках. Для более быстрого выполнения функции или выражения на нескольких ЦП должно быть выполнено несколько условий:
Функция выполняет операции, которые легко разделяются на разделы, которые выполняются одновременно. Эти разделы должны быть способны выполнять с незначительным взаимодействием между процессами. Они должны требовать нескольких последовательных операций.
Размер данных достаточно велик, чтобы любые преимущества параллельного выполнения перевешивали время, необходимое для разделения данных и управления отдельными потоками выполнения. Например, большинство функций ускоряется, только если массив содержит несколько тысяч элементов или более.
Операция не привязана к памяти; время обработки не зависит от времени доступа к памяти. Как правило, сложные функции ускоряют более чем простые функции.
Матрица умножается (X*Y) и мощность матрицы (X^p) операторы показывают значительное увеличение скорости на больших массивах двойной точности (порядка 10 000 элементов). Функции матричного анализа det, rcond, hess, и expm также показывают значительное увеличение скорости на больших массивах двойной точности.