2016-07-08 20 views
0

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() 

私は自分のコードが正しく動作していると、それは出力を生成していると思います。私は答えut(私の時間ベクトル)の出力をプロットしたいと思います。グラフをプロットすることができれば、数値近似が熱方程式の予想される現象と一致するかどうかを確認することができます。しかし、私は、 "xとyは同じ第1次元を持たなければならない"というエラーを受けています。この問題を修正するにはどうすればよいですか?

その他の質問:matplotlib.plyplotではなく、matplotlib.animationでアニメーションを作成する方がよいですか?

ありがとうございました。非常に感謝しています!

+1

Pythonの問題では、完全なスタックトレースを表示することをお勧めします。さもなければ、人々はどの行のコードを推測し、どのような状況下でエラーが起こるか推測しなければなりません。 – John1024

+0

エラーは、 'plt.plot(u、t)'行を実行したときにのみ表示されます。その行を削除するとコードが実行され、 'u'の値が出力されます。 – Javier

+0

また、コンパイラはこれを生成します: 'x.shape [0]!= y.shape [0]:raise ValueError(" xとyは同じ第1次元を持たなければなりません ")' – Javier

答えて

0

わかりましたので、私は「脳ダンプ」を持っていたとuことを忘れるutソートをプロットしようとした、熱方程式(u_t = k * u_{xx})の解であること、それは時間の値を持っているu(x,t)として定義されます。

print u #t, x 
plt.plot(u) 
plt.show() 

私のプログラミングでは最終的に画像が表示されています。ここにあります:

enter image description here これは絶対に美しいですね。

関連する問題