How to vectorize a "For Loop"

1 次查看(过去 30 天)
I have function "" f(t,z)=cos(t).*z "" which for every value of t must be integrated wrt z and output the result as a matrix. I use the following code which takes approximately 15 sec for my real long formulas while the function f which has to be integrated executes almost instantly for any value of its variables.
f=@(t,z) cos(t) .* z
t= linspace(0,3,100);
z= linspace(0,10,1000);
out=zeros(1,numel(t));
for i = 1:numel(t)
Y=f(t(i),z);
out(i)=trapz(z,Y);
end
Any help on how to vectorize this would be greatly appreciated :-)

采纳的回答

Andrei Bobrov
Andrei Bobrov 2013-10-30
f=@(t,z) cos(t) .* z;
t= linspace(0,3,100);
z= linspace(0,10,1000);
out = trapz(z(:),bsxfun(@(t,z)f(t,z),t(:)',z(:)));
  1 个评论
Ahmad Jamialahmadi
Ahmad Jamialahmadi 2013-10-30
Thank you Andrei for your response but unfortunately this vectorization method doesn't seem to optimize the loop !
Using for loop :
Elapsed time is 15.282242 seconds.
Vectorization using bsxfun :
Elapsed time is 15.361217 seconds.
However the above answer was what I was looking for :-)
Although switching from using "Integral" to "trapz" in order to optimize the integration saved me almost 60 sec, but yet it is desirable time for my calculations. Any other idea on how to approach this kinda questions ?

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by