Табл.1.2. Правила логических выражений

Х и У. Если обе переменные равны единице, то возвращается единица, иначе возвращается ноль. В тексте программы пишется как x&y или and(x,y).

Х или У. Если хотя бы одна из переменных равна единице, то возвращается единица, иначе ноль. В тексте программы пишется как x|y или or(x,y).

Не Х. Если Х единица то возвращается ноль. Если Х ноль то возвращается единица. В тексте программы пишется как ~ x или not(x).

Исключающее или. Если Х и У не одинаковые, возвращает единицу. Если Х или У имеют одинаковое значение (оба истинны или оба ложны) то тогда возвращает ноль. В тексте программы пишется как xor(x,y).

function St_2 a=2; b=5; x=(a<b) y=(a==b) a1=and(x,y) a2=or(x,y) a3=~x x=10; y=100; a4=(x==y) a5= (x>y) a6=(x<y) end   Так как a<b истинно, то оператор Условный вернет 1 и тогда выражение вида x=(a<b) приведет к тому, что будет присвоено значение х=1. Так как a==b ложно при данных значениях a и b, то оператор Условный вернет 0 и тогда выражение вида y=(a==b) приведет к тому, что будет присвоено значение y=0. Так как x=1, y=0, то and(x,y) вернет 0. Так как x=1, y=0, то or(x,y) вернет 1. Так как x=1, то ~x вернет 0. Так как x=10, y=100, то x==y ложно, оператор Условный вернет 0 Так как x=10, y=100, то x>y ложно, оператор Условный вернет 0. Так как x=10, y=100, то x<y истинно, оператор Условный вернет 1. x=1 y=0 a1=0 a2=1 a3=0 a4=0 a5=0 a6=1

Оператор СРАВНЕНИЯ. switch

Также в М-файлах по мере необходимости используют оператор switch, он находит среди списка заранее предусмотренных значений то, которое совпадает с переменной, или убеждается что ни одно не совпало.

Соответственно, либо выполняется вариант действий для совпавшего (case) значения, либо вариант действий (otherwise) на случай если ничего не совпало. Функция Start_exSwitch задает x=1 и вызывает функцию exSwitch. Результаты выводятся в Command Window.

function[a,b,c]=exSwitch(x) a=0; b=0; c=0; switch x    case x<0        a=1;    case x<10        b=1;    otherwise        c=1; end end function Start_exSwitch x=1; [a,b,c]=exSwitch(x) end   a= 0   b= 1 c= 0   Так как неверно что х<0 то а не изменилось Так как верно что x<10 то b  изменилось и стало равно 1

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

Цикл С ПРЕДУСЛОВИЕМ. while

Цикл while x>0 повторяет пока верно указанное условие.

Цикл СО СЧЕТЧИКОМ. for

Цикл for x=1:3 присваивает переменной х указанное начальное значение 1, и затем после каждой итерации увеличивает его на шаг по умолчанию 1. Когда переменная х превысит указанное максимальное значение 3, то цикл прекратится.

Цикл for x=1:0.1:3 присваивает переменной х указанное начальное значение 1, и затем после каждой итерации увеличивает его на указанный шаг 0,1. Когда переменная х превысит указанное максимальное значение 3, то цикл прекратится.

Прерывание цикла break, continue

Важное значение имеют три разных случая.

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

Во втором случае требуется, чтобы при каком-то условии (в случае если условие верно) прекратить циклический повтор и выйти из цикла, продолжив работу программы с той строки, которая расположена после конца цикла (после оператора end). Это обеспечивается оператором break.

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

Операторы break и continue можно использовать в одном и том же цикле, причем неоднократно. Функция Start_exWhileFor задает x=1, y=2, z=5 и запускает функцию exWhileFor. Результаты выводятся в Command Window.

function[]=exWhileFor(x,y,z) a=x+y; b=0; c=0; while a<z    for i=1:3        a=a+i    end    b=b+1 end c=1 end   function Start_exWhileFor x=1; y=2; z=5; exWhileFor(x,y,z) end a = 4 a = 6 a = 9 b = 1 c = 1 Цикл while повторяет пока верно указанное условие. Цикл for x=1:3 присваивает переменной х указанное начальное значение 1, и затем после каждой итерации увеличивает его на шаг по умолчанию 1. Когда переменная х превысит указанное максимальное значение 3, то цикл прекратится.

Цикл for x=1:0.1:10 присваивает переменной х указанное начальное значение 1, и затем после каждой итерации увеличивает его на указанный шаг 0,1. Когда переменная х превысит указанное максимальное значение 10, то цикл прекратится.

function[]=exContinueBreak(x,y,z) a=x+y; b=0; c=0; while a<z    for i=1:3                   if a>20            continue;        end        a=a+i    end    b=b+1    if b>3        break;    end end c=1 end

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

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

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

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

function Start_ exContinueBreak x=5; y=10; z=30; exContinueBreak(x,y,z) end a = 16 a = 18 a = 21 b = 1 b = 2 b = 3 b = 4 c = 1

Вызов одной функции из другой. feval

Иногда бывает необходимо из одной функции вызвать другую.

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

Это команда feval. Ей передается в качестве аргумента (в скобках) имя функции, которую надо будет вызвать.

Опишем функцию exFun(x,y). Ее в дальнейшем будем вызывать в качестве одного из аргументов функции exFeval(x,y,nameFunction).

Для работы функции exFun необходимо передавать функции exFun значения двух переменных (аргументов функции). Поэтому укажем при вызове функции exFeval(x,y,nameFunction) два аргумента. Их значения будут использоваться в качестве аргументов функции exFun.

Саму же функцию exFun мы передадим при вызове функции exFeval(x,y,nameFunction) в качестве аргумента функции, названного в ее описании как nameFunction.

Вызов будет выглядеть в Command Window следующим образом res=exFeval(x,y,'exFun') где res возвращаемое значение функции exFeval, ‘exFun’ это функция exFun, переданная как строка символов, совпадающая с ее названием.

В составе функции exFeval есть вызов функции feval. Он выглядит следующим образом res=feval(nameFunction,x,y). В качестве аргумента nameFunction как раз и выступает переданное функции exFeval название (как строка символов) ‘exFun’. Соответственно, именно ее и вызовет функция feval. При этом x, y являются аргументами функции exFeval, они же передаются в функцию feval и они же будут аргументами функции exFun.

В результате функция exFun вычислит возвращаемое значение res и оно и будет возвращаемым значением функции feval и затем возвращаемым значением функции exFeval.

function a=exFun(x,y)

a=x^2+y^2;

end

function res=exFeval(x,y,nameFunction)

if x+y>0

   res=1;

else

   res=feval(nameFunction,x,y);

end

end

function res=Start_exFun x=1; y=2; res=exFeval(x,y,'exFun') end res = 1
function res=Start2_exFun x=-5; y=2; res=exFeval(x,y,'exFun') end res = 29

Функция со списком аргументов неизвестного заранее состава и количества. varargin

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

varargin указывается в описании функции в качестве аргумента, например exVar(varargin). Это означает, что пользователь при вызове функции укажет в круглых скобках несколько аргументов, например exVar(1,2,'a','q',3). Это могут быть числа или символы (строки символов). Символы указываются в верхних одинарных кавычках (апостроф).

Если пользователь укажет имена переменных, то они не будут восприниматься как элементы массива varargin. Например, создать массив vectorArguments=[2,3,4,'d','f'] и передать его в качестве аргумента при вызове exVar(vectorArguments).

Это приведет к некорректной работе функции, аргументом которой предусмотрен varargin.

Функция isnumeric(varargin{i}) возвращает 1 (истина) или 0 (ложь) в зависимости от того, является ли элемент массива varargin с индексом i числом или нет

 

function[]=exVar(varargin) sum=0; len=length(varargin) x=varargin lenx=length(x) for i=1:length(varargin)    if isnumeric(varargin{i})==1        sum=sum+varargin{i}    else        disp('not numeric value');    end        end end Многие функции MATLAB допускают обращение к ним с различным числом параметров. При этом в качестве аргумента в описании функции в М-файле используется имя массива varargin. Переменные размещаются в массиве. Его особенность в том, что переменные, являющиеся элементами массива, могут быть самых разных типов. Однако нельзя передавать заранее сформированный массив в вызове функции с аргументом типа varargin. Он будет считаться просто одной переменной.
Правильно >> exVar(1,2,'a','q',3) len = 5 x = [1] [2] 'a' 'q' [3] lenx = 5 sum = 1 sum = 3 not numeric value not numeric value sum = 6 Таким образом массив varargin имеет произвольное (определяемое пользователем) содержание. Количество элементов массива (его длину) определяют функцией length(varargin). Она возвращает количество элементов массива varargin.
Неверное использование >> vectorArguments=[2,3,4,'d','f']; >> exVar(vectorArguments) len = 1 x = ‘df' lenx = 1 not numeric value Обращение к определенному (то есть известен его номер в массиве) элементу массива записывается так varargin{i} где i его номер (индекс). Однако нельзя передавать заранее сформированный массив в вызове функции с аргументом типа varargin. Он будет считаться просто одной переменной.
Неверное использование >> vectorArguments2=[2,3,4,5,6] vectorArguments2 =2 3 4 5 6 >> exVar(vectorArguments2) len = 1 x =     [1x5 double] lenx = 1 sum = 2 3 4 5 6 Пользователь при вызове М-функции (например, в Command Window) указывает, как обычно, имя функции и в скобках ее аргумент. Но не имя массива varargin, а его содержимое (то есть его элементы через запятую). Функция isnumeric(varargin{i}) возвращает 1 или 0 в зависимости от того, является ли элемент массива varargin с индексом i числом или нет.

Отладка функций осуществляется с помощью пункта меню Debug.

Так, например, предусмотрены точки останова Debug—Set—Clear Break Points.

Также есть точки останова с помощью команды. В них можно задать условие, останавливающее (в случае его выполнения) работу программы. Они расположены в Debug—Set—Modify Conditional.

Пошаговое выполнение Debug—Step  или Debug—Step In.

Выполнение до курсора Debug—Go Until Cursor.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: