fibbonacci series, with time function

S

SteveDB1

Howdie all.
I've used some C# code to create my own fibbnoacci series macro.
-----------------------------------------------------------
Sub fibbonacci()
Dim i As Long
Dim j As Long
Dim N As Long
Dim fib As Long

i = -1
j = 1

While (fib <= 6000000000#)
fib = i + j
i = j
j = fib

Wend
MsgBox "The Fibbonacci # for this series is: " & fib

End Sub
-------------------------------------------------------------------
It works good, with no problems. Well, at least until I reach 1.84 billion.

What I want to do is to add a "time" function with a 9 month limiter. I.e.,
each iteration has an output with each 9 months of time, and a 13 to 17 year
start point for each subsequent iteration set.
E.g.,
the fibbonacci numbers are
1, 1, 2, 3, 5, 8, 13, 21,.......
So, my first set where 1 and 1 become 2, is at time = 9 months.
my next set where 2 becomes 3 is at least 9 months, and each subsequent 9
months ++
I then want to do an offshoot from that, essentially starting over with each
13 to 17 years.

My overall goal is a population growth analysis for personal purposes. Back
when I was taking my math classes, one of my professors told me that the
fibbonacci series was developed to analyze rabbit population growth.

I realize that this might be over the top of what is done here, but I wanted
to at least ask. So, if it is, please let me know.
Thank you for your helps.
Best,
SteveB.
 
D

Dana DeLouis

no problems....until I reach 1.84 billion.

Hi. If you change your Dim statements to Double, you will be able to
calculate a Fibbonacci number a little greater than 46.

I'm afraid I don't understand your question about Offset.

- - -
Dana DeLouis
 
S

SteveDB1

Hi Dana,
I thought about double, but decided on long instead. I'll try that-- thanks.

You're not understanding is partly my problem, as I'm not real sure on how
to describe it. I was trying to minimize my verbosity.

As stated, I want to do some population growth analysis.
For human population, a physically mature human can start having children
anywhere from 9 to 16 years of age.
I figured that 13 years would be a reasonable starting point.
So, if a two people get together and start having children, the maximum they
can have is approximately every nine months (and no, I wasn't going to count
twins, triplets, etc.... ).
Their offspring cannot start having children until age 13, and they can max
out at every nine months.
The offspring of the second generation would start at 13, and be a maximum
of every nine months..
Etcetera.......
I know that I'll need a max age for having children-- a cut off point.
I know that with the Fibbonacci series, it starts with 1, 1, which makes
two. The child born from the two make for 3.
It quickly grows in a seemingly exponential growth function. I've read that
an exponential growth function with a "Phi" function as a "divine" ratio is
used at a certain point due to the rapidity of growth, and complexity.
My over all goal is to find out how long it'd take to grow the population to
6 billion-- not counting natural disasters, wars, etc.... that would be used
to "thin" the population base.
If I understand it correctly, I think I'd need an array, but am sufficiently
unclear as to not be sure. It almost seems that I'd need an inifinitely (one
for each increasing member of the birth pool) nested do, or while loop.

If this still doesn't make sense, please let me know.
Thanks again for your initial response.
SteveB
 
S

SteveDB1

I just thought of something that might tell me part of what I want.
What would I code to get a counter to tell me how many iterations that it
takes to get to my upper limit?
 
D

Dana DeLouis

SteveDB1 said:
I just thought of something that might tell me part of what I want.
What would I code to get a counter to tell me how many iterations that it
takes to get to my upper limit?


For a looping solution, one way if we use your code...

Sub fibbonacci()
Dim i As Double
Dim j As Double
Dim N As Double
Dim fib As Double
Dim C As Double 'Counter

i = -1
j = 1
C = -1
While (fib <= 6000000000#)
C = C + 1
fib = i + j
i = j
j = fib
Wend
'We've exceeded our number
MsgBox "The Max Fibbonacci # is: " & C - 1
End Sub

- -
HTH
Dana DeLouis
 
S

SteveDB1

Hi Dana,
That does part of it.
I think the rest is something I'll need to ponder more. I knew this would be
larger than I initially thought.
Part of what's not clear to me is since each new generation will have its
own fibbonacci series, how does each new iteration work... Part of me is
wondering if it'd be a factorial function as well.
THanks for your help thus far. I appreciate it.
 
D

Dana DeLouis

SteveDB1 said:
Hi Dana,
That does part of it.
I think the rest is something I'll need to ponder more. I knew this would be
larger than I initially thought.
Part of what's not clear to me is since each new generation will have its
own fibbonacci series, how does each new iteration work... Part of me is
wondering if it'd be a factorial function as well.
THanks for your help thus far. I appreciate it.

Hi. There are lots of articles relating the Fibbonacci sequence to
Rabbit growth, if that's your question.


Two of many...
http://educ.queensu.ca/~fmc/may2002/RabFib.htm

http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fibnat.html#rabeecow

etc...

HTH
Dana DeLouis


<snip>
 
D

Dana DeLouis

What would I code to get a counter to tell me how many iterations >>
Oh...I see the math now. Because we don't know if the solution is Odd
or Even, the inverse most likely goes complex. However, if we take the
average, we stay within limits. You may note that the denominator is
the Log of the GoldenRatio.

Function MaxFibonacci(n)
MaxFibonacci = Int(Log(n * Sqr(5)) / Log((1 + Sqr(5)) / 2))
End Function

Sub TestIt()
Debug.Print MaxFibonacci(6000000000#)
End Sub

Returns: 48

This is the correct answer to your question because...

Fibonacci(48)
4,807,526,976

is the upper limit, and the next one exceeds your input number.

Fibonacci(49)
7,778,742,049

- - -
HTH :>)
Dana DeLouis
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top