3. Методи розв’язання систем лінійних алгебраїчних рівнянь (СЛАР)

Методи розв’язування СЛАР поділяються на прямі та ітераційні. При умові точного виконання обчислень прямі методи за скінчену кількість операцій в результаті дають точний розв’язок. Використовуються вони для невеликих та середніх СЛАР . Ітераційні методи використовуються для великих СЛАР , як правило розріджених. В результаті отримуємо послідовність наближень, яка збігається до розв’язку.

3.1. Метод Гаусса

Література:

Розглянемо задачу розв’язання СЛАР

\begin{equation} \label{eq:3.1.1} A \vec x = \vec b, \end{equation}

причому , , , . Метод Крамера з обчисленням визначників для такої системи має складність .

Запишемо СЛАР у вигляді

\begin{equation} \left\{ \begin{aligned} & a_{1, 1} x_1 + a_{1, 2} x_2 + \ldots + a_{1, n} x_n = b_1 \equiv a_{1, n + 1}, \newline & a_{2, 1} x_1 + a_{2, 2} x_2 + \ldots + a_{2, n} x_n = b_2 \equiv a_{2, n + 1}, \newline & \ldots \newline & a_{n, 1} x_1 + a_{n, 2} x_2 + \ldots + a_{n, n} x_n = b_n \equiv a_{n, n + 1}. \end{aligned} \right. \end{equation}

Якщо , то ділимо перше рівняння на нього і виключаємо з інших рівнянь:

\begin{equation} \left\{ \begin{aligned} x_1 + a_{1, 2}^{(1)} x_2 + \ldots + a_{1, n}^{(1)} x_n = a_{1, n + 1}^{(1)}, & \newline a_{2, 2}^{(1)} x_2 + \ldots + a_{2, n}^{(1)} x_n = a_{2, n + 1}^{(1)}, & \newline \ldots & \newline a_{n, 2} x_2^{(1)} + \ldots + a_{n, n}^{(1)} x_n = a_{n, n + 1}^{(1)} &. \end{aligned} \right. \end{equation}

Процес повторюємо для . В результаті отримуємо систему з трикутною матрицею

\begin{equation} \left\{ \begin{aligned} x_1 + a_{1, 2}^{(1)} x_2 + \ldots + a_{1, n}^{(1)} x_n = a_{1, n + 1}^{(1)}, & \newline x_2 + \ldots + a_{2, n}^{(2)} x_n = a_{2, n + 1}^{(2)}, & \newline \ldots & \newline x_n = a_{n, n + 1}^{(n)}. & \end{aligned} \right. \end{equation}

Тобто

\begin{equation} \label{eq:3.1.2} A^{(n)} \vec x = \vec a^{(n)}. \end{equation}

Це прямий хід методу Гаусса. Формули прямого ходу

for k in range(1, n):
  for j in range(k + 1, n + 2):
    a[k, j][k] = a[k, j][k - 1] / a[k, k][k - 1]
    for i in range(k + 1, n + 1):
      a[i, j][k] = a[i, j][k - 1] - \
        a[i, j][k - 1] * a[k, j][k]

Звідси

\begin{equation} \label{eq:3.1.3} x_n = a_{n, n + 1}^{(n)}, \quad x_i = a_{i, n + 1}^{(i)} - \Sum_{j = i + 1}^n a_{i, j}^{(n)} x_j, \end{equation}

для . Це формули оберненого ходу.

Складність, тобто кількість операцій, яку необхідно виконати для реалізації методу: для прямого ходу, для оберненого ходу.

Умова

\begin{equation} a_{k, k}^{(k - 1)} \ne 0 \end{equation}

не суттєва, оскільки знайдеться , для якого

\begin{equation} \left\vert a_{m, k}^{(k - 1)} \right\vert = \Max_i \left\vert a_{i, k}^{(k - 1)} \right\vert \ne 0 \end{equation}

(оскільки ). Тоді міняємо місцями рядки номерів і .

Означення: Елемент

\begin{equation} a_{k, k}^{(k - 1)} \ne 0 \end{equation}

називається ведучим.

Введемо матриці

\begin{equation} M_k = \begin{pmatrix} 1 & \cdots & 0 & \cdots & 0 \newline \vdots & \ddots & \vdots & \ddots & \vdots \newline 0 & \cdots & m_{k,k} & \cdots & 0 \newline \vdots & \ddots & \vdots & \ddots & \vdots \newline 0 & \cdots & m_{n,k} & \cdots & 1 \end{pmatrix} \end{equation}

елементи якої обчислюється так:

\begin{equation} m_{k, k} = \frac{1}{a_{k, k}^{(k - 1)}}, \quad m_{k, k} = - \frac{a_{i, k}^{(k - 1)}}{a_{k, k}^{(k - 1)}}. \end{equation}

Нехай на -му кроці . Множимо цю СЛАР зліва на : . Позначимо ; . Тоді прямий хід методу Гаусса можна записати у вигляді

\begin{equation} M_n M_{n - 1} \ldots M_1 A \vec x = M_n M_{n - 1} \ldots M_1 \vec b. \end{equation}

Позначимо останню систему, яка співпадає з \eqref{eq:3.1.2}, так

\begin{equation} \label{eq:3.1.4} U \vec x = \vec c, \quad U = (u_{i, j})\void_{i, j = 1}^n, \end{equation}

причому

\begin{equation} \begin{cases} u_{i, i} = 1, & \newline u_{i, j} = 0, & i > j. \end{cases} \end{equation}

Таким чином . Введемо матриці

\begin{equation} L_k = M_k^{-1} = \begin{pmatrix} 1 & \cdots & 0 & \cdots & 0 \newline \vdots & \ddots & \vdots & \ddots & \vdots \newline 0 & \cdots & a_{k,k}^{(k-1)} & \cdots & 0 \newline \vdots & \ddots & \vdots & \ddots & \vdots \newline 0 & \cdots & a_{n,k}^{(k-1)} & \cdots & 1 \end{pmatrix} \end{equation}

Тоді

\begin{equation} A = L_1 \ldots L_n U = L U; \quad L = L_1 \ldots L_n, \end{equation}

де — нижня трикутня матриця, — верхня трикутня матриця. Таким чином метод Гаусса можна трактувати, як розклад матриці в добуток двох трикутних матриць — -розклад.

Введемо матрицю перестановок на -му кроці (це матриця, отримана з одиничної матриці перестановкою -того і -того рядка). Тоді при множені на неї матриці робимо ведучим елементом максимальний за модулем.

\begin{equation} P_k = \begin{pmatrix} 1 & \cdots & 0 & \cdots & 0 & \cdots & 0 \newline \vdots & \ddots & \vdots & \ddots & \vdots & \ddots & \vdots \newline 0 & \cdots & 0 & \cdots & 1 & \cdots & 0 \newline \vdots & \ddots & \vdots & \ddots & \vdots & \ddots & \vdots \newline 0 & \cdots & 1 & \cdots & 0 & \cdots & 0 \newline \vdots & \ddots & \vdots & \ddots & \vdots & \ddots & \vdots \newline 0 & \cdots & 0 & \cdots & 0 & \cdots & 1 \newline \end{pmatrix} \end{equation}

За допомогою цих матриць перехід до трикутної системи \eqref{eq:3.1.4} тепер має вигляд:

\begin{equation} M_n M_{n - 1} P_{n - 1} \ldots M_1 P_1 A \vec x = M_n M_{n - 1} P_{n - 1} \ldots M_1 P_1 \vec b. \end{equation}

Твердження: Знайдеться така матриця перестановок, що — розклад матриці на нижню трикутну з ненульовими діагональними елементами і верхню трикутну матрицю з одиницями на діагоналі.

Висновки про переваги трикутного розкладу:

3.2. Метод квадратних коренів

Література:

Цей метод призначений для розв’язання систем рівнянь із симетричною матрицею

\begin{equation} \label{eq:3.2.1} A \vec x = \vec b, \quad A^\intercal = A. \end{equation}

Він оснований на розкладі матриці в добуток:

\begin{equation} \label{eq:3.2.2} A = S^\intercal D S, \end{equation}

де — верхня трикутна матриця, — нижня трикутна матриця, — діагональна матриця.

Виникає питання: як обчислити , по матриці ? Маємо

\begin{equation} \label{eq:3.2.3} DS_{i, j} = \begin{cases} d_{i, i} s_{i, j}, & i \le j, \newline 0, & i > j. \end{cases} \end{equation}

Далі

\begin{equation} \begin{aligned} S^\intercal DS_{i, j} &= \Sum_{l = 1}^n s_{i, l}^\intercal d_{l, l} s_{l, j} = \newline &= \Sum_{l = 1}^{i - 1} s_{l, i}^\intercal s_{l, j} d_{l, l} + s_{i, i} s_{i, j} d_{i, i} + \newline &\quad + \underset{= 0}{\underbrace{s_{l, i}^\intercal \Sum_{l = i + 1}^n s_{l, i}^\intercal s_{l, j} d_{l, l}}} = a_{i, j}, \end{aligned} \end{equation}

для .

Якщо , то

\begin{equation} \vert s_{i, i}^2 \vert d_{i, i} = a_{i, i} - \Sum_{l = 1}^{i - 1} \vert s_{l, i}^2 \vert d_{l, l} \equiv p_i. \end{equation}

Тому

\begin{equation} d_{i,i} = \text{sign}(p_i), \quad s_{i,i} = \sqrt{\vert p_i \vert}. \end{equation}

Якщо , то

\begin{equation} s_{i,j} = \left( a_{i,j} - \Sum_{l = 1}^{i - 1} s_{l,i}^\intercal d_{l,l} s_{l,j} \right) / (s_{i,i} d_{i,i}), \end{equation}

де , а .

Якщо (тобто головні мінори матриці додатні), то всі .

Знайдемо розв’язок рівняння \eqref{eq:3.2.1}. Враховуючи \eqref{eq:3.2.2}, маємо:

\begin{equation} \label{eq:3.2.4} S^\intercal D \vec y = \vec b \end{equation}

і

\begin{equation} \label{eq:3.2.5} S \vec x = \vec y \end{equation}

Оскільки — верхня трикутна матриця, а — нижня трикутна матриця, то

\begin{equation} \label{eq:3.2.6} y_i = \frac{b_i - \Sum_{j = 1}^{i - 1} s_{j,i} d_{j,j} y_j}{s_{i,i} d_{i,i}}, \end{equation}

для і

\begin{equation} \label{eq:3.2.7} x_i = \frac{y_i - \Sum_{j = 1}^{i - 1} s_{i, j} x_j}{s_{i,i}}, \end{equation}

для , де .

Метод застосовується лише для симетричних матриць. Його складність .

Переваги цього методу:

Остання властивість дає економію в пам’яті та кількості арифметичних операцій. Наприклад, якщо має ненульових стрічок по діагоналі (-діагональна), то .

3.3. Обчислення визначника та оберненої матриці

Література:

Кількість операцій обчислення детермінанту за означенням — . В методі Гаусса — . Тому

\begin{equation} \det P \det A = \det L \det U \end{equation}

звідки

\begin{equation} \det A = (-1)^\ell \det L \det U = (-1)^\ell \Prod_{k = 1}^n a_{k, k}^{(k)}, \end{equation}

де — кількість перестановок. Ясно, що за методом Гаусса

\begin{equation} Q_{\det} = \frac{2}{3} \cdot n^3 + O(n^2) \end{equation}

В методі квадратного кореня . Тому

\begin{equation} \label{eq:3.4.2} \det A = \det S^\intercal \det D \det S = \Prod_{k = 1}^n d_{k, k} \Prod_{k = 1}^n s_{k, k}^2. \end{equation}

Тепер .

За означенням

\begin{equation} \label{eq:3.4.3} A A^{-1} = E, \end{equation}

де обернена до матриці . Позначимо

\begin{equation} A^{-1} = (\alpha_{i, j})\void_{i, j = 1}^n. \end{equation}

Тоді — вектор-стовпчик оберненої матриці. З \eqref{eq:3.4.3} маємо

\begin{equation} \label{eq:3.4.5} A \vec \alpha_j = \vec e_j, \quad j = \overline{1, n}. \end{equation}

де — стовпчики одиничної матриці: ,

\begin{equation} \delta_{i, j} = \begin{cases} 1, & i = j, \newline 0, & i \ne j. \end{cases} \end{equation}

Для знаходження необхідно розв’язати систем. Для знаходження методом Гаусса необхідна кількість операцій .

3.4. Метод прогонки

Література:

Це економний метод для розв’язання СЛАР з три діагональною матрицею:

\begin{equation} \left\{ \begin{aligned} & - c_0 y_0 + b_0 y_1 = - f_0, \newline & a_i y_{i - 1} - c_i y_i + b_i y_{i + 1} = - f_i, \newline & a_N y_{N - 1} - c_N y_N = - f_N. \end{aligned} \right. \end{equation}

Матриця системи

\begin{equation} A = \begin{pmatrix} -c_0 & b_1 & & 0 \newline a_0 & \ddots & \ddots & \newline & \ddots & \ddots & b_N \newline 0 & & a_N & -c_N \end{pmatrix} \end{equation}

тридіагональна.

Розв’язок представимо у вигляді

\begin{equation} \label{eq:3.4.4} y_i = \alpha_{i + 1} y_{i + 1} + \beta_{i + 1}, \quad i = \overline{0, N - 1}. \end{equation}

Замінимо в \eqref{eq:3.4.4} i і підставимо в \eqref{eq:3.4.2}, тоді

\begin{equation} (a_i \alpha_i - c_i) \cdot y_i + b_i y_{i + 1} = - f_i - a_i \beta_i \end{equation}

Звідси

\begin{equation} y_i = \frac{b_i}{c_i - a_i \alpha_i} \cdot y_{i + 1} + \frac{f_i + a_i \beta_i}{c_i - a_i \alpha_i}. \end{equation}

Тому з \eqref{eq:3.4.5}

\begin{equation} \alpha_{i + 1} = \frac{b_i}{c_i - a_i \alpha_i}, \quad \beta_{i + 1} = \frac{f_i + a_i \beta_i}{c_i - a_i \alpha_i}, \quad i = \overline{1, N - 1}. \end{equation}

Умова розв’язності .

Щоб знайти всі , , треба задати перші значення. З :

\begin{equation} \alpha_1 = \frac{b_0}{c_0}, \quad \beta_1 = \frac{f_0}{c_0}. \end{equation}

Після знаходження всіх , обчислюємо з системи

\begin{equation} \left\{ \begin{aligned} & a_N y_N - c_N y_N = - f_N, \newline & y_{N - 1} = \alpha_N y_N + \beta_N. \end{aligned} \right. \end{equation}

Звідси

\begin{equation} y_N = \frac{f_N + a_N \beta_N}{c_N - a_N \alpha_N}. \end{equation}

Алгоритм:

alpha[1], beta[1] = b[0] / c[0], f[0] / c[0]

for i in range(1, N):
  z[i] = c[i] - a[i] * alpha[i]
  alpha[i + 1], beta[i + 1] = b[i] / z[i], \
    (f[i] + a[i] * beta[i]) / z[i]

y[N] = (f[N] + a[N] * beta[N]) / \
  (c[N] - a[N] * alpha[N])

for i in range(N - 1, -1, -1):
  y[i] = alpha[i + 1] * y[i + 1] + beta[i + 1]

Складність алгоритму .

Метод можна застосовувати, коли , . Якщо то (тут абсолютна похибка обчислення ), а це приводить до експоненціального накопичення похибок заокруглення, тобто нестійкості алгоритму прогонки.

Теорема (про достатні умови стійкості метода прогонки): Нехай , та

\begin{equation} \vert c_i \vert \ge \vert a_i \vert + \vert b_i \vert, \quad \forall i, \quad a_0 = b_N = 0, \end{equation}

та хоча би одна нерівність строга. Тоді та

\begin{equation} z_i = c_i - a_i \alpha_i \ne 0, \quad i = \overline{1, N}. \end{equation}

Задача 8: Довести теорему про стійкість методу прогонки.

3.5. Обумовленість систем лінійних алгебраїчних рівнянь

Література:

Нехай задано СЛАР

\begin{equation} \label{eq:3.5.1} A \vec x = \vec b. \end{equation}

Припустимо, що матриця і права частина системи задані неточно і фактично розв’язуємо систему

\begin{equation} \label{eq:3.5.2} B \vec y = \vec h, \end{equation}

де , , .

Малість детермінанту не є необхідною умовою різкого збільшення похибки. Це ілюструє наступний приклад:

\begin{equation} A = \text{diag}(\varepsilon), \quad a_{i,j} = \varepsilon \delta_{i,j}. \end{equation}

Тоді , але . Тому .

Оцінимо похибку розв’язку. Підставивши значення , , та , отримаємо:

\begin{equation} (A+C)(\vec x + \vec z) = \vec b +\vec \eta. \end{equation}

Віднімемо від цієї рівності \eqref{eq:3.5.1} у вигляді . Тоді

\begin{equation} A \vec z = \vec \eta - C \vec x - C \vec z, \quad \vec z = A^{-1}(\vec \eta - C \vec x - C \vec z). \end{equation}

Означення: Введемо норми векторів: :

\begin{align} |\vec z|\void_1 &= \Sum_{i=1}^n |z_i|, \newline |\vec z|\void_2 &= \left(\Sum_{i=1}^n |z_i|^2\right)^{1/2}, \newline |\vec z|\void_\infty &= \Max_i |z_i|. \end{align}

Означення:_ Норми матриці_, що відповідають нормам вектора, тобто

\begin{equation} |A|\void_m = \Sup_{|\vec x|\void_m \ne 0} \frac{|A\vec x|\void_m}{|\vec x|\void_m}, \quad m=1,2,\infty. \end{equation}

такі:

\begin{align} |A|\void_1 &= \Max_j \Sum_{i=1}^n \vert a_{i,j}\vert, \newline |A|\void_2 &= \Max_i \sqrt{\lambda_i (A^\intercal A)}, \newline |A|\void_\infty &= \Max_i \Sum_{j=1}^n \vert a_{i,j}\vert, \end{align}

де — власні значення матриці .

Позначимо , , — відносні похибки , , , де — одна з введених вище норм.

Для характеристики зв’язку між похибками правої частини та розв’язку вводять поняття обумовленості матриці системи.

Означення: Число обумовленості матриці .

Теорема: Якщо та , то

\begin{equation} \label{eq:3.5.3} \delta(\vec x) \le \dfrac{\cond (A)}{1-\cond (A)\cdot\delta(A)}(\delta(A)+\delta(\vec b)), \end{equation}

де — число обумовленості.

Доведення:

\begin{equation} A \vec z = \vec \eta - C \vec x - C \vec z, \quad \vec z = A^{-1} \vec \eta - A^{-1} C \vec x - A^{-1} C \vec z \end{equation}

\begin{equation} \begin{aligned} |\vec z| &\le |A^{-1}\vec \eta|+|A^{-1}C\vec x| +|A^{-1}C\vec z| \le \newline &\le |A^{-1}|\cdot|\vec \eta|+|A^{-1}|\cdot |C|\cdot |\vec x| +|A^{-1}|\cdot |C|\cdot |\vec z|. \end{aligned} \end{equation}

\begin{equation} |\vec z| \le \dfrac{|A^{-1}|\cdot(|\vec\eta|+|C|\cdot|\vec x|)}{1 - |A^{-1}| \cdot |C|} \end{equation}

Оцінка похибки

\begin{equation} \begin{aligned} \delta(\vec x) &\le \dfrac{|A^{-1}|}{1-|A^{-1}| \cdot |C|} \left(\dfrac{|\vec \eta|}{|\vec x|}+|C| \right) = \newline &= \dfrac{|A^{-1}|\cdot |A|}{1-|A^{-1}|\cdot|A|\cdot \dfrac{|C|}{|A|}} \left(\dfrac{|\vec \eta|}{|A|\cdot |\vec x|} + \delta(A) \right) \le \newline &\le \dfrac{\cond (A)}{1-\cond(A)\cdot\delta(A)}\left(\dfrac{|\vec\eta|}{|\vec x|}+\delta(A)\right). \quad \square \end{aligned} \end{equation}

Наслідок: Якщо , то .

Властивості :

Друга властивість має місце оскільки довільна норма матриці не менше її найбільшого за модулем власного значення. Значить . Оскільки власні значення матриць та взаємно обернені, то

\begin{equation} |A^{-1}| \ge \max \dfrac{1}{|\lambda_A|} = \dfrac{1}{\min|\lambda_A|}. \end{equation}

Якщо , то система називається погано обумовленою.

Оцінка впливу похибок заокруглення при обчисленні розв’язку СЛАР така (Дж. Уілкінсон): , , де — розрядність ЕОМ, — кількість розрядів, що відводиться під мантису числа. З оцінки \eqref{eq:3.5.3} витікає: . Висновок: найпростіший спосіб підвищити точність обчислення розв‘язку погано обумовленої СЛАР — збільшити розрядність ЕОМ при обчисленнях. Інші способи пов’язані з розглядом цієї СЛАР як некоректної задачі із застосуванням відповідних методів її розв’язання.

Приклад погано обумовленої системи — системи з матрицею Гільберта

\begin{equation} H_n = \left(\dfrac{1}{i+j-1}\right)\void_{i,j=1}^n, \end{equation}

наприклад .

Назад до лекцій

Назад на головну