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

0 ... 126 127 128 129 130 131 132 ... 365

Листинг 7.15. Файл-функция myplot3D

function myplot3D(xmin, xmax, ymin, ymax, vis) % строит график поверхности функции % -х*у2

% е* sin(pi*x) * cos(pi*x )

% на области xmin <— х <= xmax ymin <= у <= ymax

% использование: myplot3D(xmin, xmax, ymin, ymax, vis)

% vis = 1 — каркасная поверхность

% vis - 2 — залитая поверхность

% vis = 3 — линии уровня

% vis = 4 — освещенная поверхность

% проверяем числа входных аргументов,

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

error)Задайте xmin, xmax, ymin, ymax, vis)

end

% проверяем число выходных аргументов, если файл-функция вызвана 4 с выходными аргументами, то выходим по ошибке if nargout > О

error(Функция myplot3D не имеет выходных аргументов) end

% находим максимальный из размеров входных аргументов

К = max([size(xmin) size(xmax) size(ymin) size(ymax) size(vis)]);

% если хотя бы один из размеров входных аргументов не равен единице,

% то выходим по ошибке

if М ~= 1

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

end

% проверяем границы построения, если нижняя граница больше или равна %. верхней, то выходим по ошибке if (xmin >= xmax) (ymin >= ymax)

error(нижняя граница должна быть меньше верхней)

end

I вычисление шагов по х и у для построения графика поверхности dx - (xmax - xmin) /40;


dy = (ymax - ymin) /40; % генерация сетки

[X, Y] = meshgrid(xmin:dx:xmax, ymin:dy:ymax); % вычисление функции

Z = exp(-abs(X.*Y)-*sin(pi*X).*cos(pi*X. 2));

% определение способа построения в зависимости от vis

switch vis

case 1 % каркасная поверхность figure

mesh(X, У, Z) case 2 % залитая поверхность figure

surf(X, Y, Z) case 3 % линии уровня функции figure

contour(X, У, Z) case 4 % освещенная поверхность figure

surfKX, Y, Z) colormap{copper) shading interp otherwise % непредусмотренная ситуация disp(vis может быть 1, 2, 3 или 4)

end

Оператор switch удобно применять тогда, когда есть соответствие между дискретными значениями некоторой переменной и последующими действиями. Для определения ветви программы в зависимости от выполнения более сложных условий, например а > о, приходится использовать оператор i f.

Выход из файл-функции, оператор return

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


прекращается и происходит возврат в точку вызова— командное окно, другую файл-функцию или файл-программу.

В качестве примера мы рассмотрим вычисление кусочно-заданной функции, которое было организовано с использованием конструкции if-eiseif-eise в файл-функции pwfun (см. листинг 7.12). Оператор return позволяет запрограммировать файл-функцию без ветвления так, как показано в листинге 7.16.

Листинг 7.16. Файл-функция pwf un3 с досрочным завершением работы по return ;<к •

S;....... ...............!,,:.:,............. ................................

function у = pwfun3(х)

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

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

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

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

% использование у = pwfun3(х), х - число;

if х < -pi

у = sin(x) - 1;

return end

% злесь x >= -pi if x < pi

у = x/pi;

return

end

% здесь x >= pi у = -cos(x) ;

Прерывание и продолжение циклов

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

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



0 ... 126 127 128 129 130 131 132 ... 365