Простейшие операции с матрицами

Задание матриц

Выражения

Формируются по обычным правилам, принятым в программировании на языках высокого уровня.

 

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

 

1. Нулевая матрица размера ­задается функцией zeros(n,m), например:

 

>> Z = zeros(2,4)

Z =

0 0 0 0

0 0 0 0

 

2. Единичная матрица размера ­задается функцией eye(n,n), например:

 

>> I = eye(2,2)

I =

1 0

0 1

 

3. Для задания матрицы размера , все компоненты которой равны единице, служит функция ones(n,m), например:

 

>> N = ones(2,2)

I =

1 1

1 1

 

4. Матрица размера , со случайными компонентами, которые равномерно распределены на отрезке [0,1], задается функцией rand(n,m), например:

 

>> R=rand(2,3)

R =

0.4565 0.8214 0.6154

0.0185 0.4447 0.7919

 

5. Матрица – магический квадрат размера – задается функцией magic(n), например:

 

>> M=magic(3)

M =

8 1 6

3 5 7

4 9 22

 

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

Если надо задать вектор из трех элементов, то их значения следует перечислить в квадратных скобках, разделяя пробелами или запятыми. Например, команда

 

V=[1 2 3];

 

задает вектор-строку V, имеющую три элемента со значениями 1, 2 и 3.

 

Задание матрицы требует указания нескольких строк. Для разделения строк используется точка с запятой (;). Например, команда

 

>> M=[1 2 3; 4 5 6; 7 8 9]

M =

1 2 3

4 5 6

7 8 9

 

определяет матрицу 3х3.

 

Совершенно аналогично с использованием символа разделения строк задаются блочные матрицы. Например, сформируем блочную матрицу , где – магический квадрат размера . Для этого подадим следующие команды:

 

>> A=magic(3)

A =

8 1 6

3 5 7

4 9 2

>> E=eye(3,3)

E =

1 0 0

0 1 0

0 0 1

>> Z=zeros(3)

Z =

0 0 0

0 0 0

0 0 0

>> B=[A E; Z A']

B =

8 1 6 1 0 0

3 5 7 0 1 0

4 9 2 0 0 1

0 0 0 8 3 4

0 0 0 1 5 9

0 0 0 6 7 2

 

Для указания отдельной компоненты вектора или матрицы используются выражения вида V(i) или M(i, j). Если для матрицы указать только один индекс, то в результате будет получен соответствующий элемент блочного вектора, составленного из столбцов данной матрицы. Например,

 

>> M=[1 2 3; 4 5 6; 7 8 9]

M =

1 2 3

4 5 6

7 8 9

>> M(2)

ans =

>> M(6)

ans =

>> M(8)

ans =

Оператор «:».

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

В частности запись 1:10 является вектором-строкой, содержащей целые числа от 1 до 10: 1 2 3 4 5 6 7 8 9 10. Для формирования аналогичного вектора с шагом, отличным от единицы, применяют, например, такую запись: 5:-2:-3, что эквивалентно вектору 5 3 1 -1 -3.

 

Рассматриваемый оператор особенно удобно использовать для выделения отдельных блоков из состава заданной матрицы. В частности, запись A(1:6,j) выделяет первые шесть элементов из j-го столбца матрицы A, запись A(1:2,1:3) выделяет верхний блок размера 2×3, а запись A(4,:) – четвёртую строку этой матрицы. Например,

 

>> A=rand(5,5)

A =

0.9501 0.7621 0.6154 0.4057 0.0579

0.2311 0.4565 0.7919 0.9355 0.3529

0.6068 0.0185 0.9218 0.9169 0.8132

0.4860 0.8214 0.7382 0.4103 0.0099

0.8913 0.4447 0.1763 0.8936 0.1389

 

>> B=A(1:3,1:3)

 

B =

0.9501 0.7621 0.6154

0.2311 0.4565 0.7919

0.6068 0.0185 0.9218

>> C=B(:,3)

C =

0.6154

0.7919

0.9218

 

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

 

>> M(2,:)=[]

M =

1 2 3

7 8 9

 

А теперь, удалим второй столбец:

>> M(:,2)=[]

M =

1 3

7 9

 

Операция транспонирования матрицы выполняется с использованием символа «'»:

 

>> A=rand(2)

 

A =

0.2028 0.6038

0.1987 0.2722

 

>> B=A'

 

B =

0.2028 0.1987

0.6038 0.2722

Операции сложения, умножения и обращения матриц выполняются в соответствии с обычными правилами линейной алгебры в естественной форме записи.

Например,

 

>> A=rand(2,2)

A =

0.9501 0.6068

0.2311 0.4860

>> B=rand(2,2)

B =

0.8913 0.4565

0.7621 0.0185

>> C=A+B

C =

1.8414 1.0633

0.9932 0.5045

>> D=A*B

D =

1.3093 0.4449

0.5764 0.1145

 

Складывать и вычитать можно только матрицы одинаковой размерности. При перемножении двух матриц их размерности должны быть согласованы: число столбцов первого сомножителя должно быть равно числу строк второго.

Обращать можно только не особые (невырожденные) матрицы, определитель которых отличен от нуля. Для вычисления определителя используется команда (функция) det:

 

>> det(D)

ans =

-0.1065

 

Операция обращения матрицы выполняется с помощью возведения в -1-ю степень или с помощью команды inv:

 

>> A^-1

ans =

1.5117 -1.8876

-0.7190 2.9555

>> inv(A)

ans =

1.5117 -1.8876

-0.7190 2.9555

 

Поиск собственных значений и собственных векторов.Эта операция нами будет очень часто использоваться в дальнейшем, в особенности – в части поиска собственных значений матриц, которые в значительной мере определяют свойства линейных динамических объектов.

 

Для выполнения операции используется функция eig, применяемая в нескольких вариантах, среди которых рассмотрим два простейших.

 

1. Поиск только собственных значений квадратной матрицы A выполняется командой e=eig(A), где e – вектор с комплексными компонентами, содержащий искомые значения, например,

 

>> A=diag([1 2 3 4 5])

A =

1 0 0 0 0

0 2 0 0 0

0 0 3 0 0

0 0 0 4 0

0 0 0 0 5

>> e=eig(A)

e =

 

Выполним другой пример:

 

>> A = rand(5);

>> e=eig(A)

e =

2.8043

-0.0490 + 0.5617i

-0.0490 - 0.5617i

0.2093

-0.0381

 

2. Одновременный поиск собственных значений и собственных векторов квадратной матрицы A выполняется с помощью команды [V,D]=eig(A), где D –диагональная матрица, содержащая собственные значения, а V – матрица, столбцами которой являются соответствующие им собственные векторы. При этом, по определению, выполняется равенство AV=VD, например,

 

>> A=rand(2)

A =

0.3795 0.5028

0.8318 0.7095

>> [V,D]=eig(A)

V =

-0.7074 -0.5170

0.7068 -0.8560

D =

-0.1230 0

0 1.2119

>> A*V

ans =

0.0870 -0.6266

-0.0869 -1.0373

>> V*D

ans =

0.0870 -0.6266

-0.0869 -1.0373

 

Заметим, что собственные векторы выдаются в нормированном виде – их евклидовы нормы – единичные:

 

>> norm(V(:,2))

ans =

 

При выводе на экран собственных значений матриц, имеющих большие размерности, желательно выполнить их сортировку. Это можно сделать с помощью функции sort(e), которая располагает компоненты комплексного вектора eв порядке возрастания их модулей. Эту функцию удобно совмещать с функцией eig, подавая для вычисления собственных значений команду d=sort(eig(A)), например

 

>> A=rand(10);

>> e=sort(eig(A))

e =

-0.0474 - 0.1567i

-0.0474 + 0.1567i

0.2441

0.2689 - 0.4137i

0.2689 + 0.4137i

-0.3356 - 0.5869i

-0.3356 + 0.5869i

-0.4176 - 0.7707i

-0.4176 + 0.7707i

4.9579

 

Подробную справку по операциям с матрицами можно получить, подавая команды help elmatи help matfun.

 

Задание для самостоятельной работы:

 

1. Задать в рабочем пространстве две случайные матрицы размером 3´2 и 2´3. Из полученной матрицы выделить верхний диагональный блок размера 2´2. Найти определитель произведения двух матриц.

2. Задать случайный вектор-столбец aи случайную вектор-строку b.Найти два произведения abи ba. Найти определитель первого из них.

3. Задать произвольную матрицу A размера 5´3 и произвольную матрицу Bразмера 2´3. Сформировать блочную матрицу . Выделить её пятый столбец.

4. Сформировать случайную матрицу размера 6´3. Выделить её верхний диагональный блок размера 3´3 и найти его определитель. Если определитель отличен от нуля, обратить найденный блок. Доказать, что обращение осуществлено правильно.

5. Сформировать случайную матрицу размера 3´5. Выделить её верхний диагональный блок размера 3´3 и найти его определитель. Изменить первую строку так, чтобы определитель заведомо обратился в нуль. Проверить величину определителя

6. Построить случайную квадратную матрицу размера 20´20 и найти её собственные значения, отсортировать их и записать в вектор b.

7. Задать произвольную матрицу размером 4´4. Найти все её собственные значения и соответствующие им собственные векторы. Проверить все найденные пары на соответствие.