matplotlibで3Dなグラフを描く

matplotlibでグラフを描いてみました
f:id:TKYMa:20161023225756p:plain

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')


X = Y=  np.linspace(-20,20, num=50)
X,Y = np.meshgrid(X, Y)
R = np.sqrt(X*X + Y*Y)
Z = np.sin(R)/R
ax.plot_surface(X, Y, Z, rstride=1, cstride=1)
plt.show()

最初3行は必要なライブラリの読み込み
次2行でグラフの用意をしている

np.linespace(-20, 20, num=50)

で -20 から 20 までを50分割した配列XとYを作る。つまり中身は[-20, -19.18, -18.36, …, 19.18, 20]
これはただの1×50の行列なので50×50の行列を次の行でつくる

X,Y = np.meshgrid(X, Y)

つまりXはこうなった
{ \displaystyle
X = 
\begin{pmatrix}
x_1 &x_2 &... &x_{50}
\end{pmatrix}
}
から
{ \displaystyle
X = 
\begin{pmatrix}
x_1 &x_2 &... &x_{50}\\
x_1 &x_2 &... &x_{50}\\
x_1 &x_2 &... &x_{50}\\
. \\
.\\
.\\
x_1 &x_2 &... &x_{50}\\
\end{pmatrix}
}
となった.Yについても同じようになった
XとYの距離の行列Zをもとめ、それをもとにsinc関数のZをだした。X*Xは行列の掛け算ではなく、各要素同士を掛けただけ。
つまりZも50×50の行列で、次の2行でプロットして表示している。

なんか普通にコレ見たほうがわかりやすい
jp.mathworks.com