The for
loop is a very useful tool for doing things over and over again for a certain number of times already known in advance. There are two possibilities that we would like to consider:
- What if we do not know in advance how many iterations we will need?
- What if we would like to stop a loop before it is due to end?
An example for the first kind would be a Newton iteration that should run until the value of \(f(x)\) is "small" enough, for example \(10^{-12}\). Before actually performing the iterations we do not know how many steps it will take, so a for
loop is not exactly the right type of loop. We could get around this limitation if we introduce a maximum number of allowed iterations and then use the (as-of-yet unknown) mechanism for terminating a loop prematurely once we find a good enough approximate root.
A while
loop tells MATLAB® to continue iterating as long as a certain condition (which you specify) is satisfied. The syntax is:
while
<condition> <statements>
end
MATLAB evaluates the <condition>
and if it is true (or a non-zero number) it performs the <statements>
, if not, it continues after the end
. After each time it evaluates <statements>
MATLAB goes back and evaluates <condition>
again, etc. Note that <condition>
does not get evaluated in the middle of evaluating <statements>
but, rather, only before evaluating them. Here's a simple way of adding two positive integers (very silly):
x=5; y=6; while y>0 x=x+1; y=y-1;
end
Of course, this fails miserably if y
is not a positive integer (doesn't do anything, do you understand why?)
Exercise 16. Solve the following problems using a while
loop:
- Show the numbers from 1 to 10
- Show the numbers from 10 to -10
-
Find out how many divisors 28 has (
mod
orrem
will be useful here) - Find out if a number is prime
-
Use an external
while
and an internalfor
loop to find the first 100 prime numbers. - A perfect number is a number \(n\) whose divisors (including 1 but excluding itself) add up to \(n\) itself. For example, 6 is a perfect number. Check if a number is perfect.
-
Use two nested
while
loops to find the first 3 perfect numbers.
Homework 5. Consider the following sequence defined completely by the first element \(S_1\)¶:
\begin{equation} S_{n+1}= \begin{cases} S_n/2 & \text{ if } S_n \text{ is even}\\ 3 S_n+1 & \text{ if } S_n \text{ is odd} \end{cases} \end{equation}
A still|| open question in mathematics is whether all such sequences always arrive at 1 for large enough \(n\) (the alternatives being that some sequences may rise indefinitely, or that there may be a closed orbit that does not include 1). Compute the number of iterations it takes to arrive at \(1\) given a starting value \(s\) using a while loop. Since we do not know how long it will take to arrive at 1 (though you can assume that it will happen eventually) we might want to construct this sequence using a while-loop. What starting number smaller than 10,000 has the longest trajectory? What's the largest number on that trajectory?
§This is the subject of the Collatz Conjecture.
||Despite a recent "near" solution.