🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

963閲覧

二次元の熱伝導が起きない

Haruki35

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/01/31 14:23

編集2021/01/31 15:19

ここに質問の内容を詳しく書いてください。
(例)二次元の熱伝導問題を解析しようとしたところ、以下のようにコードを入力しましたがアニメーションが動きません。原因のわかる方がいれば回答をお願いしたいです。

発生している問題・エラーメッセージ

該当のソースコード

Python

1import numpy as np 2import matplotlib.pyplot as plt 3import matplotlib.animation as animation 4from IPython.display import HTML 5 6def init_heat(a,b,T_0,T_i): 7 temp=np.zeros((a,b,t_max)) 8 temp[:,:,0]=(T_i)*np.ones((a,b)) 9 temp[int(a/2)-5:int(a/2)+6,int(b/2)-5:int(b/2)+6,:]=T_0 10 return temp 11 12h,a,b=1,300,300 13T_0=5000000 14T_i=-10 15tau,t_max=1,100 16rho=9.17e5 17C_p=2.1e3 18l=2.5e6 19k=2.2 20kappa=k/(C_p*rho) 21 22def scatter(T_n,r): 23 n=len(T_n[:,0]) 24 m=len(T_n[0,:]) 25 T_n1=np.zeros_like(T_n) 26 T_n1[1:n,1:m]=T_n[1:n,1:m]+r*(T_n[0:n-1,1:m]+T_n[2:n+1,1:m]+T_n[1:n,0:m-1]+T_n[1:n,2:m+1]) 27 return T_n1 28 29def calc(kappa): 30 temp=init_heat(a,b,T_0,T_i) 31 r=kappa*tau/(h**2) 32 print(r) 33 for t in range(t_max-1): 34 temp[:,:,t+1]=scatter(temp[:,:,t],r) 35 return temp 36 37def anime(temp): 38 fig=plt.figure() 39 imgs=[] 40 for t in range(t_max): 41 im0=plt.imshow(temp[:,:,t],animated=True,cmap='jet',vmin=T_i,vmax=T_0) 42 imgs.append([im0]) 43 ani=animation.ArtistAnimation(fig,imgs,interval=10) 44 plt.colorbar() 45 plt.close() 46 return ani 47 48temp=calc(kappa) 49ani=anime(temp) 50HTML(ani.to_jshtml()) 51 52

試したこと

T_n1の表式を以下のように書き換えましたがダメでした。np.rollに関しても同様です。

T_nN=np.vstack([T_n[1:n,:],T_n[n-1:n,:]])
T_nE=np.hstack([T_n[:,0:1],T_n[:,0:m-1]])
T_nW=np.hstack([T_n[:,1:m],T_n[:,m-1:m]])
T_nS=np.vstack([T_n[0:1,:],T_n[0:n-1,:]])
T_n1=T_n+r*(T_nN+T_nE+T_nW+T_nS-4*T_n)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/01/31 15:08

エラー発生箇所はどこでしょうか?エラーメッセージは抜粋ではなく全文掲載しないと回答者に分かりにくいです。
Haruki35

2021/01/31 15:16

ありがとうございます。 配列の問題は解決しましたので大丈夫です!要素数のずれでした T_n1[1:n-1,1:m-1]=T_n[1:n-1,1:m-1]+r*(T_n[0:n-2,1:m-1]+T_n[2:n,1:m-1]+T_n[1:n-1,0:m-2]+T_n[1:n-1,2:m]-4*T_n[1:n-1,1:m-1]) でなんとかなりました! 次回からは全文掲載するようにします。 しかし、依然としてアニメーションが動きません。可能であればそちらも確認してもらえると幸いです。
guest

回答1

0

※以下、理論は気にしないでコードの話だけしています。
質問欄のコードを動かしてみると、たしかにアニメーションが動いているように見えません。temp[:,:,t]を確認すると、初期値の10^-6くらいのところで数値が変化しています。
変化が小さすぎて見えないのかと思い、下記のように適当にrho, C_p, kをいじってみたところ、熱伝導のようなものが確認できました。

python3

1import numpy as np 2import matplotlib.pyplot as plt 3import matplotlib.animation as animation 4from IPython.display import HTML 5 6def init_heat(a,b,T_0,T_i): 7 temp=np.zeros((a,b,t_max)) 8 temp[:,:,0]=(T_i)*np.ones((a,b)) 9 temp[int(a/2)-5:int(a/2)+6,int(b/2)-5:int(b/2)+6,:]=T_0 10 return temp 11 12h,a,b=1,300,300 13T_0=5000000 14T_i=-10 15tau,t_max=1,100 16rho=9.17e1 # 小さくしました 17C_p=2.1e1 # 小さくしました 18l=2.5e6 19k=2.2*10 # 大きくしました 20kappa=k/(C_p*rho) 21 22def scatter(T_n,r): 23 n=len(T_n[:,0]) 24 m=len(T_n[0,:]) 25 T_n1=np.zeros_like(T_n) 26 T_n1[1:n-1,1:m-1]=T_n[1:n-1,1:m-1]+r*(T_n[0:n-2,1:m-1]+T_n[2:n,1:m-1]+T_n[1:n-1,0:m-2]+T_n[1:n-1,2:m]-4*T_n[1:n-1,1:m-1]) 27 return T_n1 28 29def calc(kappa): 30 temp=init_heat(a,b,T_0,T_i) 31 r=kappa*tau/(h**2) 32 print(r) 33 for t in range(t_max-1): 34 temp[:,:,t+1]=scatter(temp[:,:,t],r) 35 return temp 36 37def anime(temp): 38 fig=plt.figure() 39 imgs=[] 40 for t in range(t_max): 41 im0=plt.imshow(temp[:,:,t],animated=True,cmap='jet',vmin=T_i,vmax=T_0) 42 imgs.append([im0]) 43 ani=animation.ArtistAnimation(fig,imgs,interval=10) 44 plt.colorbar() 45 plt.close() 46 return ani 47 48temp=calc(kappa) 49ani=anime(temp) 50HTML(ani.to_jshtml())

投稿2021/02/03 00:24

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問