Документирование функций Matlab

Материал из SRNS
Перейти к: навигация, поиск

Документирование функций Matlab — способ передачи кода программ, написанных на языке Matlab коллегам или в общественное пользование. Система Matlab имеет ряд инструментов для работы с документированными функциями. В частности:

  1. заголовок функции показывается в поле «Description» окна «Current Directory»;
  2. заголовок функции и ссылка на файл, содержащий функцию показываются при генерации содержания «View->Directory Reports->Contents Report»;
  3. документация функции «help myfunc» показывается в окне «Command Window»;
  4. документация функции «doc myfunc» показывается в окне «Help»;
  5. список незавершенных работ и работ, требующих пересмотра показывается при генерации отчета «View->Directory Reports->TODO/FIXME Report».

Заголовок функции

М-файл содержит необязательное ключевое слово function начала тела функции

function [argOut1 {, argOut}] = myfunc(argIn {, arginN})

Заголовок функции ставится в комментарии первой строкой до строки function, например,

% NLINFIT Nonlinear least-squares regression
function [beta,r,J,Sigma,mse] = nlinfit(X,y,model,beta,options)

или второй строкой:

function [beta,r,J,Sigma,mse] = nlinfit(X,y,model,beta,options)
% NLINFIT Nonlinear least-squares regression

Описание функции

Описание содержит следующие необязательные секции: Description, Syntax, Arguments, Examples, See also. Например:

function hist = histmake(x, n, w)
% make histogram using data sample, number of segments or their width
%
% hist = histmake(x, n, w)
%
% Arguments
% x [N, 1] the input sample
% n [int] optional number of segments to divide (xmin xmax) uniformly
% w [scalar] optional width of a segment to divide (xmin xmax) uniformly
% w [W,1] the edges of the histogram, assigned directly
% if w is given, n will be ignored
% if neither n nor w are given, the optimal value of n will be chosen
%
% hist [structure] to use in the toolbox with the following fields
%   .dom = [min(x), max(x)] the input domain
%   .edges = edges (start points) of the segments
%   .p = probabilities, non-cumulative
%   .N = length(x)
%
% Example
% hist = histmake(randn(100,1), 5)
% h = histplot(hist);
%
% See also
% histnorm histprob histplot histc
% 
% Revisions
% Author: Paul Fleury, Date: 12/03/2005
% Supervisor: Vadim Strijov, Date: 24/03/2005
% Author: (Next revision author), Date: (Next revision date)
%

Общие требования:

  1. желательно указывать размерность векторов и матриц, особенно, если используются несколько матриц связанной размерности;
  2. желательно для каждой функции подготовить примеры использования, чтобы иметь возможность проиллюстрировать или протестировать ее работу;
  3. если функция является частью системы, указать, какие функции могут использоваться совместно с данной.

Язык документирования

Можно документировать как по-русски, так и по-английски. При этом нужно помнить, что Matlab не поддерживает русский язык полностью. В ранних версиях при отображении русских комментариев в окне редактора могут появляться вопросы. В поздних версиях при создании отчета например, на языке TeX, русский язык может отображаться в некорректной кодировке.

Тело функции

Рекомендуется при создании черновых версий алгоритмов использовать ключевые слова

% TODO
% FIXIT
% NOTE

Эти слова могут быть использованы для планирования дальнейшей работы; см. генератор отчетов "View->Directory Reports->TODO/FIXME Report".

Соглашение об именах переменных

Рекомендуется давать переменным «говорящие» имена в формате Camel. Например:

  • LogicRule — логическое правило (без префикса),
  • strPatientName — имя пациента (строка),
  • idxFeature — номер признака (целочисленный индекс),
  • tsElConsumption — временной ряд потребления электроэнергии (структура типа ts — time series).

Так как типов в Матлабе в строгом смысле этого слова нет, то эти необязательные префиксы несут смысловую нагрузку. Часто используемые обозначения:

  • idx — индекс элемента вектора,
  • fea — признак,
  • obj — объект,
  • cls — класс,
  • str — строка,
  • vec — вектор,
  • mat — матрица.

Имена функций обычно даются без префикса, за исключением

  • demoAlgorithmName — демонстрационный файл или отчет о вычислительном эксперименте,
  • loadDataName — файл порождения модельных данных или загрузки реальных данных.

Имена файлов специального назначение, которые будут работать в составе некоторой системы, даются в формате Camel. Файлы общего назначения получают краткое название с маленькой буквы.

Создание отчетов о вычислительных экспериментах

M-файлы, не использующие ключевое слово function, называются скриптами. Matlab предлагает язык разметки скриптов, удобный для автоматической генерации отчета о вычислительном эксперименте.

%% Название отчета
% Описание отчета, начинается на следующей строке после названия.
% После этого описания автоматически будет вставлено содержание отчета.

%%
% Ячейки с пустым названием в содержание не вставляются.
% После описания отчета удобно вставлять технические комментарии, например:
% "Этот отчет содержит формулы, смотри вариант отчета в файле
% <report_example.pdf report_example.pdf>".

% this file: report_example.m
% data file:

%% Теория
% Для того, чтобы вставить тег LaTex, необходимо начать новую ячейку.
%%
% <latex>
% Будет рассмотрена задача вычисления значений функции $y = sin(x)$ и
% доказано, что
% $$\int\limits_{-\infty}^{\infty} sin(x) dx = 0.$$
% </latex>

%% Вычислительный эксперимент
% Здесь будет описание эксперимента, его цели и методы. Комментарии к
% программам желательно писать по-английски.

% If the section begins with comments, please separate the comments by
% empty line.
N = 182;
x = linspace(...
    datenum('1/1/2007 00:00:00'),...
    datenum('6/1/2007 00:00:00'),N);
y = cos(x*2*pi/N);
h = figure; hold on
plot(x,y,'r-');
plot(x,y,'r.');
datetick('x','m');
axis tight
legend('solar histoty');
xlabel('date');
ylabel('altitude');
% please insert the break line here to correct the plot manually
% create the folder 'html/img/' in necessary
saveas(h,'html/img/solar','png'); % to the html report
saveas(h,'html/img/solar','psc2'); % to the LaTeX report
% please comment the 'saveas' lines to keep corrected plots unchanged
close(h);
%%
% <<img/solar.png>>
%%
% Вывод: очевидно, что на графике показана синусоида.

%%
% Для того, чтобы вставить график в отчет LaTeX, нужно заменить расширение
% .png на .ps в .tex-файле.

Для генерации отчета нужно выполнить команду publish, например,

    publish('report_example','html')

или выбрать "File->Publish to HTML".

Смотри также