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
-
: example
name¶ -
: example
name n¶ -
: example
("name")¶ -
: example
("name", n)¶ -
:
[codestr, codeidx] =example(…)¶ -
Отобразить код примера n, связанного с функцией name, но не запускать его.
Если n не указан, отображаются все примеры.
При вызове с аргументами результата примеры возвращаются в виде строки codestr, а codeidx указывает конечную позицию различных примеров.
Для получения полного объяснения см.
demo.
-
: oruntests
()¶ -
: oruntests
(directory)¶ -
Выполнить встроенные тесты для всех m-файлов в указанной директории.
Блоки тестов в любых файлах исходного кода C++ (*.cc) также будут выполнены для использования с динамически связанными функциями oct-файлов.
Если директория не указана, выполняются все директории в пути поиска функций Octave.
-
: rundemos
()¶ -
: rundemos
(directory)¶ -
Выполнить встроенные демонстрации для всех m-файлов в указанной директории.
Блоки демонстраций в любых файлах исходного кода C++ (*.cc) также будут выполнены для использования с динамически связанными функциями oct-файлов.
Если директория не указана, выполняются все директории в пути поиска функций Octave.
-
: 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. Если tolInf, то сравнение не будет производиться. 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