Python

Pythonで1次元熱伝導方程式のグラフのアニメーションが簡単にできた

こんにちは(@t_kun_kamakiri)(‘◇’)ゞ

前回の記事で1次元熱伝導方程式をFortranで解いて、1次元のグラフのアニメーションをgnuplotで作成するというのをしました。

前回の記事はこちら

↑この記事でのアニメーション結果はこちら。

gnuplotでのアニメーションはこんな感じ

 

Fortranは可視化ツールがないので仕方なくgnuplotのスクリプトを書いてグラフのアニメーションを作りました。

カマキリ

めんどうだった・・・

本記事の内容

今回は、1次元熱伝導方程式をPythonで解いてグラフのアニメーションまで作成したいと思います。
Pythonの初学者のための記事です。

※Pythonの動作にはJupyter Notebookを使用しています。

スポンサーリンク

Pythonの使用環境

Pythonの使用環境は色々あると思います。

以下に代表的なものを紹介しておきます。

①Pythonの本家をインストール

②AnacondaをインストールしてJupyter notebookを使用

③PycharmをインストールしてPythonを使用

④visual studioをインストールしてPythonを使用

 

カマキリ

僕はAnacondaをインストールしてJupyter notebookを使用したいと思います。

1次元熱伝導方程式を離散化して解く

解きたい方程式は、下記の記事でも詳しく解説しています。

前回の記事はこちら

 

Pythonで解きたい方程式は↓こちらです。

1次元熱伝導方程式
\begin{align*}\frac{\partial T}{\partial t}=\kappa\frac{\partial^2T}{\partial^2 x}\tag{1}\end{align*}
熱伝導方程式は、初期状態を与えれば(1)式に従って時間発展をする方程式です。
今回は初期状態を以下のようにしておきます。
(1)式を離散化しないと数値的に解けないので、離散化します。

ある地点\(x_{i}\)での時間微分の項

\begin{align*}\frac{\partial T}{\partial t}\simeq \frac{T^{n+1}(x_{i})-T^{n}(x_{i})}{\Delta t}\tag{2}\end{align*}
微分を差分に置き換えただけです。
数値計算では時間をステップ数で数えるため、時間変数の代わりにステップ\(n\)として文字の頭に添えています。
ある時間\(t\)での空間微分の項
\begin{align*}\kappa\frac{\partial^2T}{\partial^2 x}\simeq \kappa\frac{T^{n}(x_{i}+\Delta x)-2T^{n}(x_{i})-T^{n}(x_{i}-\Delta x)}{\Delta x^2}\tag{3}\end{align*}
これは空間に対して2次の精度となります。
\begin{align*}
T^{n+1}(x_{i})=T^{n}(x_{i})+\kappa dt\frac{T^{n}(x_{i}+\Delta x)-2T^{n}(x_{i})-T^{n}(x_{i}-\Delta x)}{\Delta x^2}
\tag{4}\end{align*}
では、これをPythonで解いて1次元のアニメーションを作成しましょう(^^)/

Pythonで解いて1次元のアニメーション

Pythonのコードを載せておきましょう。

プログラムの簡単な解説をしておきます。

 

【参考リンク】

Pythonのアニメーションの結果

上のPythonをJupyter notebookで動かすとこんな感じ。

  1. 20190514_212235 (2)


 

カマキリ

Fortranとgnuplotで頑張るより簡単でした

計算はすぐ終わるので、これくらいの軽い計算なら言語の違いは出なさそうです。

参考書

Pythonで学ぶ流体力学の数値計算法

Pythonで学ぶ流体力学の数値計算法

孝藏, 藤井, 智章, 立川
4,180円(01/31 10:23時点)
Amazonの情報を掲載しています
スッキリわかるPython入門 (スッキリわかる入門シリーズ)

スッキリわかるPython入門 (スッキリわかる入門シリーズ)

国本大悟, 須藤秋良
2,640円(01/31 15:39時点)
Amazonの情報を掲載しています
関連記事もどうぞ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です