Spec-Zone.ru › Octave 9

Предыдущий: Функции тестирования, Вверх: Функции тестирования и демонстрации [Оглавление][Индекс]

B.2 Функции демонстрации ¶

: demo name ¶
: demo name n ¶
: demo ("name") ¶
: demo ("name", n) ¶

Выполнить примерный блок кода n, связанный с функцией name.

Если n не указан, выполняются все примеры.

Предпочтительное расположение блоков примеров кода — внутри файла скрипта m-файла сразу после кода, который он выполняет. В качестве альтернативы примеры могут храниться в файле с тем же именем, но без расширения, расположенном в пути загрузки Octave. Для разделения примеров от обычного кода скрипта все строки предваряются %!. Каждый пример также должен быть введён ключевым словом "demo" выровненным слева по префиксу без промежутков. Остальная часть примера может содержать произвольный код Octave. Например:

%!demo
%! t = 0:0.01:2*pi;
%! x = sin (t);
%! plot (t, x);
%! title ("one cycle of a sine wave");
%! #-------------------------------------------------
%! # the figure window shows one cycle of a sine wave

Обратите внимание, что код отображается перед его выполнением, поэтому для маркировки отображаемого содержимого достаточно простого комментария в конце. Для графиков маркировка также может выполняться с помощью title или text. Обычно не требуется использовать disp или printf внутри демонстрации.

Демонстрации выполняются в автономной среде функций без доступа к внешним переменным. Это означает, что каждая демонстрация должна иметь отдельный код инициализации. В качестве альтернативы все демонстрации можно объединить в одну большую демонстрацию с кодом

%! input ("Press <enter> to continue: ", "s");

между секциями, но такое использование не рекомендуется. Другие способы избежать нескольких блоков инициализации включают использование нескольких графиков с новой figure командой между каждым графиком или использование subplot для размещения нескольких графиков в одном окне.

Наконец, поскольку demo оценивается в контексте функции, невозможно определять новые функции внутри кода. Анонимные функции являются хорошей заменой в большинстве случаев. Если блоки функций должны быть использованы, то код eval (example ("function", n)) позволит Octave их видеть. Однако это имеет свои проблемы, так как eval оценивает только одну строку или оператор за раз. В этом случае объявление функции должно быть заключено в "if 1 <demo stuff> endif", где "if" находится в одной строке с "demo". Например:

%!demo if 1
%!  function y = f(x)
%!    y = x;
%!  endfunction
%!  f(3)
%! endif

См. также: rundemos, example, test.

: example name ¶
: example name n ¶
: example ("name") ¶
: example ("name", n) ¶
: [codestr, codeidx] = example (…) ¶

Отобразить код примера n, связанного с функцией name, но не запускать его.

Если n не указан, отображаются все примеры.

При вызове с аргументами результата примеры возвращаются в виде строки codestr, а codeidx указывает конечную позицию различных примеров.

Для получения полного объяснения см. demo.

См. также: demo, test.

: oruntests () ¶
: oruntests (directory) ¶

Выполнить встроенные тесты для всех m-файлов в указанной директории.

Блоки тестов в любых файлах исходного кода C++ (*.cc) также будут выполнены для использования с динамически связанными функциями oct-файлов.

Если директория не указана, выполняются все директории в пути поиска функций Octave.

См. также: rundemos, test, path.

: rundemos () ¶
: rundemos (directory) ¶

Выполнить встроенные демонстрации для всех m-файлов в указанной директории.

Блоки демонстраций в любых файлах исходного кода C++ (*.cc) также будут выполнены для использования с динамически связанными функциями oct-файлов.

Если директория не указана, выполняются все директории в пути поиска функций Octave.

См. также: demo, oruntests, path.

END_OF_DOCUMENT_MARKER
: speed (f, init, max_n, f2, tol) ¶
: [order, n, T_f, T_f2] = speed (…) ¶

Определите время выполнения выражения (f) для различных входных значений (n).

Значения n задаются с логарифмическим шагом от 1 до max_n. Для каждого n вычисляется выражение инициализации (init) для создания любых данных, необходимых для теста. Если задано второе выражение (f2), то сравниваются времена выполнения двух выражений. При вызове без выходных аргументов результаты выводятся в стандартный вывод и отображаются графически.

f

Выражение кода для вычисления.

max_n

Максимальная длина теста. Значение по умолчанию равно 100. В качестве альтернативы можно использовать [min_n, max_n] или указать значения n точно с помощью [n1, n2, …, nk].

init

Выражение инициализации для значений аргументов функции. Используйте k для номера теста и n для размера теста. Это должно вычислять значения для всех переменных, используемых в f. Обратите внимание, что init будет вычислено сначала для k = 0, поэтому вещи, которые являются постоянными во всей серии тестов, можно вычислить один раз. Значение по умолчанию x = randn (n, 1).

f2

Альтернативное выражение для вычисления, чтобы можно было непосредственно сравнить скорость двух выражений. Значение по умолчанию [].

tol

Допуск, используемый для сравнения результатов выражения f и выражения f2. Если tol положительно, то это абсолютный допуск. Если tol отрицательно, то это относительный допуск. Значение по умолчанию eps. Если tol Inf, то сравнение не будет производиться.

order

Временная сложность выражения O(a*n^p). Это структура с полями a и p.

n

Значения n, для которых было вычислено выражение И время выполнения было больше нуля.

T_f

Зафиксированные значения времени выполнения выражения f в секундах.

T_f2

Зафиксированные значения времени выполнения выражения f2 в секундах. При необходимости, среднее отношение времени просто mean (T_f ./ T_f2).

Уклон графика времени выполнения показывает приблизительную степень асимптотического времени выполнения O(n^p). Эта степень отображается для области, в которой она аппроксимируется (вторая половина графика). Оценённая степень не очень точна, но должна быть достаточной для определения общего порядка алгоритма. Она должна показать, например, если реализация неожиданно O(n^2) вместо O(n), потому что она расширяет вектор каждый раз при прохождении цикла, а не предварительно выделяет память. В текущей версии Octave следующее не является ожидаемым O(n).

speed ("for i = 1:n, y{i} = x(i); endfor", "", [1000, 10000])

Но это так, если вы предварительно выделяете ячейку y:

speed ("for i = 1:n, y{i} = x(i); endfor", ...
       "x = rand (n, 1); y = cell (size (x));", [1000, 10000])

Предпринимается попытка приблизить стоимость отдельных операций, но она сильно неточна. Можно несколько улучшить стабильность, выполнив больше работы для каждого n. Например:

speed ("airy(x)", "x = rand (n, 10)", [10000, 100000])

При сравнении двух различных выражений (f, f2), наклон линии на графике отношения ускорения должен быть больше 1, если новое выражение быстрее. Лучшие алгоритмы имеют небольшой наклон. В целом, векторизация алгоритма не изменит наклон графика времени выполнения, но сдвинет его относительно исходного. Например:

speed ("sum (x)", "", [10000, 100000], ...
       "v = 0; for i = 1:length (x), v += x(i); endfor")

Следующий пример более сложный. Если бы существовала оригинальная версия xcorr с использованием циклов for и вторая версия с использованием FFT, то можно было бы сравнить скорость выполнения для различных лагов, или для фиксированного лага с различной длиной векторов следующим образом:

speed ("xcorr (x, n)", "x = rand (128, 1);", 100,
       "xcorr_orig (x, n)", -100*eps)
speed ("xcorr (x, 15)", "x = rand (20+n, 1);", 100,
       "xcorr_orig (x, n)", -100*eps)

Предполагая, что одна из двух версий находится в xcorr_orig, это сравнит их скорость и значения выходных данных. Обратите внимание, что версия FFT не точна, поэтому необходимо указать допустимый допуск при сравнении 100*eps. В этом случае сравнение следует вычислять относительно, как abs ((x - y) ./ y), а не абсолютно, как abs (x - y).

Введите example ("speed"), чтобы увидеть некоторые реальные примеры, или demo ("speed"), чтобы их запустить.

Предыдущее: Функции Тестирования, Вернуться к: Функции Тестирования и Демонстрации [Содержание][Индекс]

© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.2.0/Demonstration-Functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API