Участник:KibAndrey/Ортогонализация Грама-Шмидта: различия между версиями
Amelie (обсуждение | вклад) |
Amelie (обсуждение | вклад) |
||
| Строка 20: | Строка 20: | ||
Исходные данные: <math>n</math> векторов <math>\mathbf{a_1},\mathbf{a_2}, | Исходные данные: <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> . | ||
Вычисляемые данные: | Вычисляемые данные: | ||
| Строка 26: | Строка 26: | ||
<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{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}, | <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> | ||
Формулы процесса ортогонализации: | Формулы процесса ортогонализации: | ||
| Строка 63: | Строка 63: | ||
(В правой части этого равенства определитель следует формально разложить по последнему столбцу). | (В правой части этого равенства определитель следует формально разложить по последнему столбцу). | ||
Иногда полученные векторы нормируются сразу после их нахождения и находится система ортонормированных векторов <math>\mathbf{e_1},\mathbf{e_2}, | Иногда полученные векторы нормируются сразу после их нахождения и находится система ортонормированных векторов <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:24, 13 октября 2016
| Ортогонализация Грама-Шмидта | |
| Последовательный алгоритм | |
| Последовательная сложность | [math]\displaystyle{ O\left(n^3\right) }[/math] |
| Объём входных данных | [math]\displaystyle{ }[/math] |
| Объём выходных данных | [math]\displaystyle{ }[/math] |
| Параллельный алгоритм | |
| Высота ярусно-параллельной формы | [math]\displaystyle{ }[/math] |
| Ширина ярусно-параллельной формы | [math]\displaystyle{ }[/math] |
Основные авторы описания: А.В.Кибанов, Т.З.Аджиева,.
ЧАСТЬ. Свойства и структура алгоритма
Общее описание алгоритма
Математическое описание алгоритма
Исходные данные: [math]\displaystyle{ n }[/math] векторов [math]\displaystyle{ \mathbf{a_1},\mathbf{a_2},\ldots,\mathbf{a_n} }[/math] длины [math]\displaystyle{ n }[/math] [math]\displaystyle{ \left(\alpha_{ij}\right. }[/math], [math]\displaystyle{ j=1,2, \ldots,n }[/math], — координаты вектора [math]\displaystyle{ \left.\mathbf{a_i}\right) }[/math] .
Вычисляемые данные:
[math]\displaystyle{ n }[/math] ортогональных векторов [math]\displaystyle{ \mathbf{b_1},\mathbf{b_2},...,\mathbf{b_n} }[/math] длины [math]\displaystyle{ n }[/math], причем [math]\displaystyle{ \mathbf{b_1}=\mathbf{a_1} }[/math] либо
[math]\displaystyle{ n }[/math] ортонормированных векторов [math]\displaystyle{ \mathbf{e_1},\mathbf{e_2},\ldots,\mathbf{e_n} }[/math] длины [math]\displaystyle{ n }[/math], причем [math]\displaystyle{ \mathbf{e_1}=\frac{\mathbf{a_1}}{|\mathbf{a_1}|} }[/math]
Формулы процесса ортогонализации:
- [math]\displaystyle{ \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]\displaystyle{ proj_{\mathbf{b_j}}\mathbf{a_{i}} }[/math], для [math]\displaystyle{ j=1,...,i-1 }[/math] — проекция вектора [math]\displaystyle{ \mathbf{a_{i}} }[/math] на направление вектора [math]\displaystyle{ \mathbf{b_{j}} }[/math]. Это число, равное по величине проекции вектора [math]\displaystyle{ \mathbf{a_{j}} }[/math] на ось, проходящую через вектор [math]\displaystyle{ \mathbf{b_j} }[/math].
Формула для ее вычисления, полученная из определения скалярного произведения: [math]\displaystyle{ proj_{\mathbf{b_j}}\mathbf{a_{i}}=\dfrac{(ai,bj)}{\mathbf{\left \|b_j\right \|}} }[/math], для [math]\displaystyle{ j=1,...,i-1 }[/math]
В этом случае знаменатель в формуле для вычисления проекции [math]\displaystyle{ |\mathbf{e_i}|=1 }[/math] для [math]\displaystyle{ i=1,...,n-1 }[/math], что существенно упрощает вычисления алгоритма.
Произведение длин [math]\displaystyle{ \mathbf{|b_1|},\mathbf{|b_2|},\ldots ,\mathbf{|b_n|} }[/math] равно объему параллелепипеда, построенного на векторах системы [math]\displaystyle{ \left\{\mathbf{a_i}\right\} }[/math], [math]\displaystyle{ i=1,2,\ldots ,n }[/math], как на ребрах
Явное выражение векторов [math]\displaystyle{ \mathbf{b_i} }[/math] для [math]\displaystyle{ i=1,...,n }[/math] через [math]\displaystyle{ \mathbf{a_1},\mathbf{a_2},...,\mathbf{a_n} }[/math] дает формула
[math]\displaystyle{ \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]\displaystyle{ \mathbf{e_1},\mathbf{e_2},\ldots,\mathbf{e_n} }[/math]. В этом случае знаменатель в формуле для вычисления проекции [math]\displaystyle{ |\mathbf{e_i}|=1 }[/math] для [math]\displaystyle{ i=1,...,n-1 }[/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]