11. Методи розв’язання крайових задач для звичайних диференційних рівнянь

Почнемо з постановки крайових задач.

  1. Нелінійна двоточкова крайова задача:

    \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}

    де , , , , , , , — числа.

  2. Лінійна двоточкова крайова задача:

    \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:

  1. Розв’язуємо задачу Коші \eqref{eq:11.1.3}, знаходимо .

  2. Розв’язуємо задач Коші \eqref{eq:11.1.4}, знаходимо .

  3. Розв’язуємо СЛАР \eqref{eq:11.1.6}, знаходимо , .

  4. знаходимо з \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:

  1. Розв’язуємо СЛАР \eqref{eq:11.1.7}–\eqref{eq:11.1.8}.

  2. Розв’язуємо задачу Коші \eqref{eq:11.1.9}.

  3. Розв’язуємо задач Коші \eqref{eq:11.1.10}.

  4. Розв’язуємо СЛАР

    \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}

  5. Розв’язок

    \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:

  1. Розв’язуємо СЛАР \eqref{eq:11.1.7}–\eqref{eq:11.1.8}.

  2. Розв’язуємо задачу Коші \eqref{eq:11.1.9}.

  3. Розв’язуємо задач Коші \eqref{eq:11.1.10} і запам’ятовуємо лише .

  4. Розв’язуємо СЛАР \eqref{eq:11.1.11}.

  5. Розв’язуємо ще одну задачу Коші:

    \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}

  6. Тоді за формулою \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}– — лінійна і розв’язується методом стрільби (з ортогоналізацією). Розв’язавши цю задачу, маємо настуне наближення . Цей процес продовжуємо до виконання умови точності .

Недоліки методу:

  1. Наявність похідної в правій частині. Оскільки розв’язок задач Коші чисельний, то для її обчислення треба застосовувати формули чисельного диференціювання. Це може привести до великих похибок за рахунок нестійкості задачі чисельного диференціювання.

  2. Збіжність залежить від вибору .

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.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} цим методом такий:

  1. Розв’язуємо задачу Коші \eqref{eq:11.4.3} . Задаємо початкові значення

  2. Для розв’язуємо лінійні крайові задачі:

    \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}

  3. Продовжуємо розв’язок по параметру :

    \begin{equation} \vec V^{(k + 1)}(x) = \vec V^{(k)}(x) + \Delta \lambda \vec Z^{(k)}(x). \end{equation}

  4. Шуканий розв’язок .

Лінійні крайові задачі пункту 2 розв’язуються, наприклад, методом стрільби. Для розв’язання задачі Коші \eqref{eq:11.4.8} можна застосовувати більш точні методи ніж метод Ейлера.