Обратная подстановка (вещественный вариант): различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Строка 67: Строка 67:
  
 
При классификации по последовательной сложности, таким образом, обратный ход метода Гаусса относится к алгоритмам ''с квадратической сложностью''.
 
При классификации по последовательной сложности, таким образом, обратный ход метода Гаусса относится к алгоритмам ''с квадратической сложностью''.
 +
 +
=== Информационный граф ===
 +
 +
Опишем [[глоссарий#Граф алгоритма|граф алгоритма]] как аналитически, так и в виде рисунка.
 +
 +
Граф алгоритма состоит из двух групп вершин, расположенных в целочисленных узлах двух областей разной размерности.
  
 
[[Файл:DirectU.png|600px|thumb|left|описание]]
 
[[Файл:DirectU.png|600px|thumb|left|описание]]
 +
 +
'''Первая''' группа вершин расположена в одномерной области, соответствующая ей операция вычисляет функцию деления.
 +
Естественно введённая единственная координата каждой из вершин <math>i</math> меняется в диапазоне от <math>1</math> до <math>n</math>, принимая все целочисленные значения.
 +
 +
Делимое в этой операции:
 +
 +
* при <math>i = n</math> — элемент ''входных данных'', а именно  <math>y_{n}</math>;
 +
* при <math>i < n</math> — результат срабатывания операции, соответствующей вершине из второй группы, с координатами <math>i</math>, <math>i+1</math>.
 +
 +
Делитель для этой операции - элемент ''входных данных'', а именно  <math>u_{nn}</math>.
 +
 +
Результат срабатывания операции является ''выходным данным'' <math>x_{i}</math>.
 +
 +
'''Вторая''' группа вершин расположена в двумерной области, соответствующая ей операция  <math>a - b * c</math>.
 +
Естественно введённые координаты области таковы:
 +
* <math>i</math> — меняется в диапазоне от <math>n-1</math> до <math>1</math>, принимая все целочисленные значения;
 +
* <math>j</math> — меняется в диапазоне от <math>n</math> до <math>i+1</math>, принимая все целочисленные значения.
 +
 +
Аргументы операции следующие:
 +
*<math>a</math>:
 +
** при <math>j = n</math> элемент входных данных <math>y_{i}</math>;
 +
** при <math>j < n</math> — результат срабатывания операции, соответствующей вершине из второй группы, с координатами <math>i, j+1</math>;
 +
*<math>b</math> — элемент ''входных данных'', а именно  <math>u_{ij}</math>;
 +
*<math>c</math> — результат срабатывания операции, соответствующей вершине из первой группы, с координатой <math>j</math>;
 +
 +
Результат срабатывания операции является ''промежуточным данным'' алгоритма.
 +
 +
Описанный граф можно посмотреть на рисунке, выполненном для случая <math>n = 5</math>. Здесь вершины первой группы обозначены розовым цветом и знаком деления, вершины второй — зелёным цветом и буквой f. Изображена подача только входных данных из вектора <math>y_{i}</math>, подача элементов матрицы <math>U</math>, идущая во все вершины, на рисунке не представлена.

Версия 12:09, 11 сентября 2014

1 Описание свойств и структуры алгоритма

1.1 Словесное описание алгоритма

Обратный ход метода Гаусса - решение СЛАУ Ux = y с правой треугольной матрицей U. Матрица U - одна из составляющих матрицы A и получается либо из LU-разложения последней каким-либо из многочисленных способов (например, простое разложение Гаусса, разложение Гаусса с выбором ведущего элемента, компактная схема Гаусса, разложение Холецкого и др.), либо из других разложений. В силу треугольности U решение СЛАУ является одной из модификаций общего метода подстановки и записывается простыми формулами.

1.2 Математическое описание

Исходные данные: правая треугольная матрица U (элементы u_{ij}), вектор правой части y (элементы y_{i}).

Вычисляемые данные: вектор решения x (элементы x_{i}).

Формулы метода:

\begin{align} x_{n} & = y_{n}/u_{nn} \\ x_{i} & = \left (y_{i} - \sum_{j = i+1}^{n} u_{ij} x_{j} \right ) / u_{ii}, \quad i \in [1, n - 1]. \end{align}

Существует также блочная версия метода, однако в данном описании разобран только точечный метод.

1.3 Вычислительное ядро алгоритма

Вычислительное ядро обратного хода метода Гаусса можно составить из множественных (всего их n) вычислений скалярных произведений строк матрицы U на уже вычисленную часть вектора x:

\sum_{j = i+1}^{n} u_{ij} x_{j}

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

y_{i} - \sum_{j = i+1}^{n} u_{ij} x_{j}

в которых и встречаются скалярные произведения, ведутся не в порядке «вычислили скалярное произведение, а потом вычли его из элемента», а путём вычитания из элемента покомпонентных произведений, являющихся частями скалярных произведений. Поэтому следует считать вычислительным ядром метода не вычисления скалярных произведений, а вычисления выражений

y_{i} - \sum_{j = i+1}^{n} u_{ij} x_{j}

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

1.4 Макроструктура алгоритма

Как уже записано в описании ядра алгоритма, основную часть метода составляют множественные (всего n-1) вычисления сумм

y_{i} - \sum_{j = i+1}^{n} u_{ij} x_{j}

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

1.5 Описание схемы реализации последовательного алгоритма

Чтобы понять последовательность исполнения, перепишем формулы метода так:

1. x_{n} = y_{n}/u_{nn}

Далее для всех i от n-1 до 1 по убыванию выполняются

2. x_{i} = \left (y_{i} - \sum_{j = i+1}^{n} u_{ij} x_{j} \right ) / u_{ii}

Особо отметим, что вычисления сумм вида y_{i} - \sum_{j = i+1}^{n} u_{ij} x_{j} производят в режиме накопления вычитанием из y_{i} произведений u_{ij} x_{j} для j от n до i + 1, c убыванием j. Другие порядки выполнения суммирования приводят к резкому ухудшению параллельных свойств алгоритма, хотя, к сожалению, остаются кое-где в литературе и пакетах программ.

1.6 Последовательная сложность алгоритма

Для обратного хода метода Гаусса порядка n в последовательном (наиболее быстром) варианте требуется:

  • n делений,
  • по \frac{n^2-n}{2} умножений и сложений (вычитаний) — основная часть алгоритма.

При этом использование режима накопления требует совершения умножений и вычитаний в режиме двойной точности (или использования функции вроде DPROD в Фортране), что ещё больше увеличивает долю умножений и сложений/вычитаний во времени, требуемом для выполнения обратного хода метода Гаусса.

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

1.7 Информационный граф

Опишем граф алгоритма как аналитически, так и в виде рисунка.

Граф алгоритма состоит из двух групп вершин, расположенных в целочисленных узлах двух областей разной размерности.

описание

Первая группа вершин расположена в одномерной области, соответствующая ей операция вычисляет функцию деления. Естественно введённая единственная координата каждой из вершин i меняется в диапазоне от 1 до n, принимая все целочисленные значения.

Делимое в этой операции:

  • при i = n — элемент входных данных, а именно y_{n};
  • при i \lt n — результат срабатывания операции, соответствующей вершине из второй группы, с координатами i, i+1.

Делитель для этой операции - элемент входных данных, а именно u_{nn}.

Результат срабатывания операции является выходным данным x_{i}.

Вторая группа вершин расположена в двумерной области, соответствующая ей операция a - b * c. Естественно введённые координаты области таковы:

  • i — меняется в диапазоне от n-1 до 1, принимая все целочисленные значения;
  • j — меняется в диапазоне от n до i+1, принимая все целочисленные значения.

Аргументы операции следующие:

  • a:
    • при j = n элемент входных данных y_{i};
    • при j \lt n — результат срабатывания операции, соответствующей вершине из второй группы, с координатами i, j+1;
  • b — элемент входных данных, а именно u_{ij};
  • c — результат срабатывания операции, соответствующей вершине из первой группы, с координатой j;

Результат срабатывания операции является промежуточным данным алгоритма.

Описанный граф можно посмотреть на рисунке, выполненном для случая n = 5. Здесь вершины первой группы обозначены розовым цветом и знаком деления, вершины второй — зелёным цветом и буквой f. Изображена подача только входных данных из вектора y_{i}, подача элементов матрицы U, идущая во все вершины, на рисунке не представлена.