努力で数論

僕が勉強した内容をまとめておきたくて作ってみました。

複素関数のグラフについて、様々な例

今まで作ってきた複素関数のプロット例をいくつか紹介したいと思います。一応、グラフのプロット関数をもう一度書いておきます。

複素関数のグラフを描く関数。

まず与えられた複素関数の絶対値付きの値を返す、3Dのグラフを描くプロット関数を下に記します。

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()

次にこの複素関数偏角ごとに2Dに描く関数と、絶対値付きの値をレベルカーブごとに2Dにプロットする関数を下に書いておきます。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from scipy.special import gamma

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()

いくつかの具体例。

例①

このプロット関数達を用いてまずガンマ関数を前回のようにプロットしてみる。ガンマ関数自体については一つ前のの記事を読んでみて下さい。(Gamma関数をお絵描き - 努力で数論

three_D_plot(gamma,picname="gamma3D.png")

するとグラフは以下のようになる。

f:id:okenta:20190731152732p:plain

plot_complex(gamma,"gamma_arg.png","gamma_abs.png")

するとグラフは以下のようになる。

f:id:okenta:20190731155324p:plain

f:id:okenta:20190731155340p:plain

例②

さて別の複素関数でトライしてみよう。

例2 任意の z \in \mathbb{C}に対して $$f(z) = z$$


def identity(z):
    return z

three_D_plot(identity,picname="identity3D.png")

するとグラフは以下のようになる。

f:id:okenta:20190731223106p:plain

plot_complex(identity,"identity_arg.png","identity_abs.png")

するとグラフは以下のようになる。

f:id:okenta:20190731223524p:plain

f:id:okenta:20190731223541p:plain

例③

次の例は逆数を返す関数。ちなみにこの関数は上の例2とは違って z=0で極を持つのでそこを除けば正則な関数となっている。こういったビジュアルの要素であるグラフを通じ、極の理解が深まるはずである。

例3  0以外の任意の z \in \mathbb{C}に対して $$f(z) = \frac{1}{z}$$


まず絶対値付きの場合は

def inverse(z):
    return 1/z

three_D_plot(inverse,picname="inverse3D.png")

f:id:okenta:20190731224055p:plain

となり、次に2Dの図は

plot_complex(inverse,"inverse_arg.png","inverse_abs.png")

f:id:okenta:20190731224227p:plain

f:id:okenta:20190731224245p:plain

となる。

例④

複素指数関数は次のように定義でき、任意の z \in \mathbb{C}に対して正則である。

例4 任意の z \in \mathbb{C}に対して $$f(z) = e^{z}$$


three_D_plot(np.exp,picname="exp3D.png")

f:id:okenta:20190731224617p:plain

plot_complex(np.exp,"exp_arg.png","exp_abs.png")

f:id:okenta:20190731224906p:plain

f:id:okenta:20190731224930p:plain

グラフは上のようになる。

例⑤

複素三角関数の一例として sin(z)のグラフを描く。これも任意の z \in \mathbb{C}に対して正則である。

例5 任意の z \in \mathbb{C}に対して $$f(z) = sin(z)$$


three_D_plot(np.sin,picname="sin3D.png")

するとグラフは以下のようになる。

f:id:okenta:20190731225240p:plain

plot_complex(np.sin,"sin_arg.png","sin_abs.png")

するとグラフは以下のようになる。

f:id:okenta:20190731225334p:plain

f:id:okenta:20190731225355p:plain