フィボナッチ数列(Fibonacci sequence)は、イタリアの数学者レオナルド・フィボナッチの名前に因んだ有名な数列であり、次の漸化式で定義されます。
$$ \begin{gathered} F_1=1,\\ F_2=1,\\ F_n=F_{n-2}+F_{n-1}\quad (n\geq 3) \end{gathered} $$(※初項を $0$ にする場合もあります。)
フィボナッチ数列を実際に書き下すと、次の通りです。
$$ 1,1,2,3,5,8,13,21,34,55,\ldots $$フィボナッチ数列の第1項から第20項までを要素に持つリストを作成し、そのグラフを描画してください。
#演習1のコード
import matplotlib.pyplot as plt
N = 20 #最後の項の番号
F_list = [1,1] #フィボナッチ数列のリスト
#ここで、for文を使ってF_listに要素を追加する
#Pythonでリストの要素の番号は0から始まることに注意(現状ではF_list[0]とF_list[1]を作成済み)
n_list = range(1,N+1)
#ここで、n_listとF_listを使ってグラフを描画する
def my_sum(num_list): #リストの要素の和を計算する関数
result = 0
for n in num_list:
result = result+n
return result
def my_average(num_list): #リストの要素の平均を計算する関数
result = my_sum(num_list)/len(num_list) #上で定義した関数my_sumを呼び出す
return result
print(my_average([1,2,3,4,5,6]))
3.5
関数定義の中では、自分自身を呼び出して利用することもできます。これを関数の再帰的定義(recursive definition)と呼びます。
例えば、
$$ \begin{gathered} 1!=1,\\ n!=n\times(n-1)!\quad (n\geq 2) \end{gathered} $$を用いることで、自然数 $n$ に対して階乗 $n!$ を返す関数factorial
を次のように定義することができます。
def factorial(n):
if n == 1: #関数をwell-definedにするために重要な意味を持つ
return 1
else:
return n*factorial(n-1) #n-1に対して自分自身を呼び出す
print(factorial(5))
120
関数の再帰的定義によって、自然数 $n$ に対してフィボナッチ数列の第 $n$ 項を返す関数fibonacci
を定義してください。定義した関数を呼び出す例も付けてください。
#演習2のコード
def fibonacci(n):
#ここに、関数の処理を書く
pass #passはエラーを防ぐための「何もしない文」なので、消す
#関数を呼び出す例を付ける
黄金比(golden ratio)は、「人間が最も美しく感じる」と考えられている比率であり、
$$ 1:\frac{1+\sqrt{5}}{2} $$あるいは、ここに現れる数
$$ \varphi=\frac{1+\sqrt{5}}{2}=1.618\cdots $$のことです($\varphi$ を黄金数と呼ぶ場合もあります)。
フィボナッチ数列と黄金比の間には、深い関係があります。
その関係を示す一つの性質として、次の式が成り立つことが知られています。
$$ \lim_{n\to\infty}\frac{F_{n+1}}{F_n}=\varphi $$次の式で定まる数列 $\{Q_n\}$ に対して第1項から第19項までを用いてグラフを描画することによって、上記の性質を確認してください。
$$ Q_n=\frac{F_{n+1}}{F_n} $$#演習3のコード
#演習1で作成したF_listを利用するとよい
フィボナッチ数列に関する上記以外の性質をインターネット等で一つ調べ、プログラミングによってその性質を確認してください。
(調べた性質の内容をMarkdownとして書く)
#演習4のコード
演習1~演習4に取り組んでください。