0
私は午前中に研究をしてきたので、なぜこのコードが実行されないのか理解できません。MATLABのセル配列の問題を分類する "parfor"ループ
もともとコードは以下のとおりであった:
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
私の初期の思想は、犯人がdataQCell
の指標として
m1(tt,jj) = m1(tt-1,jj) + deltaQ'* dataQCell{(ii-1)*nSim+jj,1}(1:3,tt) + d;
が指数(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
を修正することによりnRep
の部分に(nSim*nRep
X 1)細胞を壊すことでした。しかし、私は同じ「変数 『M1』に分類することができません」、エラーが出ます。
コードを[mcve]に変更してください:**すべての不要なコード**を削除し、すべての入力を提供して、自分でコードを実行してエラーを再現できるようにしてください。 –
コードは今実行できるはずです。唯一のことはmatlabpoolがMATLABの最新バージョンで使用されていないと私は信じています – hipHopMetropolisHastings