符号関数

符号関数

符号関数 (sign function)

 符号関数 (sign function) は変数 $x$ の符号に応じて、$-1,\ 0,\ 1$ のいずれかの値を返す関数として定義され、$\mathrm{sgn}(x),\ \mathrm{Sgn}\,x,\ \mathrm{sign}\,x$ などの記号で表されます。
 
\[\mathrm{sgn}x=\left\{\begin{matrix}
1\quad (x \gt 0)\\0\quad (x=0)\\
-1\quad (x \lt 0)\end{matrix}\right.\]
 符号関数をグラフに表すと次のようになります。

 Python 符号関数sgn(x), sign(x)のグラフ

 このグラフを描くコードは記事の後半に載せてあります。

 sgn は英語の sign の略ですが、正弦関数のサインと紛らわしいので、ラテン語の signum を使ってシグナム関数 (signam function) とよばれることもあります。

 符号関数はヘヴィサイドの階段関数 $\mathrm{H}_c(x)$ と
 
\[\mathrm{sgn}(x)=2\mathrm{H}_{1/2}(x)-1\]
という関係で結びついています。また、符号関数を微分するとデルタ関数となることが知られています。
 
\[\frac{d}{dx}\mathrm{sgn}x=2\delta(x)\]
 グラフからも明らかなように、上式は符号関数が原点で傾きが無限大となることを意味しています。原点以外の傾きは $0$ です。
 

複素変数の符号関数

 符号関数は
\[\mathrm{sgn}x=\left\{\begin{matrix}
\cfrac{x}{|x|}\quad (x \neq 0)\\
0\quad (x=0)\\
\end{matrix}\right.\]
と表すこともできます。複素変数 $z=x+iy$ の符号関数は、これをそのまま拡張して
 
\[\mathrm{sgn}z=\left\{\begin{matrix}
\cfrac{z}{|z|}\quad (z \neq 0)\\
0\quad (z=0)\\\end{matrix}\right.\]
と定義します。たとえば $z=2+i$ のとき、符号関数の値は
 
\[\mathrm{sgn}(2+i)=\frac{2+i}{\sqrt{5}}\]
というように、絶対値 $1$ の複素数へと変換されます。すなわち、$w=\mathrm{sgn}(z)$ とおくと、$z$ 平面上の点は符号関数によって $w$ 平面の単位円に移されることになります。
 

numpy.sign()

 NumPy には符号関数 numpy.sign() が実装されています。

# NUMPY_SIGN_01

import numpy as np

x = np.array([0, 10, -10])

print(np.sign(x))
[0 1 -1]

 
 numpy.sign() を使って冒頭に掲載した符号関数のグラフを描いてみましょう。

# NUMPY_SIGN_02

# モジュールをインポート
import numpy as np
import matplotlib.pyplot as plt

# フィギュアを設定
fig = plt.figure()

# グラフ描画領域を追加
ax = fig.add_subplot(111)

# グリッド線を表示
ax.grid(linestyle = "--")

# グラフタイトルを設定
ax.set_title("Sign Function", fontsize = 16)

# x軸とy軸のラベルを設定
ax.set_xlabel("x", fontsize = 16)
ax.set_ylabel("y", fontsize = 16)

# 区間[-5,5]を64分割
x = np.linspace(-5, 5, 65)

# データxの各要素について符合関数y=sgn(x)を計算
y = np.sign(x)

# 符号関数のグラフをプロット
ax.plot(x, y, color = "darkblue")

 Python 符号関数sgn(x), sign(x)のグラフ