前提・実現したいこと
pythonで初期値境界値問題を差分法で解くシステムを作っています。
区間 (0,1) 上で、拡散方程式 ∂u/∂t = D*(∂^2)*u/∂x^2 について,
境界条件はノイマン条件で初期値は u(x,t) = x 。
初期値境界値問題を D = 1.0 として差分法によって解、t = 0 や t = 0.1 など様々な時刻tにおける解 u(x,t) のグラフを描きたいです。
該当のソースコード
import matplotlib.pyplot as plt import numpy as np T = 1.0 M = 60000 L = 1.0 N = 100 D = 1.0 h = L/N τ = T/M α = D*τ/(h**2) x = np.zeros(N+2) u = np.zeros(N+2) new_u = np.zeros(N+2) for j in range(1,N,1): x[j] = (j - 0.5)*h u[j] = x[j] u[0] = u[1] u[N+1] = u[N] fig = plt.figure(figsize=(10,8)) ax = fig.add_subplot(111) lines, = ax.plot(x[1:N+1], u[1:N+1]) for k in range(0,M-1, 1): for j in range(1,N,1): new_u[j] = α*u[j-1] + (1 - 2*α)*u[j] + α*u[j+1] for j in range(1,N,1): u[j] = new_u[j] #境界条件 u[0] = u[1] u[N+1] = u[N] lines.set_data(x[1:N],u[1:N]) plt.pause(τ) plt.show()
このように、アニメーションとして描くシステムは作ることができました。
この内容を少し変えたら t を指定してグラフが描けると思うのですが、その方法がわかりません。
何日いろいろ試しても全然分からなかったため質問させていただきました。よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
anacondaのspyderで作業しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/14 04:29
2020/06/14 04:38
2020/06/14 05:16
2020/06/14 05:31
2020/06/14 05:37