我現在試圖在Matlab中進行並行計算,並希望使用parfor循環來提高效率。問題是我可以保證每個循環都是相互獨立的,但我最終需要更新一個全局變量(也許在Matlab中稱爲廣播變量),當我想給它賦值時有一個問題說它不能被分類。如果我仍然想在這個Matlab中做到這一點,我該如何解決這個問題,或者有什麼其他方式可以嘗試提高效率?使用parfor的廣播變量
的代碼是這樣的:
Atoms(1:nOfAtomsInTwoDim,:)=TwoDimAtoms;
odd_type=TwoDimAtoms;
even_type=TwoDimAtoms;
even_type(:,1)=TwoDimAtoms(:,1)+LatticeSpacing/2;
even_type(:,2)=TwoDimAtoms(:,2)+LatticeSpacing/2;
parfor i=2:1:nOflayers+1
temp_type=TwoDimAtoms;
if mod(i,2)
temp_type=odd_type;
temp_type(:,3)=TwoDimAtoms(:,3)+(i-1)*LatticeSpacing/2;
else
temp_type=even_type;
temp_type(:,3)=TwoDimAtoms(:,3)+(i-1)*LatticeSpacing/2;
end
iBegin=(i-1)*nOfAtomsInTwoDim+1;
iEnd=i*nOfAtomsInTwoDim;
Atoms(iBegin,iEnd,:)=temp_type;
end
最後一行有一個錯字,是這個問題嗎? '原子(iBegin,iEnd,:)'應該是'Atoms(iBegin:iEnd,:)'(第一個''應該是':') – PetrH
哪一個是你的全局變量?沒有我們可以運行的代碼示例,很難理解你的問題。 – David
PetrH你是對的,我其實並不是很熟悉Matlab ......但是我認爲它在我改變它之後仍然不起作用:( –