Fibonacci数列についての考察
複素関数と解析接続を学ぶ中で以下の動画を見て、pythonを使ってもタマキさんが動画内で描いていた図と似たようなものを描けそうだなと思ったので、今回はそれをトライしてみました。まずは以下の動画を見て頂けると内容が分かるかと思います。
Fibonacci数列とは。
このとき上の漸化式はに対して、以下の関係式を満たす。
Fibonacci数列を係数に持つ級数と解析接続
この級数は次の収束半径を持つ。
この時、この収束半径内で級数は収束することが言えます。さて、他方
なので
を満たす。はを除く任意の点で正則で、先の級数表示の解析接続したものとなっています。
pythonでグラフを作る
さて、この関数の実部と虚部を複素平面上からの写像で3Dのグラフに表す。これはミックスされた形でタマキさんの動画でも流れているものかと思います。
import numpy as np import matplotlib.pyplot as plt %matplotlib inline from mpmath import * from mpl_toolkits.mplot3d import Axes3D def three_D_plots(func,picname): x, y = np.meshgrid(np.linspace( -5, 5, 500), np.linspace( -5, 5, 500)) z = x + y*1j w = func(z) fig1 = plt.figure() ax = Axes3D(fig1) ax.plot_surface(x, y, w.real, color="blue") ax.set_zlim3d(0, 15.) ax.autoscale(False) plt.axis([-6., 6., -6., 6.]) plt.title("real_part") fig2 = plt.figure() ax = Axes3D(fig2) ax.plot_surface(x, y, w.imag, color="orange") ax.set_zlim3d(0, 15.) ax.autoscale(False) plt.axis([-6., 6., -6., 6.]) plt.title("imag_part") plt.savefig(picname) plt.show()
def fibonacci(s): return 1/(1-s-s**2) three_D_plots(fibonacci,"fibonacci_real.png","fibonacci_img.png")
さて、今までやってきた通りこれを今度は絶対値付きのグラフにしたり、2Dの図を作ったりすると
import numpy as np import matplotlib.pyplot as plt %matplotlib inline from mpl_toolkits.mplot3d import Axes3D from scipy.special import gamma def three_D_plot(func,picname): x, y = np.meshgrid(np.linspace( -5, 5, 500), np.linspace( -5, 5, 500)) z = x + y*1j w = func(z) fig = plt.figure() ax = Axes3D(fig) ax.plot_surface(x, y, np.abs(w)) ax.set_zlim3d(0, 15.) ax.autoscale(False) plt.axis([-6., 6., -6., 6.]) plt.savefig(picname) plt.show() def plot_complex(complex_func,picname1,picname2): x, y = np.meshgrid(np.linspace(-4, 4, 400), np.linspace(-4, 4, 400)) z = x + y*1j angles = (np.angle(complex_func(z)) + 2*np.pi) % (2*np.pi) plt.figure(figsize=(6,5)) im_1 = plt.pcolor(x, y, angles, cmap="hsv", vmin=0, vmax=6) plt.colorbar(im_1) plt.title('argument') plt.savefig(picname1) plt.figure(figsize=(6,5)) im_2 = plt.pcolor(x, y, np.abs(complex_func(z)), vmin=0, vmax=4) plt.title('absolute value') plt.colorbar(im_2) plt.savefig(picname2) plt.show() three_D_plot(fibonacci,"fibonacci3D.png") plot_complex(fibonacci,"fibonacci_arg.png","fibonacci_abs.png")
のようになります。タマキさんの今回の動画の面白いところはサムネにもある式がどういう意味をもつのかということだと思うので解析接続についてや無限級数の収束半径などは飛ばしてもとても楽しめます!その他Riemann Zeta関数についても似た内容の動画がアップされているかと思うので、ぜひ興味のある方はそちらもチェックなさってみてはいかがでしょう。