0
因此,我一直在研究整個上午,但無法弄清楚爲什麼這段代碼無法運行。在MATLAB中對單元陣列的功能進行故障分類「parfor」Loop
原來的代碼是:
nSim = 100;
nTs = 40;
nRep = 10;
m1 = NaN(nTs,nSim);
meanM1 = NaN(nTs,nRep);
delta = [1/400,1/400,-1/400]';
d = -0.05;
dataQCell = cell(nSim*nRep,1);
for jj=1:nSim*nRep
dataQCell{jj} = rand(3,nTs);
end
matlabpool('open',10)
parfor ii=1:nRep
for jj=1:nSim
for tt=1:nTs
if tt>1
m1(tt,jj) = m1(tt-1,jj) + delta'* dataQCell{(ii-1)*nSim+jj,1}(1:3,tt)+d;
else
m1(tt,jj) = delta'* dataQCell{(ii-1)*nSim+jj,1}(1:3,tt) + d;
end
end
end
meanM1(tt,ii) = mean(m1,2);
end
matlabpool close force
我最初的想法是,罪魁禍首是
m1(tt,jj) = m1(tt-1,jj) + deltaQ'* dataQCell{(ii-1)*nSim+jj,1}(1:3,tt) + d;
爲dataQCell
的指數是指數(ii
,jj
)的函數。
注意我已經註釋掉了meanM1
行,我仍然得到相同的錯誤。
我在溶液中的第一嘗試是通過修改代碼
nSim = 100;
nTs = 40;
nRep = 10;
m1 = NaN(nTs,nSim);
meanM1 = NaN(nTs,nRep);
deltaQ = [1/400,1/400,-1/400]';
d = -0.05;
dataQCell = cell(nSim*nRep,1);
for jj=1:nSim*nRep
dataQCell{jj} = rand(3,nTs);
end
dataRepCell = cell(nRep,1);
for ii=1:nRep
dataRepCell{ii} = dataQCell{(ii-1)*nSim+1:ii*nSim};
end
matlabpool('open',10)
parfor ii=1:nRep
for jj=1:nSim
for tt=1:nTs
if tt>1
m1(tt,jj) = m1(tt-1,jj) + deltaQ'* dataRepCell{ii}{jj}(1:3,tt)+d;
else
m1(tt,jj) = deltaQ'* dataRepCell{ii}{jj}(1:3,tt) + d;
end
end
end
meanM1(tt,ii) = mean(m1,2);
end
matlabpool close force
到(nSim*nRep
X 1)細胞破碎成nRep
份但我得到相同的「無法變量‘M1’分類」,錯誤。
請嘗試將您的代碼轉換爲[mcve]:刪除**所有不必要的代碼**並提供所有輸入,以便我們可以自行運行您的代碼並重現錯誤。 –
代碼應該能夠立即執行。唯一的事情是我相信MATLAB最新版本中沒有使用matlabpool – hipHopMetropolisHastings