How to vectorize a "For Loop"

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 :-)

2 Commenti

David Sanchez
David Sanchez il 30 Ott 2013
what is zz?
oh ! sorry , typo !!! it's z

Accedi per commentare.

 Risposta accettata

Andrei Bobrov
Andrei Bobrov il 30 Ott 2013
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 Commento

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 ?

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by