11. Методи розв’язання крайових задач для звичайних диференційних рівнянь
Почнемо з постановки крайових задач.
-
Нелінійна двоточкова крайова задача:
\begin{equation} \label{eq:11.1} \frac{\diff \vec U}{\diff x} = \vec F \left(x, \vec U\right) , \quad a < x < b, \end{equation}
\begin{equation} \label{eq:11.2} \vec \varphi \left(\vec U(a), \vec U(b)\right) = \vec d, \end{equation}
де , , , , , , , — числа.
-
Лінійна двоточкова крайова задача:
\begin{equation} \label{eq:11.3} \frac{\diff \vec U}{\diff x} = A(x) \vec U(x) + \vec F(x), \end{equation}
\begin{equation} \label{eq:11.4} B_1 \vec U(a) + B_2 \vec U(b) = \vec d, \end{equation}
де , , , , — числові матриці , — числовий вектор.
Означення: Крайові умови \eqref{eq:11.2} і \eqref{eq:11.4} називаються нероздільними.
Означення: Часто зустрічаються розділені крайові умови. Наприклад, для лінійної задачі:
\begin{equation} C_1 \vec U(a) = \vec d_1, \quad C_2 \vec U(b) = \vec d_2 \tag{4’}, \end{equation}
де — -матриця повного рангу, — -матриця повного рангу, — -вектор, — -вектор.
Твердження: До \eqref{eq:11.3}, зводиться крайова задача для рівнянь вищих порідків.
Доведення: Справді, нехай задана крайова задача
\begin{equation} \left\{ \begin{aligned} & u^{(m)}(x) = p_1(x) u^{(m-1)}(x) + \ldots + p_m(x) u(x) + f(x), \newline & \alpha_{i,1} u^{(m-1)}(a) + \ldots + \alpha_{i,m} u(a) = \mu_i, \quad i = \overline{1, m - k}, \newline & \beta_{i,1} u^{(m-1)}(b) + \ldots + \beta_{i,m} u(b) = \nu_i, \quad i = \overline{1,k}. \end{aligned} \right. \end{equation}
Вона зводиться до задачі \eqref{eq:11.3}, з
\begin{equation} A(x) = \begin{pmatrix} 0 & 1 & 0 & \ldots & 0 \newline 0 & 0 & 1 & \ddots & \vdots \newline \vdots & \ddots & \ddots & \ddots & 0 \newline 0 & \ldots & 0 & 0 & 1 \newline p_m & p_{m-1} & p_{m -2} & \ldots & p_1 \end{pmatrix}, \end{equation}
\begin{equation} C_1 = (\alpha_{ij})\void_{i = \overline{1, m - k}}^{j = \overline{i, m}}, \quad C_2 = (\beta_{ij})\void_{i = \overline{1, k}}^{j = \overline{i, m}}, \end{equation}
\begin{equation} \vec d_1 = (\mu_1, \ldots, \mu_{m - k})^\intercal, \quad \vec d_2 = (\nu_1, \ldots, \nu_k)^\intercal. \end{equation}
Зауваження: Вважаємо, що всі задачі мають єдині розв’язки.
Розглянемо методи розв’язування цих задач.
11.1. Метод стрільби
Розглянемо крайову задачу з нерозділеними крайовими умовами:
\begin{equation} \label{eq:11.1.1} \frac{\diff \vec U}{\diff x} = A(x) \vec U(x) + \vec F(x), \end{equation}
\begin{equation} \label{eq:11.1.2} B_1 \vec U(a) + B_2 \vec U(b) = \vec d, \end{equation}
Метод стрільби водить крайову задачу до послідовності з задач Коші, а саме:
\begin{equation} \label{eq:11.1.3} \frac{\diff \vec Y_0}{\diff x} = A(x) \vec Y_0, \quad \vec Y_0(a) = 0. \end{equation}
\begin{equation} \label{eq:11.1.4} \frac{\diff \vec Y_i}{\diff x} = A(x) \vec Y_i(x), \quad \vec Y_u(a) = \vec \delta_i, \end{equation}
для , де .
Означення: Матриця називається фундаментальною матрицею однорідної системи \eqref{eq:11.1.1}.
Розв’язок \eqref{eq:11.1.1} шукаємо у вигляді:
\begin{equation} \label{eq:11.1.5} \vec Y(x) = \vec Y_0(x) + \Sum_{i = 1}^m c_i \vec Y_i (x). \end{equation}
Справді, він задовольняє \eqref{eq:11.1.1}, а самі знаходяться з \eqref{eq:11.1.2}:
\begin{equation} B_1 \left( \vec Y_0 + \Sum_i c_i \vec Y_i(a) \right) + B_2 \left( \vec Y_0(b) + \Sum_i c_i \vec Y_i(b) \right) = \vec d, \end{equation}
або
\begin{equation} \label{eq:11.1.6} (B_1 + B_2 Y(b)) \vec c = \vec d - B_2 \vec Y_0(b). \end{equation}
Розв’язуючи цю СЛАР знаходимо . За єдиністю .
Алгоритм А1:
Розв’язуємо задачу Коші \eqref{eq:11.1.3}, знаходимо .
Розв’язуємо задач Коші \eqref{eq:11.1.4}, знаходимо .
Розв’язуємо СЛАР \eqref{eq:11.1.6}, знаходимо , .
знаходимо з \eqref{eq:11.1.5}.
Складність цього алгоритму така ж, як і складність розв’язування задачі Коші.
Якщо крайові умови розділені, тобто
\begin{equation} C_1 \vec U(a) = \vec d_1, \quad C_2 \vec U(b) = \vec d_2, \end{equation}
то можна зменшити кількість задач Коші, які необхідно розв’язати. Для цього побудуємо вектор такий, що
\begin{equation} \label{eq:11.1.7} C_1 \vec V_0 = \vec d_1. \end{equation}
Це завжди можна зробити, оскільки кількість рівнянь менша за кількість невідомих. Далі будуємо , такі, що
\begin{equation} \label{eq:11.1.8} C_1 \vec V_i = 0, \quad i = \overline{1, k}. \end{equation}
Знову ж таки, це можна здійсними бо , тобто не повний.
Після цього всього розв’язуємо задачі Коші:
\begin{equation} \label{eq:11.1.9} \frac{\diff \vec Y_0}{\diff x} = A \vec Y_0 + \vec F, \quad \vec Y_0(a) = \vec V_0 \end{equation}
\begin{equation} \label{eq:11.1.10} \frac{\diff \vec Y_i}{\diff x} = A \vec Y_i, \quad \vec Y_i(a) = \vec V_i, \quad i = \overline{1, k}. \end{equation}
Сталі знаходимо з другої крайової умови.
Алгоритм А2:
Розв’язуємо СЛАР \eqref{eq:11.1.7}–\eqref{eq:11.1.8}.
Розв’язуємо задачу Коші \eqref{eq:11.1.9}.
Розв’язуємо задач Коші \eqref{eq:11.1.10}.
Розв’язуємо СЛАР
\begin{equation} \label{eq:11.1.11} B_2 \vec Y(b) \equiv C_2 \left(\vec Y_0(b) + \Sum_{i = 1}^k c_i \vec Y(b) \right) = \vec d_2 \end{equation}
Розв’язок
\begin{equation} \label{eq:11.1.12} \vec Y(x) = \vec Y_0(x) + \Sum_{i = 1}^k c_i \vec Y_i(x). \end{equation}
Оскільки для A1 та А2 розв’язок задачі Коші шукається чисельно, то фактично маємо не всю функцію а значення
\begin{equation} \vec Y_i(x_n), \quad n = \overline{0, N}, \quad x_n \in [a, b]. \end{equation}
Їх треба запамя’ятовувати щоб розв’язати \eqref{eq:11.1.12}. Цього недоліку можна уникнути:
Алгоритм А3:
Розв’язуємо СЛАР \eqref{eq:11.1.7}–\eqref{eq:11.1.8}.
Розв’язуємо задачу Коші \eqref{eq:11.1.9}.
Розв’язуємо задач Коші \eqref{eq:11.1.10} і запам’ятовуємо лише .
Розв’язуємо СЛАР \eqref{eq:11.1.11}.
Розв’язуємо ще одну задачу Коші:
\begin{equation} \frac{\diff \vec Y}{\diff x} = A \vec Y, \quad \vec Y(a) = \vec V_0 + \Sum_{i = 1}^k \vec V_i. \end{equation}
Тоді за формулою \eqref{eq:11.1.12} .
Зауваження: Зрозуміло, що «стріляти», тобто починати розв’язувати задачу Коші, треба з того боку, де задано більше крайових умов.
Зауваження (суттєвий недолік алгоритмів!) Серед власних значень , як правило, є такі, що . Тоді лінійно незалежні розв’язки задачі Коші наростають експоненціально. Це призводить до наростання похибок заокруглень та погано обумовленої матриці системи \eqref{eq:11.1.6} або \eqref{eq:11.1.11} (розв’язки стають майже лінійно залежні).
Тому розбивають на проміжки , , і розв’язують задачу Коші на підпроміжках, а в кінці ортогоналізують отримані розв’язки. Зрозуміло, що для отримують не , а деякі , які залежать від та відповідних перетворень ортогоналізації. З їх допомогою по обчислюють та «прогоняють» ці умови для всіх значень
\begin{equation} \vec Y(a) = \vec Y_0(a) + \Sum_i c_i \vec Y_i(a). \end{equation}
Така ідея метода ортогональної прогонки Годунова, що широко застосовується на практиці.
11.2. Метод пристрілки
Це метод для розв’язування крайової задачі для нелінійних рівнянь аналогічний методу стрільби.
Розглянемо крайову задачу з розділеними крайовими умовами:
\begin{equation} \label{eq:11.2.1} \frac{\diff \vec U}{\diff x} = \vec F \left(x, \vec U\right), \quad a < x < b, \end{equation}
\begin{equation} \label{eq:11.2.2} u_i(a) = c_i, \quad i = \overline{k + 1, m}, \end{equation}
\begin{equation} \label{eq:11.2.3} \varphi \left( \vec U(b) \right) = d_i, \quad i = \overline{1,k}. \end{equation}
При невідомі початкових умов , . Будемо їх шукати.
Розв’яжемо задачу Коші:
\begin{equation} \left\{ \begin{aligned} & \frac{\diff \vec Y}{\diff x} = \vec F \left(x, \vec Y\right), \quad a < x < b \newline & \vec Y(a) = \vec C = (c_i)^m_{i = 1}, \end{aligned} \right. \end{equation}
де , — невідомі. Їх шукаємо з крайової умови \eqref{eq:11.2.3}:
\begin{equation} f_i(c_1, \ldots, c_k) \equiv \varphi_i \left( \vec \varphi(b; c_1, \ldots, c_k) \right) - d_i = 0, \quad i = \overline{1,k}. \end{equation}
Це система нелінійних рівнянь. Задаємо початкові значення , . За якимось ітераційним методом знаходимо її розв’язок. Найзручніше використовувати метод січних.
Метод пристрілки найбільш прозоро виглядає для . У цьому випадку нам необхідно знайти тільки . Використаємо метод ділення навпіл. Знайдемо таке, що
\begin{equation} \varphi_1 \left( \vec y \left( b; c_1^{(0)} \right) \right) - d_1 > 0, \end{equation}
та таке, що
\begin{equation} \varphi_1 \left( \vec y \left( b; c_1^{(1)} \right) \right) - d_1 < 0. \end{equation}
Тоді вибираємо
\begin{equation} c_1^{(2)} = \frac{c_1^{(0)} + c_1^{(1)}}{2}. \end{equation}
З інтервалів , (можливо кінці в іншому порядку) вибираємо такий, що змінює знак. Процес продовжуємо до виконання умови
\begin{equation} \left| \varphi_1 \left( \vec y \left(b, c_1^{(k)}\right) \right) - d_1 \right| < \varepsilon, \end{equation}
де — задана точність.
11.3. Метод лінеаризації
Розглянемо задачу:
\begin{equation} \label{eq:11.3.1} \frac{\diff \vec U}{\diff x} = \vec F \left(x, \vec U\right) , \quad a < x < b, \end{equation}
\begin{equation} \label{eq:11.3.2} \vec \varphi \left(\vec U(a), \vec U(b)\right) = \vec d, \end{equation}
Метод лінеаризації для задачі \eqref{eq:11.3.1} це аналог методу Ньютона для систем нелінійних рівнянь. Нехай — деяке наближення. Побудуємо його уточнення до точного розв’язку :
\begin{equation} \vec U(x) = \vec Y_0(x) + \vec Z_0(x). \end{equation}
З \eqref{eq:11.3.1} маємо
\begin{equation} \frac{\diff Z_0}{\diff x} = \Phi_F \left( x, \vec V \right) \vec Z_0(x) + \vec F \left( x, \vec Y_0 \right) - \frac{\diff \vec Y_0}{\diff x}. \end{equation}
Замінюючи середнє значення на отримаємо лінійне рівняння:
\begin{equation} \label{eq:11.3.3} \frac{\diff \vec Z_0}{\diff z} = \Phi_F \left( x, \vec Y_0 \right) \vec Z_0 + \vec F \left(x, \vec Y_0\right) - \frac{\diff \vec Y_0}{\diff x}. \end{equation}
Аналогічно
\begin{equation} \label{eq:11.3.4} \Phi_a \left( \vec Y_0(a), \vec Y_0(b) \right) \vec Z_0(a) + \Phi_b \left( \vec Y_0(a), \vec Y_0(b) \right) \vec Z_0(b) = \vec d - \vec \varphi \left(\vec Y_0(a), \vec Y_0(b)\right), \end{equation}
де
-
— матриця Якобі правої частини ;
-
, — матриці Якобі для по крайовим умовам в точках та відповідно.
Задача \eqref{eq:11.3.3}– — лінійна і розв’язується методом стрільби (з ортогоналізацією). Розв’язавши цю задачу, маємо настуне наближення . Цей процес продовжуємо до виконання умови точності .
Недоліки методу:
-
Наявність похідної в правій частині. Оскільки розв’язок задач Коші чисельний, то для її обчислення треба застосовувати формули чисельного диференціювання. Це може привести до великих похибок за рахунок нестійкості задачі чисельного диференціювання.
-
Збіжність залежить від вибору .
11.4. Метод продовження за параметром
Суттєвим недоліком методу ліанерізації є необхідність задавати хороше початкове наближення та чисельне диференціювання попереднього наближення. Розглянемо метод, який позбавлений цих недоліків.
Розглянемо задачу знаходження вектора , що задовольняє умовам:
\begin{equation} \label{eq:11.4.1} \frac{\diff \vec U}{\diff x} = \vec F \left(x, \vec U\right) , \quad a < x < b, \end{equation}
\begin{equation} \label{eq:11.4.2} \vec \varphi \left(\vec U(a), \vec U(b)\right) = \vec d, \end{equation}
Нехай розв’язок цієї задачі існує та єдиний.
Розв’яжемо задачу Коші
\begin{equation} \label{eq:11.4.3} \frac{\diff \vec Y}{\diff x} = \vec F \left(x, \vec Y\right), \quad \vec Y(a) = \vec Y_0. \end{equation}
Вибір здійснимо так, щоб було задовольнялося як можна більша кількість з крайових умов \eqref{eq:11.4.2}. Наприклад, якщо , то вибираємо .
Обчислимо . Якщо , то . Але, як правило, і тому необхідно уточнювати початкове наближення. Розглянемо параметричну крайову задачу
\begin{equation} \label{eq:11.4.4} \frac{\diff \vec V}{\diff x} = \vec F \left(x, \vec V\right) , \quad a < x < b, \end{equation}
\begin{equation} \label{eq:11.4.5} \vec \varphi \left(\vec V(a), \vec V(b)\right) = \lambda \vec d + (1 - \lambda) \vec d_0, \end{equation}
яка залежить від параметра : . Ясно, що , а .
Спробуємо продовжити розв’язок задачі \eqref{eq:11.4.4}–\eqref{eq:11.4.5} від відомого до шуканого . Для цього продиференціюємо \eqref{eq:11.4.4}–\eqref{eq:11.4.5} по :
\begin{equation} \frac{\diff}{\diff x} \frac{\partial \vec V}{\partial \lambda} = \Sum_{j = 1}^n \frac{\partial \vec F}{\partial u_j} \cdot \frac{\partial V_j}{\partial \lambda}, \quad a < x < b, \end{equation}
\begin{equation} \Sum_{j = 1}^n \frac{\partial \vec \varphi}{\partial u_j}(a) \cdot \frac{\partial \vec V}{\partial \lambda}(a) + \Sum_{j = 1}^n \frac{\partial \vec \varphi}{\partial u_j}(b) \cdot \frac{\partial \vec V}{\partial \lambda}(b) = \vec d - \vec d_0, \end{equation}
Позначимо . Тоді останню систему можна записати у вигляді:
\begin{equation} \label{eq:11.4.6} \frac{\diff \vec Z}{\diff x} = \vec \Phi_F \left(x, \vec V \right) \vec Z, \quad a < x < b, \end{equation}
\begin{equation} \label{eq:11.4.7} \vec \Phi_a \left(\vec V(a), \vec V(b)\right) \vec Z(a) + \vec \Phi_b \left(\vec V(a), \vec V(b)\right) \vec Z(b) = \vec d - \vec d_0, \end{equation}
\begin{equation} \label{eq:11.4.8} \frac{\partial \vec V}{\partial \lambda} = \vec Z, \quad \vec V(x, 0) = \vec Y_0 \end{equation}
де
-
— матриця Якобі правої частини \eqref{eq:11.4.1}, ;
-
— матриця Якобі лівої частини крайової умови \eqref{eq:11.4.2} по першому аргументу ;
-
— матриця Якобі лівої частини крайової умови \eqref{eq:11.4.2} по другому аргументу ;
Задача \eqref{eq:11.4.6}–\eqref{eq:11.4.8} не простіше ніж вихідна задача \eqref{eq:11.4.1}–\eqref{eq:11.4.2}, а ще й складніша за неї. Спростимо її, застосувавши до задачі Коші \eqref{eq:11.4.8} чисельний метод, наприклад, метод Ейлера:
\begin{equation} \vec V^{(k + 1)}(x) = \vec V^{(k)}(x) + \Delta \lambda \vec Z^{(k)}(z), \quad \vec V^{(0)}(x) = \vec Y(x). \end{equation}
Тут , , , , .
Знайдене наближення використовується для знаходження наступного наближення лінійної крайової задачі \eqref{eq:11.4.6}–.
Повністю алгоритм розв’язання крайової задачі \eqref{eq:11.4.1}–\eqref{eq:11.4.2} цим методом такий:
-
Розв’язуємо задачу Коші \eqref{eq:11.4.3} . Задаємо початкові значення
-
Для розв’язуємо лінійні крайові задачі:
\begin{equation} \frac{\diff \vec Z^{(k)}}{\diff x} = \Phi_F \left( x, \vec V^{(k)} \right) \vec Z^{(k)}, \quad a < x < b, \end{equation}
\begin{equation} \vec \Phi_a \left(\vec V^{(k)}(a), \vec V^{(k)}(b)\right) \vec Z^{(k)}(a) + \vec \Phi_b \left(\vec V^{(k)}(a), \vec V^{(k)}(b)\right) \vec Z^{(k)}(b) = \vec d - \vec d_0, \end{equation}
-
Продовжуємо розв’язок по параметру :
\begin{equation} \vec V^{(k + 1)}(x) = \vec V^{(k)}(x) + \Delta \lambda \vec Z^{(k)}(x). \end{equation}
-
Шуканий розв’язок .
Лінійні крайові задачі пункту 2 розв’язуються, наприклад, методом стрільби. Для розв’язання задачі Коші \eqref{eq:11.4.8} можна застосовувати більш точні методи ніж метод Ейлера.