Реализуйте складной нож Используя параллельные вычисления

Этот пример от страницы ссылки на функцию jackknife, но запускается параллельно.

Сгенерируйте выборочные данные размера 10000 от нормального распределения со средним значением 0 и стандартным отклонением 5.

sigma = 5;
rng('default')
y = normrnd(0,sigma,10000,1);

Запустите jackknife параллельно, чтобы оценить отклонение. Для этого используйте statset , чтобы создать структуру опций и установить поле UseParallel на истину.

opts = statset('UseParallel',true);
m = jackknife(@var,y,1,'Options',opts);

Сравните известную формулу смещения с оценкой смещения складного ножа.

n = length(y);
bias = -sigma^2/n % Known bias formula
jbias = (n-1)*(mean(m)-var(y,1)) % jackknife bias estimate
Starting parallel pool (parpool) using the 'local' profile ...

Connected to the parallel pool (number of workers: 6).

bias =

   -0.0025


jbias =

   -0.0025

Сравните, сколько времени это берет, чтобы вычислить в сериале и параллельно.

tic;m = jackknife(@var,y,1);toc  % Serial computation
Elapsed time is 1.638026 seconds.
tic;m = jackknife(@var,y,1,'Options',opts);toc % Parallel computation
Elapsed time is 0.507961 seconds.

jackknife не использует случайные числа, поэтому дает тем же результатам каждый раз, запущенный ли параллельно или последовательный.