我编写了一个用有限差分法数值求解热方程(u_t = k * u_xx
)的程序。
对于我的问题,u
是x
和t
的函数,0 < x < L
和t > 0
。我已经为我的问题指定了L = 1
(棒的长度)和终止时间T = 10
秒,因此我希望图表显示在域(x,t) \in {(0,1) x (0, 10)}
上。但是,我的斧头没有意义。它是从0 - 40
的值绘制x轴,而t轴显示-0.25 - 0.00
。
如何编辑我的代码,以便在我根据u
绘制x, t
时,图表将显示x
的值0 - 1
和{{1}范围从t
秒??
提前感谢您提供任何帮助。非常感谢。这是我正在使用的代码:
0 - 10
似乎x轴的任何显示都反映了我对代码所采用的空间步长数( ## 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 # length of the rod
T = 10 # terminal time
N = 40 # spatial values
M = 1600 # time values/hops; (M ~ N^2)
s = 0.25 # s := k * ( (dt) / (dx)^2 )
# 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
# time-vector
for m in xrange(0, M):
t[m] = m * dt
# spatial-vector
for j in xrange(0, N):
x[j] = j * dx
# definition of the 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 * (x - 1) #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 # Boundary Condition
else:
u[j,m+1] = u[j,m] + s * ( u[j+1,m] -
2 * u[j,m] + u[j-1,m] )
# for graph
print u, x, t
plt.plot(u)
plt.title('Finite Difference Approx. to Heat Equation')
plt.xlabel('x-axis')
plt.ylabel('time (seconds)')
plt.axis()
plt.show()
)。我认为N = 40
会在步长np.arange(x_init, x_end, dx)
的{{1}}区间内返回均匀间隔的值?那么我做错了什么?再次感谢。