Раздел: Документация
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
|