2016年8月13日土曜日

開発環境

Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の2章(データをグラフで可視化する)、2.6(プログラミングチャレンジ)、問題2-5(フィボナッチ数列と黄金比の関係を調べる)を取り組んでみる。

問題2-5(フィボナッチ数列と黄金比の関係を調べる)

コード(Emacs)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt


def fibo(n):
    if n == 1:
        return [1]
    if n == 2:
        return [1]
    a = 1
    b = 1
    series = [a, b]
    for i in range(n):
        c = a + b
        series.append(c)
        a = b
        b = c

    return series


def draw_graph(n):
    nums = range(n)
    series = fibo(n + 1)
    ratios = [series[i + 1] / series[i] for i in range(n)]
    for ratio in ratios:
        print(ratio)
    plt.plot(nums, ratios)
    plt.axis(xmin=0, xmax=100, ymin=1, ymax=2.2)
    # 隣り合うフィボナッチ数のひ
    title = 'Ratio between consecutive Fibonacci numbers'
    plt.title('Ratio between consecutive Fibonacci numbers')
    # 数
    plt.xlabel('No.')
    # 比
    plt.ylabel('Ratio')
    plt.savefig(title.replace(' ', '_') + '.png')
    plt.show()

if __name__ == '__main__':
    n = 100
    draw_graph(n)

入出力結果(Terminal, IPython)

$ ./fibonacci.py 
1.0
2.0
1.5
1.6666666666666667
1.6
1.625
1.6153846153846154
1.619047619047619
1.6176470588235294
1.6181818181818182
1.6179775280898876
1.6180555555555556
1.6180257510729614
1.6180371352785146
1.618032786885246
1.618034447821682
1.6180338134001253
1.618034055727554
1.6180339631667064
1.6180339985218033
1.618033985017358
1.6180339901755971
1.618033988205325
1.618033988957902
1.6180339886704431
1.6180339887802426
1.618033988738303
1.6180339887543225
1.6180339887482036
1.6180339887505408
1.6180339887496482
1.618033988749989
1.618033988749859
1.6180339887499087
1.6180339887498896
1.618033988749897
1.618033988749894
1.6180339887498951
1.6180339887498947
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
1.618033988749895
$

0 コメント:

コメントを投稿