Материал: MATLAB. Довідник для користувача

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Логические операторы

MATLAB обеспечивает следующие логические операторы

Оператор

Описание

&

AND (логическое И)

|

OR (логическое ИЛИ)

~

NOT (логическое НЕ)

Внимание ! В дополнение к этим логическим операторам, в директории ops имеются несколько функций, предназначенных для побитовых (поразрядных) логических операций.

Каждый логический оператор имеет специфичный набор правил, которые определяют результат логического выражения:

qВыражения использующие оператор И (&), истинны, если истинны оба операнда. При численных элементах, выражение является истинным, если оба операнда ненулевые. Следующий пример показывает операцию логического И для двух векторов

u = [1 0 2 3 0 5]; v = [5 6 1 0 0 7];

u & v ans =

0 0 1 0 0 1

qВыражения, использующие оператор ИЛИ( | ), являются истинными если один из операндов является истинным. Выражения с ИЛИ являются ложными только если ложными являются оба операнда. При численных элементах, выражение является ложным, елси только оба операнда равны нулю. Для приведенных выше векторовu и v имеем

u | v ans =

1 1 1 1 0 1

qВыражения, использующие оператор ~ выполняют логическое отрицание. Это дает ложный результат, если операнд является истинным и истинный, если операнд является ложным. При численных элементах, любой ненулевой операнд становится нулевым (логическим нулем), а любой нулевой элемент становится равным(логической) единице. Рассмотри операцию логического отрицания вектора u

~u ans =

0 1 0 0 1 0

Использованием логических операторов с массивами

Логические операторы MATLAB-а сравнивают соответствующие элементы массивов одинаковой размернсти. Для векторов или прямоугольных массивов, оба операнда должны иметь одинаковый размер, или один из них должен быть скаляром. Если один из элементов является скаляром, а второй – нет, то здесь также имеет место описанное выше свойство скалярного расширения.

111

Логические функции

В дополнение к логическим операторам, MATLAB имеет ряд логических функций.

Функция

Описание

Примеры

xor

Выполняет операцию исключающего ИЛИ над

a = 1;

b = 1;

 

своими операндами. При числовых элементах,

xor(a,b)

 

 

функция возвращает 1 если один из операндов

ans =

 

 

ненулевой, а второй - нулевой

0

 

all

Возвращает 1, если все элементы ее аргумента

A = [0 1 2; 3 5 0]

 

являются истинными или не равны нулю; в

A =

 

 

противном случае результат равен логическому

0 1 2

 

нулю. Над матрицами функция all работает

3

5 0

 

вдоль столбцов

all(A)

 

 

 

ans =

 

 

0 1 0

any

Возвращает единицу, если любой из аргументов

v = [5 0

8];

 

является истинным или ненулевым; в против-

any(v)

 

 

ном случае вовращает 0. Как и all , any работает

ans =

1

 

вдоль столбцов матриц.

 

Ряд других функций MATLAB-а выполняет логические операции. Например, функция isnan возвращает 1 для NaN; функция isinf возвращает 1 для Inf. Более подробный список можно найти в директории ops.

Логические выражения использующие функцию find

Функция find определяет индексы числового массива, удовлетворяющие заданному логическому условию. Эта функция удобна для создания логических масок (шаблонов) и матриц индексов. В наиболее общей форме, функция find возвращает единственный вектор индексов. Этот вектор может быть использован для индексации массивов любого размера или формы. Например, в приведенном ниже примере функция find позволяет легко заменить все элементы матрицы А больше 8 на число 100:

A = magic(4)

A =

16

2

3

13

5

11 10

8

9

7

6

12

4

14

15

1

i = find (A > 8); A(i) = 100

A =

100 2 3 100

5 100 100 8

100 7 6 100

4 100 100 1

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

112

Приоритеты операторов

Вы можете строить выражения, использующие любую комбинацию арифметических и логических операторов, а также операторов отношения. Уровни приоритетов этих операторов определяют порядок, в котором MATLAB обрабатывает выражение. В пределах каждого уровня приоритета, операторы имеют одинаковый приоритет и оцениваются(обрабатываются) слева направо. Последовательность приоритетов для операторовMATLAB-а приведены ниже, упорядоченные в порядке убывания приоритетов, то есть от высшего приоритета

книзшему.

1.Обычные скобки ().

2.Транспонирование (.'), степень (.^), комплексно-сопряженное транспонирование('), степень матрицы(^).

3.Унарный плюс (+), унарный минус (-), логическое отрицание (~).

4.Умножение (.*), правое деление (./), левое деление(.\), матричное умножение (*), матричное правое деление (/), матричное левое деление (\).

5.Сложение (+), вычитание (-).

6.Оператор двоеточия (:).

7.Меньше чем (<), меньше чем или равно (<=), больше чем (>), больше чем или равно

(>=), равно (==), не равно (~=).

8.Логическое И (&).

9.Логическое ИЛИ (|).

Изменение приоритетов операторов

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

A = [3

9

5];

B = [2

1

5];

C = A ./ B.^2

C =

0.7500 9.0000 0.2000 C = (A. / B) .^2

C =

2.2500 81.0000 1.0000

Выражения могут также содержать переменные, заданные посредством индексов

b = sqrt (A(2)) + 2*B(1)

b =

7

113

Команды управления данными (Flow Control)

В MATLAB-е имеются 8 базовых команд для управления потоками данных:

if, совместно с else и elseif, осуществляет обработку группы выражений, основываясь на некотором логическом условии.

switch, совместно с case и otherwise, обрабатывает различные группы выражений, основываясь на значении некоторого логического условия.

while осуществляет обработки группы выражений неопределенное число раз, основываясь на некотором логическом условии.

for осуществляет обработку группы выражений определенное (заданное) число раз.

continue передает управление к следующей итерации в циклах for или while , пропуская все оставшиеся выражения в теле цикла.

break прекращает обработку выражений и выходит из циклов, созданных командами for

или while.

try...catch изменяет последовательность выполнения команд, если во время выполнения программы получено сообщение об ошибке.

return приводит к прекращению выполнения данной программы и к возврату в вызываю-

щую функцию.

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

Внимание! Во многих случаях вы можете ускорить выполнение программ MATLAB-а, путем замены циклов с командами for и while векторными выражениями (см. ниже).

Команды if, else, and elseif

Команда if оценивает логическое выражение и обрабатывает группу операторов, основываясь на значении указанного выражения. В свое простейшей форме синтаксис команды имеет вид

if (логическое выражение)logical_expression

операторы end

Если логическое выражение истинно, то есть равно 1, MATLAB выполняет все операторы между строками, содержащими команды if и end . После этого он продолжает выполнять команды. находящиеся за строкой с end. Если логическое выражение ложно, то есть дает логический 0, MATLAB перескакивает через все выражения между строками сif и end , и продолжает свою работу со строки, следующей за командой end. Например,

if rem (a,2) == 0 disp('a is even') b = a/2;

end

Данный блок проверяет, является ли входной аргумент четным числом и, если да, то выводит в комндную строку соответствующее сообщение и делить числоа пополам. В противном случае, данный блок не выполняется. Между строками с if и end вы можете включить произвольное число операторов, содержащих, в свою очередь, любые команды и циклы. Если логическое выражение приводит к нескалярной величине, то для выполнения блока все элементы аргумента должны буть ненулевыми. Например, допустим X является матрицей. Тогда выражение

114

if X

операторы end

эквивалентно следующему

if all(X(:))

операторы end

При использовании с if , команды else и elseif дают следующие дополнительные возможности создания программ:

Команда else не имеет логического условия. Операторы, связанные с данной командой выполняются, если предшествующее условие команды if (и, возможно, elseif) является ложным.

Команда elseif имеет логическое условие, которое оценивается, если предшествующее условие команды if (и, возможно, elseif), является ложным. Если логическое условие данной команды elseif является истинным, то выполняются соответствующие операторы, следующие за данной командой. Вы можете иметь произвольное число команд elseif в пределах одного блока с if.

if n < 0 % Если n отрицательно, дать сообщение об ошибке disp('Input must be positive');

elseif rem (n, 2) == 0 % Если n положительно и четно, разделить на 2.

A = n/2; else

A = (n+1) /2; % Если n положительно и нечетно, прибавить 1 и % разделить на два.

end

Команда if и пустые массивы

Если логическое условие, связанное с if, приводит к нулевому массиву, то оно оценивается как ложное. Например, если А является пустым массивом, то следующий блок

if A S1

else S0

end

выполняет оператор S0.

Команда switch

Команда switch осуществляет обработку определенных операторов, исходя из значения переменной или выражения. Ее базовая форма имеет вид

switch выражение (скаляр или строка символов) case значение 1

операторы % Выполняются если выражение == значение 1 case значение 2

операторы % Выполняются если выражение == значение 2

.

115