Введение в Octave

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

Разбить на страницы
Показывать лекцию целиком

5.1 Ввод и формирование векторов и матриц

Векторы и матрицы в Octave задаются путём ввода их элементов. Элементы вектора-строки отделяют пробелами или запятыми, а всю конструкцию заключают в квадратные скобки:

	
>>> a =[2 -3 5 6 -1 0 7 -9]
a = 2 -3 5 6 -1 0 7 -9
>>> b =[ -1,0,1]
b = -1 0 1

Вектор-столбец можно задать, если элементы отделять друг от друга точкой с запятой:

	
>>> c=[-pi; -pi / 2; 0; pi / 2; pi ]
c =
-3.14159
-1.57080
0.00000
1.57080
3.14159

Обратиться к элементу вектора можно указав имя вектора, а в круглых скобках — номер элемента, под которым он хранится в этом векторе:

	
>>> a( 1 )
ans = 2
>>> b( 3 )
ans = 1
>>> c( 5 )
ans = 3.1416

Ввод элементов матрицы также осуществляется в квадратных скобках, при этом элементы строки отделяются друг от друга пробелом или запятой, а строки разделяются между собой точкой с запятой:

	
>>> Matr=[0 1 2 3; 4 5 6 7 ]
Matr =
0 1 2 3
4 5 6 7

Обратиться к элементу матрицы можно указав после имени матрицы, в круглых скобках, через запятую, номер строки и номер столбца, на пересечении которых элемент расположен:

	
>>> Matr ( 2, 3 )
ans = 6
>>> Matr ( 1, 1 )
ans = 0
>>> Matr ( 1, 1 )=pi; Matr ( 2, 4 )= _pi;
>>> Matr
Matr =
3.1416 1.0000 2.0000 3.0000
4.0000 5.0000 6.0000 -3.1416

Матрицы и векторы можно формировать, составляя их из ранее заданных матриц и векторов:

	
>>> a=[-3 0 2 ]; b=[3 2 -1]; c =[5 -2 0 ];
>>> M=[a b c ] % Горизонтальная конкатенация векторов–строк
M = -3 0 2 3 2 -1 5 -2 0 % результат — вектор–строка
>>> N=[a; b; c ] % Вертикальная конкатенация векторов–строк,
% результат — матрица
N =
	-3  0  2
	 3  2 -1
	 5 -2  0
>>> Matrica =[N N N] % Горизонтальная конкатенация матриц
Matrica =
	-3  0  2 -3  0  2 -3  0  2
	 3  2 -1  3  2 -1  3  2 -1
	 5 -2  0  5 -2  0  5 -2  0
>>> Tablica =[M;M;M] % Вертикальная конкатенация матриц
Tablica =
	-3 0 2 3 2 -1 5 -2 0
	-3 0 2 3 2 -1 5 -2 0
	-3 0 2 3 2 -1 5 -2 0

Важную роль при работе с матрицами играет знак двоеточия ":". Примеры с подробными комментариями приведены в листинге 5.1.

	
>>> Tabl =[ -1.2 3.4 0.8; 0.9 -0.1 1.1; 7.6 -4.5 5.6; 9.0 1.3 -8.5]
Tabl =
	-1.20000 3.40000 0.80000
	0.90000 -0.10000 1.10000
	7.60000 -4.50000 5.60000
	9.00000 1.30000 -8.50000
>>> Tabl( :, 3 ) % Выделить из матрицы 3-й столбец
ans =
	0.80000
	1.10000
	5.60000
	-8.50000
>>> Tabl( 1, : ) % Выделить из матрицы 1-ю строку
ans = -1.20000 3.40000 0.80000
>>> Matr=Tabl( 2 : 3, 1 : 2 ) % Выделить из матрицы подматрицу
Matr =
0.90000 -0.10000
7.60000 -4.50000
% Вставить подматрицу в правый нижний угол исходной матрицы
>>> Tabl( 3 : 4, 2 : 3 )=Matr
Tabl =
	-1.20000 3.40000  0.80000
	0.90000  -0.10000 1.10000
	7.60000  0.90000  -0.10000
	9.00000  7.60000  -4.50000
>>> Tabl( :, 2 ) = [ ] % Удалить из матрицы 2-й столбец
Tabl =
	-1.20000 0.80000
	0.90000  1.10000
	7.60000  -0.10000
	9.00000  -4.50000
>>> Tabl( 2, : ) = [ ] % Удалить из матрицы 2-ю строку
Tabl =
	-1.20000 0.80000
	7.60000 -0.10000
	9.00000 -4.50000
>>> Matr % Представить матрицу в виде вектора–столбца
Matr =
	0.90000 -0.10000
	7.60000 -4.50000
>>> Vector=Matr ( : )
Vector =
	0.90000
	7.60000
	-0.10000
	-4.50000
>>> V=Vector( 1 : 3 ) % Выделить из вектора элементы со 1-го по 3-й
V =
	0.90000
	7.60000
	-0.10000
>>> V( 2 ) = [ ] % Удалить из массива 2-й элемент
V =
	0.90000
	-0.10000

5.2 Действия над векторами

Рассмотрим действия над векторами, предусмотренные в Octave.

Операция сложения определена только для векторов одного типа, то есть суммировать можно либо векторы–столбцы, либо векторы–строки одинаковой длины. Элементы вектора, являющегося суммой двух векторов, представляют собой сумму соответствующих элементов слагаемых. Для записи операции сложения векторов используют знак "+":

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; c=a+b
c = 3  7  11

Вычитание векторов определено аналогично сложению: из элементов вектора-уменьшаемого вычитаются соответствующие элементы второго вектора. Запись операции вычитания выполняется с помощью знака "–":

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; c=a-b
c = 1  1  1

Операция транспонирования вектора суть замена вектора-столбца вектором-строкой и наоборот. Знак апострофа "’" применяют для записи операции транспонирования вектора:

	
>>> a ’
ans =
	2
	4
	6
>>> b ’
ans =
	1
	3
	5
>>> t =(a+b ) ’
t =
	3
	7
	11

Умножение вектора на число есть умножение каждого элемента вектора на это число. Запись операции умножения вектора на число осуществляется с помощью знака "*":

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; z=2*a +0.5*b
z = 4.5000 9.5000 14.5000

Деление вектора на число определяется аналогично умножению, как деление каждого элемента вектора на это число Если делитель будет равен нулю, то в ответе будет Inf или NaN и предупреждение warning: division by zero. (Прим. редактора). . Знак деления "/" применяют для записи операции деления вектора на число:

	
>>> z=2_a+b/2
z = 4.5000 9.50001 4.5000

Умножение векторов определено только для векторов одинакового размера, причём один из них должен быть вектором-столбцом, а второй — вектором-строкой. Если вектор-строку умножать на вектор столбец, получится скалярное произведение векторов (число) Напомним, что скалярное умножение векторов определено, как сумма произведений соответствующих элементов векторов. , а если умножать вектор-столбец на вектор-строку, то получится матрица у которой каждая строка представляет собой исходный вектор-строку, умноженный на соответствующие элементы вектора столбца. Операция умножения вектора на вектор записывается с помощью знака "*", также как и операция умножения вектора на число. Примеры умножения векторов:

	
>>> a =[2 4 6 ]; b=[1 3 5 ];
% В результате умножения вектора–строки на вектор–столбец получится число
>>> a*b ’
ans = 44
% Результат умножения вектора–столбца на вектор–строку — матрица
>>> a ’ * b
ans =
	2 6 10
	4 12 20
	6 18 30
% Некорректное умножение векторов
>>> a*b
error: operator *: nonconformant arguments (op1 is 1x3, op2 is 1x3)
>>> a ’ * b ’
error: operator *: nonconformant arguments (op1 is 3x1, op2 is 3x1)

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

	
>>> x=[-pi /2, -pi /3, -pi / 4, 0, pi /4, pi /3, pi / 2 ]
x = -1.5708 -1.0472 -0.7854 0.0000 0.7854 1.0472 1.5708
>>> y=sin (2 * x )+cos (2 * x )
y = -1.0000 -1.36603 -1.0000 1.0000 1.0000 0.36603 -1.0000
>>> y=2*exp ( x /5)
y = 1.4608 1.6221 1.7093 2.0000 2.3402 2.4660 2.7382

Рассмотрим ещё несколько операций поэлементного преобразования вектора. К каждому элементу вектора можно добавить (вычесть) число, используя арифметическую операцию "+" ("–") Вдумчивый читатель сразу заметит, что это частный случай предыдущего примера — применение к вектору линейного преобразования. (Прим. редактора). :

	
>>> x=[-pi /2, -pi /3, -pi / 4, 0, pi /4, pi /3, pi / 2 ];
>>> x-1.2+e /3
ans =
-1.86470 -1.34110 -1.07930 -0.29391 0.49149 0.75329 1.27689

Поэлементное умножение векторов выполняется при помощи оператора ".*", результатом такого умножения является вектор, каждый элемент которого равен произведению соответствующих элементов заданных векторов.

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; a . * b
ans = 2  12  30
>>> b . * a
ans = 2  12  30

Поэлементное деление одного вектора на другой осуществляется при помощи оператора "./". В результате получается вектор, каждый элемент которого — частное от деления соответствующего элемента первого вектора на соответствующий элемент второго.

Совокупность знаков ".\" применяют для деления векторов в обратном направлении (поэлементное деление второго вектора на первый). Примеры деления векторов:

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; a . / b
ans = 2.0000 1.3333 1.2000
>>> a . \ b
ans = 0.50000 0.75000 0.83333

Поэлементное возведение в степень выполняет оператор ".^", результатом является вектор, каждый элемент которого это соответствующий элемент заданного вектора, возведённый в указанную степень:

	
>>> a =[2 4 6 ]; b=[1 3 5 ];
>>> a .^2 % Каждый элемент вектора возвести в квадрат
ans = 4 16 36
>>> b . ^ ( 1 / 2 ) % Извлечь корень квадратный из каждого элемента вектора
ans = 1.0000 1.7321 2.2361
>>> b .^ a % Каждый элемент вектора b возвести в степень a
ans = 1 81 15625
>>> a . ^ ( 1 . / b ) % Извлечь корень b-й степени из каждого элемента вектора a
ans = 2.0000 1.5874 1.4310

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.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

Довольно необычное, с точки зрения математики, применение нашлось для операторов "/" и "\". Символ "/" используется для операции называемой делением матриц слева направо, соответственно знак "\" применяется для деления матриц справа налево. Операция $$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

5.4 Функции для работы с матрицами и векторами

В Octave существуют специальные функции, предназначенные для работы с матрицами и векторами. Эти функции можно разделить на следующие группы:

  • функции для работы с векторами;
  • функции для работы c матрицами;
  • функции, реализующие численные алгоритмы решения задач линейной алгебры.
  • Рассмотрим наиболее часто используемые функции.

    5.4.1 Функции для работы с векторами

    $$length(X)$$ — определяет дину вектора $$X$$.

    	
    >>> X=[1 2 3 4 5 6 7 8 9 ];
    >>> n=length (X)
    n = 9
    >>> Y= [ - 2; - 1; 0; 1; 2 ]
    Y =
    	-2
    	-1
    	 0
    	 1
    	 2
    >>> m=length (Y)
    m = 5
    

    $$prod(X)$$ — вычисляет произведение элементов вектора $$X$$.

    	
    >>> X=[1 2 3 4 5 6 7 8 9 ]; prod (X)
    ans = 362880
    

    $$cumprod(X)$$ — формирует вектор кумулятивного произведения — вектор того же типа и размера, что и X вида: $$x_1,x_1\cdot x_2,x_1\cdot x_2\cdot x_3,\dots,x_1\cdot x_2 \cdot \dots \cdot x_n$$, каждый элемент которого рассчитывается по формулам $${x}'_i=x_1\cdot x_2 \cdot \dots \cdot x_i$$, то есть $$i$$–й элемент вектора $$X$$ умножается на произведение всех предыдущих элементов.

    	
    >>> X=[1 2 3 4 5 ]; cumprod (X)
    ans = 1 2 6 24 120
    

    $$sum(X)$$ — вычисляет сумму элементов вектора $$X$$.

    	
    >>> X=[1 2 3 4 5 6 7 8 9 ]; sum(X)
    ans = 45
    

    $$cumsum(X)$$ — формирует вектор кумулятивной суммы — вектор того же типа и размера, что и $$X$$ вида $$x_1,x_1 + x_2,x_1 + x_2 + x_3,\dots,x_1 + x_2 +\dots + x_n$$, каждый элемент которого рассчитывается по формуле: $$x^{'}_i = x_1 + x_2 +\dots + x_i$$, то есть к $$i$$–му элементу вектора $$X$$ прибавляется сумма всех предыдущих элементов.

    	
    >>> X=[1 2 3 4 5 ]; cumsum(X)
    ans = 1 3 6 10 15
    

    $$diff (X)$$ — формирует вектор вида $$x_2-x_1,x_3-x_2,\dots,x_n-x_{n-1}$$, размер которого на единицу меньше чем у вектора $$X$$, а каждый элемент представляет собой разность между двумя соседними элементами массива $$X$$, то есть $${x_i}'=x_i-x_{i-1}$$.

    	
    >>> X=[1 2 3 4 5 6 7 8 9 ]; diff(X)
    ans = 1 1 1 1 1 1 1 1
    

    $$min(X)$$ — находит минимальный элемент вектора $$X$$, вызов в формате $$[nomX, nom] = min(X)$$ даёт возможность определить минимальный элемент $$nomX$$ и его номер nom в массиве $$X$$.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> min(X)
    ans = -8
    >>> [ Xnom, nom]=min(X)
    Xnom = -8
    nom = 5
    

    $$max(X)$$ — находит максимальный элемент массива $$X$$ или при вызове вида $$[nomX, nom] = max(X)$$ определяет максимум и его номер.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> max(X)
    ans = 9
    >>> [ Xnom, nom]=max(X)
    Xnom = 9
    nom = 4
    

    $$mean(X)$$ — определяет среднее арифметическое массива $$X$$.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> Sr= mean(X)
    Sr = 2.4286
    >>> sum(X) / length (X)
    ans = 2.4286
    

    $$dot(x_1, x_2)$$ — вычисляет скалярное произведение векторов $$x_1$$ и $$x_2$$.

    	
    >>> x1 =[2 -3 0 5 1 ];
    >>> x2 =[0 1 -2 3 -4];
    >>> dot( x1, x2 )
    ans = 8
    >>> sum( x1 . * x2 )
    ans = 8
    >>> x1 = [ 2; - 3; 0 ]; x2 = [ 0; 1; - 2 ];
    >>> dot( x1, x2 )
    ans = -3
    >>> sum( x1 . * x2 )
    ans = -3
    

    $$cross(x_1, x_2)$$ — вычисляет векторное произведение векторов $$x_1$$ и $$x_2$$.

    	
    >>> x1 =[2 -3 0 ]; x2 =[0 1 -2];
    >>> x=cross( x1, x2 )
    x = 6 4 2
    >>> x1 = [ 2; - 3; 0 ]; x2 = [ 0; 1; - 2 ];
    >>> x=cross( x1, x2 )
    x =
    	6
    	4
    	2
    

    $$sort(X)$$ — выполняет сортировку массива $$X$$.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> sort (X) % Сортировка по возрастанию
    ans = -8 -1 2 3 5 7 9
    >>> -sort (-X) % Сортировка по убыванию
    ans = 9 7 5 3 2 -1 -8
    

    5.4.2 Функции для работы c матрицами

    $$eye(n[, m])$$ — возвращает единичную матрицу (вектор) соответствующей размерности.

    	
    >>> eye( 4 )
    ans =
    Diagonal Matrix
    	1 0 0 0
    	0 1 0 0
    	0 0 1 0
    	0 0 0 1
    >>> eye( 2, 4 )
    ans =
    Diagonal Matrix
    	1 0 0 0
    	0 1 0 0
    >>> eye( 3, 1 )
    ans =
    Diagonal Matrix
    	1
    	0
    	0
    >>> eye( 1, 5 )
    ans =
    Diagonal Matrix
    	1 0 0 0 0
    

    $$ones(n[, m, p, . . . ])$$ — формирует матрицу (вектор), состоящую из единиц.

    	
    >>> ones( 2 )
    ans =
    	1 1
    	1 1
    >>> ones( 3, 3 )
    ans =
    	1 1 1
    	1 1 1
    	1 1 1
    >>> ones( 1, 4 )
    ans =
    	1 1 1 1
    >>> ones( 2, 1 )
    ans =
    	1
    	1
    >>> ones( 4, 2 )
    ans =
    	1 1
    	1 1
    	1 1
    	1 1
    >>> ones( 2, 3, 4 )
    ans =
    ans ( :, :, 1 ) =
    	1 1 1
    	1 1 1
    ans ( :, :, 2 ) =
    	1 1 1
    	1 1 1
    ans ( :, :, 3 ) =
    	1 1 1
    	1 1 1
    ans ( :, :, 4 ) =
    	1 1 1
    	1 1 1
    

    $$zeros(n[, m, p, . . . ])$$ — возвращает нулевую матрицу (вектор) соответствующей размерности.

    	
    >>> zeros( 3 )
    ans =
    	0 0 0
    	0 0 0
    	0 0 0
    >>> zeros( 1, 1 )
    ans = 0
    >>> zeros( 1, 2 )
    ans =
    	0 0
    >>> zeros( 3, 2 )
    ans =
    	0 0
    	0 0
    	0 0
    >>> zeros( 4, 1 )
    ans =
    	0
    	0
    	0
    	0
    >>> zeros( 2, 2, 2 )
    ans =
    ans ( :, :, 1 ) =
    	0 0
    	0 0
    ans ( :, :, 2 ) =
    	0 0
    	0 0
    

    $$diag(X[, k])$$ — возвращает квадратную матрицу с элементами $$X$$ на главной диагонали или на $$k$$–й. Функция $$diag(M [, k])$$, где $$M$$ — ранее определённая матрица, в качестве результата выдаст вектор столбец, содержащий элементы главной или $$k$$–ой диагонали матрицы $$M$$.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> diag(X)
    ans =
    Diagonal Matrix
    	-1 0 0 0 0 0 0
    	0 2 0 0 0 0 0
    	0 0 3 0 0 0 0
    	0 0 0 9 0 0 0
    	0 0 0 0 -8 0 0
    	0 0 0 0 0 7 0
    	0 0 0 0 0 0 5
    >>> diag(X, 0 )
    ans =
    Diagonal Matrix
    	-1 0 0 0 0 0 0
    	0 2 0 0 0 0 0
    	0 0 3 0 0 0 0
    	0 0 0 9 0 0 0
    	0 0 0 0 -8 0 0
    	0 0 0 0 0 7 0
    	0 0 0 0 0 0 5
    >>> x =[2; -3; 0 ]; diag(X, 1 )
    ans =
    	0 -1 0 0 0 0 0 0
    	0 0 2 0 0 0 0 0
    	0 0 0 3 0 0 0 0
    	0 0 0 0 9 0 0 0
    	0 0 0 0 0 -8 0 0
    	0 0 0 0 0 0 7 0
    	0 0 0 0 0 0 0 5
    	0 0 0 0 0 0 0 0
    >>> diag( x, 1 )
    ans =
    	0 2 0 0
    	0 0 -3 0
    	0 0 0 0
    	0 0 0 0
    >>> x =[2; -3; 0 ];
    >>> diag( x, 1 )
    ans =
    	0 2 0 0
    	0 0 -3 0
    	0 0 0 0
    	0 0 0 0
    >>> diag( x, -1)
    ans =
    	0 0 0 0
    	2 0 0 0
    	0 -3 0 0
    	0 0 0 0
    >>> x =[2; -3; 1 ];
    >>> diag( x, 1 )
    ans =
    	0 2 0 0
    	0 0 -3 0
    	0 0 0 1
    	0 0 0 0
    >>> diag( x, -1)
    ans =
    	0 0 0 0
    	2 0 0 0
    	0 -3 0 0
    	0 0 1 0
    >>> diag( x, 2 )
    ans =
    	0 0 2 0 0
    	0 0 0 -3 0
    	0 0 0 0 1
    	0 0 0 0 0
    	0 0 0 0 0
    >>> diag( x, -2)
    ans =
    	0 0 0 0 0
    	0 0 0 0 0
    	2 0 0 0 0
    	0 -3 0 0 0
    	0 0 1 0 0
    >>> M=[1 2 3; 4 5 6; 7 8 9 ]
    M =
    	1 2 3
    	4 5 6
    	7 8 9
    >>> diag(M)
    ans =
    	1
    	5
    	9
    >>> diag(M, 1 )
    ans =
    	2
    	6
    >>> diag(M, -1)
    ans =
    	4
    	8
    >>> diag(M, 2 )
    ans = 3
    >>> diag(M, -2)
    ans = 7
    

    $$rand([n, m, p, . . . ])$$ — возвращает матрицу (вектор) с элементами распределёнными по равномерному закону, $$rand$$ без аргументов возвращает одно случайное число.

    	
    >>> rand( 2 )
    ans =
    	0.15907 0.80147
    	0.90460 0.40293
    >>> rand( 3, 1 )
    ans =
    	0.279005
    	0.031504
    	0.529279
    >>> rand( 1, 4 )
    ans = 0.85038 0.13899 0.50764 0.82887
    >>> rand( 2, 5 )
    ans =
    	0.782173 0.286649 0.563683 0.969862 0.708655
    	0.300415 0.545783 0.011614 0.143827 0.644821
    >>> rand
    ans = 0.99252
    >>> rand
    ans = 0.42848
    

    $$randn([n, m, p . . . ])$$ — возвращает матрицу (вектор), элементы которой являются числами, распределёнными по нормальному закону, $$randn$$ без аргументов возвращает одно случайно число.

    	
    >>> randn( 2 )
    ans =
    	-1.04321 -1.81309
    	 1.09223 -0.83071
    >>> randn( 2, 4 )
    ans =
    	-0.222773 -0.540185 0.026355 0.308437
    	1.510429 1.360071 0.298315 1.186672
    >>> randn( 1, 3 )
    ans =
    	0.38577 -2.33667 -1.35689
    >>> randn( 2, 1 )
    ans =
    	-0.66235
    	 0.32907
    >>> randn
    ans = -1.0607
    >>> randn
    ans = -0.47825
    

    $$linspace(a, b[, n])$$ — возвращает массив из 100 (если $$n$$ не указано) или из $$n$$ точек равномерно распределённых между значениями $$a$$ и $$b$$.

    	
    >>> linspace( a, b, 3 )
    ans = -2 0 2
    >>> a=-2;b=2;n=5;
    >>> linspace( a, b, n )
    ans = -2 -1 0 1 2
    >>> linspace( a, b, 3 )
    ans = -2 0 2
    >>> linspace( 0, 5 0, 5 )
    ans = 0.00000 12.50000 25.00000 37.50000 50.00000
    

    $$logspace(a, b[, n])$$ — формирует массив из 50 (если $$n$$ не указано) или из $$n$$ точек, равномерно распределённых в логарифмическом масштабе между значениями $$10^a$$ и $$10^b$$; функция $$logspace(a, pi)$$ даёт равномерное распределение из 50 точек в интервале от $$10^a$$ до π Обратите внимание, что это идёт в разрез с определением функции для произвольного$$b\not= pi$$, согласно которому интервал должен был бы быть от $$10^a$$ до $$10^{pi}$$, сделано это для совместимости с соответствующей функцией matlab. (Прим. редактора ). .

    	
    >>> logspace( 1, 2, 5 )
    ans = 10.000 17.783 31.623 56.234 100.000
    >>> logspace( 2, pi )
    ans =
    	Columns 1 through 7 :
    100.0000 93.1815 86.8279 80.9075 75.3908 70.2503 65.4602
    	Columns 8 through 14 :
    60.9968 56.8377 52.9622 49.3510 45.9860 42.8504 39.9287
    	Columns 15 through 21 :
    37.2061 34.6692 32.3053 30.1025 28.0500 26.1374 24.3552
    	Columns 22 through 28 :
    22.6945 21.1471 19.7052 18.3616 17.1096 15.9430 14.8559
    	Columns 29 through 35 :
    13.8429 12.8991 12.0195 11.2000 10.436 39.724 79.0616
    	Columns 36 through 42 :
    8.4438 7.8680 7.3315 6.8316 6.3658 5.9318 5.5273
    	Columns 43 through 49 :
    5.1504 4.7992 4.4720 4.1671 3.8829 3.6182 3.3715
    	Column 50 :
    3.1416
    

    $$repmat(M, n[, m])$$ — формирует матрицу состоящую $$n \times n$$ или из $$n \times m$$ копий матрицы $$M$$, если $$M$$ — скаляр, то формируется матрица, элементы которой равны значению $$M$$.

    	
    >>> M=[1 2 3; 4 5 6; 7 8 9 ];
    >>> repmat(A, 2 )
    ans =
    	3 -1 3 -1
    	6 -2 6 -2
    	3 -1 3 -1
    	6 -2 6 -2
    >>> M=[1 2 3; 4 5 6; 7 8 9 ];
    >>> repmat(M, 2 )
    ans =
    	1 2 3 1 2 3
    	4 5 6 4 5 6
    	7 8 9 7 8 9
    	1 2 3 1 2 3
    	4 5 6 4 5 6
    	7 8 9 7 8 9
    >>> repmat(M, 2, 3 )
    ans =
    	1 2 3 1 2 3 1 2 3
    	4 5 6 4 5 6 4 5 6
    	7 8 9 7 8 9 7 8 9
    	1 2 3 1 2 3 1 2 3
    	4 5 6 4 5 6 4 5 6
    	7 8 9 7 8 9 7 8 9
    >>> repmat(M, 3, 1 )
    ans =
    	1 2 3
    	4 5 6
    	7 8 9
    	1 2 3
    	4 5 6
    	7 8 9
    	1 2 3
    	4 5 6
    	7 8 9
    >>> repmat( 9, 3 )
    ans =
    	9 9 9
    	9 9 9
    	9 9 9
    

    $$reshape(M, m, n)$$ — возвращает матрицу размерностью $$m \times n$$ сформированную из матрицы $$M$$ путём последовательной выборки по столбцам, если матрица $$M$$ не имеет $$m \times n$$ элементов, то выдаётся сообщение об ошибке.

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1 ]
    M =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    >>> reshape(M, 3, 2 )
    error: reshape: can ’ t reshape 3x4 array to 3x2 array
    >>> reshape(M, 3, 4 )
    ans =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    >>> reshape(M, 4, 3 )
    ans =
    	0 5 0
    	4 9 3
    	8 2 7
    	1 6 1
    >>> reshape(M, 2, 6 )
    ans =
    	0 8 5 2 0 7
    	4 1 9 6 3 1
    >>> reshape(M, 6, 2 )
    ans =
    	0 2
    	4 6
    	8 0
    	1 3
    	5 7
    	9 1
    >>> reshape(M, 1, 1 2 )
    ans = 0 4 8 1 5 9 2 6 0 3 7 1
    >>> reshape(M, 1 2, 1 )
    ans =
    	0
    	4
    	8
    	1
    	5
    	9
    	2
    	6
    	0
    	3
    	7
    	1
    

    $$cat(n, A, B, [C, . . . ])$$ — объединяет матрицы $$A$$ и $$B$$ или все входящие матрицы.

    	
    >>> A=[0 1 2; 3 4 5; 6 7 8 ]; B=[11 12 13; 14 15 16; 17 18 19 ];
    >>> cat ( 2,A,B)
    ans =
    	0 1 2 11 12 13
    	3 4 5 14 15 16
    	6 7 8 17 18 19
    >>> [ A,B]
    ans =
    	0 1 2 11 12 13
    	3 4 5 14 15 16
    	6 7 8 17 18 19
    >>> cat ( 1,A,B)
    ans =
    	0 1 2
    	3 4 5
    	6 7 8
    	11 12 13
    	14 15 16
    	17 18 19
    >>> [A;B]
    ans =
    	0 1 2
    	3 4 5
    	6 7 8
    	11 12 13
    	14 15 16
    	17 18 19
    >>> x1 =[2; -3; 0 ]; x2 = [ 0; 1; - 2 ];
    >>> cat( 2, x1, x2 )
    ans =
    	 2 0
    	-3 1
    	 0 -2
    >>> cat( 1, x1, x2 )
    ans =
    	 2
    	-3
    	 0
    	 0
    	 1
    	-2
    >>> x1 =[2 -3 0 ]; x2 =[0 1 -2];
    >>> cat( 2, x1, x2 )
    ans = 2 -3 0 0 1 -2
    >>> [ x1 x2 ]
    ans = 2 -3 0 0 1 -2
    >>> cat( 1, x1, x2 )
    ans =
    	2 -3 0
    	0  1 -2
    >>> [ x1; x2 ]
    ans =
    	2 -3 0
    	0 1  -2
    

    $$rot90(M [, k])$$ — осуществляет поворот матрицы $$M$$ на 90 градусов против часовой стрелки или на величину $$90 \cdot k$$, где k — целое число Отрицательные значения k указывают на поворот по часовой стрелке, проверьте, что $$rot90(M, -1)$$ даст тот же результат, что и $$rot90(M, 3)$$. (Прим. редактора). .

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1 ]
    M =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    >>> rot90(M)
    ans =
    	3 7 1
    	2 6 0
    	1 5 9
    	0 4 8
    >>> rot90(M, 2 )
    ans =
    	1 0 9 8
    	7 6 5 4
    	3 2 1 0
    >>> rot90(M, 3 )
    ans =
    	8 4 0
    	9 5 1
    	0 6 2
    	1 7 3
    

    $$tril(M [, k])$$ — формирует из матрицы $$M$$ нижнюю треугольную матрицу начиная с главной или с $$k$$–й диагонали.

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1; 6 5 4 3 ];
    >>> tril(M)
    ans =
    	0 0 0 0
    	4 5 0 0
    	8 9 0 0
    	6 5 4 3
    >>> tril(M, 1 )
    ans =
    	0 1 0 0
    	4 5 6 0
    	8 9 0 1
    	6 5 4 3
    >>> tril(M, -1)
    ans =
    	0 0 0 0
    	4 0 0 0
    	8 9 0 0
    	6 5 4 0
    >>> tril(M, 2 )
    ans =
    	0 1 2 0
    	4 5 6 7
    	8 9 0 1
    	6 5 4 3
    >>> tril(M, -2)
    ans =
    	0 0 0 0
    	0 0 0 0
    	8 0 0 0
    	6 5 0 0
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> tril(X)
    ans =
    -1 0 0 0 0 0 0
    >>> tril(X’ )
    ans =
    	-1
    	 2
    	 3
    	 9
    	-8
    	 7
    	 5
    

    $$triu(M [, k])$$ — формирует из матрицы $$M$$ верхнюю треугольную матрицу начиная с главной или с $$k$$–й диагонали.

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1; 6 5 4 3 ]
    M =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    	6 5 4 3
    >>> triu(M)
    ans =
    	0 1 2 3
    	0 5 6 7
    	0 0 0 1
    	0 0 0 3
    >>> triu(M, 1 )
    ans =
    	0 1 2 3
    	0 0 6 7
    	0 0 0 1
    	0 0 0 0
    >>> triu(M, -2)
    ans =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    	0 5 4 3
    >>> triu(X)
    ans =
    -1 2 3 9 -8 7 5
    >>> triu(X’ )
    ans =
    	-1
      	 0
    	 0
    	 0
    	 0
    	 0
    	 0
    

    $$size(M )$$ — определяет число строк и столбцов матрицы $$M$$, результатом её работы является вектор $$[n, m]$$.

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1; 6 5 4 3 ];
    >>> size(M)
    ans = 4  4
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> size(X)
    ans = 1  7
    >>> size(X’ )
    ans = 7  1
    >>> eye( size (M) )
    ans =
    Diagonal Matrix
    	1 0 0 0
    	0 1 0 0
    	0 0 1 0
    	0 0 0 1
    >>> zeros( size (X) )
    ans = 0 0 0 0 0 0 0
    

    $$prod(M [, k])$$ — формирует вектор–строку или вектор–столбец, в зависимости от значения $$k$$, каждый элемент которой является произведением элементов соответствующего столбца или строки матрицы $$M$$, если значение параметра $$k$$ в конструкции отсутствует, то по умолчанию вычисляются произведения столбцов матрицы; понятно, что результатом работы функции $$prod(prod(M ))$$ будет произведение всех элементов матрицы.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> prod(M)
    ans = 24 -25 32 18
    >>> prod(M, 1 )
    ans = 24 -25 32 18
    >>> prod(M, 2 )
    ans =
    	  6
    	-40
    	-12
    	-120
    >>> prod( prod (M) )
    ans = -345600
    

    $$cumprod(M [, k])$$ — отличается от функции $$cumprod(X)$$ тем, что операции описанные для неё применяются к строкам или к столбцам матрицы $$M$$, в зависимости от значения параметра $$k$$, по умолчанию накапливание произведения выполняется по столбцам матрицы $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> cumprod(M)
    ans =
    	 -1   1 -2   3
    	 -4   5  2   6
    	-12  -5  8   6
    	 24 -25  32 18
    >>> cumprod(M, 1 )
    ans =
    	 -1   1 -2  3
    	 -4   5  2  6
    	-12  -5  8  6
    	 24 -25 32 18
    >>> cumprod(M, 2 )
    ans =
    	-1  -1   2    6
    	 4  20 -20  -40
    	 3  -3 -12  -12
    	-2 -10 -40 -120
    

    $$sum(M [, k])$$ — формирует вектор–строку или вектор–столбец, в зависимости от значения $$k$$, каждый элемент которой является суммой элементов соответствующего столбца или строки матрицы $$M$$, если значение параметра $$k$$ в конструкции отсутствует, то по умолчанию вычисляются суммы столбцов матрицы. Сумму всех элементов матрицы вычисляет функция $$sum(sum(M ))$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> sum(M)
    ans =
    	4 10 5 9
    >>> sum(M, 1 )
    ans =
    	4 10 5 9
    >>> sum(M, 2 )
    ans =
    	1
    	10
    	7
    	10
    >>> sum(sum(M) )
    ans = 28
    

    $$cumsum(M, [k])$$ — отличается от функции $$cumsum(X)$$ тем, что операции описанные для неё применяются либо к строкам либо к столбцам матрицы $$M$$, в зависимости от значения параметра $$k$$, по умолчанию результатом работы функции является матрица кумулятивных сумм столбцов матрицы $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> cumsum(M)
    ans =
    	-1  1 -2  3
    	 3  6 -3  5
    	 6  5  1  6
    	 4 10  5  9
    >>> cumsum(M, 1 )
    ans =
    	-1  1 -2  3
    	 3  6 -3  5
    	 6  5  1  6
    	 4 10  5  9
    >>> cumsum(M, 2 )
    ans =
    	-1 0 -2  1
    	 4 9  8  10
    	 3 2  6  7
    	-2 3  7  10
    

    $$diff (M)$$ — из матрицы $$M$$ размерностью $$n$$ на $$m$$ формирует матрицу размером $$n - 1$$ на $$m$$ элементы которой представляют собой разность между элементами соседних строк $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]
    M =
    	-1  1 -2  3
    	 4  5 -1  2
    	 3 -1  4  1
    	-2  5  4  3
    >>> diff(M)
    ans =
    	 5  4  1 -1
    	-1 -6  5 -1
    	-5  6  0  2
    

    $$min(M )$$ — формирует вектор-строку, каждый элемент которой является наименьшим элементом соответствующего столбца матрицы $$M$$. Определить положение этих элементов в матрице можно, если вызвать функцию в формате $$[n, m] = min(M )$$, где $$n$$ — это вектор минимальных элементов столбцов матрицы $$M$$, а $$m$$ — вектор номеров строк матрицы $$M$$, в которых находятся эти элементы, конструкция $$min(min(M ))$$ позволит отыскать минимум среди всех элементов матрицы.Вызов функции в виде $$min(M, [], k)$$ или $$[n, m] = min(M, [], k)$$ позволяет управлять направлением поиска, в частности можно отыскать минимальные элементы и их положение в строках матрицы $$M$$.И, наконец, функция $$min(A, B)$$ сформирует матрицу из строк $$min(A)$$ и $$min(B)$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]
    M =
    	-1  1 -2  3
    	 4  5 -1  2
    	 3 -1  4  1
    	-2  5  4  3
    >>> min(M)
    ans = -2 -1 -2 1
    >>> [ n,m]=min(M)
    n = -2 -1 -2 1
    m = 4 3 1 3
    >>> min(M’ )
    ans = -2 -1 -1 -2
    >>> [ n,m]=min(M’ )
    n = -2 -1 -1 -2
    m = 3 3 2 1
    >>> min( min(M) )% Минимум среди всех элементов матрицы
    ans = -2
    >>> [ n,m]=min( min(M) )
    n = -2
    m = 1
    >>> min(M, [ ], 1 )
    ans = -2 -1 -2 1
    >>> min(M, [ ], 2 ) % Как и min(M) формирует вектор–строку, каждый элемент
    % которой равен минимальному элементу в соответствующем столбце M
    ans =
    	-2
    	-1
    	-1
    	-2
    >>> [ n,m]=min(M, [ ], 2 ) % Формирует вектор–столбец, каждый элемент
    % которого равен минимальному элементу в соответствующей строке матрицы
    % M и их положение в матрице — номера столбцов в которых они находятся.
    n =
    	-2
    	-1
    	-1
    	-2
    m =
    	3
    	3
    	2
    	1
    >>> A=[0 1 2; 3 4 5; 6 7 8 ]; B=[11 12 13; 14 15 1 6; 17 18 19 ];
    >>> min(A,B)
    ans =
    	0 1 2 % Первая строка — минимумы столбцов матрицы A,
    	3 4 5 % а вторая строка — матрицы B
    	6 7 8
    

    $$max(M)$$ — формирует вектор-строку, каждый элемент которой является наибольшим элементом соответствующего столбца матрицы $$M$$, действия функций $$[n, m] = max(M ), max(max(M )), max(M, [], k), [n, m] = max(A, [], k), max(A, B)$$ понятно из примеров:

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> max(M)
    ans = 4 5 4 3
    >>> [ n,m]=max(M)
    n = 4 5 4 3
    m = 2 2 3 1
    >>> max(M’ )
    ans = 3 5 4 5
    >>> [ n,m]=max(M’ )
    n = 3 5 4 5
    m = 4 2 3 2
    >>> max(max(M) )
    ans = 5
    >>> [ n,m]=max(max(M) )
    n = 5
    m = 2
    >>> max(M, [ ], 1 )
    ans = 4 5 4 3
    >>> max(M, [ ], 2 )
    ans =
    	3
    	5
    	4
    	5
    >>> [ n,m]=max(M, [ ], 2 )
    n =
    	3
    	5
    	4
    	5
    m =
    	4
    	2
    	3
    	2
    >>> A=[0 1 2; 3 4 5; 6 7 8 ]; B=[11 12 13; 14 15 1 6; 17 18 19 ];
    >>> max(A,B)
    ans =
    	11 12 13
    	14 15 16
    	17 18 19
    

    $$mean(M, [k])$$ — формирует вектор–строку или вектор–столбец, в зависимости от значения $$k$$, каждый элемент которого является средним значением элементов соответствующего столбца или строки матрицы $$M$$, если значение параметра $$k$$ в конструкции отсутствует, то по умолчанию вычисляются средние значения столбцов матрицы. Среднее всех элементов матрицы вычисляет функция $$mean(mean(M))$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> mean(M)
    ans = 1.0000 2.5000 1.2500 2.2500
    >>> mean(M, 1 )
    ans = 1.0000 2.5000 1.2500 2.2500
    >>> mean(M, 2 )
    ans =
    	0.25000
    	2.50000
    	1.75000
    	2.50000
    >>> mean(mean(M) )
    ans = 1.7500
    

    $$sort(M)$$ — выдаёт матрицу того же размера, что и $$M$$, каждый столбец которой упорядочен по возрастанию.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]
    M =
    	-1 1 -2 3
    	4 5 -1 2
    	3 -1 4 1
    	-2 5 4 3
    >>> sort (M)
    ans =
    	-2 -1 -2 1
    	-1 1 -1 2
    	3 5 4 3
    	4 5 4 3
    >>> sort (M’ )
    ans =
    	-2 -1 -1 -2
    	-1 2 1 3
    	1 4 3 4
    	3 5 4 5
    >>> -sort (- M)
    ans =
    	4 5 4 3
    	3 5 4 3
    	-1 1 -1 2
    	-2 -1 -2 1
    >>> -sort (-M’ )
    ans =
    	3 5 4 5
    	1 4 3 4
    	-1 2 1 3
    	-2 -1 -1 -2
    

    $$sqrtm(M)$$ — относится к так называемым матричным функциям и возвращает матрицу $$X$$, для которой $$X * X = M$$ (матрица $$M$$ должна быть квадратной).

    	
    >>> A=[1 0 -3;0 1 2; 2 0 -1]
    A =
    	1 0 -3
    	0 1 2
    	2 0 -1
    >>> X=sqrtm (A)
    X =
    	1.53024 0.00000 -1.41861
    	-0.35349 1.00000 0.94574
    	0.94574 0.00000 0.58450
    >>> X*X % Проверка
    ans =
    	1.00000 0.00000 -3.00000
    	0.00000 1.00000 2.00000
    	2.00000 0.00000 -1.00000
    >>> Y=sqrt (A)% Извлечение квадратного корня из элементов матрицы A
    Y =
    1.00000 + 0.00000i 0.00000 + 0.00000i 0.00000 + 1.73205i
    0.00000 + 0.00000i 1.00000 + 0.00000i 1.41421 + 0.00000i
    1.41421 + 0.00000i 0.00000 + 0.00000i 0.00000 + 1.00000 i
    % sqrtm(A) и sqrt(A) дают различные результаты
    >>> Y*Y % Матричное умножение
    ans =
    	1.00000 + 2.44949i 0.00000 + 0.00000i -1.73205 + 1.73205i
    	2.00000 + 0.00000i 1.00000 + 0.00000i 1.41421 + 1.41421i
    	1.41421 + 1.41421i 0.00000 + 0.00000i -1.00000 + 2.44949i
    >>> Y. *Y % Поэлементное умножение
    ans =
    	1.00000 0.00000 -3.00000
    	0.00000 1.00000 2.00000
    	2.00000 0.00000 -1.00000
    

    $$expm(M)$$ и $$logm(M)$$ — взаимообратные матричные функции, первая вычисляет матричную экспоненту $$e^M$$, а вторая выполняет логарифмирование по основанию $$e$$.

    	
    >>> A=[1 0 -3;0 1 2; 2 0 -1];B= expm(A)
    B =
    	-0.26543 0.00000 -1.05553
    	1.98914 2.71828 0.70369
    	0.70369 0.00000 -0.96912
    >>> logm(B)
    ans =
    	1.00000 + 0.00000i 0.00000 + 0.00000i -3.00000 - 0.00000i
    	-0.00000 - 0.00000i 1.00000 + 0.00000i 2.00000 + 0.00000i
    	2.00000 + 0.00000i 0.00000 + 0.00000i -1.00000 - 0.00000i
    

    5.4.3 Функции, реализующие численные алгоритмы решения задач линейной алгебры

    $$det(M)$$ — вычисляет определитель квадратной матрицы $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]; det (M)
    ans = 682
    >>> A=[1 0 -3;0 1 2; 2 0 -1]; det (A)
    ans = 5
    

    $$trace(M)$$ — вычисляет след матрицы $$M$$, то есть сумму элементов главной диагонали.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]
    M =
    	-1 1 -2 3
    	4 5 -1 2
    	3 -1 4 1
    	-2 5 4 3
    >>> trace(M)
    ans = 11
    >>> sum( diag (M) )
    ans = 11
    

    $$norm(M[, p])$$ — возвращает различные виды норм матрицы $$M$$ в зависимости от $$p$$, если аргумент $$p = 1, 2, inf, fro$$ не задан, то вычисляется вторая норма матрицы $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> norm(M)% Вторая норма
    ans = 8.5506
    >>> norm(M, 2 )
    ans = 8.5506
    >>> norm(M, 1 ) % Первая норма
    ans = 12
    >>> norm(M, inf ) % Бесконечная норма
    ans = 14
    >>> norm(M, ’fro’ ) % Евклидова норма
    ans = 11.916
    

    $$cond(M[, p])$$ — возвращает число обусловленности матрицы $$M$$, основанное на норме $$p$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> cond(M)
    ans = 3.3324
    >>> cond(M, 2 )
    ans = 3.3324
    >>> cond(M, 1 )
    ans = 6.4927
    >>> cond(M, inf )
    ans = 6.7742
    >>> cond (M, ’fro’ )
    ans = 5.7154
    

    $$rcond(M)$$ — вычисляет величину, обратную значению числа обусловленности матрицы относительно первой нормы, если полученная величина близка к единице, то матрица хорошо обусловлена, если к приближается к нулю, то плохо.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]; rcond (M)
    ans = 0.1738
    

    $$inv(M)$$ — возвращает матрицу обратную к $$M$$.

    	
    >>> A=[1 0 -3;0 1 2; 2 0 -1]; invA=inv (A)
    invA =
    	-0.2  0  0.6
    	 0.8  1 -0.4
    	-0.4  0  0.2
    >>> A_ invA % Проверка
    ans =
    	1 0 -5.5511e-17
    	0 1  0
    	0 0  1
    

    $$eig(M)$$ — возвращает вектор собственных значений матрицы $$M$$, вызов функции в формате $$[Matr, D] = eig(M)$$ даст матрицу $$Matr$$, столбцы которой — собственные векторы матрицы $$M$$ и диагональную матрицу $$D$$, содержащую собственные значения матрицы $$M$$, функция $$eig(A, B)$$, где $$A$$ и $$B$$ квадратные матрицы, выдаёт вектор обобщённых собственных значений.

    	
    >>> M=[3 -2;-4 1 ]
    M =
    	 3 -2
    	-4 1
    >>> eig (M)
    ans =
    	 5
    	-1
    >>> [ Matr,D]= eig (M)
    Matr =
    	 0.70711 0.44721
    	-0.70711 0.89443
    D =
    Diagonal Matrix
    	5  0
    	0 -1
    % Проверка A * M = M * D
    >>> M * Matr
    ans =
    	 3.5355 -0.44721
    	-3.5355 -0.89443
    >>> Matr *D
    ans =
    	 3.5355 -0.44721
    	-3.5355 -0.89443
    

    $$poly(M)$$ — возвращает вектор–строку коэффициентов характеристического полинома матрицы $$M$$.

    	
    >>> M=[3 -2;-4 1 ]
    M =
    	3 -2
    	-4 1
    >>> poly(M)
    ans = 1 -4 -5
    

    $$rref (M)$$ — осуществляет приведение матрицы $$M$$ к треугольной форме, используя метод исключения Гаусса.

    	
    >>> M=[3 -2 1 5; 6 -4 2 7; 9 -6 3 1 2 ]
    M =
    	3 -2 1 5
    	6 -4 2 7
    	9 -6 3 12
    >>> rref (M)
    ans =
    	1  -0.66667     0.33333   0
    	0 	0 			0 		  1
    	0 	0 			0         0
    

    $$chol(M)$$ — возвращает разложение по Холецкому для положительно определённой симметрической матрицы $$M$$.

    	
    >>> M=[10 1 1; 2 10 1; 2 2 10 ]
    M =
    	10 1 1
    	2 10 1
    	2 2 10
    >>> chol(M)
    ans =
    	3.1623  0.31623  0.31623
    	0       3.1464   0.28604
    	0       0        3.1334
    % Матрица не симметрическая
    >>> A=[1 2; 1 1 ]; chol(A)
    error: chol: matrix not positivedefinite
    % Матрица содержит элементы < 0
    >>> M=[3 -2 1 5; 6 -4 2 7; 9 -6 3 12 ];
    >>> chol(M)
    error: CHOL requires square matrix
    

    $$lu(M)$$ — выполняет $$LU$$ –разложение, функция $$[L, U, P ] = lu(M)$$ возвращает три матрицы: $$L$$ — нижняя треугольная, $$U$$ — верхняя треугольная и $$P$$ — матрица перестановок, причём $$P\cdot A = L \cdot U$$. Функция $$lu(M)$$ без параметров возвращает одну матрицу, которая в свою очередь, является комбинацией матриц $$L$$ и $$U$$.

    	
    >>> M=[3 -2 1; 5 6 -4; 2 7 9 ];
    >>> lu (M)
    ans =
    	5     6         -4
    	0.6  -5.6       3.4
    	0.4  -0.82143   13.393
    >>> [ L, U, P]= lu (M)
    L =
    	1 		0 		  0
    	0.6 	1         0
    	0.4     -0.82143  1
    U =
    	5       6          -4
    	0      -5.6        3.4
    	0       0          13.393
    P =
    Permutation Matrix
    	0 1 0
    	1 0 0
    	0 0 1
    >>> L*U
    ans =
    	5  6 -4
    	3 -2  1
    	2  7  9
    >>> P* M
    ans =
    	5  6 -4
    	3 -2  1
    	2  7  9
    >>> lu(M)
    ans =
    	5      6        -4
    	0.6   -5.6      3.4
    	0.4   -0.82143  13.393
    >>> triu( lu (M) )
    ans =
    	5      6             -4
    	0     -5.6           3.4
    	0      0             13.393
    >>> tril( lu (M) )
    ans =
    	5       0           0
    	0.6    -5.6         0
    	0.4    -0.82143 13.393
    

    $$qr(M)$$ — выполняет $$QR$$–разложение, команда $$[Q, R, P ] = qr(M)$$ возвращает три матрицы: ортогональную матрицу $$Q$$, верхнюю треугольную матрицу $$R$$ и матрицу перестановок $$P$$, причём $$A \cdot P = Q \cdot P$$.

    	
    >>> M=[3 -2 1; 5 6 -4;2 7 9 ];
    >>> [Q, R, P]= qr (M)
    Q =
    	0.10102 -0.27448 0.95627
    	-0.40406 0.86703 0.29155
    	0.90914 0.41584 0.023324
    R =
    	9.8995   3.7376   0.10102
    	0        8.662    4.3434
    	0        0        4.3732
    P =
    Permutation Matrix
    	0 0 1
    	0 1 0
    	1 0 0
    >>> M *P - Q*R
    ans =
    -1.1102e-15   4.4409e-16	-4.4409e-16
    -4.4409e-16   -1.7764e-15   0
    0             0             -4.4409e-16
    

    $$svd(M)$$ — возвращает вектор сингулярных чисел матрицы, при использовании в формате $$[U, S, V ] = svd(M)$$ выполняет сингулярное разложение матрицы $$M$$, выдаёт три матрицы: $$U$$ — сформирована из ортонормированных собственных векторов, отвечающих наибольшим собственным значениям матрицы $$M \cdot M^T, V$$ — состоит из ортонормированных собственных векторов матрицы $$M \cdot M^T, S$$ — диагональная матрица из сингулярных чисел (неотрицательных значений квадратных корней из собственных значений матрицы $$M \cdot M^T$$ ), матрицы удовлетворяют условию $$A = U \cdot S \cdot V^T$$.

    	
    >>> M=[3 -2 1; 5 6 -4; 2 7 9 ];
    >>> svd(M)
    ans =
    	11.7553
    	8.5347
    	3.7377
    >>> [ U, S,V]=svd(M)
    U =
    	0.0057541  0.0207345  0.9997685
    	0.2528901  -0.9673161  0.0186059
    	0.9674779 0.2527245   -0.0108095
    S =
    Diagonal Matrix
    	11.7553     0         0
    	0           8.5347    0
    	0           0         3.7377
    V =
    	0.27363  -0.50018   0.82155
    	0.70421  -0.47761   -0.52534
    	0.65515  0.72229    0.22154
    

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

    5.5 Решение некоторых задач алгебры матриц

    Напомним основные определения алгебры матриц. Если m _ n выражений расставлены в прямоугольной таблице из $$m$$ строк и $$n$$ столбцов, то говорят о матрице размера $$m \times n$$:

    $$\begin{pmatrix} a_{11} a_{12} \dots a_{1n}\cr a_{21} a_{22} \dots a_{2n}\cr \dots \dots \dots \dots \cr a_{m1} a_{m2} \dots a_{mn} \end{pmatrix}$$

    Выражения a ij называют элементами матрицы. Элементы $$a_{ii} (i = 1 . . . n)$$, стоящие в таблице на линии, проходящей из левого верхнего угла в правый нижний угол квадрата $$n \times n$$, образуют главную диагональ матрицы.

    $$\begin{pmatrix} a_{11} a_{12} \dots \dots \dots a_{1n}\cr a_{21} a_{22} \dots \dots \dots a_{2n}\cr \dots \dots \dots \dots \dots \dots \cr a_{i1} a_{i2} \dots a_{ii} \dots a_{in}\cr \dots \dots \dots \dots \dots \dots \cr \dots \dots \dots \dots \dots \dots \cr a_{m1} a_{m2} \dots \dots \dots a_{mn} \end{pmatrix}$$

    Матрица размером $$m \times n, (где m \not = n)$$ называется прямоугольной (5.1). В случае если $$m = n$$, матрицу называют квадратной матрицей порядка n.

    $$\begin{pmatrix} a_{11} a_{12} \dots a_{1n}\cr a_{21} a_{22} \dots a_{2n}\cr \dots \dots \dots \dots \cr a_{n1} a_{n2} \dots a_{nn} \end{pmatrix}$$

    В частности, матрица типа $$1\times n$$ — это вектор–строка: $$(a_{11}\ a_{12}\ \dots{ }a_{1n})$$.

    Матрица размером $$m \times 1$$ является вектором–столбцом: $$\begin{pmatrix}a_{11}\cra_{21}\cr\dots\cra_{m1}\end{pmatrix}$$ am1

    Число (скаляр) можно рассматривать как матрицу типа $$1 \times 1 —a_{11}$$. Квадратная матрица $$A=\{a_{ij}\}$$ размером $$n \times n$$ называется:

  • нулевой, если все её элементы равны нулю: $$\begin{pmatrix} 0 0 \dots 0\cr 0 0 \dots 0\cr \dots \dots \dots \dots\cr 0 0 \dots 0 \end{pmatrix}$$ _
  • верхней треугольной, если все элементы, расположенные ниже главной диагонали, равны нулю: $$\begin{pmatrix} a_{11} a_{12} \dots a_{1n}\cr 0 a_{22} \dots a_{2n}\cr \dots \dots \ddots \dots \cr 0 0 \dots a_{nn} \end{pmatrix}$$ _
  • нижней треугольной, если все элементы, расположенные выше главной диагонали, равны нулю: $$\begin{pmatrix} a_{11} 0 \dots 0\cr a_{21} a_{22} \dots 0\cr \dots \dots \ddots \dots \cr a_{n1} a_{n2} \dots a_{nn} \end{pmatrix}$$ _
  • диагональной, если все элементы, кроме элементов главной диагонали, равны нулю: $$\begin{pmatrix} a_{11} 0 \dots 0\cr 0 a_{22} \dots 0\cr \dots \dots \ddots \dots \cr 0 0 \dots a_{nn} \end{pmatrix}$$ _
  • единичной, если элементы главной диагонали равны единице, а все остальные нулю: $$\begin{pmatrix} 1 0 \dots 0\cr 0 1 \dots 0\cr \dots \dots \ddots \dots \cr 0 0 \dots 1 \end{pmatrix}$$
  • Определителем (детерминантом) матрицы $$A$$ является число $$detA$$ или Δ, вычисляемое по правилу: $$det A = \sum (-1)^{\tilde \lambda} a_{1i_1} a_{2i_2}\dots a_{ni_n}$$, где сумма распределена на всевозможные перестановки $$i_1,i_2, \dots,i_n$$ элементов $$1, 2, . . ., n$$ и, следовательно, содержит $$n!$$ слагаемых, причём $$\tilde \lambda=0$$, если перестановка чётная, и $$\tilde \lambda=1$$, если перестановка нечётная.

    Квадратная матрица $$A$$ называется невырожденной, если её определитель отличен от нуля $$detA \not = 0$$. В противном случае $$detA = 0$$ матрица называется вырожденной или сингулярной.

    С матрицами можно проводить операции сравнения, сложения и умножения.

    Две матрицы $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ считаются равными, если они одного типа, то есть имеют одинаковое число строк и столбцов, и соответствующие элементы их равны $$\{a_{ij}\}=\{b_{ij}\}$$.

    Суммой двух матриц $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ одинакового типа называется матрица $$C=\{c_{ij}\}$$ того же типа, элементы которой равны сумме соответствующих элементов матриц $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$:$$\{c_{ij}\}=\{a_{ij}\}+\{b_{ij}\}$$.

    Разность матриц $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ определяется аналогично: $$\{c_{ij}\}=\{a_{ij}\}+\{b_{ij}\}$$.

    Произведением числа $$\hbar$$ и матрицы $$A=\{a_{ij}\}$$ (или умножением матрицы на число) называется матрица, элементы которой получены умножением всех элементов матрицы $$A=\{a_{ij}\}$$$$A=\{a_{ij}\}$$ на число $$\hbar: \hbar\cdot A=\{\hbar\cdot a_{ij}\}$$.

    Произведением матриц $$A=\{a_{ij}\}$$ размерностью $$m \times n$$ и $$B=\{b_{ij}\}$$ размерностью $$n \times s$$ является матрица $$C=\{c_{ij}\}$$ размерностью $$m \times s$$, каждый элемент которой можно представить формулой $$\{c_{ij}\}=\{a_{i1}b_{1j}+a_{i2}b_{2j}+\dots+a_{in}b_{nj}\}$$, где $$i = 1 . . . m, j = 1 . . . s$$.

    Таким образом, произведение матриц $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ имеет смысл тогда и только тогда, когда количество строк матрицы $$A=\{a_{ij}\}$$ совпадает с количеством столбцов матрицы $$B=\{b_{ij}\}$$. Кроме того, произведение двух матриц не обладает переместительным законом, то есть $$A\cdot B\ne B\cdot A$$. В тех случаях, когда $$A\cdot B = B\cdot A$$, матрицы $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ называются перестановочными.

    Если в матрице $$A=\{a_{ij}\}$$ размерностью $$m \times n$$ заменить строки соответствующими столбцами, то получится транспонированная матрица: $$A^T=\{a_{ji}\}$$.

    В частности, для вектора–строки $$a=\{a_1{ }a_2{ }\dots a_{n}\}$$ транспонированной матрицей является вектор–столбец:

    $$a^T= \begin{pmatrix} a_{11}\cr a_{21}\cr \dots\cr a_{m1} \end{pmatrix}$$

    Обратной матрицей по отношению к данной матрице $$A=\{a_{ij}\}$$ размерностью $$n \times n$$, называется матрица $$A^{-1}=\{a_{ij}\}$$ того же типа, которая, будучи умноженной как справа, так и слева на данную матрицу, в результате даёт единичную матрицу $$E=\{\delta_{ij}\}$$, где $$\delta_{ii}=1, \delta_{ij}=0$$, при $$i\ne j:A\cdot A^{-1}= A^{-1}\cdot A = E$$.

    Нахождение обратной матрицы для данной называется обращением данной матрицы. Всякая неособенная матрица имеет обратную матрицу.

    Перейдём к конкретным примерам.

    Пример 5.2. Для матриц $$A, B$$ и $$C$$ проверить выполнение следующих тождеств:

    $$(A\cdot B)\cdot C=A\cdot (B\cdot C)$$ $$(A^T + B)\cdot C=A^T\cdot C + B\cdot C$$

    Из листинга 5.4 видно, что матрицы, получившиеся в результате вычисления левой и правой частей тождества (5.4), равны, следовательно, первое тождество истинно. Для исследования тождества (5.5) из левой части равенства вычитаем правую и получаем нулевую матрицу, что так же приводит к выводу об истинности тождества.

    	
    >>> A=[1 -2 0; -3 0 4 ]; B=[3 1; 2 0; -1 1 ]; C=[1 2; -1 0 ];
    >>> (A*B) *C % Исследование тождества (5.4)
    ans =
    -2  -2
    -14 -26
    >>> A* (B*C)
    ans =
    -2  -2
    -14 -26
    >>> (A’+B) *C-(A’ * C+B*C) % Исследование тождества (5.5)
    ans =
    	0 0
    	0 0
    	0 0
    

    Пример 5.3. Проверить является ли матрица симметрической. Квадратная матрица называется симметрической, если $$A^T= A$$.

    В листинге 5.5 видно, что в результате вычитания из матрицы $$A$$ транспонированной матрицы $$A^T$$ получена нулевая матрица, то есть тождество выполнено, и заданная матрица — симметрическая.

    	
    >>> A=[1 -0.5 1.5; - 0.50 2.5; 1.5 2.5 -2]; A - A’
    ans =
    0 0 0
    0 0 0
    0 0 0
    

    Пример 5.4. Проверить, является ли матрица кососимметрической. Квадратная матрица называется кососимметрической, если $$A^T= -A$$. Проверив равенство для заданной матрицы (листинг 5.6), убеждаемся в его истинности.

    	
    >>> A=[0 -0.25 0.75; 0.25 0 -1.25; -0.75 1.25 0]; A’+A
    ans =
    	0 0 0
    	0 0 0
    	0 0 0
    

    Пример 5.5. Проверить, является ли матрица ортогональной. Квадратная матрица называется ортогональной, если $$|A|=det A \ne 0$ и $A^T=A^{-1}$$ и $$A^T= A^{-1}$$ .

    Для решения поставленной задачи необходимо вычислить определитель заданной матрицы и убедиться в том, что он не равен нулю. Затем следует транспонировать исходную матрицу и найти матрицу, обратную к ней. Если визуально сложно убедиться в том, что транспонированная матрица равна обратной, можно вычислить их разность. В результате должна получиться нулевая матрица (листинг 5.7).

    	
    >>> A= [ 0.5  0.7071  0.5; 0.7071  0 -0.7071; 0.5 -0.7071  0.5 ]
    A =
    	0.50000  0.70710   0.50000
    	0.70710  0.00000  -0.70710
    	0.50000 -0.70710   0.50000
    >>> det (A) % Определитель матрицы A отличен от нуля
    ans = -0.99998
    >>> A’-inv (A) % При вычитании из транспонированной матрицы A обратной
    % к ней матрицы получаем нулевую матрицу, значит A — ортогональная.
    ans =
    	0.0000e+00   -1.3562e-05  0.0000e+00
    	-1.3562e-05  0.0000e+00   1.3562e-05
    	0.0000e+00   1.3562e-05   0.0000e+00
    

    Пример 5.6. Задана матрица $$A$$. Показать, что матрица $$B = 2A-E$$, где $$E$$ — единичная матрица — инволютивна. Квадратная матрица называется инволютивной, если $$B^2= E$$, где $$E$$ — единичная матрица.

    Решение задачи:

    	
    >>> A=[6 -15;2 -5]; B=2*A -eye ( 2 ); B^2
    ans =
    	1 0
    	0 1
    

    Пример 5.7. Решить матричные уравнения $$A \cdot X = B$$ и $$X \cdot A = B$$, выполнить проверку.

    Матричное уравнение это уравнение вида $$A \cdot X = B$$ или $$X \cdot A = B$$, где $$X$$ это неизвестная матрица. Если умножить матричное уравнение на матрицу обратную к $$A$$, то оно примет вид: $$A^{-1}\cdot A\cdot X=B\cdot A^{-1}$$ или $$X\cdot A\cdot A^{-1}=B\cdot A^{-1}$$. Так как $$A^{-1}\cdot A=A\cdot A^{-1}=E$$, а $$E\cdot X=X\cdot E=X$$, то неизвестную матрицу $$X$$ можно вычислить так:$$X=A^{-1}\cdot B$$ или $$X=B\cdot A^{-1}$$. Понятно, что матричное уравнение имеет единственное решение, если $$A$$ и $$B$$ — квадратные матрицы $$n$$-го порядка, и определитель матрицы $$A$$ не равен нулю. Как решить матричное уравнение в Octave, показано в листинге 5.8.

    	
    >>> A=[ 2 3; -2 6 ]; B=[2 5; 2 / 3 5 / 3 ];
    % Решение уравнения A · X = B
    >>> X=A\B % Первый способ
    X =
    	0.55556   1.38889
    	0.29630   0.74074
    >>> X=inv (A) *B % Второй способ
    X =
    	0.55556 1.38889
    	0.29630 0.74074
    >>> A*X - B % Проверка A · X - B = 0
    ans =
    	0.0000e+00   0.0000e+00
    	-3.3307e-16  -6.6613e-16
    % Решение уравнения X · A = B
    >>> X=B/A % Первый способ
    X =
    	1.222222    0.222222
    	0.407407    0.074074
    >>> X=B* inv (A) % Второй способ
    X =
    	1.222222 0.222222
    	0.407407 0.074074
    >>> X*A - B % Проверка X · A _ B = 0
    ans =
    	0.0000e+00  0.0000e+00
    	1.1102e-16  0.0000e+00
    

    5.6 Решение систем линейных уравнений

    Система m уравнений с $$n$$ неизвестными вида

    $$\left\{ \begin{array}{ccccccccc} a_{11}x_1+a_{12}x_2+\dots+a_{1n}x_n=b_1\\ a_{21}x_1+a_{22}x_2+\dots+a_{2n}x_n=b_2\\ \vdots \vdots \vdots \vdots \vdots\\\ a_{m1}x_1+a_{m2}x_2+\dots+a_{mn}x_n=b_m \end{array} \right.$$

    называется системой линейных алгебраических уравнений (СЛАУ), причём $$x_j$$ — неизвестные, $$a_ij$$ — коэффициенты при неизвестных, $$b_i$$ — свободные коэффициенты $$(i = 1 . . . m, j = 1 . . . n)$$.

    Кроме того, система из m линейных уравнений с $$n$$ неизвестными может быть описана при помощи матриц: $$A \cdot x = b$$, где $$x = \{x_j\}$$ — вектор неизвестных, $$A = \{a_{ij}\}$$ — матрица коэффициентов при неизвестных или матрица системы, $$b = \{b_i\}$$ — вектор свободных членов системы или вектор правых частей $$(i = 1 . . . m, j = 1 . . . n)$$.

    Матрица $$(A|b)$$, которая формируется путём приписывания к матрице коэффициентов $$A$$ столбца свободных членов $$b$$, называется расширенной матрицей системы.

    Если все $$b_i= 0$$, то речь идёт об однородной системе линейных уравнений, иначе говорят о неоднородной системе.

    Совокупность всех решений системы $$(x_1, x_2. . . x_n)$$, называется множеством решений или просто решением системы. Две системы уравнений называются эквивалентными, если они имеют одинаковое множество решений.

    Однородные системы линейных уравнений $$Ax = 0$$ всегда разрешимы, так как последовательность $$(x_1= 0, x_2= 0, . . ., x_n= 0)$$ удовлетворяет всем уравнениям системы. Такое решение называют тривиальным. Вопрос о решении однородных систем сводится к вопросу о том, существуют ли кроме тривиального другие, нетривиальные решения.

    Система линейных уравнений может не иметь ни одного решения и тогда она называется несовместной, например, в системе:

    $$\left\{\begin{aligned}x_1+x_2=1\\x_1+x_2=3\\\end{aligned}\right.$$

    левые части уравнений совпадают, а правые различны, поэтому никакие значения $$x_1$$ и $$x_2$$ не могут удовлетворить обоим уравнениям сразу.

    Если же система линейных уравнений обладает решением, то она называется совместной. Совместная система называется определённой, если она обладает одним единственным решением, и неопределённой, если решений больше чем одно. Так, система:

    $$\left\{ \begin{aligned} x_1+2x_2=7\\ x_1+x_2=6 \end{aligned} \right.$$

    определена и имеет единственное решение $$x_1= 5, x_2= 1$$, а система уравнений:

    $$\left\{ \begin{aligned} 3x_1-x_2=1\\ 6x_1-2x_2=2 \end{aligned} \right.$$

    неопределена, так как имеет бесконечное множество решений вида $$x_1 = k, x_2= 3k-1$$, где число $$k$$ произвольно.

    Совокупность всех решений неопределённой системы уравнений называется её общим решением, а какое–то одно конкретное решение — частным. Частное решение, полученное из общего при нулевых значениях свободных переменных, называется базисным.

    При определении совместности систем уравнений важную роль играет понятие ранга матрицы. Пусть дана матрица $$A$$ размером $$n \times m$$. Вычёркиванием некоторых строк или столбцов из неё можно получить квадратные матрицы $$k$$-го порядка, определители которых называются минорами порядка $$k$$ матрицы $$A$$. Наивысший порядок не равных нулю миноров матрицы $$A$$ называют рангом матрицы и обозначают $$r(A)$$. Из определения вытекает, что $$r(A) \le min(n, m)$$, а $$r(A) = 0$$, только если матрица нулевая и $$r(A) = n$$ для невырожденной матрицы $$n$$-го порядка. При элементарных преобразованиях (перестановка строк матрицы, умножение строк на число отличное от нуля и сложение строк) ранг матрицы не изменяется. Итак, если речь идёт об исследовании системы на совместность, следует помнить, что система $$n$$ линейных уравнений с $$m$$ неизвестными:

  • несовместна, если $$r(A|b) > r(A)$$;
  • совместна, если $$r(A|b) = r(A)$$, причём при $$r(A|b) = r(A) = m$$ имеет единственное решение, а при $$r(A|b) = r(A) <m$$ имеет бесконечно много решений.
  • Существует немало мето дов для практического отыскания решений систем линейных уравнений. Эти методы разделяют на точные и приближённые. Метод относится к классу точных, если с его помощью можно найти решение в результате конечного числа арифметических и логических операций. В этом разделе на конкретных примерах будут рассмотрены только точные методы решения систем.

    Пример 5.8. Решить систему линейных уравнений

    $$\left\{ \begin{array}{rcrcrcr} 2x_1-x_2+5x_3=1\\ 3x_1+2x_2-5x_3=1\\ x_1+x_2-2x_3=4 \end{array} \right.$$

    при помощи правила Крамера.

    Правило Крамера заключается в следующем. Если определитель $$detA$$ матрицы системы $$Ax = b$$ из $$n$$ уравнений с $$n$$ неизвестными отличен от нуля, то система имеет единственное решение $$(x_1, x_2, . . ., x_n)$$, определяемое по формулам Крамера $$x_i=\frac{det_i}{det}$$, где $$det_i$$ — определитель матрицы, полученной из матрицы системы $$A$$ заменой $$i$$-го столбца столбцом свободных членов $$b$$. Если определитель матрицы системы равен нулю, это не означает, что система не имеет решений: возможно, её нельзя решить по формулам Крамера.

    Итак, для решения поставленной задачи необходимо выполнить следующие действия:

  • представить систему в матричном виде, то есть сформировать матрицу системы $$A$$ и вектор правых частей $$b$$;
  • вычислить главный определитель $$detA$$;
  • сформировать вспомогательные матрицы для вычисления определителей $$det_i$$;
  • вычислить определители $$det_i$$;
  • найти решение системы по формуле $$x_i=\frac{det_i}{det}$$.
  • Листинг 5.9 содержит решение поставленной задачи.

    	
    >>> disp( ’Решение СЛАУ методом Крамера’ );
    >>> disp( ’Матрица системы:’ ); A=[2 -1 5; 3 2 -5;1 1 -2]
    >>> disp( ’Вектор свободных коэффициентов:’ ); b = [ 0; 1; 4 ]
    >>> disp( ’Главный определитель:’ ); D=det (A)
    >>> disp( ’Вспомогательные матрицы:’ );
    >>> A1=A; A1( :, 1 )=b
    >>> A2=A; A2( :, 2 )=b
    >>> A3=A; A3( :, 3 )=b
    >>> disp( ’Вспомогательные определители:’ );
    >>> d( 1 )=det (A1);
    >>> d( 2 )=det (A2);
    >>> d( 3 )=det (A3);
    >>> d
    >>> disp( ’Вектор решений СЛАУ Ax=b’ ); x=d/D
    >>> disp( ’Проверка Ax-b=0’ ); A* x’-b
    % _______________________________
    Решение СЛАУ методом Крамера
    Матрица системы:
    A =
    	2 -1  5
    	3  2 -5
    	1  1 -2
    Вектор свободных коэффициентов:
    b =
    	0
    	1
    	4
    Главный определитель:
    D = 6 . 0 0 0 0
    Вспомогательные матрицы:
    A1 =
    	0 -1  5
    	1  2 -5
    	4  1 -2
    A2 =
    	2 0  5
    	3 1 -5
    	1 4 -2
    A3 =
    	2 -1 0
    	3  2 1
    	1  1 4
    Вспомогательные определители:
    d = -17.000   91.000    25.000
    Вектор решений СЛАУ Ax=b
    x = -2.8333   15.166    74.1667
    Проверка Ax-b=0
    ans =
    -4.4409e-15
    3.5527e-15
    8.8818e-16
    

    Решение СЛАУ по формулам Крамера выглядит достаточно громоздко, поэтому на практике его используют довольно редко.

    Пример 5.9. Решить систему линейных уравнений 5.6 из примера 5.8 методом обратной матрицы.

    Метод обратной матрицы: для системы из $$n$$ линейных уравнений с $$n$$ неизвестными $$Ax = b$$, при условии, что определитель матрицы $$A$$ не равен нулю, единственное решение можно представить в виде $$x = A^{-1}b$$ (вывод формулы см. в примере 5.7).

    Итак, для того, чтобы решить систему линейных уравнений методом обратной матрицы, необходимо выполнить следующие действия:

  • сформировать матрицу коэффициентов и вектор свободных членов заданной системы;
  • решить систему, представив вектор неизвестных как произведение матрицы обратной к матрице системы и вектора свободных членов (листинг 5.10).
  • 	
    >>> disp ( ’Решение СЛАУ методом обратной матрицы’ );
    >>> disp ( ’Матрица системы:’ );
    >>> A=[2 -1 5; 3 2 -5;1 1 -2]
    >>> disp ( ’Вектор свободных коэффициентов:’ );
    >>> b = [ 0; 1; 4 ]
    >>> disp ( ’Вектор решений СЛАУ Ax=b’ );
    >>> x=A^( -1) * b
    >>> disp ( ’Вектор решений СЛАУ Ax=b с помощью функции inv(A)’ );
    >>> x=inv (A) * b
    >>> disp ( ’Проверка Ax=b’ );
    >>> A*x
    % ______________________________________
    Решение СЛАУ методом обратной матрицы
    Матрица системы:
    A =
    	2 -1  5
    	3  2 -5
    	1  1 -2
    Вектор свободных коэффициентов:
    b =
    	0
    	1
    	4
    Вектор решений СЛАУ Ax=b
    x =
    	-2.8333
    	15.1667
    	4.1667
    Вектор решений СЛАУ Ax=b с помощью функции inv(A)
    x =
    	-2.8333
    	15.1667
    	4.1667
    Проверка Ax-b=0
    ans =
    -5.3291e-15
    1.0000e+00
    4.0000e+00
    

    Пример 5.10. Решить систему линейных уравнений

    $$\left\{ \begin{array}{ccccccccc} 2x_1+x_2-5x_3+x_4=8\\ x_1-3x_2-6x_4=9\\ 2x_2-x_3+2x_4=-5\\ x_1+4x_2-7x_3+6x_4=0 \end{array} \right.$$

    методом Гаусса.

    Решение системы линейных уравнений при помощи метода Гаусса основывается на том, что от заданной системы переходят к эквивалентной системе, которая решается проще, чем исходная система.

    Метод Гаусса состоит из двух этапов. Первый этап — это прямой ход, в результате которого расширенная матрица системы путём элементарных преобразований (перестановка уравнений системы, умножение уравнений на число отличное от нуля и сложение уравнений) приводится к ступенчатому виду:

    $$\left( \begin{matrix} a_{11} a_{12} \dots a_{1n}\cr a_{21} a_{22} \dots a_{2n}\cr \dots \dots \dots \dots \cr a_{n1} a_{n2} \dots a_{nn} \end{matrix} \right| \left. \begin{matrix} b_1\cr b_2\cr \dots\cr b_n \end{matrix} \right) \Rightarrow \left( \begin{matrix} 1 c_{12} \dots c_{1n}\cr 0 1 \dots c_{2n}\cr \dots \dots \dots \dots\cr 0 0 \dots 1 \end{matrix} \right| \left. \begin{matrix} d_1\cr d_2\cr \dots\cr d_n \end{matrix} \right)$$

    На втором этапе (обратный ход) ступенчатую матрицу преобразовывают так, чтобы в первых n столбцах получилась единичная матрица:

    $$\left( \begin{matrix} 1 0 \dots 0\cr 0 1 \dots 0\cr \dots \dots \dots \dots\cr 0 0 \dots 1 \end{matrix} \right.\left| \begin{matrix} x_1\cr x_2\cr \dots\cr x_n \end{matrix} \right)$$

    Последний, $$n + 1$$ столбец этой матрицы содержит решение системы линейных уравнений.

    Исходя из выше изложенного, порядок решения задачи в Octave (листинг 5.11) следующий:

  • сформировать матрицу коэффициентов $$A$$ и вектор свободных членов $$b$$ заданной системы;
  • сформировать расширенную матрицу системы, объединив $$A$$ и $$b$$;
  • используя функцию $$rref$$ привести расширенную матрицу к ступенчатому виду;
  • найти решение системы, выделив последний столбец матрицы, полученной в предыдущем пункте;
  • выполнить вычисление $$Ax - b$$, если в результате получился нулевой вектор, задача решена верно.
  • 	
    >>> disp( ’Решение СЛАУ методом Гаусса’ );
    >>> disp( ’Матрица системы:’ ); A=[21 - 51; 1 - 30 - 6; 02 - 12; 14 - 76 ]
    >>> disp( ’Вектор свободных коэффициентов:’ ); b = [ 8; 9; - 5; 0 ]
    >>> disp( ’Расширенная матрица системы:’ ); C=rref( [A b ] )
    >>> disp( ’Размерность матрицы C:’ ); n=size(C)
    >>> disp( ’Вектор решений СЛАУ Ax=b’ ); x=C( :, n ( 2 ) )
    >>> disp( ’Проверка Ax-b’ ); A* x-b
    % _________________________________
    Решение СЛАУ методом Гаусса
    Матрица системы:
    A =
    	2  1 -5  1
    	1 -3  0 -6
    	0  2 -1  2
    	1  4 -7  6
    Вектор свободных коэффициентов:
    b =
    	 8
    	 9
    	-5
    	 0
    Расширенная матрица системы:
    C =
    	1.00000 0.00000 0.00000 0.00000 3.00000
    	0.00000 1.00000 0.00000 0.00000 -4.00000
    	0.00000 0.00000 1.00000 0.00000 -1.00000
    	0.00000 0.00000 0.00000 1.00000 1.00000
    Размерность матрицы С:
    n = 4 5
    Вектор решений СЛАУ Ax=b
    x =
    	 3.00000
    	-4.00000
    	-1.00000
    	 1.00000
    Проверка Ax-b
    ans =
    	 0.0000e+00
    	 1.7764e-15
    	-8.8818e -16
    	-1.6653e -15
    

    Пример 5.11. Решить систему линейных уравнений из примера 5.10 с помощью $$LU$$ -разложения.

    Дадим определение разложения матрицы на множители. Если все определители квадратной матрицы $$A$$ отличны от нуля, то существуют такие нижняя $$L$$ и верхняя $$U$$ треугольные матрицы, что $$A = LU$$:

    $$\begin{pmatrix} a_{11} a_{12} \dots a_{1n}\cr a_{21} a_{22} \dots a_{2n}\cr \dots \dots \dots \dots \cr a_{n1} a_{n2} \dots a_{nn} \end{pmatrix} = \begin{pmatrix} 1 0 \dots 0\cr l_{21} 1 \dots 0\cr \dots \dots \dots \dots \cr l_{n1} l_{n2} \dots 1 \end{pmatrix} \cdot \begin{pmatrix} u_{11} u_{12} \dots u_{1n}\cr 0 u_{22} \dots u_{2n}\cr \dots \dots \dots \dots \cr 0 0 \dots u_{nn} \end{pmatrix}$$

    Если диагональные элементы одной из матриц ненулевые, то такое разложение единственно.

    Метод решения системы линейных уравнений с использованием разложения матрицы коэффициентов на множители называют LU–разложением или LU–факторизацией.

    Если матрица $$A$$ исходной системы $$Ax = b$$ разложена в произведение треугольных матриц $$L$$ и $$U$$, то можно записать уравнение:$$LUx = b$$.

    Введя вектор вспомогательных переменных $$y=(y_1,y_2,\dots,y_n)^T$$, уравнение $$LUx = b$$ можно переписать в виде системы:$$\left\{\begin{matrix}Ly=b\\Ux=y\end{matrix}\right$$.

    Таким образом решение системы $$Ax = b$$ с квадратной матрицей коэффициентов свелось к последовательному решению двух систем с треугольными матрицами коэффициентов.

    Обратим внимание на тот факт, что выполнение приведённых расчётов можно интерпретировать как преобразование данной системы к треугольной. Иными словами, LU–разложение это другая схема реализации метода Гаусса.

    Исходя из средств, которыми располагает Octave, решение поставленной задачи будет выглядеть так (листинг 5.12):

  • сформируем матрицу коэффициентов $$A$$ и вектор свободных членов $$b$$ заданной системы;
  • воспользовавшись функцией $$lu(A)$$, получим матрицы $$L$$ (нижняя треугольная матрица), $$U$$ (верхняя треугольная матрица) и $$P$$ (матрица перестановок или иначе, матрица, которая демонстрирует, каким образом были переставлены строки исходной матрицы при разложении на множители $$L$$ и $$U$$);
  • поскольку в задаче речь идёт о решении системы, то элементы вектора $$b$$ должны занять места соответствующие строкам матрицы $$A$$, для чего необходимо выполнить действие $$Pb$$;
  • решим системы уравнений $$Ly = b$$ относительно $$y$$;
  • зная $$U$$ и $$y$$, найдём решение системы $$Ux = y$$.
  • 	
    >>> disp( ’Решение СЛАУ методом LU-разложения’ );
    >>> disp( ’Матрица системы:’ ); A=[21 - 51; 1 - 30 - 6; 02 - 12; 14 - 76 ]
    >>> disp( ’Вектор свободных коэффициентов:’ ); b = [ 8; 9; - 5; 0 ]
    >>> disp( ’LU-разложение:’ ); [ L, U, P]= lu (A)
    >>> Y=rref( [ L P* b ] )
    >>> n=size(Y)
    >>> y=Y( :, n ( 2 ) )
    >>> X=rref( [U y ] )
    >>> n=size(X)
    >>> x=X( :, n ( 2 ) )
    >>> disp( ’Проверка Ax-b’ ); A* x-b
    % ___________________________________
    Решение СЛАУ методом LU-разложения
    Матрица системы:
    A =
    	2  1 -5  1
    	1 -3  0 -6
    	0  2 -1  2
    	1  4 -7  6
    Вектор свободных коэффициентов:
    b =
    		 8
    		 9
    		-5
    		 0
    LU-разложение:
    L =
    	1.00000  0.00000  0.00000  0.00000
    	0.50000  1.00000  0.00000  0.00000
    	0.50000  -1.00000 1.00000  0.00000
    	0.00000  -0.57143 -0.21429 1.00000
    U =
    	2.00000 1.00000  -5.00000 1.00000
    	0.00000 -3.50000  2.50000 -6.50000
    	0.00000 0.00000  -2.00000 -1.00000
    	0.00000 0.00000  0.00000  -1.92857
    P =
    Permutation Matrix
    	1 0 0 0
    	0 1 0 0
    	0 0 0 1
    	0 0 1 0
    Y =
    	1.00000 0.00000 0.00000 0.00000 8.00000
    	0.00000 1.00000 0.00000 0.00000 5.00000
    	0.00000 0.00000 1.00000 0.00000 1.00000
    	0.00000 0.00000 0.00000 1.00000 -1.92857
    n = 4  5
    y =
    	 8.0000
    	 5.0000
    	 1.0000
    	-1.9286
    X =
    	1.00000 0.00000 0.00000 0.00000 3.00000
    	0.00000 1.00000 0.00000 0.00000 -4.00000
    	0.00000 0.00000 1.00000 0.00000 -1.00000
    	0.00000 0.00000 0.00000 1.00000 1.00000
    n = 4   5
    x =
    	 3.0000
    	-4.0000
    	-1.0000
    	 1.0000
    Проверка Ax-b
    ans =
    	 0.0000e+00
    	 0.0000e+00
    	-8.8818e-16
    	 6.6613e-16
    

    Пример 5.12. Решить систему линейных уравнений

    $$\left\{ \begin{array}{rcrcrcrcr} 3x_1+x_2-x_3+2x_4=6\\ -5x_1+x_2+3x_3-4x_4=-12\\ 2x_1+x_3-x_4=1\\ x_1-5x_2+3x_3+3x_4=3 \end{array} \right.$$

    с помощью $$QR$$–разложения.

    Квадратную матрицу $$A$$ можно представить в виде произведения ортогональной матрицы $$Q$$ и верхней треугольной матрицы $$R$$. Использование этого свойства матриц при решении системы линейных уравнений называют методом QR–разложения.

    Идея решения системы этим методом аналогична той, что была описана в предыдущей задаче:

    Ax = b -> QRx = b -> (Qy = b, Rx = y).

    Таким образом, решение системы уравнений с квадратной матрицей коэффициентов сводится к решению двух систем, матрица коэффициентов первой ортогональная, второй — верхняя треугольная.

    Как решить эту задачу средствами Octave, показано в листинге 5.13.

    	
    >>> disp ( ’Решение линейной системы с помощью QR–разложения’ );
    >>> A=[3,1, -1,2; -5,1,3, -4;2,0,1, -1;1, -5,3, -3]
    >>> b = [ 6; - 1 2; 1; 3 ]
    >>> [Q,R]= qr (A)
    >>> y=Q’ _ b
    >>> X=rref ( [R y ] )
    >>> x=X( 1 : 4, 5 : 5 )
    % ____________________________________
    Решение линейной системы с помощью QR–разложения
    A =
    	3   1 -1  2
    	-5  1  3 -4
    	2   0  1 -1
    	1  -5  3 -3
    b =
    	 6
    	-12
    	 1
    	 3
    Q =
    	0.480384   0.303216   0.358483  0.740797
    	-0.800641  0.020214   0.545518  0.246932
    	0.320256   0.070750   0.735670  -0.592638
    	0.160128   -0.950077  0.180800  0.197546
    R =
    	6.24500  -1.12090  -2.08167  3.36269
    	0.00000  5.07381   -3.02205  3.30505
    	0.00000  0.00000   2.55614   -2.74318
    	0.00000  0.00000   0.00000   0.49386
    y =
    	 13.2906
    	-1.2028
    	-3.1172
    	 1.4816
    X =
    	1.00000  0.00000  0.00000  0.00000  1.00000
    	0.00000  1.00000  0.00000  0.00000  -1.00000
    	0.00000  0.00000  1.00000  0.00000  2.00000
    	0.00000  0.00000  0.00000  1.00000  3.00000
    x =
    	 1.00000
    	-1.00000
    	 2.00000
    	 3.00000
    

    Пример 5.13. Исследовать систему на совместность и если возможно решить её:

    $$\text{а)} \left\{ \begin{array}{rcrcrcr} x_1+2x_2+2x_3=-9\\ x_1-x_2+x_3=2\\ 3x_1-6x_2-x_3=25 \end{array} \right.\cr \text{б)} \left\{ \begin{array}{rcrcrcrcr} x_1-5x_2-8x_3+x_4=3\\ 3x_1+x_2-3x_3-5x_4=1\\ x_1-7x_2+2x_4=-5\\ 11x_2+20x_3-9x_4=2 \end{array} \right.\cr \text{в)} \left\{ \begin{array}{rcrcrcrcr} 4x_1+x_2-3x_3-x_4=0\\ 2x_1+3x_2+x_3-5x_4=0\\ x_1-2x_2-2x_3+3x_4=0 \end{array} \right.$$

    Для решения задачи (листинг 5.14) введём исходные данные, то есть матрицу коэффициентов системы и вектор правых частей. Затем выполним вычисление рангов матрицы коэффициентов и расширенной матрицы системы.

    В случае а) ранги матриц равны и совпадают с количеством неизвестных $$r(A|b) = r(A) = 3$$, значит, система совместна и имеет единственное решение. Вычисление рангов матрицы системы и расширенной матрицы системы б) показывает, что ранг расширенной матрицы больше ранга матрицы системы $$r(A|b) > r(A)$$, что означает несовместность системы. В процессе вычислений для системы в) выясняется, что ранг расширенной матрицы равен рангу матрицы системы $$r(A|b) = r(A) = 3$$, но меньше, чем количество неизвестных системы $$r(A|b) = r(A) < 4$$. Значит, система совместна, но имеет бесконечное множество решений.

    		
    disp( ’Исследование системы на совместность’ );
    disp( ’Введите матрицу системы:’ ); A=input ( ’A=’ );
    disp( ’Введите вектор свободных коэффициентов:’ ); b=input ( ’b=’ );
    disp( ’Размерность системы:’ ); [ n,m]= size (A)
    disp( ’Ранг матрицы системы:’ ); r= rank (A)
    disp( ’Ранг расширенной матрицы:’ ); R= rank ( [A b ] )
    if r==R
    disp( ’Система совместна.’ );
    if r==m
    	disp( ’Система имеет единственное решение.’ );
    	disp( ’Решение системы методом обратной матрицы:’ ); x=inv (A) _ b
    	disp( ’Проверка Ax-b=0:’ ); A_ x_b
    else
    	disp( ’Система имеет бесконечно много решений.’ )
    end;
    else
    disp( ’Система не совместна’ );
    end;
    % Исследование системы а)
    Исследование системы на совместность
    Введите матрицу системы:
    A= [ 1 2 5; 1 -1 3; 3 -6 -1]
    Введите вектор свободных коэффициентов:
    b= [ - 9; 2; 25 ]
    Размерность системы:
    n = 3
    m = 3
    Ранг матрицы системы:
    r = 3
    Ранг расширенной матрицы:
    R = 3
    Система совместна.
    Система имеет единственное решение.
    Решение системы методом обратной матрицы:
    x =
    	 2.0000
    	-3.0000
    	-1.0000
    Проверка Ax-b=0:
    ans =
    	0.0000e+00
    	8.8818e-16
    	3.5527e-15
    % Исследование системы б)
    Исследование системы на совместность
    Введите матрицу системы:
    A= [ 1 -5 -8 1; 3 1 -3 -5;1 0 -7 2; 0 11 20 -9]
    Введите вектор свободных коэффициентов:
    b= [ 3; 1; - 5; 2 ]
    Размерность системы:
    n = 4
    m = 4
    Ранг матрицы системы:
    r = 3
    Ранг расширенной матрицы:
    R = 4
    Система не совместна
    % Исследование системы в)
    Исследование системы на совместность
    Введите матрицу системы:
    A= [ 4 1 -3 -1;2 3 1 -5;1 -2 -2 4 ]
    Введите вектор свободных коэффициентов:
    b= [ 0; 0; 0 ]
    Размерность системы:
    n = 3
    m = 4
    Ранг матрицы системы:
    r = 3
    Ранг расширенной матрицы:
    R = 3
    Система совместна.
    Система имеет бесконечное множество решений.
    

    5.7 Собственные значения и собственные векторы

    Пусть $$A$$ — матрица размерностью $$n \times n$$. Любой ненулевой вектор $$x$$, принадлежащий некоторому векторному пространству, для которого $$Ax=\lambda x$$, где λ — некоторое число, называется собственным вектором матрицы, а λ — принадлежащим ему или соответствующим ему собственным значением матрицы A.

    Уравнение $$Ax = \lambda x$$ эквивалентно уравнению $$(A - \lambda E)x = 0$$. Это однородная система линейных уравнений, нетривиальные решения которой являются искомыми собственными векторами. Она имеет нетривиальные решения только тогда, когда $$r(A - \lambda E) < n$$, то есть, если $$det(A - \lambda E) = 0$$. Многочлен $$det(A - \lambda E)$$ называется характеристическим многочленом матрицы A, а уравнение $$det(A - \lambda E) = 0$$ — характеристическим уравнением матрицы A. Если $$\lambda_i$$ — собственные значения $$A$$, то нетривиальные решения однородной системы линейных уравнений $$det(A - \lambda E) = 0$$ есть собственные векторы A, принадлежащие собственному значению $$\lambda_i$$. Множество решений этой системы уравнений называют собственным подпространством матрицы A, принадлежащим собственному значению $$\lambda_i$$, каждый ненулевой вектор собственного подпространства является собственным вектором матрицы A.

    Иногда требуется найти собственные векторы y и собственные значения $$\hbar$$, определяемые соотношением $$Ay=\hbar By, (y\ne 0)$$, где $$B$$ — невырожденная матрица. Векторы $$y$$ и числа $$\hbar$$ обязательно являются собственными векторами и собственными значениями матрицы $$B^{-1}A$$. Пусть $$A=a_{ij}$$ и $$B=b_{ij}$$, причём матрица $$B$$ является положительно определённой, тогда собственные значения $$\hbar$$ совпадают с корнями уравнения $$n$$–й степени $$det(A-\hbar B)=det(a_{ij}-\hbar b_{ij}=0$$. Это уравнение называют характеристическим уравнением для обобщённой задачи о собственных значениях. Для каждого корня $$\hbar$$ кратности $$m$$ существует ровно $$m$$ линейно независимых собственных векторов $$y$$.

    Пример 5.14. Найти собственные значения и собственные векторы матрицы $$A$$.

    В листинге 5.15 показано решение поставленной задачи.

    	
    disp( ’Введите матрицу:’ ); A=input ( ’A=’ ); [ n,m]= size (A);
    disp( ’Вектор собственных значений матрицы A:’ ); d=eig (A)
    [ L, D]= eigA);
    disp( ’L - Матрица собственных векторов:’ ); L
    disp( ’D - Диагональная матрица собственных значений:’ ); D
    disp( ’Проверка:’ );
    for i =1:n
    	(A - D( i, i ) * eye ( n ) ) *L ( :, i )
    end;
    % _____________________________________
    Введите матрицу:
    A= [ 5 2 -1;1 -3 2; 4 5 -3]
    Вектор собственных значений матрицы A:
    d =
    	 4.9083e+00
    	-2.1495e-16
    	-5.9083e+00
    L - Матрица собственных векторов:
    L =
    	-0.796113  -0.049326  0.181303
    	-0.241044  0.542590   -0.598803
    	-0.555069  0.838548   0.780106
    D - Диагональная матрица собственных значений:
    D =
    Diagonal Matrix
    	4.9083e+00    0             0
    	0             -2.1495e-16   0
    	0             0             -5.9083e+00
    Проверка:
    ans =
    	-2.3657e-16
    	-4.3585e-16
    	 7.4420e-16
    ans =
    	 2.7756e-17
    	-4.1633e-16
    	 4.4409e-16
    ans =
    	2.0632e-16
    	1.5772e-15
    	2.6606e-16
    

    Пример 5.15. Привести заданную матрицу к диагональному виду.

    Задача состоит в том, чтобы для квадратной матрицы $$A$$ подобрать такую матрицу $$C$$, чтобы матрица $$B = C^{-1} AC$$ имела диагональный вид. Эта задача связана с теорией собственных значений, так как разрешима только в том случае, если матрица $$C$$ состоит из собственных векторов матрицы $$A$$.

    В листинге 5.16 приведено решение поставленной задачи.

    	
    disp( ’Введите матрицу:’ ); A=input ( ’A=’ );
    format bank;
    [ C,D]= eig (A);
    disp( ’Диагональная матрица к матрице А:’ ); D
    disp( ’Проверка B=D’ ); B=inv (C) *A*C
    % _____________________________________
    Введите матрицу:
    A= [ 2 1 3; 1 -2 1; 3 2 2 ]
    Диагональная матрица к матрице А:
    D =
    Diagonal Matrix
    	5.41     0        0
    	0 		 -1.00    0
    	0        0        -2.41
    Проверка B=D
    B =
    	5.41   -0.00   -0.00
    	0.00   -1.00   0.00
        -0.00  -0.00   -2.41
    

    Пример 5.16. Найти решение обобщённой задачи о собственных значениях для матриц $$A$$ и $$B$$.

    Обобщённую задачу о собственных значениях (листинг 5.17) решают при помощи функции $$eig(A, B)$$, которая в качестве результата выдаёт матрицу обобщённых собственные векторов и диагональную матрицу, содержащую обобщённые собственные значения.

    	
    disp( ’Введите матрицу А:’ ); A=input ( ’A=’ );
    disp( ’Введите матрицу В:’ ); B=input ( ’B=’ );
    [ X,V]= eig (A,B);
    disp( ’Матрица обобщённых собственных векторов:’ ); X
    disp( ’Матрица обобщённых собственных значений:’ ); V
    disp( ’Обобщённые собственные значения:’ ); v=diag (V)
    % _____________________________________
    Введите матрицу А:
    A= [ 1 -3;-3 4 ]
    Введите матрицу В:
    B= [ 1 2; -3 1 ]
    Матрица обобщённых собственных векторов:
    X =
    	1.00   0.92
    	0.00   1.00
    Матрица, содержащая обобщённые собственные значения:
    V =
    Diagonal Matrix
    	1.00    0
    	0       -0.71
    Обобщённые собственные значения:
    v =
    	1.00
    	-0.71
    

    5.8 Норма и число обусловленности матрицы

    Матричная норма — это некоторая скалярная числовая характеристика, которую ставят в соответствие матрице. В задачах линейной алгебры используются различные матричные нормы:

  • первая норма $$\|A\|_1$$ квадратной матрицы $$A=\{a_{ij}\}$$: $$\|A\|_1=max\sum^n_{i=1}|a_{ij}|\text{;}$$
  • вторая норма $$\|A\|_2$$ квадратной матрицы $$A=\{a_{ij}\}$$:$$\|A\|_2=\sqrt{\lambda_{max}(AA^T)}\text{,}$$, где $$\sqrt{\lambda_{max}(AA^T)}$$ — максимальное собственное значение матрицы $$A=\{a_{ij}\}$$;
  • евклидова норма $$\|A\|_e$$ квадратной матрицы $$A=\{a_{ij}\}$$:$$\|A\|_e=\sqrt{\sum^n_{i=1}\sum^n_{j=1}|a_{ij}|^2}\text{;}$$
  • бесконечная норма $$\|A\|_i$$ квадратной матрицы $$A=\{a_{ij}\}$$:$$\|A\|_i=max\sum^n_{j=1}|a_{ij}|\text{.}$$
  • Число обусловленности матрицы A используется для определения меры чувствительности системы линейных уравнений $$Ax = b$$ к погрешностям задания вектора $$b$$. Чем больше число обусловленности, тем более неустойчив процесс нахождения решения системы. Существует несколько вариантов вычисления числа обусловленности, но все они связаны с нормой матрицы, и равны произведению нормы исходной матрицы на норму обратной:

  • число обусловленности матрицы, вычисленное в норме $$\|A\|_1:N=\|A\|_1\cdot \|A^{-1}\|_1$$;
  • число обусловленности матрицы, вычисленное в норме $$\|A\|_2:M=\|A\|_2\cdot \|A^{-1}\|_2$$;
  • число обусловленности матрицы, вычисленное в норме $$\|A\|_i:P=\|A\|_i\cdot \|A^{-1}\|_i$$;
  • число обусловленности матрицы, вычисленное в норме $$\|A\|_e:H=\|A\|_e\cdot \|A^{-1}\|_e$$.
  • Пример 5.17. Вычислить нормы и числа обусловленности матрицы A.

    В листинге 5.18 приведён фрагмент документа, в котором происходит вычисление норм матрицы A с помощью функции $$norm$$ и по соответствующим формулам. Вычисление чисел обусловленности проведено при помощи функции $$cond(A)$$ и по формулам, отражающим зависимость числа обусловленности от соответствующей нормы матрицы.

    	
    disp( ’Введите матрицу:’ ); A=input ( ’A=’ ); [ n,m]= size (A);
    disp( ’Первая норма:’ ); n_1= norm(A, 1 )
    N_1= max(sum( abs (A) ) )
    disp ( ’Вторая норма:’ ); n_2= norm(A, 2 )
    N_2= sqrt(max( eig (A*A’ ) ) )
    disp( ’Бесконечная норма:’ ); n_i= norm(A, inf )
    N_i= max(sum( abs (A’ ) ) )
    disp( ’Евклидова норма:’ ); n_e= norm(A, ’fro’ )
    N_e= sqrt(sum( diag (A*A’ ) ) )
    disp( ’Число обусловленности в первой норме:’ ); c_1= cond (A, 1 )
    C_1= norm(A, 1 ) *norm( inv (A), 1 )
    disp ( ’Число обусловленности во второй норме:’ ); c_2= cond (A, 2 )
    C_2= norm(A, 2 ) *norm( inv (A), 2 )
    disp ( ’Число обусловленности в бесконечной норме:’ ); c_i= cond (A, inf )
    C_i= norm(A, inf ) *norm( inv (A), inf )
    disp ( ’Число обусловленности в евклидовой норме:’ ); c_e= cond (A, ’fro’ )
    C_e= norm(A, ’fro’ ) *norm( inv (A), ’fro’ )
    % _____________________________________
    Введите матрицу:
    A= [ 5 7 6 5; 7 10 8 7; 6 8 10 9; 5 7 9 10 ]
    Первая норма:
    n_1 = 33.00
    N_1 = 33.00
    Вторая норма:
    n_2 = 30.29
    N_2 = 30.29
    Бесконечная норма:
    n_i = 33.00
    N_i = 33.00
    Евклидова норма:
    n_e = 30.55
    N_e = 30.55
    Число обусловленности в первой норме:
    c_1 = 4488.00
    C_1 = 4488.00
    Число обусловленности во второй норме:
    c_2 = 2984.09
    C_2 = 2984.09
    Число обусловленности в бесконечной норме:
    c_i = 4488.00
    C_i = 4488.00
    Число обусловленности в евклидовой норме:
    c_e = 3009.58
    C_e = 3009.58
    

    5.9 Задачи линейной алгебры в символьных вычислениях

    Основы работы с символьными переменными в Octave описаны в п. 2.7. Рассмотрим работу с матрицами, заданными в символьных переменных и выражениях. Для определения символьной матрицы служит функция $$ex_matrix$$(число строк, число столбцов, элементы матрицы).

    Например:

    					
    >>> symbols
    >>> a = sym( "a" ); % Определение символьных переменных
    >>> b = sym( "b" );
    >>> c = sym( "c" );
    >>> d = sym( "d" );
    >>> Matr=ex_matrix( 1, 3, a, b, c ) % Матрица строка
    Matr = [ [ a, b, c ] ]
    >>> Matr=ex_matrix( 4, 1, a, b, c, d ) % Матрица столбец
    Matr = [ [ a ], [ b ], [ c ], [ d ] ]
    >>> Matr=ex_matrix( 2, 2, a, b, c, d ) % Матрица 2 на 2
    Matr = [ [ a, b ], [ c, d ] ]
    >>> Matr=ex_matrix( 3, 3, a, 0, b, c, 1, 1, d, 0, 2 ) % Матрица 3 на 3
    Matr = [ [ a, 0.0, b ], [ c, 1.0, 1.0 ], [ d, 0.0, 2.0 ] ]
    

    Над символьными матрицами определены операции сложения, вычитания, умножения.

    Пример 5.18. Выполнить действия над матрицами (листинг 5.19).

    	
    >>> symbols
    >>> a = sym ( "a" ); % Определение символьных переменных
    >>> b = sym ( "b" );
    >>> c = sym ( "c" );
    >>> d = sym ( "d" );
    % Определение матриц
    >>> A=ex_matrix ( 2, 2, a, b, c, d )
    A = [ [ a, b ], [ c, d ] ]
    >>> B=ex_matrix ( 2, 2, d, b, c, a )
    B = [ [ d, b ], [ c, a ] ]
    >>> C=A+B
    C = [ [ d+a, 2 * b ], [ 2 * c, d+a ] ]
    >>> D=A _ B
    D = [[ -d+a, 0 ], [ 0, d-a ] ]
    >>> C_D
    ans = [ [ - ( d -a ) * ( d+a ), 2 * ( d -a ) * b ], [ - 2 * ( d -a ) * c, ( d-a ) * ( d+a ) ] ]
    

    К сожалению над символьными матрицами не определены операции вычисления определителя и обратной матрицы.

    Для решения системы линейных алгебраических уравнений можно воспользоваться функцией $$symlsolve$$.

    Пример 5.19. Решить систему линейных алгебраических уравнений $$\left\{\begin{aligned} ax+by=c\\x+y=d\end{aligned}\right.$$ относительно переменных x и y (листинг 5.20).

    	
    >>> x = sym( "x" );
    >>> y = sym( "y" );
    >>> a = sym( "a" );
    >>> b = sym( "b" );
    >>> c = sym( "c" );
    >>> d = sym( "d" );
    >>> sols = symlsolve({ a * x+b * y==c, x+y==d },{ x, y })
    sols =
    (
    		[ 1 ] = -(a-b ) ^(-1) * ( d *b-c )
    		[ 2 ] = -(a-b ) ^( -1) * ( c-d*a )
    )
    

    Пример 5.20. Решить систему линейных алгебраических уравнений (листинг 5.21)

    $$\left\{ \begin{array}{rcrcrcr} x_1+2x_2+5x_3=-9\\ x_1-x_2+3x_3=2\\ 3x_1-6x_2-x_3=25. \end{array} \right.$$
    	
    >>> x1 = sym( "x1" );
    >>> x2 = sym( "x2" );
    >>> x3 = sym( "x3" );
    >>> sols = symlsolve({ x1+2*x2+5*x3==-9,x1-x2+3*x3==2,3* x1 -6*x2
    	-x3==25},{x1, x2, x3 })
    sols =
    (
    	[ 1 ] =2.0
    	[ 2 ] = -3.0
    	[ 3 ] = -1.0
    )
    
    Страницы:

    5.1 Ввод и формирование векторов и матриц

    Векторы и матрицы в Octave задаются путём ввода их элементов. Элементы вектора-строки отделяют пробелами или запятыми, а всю конструкцию заключают в квадратные скобки:

    	
    >>> a =[2 -3 5 6 -1 0 7 -9]
    a = 2 -3 5 6 -1 0 7 -9
    >>> b =[ -1,0,1]
    b = -1 0 1
    

    Вектор-столбец можно задать, если элементы отделять друг от друга точкой с запятой:

    	
    >>> c=[-pi; -pi / 2; 0; pi / 2; pi ]
    c =
    -3.14159
    -1.57080
    0.00000
    1.57080
    3.14159
    

    Обратиться к элементу вектора можно указав имя вектора, а в круглых скобках — номер элемента, под которым он хранится в этом векторе:

    	
    >>> a( 1 )
    ans = 2
    >>> b( 3 )
    ans = 1
    >>> c( 5 )
    ans = 3.1416
    

    Ввод элементов матрицы также осуществляется в квадратных скобках, при этом элементы строки отделяются друг от друга пробелом или запятой, а строки разделяются между собой точкой с запятой:

    	
    >>> Matr=[0 1 2 3; 4 5 6 7 ]
    Matr =
    0 1 2 3
    4 5 6 7
    

    Обратиться к элементу матрицы можно указав после имени матрицы, в круглых скобках, через запятую, номер строки и номер столбца, на пересечении которых элемент расположен:

    	
    >>> Matr ( 2, 3 )
    ans = 6
    >>> Matr ( 1, 1 )
    ans = 0
    >>> Matr ( 1, 1 )=pi; Matr ( 2, 4 )= _pi;
    >>> Matr
    Matr =
    3.1416 1.0000 2.0000 3.0000
    4.0000 5.0000 6.0000 -3.1416
    

    Матрицы и векторы можно формировать, составляя их из ранее заданных матриц и векторов:

    	
    >>> a=[-3 0 2 ]; b=[3 2 -1]; c =[5 -2 0 ];
    >>> M=[a b c ] % Горизонтальная конкатенация векторов–строк
    M = -3 0 2 3 2 -1 5 -2 0 % результат — вектор–строка
    >>> N=[a; b; c ] % Вертикальная конкатенация векторов–строк,
    % результат — матрица
    N =
    	-3  0  2
    	 3  2 -1
    	 5 -2  0
    >>> Matrica =[N N N] % Горизонтальная конкатенация матриц
    Matrica =
    	-3  0  2 -3  0  2 -3  0  2
    	 3  2 -1  3  2 -1  3  2 -1
    	 5 -2  0  5 -2  0  5 -2  0
    >>> Tablica =[M;M;M] % Вертикальная конкатенация матриц
    Tablica =
    	-3 0 2 3 2 -1 5 -2 0
    	-3 0 2 3 2 -1 5 -2 0
    	-3 0 2 3 2 -1 5 -2 0
    

    Важную роль при работе с матрицами играет знак двоеточия ":". Примеры с подробными комментариями приведены в листинге 5.1.

    	
    >>> Tabl =[ -1.2 3.4 0.8; 0.9 -0.1 1.1; 7.6 -4.5 5.6; 9.0 1.3 -8.5]
    Tabl =
    	-1.20000 3.40000 0.80000
    	0.90000 -0.10000 1.10000
    	7.60000 -4.50000 5.60000
    	9.00000 1.30000 -8.50000
    >>> Tabl( :, 3 ) % Выделить из матрицы 3-й столбец
    ans =
    	0.80000
    	1.10000
    	5.60000
    	-8.50000
    >>> Tabl( 1, : ) % Выделить из матрицы 1-ю строку
    ans = -1.20000 3.40000 0.80000
    >>> Matr=Tabl( 2 : 3, 1 : 2 ) % Выделить из матрицы подматрицу
    Matr =
    0.90000 -0.10000
    7.60000 -4.50000
    % Вставить подматрицу в правый нижний угол исходной матрицы
    >>> Tabl( 3 : 4, 2 : 3 )=Matr
    Tabl =
    	-1.20000 3.40000  0.80000
    	0.90000  -0.10000 1.10000
    	7.60000  0.90000  -0.10000
    	9.00000  7.60000  -4.50000
    >>> Tabl( :, 2 ) = [ ] % Удалить из матрицы 2-й столбец
    Tabl =
    	-1.20000 0.80000
    	0.90000  1.10000
    	7.60000  -0.10000
    	9.00000  -4.50000
    >>> Tabl( 2, : ) = [ ] % Удалить из матрицы 2-ю строку
    Tabl =
    	-1.20000 0.80000
    	7.60000 -0.10000
    	9.00000 -4.50000
    >>> Matr % Представить матрицу в виде вектора–столбца
    Matr =
    	0.90000 -0.10000
    	7.60000 -4.50000
    >>> Vector=Matr ( : )
    Vector =
    	0.90000
    	7.60000
    	-0.10000
    	-4.50000
    >>> V=Vector( 1 : 3 ) % Выделить из вектора элементы со 1-го по 3-й
    V =
    	0.90000
    	7.60000
    	-0.10000
    >>> V( 2 ) = [ ] % Удалить из массива 2-й элемент
    V =
    	0.90000
    	-0.10000
    

    5.2 Действия над векторами

    Рассмотрим действия над векторами, предусмотренные в Octave.

    Операция сложения определена только для векторов одного типа, то есть суммировать можно либо векторы–столбцы, либо векторы–строки одинаковой длины. Элементы вектора, являющегося суммой двух векторов, представляют собой сумму соответствующих элементов слагаемых. Для записи операции сложения векторов используют знак "+":

    	
    >>> a =[2 4 6 ]; b=[1 3 5 ]; c=a+b
    c = 3  7  11
    

    Вычитание векторов определено аналогично сложению: из элементов вектора-уменьшаемого вычитаются соответствующие элементы второго вектора. Запись операции вычитания выполняется с помощью знака "–":

    	
    >>> a =[2 4 6 ]; b=[1 3 5 ]; c=a-b
    c = 1  1  1
    

    Операция транспонирования вектора суть замена вектора-столбца вектором-строкой и наоборот. Знак апострофа "’" применяют для записи операции транспонирования вектора:

    	
    >>> a ’
    ans =
    	2
    	4
    	6
    >>> b ’
    ans =
    	1
    	3
    	5
    >>> t =(a+b ) ’
    t =
    	3
    	7
    	11
    

    Умножение вектора на число есть умножение каждого элемента вектора на это число. Запись операции умножения вектора на число осуществляется с помощью знака "*":

    	
    >>> a =[2 4 6 ]; b=[1 3 5 ]; z=2*a +0.5*b
    z = 4.5000 9.5000 14.5000
    

    Деление вектора на число определяется аналогично умножению, как деление каждого элемента вектора на это число Если делитель будет равен нулю, то в ответе будет Inf или NaN и предупреждение warning: division by zero. (Прим. редактора). . Знак деления "/" применяют для записи операции деления вектора на число:

    	
    >>> z=2_a+b/2
    z = 4.5000 9.50001 4.5000
    

    Умножение векторов определено только для векторов одинакового размера, причём один из них должен быть вектором-столбцом, а второй — вектором-строкой. Если вектор-строку умножать на вектор столбец, получится скалярное произведение векторов (число) Напомним, что скалярное умножение векторов определено, как сумма произведений соответствующих элементов векторов. , а если умножать вектор-столбец на вектор-строку, то получится матрица у которой каждая строка представляет собой исходный вектор-строку, умноженный на соответствующие элементы вектора столбца. Операция умножения вектора на вектор записывается с помощью знака "*", также как и операция умножения вектора на число. Примеры умножения векторов:

    	
    >>> a =[2 4 6 ]; b=[1 3 5 ];
    % В результате умножения вектора–строки на вектор–столбец получится число
    >>> a*b ’
    ans = 44
    % Результат умножения вектора–столбца на вектор–строку — матрица
    >>> a ’ * b
    ans =
    	2 6 10
    	4 12 20
    	6 18 30
    % Некорректное умножение векторов
    >>> a*b
    error: operator *: nonconformant arguments (op1 is 1x3, op2 is 1x3)
    >>> a ’ * b ’
    error: operator *: nonconformant arguments (op1 is 3x1, op2 is 3x1)
    

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

    	
    >>> x=[-pi /2, -pi /3, -pi / 4, 0, pi /4, pi /3, pi / 2 ]
    x = -1.5708 -1.0472 -0.7854 0.0000 0.7854 1.0472 1.5708
    >>> y=sin (2 * x )+cos (2 * x )
    y = -1.0000 -1.36603 -1.0000 1.0000 1.0000 0.36603 -1.0000
    >>> y=2*exp ( x /5)
    y = 1.4608 1.6221 1.7093 2.0000 2.3402 2.4660 2.7382
    

    Рассмотрим ещё несколько операций поэлементного преобразования вектора. К каждому элементу вектора можно добавить (вычесть) число, используя арифметическую операцию "+" ("–") Вдумчивый читатель сразу заметит, что это частный случай предыдущего примера — применение к вектору линейного преобразования. (Прим. редактора). :

    	
    >>> x=[-pi /2, -pi /3, -pi / 4, 0, pi /4, pi /3, pi / 2 ];
    >>> x-1.2+e /3
    ans =
    -1.86470 -1.34110 -1.07930 -0.29391 0.49149 0.75329 1.27689
    

    Поэлементное умножение векторов выполняется при помощи оператора ".*", результатом такого умножения является вектор, каждый элемент которого равен произведению соответствующих элементов заданных векторов.

    	
    >>> a =[2 4 6 ]; b=[1 3 5 ]; a . * b
    ans = 2  12  30
    >>> b . * a
    ans = 2  12  30
    

    Поэлементное деление одного вектора на другой осуществляется при помощи оператора "./". В результате получается вектор, каждый элемент которого — частное от деления соответствующего элемента первого вектора на соответствующий элемент второго.

    Совокупность знаков ".\" применяют для деления векторов в обратном направлении (поэлементное деление второго вектора на первый). Примеры деления векторов:

    	
    >>> a =[2 4 6 ]; b=[1 3 5 ]; a . / b
    ans = 2.0000 1.3333 1.2000
    >>> a . \ b
    ans = 0.50000 0.75000 0.83333
    

    Поэлементное возведение в степень выполняет оператор ".^", результатом является вектор, каждый элемент которого это соответствующий элемент заданного вектора, возведённый в указанную степень:

    	
    >>> a =[2 4 6 ]; b=[1 3 5 ];
    >>> a .^2 % Каждый элемент вектора возвести в квадрат
    ans = 4 16 36
    >>> b . ^ ( 1 / 2 ) % Извлечь корень квадратный из каждого элемента вектора
    ans = 1.0000 1.7321 2.2361
    >>> b .^ a % Каждый элемент вектора b возвести в степень a
    ans = 1 81 15625
    >>> a . ^ ( 1 . / b ) % Извлечь корень b-й степени из каждого элемента вектора a
    ans = 2.0000 1.5874 1.4310
    

    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.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
    

    Довольно необычное, с точки зрения математики, применение нашлось для операторов "/" и "\". Символ "/" используется для операции называемой делением матриц слева направо, соответственно знак "\" применяется для деления матриц справа налево. Операция $$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
    

    5.4 Функции для работы с матрицами и векторами

    В Octave существуют специальные функции, предназначенные для работы с матрицами и векторами. Эти функции можно разделить на следующие группы:

  • функции для работы с векторами;
  • функции для работы c матрицами;
  • функции, реализующие численные алгоритмы решения задач линейной алгебры.
  • Рассмотрим наиболее часто используемые функции.

    5.4.1 Функции для работы с векторами

    $$length(X)$$ — определяет дину вектора $$X$$.

    	
    >>> X=[1 2 3 4 5 6 7 8 9 ];
    >>> n=length (X)
    n = 9
    >>> Y= [ - 2; - 1; 0; 1; 2 ]
    Y =
    	-2
    	-1
    	 0
    	 1
    	 2
    >>> m=length (Y)
    m = 5
    

    $$prod(X)$$ — вычисляет произведение элементов вектора $$X$$.

    	
    >>> X=[1 2 3 4 5 6 7 8 9 ]; prod (X)
    ans = 362880
    

    $$cumprod(X)$$ — формирует вектор кумулятивного произведения — вектор того же типа и размера, что и X вида: $$x_1,x_1\cdot x_2,x_1\cdot x_2\cdot x_3,\dots,x_1\cdot x_2 \cdot \dots \cdot x_n$$, каждый элемент которого рассчитывается по формулам $${x}'_i=x_1\cdot x_2 \cdot \dots \cdot x_i$$, то есть $$i$$–й элемент вектора $$X$$ умножается на произведение всех предыдущих элементов.

    	
    >>> X=[1 2 3 4 5 ]; cumprod (X)
    ans = 1 2 6 24 120
    

    $$sum(X)$$ — вычисляет сумму элементов вектора $$X$$.

    	
    >>> X=[1 2 3 4 5 6 7 8 9 ]; sum(X)
    ans = 45
    

    $$cumsum(X)$$ — формирует вектор кумулятивной суммы — вектор того же типа и размера, что и $$X$$ вида $$x_1,x_1 + x_2,x_1 + x_2 + x_3,\dots,x_1 + x_2 +\dots + x_n$$, каждый элемент которого рассчитывается по формуле: $$x^{'}_i = x_1 + x_2 +\dots + x_i$$, то есть к $$i$$–му элементу вектора $$X$$ прибавляется сумма всех предыдущих элементов.

    	
    >>> X=[1 2 3 4 5 ]; cumsum(X)
    ans = 1 3 6 10 15
    

    $$diff (X)$$ — формирует вектор вида $$x_2-x_1,x_3-x_2,\dots,x_n-x_{n-1}$$, размер которого на единицу меньше чем у вектора $$X$$, а каждый элемент представляет собой разность между двумя соседними элементами массива $$X$$, то есть $${x_i}'=x_i-x_{i-1}$$.

    	
    >>> X=[1 2 3 4 5 6 7 8 9 ]; diff(X)
    ans = 1 1 1 1 1 1 1 1
    

    $$min(X)$$ — находит минимальный элемент вектора $$X$$, вызов в формате $$[nomX, nom] = min(X)$$ даёт возможность определить минимальный элемент $$nomX$$ и его номер nom в массиве $$X$$.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> min(X)
    ans = -8
    >>> [ Xnom, nom]=min(X)
    Xnom = -8
    nom = 5
    

    $$max(X)$$ — находит максимальный элемент массива $$X$$ или при вызове вида $$[nomX, nom] = max(X)$$ определяет максимум и его номер.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> max(X)
    ans = 9
    >>> [ Xnom, nom]=max(X)
    Xnom = 9
    nom = 4
    

    $$mean(X)$$ — определяет среднее арифметическое массива $$X$$.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> Sr= mean(X)
    Sr = 2.4286
    >>> sum(X) / length (X)
    ans = 2.4286
    

    $$dot(x_1, x_2)$$ — вычисляет скалярное произведение векторов $$x_1$$ и $$x_2$$.

    	
    >>> x1 =[2 -3 0 5 1 ];
    >>> x2 =[0 1 -2 3 -4];
    >>> dot( x1, x2 )
    ans = 8
    >>> sum( x1 . * x2 )
    ans = 8
    >>> x1 = [ 2; - 3; 0 ]; x2 = [ 0; 1; - 2 ];
    >>> dot( x1, x2 )
    ans = -3
    >>> sum( x1 . * x2 )
    ans = -3
    

    $$cross(x_1, x_2)$$ — вычисляет векторное произведение векторов $$x_1$$ и $$x_2$$.

    	
    >>> x1 =[2 -3 0 ]; x2 =[0 1 -2];
    >>> x=cross( x1, x2 )
    x = 6 4 2
    >>> x1 = [ 2; - 3; 0 ]; x2 = [ 0; 1; - 2 ];
    >>> x=cross( x1, x2 )
    x =
    	6
    	4
    	2
    

    $$sort(X)$$ — выполняет сортировку массива $$X$$.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> sort (X) % Сортировка по возрастанию
    ans = -8 -1 2 3 5 7 9
    >>> -sort (-X) % Сортировка по убыванию
    ans = 9 7 5 3 2 -1 -8
    

    5.4.2 Функции для работы c матрицами

    $$eye(n[, m])$$ — возвращает единичную матрицу (вектор) соответствующей размерности.

    	
    >>> eye( 4 )
    ans =
    Diagonal Matrix
    	1 0 0 0
    	0 1 0 0
    	0 0 1 0
    	0 0 0 1
    >>> eye( 2, 4 )
    ans =
    Diagonal Matrix
    	1 0 0 0
    	0 1 0 0
    >>> eye( 3, 1 )
    ans =
    Diagonal Matrix
    	1
    	0
    	0
    >>> eye( 1, 5 )
    ans =
    Diagonal Matrix
    	1 0 0 0 0
    

    $$ones(n[, m, p, . . . ])$$ — формирует матрицу (вектор), состоящую из единиц.

    	
    >>> ones( 2 )
    ans =
    	1 1
    	1 1
    >>> ones( 3, 3 )
    ans =
    	1 1 1
    	1 1 1
    	1 1 1
    >>> ones( 1, 4 )
    ans =
    	1 1 1 1
    >>> ones( 2, 1 )
    ans =
    	1
    	1
    >>> ones( 4, 2 )
    ans =
    	1 1
    	1 1
    	1 1
    	1 1
    >>> ones( 2, 3, 4 )
    ans =
    ans ( :, :, 1 ) =
    	1 1 1
    	1 1 1
    ans ( :, :, 2 ) =
    	1 1 1
    	1 1 1
    ans ( :, :, 3 ) =
    	1 1 1
    	1 1 1
    ans ( :, :, 4 ) =
    	1 1 1
    	1 1 1
    

    $$zeros(n[, m, p, . . . ])$$ — возвращает нулевую матрицу (вектор) соответствующей размерности.

    	
    >>> zeros( 3 )
    ans =
    	0 0 0
    	0 0 0
    	0 0 0
    >>> zeros( 1, 1 )
    ans = 0
    >>> zeros( 1, 2 )
    ans =
    	0 0
    >>> zeros( 3, 2 )
    ans =
    	0 0
    	0 0
    	0 0
    >>> zeros( 4, 1 )
    ans =
    	0
    	0
    	0
    	0
    >>> zeros( 2, 2, 2 )
    ans =
    ans ( :, :, 1 ) =
    	0 0
    	0 0
    ans ( :, :, 2 ) =
    	0 0
    	0 0
    

    $$diag(X[, k])$$ — возвращает квадратную матрицу с элементами $$X$$ на главной диагонали или на $$k$$–й. Функция $$diag(M [, k])$$, где $$M$$ — ранее определённая матрица, в качестве результата выдаст вектор столбец, содержащий элементы главной или $$k$$–ой диагонали матрицы $$M$$.

    	
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> diag(X)
    ans =
    Diagonal Matrix
    	-1 0 0 0 0 0 0
    	0 2 0 0 0 0 0
    	0 0 3 0 0 0 0
    	0 0 0 9 0 0 0
    	0 0 0 0 -8 0 0
    	0 0 0 0 0 7 0
    	0 0 0 0 0 0 5
    >>> diag(X, 0 )
    ans =
    Diagonal Matrix
    	-1 0 0 0 0 0 0
    	0 2 0 0 0 0 0
    	0 0 3 0 0 0 0
    	0 0 0 9 0 0 0
    	0 0 0 0 -8 0 0
    	0 0 0 0 0 7 0
    	0 0 0 0 0 0 5
    >>> x =[2; -3; 0 ]; diag(X, 1 )
    ans =
    	0 -1 0 0 0 0 0 0
    	0 0 2 0 0 0 0 0
    	0 0 0 3 0 0 0 0
    	0 0 0 0 9 0 0 0
    	0 0 0 0 0 -8 0 0
    	0 0 0 0 0 0 7 0
    	0 0 0 0 0 0 0 5
    	0 0 0 0 0 0 0 0
    >>> diag( x, 1 )
    ans =
    	0 2 0 0
    	0 0 -3 0
    	0 0 0 0
    	0 0 0 0
    >>> x =[2; -3; 0 ];
    >>> diag( x, 1 )
    ans =
    	0 2 0 0
    	0 0 -3 0
    	0 0 0 0
    	0 0 0 0
    >>> diag( x, -1)
    ans =
    	0 0 0 0
    	2 0 0 0
    	0 -3 0 0
    	0 0 0 0
    >>> x =[2; -3; 1 ];
    >>> diag( x, 1 )
    ans =
    	0 2 0 0
    	0 0 -3 0
    	0 0 0 1
    	0 0 0 0
    >>> diag( x, -1)
    ans =
    	0 0 0 0
    	2 0 0 0
    	0 -3 0 0
    	0 0 1 0
    >>> diag( x, 2 )
    ans =
    	0 0 2 0 0
    	0 0 0 -3 0
    	0 0 0 0 1
    	0 0 0 0 0
    	0 0 0 0 0
    >>> diag( x, -2)
    ans =
    	0 0 0 0 0
    	0 0 0 0 0
    	2 0 0 0 0
    	0 -3 0 0 0
    	0 0 1 0 0
    >>> M=[1 2 3; 4 5 6; 7 8 9 ]
    M =
    	1 2 3
    	4 5 6
    	7 8 9
    >>> diag(M)
    ans =
    	1
    	5
    	9
    >>> diag(M, 1 )
    ans =
    	2
    	6
    >>> diag(M, -1)
    ans =
    	4
    	8
    >>> diag(M, 2 )
    ans = 3
    >>> diag(M, -2)
    ans = 7
    

    $$rand([n, m, p, . . . ])$$ — возвращает матрицу (вектор) с элементами распределёнными по равномерному закону, $$rand$$ без аргументов возвращает одно случайное число.

    	
    >>> rand( 2 )
    ans =
    	0.15907 0.80147
    	0.90460 0.40293
    >>> rand( 3, 1 )
    ans =
    	0.279005
    	0.031504
    	0.529279
    >>> rand( 1, 4 )
    ans = 0.85038 0.13899 0.50764 0.82887
    >>> rand( 2, 5 )
    ans =
    	0.782173 0.286649 0.563683 0.969862 0.708655
    	0.300415 0.545783 0.011614 0.143827 0.644821
    >>> rand
    ans = 0.99252
    >>> rand
    ans = 0.42848
    

    $$randn([n, m, p . . . ])$$ — возвращает матрицу (вектор), элементы которой являются числами, распределёнными по нормальному закону, $$randn$$ без аргументов возвращает одно случайно число.

    	
    >>> randn( 2 )
    ans =
    	-1.04321 -1.81309
    	 1.09223 -0.83071
    >>> randn( 2, 4 )
    ans =
    	-0.222773 -0.540185 0.026355 0.308437
    	1.510429 1.360071 0.298315 1.186672
    >>> randn( 1, 3 )
    ans =
    	0.38577 -2.33667 -1.35689
    >>> randn( 2, 1 )
    ans =
    	-0.66235
    	 0.32907
    >>> randn
    ans = -1.0607
    >>> randn
    ans = -0.47825
    

    $$linspace(a, b[, n])$$ — возвращает массив из 100 (если $$n$$ не указано) или из $$n$$ точек равномерно распределённых между значениями $$a$$ и $$b$$.

    	
    >>> linspace( a, b, 3 )
    ans = -2 0 2
    >>> a=-2;b=2;n=5;
    >>> linspace( a, b, n )
    ans = -2 -1 0 1 2
    >>> linspace( a, b, 3 )
    ans = -2 0 2
    >>> linspace( 0, 5 0, 5 )
    ans = 0.00000 12.50000 25.00000 37.50000 50.00000
    

    $$logspace(a, b[, n])$$ — формирует массив из 50 (если $$n$$ не указано) или из $$n$$ точек, равномерно распределённых в логарифмическом масштабе между значениями $$10^a$$ и $$10^b$$; функция $$logspace(a, pi)$$ даёт равномерное распределение из 50 точек в интервале от $$10^a$$ до π Обратите внимание, что это идёт в разрез с определением функции для произвольного$$b\not= pi$$, согласно которому интервал должен был бы быть от $$10^a$$ до $$10^{pi}$$, сделано это для совместимости с соответствующей функцией matlab. (Прим. редактора ). .

    	
    >>> logspace( 1, 2, 5 )
    ans = 10.000 17.783 31.623 56.234 100.000
    >>> logspace( 2, pi )
    ans =
    	Columns 1 through 7 :
    100.0000 93.1815 86.8279 80.9075 75.3908 70.2503 65.4602
    	Columns 8 through 14 :
    60.9968 56.8377 52.9622 49.3510 45.9860 42.8504 39.9287
    	Columns 15 through 21 :
    37.2061 34.6692 32.3053 30.1025 28.0500 26.1374 24.3552
    	Columns 22 through 28 :
    22.6945 21.1471 19.7052 18.3616 17.1096 15.9430 14.8559
    	Columns 29 through 35 :
    13.8429 12.8991 12.0195 11.2000 10.436 39.724 79.0616
    	Columns 36 through 42 :
    8.4438 7.8680 7.3315 6.8316 6.3658 5.9318 5.5273
    	Columns 43 through 49 :
    5.1504 4.7992 4.4720 4.1671 3.8829 3.6182 3.3715
    	Column 50 :
    3.1416
    

    $$repmat(M, n[, m])$$ — формирует матрицу состоящую $$n \times n$$ или из $$n \times m$$ копий матрицы $$M$$, если $$M$$ — скаляр, то формируется матрица, элементы которой равны значению $$M$$.

    	
    >>> M=[1 2 3; 4 5 6; 7 8 9 ];
    >>> repmat(A, 2 )
    ans =
    	3 -1 3 -1
    	6 -2 6 -2
    	3 -1 3 -1
    	6 -2 6 -2
    >>> M=[1 2 3; 4 5 6; 7 8 9 ];
    >>> repmat(M, 2 )
    ans =
    	1 2 3 1 2 3
    	4 5 6 4 5 6
    	7 8 9 7 8 9
    	1 2 3 1 2 3
    	4 5 6 4 5 6
    	7 8 9 7 8 9
    >>> repmat(M, 2, 3 )
    ans =
    	1 2 3 1 2 3 1 2 3
    	4 5 6 4 5 6 4 5 6
    	7 8 9 7 8 9 7 8 9
    	1 2 3 1 2 3 1 2 3
    	4 5 6 4 5 6 4 5 6
    	7 8 9 7 8 9 7 8 9
    >>> repmat(M, 3, 1 )
    ans =
    	1 2 3
    	4 5 6
    	7 8 9
    	1 2 3
    	4 5 6
    	7 8 9
    	1 2 3
    	4 5 6
    	7 8 9
    >>> repmat( 9, 3 )
    ans =
    	9 9 9
    	9 9 9
    	9 9 9
    

    $$reshape(M, m, n)$$ — возвращает матрицу размерностью $$m \times n$$ сформированную из матрицы $$M$$ путём последовательной выборки по столбцам, если матрица $$M$$ не имеет $$m \times n$$ элементов, то выдаётся сообщение об ошибке.

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1 ]
    M =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    >>> reshape(M, 3, 2 )
    error: reshape: can ’ t reshape 3x4 array to 3x2 array
    >>> reshape(M, 3, 4 )
    ans =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    >>> reshape(M, 4, 3 )
    ans =
    	0 5 0
    	4 9 3
    	8 2 7
    	1 6 1
    >>> reshape(M, 2, 6 )
    ans =
    	0 8 5 2 0 7
    	4 1 9 6 3 1
    >>> reshape(M, 6, 2 )
    ans =
    	0 2
    	4 6
    	8 0
    	1 3
    	5 7
    	9 1
    >>> reshape(M, 1, 1 2 )
    ans = 0 4 8 1 5 9 2 6 0 3 7 1
    >>> reshape(M, 1 2, 1 )
    ans =
    	0
    	4
    	8
    	1
    	5
    	9
    	2
    	6
    	0
    	3
    	7
    	1
    

    $$cat(n, A, B, [C, . . . ])$$ — объединяет матрицы $$A$$ и $$B$$ или все входящие матрицы.

    	
    >>> A=[0 1 2; 3 4 5; 6 7 8 ]; B=[11 12 13; 14 15 16; 17 18 19 ];
    >>> cat ( 2,A,B)
    ans =
    	0 1 2 11 12 13
    	3 4 5 14 15 16
    	6 7 8 17 18 19
    >>> [ A,B]
    ans =
    	0 1 2 11 12 13
    	3 4 5 14 15 16
    	6 7 8 17 18 19
    >>> cat ( 1,A,B)
    ans =
    	0 1 2
    	3 4 5
    	6 7 8
    	11 12 13
    	14 15 16
    	17 18 19
    >>> [A;B]
    ans =
    	0 1 2
    	3 4 5
    	6 7 8
    	11 12 13
    	14 15 16
    	17 18 19
    >>> x1 =[2; -3; 0 ]; x2 = [ 0; 1; - 2 ];
    >>> cat( 2, x1, x2 )
    ans =
    	 2 0
    	-3 1
    	 0 -2
    >>> cat( 1, x1, x2 )
    ans =
    	 2
    	-3
    	 0
    	 0
    	 1
    	-2
    >>> x1 =[2 -3 0 ]; x2 =[0 1 -2];
    >>> cat( 2, x1, x2 )
    ans = 2 -3 0 0 1 -2
    >>> [ x1 x2 ]
    ans = 2 -3 0 0 1 -2
    >>> cat( 1, x1, x2 )
    ans =
    	2 -3 0
    	0  1 -2
    >>> [ x1; x2 ]
    ans =
    	2 -3 0
    	0 1  -2
    

    $$rot90(M [, k])$$ — осуществляет поворот матрицы $$M$$ на 90 градусов против часовой стрелки или на величину $$90 \cdot k$$, где k — целое число Отрицательные значения k указывают на поворот по часовой стрелке, проверьте, что $$rot90(M, -1)$$ даст тот же результат, что и $$rot90(M, 3)$$. (Прим. редактора). .

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1 ]
    M =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    >>> rot90(M)
    ans =
    	3 7 1
    	2 6 0
    	1 5 9
    	0 4 8
    >>> rot90(M, 2 )
    ans =
    	1 0 9 8
    	7 6 5 4
    	3 2 1 0
    >>> rot90(M, 3 )
    ans =
    	8 4 0
    	9 5 1
    	0 6 2
    	1 7 3
    

    $$tril(M [, k])$$ — формирует из матрицы $$M$$ нижнюю треугольную матрицу начиная с главной или с $$k$$–й диагонали.

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1; 6 5 4 3 ];
    >>> tril(M)
    ans =
    	0 0 0 0
    	4 5 0 0
    	8 9 0 0
    	6 5 4 3
    >>> tril(M, 1 )
    ans =
    	0 1 0 0
    	4 5 6 0
    	8 9 0 1
    	6 5 4 3
    >>> tril(M, -1)
    ans =
    	0 0 0 0
    	4 0 0 0
    	8 9 0 0
    	6 5 4 0
    >>> tril(M, 2 )
    ans =
    	0 1 2 0
    	4 5 6 7
    	8 9 0 1
    	6 5 4 3
    >>> tril(M, -2)
    ans =
    	0 0 0 0
    	0 0 0 0
    	8 0 0 0
    	6 5 0 0
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> tril(X)
    ans =
    -1 0 0 0 0 0 0
    >>> tril(X’ )
    ans =
    	-1
    	 2
    	 3
    	 9
    	-8
    	 7
    	 5
    

    $$triu(M [, k])$$ — формирует из матрицы $$M$$ верхнюю треугольную матрицу начиная с главной или с $$k$$–й диагонали.

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1; 6 5 4 3 ]
    M =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    	6 5 4 3
    >>> triu(M)
    ans =
    	0 1 2 3
    	0 5 6 7
    	0 0 0 1
    	0 0 0 3
    >>> triu(M, 1 )
    ans =
    	0 1 2 3
    	0 0 6 7
    	0 0 0 1
    	0 0 0 0
    >>> triu(M, -2)
    ans =
    	0 1 2 3
    	4 5 6 7
    	8 9 0 1
    	0 5 4 3
    >>> triu(X)
    ans =
    -1 2 3 9 -8 7 5
    >>> triu(X’ )
    ans =
    	-1
      	 0
    	 0
    	 0
    	 0
    	 0
    	 0
    

    $$size(M )$$ — определяет число строк и столбцов матрицы $$M$$, результатом её работы является вектор $$[n, m]$$.

    	
    >>> M=[0 1 2 3; 4 5 6 7; 8 9 0 1; 6 5 4 3 ];
    >>> size(M)
    ans = 4  4
    >>> X=[-1 2 3 9 -8 7 5 ];
    >>> size(X)
    ans = 1  7
    >>> size(X’ )
    ans = 7  1
    >>> eye( size (M) )
    ans =
    Diagonal Matrix
    	1 0 0 0
    	0 1 0 0
    	0 0 1 0
    	0 0 0 1
    >>> zeros( size (X) )
    ans = 0 0 0 0 0 0 0
    

    $$prod(M [, k])$$ — формирует вектор–строку или вектор–столбец, в зависимости от значения $$k$$, каждый элемент которой является произведением элементов соответствующего столбца или строки матрицы $$M$$, если значение параметра $$k$$ в конструкции отсутствует, то по умолчанию вычисляются произведения столбцов матрицы; понятно, что результатом работы функции $$prod(prod(M ))$$ будет произведение всех элементов матрицы.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> prod(M)
    ans = 24 -25 32 18
    >>> prod(M, 1 )
    ans = 24 -25 32 18
    >>> prod(M, 2 )
    ans =
    	  6
    	-40
    	-12
    	-120
    >>> prod( prod (M) )
    ans = -345600
    

    $$cumprod(M [, k])$$ — отличается от функции $$cumprod(X)$$ тем, что операции описанные для неё применяются к строкам или к столбцам матрицы $$M$$, в зависимости от значения параметра $$k$$, по умолчанию накапливание произведения выполняется по столбцам матрицы $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> cumprod(M)
    ans =
    	 -1   1 -2   3
    	 -4   5  2   6
    	-12  -5  8   6
    	 24 -25  32 18
    >>> cumprod(M, 1 )
    ans =
    	 -1   1 -2  3
    	 -4   5  2  6
    	-12  -5  8  6
    	 24 -25 32 18
    >>> cumprod(M, 2 )
    ans =
    	-1  -1   2    6
    	 4  20 -20  -40
    	 3  -3 -12  -12
    	-2 -10 -40 -120
    

    $$sum(M [, k])$$ — формирует вектор–строку или вектор–столбец, в зависимости от значения $$k$$, каждый элемент которой является суммой элементов соответствующего столбца или строки матрицы $$M$$, если значение параметра $$k$$ в конструкции отсутствует, то по умолчанию вычисляются суммы столбцов матрицы. Сумму всех элементов матрицы вычисляет функция $$sum(sum(M ))$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> sum(M)
    ans =
    	4 10 5 9
    >>> sum(M, 1 )
    ans =
    	4 10 5 9
    >>> sum(M, 2 )
    ans =
    	1
    	10
    	7
    	10
    >>> sum(sum(M) )
    ans = 28
    

    $$cumsum(M, [k])$$ — отличается от функции $$cumsum(X)$$ тем, что операции описанные для неё применяются либо к строкам либо к столбцам матрицы $$M$$, в зависимости от значения параметра $$k$$, по умолчанию результатом работы функции является матрица кумулятивных сумм столбцов матрицы $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> cumsum(M)
    ans =
    	-1  1 -2  3
    	 3  6 -3  5
    	 6  5  1  6
    	 4 10  5  9
    >>> cumsum(M, 1 )
    ans =
    	-1  1 -2  3
    	 3  6 -3  5
    	 6  5  1  6
    	 4 10  5  9
    >>> cumsum(M, 2 )
    ans =
    	-1 0 -2  1
    	 4 9  8  10
    	 3 2  6  7
    	-2 3  7  10
    

    $$diff (M)$$ — из матрицы $$M$$ размерностью $$n$$ на $$m$$ формирует матрицу размером $$n - 1$$ на $$m$$ элементы которой представляют собой разность между элементами соседних строк $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]
    M =
    	-1  1 -2  3
    	 4  5 -1  2
    	 3 -1  4  1
    	-2  5  4  3
    >>> diff(M)
    ans =
    	 5  4  1 -1
    	-1 -6  5 -1
    	-5  6  0  2
    

    $$min(M )$$ — формирует вектор-строку, каждый элемент которой является наименьшим элементом соответствующего столбца матрицы $$M$$. Определить положение этих элементов в матрице можно, если вызвать функцию в формате $$[n, m] = min(M )$$, где $$n$$ — это вектор минимальных элементов столбцов матрицы $$M$$, а $$m$$ — вектор номеров строк матрицы $$M$$, в которых находятся эти элементы, конструкция $$min(min(M ))$$ позволит отыскать минимум среди всех элементов матрицы.Вызов функции в виде $$min(M, [], k)$$ или $$[n, m] = min(M, [], k)$$ позволяет управлять направлением поиска, в частности можно отыскать минимальные элементы и их положение в строках матрицы $$M$$.И, наконец, функция $$min(A, B)$$ сформирует матрицу из строк $$min(A)$$ и $$min(B)$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]
    M =
    	-1  1 -2  3
    	 4  5 -1  2
    	 3 -1  4  1
    	-2  5  4  3
    >>> min(M)
    ans = -2 -1 -2 1
    >>> [ n,m]=min(M)
    n = -2 -1 -2 1
    m = 4 3 1 3
    >>> min(M’ )
    ans = -2 -1 -1 -2
    >>> [ n,m]=min(M’ )
    n = -2 -1 -1 -2
    m = 3 3 2 1
    >>> min( min(M) )% Минимум среди всех элементов матрицы
    ans = -2
    >>> [ n,m]=min( min(M) )
    n = -2
    m = 1
    >>> min(M, [ ], 1 )
    ans = -2 -1 -2 1
    >>> min(M, [ ], 2 ) % Как и min(M) формирует вектор–строку, каждый элемент
    % которой равен минимальному элементу в соответствующем столбце M
    ans =
    	-2
    	-1
    	-1
    	-2
    >>> [ n,m]=min(M, [ ], 2 ) % Формирует вектор–столбец, каждый элемент
    % которого равен минимальному элементу в соответствующей строке матрицы
    % M и их положение в матрице — номера столбцов в которых они находятся.
    n =
    	-2
    	-1
    	-1
    	-2
    m =
    	3
    	3
    	2
    	1
    >>> A=[0 1 2; 3 4 5; 6 7 8 ]; B=[11 12 13; 14 15 1 6; 17 18 19 ];
    >>> min(A,B)
    ans =
    	0 1 2 % Первая строка — минимумы столбцов матрицы A,
    	3 4 5 % а вторая строка — матрицы B
    	6 7 8
    

    $$max(M)$$ — формирует вектор-строку, каждый элемент которой является наибольшим элементом соответствующего столбца матрицы $$M$$, действия функций $$[n, m] = max(M ), max(max(M )), max(M, [], k), [n, m] = max(A, [], k), max(A, B)$$ понятно из примеров:

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> max(M)
    ans = 4 5 4 3
    >>> [ n,m]=max(M)
    n = 4 5 4 3
    m = 2 2 3 1
    >>> max(M’ )
    ans = 3 5 4 5
    >>> [ n,m]=max(M’ )
    n = 3 5 4 5
    m = 4 2 3 2
    >>> max(max(M) )
    ans = 5
    >>> [ n,m]=max(max(M) )
    n = 5
    m = 2
    >>> max(M, [ ], 1 )
    ans = 4 5 4 3
    >>> max(M, [ ], 2 )
    ans =
    	3
    	5
    	4
    	5
    >>> [ n,m]=max(M, [ ], 2 )
    n =
    	3
    	5
    	4
    	5
    m =
    	4
    	2
    	3
    	2
    >>> A=[0 1 2; 3 4 5; 6 7 8 ]; B=[11 12 13; 14 15 1 6; 17 18 19 ];
    >>> max(A,B)
    ans =
    	11 12 13
    	14 15 16
    	17 18 19
    

    $$mean(M, [k])$$ — формирует вектор–строку или вектор–столбец, в зависимости от значения $$k$$, каждый элемент которого является средним значением элементов соответствующего столбца или строки матрицы $$M$$, если значение параметра $$k$$ в конструкции отсутствует, то по умолчанию вычисляются средние значения столбцов матрицы. Среднее всех элементов матрицы вычисляет функция $$mean(mean(M))$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> mean(M)
    ans = 1.0000 2.5000 1.2500 2.2500
    >>> mean(M, 1 )
    ans = 1.0000 2.5000 1.2500 2.2500
    >>> mean(M, 2 )
    ans =
    	0.25000
    	2.50000
    	1.75000
    	2.50000
    >>> mean(mean(M) )
    ans = 1.7500
    

    $$sort(M)$$ — выдаёт матрицу того же размера, что и $$M$$, каждый столбец которой упорядочен по возрастанию.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]
    M =
    	-1 1 -2 3
    	4 5 -1 2
    	3 -1 4 1
    	-2 5 4 3
    >>> sort (M)
    ans =
    	-2 -1 -2 1
    	-1 1 -1 2
    	3 5 4 3
    	4 5 4 3
    >>> sort (M’ )
    ans =
    	-2 -1 -1 -2
    	-1 2 1 3
    	1 4 3 4
    	3 5 4 5
    >>> -sort (- M)
    ans =
    	4 5 4 3
    	3 5 4 3
    	-1 1 -1 2
    	-2 -1 -2 1
    >>> -sort (-M’ )
    ans =
    	3 5 4 5
    	1 4 3 4
    	-1 2 1 3
    	-2 -1 -1 -2
    

    $$sqrtm(M)$$ — относится к так называемым матричным функциям и возвращает матрицу $$X$$, для которой $$X * X = M$$ (матрица $$M$$ должна быть квадратной).

    	
    >>> A=[1 0 -3;0 1 2; 2 0 -1]
    A =
    	1 0 -3
    	0 1 2
    	2 0 -1
    >>> X=sqrtm (A)
    X =
    	1.53024 0.00000 -1.41861
    	-0.35349 1.00000 0.94574
    	0.94574 0.00000 0.58450
    >>> X*X % Проверка
    ans =
    	1.00000 0.00000 -3.00000
    	0.00000 1.00000 2.00000
    	2.00000 0.00000 -1.00000
    >>> Y=sqrt (A)% Извлечение квадратного корня из элементов матрицы A
    Y =
    1.00000 + 0.00000i 0.00000 + 0.00000i 0.00000 + 1.73205i
    0.00000 + 0.00000i 1.00000 + 0.00000i 1.41421 + 0.00000i
    1.41421 + 0.00000i 0.00000 + 0.00000i 0.00000 + 1.00000 i
    % sqrtm(A) и sqrt(A) дают различные результаты
    >>> Y*Y % Матричное умножение
    ans =
    	1.00000 + 2.44949i 0.00000 + 0.00000i -1.73205 + 1.73205i
    	2.00000 + 0.00000i 1.00000 + 0.00000i 1.41421 + 1.41421i
    	1.41421 + 1.41421i 0.00000 + 0.00000i -1.00000 + 2.44949i
    >>> Y. *Y % Поэлементное умножение
    ans =
    	1.00000 0.00000 -3.00000
    	0.00000 1.00000 2.00000
    	2.00000 0.00000 -1.00000
    

    $$expm(M)$$ и $$logm(M)$$ — взаимообратные матричные функции, первая вычисляет матричную экспоненту $$e^M$$, а вторая выполняет логарифмирование по основанию $$e$$.

    	
    >>> A=[1 0 -3;0 1 2; 2 0 -1];B= expm(A)
    B =
    	-0.26543 0.00000 -1.05553
    	1.98914 2.71828 0.70369
    	0.70369 0.00000 -0.96912
    >>> logm(B)
    ans =
    	1.00000 + 0.00000i 0.00000 + 0.00000i -3.00000 - 0.00000i
    	-0.00000 - 0.00000i 1.00000 + 0.00000i 2.00000 + 0.00000i
    	2.00000 + 0.00000i 0.00000 + 0.00000i -1.00000 - 0.00000i
    

    5.4.3 Функции, реализующие численные алгоритмы решения задач линейной алгебры

    $$det(M)$$ — вычисляет определитель квадратной матрицы $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]; det (M)
    ans = 682
    >>> A=[1 0 -3;0 1 2; 2 0 -1]; det (A)
    ans = 5
    

    $$trace(M)$$ — вычисляет след матрицы $$M$$, то есть сумму элементов главной диагонали.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]
    M =
    	-1 1 -2 3
    	4 5 -1 2
    	3 -1 4 1
    	-2 5 4 3
    >>> trace(M)
    ans = 11
    >>> sum( diag (M) )
    ans = 11
    

    $$norm(M[, p])$$ — возвращает различные виды норм матрицы $$M$$ в зависимости от $$p$$, если аргумент $$p = 1, 2, inf, fro$$ не задан, то вычисляется вторая норма матрицы $$M$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> norm(M)% Вторая норма
    ans = 8.5506
    >>> norm(M, 2 )
    ans = 8.5506
    >>> norm(M, 1 ) % Первая норма
    ans = 12
    >>> norm(M, inf ) % Бесконечная норма
    ans = 14
    >>> norm(M, ’fro’ ) % Евклидова норма
    ans = 11.916
    

    $$cond(M[, p])$$ — возвращает число обусловленности матрицы $$M$$, основанное на норме $$p$$.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ];
    >>> cond(M)
    ans = 3.3324
    >>> cond(M, 2 )
    ans = 3.3324
    >>> cond(M, 1 )
    ans = 6.4927
    >>> cond(M, inf )
    ans = 6.7742
    >>> cond (M, ’fro’ )
    ans = 5.7154
    

    $$rcond(M)$$ — вычисляет величину, обратную значению числа обусловленности матрицы относительно первой нормы, если полученная величина близка к единице, то матрица хорошо обусловлена, если к приближается к нулю, то плохо.

    	
    >>> M=[-1 1 -2 3; 4 5 -1 2; 3 -1 4 1; -2 5 4 3 ]; rcond (M)
    ans = 0.1738
    

    $$inv(M)$$ — возвращает матрицу обратную к $$M$$.

    	
    >>> A=[1 0 -3;0 1 2; 2 0 -1]; invA=inv (A)
    invA =
    	-0.2  0  0.6
    	 0.8  1 -0.4
    	-0.4  0  0.2
    >>> A_ invA % Проверка
    ans =
    	1 0 -5.5511e-17
    	0 1  0
    	0 0  1
    

    $$eig(M)$$ — возвращает вектор собственных значений матрицы $$M$$, вызов функции в формате $$[Matr, D] = eig(M)$$ даст матрицу $$Matr$$, столбцы которой — собственные векторы матрицы $$M$$ и диагональную матрицу $$D$$, содержащую собственные значения матрицы $$M$$, функция $$eig(A, B)$$, где $$A$$ и $$B$$ квадратные матрицы, выдаёт вектор обобщённых собственных значений.

    	
    >>> M=[3 -2;-4 1 ]
    M =
    	 3 -2
    	-4 1
    >>> eig (M)
    ans =
    	 5
    	-1
    >>> [ Matr,D]= eig (M)
    Matr =
    	 0.70711 0.44721
    	-0.70711 0.89443
    D =
    Diagonal Matrix
    	5  0
    	0 -1
    % Проверка A * M = M * D
    >>> M * Matr
    ans =
    	 3.5355 -0.44721
    	-3.5355 -0.89443
    >>> Matr *D
    ans =
    	 3.5355 -0.44721
    	-3.5355 -0.89443
    

    $$poly(M)$$ — возвращает вектор–строку коэффициентов характеристического полинома матрицы $$M$$.

    	
    >>> M=[3 -2;-4 1 ]
    M =
    	3 -2
    	-4 1
    >>> poly(M)
    ans = 1 -4 -5
    

    $$rref (M)$$ — осуществляет приведение матрицы $$M$$ к треугольной форме, используя метод исключения Гаусса.

    	
    >>> M=[3 -2 1 5; 6 -4 2 7; 9 -6 3 1 2 ]
    M =
    	3 -2 1 5
    	6 -4 2 7
    	9 -6 3 12
    >>> rref (M)
    ans =
    	1  -0.66667     0.33333   0
    	0 	0 			0 		  1
    	0 	0 			0         0
    

    $$chol(M)$$ — возвращает разложение по Холецкому для положительно определённой симметрической матрицы $$M$$.

    	
    >>> M=[10 1 1; 2 10 1; 2 2 10 ]
    M =
    	10 1 1
    	2 10 1
    	2 2 10
    >>> chol(M)
    ans =
    	3.1623  0.31623  0.31623
    	0       3.1464   0.28604
    	0       0        3.1334
    % Матрица не симметрическая
    >>> A=[1 2; 1 1 ]; chol(A)
    error: chol: matrix not positivedefinite
    % Матрица содержит элементы < 0
    >>> M=[3 -2 1 5; 6 -4 2 7; 9 -6 3 12 ];
    >>> chol(M)
    error: CHOL requires square matrix
    

    $$lu(M)$$ — выполняет $$LU$$ –разложение, функция $$[L, U, P ] = lu(M)$$ возвращает три матрицы: $$L$$ — нижняя треугольная, $$U$$ — верхняя треугольная и $$P$$ — матрица перестановок, причём $$P\cdot A = L \cdot U$$. Функция $$lu(M)$$ без параметров возвращает одну матрицу, которая в свою очередь, является комбинацией матриц $$L$$ и $$U$$.

    	
    >>> M=[3 -2 1; 5 6 -4; 2 7 9 ];
    >>> lu (M)
    ans =
    	5     6         -4
    	0.6  -5.6       3.4
    	0.4  -0.82143   13.393
    >>> [ L, U, P]= lu (M)
    L =
    	1 		0 		  0
    	0.6 	1         0
    	0.4     -0.82143  1
    U =
    	5       6          -4
    	0      -5.6        3.4
    	0       0          13.393
    P =
    Permutation Matrix
    	0 1 0
    	1 0 0
    	0 0 1
    >>> L*U
    ans =
    	5  6 -4
    	3 -2  1
    	2  7  9
    >>> P* M
    ans =
    	5  6 -4
    	3 -2  1
    	2  7  9
    >>> lu(M)
    ans =
    	5      6        -4
    	0.6   -5.6      3.4
    	0.4   -0.82143  13.393
    >>> triu( lu (M) )
    ans =
    	5      6             -4
    	0     -5.6           3.4
    	0      0             13.393
    >>> tril( lu (M) )
    ans =
    	5       0           0
    	0.6    -5.6         0
    	0.4    -0.82143 13.393
    

    $$qr(M)$$ — выполняет $$QR$$–разложение, команда $$[Q, R, P ] = qr(M)$$ возвращает три матрицы: ортогональную матрицу $$Q$$, верхнюю треугольную матрицу $$R$$ и матрицу перестановок $$P$$, причём $$A \cdot P = Q \cdot P$$.

    	
    >>> M=[3 -2 1; 5 6 -4;2 7 9 ];
    >>> [Q, R, P]= qr (M)
    Q =
    	0.10102 -0.27448 0.95627
    	-0.40406 0.86703 0.29155
    	0.90914 0.41584 0.023324
    R =
    	9.8995   3.7376   0.10102
    	0        8.662    4.3434
    	0        0        4.3732
    P =
    Permutation Matrix
    	0 0 1
    	0 1 0
    	1 0 0
    >>> M *P - Q*R
    ans =
    -1.1102e-15   4.4409e-16	-4.4409e-16
    -4.4409e-16   -1.7764e-15   0
    0             0             -4.4409e-16
    

    $$svd(M)$$ — возвращает вектор сингулярных чисел матрицы, при использовании в формате $$[U, S, V ] = svd(M)$$ выполняет сингулярное разложение матрицы $$M$$, выдаёт три матрицы: $$U$$ — сформирована из ортонормированных собственных векторов, отвечающих наибольшим собственным значениям матрицы $$M \cdot M^T, V$$ — состоит из ортонормированных собственных векторов матрицы $$M \cdot M^T, S$$ — диагональная матрица из сингулярных чисел (неотрицательных значений квадратных корней из собственных значений матрицы $$M \cdot M^T$$ ), матрицы удовлетворяют условию $$A = U \cdot S \cdot V^T$$.

    	
    >>> M=[3 -2 1; 5 6 -4; 2 7 9 ];
    >>> svd(M)
    ans =
    	11.7553
    	8.5347
    	3.7377
    >>> [ U, S,V]=svd(M)
    U =
    	0.0057541  0.0207345  0.9997685
    	0.2528901  -0.9673161  0.0186059
    	0.9674779 0.2527245   -0.0108095
    S =
    Diagonal Matrix
    	11.7553     0         0
    	0           8.5347    0
    	0           0         3.7377
    V =
    	0.27363  -0.50018   0.82155
    	0.70421  -0.47761   -0.52534
    	0.65515  0.72229    0.22154
    

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

    5.5 Решение некоторых задач алгебры матриц

    Напомним основные определения алгебры матриц. Если m _ n выражений расставлены в прямоугольной таблице из $$m$$ строк и $$n$$ столбцов, то говорят о матрице размера $$m \times n$$:

    $$\begin{pmatrix} a_{11} a_{12} \dots a_{1n}\cr a_{21} a_{22} \dots a_{2n}\cr \dots \dots \dots \dots \cr a_{m1} a_{m2} \dots a_{mn} \end{pmatrix}$$

    Выражения a ij называют элементами матрицы. Элементы $$a_{ii} (i = 1 . . . n)$$, стоящие в таблице на линии, проходящей из левого верхнего угла в правый нижний угол квадрата $$n \times n$$, образуют главную диагональ матрицы.

    $$\begin{pmatrix} a_{11} a_{12} \dots \dots \dots a_{1n}\cr a_{21} a_{22} \dots \dots \dots a_{2n}\cr \dots \dots \dots \dots \dots \dots \cr a_{i1} a_{i2} \dots a_{ii} \dots a_{in}\cr \dots \dots \dots \dots \dots \dots \cr \dots \dots \dots \dots \dots \dots \cr a_{m1} a_{m2} \dots \dots \dots a_{mn} \end{pmatrix}$$

    Матрица размером $$m \times n, (где m \not = n)$$ называется прямоугольной (5.1). В случае если $$m = n$$, матрицу называют квадратной матрицей порядка n.

    $$\begin{pmatrix} a_{11} a_{12} \dots a_{1n}\cr a_{21} a_{22} \dots a_{2n}\cr \dots \dots \dots \dots \cr a_{n1} a_{n2} \dots a_{nn} \end{pmatrix}$$

    В частности, матрица типа $$1\times n$$ — это вектор–строка: $$(a_{11}\ a_{12}\ \dots{ }a_{1n})$$.

    Матрица размером $$m \times 1$$ является вектором–столбцом: $$\begin{pmatrix}a_{11}\cra_{21}\cr\dots\cra_{m1}\end{pmatrix}$$ am1

    Число (скаляр) можно рассматривать как матрицу типа $$1 \times 1 —a_{11}$$. Квадратная матрица $$A=\{a_{ij}\}$$ размером $$n \times n$$ называется:

  • нулевой, если все её элементы равны нулю: $$\begin{pmatrix} 0 0 \dots 0\cr 0 0 \dots 0\cr \dots \dots \dots \dots\cr 0 0 \dots 0 \end{pmatrix}$$ _
  • верхней треугольной, если все элементы, расположенные ниже главной диагонали, равны нулю: $$\begin{pmatrix} a_{11} a_{12} \dots a_{1n}\cr 0 a_{22} \dots a_{2n}\cr \dots \dots \ddots \dots \cr 0 0 \dots a_{nn} \end{pmatrix}$$ _
  • нижней треугольной, если все элементы, расположенные выше главной диагонали, равны нулю: $$\begin{pmatrix} a_{11} 0 \dots 0\cr a_{21} a_{22} \dots 0\cr \dots \dots \ddots \dots \cr a_{n1} a_{n2} \dots a_{nn} \end{pmatrix}$$ _
  • диагональной, если все элементы, кроме элементов главной диагонали, равны нулю: $$\begin{pmatrix} a_{11} 0 \dots 0\cr 0 a_{22} \dots 0\cr \dots \dots \ddots \dots \cr 0 0 \dots a_{nn} \end{pmatrix}$$ _
  • единичной, если элементы главной диагонали равны единице, а все остальные нулю: $$\begin{pmatrix} 1 0 \dots 0\cr 0 1 \dots 0\cr \dots \dots \ddots \dots \cr 0 0 \dots 1 \end{pmatrix}$$
  • Определителем (детерминантом) матрицы $$A$$ является число $$detA$$ или Δ, вычисляемое по правилу: $$det A = \sum (-1)^{\tilde \lambda} a_{1i_1} a_{2i_2}\dots a_{ni_n}$$, где сумма распределена на всевозможные перестановки $$i_1,i_2, \dots,i_n$$ элементов $$1, 2, . . ., n$$ и, следовательно, содержит $$n!$$ слагаемых, причём $$\tilde \lambda=0$$, если перестановка чётная, и $$\tilde \lambda=1$$, если перестановка нечётная.

    Квадратная матрица $$A$$ называется невырожденной, если её определитель отличен от нуля $$detA \not = 0$$. В противном случае $$detA = 0$$ матрица называется вырожденной или сингулярной.

    С матрицами можно проводить операции сравнения, сложения и умножения.

    Две матрицы $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ считаются равными, если они одного типа, то есть имеют одинаковое число строк и столбцов, и соответствующие элементы их равны $$\{a_{ij}\}=\{b_{ij}\}$$.

    Суммой двух матриц $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ одинакового типа называется матрица $$C=\{c_{ij}\}$$ того же типа, элементы которой равны сумме соответствующих элементов матриц $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$:$$\{c_{ij}\}=\{a_{ij}\}+\{b_{ij}\}$$.

    Разность матриц $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ определяется аналогично: $$\{c_{ij}\}=\{a_{ij}\}+\{b_{ij}\}$$.

    Произведением числа $$\hbar$$ и матрицы $$A=\{a_{ij}\}$$ (или умножением матрицы на число) называется матрица, элементы которой получены умножением всех элементов матрицы $$A=\{a_{ij}\}$$$$A=\{a_{ij}\}$$ на число $$\hbar: \hbar\cdot A=\{\hbar\cdot a_{ij}\}$$.

    Произведением матриц $$A=\{a_{ij}\}$$ размерностью $$m \times n$$ и $$B=\{b_{ij}\}$$ размерностью $$n \times s$$ является матрица $$C=\{c_{ij}\}$$ размерностью $$m \times s$$, каждый элемент которой можно представить формулой $$\{c_{ij}\}=\{a_{i1}b_{1j}+a_{i2}b_{2j}+\dots+a_{in}b_{nj}\}$$, где $$i = 1 . . . m, j = 1 . . . s$$.

    Таким образом, произведение матриц $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ имеет смысл тогда и только тогда, когда количество строк матрицы $$A=\{a_{ij}\}$$ совпадает с количеством столбцов матрицы $$B=\{b_{ij}\}$$. Кроме того, произведение двух матриц не обладает переместительным законом, то есть $$A\cdot B\ne B\cdot A$$. В тех случаях, когда $$A\cdot B = B\cdot A$$, матрицы $$A=\{a_{ij}\}$$ и $$B=\{b_{ij}\}$$ называются перестановочными.

    Если в матрице $$A=\{a_{ij}\}$$ размерностью $$m \times n$$ заменить строки соответствующими столбцами, то получится транспонированная матрица: $$A^T=\{a_{ji}\}$$.

    В частности, для вектора–строки $$a=\{a_1{ }a_2{ }\dots a_{n}\}$$ транспонированной матрицей является вектор–столбец:

    $$a^T= \begin{pmatrix} a_{11}\cr a_{21}\cr \dots\cr a_{m1} \end{pmatrix}$$

    Обратной матрицей по отношению к данной матрице $$A=\{a_{ij}\}$$ размерностью $$n \times n$$, называется матрица $$A^{-1}=\{a_{ij}\}$$ того же типа, которая, будучи умноженной как справа, так и слева на данную матрицу, в результате даёт единичную матрицу $$E=\{\delta_{ij}\}$$, где $$\delta_{ii}=1, \delta_{ij}=0$$, при $$i\ne j:A\cdot A^{-1}= A^{-1}\cdot A = E$$.

    Нахождение обратной матрицы для данной называется обращением данной матрицы. Всякая неособенная матрица имеет обратную матрицу.

    Перейдём к конкретным примерам.

    Пример 5.2. Для матриц $$A, B$$ и $$C$$ проверить выполнение следующих тождеств:

    $$(A\cdot B)\cdot C=A\cdot (B\cdot C)$$ $$(A^T + B)\cdot C=A^T\cdot C + B\cdot C$$

    Из листинга 5.4 видно, что матрицы, получившиеся в результате вычисления левой и правой частей тождества (5.4), равны, следовательно, первое тождество истинно. Для исследования тождества (5.5) из левой части равенства вычитаем правую и получаем нулевую матрицу, что так же приводит к выводу об истинности тождества.

    	
    >>> A=[1 -2 0; -3 0 4 ]; B=[3 1; 2 0; -1 1 ]; C=[1 2; -1 0 ];
    >>> (A*B) *C % Исследование тождества (5.4)
    ans =
    -2  -2
    -14 -26
    >>> A* (B*C)
    ans =
    -2  -2
    -14 -26
    >>> (A’+B) *C-(A’ * C+B*C) % Исследование тождества (5.5)
    ans =
    	0 0
    	0 0
    	0 0
    

    Пример 5.3. Проверить является ли матрица симметрической. Квадратная матрица называется симметрической, если $$A^T= A$$.

    В листинге 5.5 видно, что в результате вычитания из матрицы $$A$$ транспонированной матрицы $$A^T$$ получена нулевая матрица, то есть тождество выполнено, и заданная матрица — симметрическая.

    	
    >>> A=[1 -0.5 1.5; - 0.50 2.5; 1.5 2.5 -2]; A - A’
    ans =
    0 0 0
    0 0 0
    0 0 0
    

    Пример 5.4. Проверить, является ли матрица кососимметрической. Квадратная матрица называется кососимметрической, если $$A^T= -A$$. Проверив равенство для заданной матрицы (листинг 5.6), убеждаемся в его истинности.

    	
    >>> A=[0 -0.25 0.75; 0.25 0 -1.25; -0.75 1.25 0]; A’+A
    ans =
    	0 0 0
    	0 0 0
    	0 0 0
    

    Пример 5.5. Проверить, является ли матрица ортогональной. Квадратная матрица называется ортогональной, если $$|A|=det A \ne 0$ и $A^T=A^{-1}$$ и $$A^T= A^{-1}$$ .

    Для решения поставленной задачи необходимо вычислить определитель заданной матрицы и убедиться в том, что он не равен нулю. Затем следует транспонировать исходную матрицу и найти матрицу, обратную к ней. Если визуально сложно убедиться в том, что транспонированная матрица равна обратной, можно вычислить их разность. В результате должна получиться нулевая матрица (листинг 5.7).

    	
    >>> A= [ 0.5  0.7071  0.5; 0.7071  0 -0.7071; 0.5 -0.7071  0.5 ]
    A =
    	0.50000  0.70710   0.50000
    	0.70710  0.00000  -0.70710
    	0.50000 -0.70710   0.50000
    >>> det (A) % Определитель матрицы A отличен от нуля
    ans = -0.99998
    >>> A’-inv (A) % При вычитании из транспонированной матрицы A обратной
    % к ней матрицы получаем нулевую матрицу, значит A — ортогональная.
    ans =
    	0.0000e+00   -1.3562e-05  0.0000e+00
    	-1.3562e-05  0.0000e+00   1.3562e-05
    	0.0000e+00   1.3562e-05   0.0000e+00
    

    Пример 5.6. Задана матрица $$A$$. Показать, что матрица $$B = 2A-E$$, где $$E$$ — единичная матрица — инволютивна. Квадратная матрица называется инволютивной, если $$B^2= E$$, где $$E$$ — единичная матрица.

    Решение задачи:

    	
    >>> A=[6 -15;2 -5]; B=2*A -eye ( 2 ); B^2
    ans =
    	1 0
    	0 1
    

    Пример 5.7. Решить матричные уравнения $$A \cdot X = B$$ и $$X \cdot A = B$$, выполнить проверку.

    Матричное уравнение это уравнение вида $$A \cdot X = B$$ или $$X \cdot A = B$$, где $$X$$ это неизвестная матрица. Если умножить матричное уравнение на матрицу обратную к $$A$$, то оно примет вид: $$A^{-1}\cdot A\cdot X=B\cdot A^{-1}$$ или $$X\cdot A\cdot A^{-1}=B\cdot A^{-1}$$. Так как $$A^{-1}\cdot A=A\cdot A^{-1}=E$$, а $$E\cdot X=X\cdot E=X$$, то неизвестную матрицу $$X$$ можно вычислить так:$$X=A^{-1}\cdot B$$ или $$X=B\cdot A^{-1}$$. Понятно, что матричное уравнение имеет единственное решение, если $$A$$ и $$B$$ — квадратные матрицы $$n$$-го порядка, и определитель матрицы $$A$$ не равен нулю. Как решить матричное уравнение в Octave, показано в листинге 5.8.

    	
    >>> A=[ 2 3; -2 6 ]; B=[2 5; 2 / 3 5 / 3 ];
    % Решение уравнения A · X = B
    >>> X=A\B % Первый способ
    X =
    	0.55556   1.38889
    	0.29630   0.74074
    >>> X=inv (A) *B % Второй способ
    X =
    	0.55556 1.38889
    	0.29630 0.74074
    >>> A*X - B % Проверка A · X - B = 0
    ans =
    	0.0000e+00   0.0000e+00
    	-3.3307e-16  -6.6613e-16
    % Решение уравнения X · A = B
    >>> X=B/A % Первый способ
    X =
    	1.222222    0.222222
    	0.407407    0.074074
    >>> X=B* inv (A) % Второй способ
    X =
    	1.222222 0.222222
    	0.407407 0.074074
    >>> X*A - B % Проверка X · A _ B = 0
    ans =
    	0.0000e+00  0.0000e+00
    	1.1102e-16  0.0000e+00
    

    5.6 Решение систем линейных уравнений

    Система m уравнений с $$n$$ неизвестными вида

    $$\left\{ \begin{array}{ccccccccc} a_{11}x_1+a_{12}x_2+\dots+a_{1n}x_n=b_1\\ a_{21}x_1+a_{22}x_2+\dots+a_{2n}x_n=b_2\\ \vdots \vdots \vdots \vdots \vdots\\\ a_{m1}x_1+a_{m2}x_2+\dots+a_{mn}x_n=b_m \end{array} \right.$$

    называется системой линейных алгебраических уравнений (СЛАУ), причём $$x_j$$ — неизвестные, $$a_ij$$ — коэффициенты при неизвестных, $$b_i$$ — свободные коэффициенты $$(i = 1 . . . m, j = 1 . . . n)$$.

    Кроме того, система из m линейных уравнений с $$n$$ неизвестными может быть описана при помощи матриц: $$A \cdot x = b$$, где $$x = \{x_j\}$$ — вектор неизвестных, $$A = \{a_{ij}\}$$ — матрица коэффициентов при неизвестных или матрица системы, $$b = \{b_i\}$$ — вектор свободных членов системы или вектор правых частей $$(i = 1 . . . m, j = 1 . . . n)$$.

    Матрица $$(A|b)$$, которая формируется путём приписывания к матрице коэффициентов $$A$$ столбца свободных членов $$b$$, называется расширенной матрицей системы.

    Если все $$b_i= 0$$, то речь идёт об однородной системе линейных уравнений, иначе говорят о неоднородной системе.

    Совокупность всех решений системы $$(x_1, x_2. . . x_n)$$, называется множеством решений или просто решением системы. Две системы уравнений называются эквивалентными, если они имеют одинаковое множество решений.

    Однородные системы линейных уравнений $$Ax = 0$$ всегда разрешимы, так как последовательность $$(x_1= 0, x_2= 0, . . ., x_n= 0)$$ удовлетворяет всем уравнениям системы. Такое решение называют тривиальным. Вопрос о решении однородных систем сводится к вопросу о том, существуют ли кроме тривиального другие, нетривиальные решения.

    Система линейных уравнений может не иметь ни одного решения и тогда она называется несовместной, например, в системе:

    $$\left\{\begin{aligned}x_1+x_2=1\\x_1+x_2=3\\\end{aligned}\right.$$

    левые части уравнений совпадают, а правые различны, поэтому никакие значения $$x_1$$ и $$x_2$$ не могут удовлетворить обоим уравнениям сразу.

    Если же система линейных уравнений обладает решением, то она называется совместной. Совместная система называется определённой, если она обладает одним единственным решением, и неопределённой, если решений больше чем одно. Так, система:

    $$\left\{ \begin{aligned} x_1+2x_2=7\\ x_1+x_2=6 \end{aligned} \right.$$

    определена и имеет единственное решение $$x_1= 5, x_2= 1$$, а система уравнений:

    $$\left\{ \begin{aligned} 3x_1-x_2=1\\ 6x_1-2x_2=2 \end{aligned} \right.$$

    неопределена, так как имеет бесконечное множество решений вида $$x_1 = k, x_2= 3k-1$$, где число $$k$$ произвольно.

    Совокупность всех решений неопределённой системы уравнений называется её общим решением, а какое–то одно конкретное решение — частным. Частное решение, полученное из общего при нулевых значениях свободных переменных, называется базисным.

    При определении совместности систем уравнений важную роль играет понятие ранга матрицы. Пусть дана матрица $$A$$ размером $$n \times m$$. Вычёркиванием некоторых строк или столбцов из неё можно получить квадратные матрицы $$k$$-го порядка, определители которых называются минорами порядка $$k$$ матрицы $$A$$. Наивысший порядок не равных нулю миноров матрицы $$A$$ называют рангом матрицы и обозначают $$r(A)$$. Из определения вытекает, что $$r(A) \le min(n, m)$$, а $$r(A) = 0$$, только если матрица нулевая и $$r(A) = n$$ для невырожденной матрицы $$n$$-го порядка. При элементарных преобразованиях (перестановка строк матрицы, умножение строк на число отличное от нуля и сложение строк) ранг матрицы не изменяется. Итак, если речь идёт об исследовании системы на совместность, следует помнить, что система $$n$$ линейных уравнений с $$m$$ неизвестными:

  • несовместна, если $$r(A|b) > r(A)$$;
  • совместна, если $$r(A|b) = r(A)$$, причём при $$r(A|b) = r(A) = m$$ имеет единственное решение, а при $$r(A|b) = r(A) <m$$ имеет бесконечно много решений.
  • Существует немало мето дов для практического отыскания решений систем линейных уравнений. Эти методы разделяют на точные и приближённые. Метод относится к классу точных, если с его помощью можно найти решение в результате конечного числа арифметических и логических операций. В этом разделе на конкретных примерах будут рассмотрены только точные методы решения систем.

    Пример 5.8. Решить систему линейных уравнений

    $$\left\{ \begin{array}{rcrcrcr} 2x_1-x_2+5x_3=1\\ 3x_1+2x_2-5x_3=1\\ x_1+x_2-2x_3=4 \end{array} \right.$$

    при помощи правила Крамера.

    Правило Крамера заключается в следующем. Если определитель $$detA$$ матрицы системы $$Ax = b$$ из $$n$$ уравнений с $$n$$ неизвестными отличен от нуля, то система имеет единственное решение $$(x_1, x_2, . . ., x_n)$$, определяемое по формулам Крамера $$x_i=\frac{det_i}{det}$$, где $$det_i$$ — определитель матрицы, полученной из матрицы системы $$A$$ заменой $$i$$-го столбца столбцом свободных членов $$b$$. Если определитель матрицы системы равен нулю, это не означает, что система не имеет решений: возможно, её нельзя решить по формулам Крамера.

    Итак, для решения поставленной задачи необходимо выполнить следующие действия:

  • представить систему в матричном виде, то есть сформировать матрицу системы $$A$$ и вектор правых частей $$b$$;
  • вычислить главный определитель $$detA$$;
  • сформировать вспомогательные матрицы для вычисления определителей $$det_i$$;
  • вычислить определители $$det_i$$;
  • найти решение системы по формуле $$x_i=\frac{det_i}{det}$$.
  • Листинг 5.9 содержит решение поставленной задачи.

    	
    >>> disp( ’Решение СЛАУ методом Крамера’ );
    >>> disp( ’Матрица системы:’ ); A=[2 -1 5; 3 2 -5;1 1 -2]
    >>> disp( ’Вектор свободных коэффициентов:’ ); b = [ 0; 1; 4 ]
    >>> disp( ’Главный определитель:’ ); D=det (A)
    >>> disp( ’Вспомогательные матрицы:’ );
    >>> A1=A; A1( :, 1 )=b
    >>> A2=A; A2( :, 2 )=b
    >>> A3=A; A3( :, 3 )=b
    >>> disp( ’Вспомогательные определители:’ );
    >>> d( 1 )=det (A1);
    >>> d( 2 )=det (A2);
    >>> d( 3 )=det (A3);
    >>> d
    >>> disp( ’Вектор решений СЛАУ Ax=b’ ); x=d/D
    >>> disp( ’Проверка Ax-b=0’ ); A* x’-b
    % _______________________________
    Решение СЛАУ методом Крамера
    Матрица системы:
    A =
    	2 -1  5
    	3  2 -5
    	1  1 -2
    Вектор свободных коэффициентов:
    b =
    	0
    	1
    	4
    Главный определитель:
    D = 6 . 0 0 0 0
    Вспомогательные матрицы:
    A1 =
    	0 -1  5
    	1  2 -5
    	4  1 -2
    A2 =
    	2 0  5
    	3 1 -5
    	1 4 -2
    A3 =
    	2 -1 0
    	3  2 1
    	1  1 4
    Вспомогательные определители:
    d = -17.000   91.000    25.000
    Вектор решений СЛАУ Ax=b
    x = -2.8333   15.166    74.1667
    Проверка Ax-b=0
    ans =
    -4.4409e-15
    3.5527e-15
    8.8818e-16
    

    Решение СЛАУ по формулам Крамера выглядит достаточно громоздко, поэтому на практике его используют довольно редко.

    Пример 5.9. Решить систему линейных уравнений 5.6 из примера 5.8 методом обратной матрицы.

    Метод обратной матрицы: для системы из $$n$$ линейных уравнений с $$n$$ неизвестными $$Ax = b$$, при условии, что определитель матрицы $$A$$ не равен нулю, единственное решение можно представить в виде $$x = A^{-1}b$$ (вывод формулы см. в примере 5.7).

    Итак, для того, чтобы решить систему линейных уравнений методом обратной матрицы, необходимо выполнить следующие действия:

  • сформировать матрицу коэффициентов и вектор свободных членов заданной системы;
  • решить систему, представив вектор неизвестных как произведение матрицы обратной к матрице системы и вектора свободных членов (листинг 5.10).
  • 	
    >>> disp ( ’Решение СЛАУ методом обратной матрицы’ );
    >>> disp ( ’Матрица системы:’ );
    >>> A=[2 -1 5; 3 2 -5;1 1 -2]
    >>> disp ( ’Вектор свободных коэффициентов:’ );
    >>> b = [ 0; 1; 4 ]
    >>> disp ( ’Вектор решений СЛАУ Ax=b’ );
    >>> x=A^( -1) * b
    >>> disp ( ’Вектор решений СЛАУ Ax=b с помощью функции inv(A)’ );
    >>> x=inv (A) * b
    >>> disp ( ’Проверка Ax=b’ );
    >>> A*x
    % ______________________________________
    Решение СЛАУ методом обратной матрицы
    Матрица системы:
    A =
    	2 -1  5
    	3  2 -5
    	1  1 -2
    Вектор свободных коэффициентов:
    b =
    	0
    	1
    	4
    Вектор решений СЛАУ Ax=b
    x =
    	-2.8333
    	15.1667
    	4.1667
    Вектор решений СЛАУ Ax=b с помощью функции inv(A)
    x =
    	-2.8333
    	15.1667
    	4.1667
    Проверка Ax-b=0
    ans =
    -5.3291e-15
    1.0000e+00
    4.0000e+00
    

    Пример 5.10. Решить систему линейных уравнений

    $$\left\{ \begin{array}{ccccccccc} 2x_1+x_2-5x_3+x_4=8\\ x_1-3x_2-6x_4=9\\ 2x_2-x_3+2x_4=-5\\ x_1+4x_2-7x_3+6x_4=0 \end{array} \right.$$

    методом Гаусса.

    Решение системы линейных уравнений при помощи метода Гаусса основывается на том, что от заданной системы переходят к эквивалентной системе, которая решается проще, чем исходная система.

    Метод Гаусса состоит из двух этапов. Первый этап — это прямой ход, в результате которого расширенная матрица системы путём элементарных преобразований (перестановка уравнений системы, умножение уравнений на число отличное от нуля и сложение уравнений) приводится к ступенчатому виду:

    $$\left( \begin{matrix} a_{11} a_{12} \dots a_{1n}\cr a_{21} a_{22} \dots a_{2n}\cr \dots \dots \dots \dots \cr a_{n1} a_{n2} \dots a_{nn} \end{matrix} \right| \left. \begin{matrix} b_1\cr b_2\cr \dots\cr b_n \end{matrix} \right) \Rightarrow \left( \begin{matrix} 1 c_{12} \dots c_{1n}\cr 0 1 \dots c_{2n}\cr \dots \dots \dots \dots\cr 0 0 \dots 1 \end{matrix} \right| \left. \begin{matrix} d_1\cr d_2\cr \dots\cr d_n \end{matrix} \right)$$

    На втором этапе (обратный ход) ступенчатую матрицу преобразовывают так, чтобы в первых n столбцах получилась единичная матрица:

    $$\left( \begin{matrix} 1 0 \dots 0\cr 0 1 \dots 0\cr \dots \dots \dots \dots\cr 0 0 \dots 1 \end{matrix} \right.\left| \begin{matrix} x_1\cr x_2\cr \dots\cr x_n \end{matrix} \right)$$

    Последний, $$n + 1$$ столбец этой матрицы содержит решение системы линейных уравнений.

    Исходя из выше изложенного, порядок решения задачи в Octave (листинг 5.11) следующий:

  • сформировать матрицу коэффициентов $$A$$ и вектор свободных членов $$b$$ заданной системы;
  • сформировать расширенную матрицу системы, объединив $$A$$ и $$b$$;
  • используя функцию $$rref$$ привести расширенную матрицу к ступенчатому виду;
  • найти решение системы, выделив последний столбец матрицы, полученной в предыдущем пункте;
  • выполнить вычисление $$Ax - b$$, если в результате получился нулевой вектор, задача решена верно.
  • 	
    >>> disp( ’Решение СЛАУ методом Гаусса’ );
    >>> disp( ’Матрица системы:’ ); A=[21 - 51; 1 - 30 - 6; 02 - 12; 14 - 76 ]
    >>> disp( ’Вектор свободных коэффициентов:’ ); b = [ 8; 9; - 5; 0 ]
    >>> disp( ’Расширенная матрица системы:’ ); C=rref( [A b ] )
    >>> disp( ’Размерность матрицы C:’ ); n=size(C)
    >>> disp( ’Вектор решений СЛАУ Ax=b’ ); x=C( :, n ( 2 ) )
    >>> disp( ’Проверка Ax-b’ ); A* x-b
    % _________________________________
    Решение СЛАУ методом Гаусса
    Матрица системы:
    A =
    	2  1 -5  1
    	1 -3  0 -6
    	0  2 -1  2
    	1  4 -7  6
    Вектор свободных коэффициентов:
    b =
    	 8
    	 9
    	-5
    	 0
    Расширенная матрица системы:
    C =
    	1.00000 0.00000 0.00000 0.00000 3.00000
    	0.00000 1.00000 0.00000 0.00000 -4.00000
    	0.00000 0.00000 1.00000 0.00000 -1.00000
    	0.00000 0.00000 0.00000 1.00000 1.00000
    Размерность матрицы С:
    n = 4 5
    Вектор решений СЛАУ Ax=b
    x =
    	 3.00000
    	-4.00000
    	-1.00000
    	 1.00000
    Проверка Ax-b
    ans =
    	 0.0000e+00
    	 1.7764e-15
    	-8.8818e -16
    	-1.6653e -15
    

    Пример 5.11. Решить систему линейных уравнений из примера 5.10 с помощью $$LU$$ -разложения.

    Дадим определение разложения матрицы на множители. Если все определители квадратной матрицы $$A$$ отличны от нуля, то существуют такие нижняя $$L$$ и верхняя $$U$$ треугольные матрицы, что $$A = LU$$:

    $$\begin{pmatrix} a_{11} a_{12} \dots a_{1n}\cr a_{21} a_{22} \dots a_{2n}\cr \dots \dots \dots \dots \cr a_{n1} a_{n2} \dots a_{nn} \end{pmatrix} = \begin{pmatrix} 1 0 \dots 0\cr l_{21} 1 \dots 0\cr \dots \dots \dots \dots \cr l_{n1} l_{n2} \dots 1 \end{pmatrix} \cdot \begin{pmatrix} u_{11} u_{12} \dots u_{1n}\cr 0 u_{22} \dots u_{2n}\cr \dots \dots \dots \dots \cr 0 0 \dots u_{nn} \end{pmatrix}$$

    Если диагональные элементы одной из матриц ненулевые, то такое разложение единственно.

    Метод решения системы линейных уравнений с использованием разложения матрицы коэффициентов на множители называют LU–разложением или LU–факторизацией.

    Если матрица $$A$$ исходной системы $$Ax = b$$ разложена в произведение треугольных матриц $$L$$ и $$U$$, то можно записать уравнение:$$LUx = b$$.

    Введя вектор вспомогательных переменных $$y=(y_1,y_2,\dots,y_n)^T$$, уравнение $$LUx = b$$ можно переписать в виде системы:$$\left\{\begin{matrix}Ly=b\\Ux=y\end{matrix}\right$$.

    Таким образом решение системы $$Ax = b$$ с квадратной матрицей коэффициентов свелось к последовательному решению двух систем с треугольными матрицами коэффициентов.

    Обратим внимание на тот факт, что выполнение приведённых расчётов можно интерпретировать как преобразование данной системы к треугольной. Иными словами, LU–разложение это другая схема реализации метода Гаусса.

    Исходя из средств, которыми располагает Octave, решение поставленной задачи будет выглядеть так (листинг 5.12):

  • сформируем матрицу коэффициентов $$A$$ и вектор свободных членов $$b$$ заданной системы;
  • воспользовавшись функцией $$lu(A)$$, получим матрицы $$L$$ (нижняя треугольная матрица), $$U$$ (верхняя треугольная матрица) и $$P$$ (матрица перестановок или иначе, матрица, которая демонстрирует, каким образом были переставлены строки исходной матрицы при разложении на множители $$L$$ и $$U$$);
  • поскольку в задаче речь идёт о решении системы, то элементы вектора $$b$$ должны занять места соответствующие строкам матрицы $$A$$, для чего необходимо выполнить действие $$Pb$$;
  • решим системы уравнений $$Ly = b$$ относительно $$y$$;
  • зная $$U$$ и $$y$$, найдём решение системы $$Ux = y$$.
  • 	
    >>> disp( ’Решение СЛАУ методом LU-разложения’ );
    >>> disp( ’Матрица системы:’ ); A=[21 - 51; 1 - 30 - 6; 02 - 12; 14 - 76 ]
    >>> disp( ’Вектор свободных коэффициентов:’ ); b = [ 8; 9; - 5; 0 ]
    >>> disp( ’LU-разложение:’ ); [ L, U, P]= lu (A)
    >>> Y=rref( [ L P* b ] )
    >>> n=size(Y)
    >>> y=Y( :, n ( 2 ) )
    >>> X=rref( [U y ] )
    >>> n=size(X)
    >>> x=X( :, n ( 2 ) )
    >>> disp( ’Проверка Ax-b’ ); A* x-b
    % ___________________________________
    Решение СЛАУ методом LU-разложения
    Матрица системы:
    A =
    	2  1 -5  1
    	1 -3  0 -6
    	0  2 -1  2
    	1  4 -7  6
    Вектор свободных коэффициентов:
    b =
    		 8
    		 9
    		-5
    		 0
    LU-разложение:
    L =
    	1.00000  0.00000  0.00000  0.00000
    	0.50000  1.00000  0.00000  0.00000
    	0.50000  -1.00000 1.00000  0.00000
    	0.00000  -0.57143 -0.21429 1.00000
    U =
    	2.00000 1.00000  -5.00000 1.00000
    	0.00000 -3.50000  2.50000 -6.50000
    	0.00000 0.00000  -2.00000 -1.00000
    	0.00000 0.00000  0.00000  -1.92857
    P =
    Permutation Matrix
    	1 0 0 0
    	0 1 0 0
    	0 0 0 1
    	0 0 1 0
    Y =
    	1.00000 0.00000 0.00000 0.00000 8.00000
    	0.00000 1.00000 0.00000 0.00000 5.00000
    	0.00000 0.00000 1.00000 0.00000 1.00000
    	0.00000 0.00000 0.00000 1.00000 -1.92857
    n = 4  5
    y =
    	 8.0000
    	 5.0000
    	 1.0000
    	-1.9286
    X =
    	1.00000 0.00000 0.00000 0.00000 3.00000
    	0.00000 1.00000 0.00000 0.00000 -4.00000
    	0.00000 0.00000 1.00000 0.00000 -1.00000
    	0.00000 0.00000 0.00000 1.00000 1.00000
    n = 4   5
    x =
    	 3.0000
    	-4.0000
    	-1.0000
    	 1.0000
    Проверка Ax-b
    ans =
    	 0.0000e+00
    	 0.0000e+00
    	-8.8818e-16
    	 6.6613e-16
    

    Пример 5.12. Решить систему линейных уравнений

    $$\left\{ \begin{array}{rcrcrcrcr} 3x_1+x_2-x_3+2x_4=6\\ -5x_1+x_2+3x_3-4x_4=-12\\ 2x_1+x_3-x_4=1\\ x_1-5x_2+3x_3+3x_4=3 \end{array} \right.$$

    с помощью $$QR$$–разложения.

    Квадратную матрицу $$A$$ можно представить в виде произведения ортогональной матрицы $$Q$$ и верхней треугольной матрицы $$R$$. Использование этого свойства матриц при решении системы линейных уравнений называют методом QR–разложения.

    Идея решения системы этим методом аналогична той, что была описана в предыдущей задаче:

    Ax = b -> QRx = b -> (Qy = b, Rx = y).

    Таким образом, решение системы уравнений с квадратной матрицей коэффициентов сводится к решению двух систем, матрица коэффициентов первой ортогональная, второй — верхняя треугольная.

    Как решить эту задачу средствами Octave, показано в листинге 5.13.

    	
    >>> disp ( ’Решение линейной системы с помощью QR–разложения’ );
    >>> A=[3,1, -1,2; -5,1,3, -4;2,0,1, -1;1, -5,3, -3]
    >>> b = [ 6; - 1 2; 1; 3 ]
    >>> [Q,R]= qr (A)
    >>> y=Q’ _ b
    >>> X=rref ( [R y ] )
    >>> x=X( 1 : 4, 5 : 5 )
    % ____________________________________
    Решение линейной системы с помощью QR–разложения
    A =
    	3   1 -1  2
    	-5  1  3 -4
    	2   0  1 -1
    	1  -5  3 -3
    b =
    	 6
    	-12
    	 1
    	 3
    Q =
    	0.480384   0.303216   0.358483  0.740797
    	-0.800641  0.020214   0.545518  0.246932
    	0.320256   0.070750   0.735670  -0.592638
    	0.160128   -0.950077  0.180800  0.197546
    R =
    	6.24500  -1.12090  -2.08167  3.36269
    	0.00000  5.07381   -3.02205  3.30505
    	0.00000  0.00000   2.55614   -2.74318
    	0.00000  0.00000   0.00000   0.49386
    y =
    	 13.2906
    	-1.2028
    	-3.1172
    	 1.4816
    X =
    	1.00000  0.00000  0.00000  0.00000  1.00000
    	0.00000  1.00000  0.00000  0.00000  -1.00000
    	0.00000  0.00000  1.00000  0.00000  2.00000
    	0.00000  0.00000  0.00000  1.00000  3.00000
    x =
    	 1.00000
    	-1.00000
    	 2.00000
    	 3.00000
    

    Пример 5.13. Исследовать систему на совместность и если возможно решить её:

    $$\text{а)} \left\{ \begin{array}{rcrcrcr} x_1+2x_2+2x_3=-9\\ x_1-x_2+x_3=2\\ 3x_1-6x_2-x_3=25 \end{array} \right.\cr \text{б)} \left\{ \begin{array}{rcrcrcrcr} x_1-5x_2-8x_3+x_4=3\\ 3x_1+x_2-3x_3-5x_4=1\\ x_1-7x_2+2x_4=-5\\ 11x_2+20x_3-9x_4=2 \end{array} \right.\cr \text{в)} \left\{ \begin{array}{rcrcrcrcr} 4x_1+x_2-3x_3-x_4=0\\ 2x_1+3x_2+x_3-5x_4=0\\ x_1-2x_2-2x_3+3x_4=0 \end{array} \right.$$

    Для решения задачи (листинг 5.14) введём исходные данные, то есть матрицу коэффициентов системы и вектор правых частей. Затем выполним вычисление рангов матрицы коэффициентов и расширенной матрицы системы.

    В случае а) ранги матриц равны и совпадают с количеством неизвестных $$r(A|b) = r(A) = 3$$, значит, система совместна и имеет единственное решение. Вычисление рангов матрицы системы и расширенной матрицы системы б) показывает, что ранг расширенной матрицы больше ранга матрицы системы $$r(A|b) > r(A)$$, что означает несовместность системы. В процессе вычислений для системы в) выясняется, что ранг расширенной матрицы равен рангу матрицы системы $$r(A|b) = r(A) = 3$$, но меньше, чем количество неизвестных системы $$r(A|b) = r(A) < 4$$. Значит, система совместна, но имеет бесконечное множество решений.

    		
    disp( ’Исследование системы на совместность’ );
    disp( ’Введите матрицу системы:’ ); A=input ( ’A=’ );
    disp( ’Введите вектор свободных коэффициентов:’ ); b=input ( ’b=’ );
    disp( ’Размерность системы:’ ); [ n,m]= size (A)
    disp( ’Ранг матрицы системы:’ ); r= rank (A)
    disp( ’Ранг расширенной матрицы:’ ); R= rank ( [A b ] )
    if r==R
    disp( ’Система совместна.’ );
    if r==m
    	disp( ’Система имеет единственное решение.’ );
    	disp( ’Решение системы методом обратной матрицы:’ ); x=inv (A) _ b
    	disp( ’Проверка Ax-b=0:’ ); A_ x_b
    else
    	disp( ’Система имеет бесконечно много решений.’ )
    end;
    else
    disp( ’Система не совместна’ );
    end;
    % Исследование системы а)
    Исследование системы на совместность
    Введите матрицу системы:
    A= [ 1 2 5; 1 -1 3; 3 -6 -1]
    Введите вектор свободных коэффициентов:
    b= [ - 9; 2; 25 ]
    Размерность системы:
    n = 3
    m = 3
    Ранг матрицы системы:
    r = 3
    Ранг расширенной матрицы:
    R = 3
    Система совместна.
    Система имеет единственное решение.
    Решение системы методом обратной матрицы:
    x =
    	 2.0000
    	-3.0000
    	-1.0000
    Проверка Ax-b=0:
    ans =
    	0.0000e+00
    	8.8818e-16
    	3.5527e-15
    % Исследование системы б)
    Исследование системы на совместность
    Введите матрицу системы:
    A= [ 1 -5 -8 1; 3 1 -3 -5;1 0 -7 2; 0 11 20 -9]
    Введите вектор свободных коэффициентов:
    b= [ 3; 1; - 5; 2 ]
    Размерность системы:
    n = 4
    m = 4
    Ранг матрицы системы:
    r = 3
    Ранг расширенной матрицы:
    R = 4
    Система не совместна
    % Исследование системы в)
    Исследование системы на совместность
    Введите матрицу системы:
    A= [ 4 1 -3 -1;2 3 1 -5;1 -2 -2 4 ]
    Введите вектор свободных коэффициентов:
    b= [ 0; 0; 0 ]
    Размерность системы:
    n = 3
    m = 4
    Ранг матрицы системы:
    r = 3
    Ранг расширенной матрицы:
    R = 3
    Система совместна.
    Система имеет бесконечное множество решений.
    

    5.7 Собственные значения и собственные векторы

    Пусть $$A$$ — матрица размерностью $$n \times n$$. Любой ненулевой вектор $$x$$, принадлежащий некоторому векторному пространству, для которого $$Ax=\lambda x$$, где λ — некоторое число, называется собственным вектором матрицы, а λ — принадлежащим ему или соответствующим ему собственным значением матрицы A.

    Уравнение $$Ax = \lambda x$$ эквивалентно уравнению $$(A - \lambda E)x = 0$$. Это однородная система линейных уравнений, нетривиальные решения которой являются искомыми собственными векторами. Она имеет нетривиальные решения только тогда, когда $$r(A - \lambda E) < n$$, то есть, если $$det(A - \lambda E) = 0$$. Многочлен $$det(A - \lambda E)$$ называется характеристическим многочленом матрицы A, а уравнение $$det(A - \lambda E) = 0$$ — характеристическим уравнением матрицы A. Если $$\lambda_i$$ — собственные значения $$A$$, то нетривиальные решения однородной системы линейных уравнений $$det(A - \lambda E) = 0$$ есть собственные векторы A, принадлежащие собственному значению $$\lambda_i$$. Множество решений этой системы уравнений называют собственным подпространством матрицы A, принадлежащим собственному значению $$\lambda_i$$, каждый ненулевой вектор собственного подпространства является собственным вектором матрицы A.

    Иногда требуется найти собственные векторы y и собственные значения $$\hbar$$, определяемые соотношением $$Ay=\hbar By, (y\ne 0)$$, где $$B$$ — невырожденная матрица. Векторы $$y$$ и числа $$\hbar$$ обязательно являются собственными векторами и собственными значениями матрицы $$B^{-1}A$$. Пусть $$A=a_{ij}$$ и $$B=b_{ij}$$, причём матрица $$B$$ является положительно определённой, тогда собственные значения $$\hbar$$ совпадают с корнями уравнения $$n$$–й степени $$det(A-\hbar B)=det(a_{ij}-\hbar b_{ij}=0$$. Это уравнение называют характеристическим уравнением для обобщённой задачи о собственных значениях. Для каждого корня $$\hbar$$ кратности $$m$$ существует ровно $$m$$ линейно независимых собственных векторов $$y$$.

    Пример 5.14. Найти собственные значения и собственные векторы матрицы $$A$$.

    В листинге 5.15 показано решение поставленной задачи.

    	
    disp( ’Введите матрицу:’ ); A=input ( ’A=’ ); [ n,m]= size (A);
    disp( ’Вектор собственных значений матрицы A:’ ); d=eig (A)
    [ L, D]= eigA);
    disp( ’L - Матрица собственных векторов:’ ); L
    disp( ’D - Диагональная матрица собственных значений:’ ); D
    disp( ’Проверка:’ );
    for i =1:n
    	(A - D( i, i ) * eye ( n ) ) *L ( :, i )
    end;
    % _____________________________________
    Введите матрицу:
    A= [ 5 2 -1;1 -3 2; 4 5 -3]
    Вектор собственных значений матрицы A:
    d =
    	 4.9083e+00
    	-2.1495e-16
    	-5.9083e+00
    L - Матрица собственных векторов:
    L =
    	-0.796113  -0.049326  0.181303
    	-0.241044  0.542590   -0.598803
    	-0.555069  0.838548   0.780106
    D - Диагональная матрица собственных значений:
    D =
    Diagonal Matrix
    	4.9083e+00    0             0
    	0             -2.1495e-16   0
    	0             0             -5.9083e+00
    Проверка:
    ans =
    	-2.3657e-16
    	-4.3585e-16
    	 7.4420e-16
    ans =
    	 2.7756e-17
    	-4.1633e-16
    	 4.4409e-16
    ans =
    	2.0632e-16
    	1.5772e-15
    	2.6606e-16
    

    Пример 5.15. Привести заданную матрицу к диагональному виду.

    Задача состоит в том, чтобы для квадратной матрицы $$A$$ подобрать такую матрицу $$C$$, чтобы матрица $$B = C^{-1} AC$$ имела диагональный вид. Эта задача связана с теорией собственных значений, так как разрешима только в том случае, если матрица $$C$$ состоит из собственных векторов матрицы $$A$$.

    В листинге 5.16 приведено решение поставленной задачи.

    	
    disp( ’Введите матрицу:’ ); A=input ( ’A=’ );
    format bank;
    [ C,D]= eig (A);
    disp( ’Диагональная матрица к матрице А:’ ); D
    disp( ’Проверка B=D’ ); B=inv (C) *A*C
    % _____________________________________
    Введите матрицу:
    A= [ 2 1 3; 1 -2 1; 3 2 2 ]
    Диагональная матрица к матрице А:
    D =
    Diagonal Matrix
    	5.41     0        0
    	0 		 -1.00    0
    	0        0        -2.41
    Проверка B=D
    B =
    	5.41   -0.00   -0.00
    	0.00   -1.00   0.00
        -0.00  -0.00   -2.41
    

    Пример 5.16. Найти решение обобщённой задачи о собственных значениях для матриц $$A$$ и $$B$$.

    Обобщённую задачу о собственных значениях (листинг 5.17) решают при помощи функции $$eig(A, B)$$, которая в качестве результата выдаёт матрицу обобщённых собственные векторов и диагональную матрицу, содержащую обобщённые собственные значения.

    	
    disp( ’Введите матрицу А:’ ); A=input ( ’A=’ );
    disp( ’Введите матрицу В:’ ); B=input ( ’B=’ );
    [ X,V]= eig (A,B);
    disp( ’Матрица обобщённых собственных векторов:’ ); X
    disp( ’Матрица обобщённых собственных значений:’ ); V
    disp( ’Обобщённые собственные значения:’ ); v=diag (V)
    % _____________________________________
    Введите матрицу А:
    A= [ 1 -3;-3 4 ]
    Введите матрицу В:
    B= [ 1 2; -3 1 ]
    Матрица обобщённых собственных векторов:
    X =
    	1.00   0.92
    	0.00   1.00
    Матрица, содержащая обобщённые собственные значения:
    V =
    Diagonal Matrix
    	1.00    0
    	0       -0.71
    Обобщённые собственные значения:
    v =
    	1.00
    	-0.71
    

    5.8 Норма и число обусловленности матрицы

    Матричная норма — это некоторая скалярная числовая характеристика, которую ставят в соответствие матрице. В задачах линейной алгебры используются различные матричные нормы:

  • первая норма $$\|A\|_1$$ квадратной матрицы $$A=\{a_{ij}\}$$: $$\|A\|_1=max\sum^n_{i=1}|a_{ij}|\text{;}$$
  • вторая норма $$\|A\|_2$$ квадратной матрицы $$A=\{a_{ij}\}$$:$$\|A\|_2=\sqrt{\lambda_{max}(AA^T)}\text{,}$$, где $$\sqrt{\lambda_{max}(AA^T)}$$ — максимальное собственное значение матрицы $$A=\{a_{ij}\}$$;
  • евклидова норма $$\|A\|_e$$ квадратной матрицы $$A=\{a_{ij}\}$$:$$\|A\|_e=\sqrt{\sum^n_{i=1}\sum^n_{j=1}|a_{ij}|^2}\text{;}$$
  • бесконечная норма $$\|A\|_i$$ квадратной матрицы $$A=\{a_{ij}\}$$:$$\|A\|_i=max\sum^n_{j=1}|a_{ij}|\text{.}$$
  • Число обусловленности матрицы A используется для определения меры чувствительности системы линейных уравнений $$Ax = b$$ к погрешностям задания вектора $$b$$. Чем больше число обусловленности, тем более неустойчив процесс нахождения решения системы. Существует несколько вариантов вычисления числа обусловленности, но все они связаны с нормой матрицы, и равны произведению нормы исходной матрицы на норму обратной:

  • число обусловленности матрицы, вычисленное в норме $$\|A\|_1:N=\|A\|_1\cdot \|A^{-1}\|_1$$;
  • число обусловленности матрицы, вычисленное в норме $$\|A\|_2:M=\|A\|_2\cdot \|A^{-1}\|_2$$;
  • число обусловленности матрицы, вычисленное в норме $$\|A\|_i:P=\|A\|_i\cdot \|A^{-1}\|_i$$;
  • число обусловленности матрицы, вычисленное в норме $$\|A\|_e:H=\|A\|_e\cdot \|A^{-1}\|_e$$.
  • Пример 5.17. Вычислить нормы и числа обусловленности матрицы A.

    В листинге 5.18 приведён фрагмент документа, в котором происходит вычисление норм матрицы A с помощью функции $$norm$$ и по соответствующим формулам. Вычисление чисел обусловленности проведено при помощи функции $$cond(A)$$ и по формулам, отражающим зависимость числа обусловленности от соответствующей нормы матрицы.

    	
    disp( ’Введите матрицу:’ ); A=input ( ’A=’ ); [ n,m]= size (A);
    disp( ’Первая норма:’ ); n_1= norm(A, 1 )
    N_1= max(sum( abs (A) ) )
    disp ( ’Вторая норма:’ ); n_2= norm(A, 2 )
    N_2= sqrt(max( eig (A*A’ ) ) )
    disp( ’Бесконечная норма:’ ); n_i= norm(A, inf )
    N_i= max(sum( abs (A’ ) ) )
    disp( ’Евклидова норма:’ ); n_e= norm(A, ’fro’ )
    N_e= sqrt(sum( diag (A*A’ ) ) )
    disp( ’Число обусловленности в первой норме:’ ); c_1= cond (A, 1 )
    C_1= norm(A, 1 ) *norm( inv (A), 1 )
    disp ( ’Число обусловленности во второй норме:’ ); c_2= cond (A, 2 )
    C_2= norm(A, 2 ) *norm( inv (A), 2 )
    disp ( ’Число обусловленности в бесконечной норме:’ ); c_i= cond (A, inf )
    C_i= norm(A, inf ) *norm( inv (A), inf )
    disp ( ’Число обусловленности в евклидовой норме:’ ); c_e= cond (A, ’fro’ )
    C_e= norm(A, ’fro’ ) *norm( inv (A), ’fro’ )
    % _____________________________________
    Введите матрицу:
    A= [ 5 7 6 5; 7 10 8 7; 6 8 10 9; 5 7 9 10 ]
    Первая норма:
    n_1 = 33.00
    N_1 = 33.00
    Вторая норма:
    n_2 = 30.29
    N_2 = 30.29
    Бесконечная норма:
    n_i = 33.00
    N_i = 33.00
    Евклидова норма:
    n_e = 30.55
    N_e = 30.55
    Число обусловленности в первой норме:
    c_1 = 4488.00
    C_1 = 4488.00
    Число обусловленности во второй норме:
    c_2 = 2984.09
    C_2 = 2984.09
    Число обусловленности в бесконечной норме:
    c_i = 4488.00
    C_i = 4488.00
    Число обусловленности в евклидовой норме:
    c_e = 3009.58
    C_e = 3009.58
    

    5.9 Задачи линейной алгебры в символьных вычислениях

    Основы работы с символьными переменными в Octave описаны в п. 2.7. Рассмотрим работу с матрицами, заданными в символьных переменных и выражениях. Для определения символьной матрицы служит функция $$ex_matrix$$(число строк, число столбцов, элементы матрицы).

    Например:

    					
    >>> symbols
    >>> a = sym( "a" ); % Определение символьных переменных
    >>> b = sym( "b" );
    >>> c = sym( "c" );
    >>> d = sym( "d" );
    >>> Matr=ex_matrix( 1, 3, a, b, c ) % Матрица строка
    Matr = [ [ a, b, c ] ]
    >>> Matr=ex_matrix( 4, 1, a, b, c, d ) % Матрица столбец
    Matr = [ [ a ], [ b ], [ c ], [ d ] ]
    >>> Matr=ex_matrix( 2, 2, a, b, c, d ) % Матрица 2 на 2
    Matr = [ [ a, b ], [ c, d ] ]
    >>> Matr=ex_matrix( 3, 3, a, 0, b, c, 1, 1, d, 0, 2 ) % Матрица 3 на 3
    Matr = [ [ a, 0.0, b ], [ c, 1.0, 1.0 ], [ d, 0.0, 2.0 ] ]
    

    Над символьными матрицами определены операции сложения, вычитания, умножения.

    Пример 5.18. Выполнить действия над матрицами (листинг 5.19).

    	
    >>> symbols
    >>> a = sym ( "a" ); % Определение символьных переменных
    >>> b = sym ( "b" );
    >>> c = sym ( "c" );
    >>> d = sym ( "d" );
    % Определение матриц
    >>> A=ex_matrix ( 2, 2, a, b, c, d )
    A = [ [ a, b ], [ c, d ] ]
    >>> B=ex_matrix ( 2, 2, d, b, c, a )
    B = [ [ d, b ], [ c, a ] ]
    >>> C=A+B
    C = [ [ d+a, 2 * b ], [ 2 * c, d+a ] ]
    >>> D=A _ B
    D = [[ -d+a, 0 ], [ 0, d-a ] ]
    >>> C_D
    ans = [ [ - ( d -a ) * ( d+a ), 2 * ( d -a ) * b ], [ - 2 * ( d -a ) * c, ( d-a ) * ( d+a ) ] ]
    

    К сожалению над символьными матрицами не определены операции вычисления определителя и обратной матрицы.

    Для решения системы линейных алгебраических уравнений можно воспользоваться функцией $$symlsolve$$.

    Пример 5.19. Решить систему линейных алгебраических уравнений $$\left\{\begin{aligned} ax+by=c\\x+y=d\end{aligned}\right.$$ относительно переменных x и y (листинг 5.20).

    	
    >>> x = sym( "x" );
    >>> y = sym( "y" );
    >>> a = sym( "a" );
    >>> b = sym( "b" );
    >>> c = sym( "c" );
    >>> d = sym( "d" );
    >>> sols = symlsolve({ a * x+b * y==c, x+y==d },{ x, y })
    sols =
    (
    		[ 1 ] = -(a-b ) ^(-1) * ( d *b-c )
    		[ 2 ] = -(a-b ) ^( -1) * ( c-d*a )
    )
    

    Пример 5.20. Решить систему линейных алгебраических уравнений (листинг 5.21)

    $$\left\{ \begin{array}{rcrcrcr} x_1+2x_2+5x_3=-9\\ x_1-x_2+3x_3=2\\ 3x_1-6x_2-x_3=25. \end{array} \right.$$
    	
    >>> x1 = sym( "x1" );
    >>> x2 = sym( "x2" );
    >>> x3 = sym( "x3" );
    >>> sols = symlsolve({ x1+2*x2+5*x3==-9,x1-x2+3*x3==2,3* x1 -6*x2
    	-x3==25},{x1, x2, x3 })
    sols =
    (
    	[ 1 ] =2.0
    	[ 2 ] = -3.0
    	[ 3 ] = -1.0
    )
    
    Вернуться к учебному плану