<< ПредыдущаяОглавлениеСледующая >>


1.6. Операции над матрицами и векторами

В системе MatLab достаточно просто выполняются математические операции над матрицами и векторами. Рассмотрим сначала простые операции сложения и умножения матриц и векторов. Пусть даны два вектора

a = [1 2 3 4 5];        % вектор-строка
b = [1; 1; 1; 1; 1];         % вектор-столбец

тогда умножение этих двух векторов можно записать так

c = a*b;                % c=1+2+3+4+5=16
d = b*a;                % d – матрица 5х5 элементов

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

Сложение и вычитание двух векторов записывается так

a1 = [1 2 3 4 5];
a2 = [5 4 3 2 1];
c = a1+a2;               % c = [1+5, 2+4, 3+3, 4+2, 5+1];
с = a2-a1;              % c = [5-1, 4-2, 3-3, 2-4, 1-5];

Следует обратить внимание, что операции сложения и вычитания можно выполнять между двумя векторами-столбцами или двумя векторами-строками. Иначе MatLab выдаст сообщение об ошибке, т.к. разнотипные векторы складывать нельзя. Так обстоит дело со всеми недопустимыми арифметическими операциями: в случае невозможности их вычисления система MatLab сообщит об ошибке и выполнение программы будет завершено на соответствующей строке.

Аналогичным образом выполняются операции умножения и сложения между матрицами:

A = [1 2 3; 4 5 6; 7 8 9];
B = ones(3);
C = A+B;            % сложение двух матриц одинакового размера
D = A+5;            % сложение матрицы и числа
E = A*B;            % умножение матрицы А на В
F = B*A;            % умножение матрицы В на А
G = 5*A;            % умножение матрицы на число

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

a = [1 1 1];        % вектор-строка
b = a’;             % вектор-столбец, образованный
% транспонированием вектора-строки а.
A = [1 2 3; 4 5 6; 7 8 9]; % матрица 3х3 элемента
B = a*A;            % B = [12 15 18] – вектор-строка
C = A*b;            % C = [6; 15; 24] – вектор-столбец
D = a*A*a’;         % D = 45 – число, сумма эл-ов матрицы А
E = A’;             % E – транспонированная матрица А
F = inv(A);         % F – обратная матрица А
G = A^-1;           % G – обратная матрица А

Из приведенного примера видно, что операция транспонирования матриц и векторов обозначается символом ‘ (апостроф), который ставится после имени вектора или матрицы. Вычисление обратной матрицы можно делать путем вызова функции inv() или возводя матрицу в степень -1. Результат в обоих случаях будет одинаковым, а два способа вычисления сделано для удобства использования при реализации различных алгоритмов.

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

.* - поэлементное умножение;
./ и .\ - поэлементные деления;
.^ - поэлементное возведение в степень.

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

a = [1 2 3];        % вектор-строка
b = [3 2 1];        % вектор-строка
c = a.*b;           % c = [3 4 3]
A = ones(3);        % матрица 3х3, состоящая из единиц
B = [1 2 3;4 5 6; 7 8 9];         % матрица 3х3
C = A.*B;           % матрица 3х3, состоящая из
D = A./B;           % матрица 3х3, состоящая из
E = A.\B;           % матрица 3х3, состоящая из
F = A.^2;           % возведение элементов матрицы А в квадрат

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

Для поиска максимального значения элемента вектора используется стандартная функция max(), которая возвращает найденное максимальное значение элемента и его позицию (индекс):

a = [1 6 3 4];
[v, i] = max(a);             % v = 6, i = 2;

или

v = max(a);                  % v = 6;

Приведенный пример показывает два разных способа вызова функции max(). В первом случае определяется и максимальное значение элемента и его индекс в векторе, а во втором – только максимальное значение элемента.

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

A = [4 3 5; 6 7 2; 3 1 8];
[V, I] = max(A);             % V=[6 7 8], I = [2 2 3]
V = max(A);                  % V=[6 7 8]

Полный синтаксис функции max() можно узнать, набрав в командном окне MatLab команду

help <название функции>

Аналогичным образом работает функция min(), которая определяет минимальное значение элемента вектора или матрицы и его индекс.

Другой полезной функцией работы с матрицами и векторами является функция sum(), которая вычисляет сумму значений элементов вектора или столбцов матрицы:

a = [3 5 4 2 1];
s = sum(a);                   % s = 3+5+4+2+1=15
A = [4 3 5; 6 7 2; 3 1 8];
S1 = sum(A);                  % S1=[13 11 15]
S2 = sum(sum(A));            % S2=39

При вычислении суммы S2 сначала вычисляется сумма значений элементов матрицы А по столбцам, а затем, по строкам. В результате, переменная S2 содержит сумму значений всех элементов матрицы А.

Для сортировки значений элементов вектора или матрицы по возрастанию или убыванию используется функция sort() следующим образом:

a = [3 5 4 2 1];

b1 = sort(a);                % b1=[1 2 3 4 5]
b2 = sort(a, ‘descend’);      % b2=[5 4 3 2 1]
b3 = sort(a, ‘ascend’);      % b3=[1 2 3 4 5]

для матриц

A = [4 3 5; 6 7 2; 3 1 8];
B1 = sort(A);                % B1=[3 1 2
                            %     4 3 5
                             %     6 7 8]
B2 = sort(A, ‘descend’);     % B2=[6 7 8
                             %     4 3 5
                             %     3 1 2]

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

a = [3 5 4 2 1];
b1 = find(a == 2);           % b1 = 4 – индекс элемента 2
b2 = find(a ~= 2);           % b2 = [1 2 3 5] – индексы без 2
b3 = find(a > 3);            % b3 = [2 3]

В приведенном примере символ ‘==’ означает проверку на равенство, а символ ‘~=’ выполняет проверку на неравенство значений элементов вектора а. Более подробно об этих операторах будет описано в разделе условные операторы.

Еще одной полезной функцией работы с векторами и матрицами является функция mean() для вычисления среднего арифметического значения, которая работает следующим образом:

a = [3 5 4 2 1];
m = mean(a);                 % m = 3
A = [4 3 5; 6 7 2; 3 1 8];
M1 = mean(A);                % M1 = [4.333 3.667 5.000]
M2 = mean(mean(A));          % M2 = 4.333



<< ПредыдущаяОглавлениеСледующая >>