Раздел: Документация
0 ... 123 124 125 126 127 128 129 ... 365 При решении квадратного уравнения, корни которого комплексны, root2 остановит вычисления и выведет соответствующее предупреждение в командное окно: » [xl, х2] = root2(l, 0, 1) ??? Error using ==> root2 комплексные корни При составлении файл-функций следует предусмотреть еще один вид контроля — проверку количества входных и выходных параметров. Если пользователь вызовет функцию root2 с двумя входными параметрами, то получит сообщение об ошибке при выполнении того оператора файл-функции, который содержит неопределенный параметр. В случае вызова функции rootz с одним выходным аргументом или без аргументов будет вычислен только первый корень квадратного уравнения, что также введет пользователя в заблуждение. Лучше заранее предупредить пользователя о характере ошибки и прекратить работу файл-функции. Кроме того, следует учесть, что файл-функция root2 не может принимать массивы в качестве входных аргументов. Если даже использовать поэлементные операции при вычислениях, то дискриминант уравнения d будет массивом, а что такое D > 0 для массива, будет рассмотрено далее (логические выражения подробно описаны в разд. "Логические выражения с массивами и числами " данной главы). Дополните функцию root2 вышеописанными видами контроля, предотвращающими неправильное ее использование. Встроенные функции nargin и nargout возвращают, соответственно, число входных и выходных аргументов, с которыми была вызвана файл-функция. Для проверки, являются ли входные аргументы числами или массивами, следует сначала найти размеры соответствующих переменных при помощи size, а затем проверить их на равенство единице. Вывод текста в командное окно в ходе выполнения файл-программы или файл-функции осуществляется оператором disp, сам текст указывается в апострофах: disp(текст1). Листинг 7.10 содержит правильно запрограммированную файл-функцию, при использовании которой не должно возникнуть сложностей. ! Листинг 7.10. Файл-функция root2. предотвращающая неправильное i ее использование function [xl, х2] = root2(a, b, с) % возвращает вещественные корни квадратного % уравнения ах"2 + Ьх + с = 0 % использование [xl, х2] = root2(а, Ь, с) % проверка числа входных аргументов if (nargin < 3) error(задайте три коэффициента квадратного уравнения) end % проверка, являются ли входные аргументы числами [Na, Ma] = size(a); [ЫЬ, Mb] = size(b); [Nc, Мс) = size(с),- % если хотя бы один из размеров входных аргументов не равен единице, % то выводится сообщение об ошибке и файл-функция прекращает работу if (Na ~= 1) (Ma ~= 1) (ЫЬ ~= 1) I (Mb -= 1) (Nc ~= 1) (Мс -= 1) error(входные аргументы должны быть числами) end D = Ъ*2 - 4*а*с; % вычисление дискриминанта % проверка на наличие комплексных корней, если корни комплексные, I то выводится сообщение об ошибке и файл-функция прекращает работу if D < О error(комплексные корни) end % вычисление корней xl = (-Ь + sgrt(D) ) /2; х2 = {-b - sqrt(D))/2; % если root2 вызвана с одним выходным аргументом, % то выводится предупреждение if nargout ~= 2 warning(это только один корень 1) dispfjym получения двух корней используйте) disp([xl, х2] = root2(a, b, с)) end Только что вы создали файл-функцию в том же стиле, в котором написаны многие стандартные функции MATLAB. Функция hadamard, использующаяся для получения матрицы Адамара, является файл-функцией, содержащейся в файле hadamard.m подкаталога toolbox\matlab\elmat основного каталога MATLAB. При наличии определенного опыта программирования и желания писать собственные вычислительные программы большую пользу может принести самостоятельное изучение алгоритмов файл-функций, рас- положенных в подкаталогах toolbox. Большинство из них имеют открытый кос, что позволяет понять принципы эффективного программирования в MATLAB. Другие функции являются встроенными. Соответствующие М-файлы содержат только комментарии, в которых указана информация об использовании функции. Например, функции cos соответствует М-файл cos.m подкаталога toolboxes\matlab\elfun основного каталога MATLAB. Файл cos.m не содержит операторов, последняя строка комментариев %Build-in function указывает на то, что cos является встроенной функцией. Организация ветвления В общем виде оператор ветвления представляет конструкцию if-elseif-else, работу которой поясняет пример файл-функции ifdem, приведенной в листинге 7.11. I Листинг 7.11. Файл-функция ifdem, демонстрирующая работу if-elseif-else function ifdem(а) % пример использования структуры if-elseif-else if (а == 0) disp(а равно нулю) elseif а == 1 disp(a равно единице) elseif а == 2 disp(a равно двум) elseif а >= 3 disp(а больше или равно трем) else disp(a меньше трех, но не ноль, не единица и не двойка) end В зависимости от выполнения того или иного условия работает соответствующая ветвь программы, если все условия неверны, то выполняются команды, размещенные после else. Вызовы функции ifdem с различными аргументами позволяют убедиться в вышесказанном: » ifdem(l) а равно единице » ifdem(1.2) а меньше трех, но не ноль, не единица и не двойка » ifdem(2) 0 ... 123 124 125 126 127 128 129 ... 365
|