«Переменная в parfor не может быть классифицирована» MATLAB - PullRequest
0 голосов
/ 15 мая 2018

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

r = 5;

Mu = 12.57e-9;

Nu = 12e6;

I = 1.8;

const = pi*Nu*Mu*r*I;

a = 55;

b = 69;

c = 206;

[m,n,p] = size(Lesion_Visible);

A = zeros(m,n,p);

parpool(2)

syms k

parfor J = 1:m
     for  I = 1:n
         for K = 1:p
             if Lesion_Visible(J,I,K) ~= 0
                  Theta = atand((J-b)/(I-a));
                  Rho = abs((I-a)/cosd(Theta))*0.05;
                  Z = abs(c-K)*0.05;
                  E = vpa(const*int(abs(besselj(0,Rho*k)*exp(-Z*k)*besselj(0,r*k)),0,20),5);
                  A (J,I,K) = E;
             end
         end
    end
end

Я пытаюсь вычислить электрическое поле в определенной позиции в массиве, и Matlab выдает мне ошибку «Переменная A в parfor не может быть классифицирована». Мне нужна помощь. Спасибо.

1 Ответ

0 голосов
/ 15 мая 2018

Поскольку классификация переменных в цикле parfor не разрешена, вы должны попытаться сохранить выходные данные каждого цикла в переменной, а затем сохранить окончательный результат в нужную переменную, A в вашем случае! Это должно сделать работу -

parfor J = 1:m

B=zeros(n,p); %create a padding matrix of two dimension 
for  I = 1:n
    C=zeros(p); %create a padding matrix of one dimension
       for K = 1:p
         if Lesion_Visible(J,I,K) ~= 0
              Theta = atand((J-b)./(I-a));
              Rho = abs((I-a)./cosd(Theta))*0.05;
              Z = abs(c-K).*0.05;
              E = vpa(const.*int(abs(besselj(0,Rho.*k).*exp(-Z.*k).*besselj(0,r.*k)),0,20),5);
              C(K) = E; %save output of innnermost loop to the padded matrix C
         end
       end
     B(I,:)=C; % save the output to dim1 I of matrix B


end
A(J,:,:)=B; save the output to dim1 J of final matrix A
end

Пройдите следующее для лучшего понимания http://www.mathworks.com/help/distcomp/classification-of-variables-in-parfor-loops.html http://in.mathworks.com/help/distcomp/sliced-variable.html

...