K. Учёт граничных условий Дирихле

Существует простой и распространённый метод учёта условий Дирихле — прямая подстановка известных граничных значений в систему (его называют методом зачёркивания строки и столбца). Пусть для узла ii задано граничное условие qiq_i​=gi{} = g_i, где gig_i — известное граничное значение. Тогда над системой Aq→A \overrightarrow{q}​=P→{} = \overrightarrow{P} выполняем следующие операции:

  1. Модификация правой части: Для всех строк jj​≠i{} \neq i вычитаем из правой части вклад известного значения qiq_i: pj:p_j :​=pj{} = p_j​−Aji⋅gi{} - A_{ji} \cdot g_i.
  2. Обнуление строки и столбца: Заменяем ii-ю строку и ii-й столбец матрицы AA нулями, за исключением диагонального элемента: Aij:A_{ij} :​=0,Aji:{} = 0, \quad A_{ji} :​=0,j{} = 0, \quad j​≠i{} \neq i.
  3. Установка диагонального элемента: Устанавливаем диагональный элемент равным единице: Aii:A_{ii} :​=1{} = 1.
  4. Установка граничного значения: Заменяем ii-й элемент вектора правой части на граничное значение: pi:p_i :​=gi{} = g_i.

После этих операций ii-е уравнение системы принимает вид 1⋅qi1 \cdot q_i​=gi{} = g_i, что гарантирует выполнение граничного условия.

Вернёмся к нашему одномерному примеру с пятью узлами q0,q1,q2,q3,q4q_0, q_1, q_2, q_3, q_4. Предположим, что на границах заданы условия Дирихле:

q0\displaystyle q_0 =g0,\displaystyle {} = g_0,​q4\displaystyle q_4​=g4.\displaystyle {} = g_4.

Стационарный случай

Исходная система имеет вид:

a2K⋅q→\displaystyle a^2 K \cdot \overrightarrow{q} =F→.\displaystyle {} = \overrightarrow{F}.

Матрица a2Ka^2 K — полная (симметричная, трёхдиагональная); граничные условия учитываются заменой граничных строк.

Обозначим AA​=a2K{} = a^2 K и P→\overrightarrow{P}​=F→{} = \overrightarrow{F}. Применим прямой метод для узлов q0q_0 и q4q_4.

Шаг 1: Модификация правой части для внутренних узлов

Для узла q1q_1 (индекс 1):

p1:\displaystyle p_1 : =p1\displaystyle {} = p_1​−A10⋅g0\displaystyle {} - A_{10} \cdot g_0​=F1\displaystyle {} = F_1​−a2⋅(−1l(0)(1))⋅g0\displaystyle {} - a^2 \cdot \left(-\frac{1}{l_{(0)(1)}}\right) \cdot g_0​=F1\displaystyle {} = F_1​+a2g0l(0)(1).\displaystyle {} + \frac{a^2 g_0}{l_{(0)(1)}}.

Для узла q3q_3 (индекс 3):

p3:\displaystyle p_3 : =p3\displaystyle {} = p_3​−A34⋅g4\displaystyle {} - A_{34} \cdot g_4​=F3\displaystyle {} = F_3​−a2⋅(−1l(3)(4))⋅g4\displaystyle {} - a^2 \cdot \left(-\frac{1}{l_{(3)(4)}}\right) \cdot g_4​=F3\displaystyle {} = F_3​+a2g4l(3)(4).\displaystyle {} + \frac{a^2 g_4}{l_{(3)(4)}}.

Шаги 2–4: Модификация матрицы и правой части для граничных узлов

Для узла q0q_0 (индекс 0):

  • Обнуляем первую строку: A01:A_{01} :​=0{} = 0
  • Обнуляем первый столбец: A10:A_{10} :​=0{} = 0
  • Устанавливаем диагональ: A00:A_{00} :​=1{} = 1
  • Устанавливаем правую часть: p0:p_0 :​=g0{} = g_0

Для узла q4q_4 (индекс 4):

  • Обнуляем последнюю строку: A43:A_{43} :​=0{} = 0
  • Обнуляем последний столбец: A34:A_{34} :​=0{} = 0
  • Устанавливаем диагональ: A44:A_{44} :​=1{} = 1
  • Устанавливаем правую часть: p4:p_4 :​=g4{} = g_4

В матрице a2Ka^2 K граничные строки и столбцы (узлы q0q_0 и q4q_4) обнуляются, на диагонали ставится единица; известные значения переносятся в правую часть.

Модифицированный вектор правой части:

P→~\displaystyle \widetilde{\overrightarrow{P}} =(g0F1+a2g0l(0)(1)F2F3+a2g4l(3)(4)g4).\displaystyle {} = \begin{pmatrix} g_0 \\ F_1 + \frac{a^2 g_0}{l_{(0)(1)}} \\ F_2 \\ F_3 + \frac{a^2 g_4}{l_{(3)(4)}} \\ g_4 \end{pmatrix}.

Примечание: поскольку функция плотности источников тождественно равна нулю на симплексах s1s_1 и s4s_4, имеем F0F_0​=0{} = 0 и F4F_4​=0{} = 0. Однако компоненты F1,F2,F3F_1, F_2, F_3 могут быть ненулевыми.

Нестационарный случай

Для нестационарного случая система имеет вид:

[D+Δt⋅a2K]⋅q→n\displaystyle \left[D + \Delta t \cdot a^2 K\right] \cdot \overrightarrow{q}_n =Δt⋅F→\displaystyle {} = \Delta t \cdot \overrightarrow{F}​+D⋅q→n−1.\displaystyle {} + D \cdot \overrightarrow{q}_{n-1}.

Обозначим AA​=D{} = D​+Δt⋅a2K{} + \Delta t \cdot a^2 K и P→\overrightarrow{P}​=Δt⋅F→{} = \Delta t \cdot \overrightarrow{F}​+D⋅q→n−1{} + D \cdot \overrightarrow{q}_{n-1}. Применяем тот же прямой метод.

Модификация правой части для внутренних узлов

Для узла q1q_1:

p1:\displaystyle p_1 : =p1\displaystyle {} = p_1​−A10⋅g0\displaystyle {} - A_{10} \cdot g_0​=Δt⋅F1\displaystyle {} = \Delta t \cdot F_1​+∑jD1jqn−1,j\displaystyle {} + \sum_j D_{1j} q_{n-1,j}​−(l(0)(1)6−Δt⋅a2l(0)(1))\displaystyle {} - \left(\frac{l_{(0)(1)}}{6} - \frac{\Delta t \cdot a^2}{l_{(0)(1)}}\right)​⋅g0.\displaystyle {} \cdot g_0.

Для узла q3q_3:

p3:\displaystyle p_3 : =p3\displaystyle {} = p_3​−A34⋅g4\displaystyle {} - A_{34} \cdot g_4​=Δt⋅F3\displaystyle {} = \Delta t \cdot F_3​+∑jD3jqn−1,j\displaystyle {} + \sum_j D_{3j} q_{n-1,j}​−(l(3)(4)6−Δt⋅a2l(3)(4))\displaystyle {} - \left(\frac{l_{(3)(4)}}{6} - \frac{\Delta t \cdot a^2}{l_{(3)(4)}}\right)​⋅g4.\displaystyle {} \cdot g_4.

Как и в стационарном случае, граничные строки и столбцы матрицы DD​+Δt a2K{} + \Delta t\, a^2 K обнуляются, на диагонали ставится единица, а q0q_0​=g0{} = g_0 и q4q_4​=g4{} = g_4 уходят в правую часть.