🎨
Цвет акцента
Синий
Фиолетовый
Пурпурный
С0. Типы уравнений, граничные условия, обезразмеривание С1. Обезразмеривание уравнений, типы уравнений С2. Аппроксимация, граничные условия, явная схема С3. Устойчивость явной и неявной схем С4. Алгоритм решения явной и неявной схем С5. Алгоритм решения схемы Кранка-Николсона С6. УрЧП 1-го порядка: устойчивость и алгоритм решения С7. Параболические уравнения с конвективным членом С8. Двумерные уравнения: явная схема и метод расщепления С9. Двумерные уравнения: переменные направления, предиктор-корректор
Семинар 4

Алгоритм решения явной и неявной схем

PDF: оригинал конспекта

Пример 1. Явная разностная схема

Постановка задачи

$$ \frac{\partial u}{\partial t} = 2\,\frac{\partial^2 u}{\partial x^2} + e^t + e^x $$

Начальное условие:

$$ u(t=0,\, x) = e^x $$

Граничные условия:

$$ \begin{cases} u(t,\, x=0) = e^t + 1 \\[4pt] \dfrac{\partial u}{\partial x}(t,\, x=1) = e^t + 2{,}7 \end{cases} $$


Явная разностная схема

$$ \frac{u_j^{n+1} - u_j^n}{\Delta t} = 2\,\frac{u_{j+1}^n - 2u_j^n + u_{j-1}^n}{h^2} + e^{n\Delta t} + e^{(j-1)h} $$

Начальное условие на сетке:

$$ u_j^0 = e^{(j-1)h} $$

Левое граничное условие (ЛГУ):

$$ u_1^{n+1} = e^{(n+1)\Delta t} + 1 $$

Правое граничное условие (ПГУ) — аппроксимация производной:

$$ \frac{u_N^{n+1} - u_{N-1}^{n+1}}{h} = e^{(n+1)\Delta t} + 2{,}7 \quad\Longrightarrow\quad u_N^{n+1} = u_{N-1}^{n+1} + h\!\left(e^{(n+1)\Delta t} + 2{,}7\right) $$


Рекуррентное соотношение (явная схема)

$$ \boxed{ u_j^{n+1} = u_j^n + \frac{2\,\Delta t}{h^2}\!\left(u_{j+1}^n - 2u_j^n + u_{j-1}^n\right) + \left(e^{n\Delta t} + e^{(j-1)h}\right)\Delta t } $$


Блок-схема алгоритма (явная схема)

┌─────────────────────────────────────────────────────────┐
│  Задание начальных условий:                             │
│  u_j^0 = e^{(j-1)h},  цикл j = 1, j ≤ Nx, j++         │
└──────────────────┬──────────────────────────────────────┘
                   ↓
             ┌─────────┐
             │  n = 0  │
             └────┬────┘
                  ↓
          ╔═══════╧═══════╗
          ║   n < N_t ?   ║◄──────────────────────────┐
          ╚══════╤════════╝                           │
          да ↓   ╚══ нет → (Конец)                   │
                  ↓                                   │
┌─────────────────────────────────────────────────────┐│
│ Цикл j = 2, j ≤ Nx−1, j++                          ││
│ u_j^{n+1} = u_j^n + (2Δt/h²)·Λ_xx^n               ││
│           + (e^{nΔt} + e^{(j-1)h})·Δt              ││
└──────────────────┬──────────────────────────────────┘│
                   ↓                                   │
┌──────────────────────────────────────┐               │
│ Расчёт левой точки из ЛГУ:           │               │
│ u_1^{n+1} = e^{(n+1)Δt} + 1         │               │
└──────────────────┬───────────────────┘               │
                   ↓                                   │
┌──────────────────────────────────────────────────────┐│
│ Расчёт правой точки из ПГУ:                          ││
│ u_{Nx}^{n+1} = u_{Nx−1}^{n+1} + h·(e^{(n+1)Δt}+2,7)││
└──────────────────┬───────────────────────────────────┘│
                   ↓                                   │
             ┌─────────┐                               │
             │  n++    │───────────────────────────────┘
             └─────────┘


Пример 2. Явная схема — другая задача

Постановка задачи

$$ \frac{\partial u}{\partial t} = 7\,\frac{\partial^2 u}{\partial x^2} - 3u + x + t, \qquad u(t=0,\, x) = x $$

Граничные условия:

$$ \begin{cases} \dfrac{\partial u}{\partial x}(t,\, x=0) = 1 \\[6pt] u(t,\, x=1) = t + 1 \end{cases} $$


Явная разностная схема

$$ \frac{u_j^{n+1} - u_j^n}{\Delta t} = 7\,\frac{u_{j+1}^n - 2u_j^n + u_{j-1}^n}{h^2} - 3u_j^n + (j-1)h + n\Delta t $$

Начальное условие:

$$ u_j^0 = (j-1)h $$

ЛГУ — производная первого порядка:

$$ \frac{u_2^{n+1} - u_1^{n+1}}{h} = 1 \quad\Longrightarrow\quad u_1^{n+1} = u_2^{n+1} - h $$

ПГУ — условие первого рода:

$$ u_N^{n+1} = (n+1)\Delta t + 1 $$


Рекуррентное соотношение

$$ u_j^{n+1} = u_j^n + \frac{7\,\Delta t}{h^2}\,\Lambda_{xx}^n - \left(3u_j^n + (j-1)h + n\Delta t\right)\Delta t $$


Пример 3. Неявная схема. Метод прогонки

Постановка задачи

$$ \frac{\partial u}{\partial t} = 10^{-2}\,\frac{\partial^2 u}{\partial x^2} - 2u + t^2 + x^2 $$

Начальное условие:

$$ u(t=0,\, x) = x^2 $$

Граничные условия (условия Неймана):

$$ \begin{cases} \dfrac{\partial u}{\partial x}(t,\, x=0) = 0 \\[6pt] \dfrac{\partial u}{\partial x}(t,\, x=1) = 2 \end{cases} $$


1. Неявная разностная схема

$$ \frac{u_j^{n+1} - u_j^n}{\Delta t} = 10^{-2}\,\frac{u_{j+1}^{n+1} - 2u_j^{n+1} + u_{j-1}^{n+1}}{h^2} - 2u_j^{n+1} + (n\Delta t)^2 + \bigl[(j-1)h\bigr]^2 $$


2. Приведение к виду для прогонки

$$ \underbrace{-\frac{10^{-2}\Delta t}{h^2}}_{a_j} u_{j+1}^{n+1} +\underbrace{\left(1 + \frac{2\cdot 10^{-2}\Delta t}{h^2} + 2\Delta t\right)}_{b_j} u_j^{n+1} -\underbrace{\frac{10^{-2}\Delta t}{h^2}}_{c_j} u_{j-1}^{n+1} = \underbrace{u_j^n + \left[(n\Delta t)^2 + (j-1)^2 h^2\right]\Delta t}_{\zeta_j^n} $$


3. Прогоночные коэффициенты (общая формула)

Из рекуррентного прогоночного соотношения $u_{j-1}^{n+1} = \alpha_{j-1}\,u_j^{n+1} + \beta_{j-1}$ подстановкой получаем:

$$ \alpha_j = -\frac{a_j}{b_j + c_j\,\alpha_{j-1}}, \qquad \beta_j = \frac{\zeta_j^n - c_j\,\beta_{j-1}}{b_j + c_j\,\alpha_{j-1}} $$

Рекуррентное прогоночное соотношение:

$$ u_j^{n+1} = \alpha_j\,u_{j+1}^{n+1} + \beta_j $$


4. Начальные прогоночные коэффициенты $\alpha_1,\, \beta_1$ (из ЛГУ)

$$ \frac{u_2^{n+1} - u_1^{n+1}}{h} = 0 \;\Longrightarrow\; u_1^{n+1} = u_2^{n+1} $$

Сравниваем с $u_1^{n+1} = \alpha_1\,u_2^{n+1} + \beta_1$:

$$ \boxed{\alpha_1 = 1, \quad \beta_1 = 0} $$


5. Нахождение $u_{N_x}^{n+1}$ из ПГУ

$$ \frac{u_N^{n+1} - u_{N-1}^{n+1}}{h} = 2 \;\Big/\cdot h $$

Подставляем $u_{N-1}^{n+1} = \alpha_{N-1}\,u_N^{n+1} + \beta_{N-1}$:

$$ u_N^{n+1} - \alpha_{N-1}\,u_N^{n+1} - \beta_{N-1} = 2h $$

$$ \boxed{ u_{N_x}^{n+1} = \frac{2h + \beta_{N_x - 1}}{1 - \alpha_{N_x - 1}} } $$


6. Условие устойчивости метода прогонки

$$ |a_j| + |c_j| \leq |b_j| $$

Для данной задачи:

$$ \left|\frac{10^{-2}\Delta t}{h^2}\right| + \left|\frac{10^{-2}\Delta t}{h^2}\right| \leq \left|1 + 2\Delta t + \frac{2\cdot 10^{-2}\Delta t}{h^2}\right| \quad\text{— выполняется} $$


Блок-схема алгоритма прогонки

┌──────────────────────────────────────────────────────────┐
│  Задание начальных условий:                              │
│  u_j^0 = [(j-1)h]^2,  цикл j = 1, j ≤ Nx, j++          │
└───────────────────┬──────────────────────────────────────┘
                    ↓
              ┌──────────┐
              │  n = 0   │
              └────┬─────┘
                   ↓
           ╔════════╧════════╗
           ║    n < N_t ?    ║◄──────────────────────────────┐
           ╚═══════╤═════════╝                               │
           да ↓    ╚═══ нет → (Конец)                        │
                   ↓                                         │
┌──────────────────────────────────────────────────────────┐ │
│ Определяем α₁, β₁ из ЛГУ:                               │ │
│ u₁^{n+1} = u₂^{n+1}  ⟹  α₁ = 1, β₁ = 0                │ │
└───────────────────┬──────────────────────────────────────┘ │
                    ↓                                         │
┌──────────────────────────────────────────────────────────┐ │
│ Прямой ход: цикл j = 2, j ≤ Nx−1, j++  (слева направо)  │ │
│ Расчёт: a_j, b_j, c_j, ζ_j^n                            │ │
│ α_j = −a_j / (b_j + c_j·α_{j-1})                        │ │
│ β_j = (ζ_j^n − c_j·β_{j-1}) / (b_j + c_j·α_{j-1})      │ │
└───────────────────┬──────────────────────────────────────┘ │
                    ↓                                         │
┌──────────────────────────────────────────────────────────┐ │
│ Расчёт правой точки из ПГУ:                              │ │
│ u_{Nx}^{n+1} = (2h + β_{Nx-1}) / (1 − α_{Nx-1})        │ │
└───────────────────┬──────────────────────────────────────┘ │
                    ↓                                         │
┌──────────────────────────────────────────────────────────┐ │
│ Обратный ход: j = Nx−1, j ≥ 1, j−−  (справа налево)     │ │
│ u_j^{n+1} = α_j · u_{j+1}^{n+1} + β_j                  │ │
└───────────────────┬──────────────────────────────────────┘ │
                    ↓                                         │
              ┌──────────┐                                    │
              │   n++    │────────────────────────────────────┘
              └──────────┘


Домашнее задание (Д/З)

Уравнение:

$$ \frac{\partial u}{\partial t} = 3\,\frac{\partial^2 u}{\partial x^2} + t\cdot x $$

Начальное условие:

$$ u(t=0,\, x) = 0 $$

Граничные условия:

$$ \begin{cases} \dfrac{\partial u}{\partial x}(t,\, x=0) = t \\[6pt] \dfrac{\partial u}{\partial x}(t,\, x=1) = 2t \end{cases} $$

Задания:

  1. Записать явную разностную схему
  2. Составить блок-схему алгоритма (явная схема)
  3. Записать неявную разностную схему
  4. Составить блок-схему алгоритма прогонки
  5. Проверить неявную схему на устойчивость

Блок-схемы алгоритмов

Кликните по схеме, чтобы открыть в полном размере. Все схемы курса собраны на странице «Блок-схемы».

Явная разностная схема (параболическое уравнение): алгоритм
Явная разностная схема (параболическое уравнение): алгоритм
Неявная разностная схема — метод прогонки: алгоритм
Неявная разностная схема — метод прогонки: алгоритм