Функция sum вычисляет сумму элементов вектора. С другой стороны, векторы в MATLAB, так же как и матрицы, хранятся в двумерных массивах. Возникает вопрос: что же будет, если в качестве аргумента sum использовать не вектор, а матрицу. Оказывается, MATLAB вычислит вектор-строку, длина, которой равна числу столбцов матрицы, а каждый элемент является суммой соответствующего столбца матрицы, например:
>> M=[1 -2 -4; 3 -6 4; 2 -2 0];
>> s=sum(M)
s =
6 -10 0
Функция sum по умолчанию вычисляет сумму по столбцам, изменяя первый индекс массива при фиксированном втором. Для того чтобы производить суммирование по строкам, необходимо вызвать sum с двумя аргументами, указав место индекса, по которому следует суммировать
>> s2=sum(M,2)
s2 =
-5
Заметим, что sum(M) и sum(M,1) приводят к одинаковым результатам. Итак, функция sum суммирует по строкам, или по столбцам, выдавая результат в виде вектора или вектор-строки. Аналогично работает и функция prod:
>> p=prod(M)
p =
6 -24 0
>> p2=prod(M,2)
p2 =
-72
Функция sort упорядочивает элементы каждого из столбцов матрицы в порядке возрастания. Вызов sort со вторым аргументом, равным двум, приводит к упорядочению элементов строк:
>> MC=sort(M) >> MR=sort(M,2)
MC = MR =
1 -6 -4 -4 -2 1
2 -2 0 -6 3 4
3 -2 4 -2 0 2
Так же как и для векторов, функция sort позволяет получить матрицу индексов соответствия элементов исходной и упорядоченной матриц. Для этого необходимо вызвать sort с двумя выходными аргументами:
>> [MC, Ind]=sort(M)
MC =
1 -6 -4
2 -2 0
3 -2 4
Ind =
1 2 1
3 1 3
2 3 2
Функции max и min вычисляют вектор-строку, содержащую максимальные или минимальные элементы в соответствующих столбцах матрицы:
>> mx=max(M) >> mn=min(M)
mx = mn =
3 -2 4 1 -6 -4
Для того чтобы узнать не только значения максимальных и минимальных элементов, но и их номера в столбцах, следует вызвать max или min так:
>> [mx,k]=max(M) >> [mn,n]=min(M)
mx = mn =
3 -2 4 1 -6 -4
k = n =
2 1 2 1 2 1
Обратите внимание, что во втором столбце матрицы M два равных максимальных элемента – первый и третий. Всегда возвращается номер первого максимального элемента. Аналогично и с минимальным элементом.
Рассмотрим функцию rot90, поворачивающую массив на 90 градусов против часовой стрелки. Например:
>> P=[4 3 -1; 2 0 7]
P =
4 3 -1
2 0 7
>> q1=rot90(P)
q1 =
-1 7
3 0
4 2
Задания на векторы
В следующих заданиях необходимо придумать универсальный способ решения, пригодный для произвольных векторов, и протестировать его на различных показательных примерах.
1. Переставить элементы вектора в обратном порядке, используя индексацию подходящим вектором, и записать результат в новый вектор.
2. Выделить в новый вектор элементы вектора с четными номерами.
3. Найти сумму только положительных элементов вектора.
4. Заменить элементы вектора, отличающиеся от среднего геометрического его элементов более чем на 10%, на среднее геометрическое.
5. Заменить все минимальные элементы вектора максимальным значением его элементов.
6. Найти число положительных и отрицательных элементов вектора.
Задания на матрицы
1. Задана квадратная матрица
.
Элементы матрицы A обозначим . Требуется узнать и записать размер матрицы в переменную n (конечно он равен 3, но лучше использовать функцию для автоматического определения размера) и вычислить приведенные ниже величины (нормы матрицы):
.
2. При помощи встроенных функций для заполнения стандартных матриц, индексации двоеточием и, возможно, поворота, транспонирования получите следующие матрицы:
; ;
;
.
M-файлы
До этого мы рассматривали достаточно простые примеры, для выполнения которых требуется набрать несколько команд в командной строке. Для более сложных задач число команд возрастает, и работа в командной строке становится непродуктивной. Использование истории команд незначительно повышает производительность работы. Эффективное решение состоит в оформлении собственных алгоритмов в виде программ (M-файлов), которые можно запустить из рабочей среды или из редактора. Встроенный в MATLAB редактор M-файлов позволяет не только набирать текст программы и запускать ее целиком или частями, но и отлаживать алгоритм.