Этот раздел содержит введение в создание матриц и выполнение базовых матричных вычислений в 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-by- 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 8
Y = X - A
Y = 8 1 6 3 5 7 4 9 2
Сложение и вычитание требуют, чтобы обе матрицы имели совместимые размерности. Если размерности несовместимы, возникает ошибка:
X = A + C
Error using + Matrix dimensions must agree.
Для получения дополнительной информации смотрите Array vs. Матричные операции.
Векторы-строки и вектор-столбец одинаковой длины могут быть умножены в любом порядке. Результатом является либо скаляр, называемый скалярным произведением, либо матрица, называемая векторным произведением:
u = [3; 1; 4]; v = [2 0 -1]; x = v*u
x = 2
X = u*v
X = 6 0 -3 2 0 -1 8 0 -4
Для реальных матриц, перемещать <reservedrangesplaceholder6> <reservedrangesplaceholder5> <reservedrangesplaceholder4> обменов операции и <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1>. Для сложных матриц другим фактором является то, принимать ли комплексный сопряженный комплексных элементов в массиве, чтобы сформировать комплексное сопряженное транспонирование. MATLAB использует оператор апострофа ('
) для выполнения комплексного сопряженного транспонирования и оператора «точка-апостроф» (.'
) транспонировать без сопряжения. Для матриц, содержащих все действительные элементы, два оператора возвращают один и тот же результат.
Матрица примеров A = pascal(3)
симметрично, так A'
равно A
. Однако B = magic(3)
не симметрична, поэтому B'
имеет элементы, отраженные по основной диагонали:
B = magic(3)
B = 8 1 6 3 5 7 4 9 2
X = 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, или когда один из них является скаляром. Если A m -by- p и B p -by- n, то их C продукта m -by- n. Продукт может быть фактически определен с помощью MATLABfor
циклы, 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 39
Y = B*A
Y = 15 28 47 15 34 60 15 28 43
Матрица может быть умножена справа на вектор-столбец, а слева на вектор-строку:
u = [3; 1; 4]; x = A*u
x = 8 17 30
v = [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 заглавных букв для обозначения единичных матриц, матриц различных размеров с таковыми на основной диагонали и нулями в другом месте. Эти матрицы имеют свойство, которое A I = A и I A = A всякий раз, когда размерности совместимы.
Исходная версия MATLAB не могла использовать I для этой цели, потому что она не различала заглавные и строчные буквы и i уже служила нижним индексом и сложным модулем. Так был введен английский язык каламбура. Функция
eye(m,n)
возвращает m -by n прямоугольную единичную матрицу и eye(n)
возвращает n -by n квадратную единичную матрицу.
Если матрица A
квадратное и неисключительный (отличный от нуля определяющий), тогда у уравнений <reservedrangesplaceholder7> <reservedrangesplaceholder6> = I и <reservedrangesplaceholder4> <reservedrangesplaceholder3> = I есть то же решение X. Это решение называется обратной A
и обозначается A-1. inv
функцию и выражение A^-1
оба вычисляют обратную матрицу.
A = pascal(3)
A = 1 1 1 1 2 3 1 3 6
X = inv(A)
X = 3.0000 -3.0000 1.0000 -3.0000 5.0000 -2.0000 1.0000 -2.0000 1.0000
A*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
возникает при решении системы линейных уравнений A x = b. Лучший способ решить это уравнение с точки зрения как времени выполнения, так и числовой точности - использовать матричный оператор обратной косой черты x = A\b
. Посмотрите mldivide
для получения дополнительной информации.
Продукт Kronecker, 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 -norm векторного x,
вычисляется по 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.0000
p -norm матричной 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.7823
MATLAB поддерживает многопоточные расчеты для ряда линейных алгебр и поэлементных числовых функций. Эти функции автоматически выполняются в нескольких потоках. Чтобы функция или выражение выполнялись быстрее на нескольких центральных процессорах, ряд условий должен быть true:
Функция выполняет операции, которые легко разделяются на разделы, которые выполняются одновременно. Эти разделы должны быть способны выполняться при ограниченной коммуникации между процессами. Они должны потребовать мало последовательных операций.
Размер данных достаточно велик, так что любые преимущества параллельного выполнения перевешивают время, необходимое для разбиения данных и управления отдельными потоками выполнения. Для примера большинство функций ускоряются только тогда, когда массив содержит несколько тысяч элементов и более.
Операция не связана с памятью; время вычислений не определяется временем доступа к памяти. Как общее правило, сложные функции ускоряют больше, чем простые функции.
Матрица умножает (X*Y)
и матричная степень (X^p)
операторы показывают значительное увеличение скорости на больших массивах двойной точности (порядка 10 000 элементов). Функции матричного анализа det
, rcond
, hess
, и expm
также показывают значительное увеличение скорости на больших массивах двойной точности.