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

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

% если оба размера входного аргумента не равны единице, % то выходим по ошибке if (Nx ~= 1) & (Mx -= 1)

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

end

Lx = length(х); % находим длину вектора

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

% у должен быть того же размера, что х

у = zeros(size(х));

% перебираем все элементы вектора х в цикле for i = l:Lx

% вычисляем функцию в зависимости от значения x(i) if x(i) < -pi

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

y(i) = x(i)/pi; else% здесь x > pi

у (i) = -cos (x(i)) ; end

end

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

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

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

function у = pwfun2(х)

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

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

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

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

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


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

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

end

% нахождение размеров входного аргумента [Nx, Mx] = size(x);

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

% двумерный массив у того же размера, что х

у = zeros(size(х)),

% перебираем все элементы массива х в двойном цикле for i = l:Nx for j = l:Mx

% вычисляем функцию в зависимости от значения x(i,j) if x(i, j) < -pi

y(i, j) = sin(x(i,j)) - 1; eiseif x(i, j) < pi % проверка x > -pi не нужна!

y(i, j) = x(i, j)/pi; else% здесь x > pi

y(i, j) = -cos(x(i, j));

end

end

end

Примечание

В файл-функции pwfun2 можно было бы обойтись одним циклом, если учесть схему расположения двумерных массивов в памяти н применить индексацию порядковым номером (см. главу 2). В этом случае переменная i единственного цикла должна меняться от 1 до Nx*Mx, а вместо х (i, j) и y(i, j) следует указать х (i) и у (i).

Оператор switch

Предположим, что при работе с функцией двух аргументов

-Iv-vl -2


приходится визуализировать ее четырьмя различными способами: каркасной поверхностью, сплошной поверхностью, выводить линии уровня или строить освещенную поверхность. Удобно создать файл-функцию, один из входных аргументов которой vis будет определять способ визуализации. Если vis равен единице, то строится каркасная поверхность, для vis. равного двум — сплошная и т. д. Можно, конечно, использовать оператор if в полном виде if-eiseif-eise, который в зависимости от значения vis выполняет нужную ветвь программы, выводящую соответствующий график. Однако оператор переключения switch позволяет написать более наглядную программу. Применение switch поясняет следующий фрагмент:

switch а case -1

disp[а = -1) case О

disp(а = 0) case 1

disp(а = 1") case (2, 3, 4}

disp{а равно 2 или 3 или 4 ) otherwise

displа не равно -1, 0, 1, 2, Зи4)

end

Каждая ветвь определяется оператором case, переход в нее выполняется тогда, когда переменная оператора switch (в данном примере a) принимает значение, указанное после case, или одно из значений списка case. После выполнения какой-либо из ветвей происходит выход из switch, при этом значения, заданные в других ветвях case, уже не проверяются. Если подходящих значений для я не нашлось, то выполняется ветвь оператора переключения, соответствующая otherwise.

Оператор switch как нельзя лучше подходит для решения поставленной задачи о выводе различных графиков исследуемой функции. Попытайтесь написать файл-функцию самостоятельно. Входными аргументами являются границы построения исследуемой функции по каждой из переменных: xmin, xmax, ymin, ymax и способ построения графика, определяемый vis. Все пять входных аргументов должны быть числами, причем xmin меньше xmax и ymin меньше ymax— не забудьте сделать соответствующую проверку! Выходные аргументы в данном случае не требуются. Текст файл-функции mypiot3D для решения поставленной задачи приведен в листинге 7.15.



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