Компания ALT Linux
Опубликован: 12.03.2015 | Доступ: свободный | Студентов: 582 / 64 | Длительность: 20:55:00
Лекция 5:

Задачи линейной алгебры

5.3 Действиям над матрицами

Начнём с операций, которые применимы к матрицам с точки зрения классической математики. Одним из базовых действий над матрицами является сложение "+" (вычитание "-–"). Здесь важно помнить, что суммируемые (вычитаемые) матрицы должны быть одной размерности. Результатом такой операции является матрица:

	
>>> Matr_1=[1 2 3; 4 5 6; 7 8 9 ]
Matr_1 =
	1  2  3
	4  5  6
	7  8  9
>>> Matr_2=[0 9 8; 7 6 5; 4 3 2 ]
Matr_2 =
	0  9  8
	7  6  5
	4  3  2
>>> Matr_3=Matr_1+Matr_2
Matr_3 =
    1  11  11
	11  11  11
	11  11  11
>>> Matr_4=Matr_2_Matr_1
Matr_4 =
	 -1  7  5
	 3  1  -1
	-3 -5 -7

Умножать на число (запись "*") можно любую матрицу, результатом так же будет матрица, каждый элемент которой будет помножен на заданное число:

	
>>> Matr_1=[1 2 3; 4 5 6; 7 8 9 ]; Matr_5=0.2_ Matr_1
Matr_5 =
	0.20000 0.40000 0.60000
	0.80000 1.00000 1.20000
	1.40000 1.60000 1.80000

Операция транспонирования (запись "’") меняет в заданной матрице строки на столбцы и так же применима к матрицам любой размерности.

	
>>> Matr_5 ’
ans =
	0.20000 0.80000 1.40000
	0.40000 1.00000 1.60000
	0.60000 1.20000 1.80000

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

	
>>> Matr_1=[1 2 3; 4 5 6; 7 8 9 ];
>>> Matr_2=[0 9 8; 7 6 5; 4 3 2 ];
>>> Matr_1* Matr_2
ans =
	26    30  24
	59    84  69
	92  138  114
>>> A=[-3 2; 0 1 ];
>>> B=[0 -2;3 -1;0 1 ];
>>> B*A
ans =
	 0  -2
	-9   5
	 0   1
% Некорректное умножение матриц
>>> A*B
error: operator *: nonconformant arguments (op1 is 2x2, op2 is 3x2)

Возведение матрицы в степень ("^") эквивалентно её умножению на себя указанное число раз. При этом целочисленный показатель степени может быть как положительным, так и отрицательным. Матрица в степени -1 называется обратная к данной. При возведении матрицы в положительную степень выполняется алгоритм умножения матрицы на себя указанное число раз. Возведение в отрицательную степень означает, что умножается на себя матрица, обратная к данной. Примеры возведения в степень:

	
>>> Matr_6=[3 2 1; 1 0 2; 4 1 3 ];
>>> Matr_6^3
ans =
	 92   40  59
	 65   29  40
	146   65  92
>>> Matr_6^( -1)
ans =
	-0.40000 -1.00000  0.80000
	1.00000   1.00000 -1.00000
	0.20000   1.00000 -0.40000
>>> Matr_6^( -3)
ans =
	 0.544000  1.240000 -0.888000
	-1.120000 -1.200000  1.240000
	-0.072000 -1.120000  0.544000

Для поэлементного преобразования матриц (листинг 5.2) можно применять операции, описанные ранее, как операции поэлементного преобразования векторов: добавление (вычитание) числа к каждому элементу матрицы ("+" или "—"), поэлементное умножение матриц (".*") одинакового размера, поэлементное деление матриц одинакового размера (прямое "./" и обратное ".\"), поэлементное возведение в степень (".^") и применение к каждому элементу матрицы математических функций.

	
>>> M=[3 2 1; 1 1 2; 4 1 3 ];
>>> N=[4 -2 -1;9 6 -2;-3 -1 2 ];
>>> 2* M
ans =
	6 4 2
	2 2 4
	8 2 6
>>> N/3
ans =
	1.33333  -0.66667 -0.33333
	3.00000  2.00000  -0.66667
	-1.00000 -0.33333 0.66667
>>> M. *N
ans =
	12  -4 -1
	9    6 -4
	-12 -1  6
>>> N. *M
ans =
	12  -4  -1
	 9   6  -4
	-12 -1   6
>>> M. /N
ans =
	0.75000  -1.00000 -1.00000
	0.11111  0.16667  -1.00000
	-1.33333 -1.00000 1.50000
>>> M. \N
ans =
	1.33333  -1.00000 -1.00000
	9.00000  6.00000  -1.00000
	-0.75000 -1.00000 0.66667
>>> M. ^ 0.2
ans =
	1.2457 1.1487 1.0000
	1.0000 1.0000 1.1487
	1.3195 1.0000 1.2457
>>> N.^M
ans =
64 4 -1
9 6 4
81 -1 8
Листинг 5.2. Примеры преобразования матриц

Рассмотрим работу с матрицами на следующем примере.

Пример 5.1. Вычислить математическое выражение (2A+\frac{1}{3}B^T)^2-AB^{-1} для заданных значений A и B.

Решение задачи показано в листинге 5.3.

	
>>> A=[-3 2 0; 0 1 2; 5 3 1 ]; B=[0 -2 1; 3 -1 1; 0 1 1 ];
>>> (2*A+1/3*B’ ) ^2-A*B^( -1)
ans =
	32.667 -20.667 20.667
	47.333  26.889 15.667
	-40.333 75.333 31.778
Листинг 5.3. Вычисление математического выражения (пример 5.1).

Довольно необычное, с точки зрения математики, применение нашлось для операторов "/" и "\". Символ "/" используется для операции называемой делением матриц слева направо, соответственно знак "\" применяется для деления матриц справа налево. Операция B/A эквивалентна выражению B\cdot A^{-1}, её удобно использовать для решения матричных уравнений вида X\cdot A=B:

	
>>> A=[2 -1 2; -1 2 -2;2 -2 5 ]
A =
	2  -1  2
	-1 2  -2
	2  -2  5
>>> B=[7 0 0; 0 1 0; 0 0 1 ]
B =
	7 0 0
	0 1 0
	0 0 1
>>> X=B/A
X =
	6.00000  1.00000  -2.00000
	0.14286  0.85714   0.28571
	-0.28571  0.28571 0.42857
>>> X*A - B % Проверка X · A - B = 0
ans =
	-8.8818e-16  4.4409e-16  6.6613e-16
	0.0000e+00  2.2204e-16  -2.2204e-16
	0.0000e+00  5.5511e-17  -2.2204e-16

Соответственно A\B эквивалентно A^1\cdot B и применяется для решения уравнения A\cdot X = B:

	
>>> A=[2 -1 2; -1 2 -2;2 -2 5 ]; B=[7 0 0; 0 1 0; 0 0 1 ]; X=A\B
X =
	6.00000  0.14286  -0.28571
	1.00000  0.85714  0.28571
	-2.00000 0.28571 0.42857
>>> A*X - B % Проверка A · X - B = 0
ans =
	-8.8818e-16  0.0000e+00 0.0000e+00
	4.4409e-16  2.2204e-16  5.5511e-17
	6.6613e-16 -2.2204e -16  -2.2204e-16

Если предположить, что x и b это векторы, а A — матрица, то получим запись системы линейных алгебраических уравнений в матричной форме Ax = b. Это значит, что оператор "\" можно применять для решения линейных систем:

	
>>> A=[1 2; 1 1 ]; b = [ 7; 6 ];
>>> x=A\b
x =
	5
	1
>>> A*x % Проверка Ax = b
ans =
	7
	6
Алексей Игнатьев
Алексей Игнатьев

Возможна ли разработка приложения на Octave с GUI?

Евгений Ветчанин
Евгений Ветчанин

Добрый день. Я самостоятельно изучил курс "Введение в Octave" и хочу получить сертификат. Что нужно сднлать для этого? Нужно ли записаться на персональное обучение с тьютором или достаточно перевести деньги?