Лекция - Программирование на языке Matlab (1250000), страница 2
Текст из файла (страница 2)
A{1,2} = 'Anne Smith';
A{2,1} = 3+7i;
A{2,2} = –pi:pi/10:pi;
В определении М-функции параметр, через который передается заранее неизвестное число входных аргументов, нужно обозначить ключевым словом varargin. Таким ключевым словом обозначается массив ячеек, в который упакованы эти параметры. Всегда можно узнать истинное число аргументов, упакованных в параметре varargin, применив для этого функцию length.
Ниже представлен код функции, вычисляющей сумму квадратов элементов произвольного количества вектор-строк:
function SumLen = NumLength() %имя varargin только в описании -
n = length( varargin ); SumLen = 0; % формальный параметр
for k = 1 : n
SumLen = SumLen+varargin{k}(1)^2+varargin{k}(2)^2;
end
Если аргумент varargin не единственный в списке параметров, то он должен стоять последним. В рассмотренном примере с помощью фигурных скобок извлекается содержимое отдельной ячейки массива, а с помощью дальнейшей индексации круглыми скобками извлекаются первый и второй элемент (координаты) вектора (в примере принято, что вектор в каждой ячейке имеет 2 элемента; см. ниже пример).
При вызове функции NumLength не нужно (и нельзя) упаковывать входные числовые вектор-строки в массив ячеек (т. е. ставить фигурные скобки), так как MATLAB делает это сам. Достаточно перечислить их в качестве фактических параметров через запятую:
NumLength( [1 2], [3 4] )
ans =
30
Если увеличить число элементов в векторах, то результат не изменится, т.к. в функции NumLength в цикле используются только два элемента векторов, являющихся составными частями массива ячеек:
NumLength( [1 2 3], [3 4 5] )
ans =
30
Пример вызова функции NumLength с другим числом аргументов:
NumLength( [1 2], [3 4], [5 6] )
ans =
91
Функция NumLength легко обрабатывает эти примеры, правильно вычисляя суммарное значение величин, рассчитанных по каждому вектору.
В определении М-функции переменное число возвращаемых значений (выходных параметров) упаковывается в массив ячеек, обозначаемый ключевым словом varargout:
function varargout = MyFunc3( X )
Здесь в массив ячеек с именем varargout можно в теле функции упаковать произвольное число выходных значений. Допустим, что на вход функции MyFunc3 может подаваться в качестве единственного входного параметра массив разных размерностей и размеров. Требуется возвращать несколько скаляров, каждый из которых имеет такой же размер, как входной массив вдоль одного из его измерений. Так как количество измерений заранее неизвестно, то его можно определить в теле функции динамически и на ходу упаковать все эти скаляры в единственную выходную переменную varargout. Вот решение этой задачи:
function varargout = MyFunc3( X )
n = ndims( X ); % определение размера для создания выходного массива с таким
for i = 1 : n % же размером
varargout(i) = {size(X,i)};
end
Здесь функция size (X, i) при i=1 вычисляет число строк массива Х (т.е. размер по первому измерению); при i=2 - число столбцов массива Х (т.е. размер по второму измерению); при i=3 - число по 3-му измерению массива Х и т. д.
Ниже показаны два примера использования этой функции; первый пример:
А=[4 5 6; 7 8 9];
[ m, n ] = MyFunc3 ( А );
Здесь скаляры m и n примут соответственно значения 2 и 3. Второй пример – создание трехмерного массива С и вызов для него функции MyFunc3:
В = [ 6 5 4; 9 8 7];
С(:, :, 1) = А; С(:, :, 2) = В; [m,n,k]= MyFunc3( С );
Скаляры m, n и k примут значения 2, 3, 2. В них помещены размеры трехмерного массива С вдоль всех его измерений. Если бы требовались размеры этого массива вдоль только первых двух измерений, то можно было бы вызвать функцию MyFunc3 в следующем формате:
[m,n]= MyFunc3( С );
Такая запись является абсолютно корректной с точки зрения синтаксиса М-языка, но при этом третье вырабатываемое функцией MyFunc3 выходное значение теряется.
Литература.
-
Гаспарян О.Н. MATLAB: Учебное пособие. - Баку: ГИУ Армении, 2005. 143 с. (PDF формат)
-
Ануфриев И. Е., Смирнов А. Б., Смирнова Е. Н. MATLAB 7. Наиболее полное руководство.- СПб.: БХВ-Петербург, 2005. - 1104 с: ил.
Matlab7NaiboleePolnoeRukovodstvo.djvu, глава5, с. 212.
-
Иллюстрированный самоучитель по MatLab 6 (23 урока). Урок 5.
http://www.radiomaster.ru/cad/matlab/glava5/index1.php
-
Н.Н.Мартынов, А.П.Иванов. MATLAB 5.x. Вычисления, визуализация, программирование.- М.: КУДИЦ-ОБРАЗ, 2002.-336с.
Оглавление
2. MATLAB. 1
2.7. Программирование на языке Matlab. 1
2.7.1. После вызова М-файла MATLAB выполняет следующие действия: 2
2.7.2.Подфункции. 3
2.7.3. Пример РГЗ. 3
2.7.4. Пример М-файла: метод половинного деления. 5
2.7.5. М-функции с переменным числом входных параметров и выходных значений [4]. 6
2.7.6. Контроль входных параметров и выходных значений М-функиии [4]. 7
2.7.7.Практические советы по разработке и отладке М-функций. 10
2.7.8. Локальные, глобальные и статические переменные. 11
2.7.9. Операторы управления порядком выполнения операций [4, с.153, 181]. 11
2.7.9.1. Операторы цикла. 12
2.7.9.2. Операторы ветвления. 14