下面的代码求解一维热方程,该方程表示一根杆,其末端保持在零温度,初始条件为 10*np.sin(np.pi*x)。
狄利克雷边界条件(两端温度为零)如何用于此计算?有人告诉我,矩阵 A 的上下两行包含两个非零元素,而缺少的第三个元素是狄利克雷条件。但我不明白这种情况通过哪种机制影响计算。缺少 A 中的元素,u_{0} 或 u_{n} 怎么可能为零?
下面的有限差分法使用 Crank-Nicholson。
import numpy as np
import scipy.linalg
# Number of internal points
N = 200
# Calculate Spatial Step-Size
h = 1/(N+1.0)
k = h/2
x = np.linspace(0,1,N+2)
x = x[1:-1] # get rid of the '0' and '1' at each end
# Initial Conditions
u = np.transpose(np.mat(10*np.sin(np.pi*x)))
# second derivative matrix
I2 = -2*np.eye(N)
E = np.diag(np.ones((N-1)), k=1)
D2 = (I2 + E + E.T)/(h**2)
I = np.eye(N)
TFinal = 1
NumOfTimeSteps = int(TFinal/k)
for i in range(NumOfTimeSteps):
# Solve the System: (I - k/2*D2) u_new = (I + k/2*D2)*u_old
A = (I - k/2*D2)
b = np.dot((I + k/2*D2), u)
u = scipy.linalg.solve(A, b)