Сделай Сам Свою Работу на 5

Операторы отношения и логические операторы

Операторы отношения служат для поэлементного сравнения двух операндов, в качестве которых могут выступать числа, векторы или матрицы. При этом сравниваемые векторы или матрицы должны иметь одинаковые размеры. Если операнды одинаковы, то программа возвращает 1 (True – Истина), в противном случае0 (False – Ложь). Перечень операторов отношения с соответствующими им функциями представлен в таблице 4.1.

 

Таблица 4.1. Операторы отношения и их функции

Оператор Название Функция
== Равно Eq
~= Не равно Ne
< Меньше Lt
> Больше Gt
<= Меньше или равно Le
>= Больше или равно Ge

 

Операторы = = и ~= сравнивают действительные и комплексные переменные. При этом сравниваются действительные и комплексные части числа.

Операторы <, <=, >, >= при сравнении комплексных чисел сравнивают только действительные части числа.

Примеры приведены в табл. 4.2.

 

Таблица 4.2. Примеры использования операторов отношения

Выражение Функция Результат
>> 3==3 >> eq(3,3) ans =
>>5~=5 >> ne(5,5) ans =
>> 4+2i==4+i >> eq(4+2i,4+i) ans =
>> 7.2<8.3 >> lt(7.2,8.3) ans =
>>1.4+5i<1.5+i >> lt(1.4+5i,1.5+i) ans =
>> 3<=2.33 >> le(3,2.33) ans =

 

Если при вычислениях надо формально определить, является ли переменная x комплексной, можно вызвать функцию isreal(x), возвращающую 1 если x не является комплексной и 0 в противном случае.

В выражениях, вводимых в командном окне системы MATLAB, операторы отношения могут использоваться наряду с арифметическими операторами. Рассмотрим пример вычисления выражения, содержащего операторы отношения:

>> a=1;b=-1;c=2;

>> (a>=c)+(b==a)+(c>a)

ans =

Здесь значения выражений (a >= c) и (b == a) равны 0 (Ложь), значение выражения (c > a) равно 1 (Истина). В результате переменная ans, являющаяся суммой значений этих трех выражений, оказывается равной 1.

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



>> a>=c+b==a+c>a

ans =

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

Пример:

>> A=[1 0;-2 3]

A =

1 0

-2 3

>> B=[2 3;-3 2]

B =

2 3

-3 2

>> A>B

ans =

0 0

1 1

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

Пример:

>> A=[1 0;-2 3];b=0.5;

>> A>b

ans =

1 0

0 1

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

Таблица 4.3. Логические операторы и их функции

Оператор Название Функция
& Логическое И And
| Логическое ИЛИ Or
Отсутствует Исключающее ИЛИ Xor
~ Логическое НЕ Not

 

Первые три операции являются двухоперандными (бинарными), а операция < Не > является унарной (однооперандной).

При выполнении логических операций «истинными» считаются операнды, не равные нулю, а «ложными» – операнды, равные нулю. При этом результатом операции < И > будет 1, если оба операнда не равны нулю, и 0, если хотя бы один из операндов нулевой. Операция < ИЛИ > дает 1, если хотя бы один операнд не равен нулю. Операция < исключающее ИЛИ > выдает 1 лишь тогда, когда один из операндов равен нулю, а другой не равен, в остальных случаях она выдает 0. Операция < НЕ > выдает 1, если ее единственный операнд равен нулю, и 0 в противном случае.

Примеры использования логических операторов:

>> A=[1 0;-2 3];B=[2 3;-3 2];

>> and(A,B) или >> A&B

ans =

1 0

1 1

>> or(A,B) или >> A|B

ans =

1 1

1 1

>> xor(A,B)

ans =

0 1

0 0

>> not(A) или >> ~A

ans =

0 1

0 0

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

Пример:

>> A=[1 0;-2 3];b=3;

>> xor(A,b)

ans =

0 1

0 0

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

Приоритеты операций системы MATLAB в порядке убывания приведены ниже:

1. Круглые скобки <( )>.

2. Транспонирование <.'>, транспонирование с комплексным сопряжением<'>, возведение в степень <^>, поэлементное возведение в степень <.^>.

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

4. Умножение и деление (в том числе поэлементное) <*>, </>, <\>, <.*>, <./>, <.\>.

5. Сложение <+> и вычитание <–>.

6. Операции отношения <, <=, >, >=, ==, ~=.

7. Логическое И <&>.

8. Логическое ИЛИ <|>.

Отметим, что сначала выполняются операции над аргументами функций eq, ne, lt, gt, le, ge, and, or, not, если использовать их вместо соответствующих им операторов. Например, два выражения and(A,B)+F и A&B+F не эквивалентны.

Справку можно получить с помощью команды doc ops.

Операторы цикла

 

Цикл for используется для повторения команды или набора команд в случае, когда число повторений заранее известно. Синтаксис цикла for имеет следующий вид:

for var = b1:b2:b3

Команды (текст программы)

End

Здесь var – переменная (счетчик) цикла, которая при каждом повторении цикла изменяется от начального значения b1 до конечного значения b3 с шагом b2 (если параметр b2 не указан, по умолчанию его значение принимается равным 1). Переменная цикла может принимать не только целые, но и вещественные значения с любым знаком. Команды в тексте программы разделяются запятой <,>, точкой с запятой <;> или нажатием клавиши <Enter>. Ввод команд завершается командой end. Цикл завершается, как только значение var превысит b3. Команды между for и end воспринимаются системой как части одной сложной команды. Поэтому нажатие клавиши <Enter> для перехода к следующей строке не приводит в данном случае к выполнению этих команд. Выполнение команд начинается только тогда, когда введена «закрывающая скобка» сложной команды в виде ключевого слова end.

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

Например, для поиска суммы элементов матрицы A, расположенных ниже главной диагонали, в файл-функции Sn следует использовать два цикла for, причем начальное значение счетчика внутреннего цикла зависит от текущего значения счетчика внешнего цикла:

function s=Sn(A)

[n m]=size(A);

s=0;

for j=1:m

for i=j+1:n

s=s+A(i,j);

end

end

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

Пример файл-функции polsum, которая находит сумму всех первых положительных элементов вектора:

function s=polsum(x)

s=0;

k=1;

while x(k)>0

s=s+x(k);

k=k+1;

end

Вызовем файл-функцию polsumиз командной строки:

>> a=[1 -2 3];

>> S=polsum(a)

S =

Файл-функция polsum имеет один недостаток: если все элементы вектора – положительные числа, то k становится больше длины вектора x, что приводит к ошибке, например:

>> a=[1 2 3];

>> S=polsum(a)

??? Index exceeds matrix dimensions.

Кроме проверки значения x(k), следует позаботиться о том, чтобы значение k не превосходило длины вектора x. Вход в цикл должен осуществляться только при одновременном выполнении условий k <= length(x) и x(k) > 0, т. е. необходимо применить логический оператор < И >, обозначаемый в MATLAB символом &. Заменим в файл-функции polsum условие цикла while x(k)>0 на составное while k <= length(x)&x(k) > 0. Если первое из условий не выполняется, то второе условие проверяться не будет, именно поэтому выбран такой порядок операндов. Теперь файл-функция polsum будет работать верно для любых векторов:

>> a=[1 2 3];

>> S=polsum(a)

S =

Операторы ветвления

 

Ветвление в ходе работы программы осуществляется при помощи конструкции if-elseif-else. Самый простой вариант ее использования (без elseif и else) реализован в файл-функции possum , которая предназначена для нахождения суммы всех элементов вектора, больших 2:

function s=possum2(x)

s=0;

for k=1:length(x)

if x(k)>2

s=s+x(k);

end

end

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

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

 

f(x)=

Она имеем вид

function f=pwf(x)

if x<-1

f=-abs(x)^(1/3);

elseif x<=3

f=x;

else

f=2-x;

end

Первое условие x < -1 проверяется в ветви if. Отметим, что условие –1 ≤ x не требуется включать в следующую ветвь elseif , поскольку в эту ветвь программа заходит, если предыдущее условие (x < -1) не выполнено. Условие x > 3 также проверять не надо. Если не выполнены два предыдущих условия x < -1 и x ≤ 3, то x будет больше трех.



©2015- 2017 stydopedia.ru Все материалы защищены законодательством РФ.