NumPyを使用したPythonの熱方程式u_t = k * u_{xx}
を解く有限差分近似を実装しようとしています。ここでValueError:xとyの最初の次元が同じでなければなりません
は、私が実行しているコードのコピーです:
## This program is to implement a Finite Difference method approximation
## to solve the Heat Equation, u_t = k * u_xx,
## in 1D w/out sources & on a finite interval 0 < x < L. The PDE
## is subject to B.C: u(0,t) = u(L,t) = 0,
## and the I.C: u(x,0) = f(x).
import numpy as np
import matplotlib.pyplot as plt
# parameters
L = 1 # legnth of the rod
T = 10 # terminal time
N = 10
M = 100
s = 0.25
# uniform mesh
x_init = 0
x_end = L
dx = float(x_end - x_init)/N
x = np.arange(x_init, x_end, dx)
x[0] = x_init
# time discretization
t_init = 0
t_end = T
dt = float(t_end - t_init)/M
t = np.arange(t_init, t_end, dt)
t[0] = t_init
# Boundary Conditions
for m in xrange(0, M):
t[m] = m * dt
# Initial Conditions
for j in xrange(0, N):
x[j] = j * dx
# definition of solution u(x,t) to u_t = k * u_xx
u = np.zeros((N, M+1)) # array to store values of the solution
# Finite Difference Scheme:
u[:,0] = x**2 #initial condition
for m in xrange(0, M):
for j in xrange(1, N-1):
if j == 1:
u[j-1,m] = 0 # Boundary condition
elif j == N-1:
u[j+1,m] = 0
else:
u[j,m+1] = u[j,m] + s * (u[j+1,m] -
2 * u[j,m] + u[j-1,m])
print u, #t, x
plt.plot(u, t)
#plt.show()
私は自分のコードが正しく動作していると、それは出力を生成していると思います。私は答えu
とt
(私の時間ベクトル)の出力をプロットしたいと思います。グラフをプロットすることができれば、数値近似が熱方程式の予想される現象と一致するかどうかを確認することができます。しかし、私は、 "xとyは同じ第1次元を持たなければならない"というエラーを受けています。この問題を修正するにはどうすればよいですか?
その他の質問:matplotlib.plyplot
ではなく、matplotlib.animation
でアニメーションを作成する方がよいですか?
ありがとうございました。非常に感謝しています!
Pythonの問題では、完全なスタックトレースを表示することをお勧めします。さもなければ、人々はどの行のコードを推測し、どのような状況下でエラーが起こるか推測しなければなりません。 – John1024
エラーは、 'plt.plot(u、t)'行を実行したときにのみ表示されます。その行を削除するとコードが実行され、 'u'の値が出力されます。 – Javier
また、コンパイラはこれを生成します: 'x.shape [0]!= y.shape [0]:raise ValueError(" xとyは同じ第1次元を持たなければなりません ")' – Javier