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

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