Лекция 11: Численное решение краевых задач для систем обыкновенных дифференциальных уравнений
10.3. Краевая разностная задача Штурма - Лиувилля для обыкновенного дифференциального уравнения второго порядка
Задача Штурма-Лиувилля для обыкновенного дифференциального уравнения второго порядка часто встречается в приложениях. Рассмотрим линейную задачу
![]() |
( 10.1) |
где коэффициенты g, h, s, вообще говоря, являются функциями независимого переменного t.
Для разностной аппроксимации рассматриваемой краевой задачи введем равномерную разностную сетку и определим на этой сетке сеточную функцию
Коэффициент g, вообще говоря, может не иметь первой производной. Такая задача может возникнуть, например, в случае расчета установившегося распределения температуры в задаче стационарной теплопроводности с контактным разрывом. Представим разностную задачу в виде
![\begin{gather*}
\frac{1}{\tau }\left({g_{n + 1/2} \frac{u_{n + 1} - u_n}{\tau } - g_{n - 1/2} \frac{u_n -
u_{n - 1}}{\tau }}\right) + h_n \frac{u_{n + 1} - u_{n - 1}}{2\tau } + s_n u_n = \\
= f_n , n = 1, \ldots , N - 1, \\
g_{n + 1/2} = g(t_n + \frac{\tau}{2}), h_n = h(t_n), \\
A\frac{u_1 - u_0}{\tau } + Bu_0 = D, t = a, \\
A^{\prime}\frac{u_N - u_{N - 1}}{\tau } + B^{\prime}u_N = D^{\prime}, t = b.
\end{gather*}](/sites/default/files/tex_cache/a9a705711b6c1e13d9b8b6afe5e4e1ab.png)
Контактный разрыв при этом помещается в узел с номером n. В этом случае фактически аппроксимируется тепловой поток через границы ячейки разностной сетки, для уравнения теплопроводности получается консервативная разностная схема — подробнее смотри в лекциях, посвященных численному решению уравнений в частных производных.
Выписанные выше соотношения определяют простейшую разностную схему. Под разностной схемой здесь и ниже понимается совокупность разностных уравнений для определения значений сеточной функции внутри расчетной области, дополненная соответствующими начальными и граничными условиями для этой сеточной функции.
Для определения значений сеточной функции получается СЛАУ с трехдиагональной матрицей
- b0u0 + c0u1 = d0, anun - 1 - bnun + cnun - 1 = dn , n = 1, ..., N - 1, anuN - 1 - bnun = dn,
где
![\begin{gather*} a_n = \frac{{g_{n - 1/2}}}{{\tau ^2 }} -
\frac{{h_n}}{{2\tau }}, c_n = \frac{{g_{n + 1/2}}}{{\tau ^2 }} + \frac{{h_n}}{{2\tau }}, \\
b_n = a_n + c_n - h_n , d_n = f_n , b_0 = \frac{A}{\tau } - \frac{B}{2}, c_0 = \frac{A}{\tau } + \frac{B}{2}, d_0 = D \end{gather*}](/sites/default/files/tex_cache/6b1e817d84a15317e334a7ef341fa5ad.png)
Эта СЛАУ представима в каноническом виде A'u = D, где A' — матрица
![A^{\prime} = \left( \begin{array}{ccccc}
{- b_0 } & {c_0 } & 0 & \ldots & 0 \\
{a_1 } & {- b_1 } & {c_1 } & \ldots & 0 \\
0 & {a_2 } & {- b_2 } & \ldots & 0 \\
\ldots & \ldots & \ldots & \ldots & \ldots \\
0 & 0 & 0 & \ldots & {- b_n} \\
\end{array} \right),](/sites/default/files/tex_cache/d751d97ef17f64734acdd6572b88b84f.png)
u, d есть векторы - столбцы
D = (d0, d1, ..., dn)T.
Трехдиагональные матрицы часто возникают при численном решении краевых задач как для обыкновенных дифференциальных уравнений, так и для уравнений в частных производных. Ранее матрица подобной структуры встречалась при построении сплайна Шонберга ( "Интерполяция функций" ). Характерная особенность таких матриц заключается в том, что при большой размерности матрица имеет ленточную структуру — все элементы вне ленты (главная диагональ матрицы и по одной диагонали над и под ней) нулевые. В общем случае численное решение СЛАУ n - го порядка требует O(N3) арифметических действий и O(N2) ячеек памяти. В численных методах большую роль играют экономичные алгоритмы, в которых количество арифметических операций пропорционально количеству неизвестных — O(N).
К таким алгоритмам относится метод трехточечной разностной прогонки, появление которого в России связано с именем И.М.Гельфанда, в англоязычной литературе такая прогонка называется алгоритмом Томаса. Экономия памяти очевидна — необходимо хранить только три диагонали исходной матрицы (три одномерных массива). Рассмотрим экономичный вариант метода Гаусса, предназначенный для решения подобных систем.
Решение ищется в виде прогоночного соотношения
un - 1 = pnun + qn, n = 1, ..., N,
где pn и qn — прогоночные коэффициенты, подлежащие определению.
Левое краевое условие также записывается в виде прогоночного соотношения
![$ u_0 = \frac{c_0 }{d_0 }u_1 - \frac{d_0 }{b_0}, $](/sites/default/files/tex_cache/301ea886852f1297872be86e6715356c.png)
где p1 = c0/ b0, q1 = - d0/ b0 (заметим, что если A > 0 и B < 0, то b0 > c0, 0 < p < 1 ).
Получим рекуррентные формулы, позволяющие последовательно вычислить p2, q2, p3, q3 и т.д. вплоть до pn, qn.
Подставив равенство u n - 1 = pnun + qn в уравнение anun - 1 - bnun + cnu n + 1 = dn, получим an(pnun + qn) - bnun + cnun + 1 = dn, или
![$ u_n = \frac{c_n}{b_n - a_n p_n}u_{n + 1} + \frac{a_n q_n - d_n}{b_n -
a_n p_n}. $](/sites/default/files/tex_cache/804175a12a7ebaddaaacb83b40d57480.png)
Сравнивая эту запись со стандартным видом прогоночного соотношения
un = pn + 1un + 1 + qn + 1,
видим, что для прогоночных коэффициентов должны выполняться равенства
![$ p_{n + 1} = \frac{c_n}{b_n - a_n p_n}, \quad q_{n + 1} = \frac{a_n q_n - d_n}{b_n - a_n p_n}. $](/sites/default/files/tex_cache/30d844134792245b033db8d975f796d6.png)
Эти формулы определяют прямой ход прогонки.
Из краевого условия на правом конце отрезка интегрирования anuN - 1 - bNuN = dN и прогоночного соотношения uN - 1 = pNuN + qN находим величину uN.
Далее последовательно вычисляются остальные неизвестные un n = N - 1, ..., 1 un - 1 = pnun + qn. Это — обратный ход алгоритма прогонки.