Применение функций обработки данных к матрицам

Функция 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-файлов позволяет не только набирать текст программы и запускать ее целиком или частями, но и отлаживать алгоритм.