[matplotlib animation] 101.1D拡散方程式による熱拡散アニメーション

matplotlib

はじめに

1次元の拡散方程式により、熱が拡散する様子をmatplotlibのFuncAnimationで表示する方法について説明する。

解説

モジュールのインポート

バージョン

定数の設定

1次元の棒における拡散方程式の解は以下のようになる。
ここで、Hはx=0に印加する熱エネルギーで、Cpは比熱容量で、Aは棒の断面積となる。Dは熱拡散率で、xは棒の位置、tは時間である。

\[\theta(x,t) = \frac{H}{c_pA}\frac{1}{\sqrt{Dt}}\frac{1}{\sqrt{4\pi}}\exp\left(-\frac{x^2}{4Dt}\right)\]

これらの定数を以下のように定義する。

棒の長さの設定

棒は-0.05 m から0.05 mの範囲を表示する。

時間の設定

とりあえずとして、(0.001, 0.01, 0.1)の時間のおける温度の分布を可視化する。

結果の表示

銅とステンレスの各時間における温度の分布を示すと以下のようになる。
sharex=True,sharey=Trueにより、x軸、y軸の表示範囲を統一している。

Cuの熱拡散アニメーション

データの生成

np.logspace(-3,0,200) で時間をlogscaleな配列で設定して、この各時間における解を取得し、リストに加える。

アニメーション関数の設定

cu, = ax.plot(x*100, thetas[0], 'C1-') でプロットを作成し、cu.set_ydata(thetas[num])により、yデータを更新していくことでアニメーションとする。

アニメーションの表示

CuとSUSの熱拡散アニメーション

CuとSUSの結果を同時に表示すると以下のようになる。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

拡散方程式 - Wikipedia
ページが見つかりませんでした – Muroz
The one-dimensional diffusion equation
Consider a metal bar of cross-sectional area, $A$, initially at a uniform temperature, $\theta_0$, which is heated insta...

コメント