如何修改图表以显示轴的正确信息?

时间:2016-07-12 00:58:32

标签: python matplotlib plot

我编写了一个用有限差分法数值求解热方程(u_t = k * u_xx)的程序。

对于我的问题,uxt的函数,0 < x < Lt > 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}}区间内返回均匀间隔的值?那么我做错了什么?再次感谢。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题,因为您的结果是40x1601而不是40x1600。但是,我认为你可能追求的情节(在纠正你之后)是

corrected_u = u[:,:-1:]
plt.pcolor(t, x, corrected_u)

enter image description here