Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Thread Subject:
Speed of "for" loops

Subject: Speed of "for" loops

From: John

Date: 20 Jun, 2011 22:42:07

Message: 1 of 6

Is there something peculiarly slow about using "for" loops? I have several "for" statements within each other (is this called "nested"?). I have estimated that it needs to perform a calculation involving trig functions roughly 1.12 * 10^10 times.

Should this really be taking over half an hour? Any hints? I am wondering if it is possible to "vectorize" some of my code.

Please bear in mind I'm new to Matlab.

Subject: Speed of "for" loops

From: John

Date: 20 Jun, 2011 22:51:05

Message: 2 of 6

"John " <johnps@gmail.com> wrote in message <itoibv$e5j$1@newscl01ah.mathworks.com>...
> Is there something peculiarly slow about using "for" loops? I have several "for" statements within each other (is this called "nested"?). I have estimated that it needs to perform a calculation involving trig functions roughly 1.12 * 10^10 times.
>
> Should this really be taking over half an hour? Any hints? I am wondering if it is possible to "vectorize" some of my code.
>
> Please bear in mind I'm new to Matlab.

Suppose that I want to "vectorize" to make things faster-- if that does indeed make it faster. Suppose F1, A1, F2, A2, F3, A3, F4, and A4 are all vectors. (Fx is a calculated value). I want to calculate every single possibility, which can be done with loops. Why won't the following code work instead? It says inner dimensions must agree. Can this only be done with loops?

thrustx =
                    F1.*cos(A1)+F2.*cos(A2)+F3.*cos(A3)+F4.*cos(A4)+
                    Fx;

Thanks again.

 

Subject: Speed of "for" loops

From: Roger Stafford

Date: 20 Jun, 2011 23:05:04

Message: 3 of 6

"John " <johnps@gmail.com> wrote in message <itoisp$fdh$1@newscl01ah.mathworks.com>...
> "John " <johnps@gmail.com> wrote in message <itoibv$e5j$1@newscl01ah.mathworks.com>...
> > Is there something peculiarly slow about using "for" loops? I have several "for" statements within each other (is this called "nested"?). I have estimated that it needs to perform a calculation involving trig functions roughly 1.12 * 10^10 times.
> >
> > Should this really be taking over half an hour? Any hints? I am wondering if it is possible to "vectorize" some of my code.
> >
> > Please bear in mind I'm new to Matlab.
>
> Suppose that I want to "vectorize" to make things faster-- if that does indeed make it faster. Suppose F1, A1, F2, A2, F3, A3, F4, and A4 are all vectors. (Fx is a calculated value). I want to calculate every single possibility, which can be done with loops. Why won't the following code work instead? It says inner dimensions must agree. Can this only be done with loops?
>
> thrustx =
> F1.*cos(A1)+F2.*cos(A2)+F3.*cos(A3)+F4.*cos(A4)+
> Fx;
- - - - - - -
  I would advise you to give us the specifics of your problem. Show us the nested for loops and the sizes of vectors involved. Vague statements such as "calculate every single possibility" don't help much.

Roger Stafford

Subject: Speed of "for" loops

From: TideMan

Date: 20 Jun, 2011 23:16:19

Message: 4 of 6

On Jun 21, 10:51 am, "John " <joh...@gmail.com> wrote:
> "John " <joh...@gmail.com> wrote in message <itoibv$e5...@newscl01ah.mathworks.com>...
> > Is there something peculiarly slow about using "for" loops? I have several "for" statements within each other (is this called "nested"?). I have estimated that it needs to perform a calculation involving trig functions roughly 1.12 * 10^10 times.
>
> > Should this really be taking over half an hour? Any hints? I am wondering if it is possible to "vectorize" some of my code.
>
> > Please bear in mind I'm new to Matlab.
>
> Suppose that I want to "vectorize" to make things faster-- if that does indeed make it faster. Suppose F1, A1, F2, A2, F3, A3, F4, and A4 are all vectors. (Fx is a calculated value). I want to calculate every single possibility, which can be done with loops. Why won't the following code work instead? It says inner dimensions must agree. Can this only be done with loops?
>
> thrustx =
>                     F1.*cos(A1)+F2.*cos(A2)+F3.*cos(A3)+F4.*cos(A4)+
>                     Fx;
>
> Thanks again.

Vectorising may or may not help.
What will help, though, is pre-allocating vectors and matrices,
thereby removing variables that "grow" within a loop.
In your equation, do this and show us the results:
[size(F1) size(A1) size(F2) size(A2) size(F3) size(A3) size(F4)
size(A4) size(Fx)]
For the equation to work, the sizes must all be exactly the same.

Subject: Speed of "for" loops

From: Rune Allnor

Date: 21 Jun, 2011 04:58:12

Message: 5 of 6

On Jun 21, 12:51 am, "John " <joh...@gmail.com> wrote:

> I want to calculate every single possibility, which can be done with loops.

Here all the alarm bells in my mind go off:

1) You *want* to do these computations. That's not an issue;
   what matters is what computations you *need* to do.

   Whenever you use the term 'want', take two and think
   very carefully about what you *need*: Those two are
   usually sufficiently different to make a significant
   impact of feasability.

2) The same goes for the phrase 'all possible combinations'.
   Numbers very quickly grow very large.

   People who use this pharse usually don't know what they
   are doing or why. Instead of spending huge amounts of
   time and efforts computing numbers that tell you nothing,
   make an effort to find those numbers that tell you
   whatever it is you want to find out.

Rune

Subject: Speed of "for" loops

From: Rune Allnor

Date: 21 Jun, 2011 04:52:21

Message: 6 of 6

On Jun 21, 12:42 am, "John " <joh...@gmail.com> wrote:
> Is there something peculiarly slow about using "for" loops? I have several "for" statements within each other (is this called "nested"?). I have estimated that it needs to perform a calculation involving trig functions roughly 1.12 * 10^10 times.

Ten billion computations on a 2'is GHz computer
would require at least 5 s. Trig functions might
require a lot more than one clock cycle each;
complicated expressions even more. Then there is
cache misses in memory look-ups top watch out for,
those might take significant time.

So you should expect run times on the order of
minutes.

> Should this really be taking over half an hour? Any hints? I am wondering if it is possible to "vectorize" some of my code.

Keep in mind that matlab is an interpreted language.
There is a significant overhead involved with that, as

1) The computer needs to do a lot more work than in
   the nitty-gritty 'distilled-to-the-core' case

2) The data contains a lot more additional information
   than is needed in a compiled language, which might
   tend to fragment the data footprint in RAM.

Rune

Tags for this Thread

No tags are associated with this thread.

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us