下面的代码解决了一维热方程,该方程表示一根杆,其末端保持在零温度,初始条件为10*np.sin(np.pi*x)。
Dirichlet边界条件(两端温度为零)是如何计算的?我被告知矩阵A的上下两行包含两个非零元素,而缺少的第三个元素是的Dirichlet条件。但我不知道这个条件是通过什么机制影响计算的。如果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)
目前没有回答
相关问题 更多 >
编程相关推荐