Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Логические выражения использующие функцию 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 для получения обеих индексов строк и стол-бцов прямоугольных матриц, удовлетворяющих заданному логическому условию (более под-робно эта функция описана в справочниках).

 

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

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

 

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 =

Команды управления данными (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 является матрицей. Тогда выражение

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

 




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

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.