Применение граничных условий в конечно-разностном решении для уравнения теплопроводности и Кранка-Николсона

Приведенный ниже код решает одномерное уравнение теплопроводности, которое представляет стержень, концы которого поддерживаются при нулевой температуре с начальным условием 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)
6
задан BBDynSys 30 January 2011 в 15:59
поделиться