Я пытаюсь ускорить свой код MATLAB с помощью parfor
, однако делаю это неправильно. Мой код довольно прост, я подгоняю некоторые данные, используя встроенную функцию MATLAB mle
, используя различные начальные предположения для среднего (mm
) и дисперсии (vv
). onestagepdf2
— моя функция плотности вероятности.
Вот фрагмент кода:
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
Ошибка, которую я получаю:
«Переменная pd в парфоре не может быть классифицирована».
pd
иld
внутри циклаparfor
, а не снаружи? 03.11.2015n*(i-1)+j
здесь не больше, чемn*N
, поэтому размер переменной не увеличивается. Просто Matlab не уверен в этом. 03.11.2015