Приведенный ниже код решает одномерное уравнение теплопроводности, которое представляет стержень, концы которого поддерживаются при нулевой температуре с начальным условием 10 * np.sin (np.pi * x).
Как граничные условия Дирихле (нулевая температура на обоих концах) включены в этот расчет? Мне сказали, что верхняя и нижняя строки матрицы A содержат два ненулевых элемента, а отсутствующий третий элемент равен условие Дирихле. Но я не понимаю, с помощью какого механизма это условие влияет на расчет. При отсутствии элементов в A, как u_ {0} или u_ {n} могут быть равны нулю?
В методе конечных разностей ниже используется метод Кранка-Николсона.
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)