
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:polyhedron@lists.mathconsult.ch<polyhedron@lists.mathconsult.ch> Admin: http://lists.mathconsult.ch/mailman/listinfo/polyhedron Archive: http://lists.mathconsult.ch/mailman/private/polyhedron/

""" Another version, using a generator of Fibonacci "triples"... 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 fib_triple(a=0, b=1): """ >>> from anyproject import fib_triple >>> gem = fib_triple() >>> next(gem) (0, 1, 1) >>> next(gem) (1, 1, 2) >>> next(gem) (1, 2, 3) >>> next(gem) (2, 3, 5) >>> next(gem) (3, 5, 8) >>> gem = fib_triple(13,-8) >>> next(gem) (13, -8, 5) >>> next(gem) (-8, 5, -3) >>> next(gem) (5, -3, 2) >>> next(gem) (-3, 2, -1) >>> next(gem) (2, -1, 1) >>> next(gem) (-1, 1, 0) """ c = a + b while True: yield a, b, a + b a, b, c = b, a + b, b + c series = fib_triple(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: f0, f1, f2 = next(series) yield (f0 + f2 + f1 * 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()
participants (1)
-
kirby urner