Уровень алгоритма

Участник:Davletshuna Alexandra/Метод Якоби вычисления сингулярных чисел и векторов: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 99: Строка 99:
  
 
== Программная реализация алгоритма ==
 
== Программная реализация алгоритма ==
 +
 +
== Программная реализация алгоритма ==
 +
 +
=== Особенности реализации последовательного алгоритма ===
 +
 +
=== Локальность данных и вычислений ===
 +
 +
=== Возможные способы и особенности параллельной реализации алгоритма ===
  
 
=== Масштабируемость алгоритма и его реализации ===
 
=== Масштабируемость алгоритма и его реализации ===
 +
 +
=== Динамические характеристики и эффективность реализации алгоритма ===
 +
 +
=== Выводы для классов архитектур ===
  
 
=== Существующие реализации алгоритма ===
 
=== Существующие реализации алгоритма ===
Метод Якоби нахождения сингулярных значений и векторов реализован в пакете LAPACK. В связи с тем, что алгоритм считается медленным, он не включен во многие известные пакеты.
+
Метод Якоби нахождения сингулярных значений и векторов реализован в немногих пакетах, например, LAPACK, Intel MKL. Это не значит, что алгоритм не представляет никакого интереса для изучения. Для некоторых типов матриц метод способен вычислять сингулярные числа и сингулярные векторы намного точнее, чем другие методы. Но в связи с тем, что алгоритм считается медленным, он не включен во многие известные пакеты.
  
 
== Литература ==
 
== Литература ==
 
1. Дж. Деммель Вычислительная линейная алгебра. Изд. Мир, 2001.
 
1. Дж. Деммель Вычислительная линейная алгебра. Изд. Мир, 2001.

Версия 09:32, 15 октября 2016



Метод Якоби вычисления сингулярных чисел и векторов
Последовательный алгоритм
Последовательная сложность [math]O(n^3)[/math]
Объём входных данных [math]n^2[/math]
Объём выходных данных [math]2n^2 + n[/math]
Параллельный алгоритм
Высота ярусно-параллельной формы [math]O(n^2)[/math]
Ширина ярусно-параллельной формы [math]O(n)[/math]


Авторы статьи: Давлетшина Александра (группа 619), Зайцева Александра (группа 601)

1 Свойства и структура алгоритма

1.1 Общее описание алгоритма

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

• левые сингулярные векторы матрицы А — это собственные векторы матрицы [math]AA^*[/math];

• правые сингулярные векторы матрицы A — это собственные векторы матрицы [math]A^*A[/math].

Геометрическая интерпретация сингулярного разложения заключается в следующем факте из геометрии: Образом любого линейного преобразования, заданного с помощью матрицы [math]m[/math]x[math]n[/math], примененного к единичной сфере является гиперэллипсоид.

Из многочисленных разложений матриц, наиболее удобным является сингулярное разложение матрицы в виде: [math]A=U\Sigma V^*[/math], где [math]U, V[/math] – унитарные матрицы, а [math]\Sigma[/math] – диагональная матрица с вещественными положительными числами на диагонали [1].

Диагональные элементы матрицы [math]\Sigma[/math] называются сингулярными числами матрицы [math]A[/math], а столбцы матриц [math]U,V[/math] левыми и правыми сингулярными векторами соответственно.

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

Неявный[2] метод Якоби математически эквивалентен применению метода Якоби вычисления собственных значений к матрице [math]A = G^TG[/math]. Это значит, что на каждом шаге вычисляется вращение Якоби [math]J[/math], с помощью которого матрица [math]G^TG[/math] неявно пересчитывется в [math]J^TG^TGJ[/math]; вращение выбрано так, чтобы пара внедиагональных элементов из [math]G^TG[/math] обратилась в нули в матрице [math]J^TG^TGJ[/math]. При этом ни [math]G^TG[/math], ни [math]J^TG^TGJ[/math] не вычисляются в явном виде; вместо них вычисляется матрица [math]GJ[/math]. Поэтому алгоритм называется методом односторонних вращений.

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

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

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

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

Применение метода Якоби к матрице [math]A = (G^TG)[/math] можно описать следующим образом[3]:

Если [math]G = U\Sigma V^T[/math] и [math]\Sigma = diag(\sigma_{i})[/math], то алгоритм вычисляет сингулярные числа [math]\sigma_{i}[/math], матрицу [math]U[/math] левых сингулярных векторов и матрицу [math]V[/math] правых сингулярных векторов по следующей схеме:

repeat
    for [math]j=1[/math] to [math]n-1[/math]
        for [math]k=j+1[/math] to [math]n[/math]
            обратиться к процедуре One-Sided-Jacobi-Rotation[math](G,j,k)[/math]
        end for
    end for
пока [math]G^TG[/math] не станет достаточно близка к диагональной матрице
Положить [math]\sigma_{i} = ||G(:,i)||_2 [/math] (норма [math]i[/math]-го столбца в [math]G[/math])
Положить [math]U = [u_{1},\dots, u_{n}][/math], где [math]u_{i} = G(:,i)/\sigma_{i}[/math]
Положить [math]V = J[/math], где [math]J[/math] - накопленное произведение вращений Якоби.

Где процедура One-Sided-Jacobi-Rotation является метод односторонних вращений Якоби:

proc One-Sided-Jacobi-Rotation[math](G,j,k)[/math]
    вычислить [math]a_{jj} = (G^TG)_{jj}, a_{jk} = (G^TG)_{jk}[/math] и [math]a_{kk} = (G^TG)_{kk}[/math]
    if [math]|a_{jk}|[/math] не слишком мал
        [math]
         \begin{align}
         \tau &= {a_{jj} - a_{kk}}/{2a_{jk}} \\
         t &= {sign(\tau)}/(|\tau| + \sqrt{1 + \tau^2}) \\
         c &= 1/(\sqrt{1 + t^2}) \\
         s &= ct \\
         G &= GR(j,k,\theta) \  \dots c=cos\theta, s=sin\theta \end{align}[/math]
        if нужны правые сингулярные векторы 
            [math]J = JR(j,k,\theta)[/math]
        end if
    end if

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

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

1.8 Ресурс параллелизма алгоритма

Для выполнения одной итерации метода Якоби требуется последовательно выполнить несколько ярусов:

  1. вычислить [math]\tau[/math]
  2. вычислить [math]t[/math]
  3. вычислить [math]c[/math]
  4. выполнить поворот к матрицы [math]G[/math] с параллельным выполнением [math]2(n-2)[/math] операций вычисления элементов матрицы [math]g_{jm}^{(i+1)} = g_{mj}^{(i+1)}[/math] и [math]g_{km}^{(i+1)} = g_{mk}^{(i+1)}[/math], [math]m \ne j,k[/math], а также вычисления элементов [math]g_{jj}^{(i+1)} [/math] [math]g_{kk}^{(i+1)} [/math].

Суммарное количество итераций равно [math]\frac{n(n-1)}{2}[/math] (Различные варианты выбора [math]j[/math] и [math]k[/math]).

Асимптотически метод сходится квадратично.

Таким образом, при классификации по высоте ЯПФ метод Якоби относится к алгоритмам со сложностью [math]O(n^2)[/math] , а при классификации по ширине ЯПФ — к алгоритмам со сложностью [math]O(n)[/math].

1.9 Входные и выходные данные алгоритма

Входные данные: плотная матрица [math]G[/math] размера [math]n[/math]х[math]n[/math], где [math]A= G^TG[/math] – симметрическая матрица.

Объём входных данных: [math]n^2[/math] (т.к. для хранения матрицы [math]G[/math] используем двумерный массив размера [math]n[/math]х[math]n[/math])

Выходные данные: [math]\sigma_{i}[/math] - сингулярные числа, матрица [math]U[/math] левых сингулярных векторов и матрица [math]V[/math] правых сингулярных векторов.

Объём выходных данных: [math]2n^2 + n[/math] (т.к. необходимо хранить вектор сингулярных чисел длины [math]n[/math], а также две матрицы [math]U, V[/math] левых и правых сингулярных векторов размера [math]n[/math]х[math]n[/math]).

1.10 Свойства алгоритма

2 Программная реализация алгоритма

3 Программная реализация алгоритма

3.1 Особенности реализации последовательного алгоритма

3.2 Локальность данных и вычислений

3.3 Возможные способы и особенности параллельной реализации алгоритма

3.4 Масштабируемость алгоритма и его реализации

3.5 Динамические характеристики и эффективность реализации алгоритма

3.6 Выводы для классов архитектур

3.7 Существующие реализации алгоритма

Метод Якоби нахождения сингулярных значений и векторов реализован в немногих пакетах, например, LAPACK, Intel MKL. Это не значит, что алгоритм не представляет никакого интереса для изучения. Для некоторых типов матриц метод способен вычислять сингулярные числа и сингулярные векторы намного точнее, чем другие методы. Но в связи с тем, что алгоритм считается медленным, он не включен во многие известные пакеты.

4 Литература

1. Дж. Деммель Вычислительная линейная алгебра. Изд. Мир, 2001.

  1. http://algorithms.parallel.ru/
  2. Дж. Деммель «Вычислительная линейная алгебра» (стр. 261-264)
  3. Дж. Деммель «Вычислительная линейная алгебра» (стр. 261-263)