MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

Основы работы в Curve Fitting Toolbox \ Curve Fitting Toolbox

В оглавление книги \ К следующему разделу

Функции Curve Fitting Toolbox

Логическое индексирование

Обычное индексирование в MATLAB заключается в обращении к элементам вектора по индексу или по массиву индексов. Например, если есть вектор

>> y=[1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9];
то для обращения к его пятому элементу следует писать
>> a=y(5)
a =
    5.5000
Если в вектор b требуется занести его элементы с четвертого по седьмой, то применятся индексирование при помощи сечения:
>> b=y(5:7)
b =
    5.5000    6.6000    7.7000
Для доступа к элементам вектора y с четными индексами следует произвести индексацию при помощи вектора индексов:
>> ind=2:2:length(y)
ind =
     2     4     6     8
>> d=y(ind)
d =
    2.2000    4.4000    6.6000    8.8000

Все эти способы относятся к обычной индексации.

Логическая индексация заключается в задании некоторого условия выбора элементов из массива.

Например, если требуется сформировать логический вектор той же длины, что и вектор y, в котором логическая единица соответствует элементам вектора y меньшим пяти, а логический ноль соответствует элементам вектора y большим или равным пяти, то следует записать логическое выражение для массива y с использованием операции сравнения (знака меньше <):

>> index = y<5
index =
     1     1     1     1     0     0     0     0     0
Если требуется определить элементы, превосходящие, например, в полтора раза среднее значение всех элементов y, то достаточно применить логическое индексирование и функцию mean:
>> index=y>1.5*mean(y)
index =
     0     0     0     0     0     0     0     1     1

Как обычно для операций сравнения применяются знаки == (два знака = для логического "равно"), >, >=, <, <= и ~= ("не равно").

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

A&B и and(A,B)

приведут к одинаковому результату.

Логические операции
Операция Обозначение Функциональная запись
отрицание ~A not(A)
логическое И A&B and(A,B)
логическое ИЛИ A | B or(A,B)

Здесь A и B - логические массивы, полученные, например, в результате применения операций сравнения к массивам, как в предыдущем примере. К соответствующим элементам массивов A и B поэлементно применяются обычные логические операции и результатом является логический массив.

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

>> A = y>=3
A =
     0     0     1     1     1     1     1     1     1
>> B = y<=6
B =
     1     1     1     1     1     0     0     0     0
>> index = A&B
index =
     0     0     1     1     1     0     0     0     0

Можно, разумеется, было обойтись и без вспомогательных массивов A и B и записать одно выражение:

 >> index = (y>=3) & (y<=6)
index =
     0     0     1     1     1     0     0     0     0

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

>> index = y>=3 & y<=6

однако, выражение со скобками более наглядно.

Приведем еще один пример, в котором задан массив x (значения независимой переменная) и y (y(i) - значения зависимой переменной в x(i)) и требуется сформировать логический массив, в котором логические единицы соответствуют тем элементам массива y, которые лежат в полосе, ограниченной двумя линиями

y = 0.7x + 0.2 и y = 0.7x - 0.2

>> x=0:0.2:3;
>> y=2*sin(x);
>> index = (y<=0.7*x+0.2) & (y>=0.7*x-0.2)
index =
     1     0     0     0     0     0     0     0     0     0     0     1     0     0     0     0

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

>> y1=y(index)
y1 =
         0    1.6170

В оглавление книги \ К следующему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика