Difference between revisions of "Givens method"

From Algowiki
Jump to navigation Jump to search
[unchecked revision][unchecked revision]
Line 72: Line 72:
 
Thus, in terms of serial complexity, Givens' method is qualified as a cubic complexity algorithm.  
 
Thus, in terms of serial complexity, Givens' method is qualified as a cubic complexity algorithm.  
  
=== Информационный граф ===
+
 
 +
'''1.7 Information graph'''
 +
 
 +
The macrograph of the algorithm is shown in fig. 1, while the graphs of the macrovertices are depicted in the subsequent figures.
 +
 
 +
Figure 1. Graph of the algorithm (the input and output data are not shown). n=4. F1 denotes an operation of calculating rotation parameters, and F2 denotes a rotation of a 2-dimensional vector (which is equivalent to multiplying two complex numbers).
 +
 
 +
Choice of a method for calculating rotation parameters in vertices of type F1.
 +
 +
 
 +
Figure 2. Calculation of the rotation parameters for various x and y in the vertex V2.
 +
 +
 
 +
Figure 3. Calculation of the rotation parameters in the vertex V1 (the case of identical x and у).
 +
 +
 
 +
Figure 4. Calculation of the rotation parameters in the vertex V0 (the case of zero x and у).
 +
 
 +
 +
Figure 5. The inner graph of a vertex of type F2 with its input and output parameters: (u,v) = (c,s)(x,y)
 +
 
 +
 
 +
1.8 Ресурс параллелизма алгоритма[править]
 +
Для понимания ресурса параллелизма в разложении матрицы порядка n методом Гивенса рассмотрим критический путь графа.
 +
Как видно из описания подграфов, макровершина вычисления параметров поворота F1 в графе намного "весомее" вершины поворота F2. А именно, в макровершине поворота критический путь - всего-навсего одно умножение (их 4, но все можно выполнить параллельно) и одно сложение/вычитание (их 2, но они тоже параллельны). А вот макровершина вычисления параметров даёт в худшем случае критический путь , в котором одно вычисление квадратного корня, и по две операции деления, умножения, сложения/вычитания.
 +
Поэтому по грубой оценке критический путь в основном будет идти через 2n-3 макровершины вычисления параметров F1, а также через n-1 макровершин поворотов. В сумме это даёт критический путь, проходящий по 2n-3 операциям вычисления квадратного корня, 4n-6 делениям, по 5n-7 умножениям и сложениям/вычитаниям. В макрографе, представленном на рисунке, один из критических путей может быть представлен, например, как прохождение по "верхней линии" вершин F1 (это n-1 штук) и затем попеременное выполнение F2 и F1 (n-2 раза), после чего ещё одно выполнение F2.
 +
Таким образом, в параллельном варианте, в отличие от последовательного, вычисления квадратных корней и деления будут определять довольно значительную долю требуемого времени. При реализации на конкретных архитектурах наличие в отдельных ярусах ЯПФ отдельных вычислений квадратных корней и делений может породить и другие проблемы. Например, при реализации на ПЛИСах остальные вычисления (умножения и сложения/вычитания) могут быть конвейеризованы, что даёт экономию и по ресурсам на программируемых платах; вычисления же квадратных корней из-за их изолированности приведут к занятию ресурсов на платах, которые будут простаивать большую часть времени.
 +
При классификации по высоте ЯПФ, таким образом, метод Гивенса относится к алгоритмам с линейной сложностью. При классификации по ширине ЯПФ его сложность будет квадратичной.
 +
1.9 Входные и выходные данные алгоритма[править]
 +
Входные данные: плотная квадратная матрица A (элементы a_{ij}).
 +
Объём входных данных: n^2.
 +
Выходные данные: правая треугольная матрица R (ненулевые элементы r_{ij} в последовательном варианте хранятся в элементах исходной матрицы a_{ij}), унитарная (ортогональная) матрица Q - как произведение матриц вращения (их параметры t_{ij} в последовательном варианте хранятся в элементах исходной матрицы a_{ij}).
 +
Объём выходных данных: n^2.
 +
1.10 Свойства алгоритма[править]
 +
Соотношение последовательной и параллельной сложности, как хорошо видно, является квадратичным, что даёт хороший стимул для распараллеливания.
 +
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, линейна.
 +
Алгоритм в рамках выбранной версии полностью детерминирован.
 +
Вычислительная погрешность в методе Гивенса (вращений) растет линейно, как и в методе отражений (Хаусхолдера).
 +
2 Программная реализация[править]
 +
2.1 Особенности реализации последовательного алгоритма[править]
 +
В простейшем варианте метод Гивенса (вращений) QR-разложения квадратной вещественной матрицы на Фортране можно записать так:
 
Макрограф алгоритма изображён на рисунке 1, графы макровершин - на последующих.
 
Макрограф алгоритма изображён на рисунке 1, графы макровершин - на последующих.

Revision as of 15:53, 23 January 2016


Primary authors of this description: A.V.Frolov, Vad.V.Voevodin (Section 2.2)


1 Properties and structure of the algorithm[edit]

1.1 General description of the algorithm

Givens' method (which is also called the rotation method in the Russian mathematical literature) is used to represent a matrix in the form $A = QR$, where $Q$ is a unitary and $R$ is an upper triangular matrix. The matrix $Q$ is not stored and used in its explicit form but rather as the product of rotations. Each (Givens) rotation can be specified by a pair of indices and a single parameter.

Template:Шаблон:Матрица вращения

In a conventional implementation of Givens' method, this fact makes it possible to avoid using additional arrays by storing the results of decomposition in the array originally occupied by $A$. Various uses are possible for the $QR$ decomposition of $A$. It can be used for solving a SLAE (System of Linear Algebraic Equations) $Ax = b$ or as a step in the so-called $QR$ algorithm for finding the eigenvalues of a matrix.

At each step of Givens' method, two rows of the matrix under transformation are rotated. The parameter of this transformation is chosen so as to eliminate one of the entries in the current matrix. First, the entries in the first column are eliminated one after the other, then the same is done for the second column, etc., until the column $n-1$. The resulting matrix is $R$. The step of the method is split into two parts: the choice of the rotation parameter and the rotation itself performed over two rows of the current matrix. The entries of these rows located to the left of the pivot column are zero; thus, no modifications are needed there. The entries in the pivot column are rotated simultaneously with the choice of the rotation parameter. Hence, the second part of the step consists in rotating two-dimensional vectors formed of the entries of the rotated rows that are located to the right of the pivot column. In terms of operations, the update of a column is equivalent to multiplying two complex numbers (or to four multiplications, one addition and one subtraction for real numbers); one of these complex numbers is of modulus 1. The choice of the rotation parameter from the two entries of the pivot column is a more complicated procedure, which is explained, in particular, by the necessity of minimizing roundoff errors. The tangent [math]t[/math] of half the rotation angle is normally used to store information about the rotation matrix. The cosine [math]c[/math] and the sine [math]s[/math] of the rotation angle itself are related to [math]t[/math] via the simple formulas (the so-called combat formulas of trigonometry)

[math]c = (1 - t^2)/(1 + t^2), s = 2t/(1 + t^2)[/math]

It is the value [math]t[/math] that is usually stored in the corresponding array entry.

1.2 Mathematical description of the algorithm

In order to obtain the [math]QR[/math] decomposition of a square matrix [math]A[/math], this matrix is reduced to the upper triangular matrix [math]R[/math] (where [math]R[/math] means right) by successively multiplying [math]A[/math] on the left by the rotations [math]T_{1 2}, T_{1 3}, ..., T_{1 n}, T_{2 3}, T_{2 4}, ..., T_{2 n}, ... , T_{n-2 n}, T_{n-1 n}[/math].

Each [math]T_{i j}[/math] specifies a rotation in the two-dimensional subspace determined by the [math]i[/math]-th and [math]j[/math]-th components of the corresponding column; all the other components are not changed. The rotation is chosen so as to eliminate the entry in the position ([math]i[/math], [math]j[/math]). Zero vectors do not change under rotations and identity transformations; therefore, the subsequent rotations preserve zeros that were earlier obtained to the left and above the entry under elimination.

At the end of the process, we obtain [math]R=T_{n-1 n}T_{n-2 n}T_{n-2 n-1}...T_{1 3}T_{1 2}A[/math].

Since rotations are unitary matrices, we naturally have [math]Q=(T_{n-1 n}T_{n-2 n}T_{n-2 n-1}...T_{1 3}T_{1 2})^* =T_{1 2}^* T_{1 3}^* ...T_{1 n}^* T_{2 3}^* T_{2 4}^* ...T_{2 n}^* ...T_{n-2 n}^* T_{n-1 n}^*[/math] and [math]A=QR[/math].

In the real case, rotations are orthogonal matrices; hence, [math]Q=(T_{n-1 n}T_{n-2 n}T_{n-2 n-1}...T_{1 3}T_{1 2})^T =T_{1 2}^T T_{1 3}^T ...T_{1 n}^T T_{2 3}^T T_{2 4}^T ...T_{2 n}^T ...T_{n-2 n}^T T_{n-1 n}^T[/math].

To complete this mathematical description, it remains to specify how the rotation [math]T_{i j}[/math] is calculated [1] and list the formulas for rotating the current intermediate matrix.

Let the matrix to be transformed contain the number [math]x[/math] in its position [math](i,i)[/math] and the number [math]y[/math] in the position [math](i,j)[/math]. Then, to minimize roundoff errors, we first calculate the uniform norm of the vector [math]z = max (|x|,|y|)[/math].

If the norm is zero, then no rotation is required: [math]t=s=0, c=1[/math].

If [math]z=|x|[/math], then we calculate [math]y_1=y/x[/math] and, next, [math]c = \frac {1}{\sqrt{1+y_1^2}}[/math], [math]s=-c y_1[/math], [math]t=\frac {1-\sqrt{1+y_1^2}}{y_1}[/math]. The updated value of the entry [math](i,i)[/math] is [math]x \sqrt{1+y_1^2}[/math].

If [math]z=|y|[/math], then we calculate [math]x_1=x/y[/math] and, next, [math]t=x_1 - x_1^2 sign(x_1)[/math], [math]s=\frac{sign(x_1)}{\sqrt{1+x_1^2}}[/math], [math]c = s x_1[/math]. The updated value of the entry [math](i,i)[/math] is [math]y \sqrt{1+x_1^2} sign(x)[/math].

Let the parameters [math]c[/math] and [math]s[/math] of the rotation [math]T_{i j}[/math] have already been obtained. Then the transformation of each column located to the right of the [math]i[/math]-th column can be described in a simple way. Let the [math]k[/math]-th column have x as its component [math]i[/math] and y as its component [math]j[/math]. The updated values of these components are [math]cx - sy[/math] and [math]sx + cy[/math], respectively. This calculation is equivalent to multiplying the complex number with the real part [math]x[/math] and the imaginary part [math]y[/math] by the complex number [math](c,s)[/math].


1.3 Computational kernel of the algorithm

The computational kernel of this algorithm can be thought of as compiled of two types of operation. The first type concerns the calculation of rotation parameters, while the second deals with the rotation itself (which can equivalently be described as the multiplication of two complex numbers with one of the factors having the modulus 1).


1.4 Macro structure of the algorithm

The operations related to the calculation of rotation parameters can be represented by a triangle on a two-dimensional grid, while the rotation itself can be represented by a pyramid on a three-dimensional grid.


1.5 Implementation scheme of the serial algorithm

In a conventional implementation scheme, the algorithm is written as the successive elimination of the subdiagonal entries of a matrix beginning from its first column and ending with the penultimate column (that is, column n-1). When the i-th column is "eliminated", then its components i+1 to n are successively eliminated.

The elimination of the entry (j, i) consists of two steps: (a) calculating the parameters for the rotation [math]T_{ij}[/math] that eliminates the entry (j, i); (b) multiplying the current matrix on the left by the rotation [math]T_{ij}[/math].


1.6 Serial complexity of the algorithm

The complexity of the serial version of this algorithm is basically determined by the mass rotation operations. If possible sparsity of a matrix is ignored, these operations are responsible (in the principal term) for [math]n^3/3[/math] complex multiplications. In a straightforward complex arithmetic, this is equivalent to [math]4n^3/3[/math] real multiplications and [math]2n^3/3[/math] real additions/subtractions.

Thus, in terms of serial complexity, Givens' method is qualified as a cubic complexity algorithm.


1.7 Information graph

The macrograph of the algorithm is shown in fig. 1, while the graphs of the macrovertices are depicted in the subsequent figures.

Figure 1. Graph of the algorithm (the input and output data are not shown). n=4. F1 denotes an operation of calculating rotation parameters, and F2 denotes a rotation of a 2-dimensional vector (which is equivalent to multiplying two complex numbers).

Choice of a method for calculating rotation parameters in vertices of type F1.


Figure 2. Calculation of the rotation parameters for various x and y in the vertex V2.


Figure 3. Calculation of the rotation parameters in the vertex V1 (the case of identical x and у).


Figure 4. Calculation of the rotation parameters in the vertex V0 (the case of zero x and у).


Figure 5. The inner graph of a vertex of type F2 with its input and output parameters: (u,v) = (c,s)(x,y)


1.8 Ресурс параллелизма алгоритма[править] Для понимания ресурса параллелизма в разложении матрицы порядка n методом Гивенса рассмотрим критический путь графа. Как видно из описания подграфов, макровершина вычисления параметров поворота F1 в графе намного "весомее" вершины поворота F2. А именно, в макровершине поворота критический путь - всего-навсего одно умножение (их 4, но все можно выполнить параллельно) и одно сложение/вычитание (их 2, но они тоже параллельны). А вот макровершина вычисления параметров даёт в худшем случае критический путь , в котором одно вычисление квадратного корня, и по две операции деления, умножения, сложения/вычитания. Поэтому по грубой оценке критический путь в основном будет идти через 2n-3 макровершины вычисления параметров F1, а также через n-1 макровершин поворотов. В сумме это даёт критический путь, проходящий по 2n-3 операциям вычисления квадратного корня, 4n-6 делениям, по 5n-7 умножениям и сложениям/вычитаниям. В макрографе, представленном на рисунке, один из критических путей может быть представлен, например, как прохождение по "верхней линии" вершин F1 (это n-1 штук) и затем попеременное выполнение F2 и F1 (n-2 раза), после чего ещё одно выполнение F2. Таким образом, в параллельном варианте, в отличие от последовательного, вычисления квадратных корней и деления будут определять довольно значительную долю требуемого времени. При реализации на конкретных архитектурах наличие в отдельных ярусах ЯПФ отдельных вычислений квадратных корней и делений может породить и другие проблемы. Например, при реализации на ПЛИСах остальные вычисления (умножения и сложения/вычитания) могут быть конвейеризованы, что даёт экономию и по ресурсам на программируемых платах; вычисления же квадратных корней из-за их изолированности приведут к занятию ресурсов на платах, которые будут простаивать большую часть времени. При классификации по высоте ЯПФ, таким образом, метод Гивенса относится к алгоритмам с линейной сложностью. При классификации по ширине ЯПФ его сложность будет квадратичной. 1.9 Входные и выходные данные алгоритма[править] Входные данные: плотная квадратная матрица A (элементы a_{ij}). Объём входных данных: n^2. Выходные данные: правая треугольная матрица R (ненулевые элементы r_{ij} в последовательном варианте хранятся в элементах исходной матрицы a_{ij}), унитарная (ортогональная) матрица Q - как произведение матриц вращения (их параметры t_{ij} в последовательном варианте хранятся в элементах исходной матрицы a_{ij}). Объём выходных данных: n^2. 1.10 Свойства алгоритма[править] Соотношение последовательной и параллельной сложности, как хорошо видно, является квадратичным, что даёт хороший стимул для распараллеливания. При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, линейна. Алгоритм в рамках выбранной версии полностью детерминирован. Вычислительная погрешность в методе Гивенса (вращений) растет линейно, как и в методе отражений (Хаусхолдера). 2 Программная реализация[править] 2.1 Особенности реализации последовательного алгоритма[править] В простейшем варианте метод Гивенса (вращений) QR-разложения квадратной вещественной матрицы на Фортране можно записать так:

Макрограф алгоритма изображён на рисунке 1, графы макровершин - на последующих.

  1. Воеводин В.В. Вычислительные основы линейной алгебры. М.: Наука, 1977.