4/14/2020, 1:12:52 PM - 363 days ago
大学の授業で知ったのだが、有用だと思ったのでメモ。
これは、非線形方程式 について, (横軸) と (縦軸) の関係をプロットしたもの。以下のようなコードを書けばよい。
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
Y, X = np.mgrid[-5:5:100j, -2*np.pi:2*np.pi:100j]
U = Y
V = - np.sin(X)
strm=plt.streamplot( X, Y, U, V, color=np.sqrt(U*U+V*V), linewidth=2, cmap='jet')
cbar=plt.colorbar(strm.lines)
plt.xlabel('X')
plt.ylabel('Y')
cbar.set_label('speed', rotation=270)
plt.show()
まず、
Y, X = np.mgrid[-5:5:100j, -2*np.pi:2*np.pi:100j]
において、np.mgrid
は格子点を作る関数。この場合 X
については から の範囲で、Y
については から の範囲で、 個 個の格子点を作るということ。
次に、
strm=plt.streamplot( X, Y, U, V, color=np.sqrt(U*U+V*V), linewidth=2, cmap='jet')
となっているが、このように、plt.streamplot
では X, Y, U, V
の順に引数を渡す。U, V
はそれぞれ X, Y
の速度となっているべきもので、今回は と新たに記号をおけば、方程式を
と書き直せるので、コードにある通りになる。そして、color=np.sqrt(U*U+V*V)
と指定していることから、ベクトルの速さに応じて色を変える仕組みになっている。
また、linewidth
というオプションで線の幅を調節したり、cmap
というオプションで配色を変更したりできる。詳しくは
を参考のこと。
さらに、
cbar=plt.colorbar(strm.lines)
で、ベクトルの速さと色の関係を示したカラーバーも描画してくれるので、便利。
試しにもう一つ例を試してみる。
について、 と の関係をプロットしてみる。
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
Y, X = np.mgrid[-8:8:100j, 0:20:100j]
U = np.ones((100,100))
V = - Y + np.sin(X)
strm=plt.streamplot( X, Y, U, V, color=np.sqrt(U*U+V*V), linewidth=2, cmap='jet' )
cbar=plt.colorbar(strm.lines)
plt.xlabel('X = t')
plt.ylabel('Y = x')
cbar.set_label('speed', rotation=270)
plt.show()
真ん中に周期解のようなものが見えるが、(計算が間違っていなければ) 解析解 に相当するものだと思う。