exponenta event banner

comparisonPlot

Класс: matlab.perftest.TimeResult
Пакет: matlab.perfest

Создание графика для сравнения результатов базовых и измерительных испытаний

Описание

пример

comparisonPlot(Baseline,Measurement) создает график, который визуально сравнивает каждый TimeResult объект в массивах Baseline и Measurement. Сравнение основано на минимуме времени измерения образца.

пример

comparisonPlot(Baseline,Measurement,stat) задает статистику, применяемую к временам измерения выборки каждого TimeResult объект в Baseline и Measurement.

пример

comparisonPlot(___,Name,Value) создает график сравнения с дополнительными опциями, заданными одним или несколькими Name,Value аргументы пары. Например, comparisonPlot(Baseline,Measurement,'Scale','linear') создает график с линейным масштабом для осей X и Y.

пример

cp = comparisonPlot(___) возвращает значение ComparisonPlot , указанный как экземпляр matlab.unittest.measurement.chart.ComparisonPlot класс. Использовать cp для изменения свойств определенного графика сравнения после его создания.

Входные аргументы

развернуть все

Результаты выполнения первичного эксперимента по времени для набора тестов, указанного как TimeResult массив. Baseline должна иметь ту же длину, что и Measurement.

Результаты выполнения вторичного эксперимента по времени для набора тестов, указанного как TimeResult массив. Measurement должна иметь ту же длину, что и Baseline.

Статистика, применяемая к временам измерения выборки каждого TimeResult объект в Baseline и Measurement, указано как 'min', 'max', 'mean', или 'median'.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: cp = comparisonPlot(Baseline,Measurement,'SimilarityTolerance',0.05,'Scale','linear')

Масштаб осей x и y ComparisonPlot объект, указанный как 'log' или 'linear'.

Допустимое отклонение статистического отношения от единицы для пары аналогичных тестов производительности, указанных как числовое значение между 0 и 1.

SimilarityTolerance определяет границы затененной области на графике сравнения. Точки данных, которые попадают в эту область, представляют собой аналогичные Baseline и Measurement записей.

Родительский контейнер для печати, указанный как Figure объект, созданный с помощью figure или uifigure функция, a Panel объект, созданный с помощью uipanel функцию или Tab объект, созданный с помощью uitab функция.

Примеры

развернуть все

Визуализируйте вычислительную сложность двух алгоритмов сортировки, сортировки пузырей и сортировки слиянием, которые сортируют элементы списка в порядке возрастания. Bubble sort - это простой алгоритм сортировки, который многократно просматривает список, сравнивает смежные пары элементов и заменяет элементы, если они находятся в неправильном порядке. Сортировка слиянием - это алгоритм «разделяй и властвуй», который использует преимущества легкости объединения отсортированных сублистов в новый отсортированный список.

В текущей папке сохраните следующий код в bubbleSort.m.

function y = bubbleSort(x)
% Sorting algorithm with O(n^2) complexity
n = length(x);
swapped = true;

while swapped
    swapped = false;
    for i = 2:n
        if x(i-1) > x(i)
            temp = x(i-1);
            x(i-1) = x(i);
            x(i) = temp;
            swapped = true;
        end
    end
end

y=x;
end

Сохранить следующий код в mergeSort.m.

function y = mergeSort(x)
% Sorting algorithm with O(n*logn) complexity
y = x; % A list of one element is considered sorted

if length(x) > 1
    mid = floor(length(x)/2);
    L = x(1:mid);
    R = x((mid+1):end);
    
    % Sort left and right sublists recursively
    L = mergeSort(L);
    R = mergeSort(R);
    
    % Merge the sorted left (L) and right (R) sublists
    i = 1;
    j = 1;
    k = 1;
    while i <= length(L) && j <= length(R)
        if L(i) < R(j)
            y(k) = L(i);
            i = i + 1;
        else
            y(k) = R(j);
            j = j + 1;
        end
        k = k + 1;
    end
    
    % At this point, either L or R is empty
    while i <= length(L)
        y(k) = L(i);
        i = i + 1;
        k = k + 1;
    end
    
    while j <= length(R)
        y(k) = R(j);
        j = j + 1;
        k = k + 1;
    end
end

end

Создайте следующий класс параметризованного теста, TestSort, который сравнивает производительность алгоритмов сортировки пузырей и сортировки слиянием. len содержит количество элементов списка, которые требуется проверить.

classdef TestSort < matlab.perftest.TestCase
    properties
        Data
        SortedData
    end
    
    properties(ClassSetupParameter)
        % Create 25 logarithmically spaced values between 10^2 and 10^4
        len = num2cell(round(logspace(2,4,25)));
    end
    
    methods(TestClassSetup)
        function ClassSetup(testCase,len)
            orig = rng;
            testCase.addTeardown(@rng,orig)
            rng('default')
            testCase.Data = rand(1,len);
            testCase.SortedData = sort(testCase.Data);
        end
    end
    
    methods(Test)
        function testBubbleSort(testCase)
            while testCase.keepMeasuring
                y = bubbleSort(testCase.Data);
            end
            testCase.verifyEqual(y,testCase.SortedData);
        end
        
        function testMergeSort(testCase)
            while testCase.keepMeasuring
                y = mergeSort(testCase.Data);
            end
            testCase.verifyEqual(y,testCase.SortedData);
        end
        
    end
end

Выполните тесты производительности для всех тестовых элементов, которые соответствуют 'testBubbleSort' и сохраните результаты в Baseline массив. Результаты могут отличаться от показанных.

Baseline = runperf('TestSort','ProcedureName','testBubbleSort');
Running TestSort
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .....
Done TestSort
__________

Выполнение тестов производительности для всех элементов, соответствующих 'testMergeSort' и сохраните результаты в Measurement массив.

Measurement = runperf('TestSort','ProcedureName','testMergeSort');
Running TestSort
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
Done TestSort
__________

Визуально сравнить минимум MeasuredTime в столбце Samples таблица для каждой соответствующей пары Baseline и Measurement объекты.

comparisonPlot(Baseline,Measurement);

Comparison plot based on the minimum of sample measurement times

На этом графике сравнения большинство точек данных имеют синий цвет, поскольку они находятся ниже закрашенной области подобия. Этот результат показывает превосходную производительность сортировки слиянием для большинства тестовых случаев. Однако для достаточно маленьких списков сортировка пузырей выполняется лучше или сравнима с сортировкой слиянием, как показано оранжевыми и серыми точками на графике.

В качестве резюме сравнения график сообщает об улучшении производительности на 78% из-за сортировки слиянием. Это значение представляет собой среднее геометрическое процента улучшения, соответствующего всем точкам данных. Если график сравнения содержит недопустимые точки данных, сводка сравнения не создается.

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

Comparison plot based on the minimum of sample measurement times. A data tip displays detailed information about one of the points.

Чтобы изучить производительность алгоритма сортировки в наихудшем случае для различных длин списков, создайте график сравнения на основе максимума времени измерения выборки.

comparisonPlot(Baseline,Measurement,'max');

Comparison plot based on the maximum of sample measurement times

Уменьшить SimilarityTolerance кому 0.01 при сравнении максимума времени измерения образца. Вернуть ComparisonPlot объект в cp для последующего изменения его свойств.

cp = comparisonPlot(Baseline,Measurement,'max','SimilarityTolerance',0.01);

Comparison plot based on the maximum of sample measurement times. Similarity tolerance is 0.01.

Представлен в R2019b