2014-03-03 116 views
0

我正在尋找一種方式來擺脫下面的循環(超過THETA):向量化在MATLAB

for i=1:1:length(theta) 

    V2_ = kV2*cos(theta(i)); 
    X = X0+V2_; 
    Y = Y0-V2_*(k1-k2); 
    Z = sqrt(X.^2-Z0-4*V2_.*(k.^2*D1+k1)); 


    pktheta(:,i)=exp(-t/2*V2_).*(cosh(t/2*Z)+... 
      Y./((k1+k2)*Z).*sinh(t/2*Z)); 


end 

其中X0,Y0,Z0和KV2是依賴於矢量k(大小相同)。 t,D1,k1和k2是數字。由於我不得不經過這個循環幾次,我怎麼能加快速度? 感謝

+0

其他變量的維數是多少? – Nitish

+0

right!..我將編輯OP – JFNJr

+0

,所以只有'pktheta'在循環中發生變化,其他一切都保持不變,對嗎?如果是的話,那看起來很簡單。 –

回答

0

試試這個 -

N = numel(theta); 

V2_ = kV2*cos(theta(1:N)); 
X0 = repmat(X0,[1 N]); 
Y0 = repmat(Y0,[1 N]); 
Z0 = repmat(Z0,[1 N]); 

X = X0 + V2_; 
Y = Y0-V2_*(k1-k2); 
Z = sqrt(X.^2-Z0-4.*V2_ .* repmat(((1:N).^2)*D1 + k1.*ones(1,N),[size(X0,1) 1])); 
pktheta = exp(-t/2*V2_).*(cosh(t/2*Z) + Y./((k1+k2)*Z).*sinh(t/2*Z)); 

絕對BSXFUN必須更快,如果有人可以用它張貼。