Here's something mathematical from the Poly list [1], adapting
something by David Koski.

The code shows how one might use a program to express a
cool relationship, without offering a proof.

The unit-test shows use raising PHI from the -6 to the 29th
power and finding an equivalent expression built solely from
three consecutive Fibonacci numbers and the sqrt(5).

Something like:

LOOP:
   PHI ** E = (FIB[N] + FIB[N-2] + FIB[N-1]*RT5) / 2
   E += 1
   N += 1

Start with:

E = -6

FIB[N-2] = 13
FIB[N-1] = -8
FIB[N]    =  5

in . . . 13, -8, 5, -3, 2, -1,1, 0, 1, 2, 3, 5, 8,13 . . .

===


"""
Encapsulating a discovery -- not a proof.
By David Koski (Python by K. Urner)

Failure at around 37th power is due to floating point limitations.
"""

import unittest

def fibonacci(a=0, b=1):
    while True:
        yield a
        a, b = b, a + b


series1 = fibonacci(5, -3)  # 5, -3, 2, -1, 1, 0 , 1, 2, 3, 5, 8
series2 = fibonacci(-8, 5)  # -8, 5, -3, 2, -1, 1, 0 , 1, 2, 3, 5, 8
series3 = fibonacci(13,-8)  # 13, -8, 5, -3, 2, -1, 1, 0 , 1, 2, 3, 5, 8

RT5 = pow(5, .5)   # "square root" of five
PHI = (1 + RT5)/2  # golden proportion

def cool_formula():
    """
    Two fib numbers, two apart, plus the one in the middle * sqrt(5)
    all over 2, gives PHI to a power.  Advancing all three sequences
    gives successive powers.
    """
    while True:
        yield (next(series1) + next(series3) + next(series2) * RT5)/2.0

class TestPhi(unittest.TestCase):

    def test_loop(self):
        gem = cool_formula()
        for e in range(-6, 30):  # adjust range (fails about 37th power)
            answer = next( gem )
            self.assertAlmostEqual( PHI ** e, answer)

if __name__ == "__main__":
    unittest.main()

[1]  Polyhedron mailing list
Contributions to
mailto:polyhed...@lists.mathconsult.ch<polyhed...@lists.mathconsult.ch>
Admin:   http://lists.mathconsult.ch/mailman/listinfo/polyhedron
Archive: http://lists.mathconsult.ch/mailman/private/polyhedron/
_______________________________________________
Edu-sig mailing list
Edu-sig@python.org
https://mail.python.org/mailman/listinfo/edu-sig

Reply via email to