8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 29 30 31 32 33 34 35 ... 365

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

» indl = [0 0 1; 0 0 0; 1 0 0];

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

» В(indl)

??? Subscript indices must either be real positive integers or logicals.

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

» ind2 = logical(indl);

Убедитесь, что ind2 — логический массив, изучив информацию о нем в окне Workspace. Логическое индексирование векторов производится аналогично.

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

» х = [1 2 5 3 4 5 1 51; >> [m, k] - тах(х) т =

5 к =

3

Теперь мы знаем значение т максимального элемента, оно равно 5, и могли бы использовать логическое индексирование для записи всех максимальных значений в вектор. Двойной знак == обозначает логическое равенство:

» хт = х(х == 5)

хт =

5 5 5


но номера максимальных элементов все равно неизвестны. Вместо логического индексирования используем функцию find, указав во входном ее аргументе логическое выражение х == 5

» km = find(x == 5) km -

3 6 S

Функция find вернула номера элементов вектора, совпадающих с максимальным значением.

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

» [i. j] = find(B <= 0) i =

3

1

2 j =

1

3

3

Действительно, все эти элементы Ьц, 6,3 и 623 меньше или равны нулю. В этом примере к функции find можно обратиться и с одним выходным аргументом:

» k = find(В <= 0) к =

3

7

8

В этом случае вектор к содержит номера требуемых элементов матрицы с учетом описанной выше схемы хранения в памяти по столбцам.

Обратимся теперь к основным операциям с матрицами в MATLAB.

4 Заг 130


Сложение, вычитание, умножение, транспонирование и возведение в степень

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

» S= а + С» R = OA

S =R =

6 060 -2 8

6 632-2-3

Следите за совпадением размерности, иначе получите сообщение об ошибке:

» s = а + в

??? Error using ==> +

Matrix dimensions must agree.

Для умножения матриц предназначена "звездочка":

» Р = с*в р =

-25 э 11 20 26 -4

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

» р = а*3 р =

9 3-3

6 12 9 » р = 3*а P =

9 3-3

б 12 9

Транспонирование матрицы, так же как и вектора, производится при помощи ., а символ • означает комплексное сопряжение. Для вещественных матриц эти операции приводят к одинаковым результатам:

» В» в.1

ans =ans =

4 2-54 2-5



0 ... 29 30 31 32 33 34 35 ... 365