[英]Call a function in parfor loop in matlab
parfor i=1:10
k1=0.30+(0.35/20)*i
AX(i)=k1;
for j=1:10
k2=0.5+(.35/20)*j
AY(i,j)=k2;
wph(i,j)=wph1(k1,k2)
end
end
其中wph1(k1,k2)是一個自定義函數,用於計算聲子能量。 但是,當我嘗試運行此代碼時,出現了錯誤:
錯誤:“ wph”在工作器上引發了UndefinedFunction錯誤。 這可能是因為工作人員無法訪問包含“ wph”的文件。 使用addAttachedFiles(pool,files)指定要附加的必需文件。 有關更多詳細信息,請參見“ parallel.Pool / addAttachedFiles”文檔。
約拉曼(第7行)parfor i = 1:10中的錯誤
原因:類型為“ double”的輸入參數的未定義函數“ wph”。”
如何解決這個問題? 請幫忙。
您只遇到了小錯誤,而不是pk1
和pk2
寫p*k1
和p*k2
。 此外,在matlab中,您已經定義了pi
因此您的代碼應為
tic
parfor i=1:10
k1=0.30+(0.35/20)*i
AX(i)=k1;
for j=1:10
k2=0.5+(.35/20)*j
AY(i,j)=k2;
wph(i,j)=wph1(k1,k2);
end
end
toc
function u = wph1(k1,k2)
u = 2*cos(2*pi*k1) + 2*cos(2*pi*k2) + 2*cos(2*pi*(k1 - k2));
end
其他重要說明,在這種情況下,請使用“ for”而不是“ parfor”,除非每個函數調用都需要半秒以上的時間才能運行,否則您的代碼將運行得更慢,僅parpar的設置和調用就需要10到50毫秒。
現在是魔術。 在matlab中,這種計算完全不需要循環,因此最快的代碼是:
tic
i=1:10; k1=0.30+(0.35/20)*i; AX=k1;
j=1:10; k2=0.50+(0.35/20)*j'; AY=k2;
wph=wph1(k1,k2);
toc
% bonus: plot
[X,Y] = meshgrid(AX,AY);
surf(X,Y,wph)
function u = wph1(k1,k2)
u = 2*cos(2*pi*k1) + 2*cos(2*pi*k2) + 2*cos(2*pi*(k1 - k2));
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.