簡體   English   中英

在MATLAB中的parfor循環中調用函數

[英]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”。”

如何解決這個問題? 請幫忙。

您只遇到了小錯誤,而不是pk1pk2p*k1p*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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM