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 comentarios

David Sanchez
David Sanchez el 30 de Oct. de 2013
what is zz?
Ahmad Jamialahmadi
Ahmad Jamialahmadi el 30 de Oct. de 2013
oh ! sorry , typo !!! it's z

Iniciar sesión para comentar.

 Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 30 de Oct. de 2013

0 votos

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 comentario

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 ?

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by