我試圖通過使用parfor
加速我的MATLAB代碼,但是,我做的不正確。我的代碼相當簡單,我使用MATLAB的內置函數mle
函數對一些數據進行擬合,方法是對平均值(mm
)和方差(vv
)使用不同的初始猜測。 onestagepdf2
是我的概率密度函數。並行MATLAB for循環來計算MLE
這裏是代碼片段:
mm=linspace(.1, 1, 2); % mean
vv=linspace(.1, 2, 2); % variance
N=length(mm);
n=length(vv);
pd=zeros(n*N,2);
ld = NaN*ones(n*N,1);
options = statset('MaxIter',10000, 'MaxFunEvals',10000);
parfor i=1:N % pick a mean
m=mm(i);
parfor j=1:n % pick a variance
v=vv(j);
x0=[m,v];
[p,conf1]=mle(data,'pdf',@onestagepdf2,'start',x0, 'upperbound', [Inf Inf],'lowerbound',[0 0],'options',options)
pd(n*(i-1)+j,:)=p; % store parameter values from mle
l=onestagepdf2(data,p(1),p(2)); % evaluate pdf with parameter values
ld(n*(i-1)+j)=sum(log(l)); % store likelihood value
end
end
我接收是錯誤: '在不能被歸類一個PARFOR可變PD'
我需要在'parfor'循環內部初始化'pd'和'ld'而不是外部? – user3603290
哼,不。確實,你需要在外面初始化它們,我的不好,我會更新這篇文章。 – Adriaan
這裏'n *(i-1)+ j'不大於'n * N',所以變量的大小沒有增長。只是Matlab不確定它。 – Trilarion