Опубликован: 18.05.2011 | Доступ: свободный | Студентов: 968 / 105 | Оценка: 4.40 / 4.20 | Длительность: 12:30:00
Лекция 13:

Линейные уравнения

< Лекция 12 || Лекция 13 || Лекция 14 >
Аннотация: Лекция посвящена вычислительным проблемам, возникающим в задачах линейной алгебры. В основном рассматриваются методы решения системы алгебраических уравнений.

Цель лекции: Дать математическую постановку вычислительных проблем линейной алгебры. Показать, что известная структура матрицы позволяет строить более эффективные численные методы.

Задачи линейно алгебры относятся основным методам вычислительной математики. Это обусловлено тем, что линейные модели играют первостепенную роль, а их численная реализация требует решать задачи линейной алгебры. В отличии от задач математической физики задачи линейной алгебры являются конечномерными. К основным задачам линейной алгебры можно отнести задачи:

  1. Решения систем линейных алгебраических уравнений.
  2. Нахождение обратных матриц, а также приведение матриц к каноническому виду (диагональному или к форме Жордана).
  3. Нахождение собственных значений и собственных функций матриц.

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

Будем рассматривать квадратную матрицу

A=\left(%
\begin{array}{ccccc}
  a_{11} & a_{12} & \dots & a_{1n} \\
  a_{21} & a_{22} & \dots & a_{2n} \\
  \vdots & \vdots & \ddots & \vdots \\
  a_{n1} & a_{n2} & \dots & a_{nn} \\
\end{array}%
\right).
Пусть также нам задан вектор-столбец
b=\left(%
\begin{array}{c}
  b_1 \\
  b_2 \\
  \vdots \\
  b_n \\
\end{array}%
\right)
В матричной форме система линейных алгебраических уравнений может быть записана следующим образом
\begin{equation}\label{eq_m32}
Ax=b,
\end{equation} ( 12.1)
где неизвестным является вектор-столбец
x=\left(%
\begin{array}{c}
  x_1 \\
  x_2 \\
  \vdots \\
  x_n \\
\end{array}%
\right)
В развернутой форме задача 12.1 может быть записана следующим образом
\begin{array}{l}
a_{11}x_1+a_{12}x_2+\dots+a_{1n}x_n=b_1 \\
a_{21}x_1+a_{22}x_2+\dots+a_{2n}x_n=b_2 \\
\dots \\
a_{n1}x_1+a_{n2}x_2+\dots+a_{nn}x_n=b_n \\
\end{array}
Из результатов линейной алгебры следует, что если матрица A неособая, т.е. \det A\neq0, то задача 12.1 имеет единственное решение для любой правой части b. Однако на практике нахождение решений даже матриц небольшой размерности может составлять большую проблему. Дело в том, что если рассмотреть систему 2\times2, то решение этой системы имеет геометрический смысл точки пересечения двух прямых, заданный первым и вторым уравнением. Легко себе представить ситуацию, когда угол пересечения этих прямых может быть очень малым.

Для количественной оценки "сложности" решения задачи существует понятие числа обусловленности матрицы A. Для неособой матрицы A число обусловленности вводится по формуле

\mu(A)=\|A\|\|A^{-1}\|,
где \|A\| - норма матрицы, которая вводиться для матрицы A, как для ограниченного линейного оператора в пространстве \Bbb{R}^n. Можно показать, что число обусловленности \mu всегда превосходит единицу. Чем больше это число, тем "сложнее" будет решить задачу нахождение решения этой задачи.

При решении задач нахождения решения системы линейных алгебраических уравнений можно выделить два подхода: точные методы нахождения решений и итерационные методы. Сначала рассмотрим "точные" методы решения системы линейных алгебраических уравнений. Слово "точные" мы пишем в кавычках, поскольку хотя нахождение решения можно осуществить этими методам за конечное число операций, однако среди этих операций обязательно есть операции деления а, как мы уже отмечали, операция деления не всегда может быть реализованы точно.

Главным методом для прямого нахождения решений системы линейных алгебраических уравнений является метод Гаусса. Этот метод иногда называют методом исключения неизвестных. Суть этого метода состоит в том, чтобы сначала из первого уравнения выразить x_1 через коэффициенты матрицы, правую часть и x_i, i=2,3,\dots,n. Подставив это выражение для x_1 в остальных уравнениях, можно получить другую систему линейных алгебраических уравнений порядка (n-1)\times(n-1). Таким образом можно получить одно линейное уравнение относительно x_n, которое решается тривиально. Вычислив x_n через коэффициенты матрицы A и правую часть b, используя полученные ранее выражения для x_{n-1} через x_n, x_{n-2} через x_{n-1} и x_n и т.д., можно вычислить все x_i, i=1,\dots,n. Условием для выполнения этого метода является возможность осуществлять выражение x_i. Если матрица A является неособой, то условие осуществимости метода Гаусса всегда выполнено.

Следует отметить, что решение системы линейных алгебраических уравнений с полной матрицей, т.е. когда матрица не имеет специальной структуры заполнения, представляет собой довольно сложную проблему. К счастью, часто в задачах возникают системы уравнений с матрицами специального вида. Для этих случаев существуют отдельные методы, которые могут быть значительно эффективнее метода Гаусса.

Часто возникают уравнения с симметричной положительно определенной матрицей. Для таких уравнений мы рассмотрим метод Холецкого. Пусть наша система уравнений задана с помощью симметричной положительно определенной матрицей A. Метод Холецкого состоит в том, чтобы представить матрицу A в виде

A=LL^T,
где L - нижняя треугольная матрица L=\left(%
\begin{array}{cccc}
  l_{11} & 0 & \dots & 0 \\
  l_{21} & l_{22} & \dots & 0 \\
  \dots & \dots & \dots & \dots \\
  l_{n1} & l_{n2} & \dots & l_{nn} \\
\end{array}%
\right)
Если мы построим разложение A=LL^T, то уравнение 12.1 может быть заменено двумя уравнениями, которые можно последовательно решить
Ly=b,\quad L^Tx=y.
Обращение треугольной матрицы проблемы не составляет и может быть осуществлено по рекуррентным формулам. Метод Холецкого состоит в том, что элементы матрицы L находятся последовательно по формулам
\begin{array}{ll}
l_{11}=(a_{11})^{1/2}, &  \\ \\
l_{i1}=a_{i1}/l_{11}, & i=2,3,\dots,n; \\ \\
\dots &  \\ \\
l_{kk}=(a_{kk}-l_{k1}^2-l_{k2}^2-\dots-l_{k,k-1}^2)^{1/2}, &  \\
\\
l_{ik}=(a_{ik}-l_{i1}l_{k1}-l_{i2}l_{k2}-\dots-l_{i,k-1}l_{k,k-1})/l_{kk},
& i=k+1,\dots,n; \\ \\
\dots &  \\ \\
l_{mm}=(a_{mm}-l_{m1}^2-l_{m2}^2-\dots-l_{m,m-1}^2)^{1/2}. &  \\
\end{array}

В приложениях часто возникают другие уравнения специального вида. В этих уравнениях матрица является трехдиагональной. Для таких уравнений существует очень эффективный алгоритм, называемый методом прогонки.

Пусть нам необходимо решить следующее уравнение

\begin{array}{c}
a_0z_0+c_0z_1=d_0 \\ \\
b_nz_{n-1}+a_nz_n+c_nz_{n+1}=d_n,\ n=1,\dots,N-1 \\ \\
b_Nz_{N-1}+a_Nz_N=d_N \\
\end{array} ( 12.2)
Сначала мы определяем прогоночные коэффициенты \alpha_n и \beta_k согласно следующим рекуррентным соотношениям
\alpha_0=-\frac{c_0}{a_0},\quad \beta_0=\frac{d_0}{a_0}
\alpha_n=-\frac{c_n}{a_n+b_n\alpha_{n-1}},\quad
\beta_n=\frac{d_n-b_n\beta_{n-1}}{a_n+b_n\alpha_{n-1}},\quad
n=1,2,\dots,N-1.
После вычисления прогоночных коэффициентов можно рекуррентно вычислить и решения уравнения 12.2
z_N=\frac{d_N-b_N\beta_{N-1}}{a_N+b_N\alpha_{N-1}},
z_n=\alpha_nz_{n+1}+\beta_n,\quad n=N-1,N-2,\dots,0.

Приведем класс на языке C#, который будем обращать трехдиагональную матрицу методом прогонки.

\begin{verbatim}
class TProgon
{
    public double[] a;
    public double[] b;
    public double[] c;
    public double[] d;

    public double[] z;

    double[] alpha;
    double[] beta;

    public void CalcZ()
    {
        int N = a.Count();

        alpha = new double[N];
        beta = new double[N];

        z = new double[N + 1];

        alpha[0] = -c[0] / a[0];
        beta[0] = d[0] / a[0];
\end{verbatim}
\begin{verbatim}
        int n;

        for (n = 1; n < N; n++)
        {
            alpha[n] = -(c[n]) / (a[n] + b[n] * alpha[n - 1]);

            beta[n] = (d[n] - b[n] * beta[n - 1]) /
             (a[n] + b[n] * alpha[n - 1]);
        }

        z[N] = (d[N] - b[N] * beta[N - 1]) /
        (a[N] + b[N] * alpha[N - 1]);

        for (n = N - 1; n <= 0; n--)
        {
            z[n] = alpha[n] * z[n + 1] + beta[n];
        }
    }
}
\end{verbatim}
Апробацию нашего класса мы проведем в лекции, посвященной кубическим сплайнам. При построении сплайнов возникает необходимость решать систему алгебраических уравнений с трехдиагональной матрицей.

Ключевые термины

Невырожденная матрица - квадратная матрица с определителем отличным от нуля.

Число обусловленности матрицы - числовая характеристика вычислительной сложности обращения матрицы.

Метод Гаусса - основной метод нахождения решений системы линейных алгебраических уравнений с помощью последовательного исключения неизвестных.

Метод Холецкого - метод для обращения симметричных положительно определенных матриц.

Метод прогонки - метод для обращения трехдиагональной матрицы.

Краткие итоги: Рассмотрены численные методы решения задач линейной алгебры. Приведены различные методы, соответствующие матрицам специального вида.

< Лекция 12 || Лекция 13 || Лекция 14 >