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

Участник:KibAndrey/Ортогонализация Грама-Шмидта: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 18: Строка 18:


== Математическое описание алгоритма ==
== Математическое описание алгоритма ==
Исходные данные: <math>n</math> векторов <math>\mathbf{a_1},\mathbf{a_2},\ldots,\mathbf{a_n}</math> длины <math>n</math> <math>\left(\alpha_{ij}\right.</math>, <math>j=1,2, \ldots,n</math>, — координаты вектора <math>\left.\mathbf{a_i}\right)</math> .
Вычисляемые данные:
<math>n</math> ортогональных векторов <math>\mathbf{b_1},\mathbf{b_2},...,\mathbf{b_n}</math> длины <math>n</math>, причем <math>\mathbf{b_1}=\mathbf{a_1}</math> либо
<math>n</math> ортонормированных векторов <math>\mathbf{e_1},\mathbf{e_2},\ldots,\mathbf{e_n}</math> длины <math>n</math>, причем <math>\mathbf{e_1}=\frac{\mathbf{a_1}}{|\mathbf{a_1}|}</math>
Формулы процесса ортогонализации:
:<math>
\begin{align}
\mathbf{b_{1}} & =\mathbf{a_{1}}, \\
\mathbf{b_{2}}& =\mathbf{a_{2}}-proj_{\mathbf{b_1}}\mathbf{a_{1}}, \\
& ...\\
\mathbf{b_{{i} }} & = \mathbf{a_{i}}-\sum\limits_{j=1}^{i-1} proj_{\mathbf{b_j}}\mathbf{a_{i}},\\
& ...\\
\mathbf{b_{n}} & =\mathbf{ a_{n}}-\sum\limits_{j=1}^{n-1} proj_{\mathbf{b_j}}\mathbf{a_{n}},\\
\end{align}
</math>
Здесь <math>proj_{\mathbf{b_j}}\mathbf{a_{i}}</math>, для <math>j=1,...,i-1</math> — проекция вектора <math>\mathbf{a_{i}}</math> на направление вектора <math>\mathbf{b_{j}}</math>.
Это число, равное по величине проекции вектора <math>\mathbf{a_{j}}</math>  на ось, проходящую через вектор  <math>\mathbf{b_j}</math>.
Формула для ее вычисления, полученная из определения скалярного произведения:
<math>proj_{\mathbf{b_j}}\mathbf{a_{i}}=\dfrac{(ai,bj)}{\mathbf{\left \|b_j\right \|}}</math>, для <math>j=1,...,i-1</math>
В этом случае знаменатель в формуле для вычисления проекции <math>|\mathbf{e_i}|=1</math> для <math>i=1,...,n-1</math>, что существенно упрощает вычисления алгоритма.
Произведение длин <math>\mathbf{|b_1|},\mathbf{|b_2|},\ldots ,\mathbf{|b_n|}</math> равно объему параллелепипеда, построенного на векторах системы <math>\left\{\mathbf{a_i}\right\}</math>, <math>i=1,2,\ldots ,n</math>, как на ребрах
Явное выражение векторов <math>\mathbf{b_i}</math> для <math>i=1,...,n</math>  через <math>\mathbf{a_1},\mathbf{a_2},...,\mathbf{a_n}</math> дает  формула
<math> \mathbf{b_i}=
\begin{vmatrix}
(a_1,a_1) & \cdots & (a_1,a_n-1) &a_1 \\ 
\cdots & \cdots &  \cdots  &  \cdots \\ 
(a_{i},a_1) & \cdots & (a_i,a_n-1) &a_i \\
\cdots & \cdots & \cdots \\ 
(a_{n},a_1) & \cdots & (a_n,a_n-1) &a_n
\end{vmatrix}
</math>
(В правой части этого равенства определитель следует формально разложить по последнему столбцу).
Иногда полученные векторы нормируются сразу после их нахождения и находится система ортонормированных векторов <math>\mathbf{e_1},\mathbf{e_2},\ldots,\mathbf{e_n}</math>. В этом случае знаменатель в формуле для вычисления проекции <math>|\mathbf{e_i}|=1</math> для <math>i=1,...,n-1</math>, что существенно упрощает вычисления алгоритма.


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

Версия от 14:26, 13 октября 2016


Ортогонализация Грама-Шмидта
Последовательный алгоритм
Последовательная сложность [math]\displaystyle{ O\left(n^3\right) }[/math]
Объём входных данных [math]\displaystyle{ }[/math]
Объём выходных данных [math]\displaystyle{ }[/math]
Параллельный алгоритм
Высота ярусно-параллельной формы [math]\displaystyle{ }[/math]
Ширина ярусно-параллельной формы [math]\displaystyle{ }[/math]


Основные авторы описания: А.В.Кибанов, Т.З.Аджиева,.



ЧАСТЬ. Свойства и структура алгоритма

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

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

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

Анализ математических формул процесса ортогонализации Грама-Шмидта показывает, что алгоритм имеет три вычислительных ядра:

  • вычисления скалярного произведения (к этой операции сводится вычисление длины вектора)
  • умножения вектора на число
  • сложения векторов.

Эти операции выполняются за время порядка [math]\displaystyle{ O\left(n\right) }[/math]

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

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

[math]\displaystyle{ \begin{align} a_{1} & =b_{1}, \\ \beta_{ij} & = \frac{(a_{i},b_j)}{(b_j,b_j)}=-\frac{(a_i,b_j)}{|b_j|^2}, \quad i \in [2, n], \quad j \in [1, n] ,\\ \end{align} }[/math]

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

Анализ математических формул процесса ортогонализации Грама-Шмидта показывает, что алгоритм имеет три вычислительных ядра:

  • вычисления скалярного произведения (к этой операции сводится вычисление длины вектора)
  • умножения вектора на число
  • сложения векторов.

Эти операции выполняются за время порядка [math]\displaystyle{ O\left(n\right) }[/math]

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

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

[math]\displaystyle{ \begin{align} a_{1} & =b_{1}, \\ \beta_{ij} & = \frac{(a_{i},b_j)}{(b_j,b_j)}=-\frac{(a_i,b_j)}{|b_j|^2}, \quad i \in [2, n], \quad j \in [1, n] ,\\ \end{align} }[/math]


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

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

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

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

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

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

ЧАСТЬ Программная реализация алгоритма

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

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

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

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

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

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

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

Литература