Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Операторы отношения и логические операторы
Операторы отношения служат для поэлементного сравнения двух операндов, в качестве которых могут выступать числа, векторы или матрицы. При этом сравниваемые векторы или матрицы должны иметь одинаковые размеры. Если операнды одинаковы, то программа возвращает 1 (True – Истина), в противном случае – 0 (False – Ложь). Перечень операторов отношения с соответствующими им функциями представлен в таблице 4.1.
Таблица 4.1. Операторы отношения и их функции
Операторы = = и ~= сравнивают действительные и комплексные переменные. При этом сравниваются действительные и комплексные части числа. Операторы <, <=, >, >= при сравнении комплексных чисел сравнивают только действительные части числа. Примеры приведены в табл. 4.2.
Таблица 4.2. Примеры использования операторов отношения
Если при вычислениях надо формально определить, является ли переменная 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. Логические операторы и их функции
Первые три операции являются двухоперандными (бинарными), а операция < Не > является унарной (однооперандной). При выполнении логических операций «истинными» считаются операнды, не равные нулю, а «ложными» – операнды, равные нулю. При этом результатом операции < И > будет 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 будет больше трех. Date: 2016-08-30; view: 446; Нарушение авторских прав |