【发布时间】:2017-11-06 02:56:59
【问题描述】:
我正在尝试在 Python 中实现一维热方程的 FTCS 算法。
import numpy as np
L = 1 #Length of rod in x direction
k = 0.3 #Thermal conductivity of rod
tmax = 5 #how many seconds
nx = 100 #number of spacial steps
nt = 100; #number of time steps
xi = np.linspace(0,L,nx)
ti = np.linspace(0,tmax,nt)
dx = L/(nx-1)
dt = tmax/(nt-1)
r = k*dt/(dx)**2
r2 = 1-2*r
u=np.zeros((nt,nx))
#IC
phi = 100;
for x in range(0,nx):
u[0][x] = phi
#BC
for t in range(0,nt):
u[t][0] = 0;
u[t][nx-1] = 0
#FTCS Algorithm
for t in range(0,nt-1): #timestep
for x in range(1,nx-2):
u[t+1][x] = r*(u[t][x-1]+ u[t][x+1]) + r2*(u[t][x])
但是,考虑到我的初始条件为 100,我没有得到 u[t][x] = u(x,t) 的合理值。也就是说,它们爆炸并给了我像 '4.11052068e+221' 这样的愚蠢值我参与的一些糟糕的编程实践正在破坏算法?还是我刚刚错误地实现了算法?
编辑:我想我已经得出这是因为当且仅当 r
【问题讨论】: