Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Вычисления визуализация и програмирования в среде MATLAB 5 - Мартынов Н.Н.

Мартынов Н.Н., Иванов А.П. Вычисления визуализация и програмирования в среде MATLAB 5 — Техносфера , 2002. — 333 c.
Скачать (прямая ссылка): vichesleniyevizualizaciyai2002.pdf
Предыдущая << 1 .. 65 66 67 68 69 70 < 71 > 72 73 74 75 76 77 .. 115 >> Следующая

|»>п I LAD j.a> иитп^дспил, onjуа/хкюаипм, ii|jui pdmrvm|JUDdnKic
I
[ m ,n ] = size ( x ); if ( m ~= 1 I n ~= 1 ) error('3-d parameter must be scalar') end
Наконец, неплохо проверить общее число параметров, с которыми функция была вызвана. Для этой цели в системе MATLAB специально предусмотрена переменная с именем nargin. Ее значением является количество аргументов, фактически переданное функции при ее вызове. Тогда проверка на число параметров выполняется следующим образом:
if nargin ~= 3 error('Bad number of parameters') end
Более того, в системе MATLAB предусмотрена переменная nargout, содержащая число возвращаемых значений в текущей форме вызова этой функции. Например, вызов
[ si, s2, s3 ] = MatrProcl( xl, x2, x)
предполагает получить аж три возвращаемых значения, в то время как из определения функции следует, что возвращаемых значений у этой функции два. Чтобы предотвратить такой формат вызова функции MatrProcl и предупредить пользователя функции о несоответствии числа ожидаемых возвращаемых значений их номинальному числу, можно в теле функции осуществить проверку переменной nargout следующим образом:
if nargout ~= 2 error('Must be 2 return values') end
Осуществленные нами проверки приводят к тому, что функцию можно вызвать только с правильным числом входных параметров и возвращаемых значений. Однако ранее мы встречались со встроенными функциями системы MATLAB, которые могли быть вызваны с разным числом входных параметров (и это очень типично). В результате фактически разные варианты работы близкого типа выполняются под одним и тем же именем функции, что весьма наглядно и удобно. Таковой, например, является функция plot, имя которой говорит
о построении графиков функций. Если бы разные варианты вызовов этой функции пришлось бы осуществлять под разными именами, то от наглядности не осталось бы и следа.
Таким образом, целесообразно при разработке М-функций допускать многовариантность работы при разном числе входных аргументов; это нужно предусмотреть при проверке их числа, и вместо прекращения работы функции следует реализовать разные ветви выполнения. То же касается и числа возвращаемых

I лава ь. 11рограммирование функций на М-языке
значений. В заголовке определения М-функции нужно при этом использовать максимально возможное число как первых, так и вторых.
Так, функция TestFunc2
function [ resl, res2] = TestFunc2( varl, var2 )
switch nargin case 1
if nargout == 1, resl = varl * 2; elseif nargout == 2, resl=varl * 2; res2=varl + 3; else error('Must be 1 or 2 return values'); end case 2
if nargout == 1, resl = varl . * var2;
elseif nargout == 2, resl = varl .* var2; res2 = varl + 3;
else error('Must be 1 or 2 return values');
end
otherwise error('Must be 1 or 2 parameters');
end
допускает много вариантов заранее предусмотренных форматов вызовов.
Для краткости мы здесь опустили проверку размеров входных параметров, подробно рассмотренную выше. Кроме того, мы здесь намеренно для большей наглядности выполняем некоторую лишнюю работу: на практике система MATLAB самостоятельно отслеживает ситуацию превышения числа параметров и возвращаемых значений над номинальным их числом.
В заключение отметим, что степень подробности проверок зависит от предназначения функции. Если М-функция пишется для собственного потребления, проверки могут быть менее строгими, так как выполнение М-функций осуществляется в режиме интерпретации под полным контролем системы MATLAB. Ошибочные ситуации автоматически обрабатываются самой этой системой и в командное окно выдается соответствующее диагностическое сообщение.
Но если предполагается передача функции для внешнего потребления, то проверки нужно сделать более жесткими, так как внешнему пользователю трудно разобраться во всех деталях работы вашей функции.
Система MATLAB штатно поставляется с большим числом встроенных М-функций. Текст этих функций выводится в командное окно командой
type имя_функции
так что всегда можно как изучить детали реализации функцией некоторого алгоритма, так и научиться разным приемам программирования, в частности способам и глубине проверок входных параметров и выходных значений.
Рассмотрим текст функции repmat, введя и исполнив команду
type repmat
MATLAB 5.x. Вычисления, визуализация, программирование
203
в результате чего получаем ее полный текст:
function В = repmat(A,M,N)
%REPMAT Replicate and tile- an array.
% В = REPMAT(A,M,N) replicates and tiles the matrix a
% to produce the M-by-N block matrix B.
0,
0
% В = REPMAT(A,[M N]) produces the same thing.
g.
o
% В = REPMAT (A, [MNP ...]) tiles the array a to % produce a M-by-N-by-P-by-... block array, a can be N-D.
Q.
0
% REPMAT(A,M,N), when a is a scalar, is commonly used to
% produce an M-by-N matrix-filled with A's value.
% This can be much faster than A*ONES(M,N)
% when M and/or N are large.
Q,
0
% Example:
% repmat(magic(2),2,3)
% repmat(NaN,2,3)
o,
0
% See also MESHGRID.
0,
0
% Copyright (c) 1984-98 by The MathWorks, Inc.
% $Revision: 1.11 $ $Date: 1997/11/21 23:30:13 $
Предыдущая << 1 .. 65 66 67 68 69 70 < 71 > 72 73 74 75 76 77 .. 115 >> Следующая