8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 124 125 126 127 128 129 130 ... 365

а равно двум » ifdem(3)

а больше или равно трем » ifdem (-1)

а меньше трех, но не ноль, не единица и не двойка

Ветвей может быть сколько угодно (добавьте несколько eiseif с похожими условиями в ifdem) или только две, например:

if (а == 0)

disp(а равно нулю) else

disp(a не равно нулю1) end

В случае двух ветвей используется завершающее else, a eiseif пропускается. Оператор if должен заканчиваться end.

Файл-функция ifdem наглядно демонстрирует работу оператора if, но на практике оказывается бесполезной. Действительно полезный пример — вычисление кусочно-заданной функции

sinx-l, Х<-7Г, x/ti, -п<х<п;

—cosx, х>71,

которое реализуется файл-функцией pwfun. Ее текст приведен в листинге 7.12. Обратите внимание на следующие моменты.

1.Число ветвей if-eiseif-eise равно трем.

2.Во второй ветви достаточно только проверить, что х<л, условие х>-л уже выполнено (иначе бы отработала первая ветвь в if-elseif-eise и оператор if закончил работу).

3.В последней ветви нет смысла проверять никакие условия, она работает, если все предыдущие условия неверны, что как раз соответствует х> — п.

Листинг 7.12,Файл-функция pwfun

function у = pwfun(х)

% вычисляет кусочно-линейную функцию

%sin(x) - 1, если х < -pi

% у(х)=x/pi, если -pi <= х < pi

%-cos(х), если х >= pi


% использование у = pwfun(x), х — число; if х < -pi

у = sin(x) -1; elseif к < pi % проверка х >= -pi не нужна!

у = х/рх; else% здесь х >= pi

у = -cos(х); end

Для построения графика кусочно-заданной функции pwf un следует воспользоваться командой » fplot (Gpwfun, t-3*pi, 3*pi]), которая приводит к графику, изображенному на рис. 7.4.

.2 1 1 L.

-в -6 -4 -2 0 2 4 6 В

Рис. 7.4. График кусочно-заданной функции

Мы не случайно выбрали fplot для построений графика кусочно-заданной функции. Функцией plot воспользоваться не удастся, т. к. требуется предварительно вычислить вектор значений функции от вектора аргументов, а pwf un не умеет работать с входным аргументом-вектором. Убедиться в этом можно, построив график pwf un командами:

» х = -3*pi:pi/100:3*pi; » у = pwfun(x); » plot(х, у)


Никакой ошибки при выполнении файл-функции не возникает, однако график строится неправильно. Дело в том, что вектор х входит в условия оператора if. Операции отношения (<, <=, >, >=, ~=) могут специальным образом применяться и к векторам, о чем подробно написано ниже, а при обычном применении в данном примере не дают ожидаемого результата. Выход состоит в программировании следующего алгоритма вычисления кусочно-заданной функции, для реализации которого достаточно понимания вышеописанного материала.

1.Проверка числа входных аргументов, если число входных аргументов не равно единице, то завершение работы файл-функции с сообщением об ошибке (выход по ошибке).

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

3.Нахождение длины входного аргумента.

4.Создание вектора выходного аргумента того же размера, что и входной аргумент, и заполнение его нулями.

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

Попытайтесь составить файл-функцию самостоятельно. В случае возникновения затруднений руководствуйтесь листингом 7.13.

Листинг 7.13. Файл-функция pwfunl (входной аргумент — число или вектор)

.........:.. :,...................... ........ . ... —..........................

function у = pwfunl(х)

% вычисляет кусочно-линейную функцию

%sin(х) - 1, если х < -pi

% у(х) =x/pi, если -pi <= х < pi

%-cos(х), если х >= pi

% использование у = pwfun(х), х — число или вектор;

% проверяем количество входных аргументов, если аргумент не один, % то выходим из файл-функции по ошибке if nargin ~= 1

error{должен быть один входной аргумент)

end

% проверяем, является ли входной аргумент вектором или числом [Nx, Mx] = size(x);



0 ... 124 125 126 127 128 129 130 ... 365