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で頑張るより簡単でした

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

 

 

【プロフィール】

カマキリ
(^^)

大学の専攻は物性理論で、Fortranを使って数値計算をしていました。
CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。

プロフィール記事はこちら

 

大学学部レベルの物理の解説をします 大学初学者で物理にお困りの方にわかりやすく解説します。

このブログでは主に大学以上の物理を勉強して記事にわかりやすくまとめていきます。

  • ・解析力学
  • ・流体力学
  • ・熱力学
  • ・量子統計
  • ・CAE解析(流体解析)
  • note
    noteで内容は主に「プログラミング言語」の勉強の進捗を日々書いています。また、「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。
  • youtube
    youtubeではオープンソースの流体解析、構造解析、1DCAEの操作方法などを動画にしています。
    (音声はありません_(._.)_)
  • Qiita
    Qiitaではプログラミング言語の基本的な内容をまとめています。