avoding loops by vectorization

5 visualizaciones (últimos 30 días)
Lee
Lee el 29 de Jun. de 2011
Hello,
I am trying to rewrite a for loop by using vectors. The loop is:
for i=1:8 outer_x(i,:)=x_i(i)+d_del(1,i)*cos(t); end
where d_del is 2x8, x_i is 1x8, and cos(t) is 1x6284
The loop does the following: outer_x(1,:)=x_i(1)+d_del(1,1)*cos(t); outer_x(2,:)=x_i(2)+d_del(1,2)*cos(t); outer_x(3,:)=x_i(3)+d_del(1,3)*cos(t); etc
I tried the following: x_i(1:end)+d_del(1,(1:end))*cos(t);
I was hoping to take each entry of d_del and multiply with every entry of cos(t), but it does not work. Any help will be greatly appreciated!
  1 comentario
Sean de Wolski
Sean de Wolski el 29 de Jun. de 2011
You say d_del = 2x8; do you use only the first row? You never access d_del(2,anything)

Iniciar sesión para comentar.

Respuestas (4)

Oleg Komarov
Oleg Komarov el 29 de Jun. de 2011
outer_x = bsxfun(@plus, x_i, d_del(1,:)*cost.');
Don't use cos (i renamed it in cost) as a variable since it's already a builtin matlab function. If t is the 1 by 6284 variable then ignore my previous comment.
  1 comentario
Matt Fig
Matt Fig el 29 de Jun. de 2011
I believe that lee meant to take the cosine of a vector t...

Iniciar sesión para comentar.


Andrei Bobrov
Andrei Bobrov el 29 de Jun. de 2011
outer_x = bsxfun(@plus,d_del(1,:)'*cos(t),x_i');
  2 comentarios
Sean de Wolski
Sean de Wolski el 29 de Jun. de 2011
Nice Answer! :)
Andrei Bobrov
Andrei Bobrov el 29 de Jun. de 2011
all +1

Iniciar sesión para comentar.


Sean de Wolski
Sean de Wolski el 29 de Jun. de 2011
outer2 = bsxfun(@plus,(d_del(1,:).')*cos(t),x_i.');
produces the same result as your loop.

Laura Proctor
Laura Proctor el 29 de Jun. de 2011
This should do it:
outer_x_new = x_i'*ones(size(t))+d_del(1,:)'*cos(t);

Categorías

Más información sobre Loops and Conditional Statements en Help Center 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