Maybe a couple of presentations
I hope that representatives of a few more of the solution teams will
discuss their solutions of questions. I thank Mr. Hard for his solution of Question #3 near
the end of the last meeting.
Indeed, I thank
Ms. Bae (Question #7) and Mr. Firminich (Question #5) for their
expositions of solutions.
Another random(?) sequence
This is really a rehearsal for rabbit counting, but let me look at a
(really!) rather random sequence before getting on with something very
famous. So what if I start a sequence with, say, 1, and then go on by
multiplying the number by 5 and subtracting 3. I have no reason to
expect that this will produce anything interesting, but I just want to practice.
> frog:=proc(n) if n=1 then 1 else 5*frog(n-1)-3 end if end proc; frog := proc(n) if n = 1 then 1 else 5*frog(n - 1) - 3 end if end proc > seq(frog(n),n=1..10); 1, 2, 7, 32, 157, 782, 3907, 19532, 97657, 488282So the frog function above uses the recursive idea to define the sequence. The next command actually computes the first 10 values. Maybe we could check that 7 times 5 is 35 and then minus 3 gives 32: as in the term after 7. By the way, this sequence is in Sloane's Encyclopedia. It is sequence number A047850 but let me pretend that it is not. Oh well.
> v:=n->A*5^n+B; n v := n -> A 5 + BI am going to guess that a formula for the terms is a constant multiplying powers of 5 plus another constant -- well, something like that worked for the sequence we considered last time, so let's try it here.
> coefficients:=solve({v(1)=frog(1),v(2)=frog(2)}); coefficients := {A = 1/20, B = 3/4}There are two constants, and I use the two first terms in the sequence to get values for the constants.
> v1:=n->subs(coefficients,v(n)); v1 := n -> subs(coefficients, v(n)) > v1(n); n 5 ---- + 3/4 20Now I substitute the values I got and get a specific formula, which is displayed above.
> v1(n)-(5*v1(n-1)-3); n (n - 1) 5 5 ---- - -------- 20 4 > simplify(%); 0I know that the formula works for n=1 and n=2, because that's where I got the values for A and B. But the instructions above tell me that the formula obeys the recursion relation. Why would one want such formulas? Well, one reason is that they usually compute terms in the sequence much faster than the recurrence way. For example, on my home computer, I found the terms corresponding to 1, 10, 100, 1,000, 10,000, and 100,000 both ways. Actually, I tried to. The formula worked fine, and took less than .01 seconds. The recurrence method got an error message: Error, (in frog) too many levels of recursion after .2 seconds (20 times as much computing time). So there was not enough memory space available! Ah well.
Introduction to the Fibonacci numbers
More than 800 years ago, an Italian "mathematician" whose nickname was
Fibonacci was
born and died in Pisa and published numerous influential books on
computation. He introduced so-called Arabic numbers (digits 0 through
9, decimal numbers) and the computational methods associated with them
(following Arabic and Indian traditions). A Wikipedia article
states that the methods were used in "commercial bookkeeping,
conversion of weights and measures, the calculation of interest,
money-changing, and other applications". This wasn't
theoretical math, but exciting rather applied cutting-edge
commercial ideas at that time.
The same book which introduced these new computational ideas also
showed a sequence of integers to the European audience. The sequence
came to be called the Fibonacci numbers.
Here's a translation of the book's introduction to the sequence.
It turns out that the sequence was studied almost a thousand
years earlier in connection with chanting patterns in Sanskrit
poetry. Here's
a reference.
The Fibonacci numbers arise in numerous real-world situations. Their patterns have been observed repeatedly in biology. I'll distribute a black and white copy of this poster. Many people have studied (perhaps more accurately, obsessively studied) the Fibonacci numbers. There is a Fibonacci Association which publishes the Fibonacci Quarterly and there's a huge marble statue of Fibonacci in a main square of Pisa (yes, the town with the Leaning Tower). This is neat if you visit and are a math geek.
A Maple approach to the sequence
It turns out that the entries in the sequence can be computed by an
expression called Binet's Formula, which with standard
historical inaccuracy was known way before Binet was associated with
it. Let's get this formula using Maple.
> fibon:=proc(n) if n=1 then 1 else if n=2 then 1 else fibon(n-1)+fibon(n-2) end if end if end proc; fibon := proc(n) if n = 1 then 1 else if n = 2 then 1 else fibon(n - 1) + fibon(n - 2) end if end if end procThis command defines a procedure (a short Maple program) to compute the Fibonacci numbers.
> seq(fibon(n),n=1..10); 1, 1, 2, 3, 5, 8, 13, 21, 34, 55These are the first 10 terms of the sequence. You can check that each term is the sum of the two immediately preceding it.
> growth:=solve(L^(n+2)=L^(n+1)+L^(n),L); 1/2 1/2 5 5 growth := 1/2 + ----, 1/2 - ----, 0 2 2Here I'm trying to get the correct growth constants for this sequence. I am guessing (more pedantically, "conjecturing") that the sequence will behave like powers of a number. This is similar to what we saw in some earlier examples, but the power is not so obvious. Maple takes the equation Ln+2=Ln+1+Ln and tries to solve it for L. It divides by the common factor Ln and gets a quadratic equation, L2=L+1, or L2-L-1=0 and gets the roots using the quadratic formula. The 0 at the end of the list is also a root of the equation, but I will not use it -- it doesn't give me any information.
> Lp:=growth[1];Lm:=growth[2]; 1/2 5 Lp := 1/2 + ---- 2 1/2 5 Lm := 1/2 - ---- 2So I will call Lp (p for plus) and Lm (m for minus) the two roots.
> v:=n->A*Lp^n+B*Lm^n; n n v := n -> A Lp + B LmHere is my guess for the formula giving the Fibonacci numbers. I need to find out what A and B are, and then I need to check if the formula really will obey the Fibonacci equation.
> seq(fibon(n)=v(n),n=1..2); / 1/2\ / 1/2\ / 1/2\2 / 1/2\2 | 5 | | 5 | | 5 | | 5 | 1 = A |1/2 + ----| + B |1/2 - ----|, 1 = A |1/2 + ----| + B |1/2 - ----| \ 2 / \ 2 / \ 2 / \ 2 / > coefficients:=solve({%}); 1/2 1/2 5 5 coefficients := {B = - ----, A = ----} 5 5I have two constants, so I hope that the two equations will be enough. And solve does indeed get me values for the coefficients.
> v1:=n->subs(coefficients,v(n)); v1 := n -> subs(coefficients, v(n)) > v1(n); / 1/2\n / 1/2\n 1/2 | 5 | 1/2 | 5 | 5 |1/2 + ----| 5 |1/2 - ----| \ 2 / \ 2 / ------------------ - ------------------ 5 5I substituted in with the coefficients and got a really weird looking formula. Notice that there are two n's up in the exponents, but there are square roots of 5's all over the place!
> v1(n+2)-v1(n+1)-v1(n); / 1/2\(n + 2) / 1/2\(n + 2) / 1/2\(n + 1) / 1/2\(n + 1) 1/2 | 5 | 1/2 | 5 | 1/2 | 5 | 1/2 | 5 | 5 |1/2 + ----| 5 |1/2 - ----| 5 |1/2 + ----| 5 |1/2 - ----| \ 2 / \ 2 / \ 2 / \ 2 / ------------------------ - ------------------------ - ------------------------ + ------------------------ 5 5 5 5 / 1/2\n / 1/2\n 1/2 | 5 | 1/2 | 5 | 5 |1/2 + ----| 5 |1/2 - ----| \ 2 / \ 2 / - ------------------ + ------------------ 5 5 > simplify(%); / 1/2\n / 1/2\n / 1/2\n / 1/2\n / 1/2\(n + 1) 1/2 | 5 | | 5 | 1/2 | 5 | | 5 | 1/2 | 5 | 5 |1/2 + ----| |1/2 + ----| 5 |1/2 - ----| |1/2 - ----| 5 |1/2 + ----| \ 2 / \ 2 / \ 2 / \ 2 / \ 2 / ------------------ + ------------- - ------------------ + ------------- - ------------------------ 10 2 10 2 5 / 1/2\(n + 1) 1/2 | 5 | 5 |1/2 - ----| \ 2 / + ------------------------ 5 > expand(%); 0The simplify command doesn't help much, but expand gets me 0, so I know that this ridiculous formula does indeed produce the Fibonacci numbers, forever! Here are a few more "uses":
> v1(4); / 1/2\4 / 1/2\4 1/2 | 5 | 1/2 | 5 | 5 |1/2 + ----| 5 |1/2 - ----| \ 2 / \ 2 / ------------------ - ------------------ 5 5 > expand(%); 3 > v1(100); / 1/2\100 / 1/2\100 1/2 | 5 | 1/2 | 5 | 5 |1/2 + ----| 5 |1/2 - ----| \ 2 / \ 2 / -------------------- - -------------------- 5 5 > expand(%); 354224848179261915075You can check, if you want to, that what's above is the 100th Fibonacci number (just go through the recursive definition for a little while ...).
A little while ...
Today is the day after our fourth meeting. So at home, on my little
PC, I timed the computation of the 100th Fibonacci number
using Binet's formula. The time needed on a not very fast computer was
about .08 seconds. Then I tried the recursive definition. Let's see:
computing the 30th Fibonacci number took about 3.3 seconds
of computational time and more than 10 times the storage space than
the formula evaluation. Here is what I learned by small-scale
experimentation:
Approximate
computational time (in seconds) for fibon(n) | ||||
---|---|---|---|---|
n | 30 | 31 | 32 | 33 |
Time | 3.3 | 5.9 | 9.8 | 15.4 |
And, considering how the time required is growing, I don't think there
is enough time before the computer rusts to find fibon(100).
With more honesty, I will tell you that there are ways to speed up the
recursive evaluation, but it will never be even close to the
formula. This may be one reason people like formulas.
And other things ...
If you get completely obsessed with the Fibonacci numbers, you can
start seeing amazing patterns in them. Here is one such pattern. Look
at the beginning of the sequence:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55
Take an entry, say 13, and look at the numbers on either side, 8 and
21. Well, 8·21=168 and 132=169, so these are off by
1. Let's try another, say 34 with border numbers 21 and 55. Not so
easily now (I am checking with Maple in
another window!) I see that 342=1,156 and
21·55=1,155. Again, off by 1. What's going on? This is called
the Cassini identity (discovered by a relative of the person
who found gaps in the rings of Saturn hundreds of years ago). Here is
it, along with a PROOF:
> v1(n+1)*v1(n-1)-v1(n)^2; / / 1/2\(n + 1) / 1/2\(n + 1)\ | 1/2 | 5 | 1/2 | 5 | | |5 |1/2 + ----| 5 |1/2 - ----| | | \ 2 / \ 2 / | |------------------------ - ------------------------| \ 5 5 / / / 1/2\(n - 1) / 1/2\(n - 1)\ / / 1/2\n / 1/2\n\2 | 1/2 | 5 | 1/2 | 5 | | | 1/2 | 5 | 1/2 | 5 | | |5 |1/2 + ----| 5 |1/2 - ----| | |5 |1/2 + ----| 5 |1/2 - ----| | | \ 2 / \ 2 / | | \ 2 / \ 2 / | |------------------------ - ------------------------| - |------------------ - ------------------| \ 5 5 / \ 5 5 / > expand(%); // 1/2\n\2 / 1/2\n / 1/2\n // 1/2\n\2 || 5 | | | 5 | | 5 | 1/2 || 5 | | ||1/2 + ----| | |1/2 + ----| |1/2 - ----| 5 ||1/2 + ----| | \\ 2 / / \ 2 / \ 2 / \\ 2 / / ---------------- - --------------------------- + --------------------- / 1/2\ / 1/2\ / 1/2\ | 5 | | 5 | | 5 | 10 |1/2 + ----| 10 |1/2 - ----| 10 |1/2 + ----| \ 2 / \ 2 / \ 2 / / 1/2\n / 1/2\n / 1/2\n / 1/2\n // 1/2\n\2 | 5 | 1/2 | 5 | | 5 | | 5 | || 5 | | |1/2 + ----| 5 |1/2 - ----| |1/2 - ----| |1/2 + ----| ||1/2 - ----| | \ 2 / \ 2 / \ 2 / \ 2 / \\ 2 / / - -------------------------------- - --------------------------- + ---------------- / 1/2\ / 1/2\ / 1/2\ | 5 | | 5 | | 5 | 10 |1/2 - ----| 10 |1/2 + ----| 10 |1/2 - ----| \ 2 / \ 2 / \ 2 / / 1/2\n / 1/2\n // 1/2\n\2 // 1/2\n\2 | 5 | 1/2 | 5 | 1/2 || 5 | | || 5 | | |1/2 - ----| 5 |1/2 + ----| 5 ||1/2 - ----| | ||1/2 + ----| | \ 2 / \ 2 / \\ 2 / / \\ 2 / / + -------------------------------- - --------------------- - ---------------- / 1/2\ / 1/2\ 5 | 5 | | 5 | 10 |1/2 + ----| 10 |1/2 - ----| \ 2 / \ 2 / / 1/2\n / 1/2\n // 1/2\n\2 | 5 | | 5 | || 5 | | 2 |1/2 + ----| |1/2 - ----| ||1/2 - ----| | \ 2 / \ 2 / \\ 2 / / + ----------------------------- - ---------------- 5 5 > simplify(%); n (-1)So the square of a Fibonacci number is alternately one more and then one less than the product of the Fibonacci numbers which border it!
Next time I will provide you with some recurrences, and I hope that you will be able to get formulas for them.
Maintained by greenfie@math.rutgers.edu and last modified 9/28/2008.