Pythonを用いた複素関数の可視化
複素関数の可視化を行うためのコードをPythonで書いた.
コードを動かすと以下の図が得られる.
# coding: utf-8
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
from numpy import arcsin, array, cos, exp, imag, linspace, pi, real, sin
def generate_cmap(colors):
"""
カラーマップを作るための関数
https://qiita.com/kenmatsu4/items/fe8a2f1c34c8d5676df8より引用
"""
values = range(len(colors))
vmax = np.ceil(np.max(values))
color_list = []
for v, c in zip(values, colors):
color_list.append((v / vmax, c))
return LinearSegmentedColormap.from_list('custom_cmap', color_list)
# 色の設定
dark = generate_cmap(["#580145", "#543100", "#525700", "#004229", "#110057",])
middle = generate_cmap(["#e42689", "#f98b24", "#d6da21", "#16da9e", "#5558ff",])
light = generate_cmap(["#f79bcb", "#f4d3b4", "#e8e9ad", "#aaf5de", "#bbbcf0",])
# 複素数とその関数値が入ったリストを用意
im = 1.j
N = 30
R = linspace(-pi/2, pi/2, N)
I = linspace(pi/2, -pi/2, N)
v = linspace(0,1,N)
Z = array([[r+i*im for r in R] for i in I])
F = sin(Z)
G = arcsin(Z)
# プロット
Results = [Z, F, Z, G]
Titles = [
"$z$", "$f(z)=\sin(z)$", "$w$", "$f^{-1}(w)=\mathrm{arcsin}(w)$"
]
fig, ax = plt.subplots(2, 2, figsize=(8, 8))
for i in range(2):
for j in range(2):
n = 2*i+j
for k in range(N):
cm = generate_cmap([dark(v[k]), middle(v[k]), light(v[k])])
ax[i][j].scatter(real(Results[n][k]), imag(Results[n][k]), c=v, cmap=cm)
for r in [pi/4,pi/2,pi/8]:
z = r*exp(linspace(0,2*pi,100)*im)
ax[0][0].scatter(real(z), imag(z), s=1.5, c="k")
ax[0][1].scatter(real(sin(z)), imag(sin(z)), s=1.5, c="k")
ax[1][0].scatter(real(z), imag(z), s=1.5, c="k")
ax[1][1].scatter(real(arcsin(z)), imag(arcsin(z)), s=1.5, c="k")
for i in range(2):
for j in range(2):
n = 2*i+j
ax[i][j].set_title(Titles[n])
ax[i][j].set_aspect(1)
fig.tight_layout()
plt.show()
参考

コメント
コメントを投稿