数学とPythonのメモ帳

僕のメモ帳です。同じ疑問を感じた方の参考になれば良いです。

matplotlibで陰関数のグラフを描画してみた

陰関数とは、 f(x, y) = 0というものです。

Pythonのmatplotlibを使って、 \boldsymbol{L_\inftyノルム}を、陰関数に直して図示してみました。

まずは  \boldsymbol{L_pノルム}の定義から。

 \boldsymbol{R}ⁿ の元  x = (x_1, x_2, \ldots, x_n) に対して、その \boldsymbol{Lpノルム} \|x\|_p
\begin{align}
\|x\|_p = \sqrt[p]{|x_1|^p + |x_2|^p + \cdots + |x_n|^p}
\end{align}と定義する。

さて、定義から

\begin{align}
\|x\|_1 = |x_1| + |x_2| + \cdots + |x_n|
\end{align}

\begin{align}
\|x\|_2 = \sqrt{|x_1|² + |x_2|² + \cdots + |x_n|²}
\end{align}

ですね。

 x = (x_1, x_2), \|x\|_p = 1とし、 p = 1, 2, \infty(200)の場合で図示してみましょう。

この場合、

import matplotlib.pyplot as plt
import numpy as np

#Lpノルムの p
p = 200

x1range = np.arange(-2, 2, 0.025)
x2range = np.arange(-2, 2, 0.025)
X1, X2 = np.meshgrid(x1range, x2range)

plt.axis([-2, 2, -2, 2])
plt.gca().set_aspect('equal', adjustable='box')

Z = abs(X1)**p + abs(X2)**p - 1
plt.contour(X1, X2, Z, [0])
plt.show()

f:id:keitainoue157:20180905035617j:plain
 L_1ノルム
f:id:keitainoue157:20180905035754j:plain
 L_2ノルム
f:id:keitainoue157:20180905040030j:plain
 L_{200}ノルム

 p = 200 で、正方形っぽくなりましたね。

実は、 p \to \inftyで完全な正方形になります。

\begin{align}
\|x\|_\infty = max \left\{|x_1|, |x_2|, \cdots \right\}
\end{align}

 \|x\|_\infty = 1 の時、
 |x_i| < 0 なら、  |x_i|^\infty = 0
 |x_i| > 0 なら、  |x_i|^\infty = \infty
となるため、
\begin{align}
\|x\|_\infty = 1 \longrightarrow |x_i| \leq 1 (i = 1, 2, \cdots, n)
\end{align}
となり、このようなグラフになるわけですね。

ではまた。