Main Content

並列計算を使用する jackknife の実装

この例では、関数 jackknife のリファレンス ページにある例を並列実行します。

平均 0、標準偏差 5 の正規分布からサイズ 10000 の標本データを作成します。

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

jackknife を並列実行して分散を推定します。これを行うため、statset を使用してオプション構造体を作成します。UseParallel フィールドを true に設定します。

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 では、乱数が使用されないため、並列実行、逐次実行を問わず、毎回同じ結果が得られます。