More on Loops

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 or rem will be useful here)
• Find out if a number is prime
• Use an external while and an internal for 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$$:

$$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}$$

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.