Я пытаюсь реализовать конечно-разностную аппроксимацию для решения уравнения тепла, u_t = k * u_{xx}
, в Python с использованием NumPy.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 должны иметь одно и то же первое измерение». Как я могу исправить эту проблему?
Дополнительный вопрос: мне лучше сделать анимацию с matplotlib.animation
вместо matplotlib.plyplot
???
Большое спасибо за любую помощь! Это очень ценится!
С проблемами python, как правило, неплохо показать полную трассировку стека. В противном случае люди должны вывести/угадать, какая строка кода и при каких обстоятельствах происходит ошибка. – John1024
Ошибка возникает только при запуске строки 'plt.plot (u, t)'. Если я удалю эту строку, тогда код выполнит и напечатает значение для 'u'. – Javier
Также компилятор производит это: 'if x.shape [0]! = Y.shape [0]: raise ValueError (« x и y должны иметь такое же первое измерение »)' – Javier