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

Приведенный ниже код решает уравнение 1D теплоты, которое представляет стержень, концы которого имеют нулевую температуру с начальным условием 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)

Ответы [ 2 ]

5 голосов
/ 30 января 2011

Давайте посмотрим на простой пример.Мы предполагаем N = 3, то есть три внутренние точки, но сначала мы также включим граничные точки в матрицу D2, описывающую приблизительные вторые производные:

      1  /  1 -2  1  0  0 \
D2 = --- |  0  1 -2  1  0 |
     h^2 \  0  0  1 -2  1 /

Первая строка означает приблизительную вторую производную вx_1 - это 1/h^2 * (u_0 - 2*u_1 + u_2).Однако мы знаем, что u_0 = 0 из-за однородных граничных условий Дирихле, поэтому мы можем просто опустить его из уравнения, и мы получим тот же результат для матрицы

      1  /  0 -2  1  0  0 \
D2 = --- |  0  1 -2  1  0 |
     h^2 \  0  0  1 -2  0 /

, поскольку u_0 и u_{n+1} не являются настоящими неизвестными - они, как известно, равны нулю - мы можем полностью удалить их из матрицы, и мы получим

      1  /  2  1  0 \
D2 = --- |  1 -2  1 |
     h^2 \  0  1 -2 /

Отсутствующие записи в матрице действительно соответствуют тому факту, чтограничные условия равны нулю.

0 голосов
/ 30 января 2011

Мне сказали верхний, нижний ряды матрица А содержит два ненулевых элементы и недостающий третий элемент (то есть ноль) является Состояние Дирихле.

Я не уверен, что вам сказали, но вот что я знаю об этой проблеме.

Граничные условия Дирихле фиксируют значение потенциала (в данном случае температуру). Граничное условие Неймана будет определять поток или первую производную в точке. Это понадобится вам, если у вас есть конвекционные граничные условия на поверхности.

Что касается обработки граничных условий Дирихле, вы формулируете матрицу системы без предварительного рассмотрения граничных условий. Если у вас есть фиксированная температура в данном узле, вы можете справиться с этим следующим образом:

  1. Установите строку в правом векторе для данного узла, равную температуре границы. Обнулите все столбцы этой строки в левой матрице и установите диагональный элемент, соответствующий этому узлу, равным единице.
...