
- •Звернення до елементів вектору
- •Поелементні операції з векторами
- •Зовнішній добуток
- •Доступ до елементів матриць
- •Логічне індексування
- •Додавання, віднімання, множення, транспонування і піднесення до стeпіня
- •Видалення рядків і стовпців
- •Заповнення матриць за допомогою індексації
- •Створення матриць спеціального виду
- •Обчислення математичних функцій від елементів матриць
- •Застосування функцій обробки даних до матриць
Логічне індексування
Логічне індексування (logical subscripting) дозволяє вибрати з масиву елементи, що задовольняють певним умовам, які задані логічним вираженням. Нехай з введеної вище матриці C потрібно вибрати всі негативні елементи і записати їх у вектор f. Спочатку виконаємо, здавалося б, неприпустиму дію: запишемо в змінну ind результат порівняння матриці і числа нуль.
Утворився логічний масив (logical array) ind того ж розміру, що і в (див. вікно Workspace), що складається з нулів і одиниць, причому одиниці відповідають негативних елементів масиву C. Вказівка логічного масиву ind в якості єдиного індексу вихідного масиву в дозволяє вирішити поставлене завдання:
Зрозуміло, можна було обійтися і без допоміжного масиву ind, написавши відразу f = C (C <0).
Якщо потрібно привласнити нове значення елементів масиву, що задовольняє певній умові, то вираз C (C <0) повинно увійти в ліву частину оператора привласнення.
Тільки що ми розглянули новий тип даних MATLAB - логічні масиви. У нашому прикладі логічний масив ind був автоматично створений при виконанні операції порівняння C> 0. Було б помилкою вважати, що для виділення потрібних елементів досить просто створити масив з нулів і одиниць і вказати його в якості індексу масиву. Введіть, наприклад, з командного рядка масив indi з тими ж елементами, що і ind:
>> ind1 = [0 0 1; 0 0 0; 10 0];
і спробуйте використовувати його для логічного індексування, виходить помилка:
>> В(indl)
??? Subscript indices must either be real positive integers or
logicals.
Вихід полягає в перетворенні числового масиву indl в логічний масив ind2 за допомогою функції logical, який потім застосовується для індексування:
>> ind2 = logical(indl);
Переконайтеся, що ind2 - логічний масив, вивчивши інформацію про нього у вікні Workspace. Логічне індексування векторів створюється аналогічно.
Логічне індексування дозволяє отримати значення потрібних елементів матриці або вектора або змінити їх, але індекси елементів залишаються невідомими. Для пошуку індексів елементів, що задовольняють певній умові, служить функція find. Ось простий приклад: потрібно знайти номери всіх елементів вектора, рівних максимальному значенню.
Виклик функції mах з двома вихідними аргументами не вирішує цю задачу, оскільки знаходиться тільки один елемент і його номер:
Тепер ми знаємо значення m максимального елемента, воно дорівнює 5, і могли б використовувати логічне індексування для запису всіх максимальних значень в вектор. Подвійний знак == позначає логічне рівність:
але номери максимальних елементів все одно невідомі. Замість логічного індексування використовуємо функцію find, вказавши у вхідному її аргументі логічне вираження х == 5
Функція find повернула номери елементів вектора, співпадаючих з максимальним значенням.
Аналогічний пошук в матриці так само здійснюється за допомогою find.
Нехай, наприклад, треба знайти індекси всіх непозитивно елементів матриці В, введеної вище. Викличемо find з двома вихідними аргументами - векторами, в які потрібно записати значення рядкових і столбцевих індексів шуканих елементів матриці
Дійсно, всі ці елементи b31, b13 і b23 менше або дорівнюють нулю.
У цьому прикладі до функції find можна звернутися і з одним вихідним аргументом:
У цьому випадку вектор k містить номери необхідних елементів матриці з урахуванням описаної вище схеми зберігання в пам’яті по стовпцях.
Звернемося тепер до основних операцій з матрицями в MATLAB.