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

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

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


'''Процесс ортогонализации Грама–Шмидта'''<ref>Математическая энциклопедия / Гл. ред.
'''Процесс ортогонализации Грама–Шмидта'''<ref>Математическая энциклопедия / Гл. ред.
И. М. Виноградов — М: Советская энциклопедия — Т.4 Ок–Сло, 1984. — 215 с.</ref> — алгоритм построения для данной линейно независимой системы векторов евклидова или эрмитова пространства <math>V</math> ортогональной системы ненулевых векторов, при котором каждый вектор построенной системы линейно выражается через векторы данной системы. Процесс ортогонализации Грама-Шмидта может быть применен к любой, в том числе и линейно-зависимой системе элементов евклидова пространства. Если ортоганализуемая система линейно-зависима, то на некотором шаге (возможно несколько раз) мы получим нулевой элемент, после отбрасывания которого можно продолжить процесс ортогонализации<ref> А. Е. Умнов. Аналитическая геометрия и линейная алгебра — 3-е издание, исправленное и дополненное — М.: МФТИ — 2011 — 544 c.</ref>, однако в данной статье этот случай мы не рассматриваем.  
И. М. Виноградов — М: Советская энциклопедия — Т.4 Ок–Сло, 1984. — 215 с.</ref> — алгоритм построения для данной линейно независимой системы векторов евклидова или эрмитова пространства <math>V</math> ортогональной системы ненулевых векторов, при котором каждый вектор построенной системы линейно выражается через векторы данной системы. Процесс ортогонализации Грама-Шмидта может быть применен к любой, в том числе и линейно-зависимой системе элементов евклидова пространства. Если ортогонализуемая система линейно-зависима, то на некотором шаге (возможно несколько раз) мы получим нулевой элемент, после отбрасывания которого можно продолжить процесс ортогонализации<ref> А. Е. Умнов. Аналитическая геометрия и линейная алгебра — 3-е издание, исправленное и дополненное — М.: МФТИ — 2011 — 544 c.</ref>, однако в данной статье этот случай мы не рассматриваем.  


Исторически это первый алгоритм, описывающий процесс ортогониализации. Традиционно его связывают с именами [https://en.wikipedia.org/wiki/J%C3%B8rgen_Pedersen_Gram Йоргена Педерсена Грама] и [https://en.wikipedia.org/wiki/Erhard_Schmidt Эрхарда Шмидта]. Йорган Педерсен Грам<ref name="multiple">Meyer C. D. Matrix analysis and applied linear algebra. — Siam, 2000. — Т.2.</ref> был датским актуарием, который в неявном виде представил суть процесса ортогонализации в 1883 году<ref>[http://gdz.sub.uni-goettingen.de/dms/load/img/?PID=GDZPPN002158604&physid=PHYS_0047 Gram J. P. Ueber die Entwickelung reeller Functionen in Reihen mittelst der Methode der kleinsten Quadrate.]  — ''Journal für die reine und angewandte Mathematik.'' — 1883. — Т. 94. — pp. 41–73.</ref>. Нельзя не сказать о том, что метод ортогонализации в несколько ином, модифицированом виде, ранее использовал [https://en.wikipedia.org/wiki/Pierre-Simon_Laplace Пьер-Симон Лаплас] при нахождении массы Сатурна и Юпитера из систем нормальных уравнений и расчете распределения ошибок при этих вычислениях<ref> [https://books.google.ru/books?id=fjAVAAAAQAAJ&printsec=frontcover&hl=ru&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false Marquis de Laplace P. S. Théorie analytique des probabilités.] — V. Courcier, 1820.</ref>. Ясно, что Й. Грам не знал о том, что Лаплас ранее использовал этот метод. Эрхард Шмидт<ref name="multiple">Meyer C. D. Matrix analysis and applied linear algebra. — Siam, 2000. — Т.2.</ref>  был учеником великих математиков [https://en.wikipedia.org/wiki/Hermann_Schwarz Германа Шварца] и [https://en.wikipedia.org/wiki/David_Hilbert Давида Гильберта]. Алгоритм ортогонализации был опубликован Э. Шмидтом в 1907 году в его исследовании интегральных уравнений<ref name=Shmidt>Erchard Shmidt. Mathematische Annalen Zur Theorie der linearen und nichtlinearen Integralgleichungen, 1. Teil: Entwicklung willkürlicher
Исторически это первый алгоритм, описывающий процесс ортогониализации. Традиционно его связывают с именами [https://en.wikipedia.org/wiki/J%C3%B8rgen_Pedersen_Gram Йоргена Педерсена Грама] и [https://en.wikipedia.org/wiki/Erhard_Schmidt Эрхарда Шмидта]. Йорган Педерсен Грам<ref name="multiple">Meyer C. D. Matrix analysis and applied linear algebra. — Siam, 2000. — Т.2.</ref> был датским актуарием, который в неявном виде представил суть процесса ортогонализации в 1883 году<ref>[http://gdz.sub.uni-goettingen.de/dms/load/img/?PID=GDZPPN002158604&physid=PHYS_0047 Gram J. P. Ueber die Entwickelung reeller Functionen in Reihen mittelst der Methode der kleinsten Quadrate.]  — ''Journal für die reine und angewandte Mathematik.'' — 1883. — Т. 94. — pp. 41–73.</ref>. Нельзя не сказать о том, что метод ортогонализации в несколько ином, модифицированом виде, ранее использовал [https://en.wikipedia.org/wiki/Pierre-Simon_Laplace Пьер-Симон Лаплас] при нахождении массы Сатурна и Юпитера из систем нормальных уравнений и расчете распределения ошибок при этих вычислениях<ref> [https://books.google.ru/books?id=fjAVAAAAQAAJ&printsec=frontcover&hl=ru&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false Marquis de Laplace P. S. Théorie analytique des probabilités.] — V. Courcier, 1820.</ref>. Ясно, что Й. Грам не знал о том, что Лаплас ранее использовал этот метод. Эрхард Шмидт<ref name="multiple">Meyer C. D. Matrix analysis and applied linear algebra. — Siam, 2000. — Т.2.</ref>  был учеником великих математиков [https://en.wikipedia.org/wiki/Hermann_Schwarz Германа Шварца] и [https://en.wikipedia.org/wiki/David_Hilbert Давида Гильберта]. Алгоритм ортогонализации был опубликован Э. Шмидтом в 1907 году в его исследовании интегральных уравнений<ref name=Shmidt>Erchard Shmidt. Mathematische Annalen Zur Theorie der linearen und nichtlinearen Integralgleichungen, 1. Teil: Entwicklung willkürlicher

Версия от 18:58, 28 октября 2016

Файл:Symbol wait.svgЭта работа ждет рассмотрения преподавателем
Дата последней правки страницы:
28.10.2016
Авторы этой статьи считают, что задание выполнено.



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


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

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



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

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

Процесс ортогонализации Грама–Шмидта[1] — алгоритм построения для данной линейно независимой системы векторов евклидова или эрмитова пространства [math]\displaystyle{ V }[/math] ортогональной системы ненулевых векторов, при котором каждый вектор построенной системы линейно выражается через векторы данной системы. Процесс ортогонализации Грама-Шмидта может быть применен к любой, в том числе и линейно-зависимой системе элементов евклидова пространства. Если ортогонализуемая система линейно-зависима, то на некотором шаге (возможно несколько раз) мы получим нулевой элемент, после отбрасывания которого можно продолжить процесс ортогонализации[2], однако в данной статье этот случай мы не рассматриваем.

Исторически это первый алгоритм, описывающий процесс ортогониализации. Традиционно его связывают с именами Йоргена Педерсена Грама и Эрхарда Шмидта. Йорган Педерсен Грам[3] был датским актуарием, который в неявном виде представил суть процесса ортогонализации в 1883 году[4]. Нельзя не сказать о том, что метод ортогонализации в несколько ином, модифицированом виде, ранее использовал Пьер-Симон Лаплас при нахождении массы Сатурна и Юпитера из систем нормальных уравнений и расчете распределения ошибок при этих вычислениях[5]. Ясно, что Й. Грам не знал о том, что Лаплас ранее использовал этот метод. Эрхард Шмидт[3] был учеником великих математиков Германа Шварца и Давида Гильберта. Алгоритм ортогонализации был опубликован Э. Шмидтом в 1907 году в его исследовании интегральных уравнений[6], которое в свою очередь дало основание для развития теории гильбертовых пространств. Шмидт использовал процесс ортогонализации применительно к геометрии гильбертова пространства решений интегральных уравнений отмечал, что процесс ортогонализации принципиально такой же, какой прежде использовал Й. Грам. В отечественной литературе иногда этот процесс называют ортогонализацией Сонина–Шмидта[7][8]. Это название связано с тем, что разработанный Сониным[9] метод ортогонализации системы функций для частного случая по существу не отличается от метода ортогонализации системы функций, предложенного ранее Шмидтом[6].

Классический процесс ортогонализации Грама–Шмидта применяется в таких совменных областях, как анализ изображений[10], цифровая обработка сигналов[11], нейронные сети[12].

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

Bходные данные: [math]\displaystyle{ k }[/math] линейно независимых векторов [math]\displaystyle{ \mathbf{a_1},\mathbf{a_2},\ldots,\mathbf{a_k} }[/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{ k }[/math] ортогональных векторов [math]\displaystyle{ \mathbf{b_1},\mathbf{b_2},...,\mathbf{b_k} }[/math] длины [math]\displaystyle{ n }[/math], причем [math]\displaystyle{ \mathbf{b_1}=\mathbf{a_1} }[/math], либо

[math]\displaystyle{ k }[/math] ортонормированных векторов [math]\displaystyle{ \mathbf{q_1},\mathbf{q_2},\ldots,\mathbf{q_k} }[/math] длины [math]\displaystyle{ n }[/math], причем [math]\displaystyle{ \mathbf{q_i}=\frac{\mathbf{b_i}}{|\mathbf{b_i}|} }[/math], [math]\displaystyle{ i=1,2, \ldots,k }[/math].

Формулы процесса ортогонализации:

[math]\displaystyle{ \begin{align} \mathbf{b_{1}} & =\mathbf{a_{1}}, \\ \mathbf{b_{2}}& =\mathbf{a_{2}}-\mathbf{b_{1}} proj_{\mathbf{b_1}}\mathbf{a_{2}},\\ & ...\\ \mathbf{b_{i}} & =\mathbf{ a_{i}}-\sum\limits_{j=1}^{i-1}\mathbf{b_{i}} proj_{\mathbf{b_j}}\mathbf{a_{i}}.\\ & ...\\ \mathbf{b_{k}} & =\mathbf{ a_{k}}-\sum\limits_{j=1}^{k-1}\mathbf{b_{k}} proj_{\mathbf{b_j}}\mathbf{a_{k}}.\\ \end{align} }[/math]

Здесь [math]\displaystyle{ proj_{\mathbf{b_j}}\mathbf{a_{i}} }[/math], для [math]\displaystyle{ j=1,...,k-1 }[/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{|b_1|},\mathbf{|b_2|},\ldots ,\mathbf{|b_k|} }[/math] равно объему параллелепипеда, построенного на векторах системы [math]\displaystyle{ \left\{\mathbf{a_i}\right\} }[/math], [math]\displaystyle{ i=1,2,\ldots ,k }[/math], как на ребрах.

Явное выражение векторов [math]\displaystyle{ \mathbf{b_i} }[/math] для [math]\displaystyle{ i=1,...,k }[/math] через [math]\displaystyle{ \mathbf{a_1},\mathbf{a_2},...,\mathbf{a_k} }[/math] дает формула

[math]\displaystyle{ \mathbf{b_i}= \begin{vmatrix} (a_1,a_1) & \cdots & (a_1,a_i-1) &a_1 \\ (a_{2},a_1) & \cdots & (a_2,a_i-1) &a_2 \\ \cdots & \cdots & \cdots& \cdots \\ (a_{i},a_1) & \cdots & (a_i,a_i-1) &a_i \\ \end{vmatrix} }[/math]. (В правой части этого равенства определитель следует формально разложить по последнему столбцу).

Иногда полученные векторы нормируются сразу после их нахождения и находится система ортонормированных векторов [math]\displaystyle{ \mathbf{q_1},\mathbf{q_2},\ldots,\mathbf{q_k} }[/math]. В этом случае знаменатель в формуле для вычисления проекции [math]\displaystyle{ |\mathbf{q_i}|=1 }[/math] для [math]\displaystyle{ i=1,...,k-1 }[/math], что существенно упрощает вычисления алгоритма. В настоящей статье применяя процесс ортогонализации к системе линейно независимых векторов, мы так и будем поступать.

Если в описанном алгоритме в формулах для вычисления векторов [math]\displaystyle{ \mathbf{b_i}\, }[/math], для [math]\displaystyle{ i=1,...,k }[/math] процесса ортогонализации заменить [math]\displaystyle{ proj_{\mathbf{b_j}}\mathbf{a_{i}} }[/math], для [math]\displaystyle{ j=1,...,i-1 }[/math] на [math]\displaystyle{ proj_{\mathbf{b_j}}\mathbf{b_{i}} }[/math], для [math]\displaystyle{ j=1,...,i-1 }[/math],алгоритм, полученный таким образом называется модифицированный алгоритм Грама–Шмидта.

Чаще всего, процесс Грама–Шмидта приводит к значительному нарушению ортогональности. Что касается модифицированного процесса Грама–Шмидта, он проявляет себя достаточно неусточиво, хоть и чуть менее, чем классический процесс.

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

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

включая нахождения скалярных произведений одинаковых векторов дальнейшего нахождения их длин;

  • [math]\displaystyle{ \dfrac{(k-1)k}{2} }[/math] умножений векторов на число после вычисления нового базисного вектора на итерации.

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

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

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

Входные данные: [math]\displaystyle{ k }[/math] линейно независимых векторов [math]\displaystyle{ \mathbf{a_1},\mathbf{a_2},\ldots,\mathbf{a_k} }[/math] длины [math]\displaystyle{ n }[/math] [math]\displaystyle{ \left(\alpha_{ij}\right. }[/math], где [math]\displaystyle{ j=1,2, \ldots,n }[/math] — координаты вектора [math]\displaystyle{ \mathbf{a_i} }[/math], для [math]\displaystyle{ \left.i=1,2, \ldots,k\right) }[/math].

Вычисляемые данные:

[math]\displaystyle{ k }[/math] ортогональных векторов [math]\displaystyle{ \mathbf{b_1},\mathbf{b_2},...,\mathbf{b_k} }[/math] длины [math]\displaystyle{ n }[/math] [math]\displaystyle{ \left(\beta_{ij}\right. }[/math], где [math]\displaystyle{ j=1,2, \ldots,n }[/math] — координаты вектора [math]\displaystyle{ \mathbf{b_i} }[/math], для [math]\displaystyle{ \left.i=1,2, \ldots,k\right) }[/math], причем [math]\displaystyle{ \mathbf{b_1}=\mathbf{a_1} }[/math], либо

[math]\displaystyle{ k }[/math] ортонормированных векторов [math]\displaystyle{ \mathbf{q_1},\mathbf{q_2},\ldots,\mathbf{q_k} }[/math] длины [math]\displaystyle{ n }[/math] ([math]\displaystyle{ \gamma_{ij} }[/math], [math]\displaystyle{ j=1,2, \ldots,n }[/math] — координаты вектора [math]\displaystyle{ \mathbf{q_i} }[/math], для [math]\displaystyle{ \left.i=1,2, \ldots,k\right) }[/math], причем [math]\displaystyle{ \mathbf{q_1}=\frac{\mathbf{b_i}}{|\mathbf{b_i}|} }[/math], для [math]\displaystyle{ i=1,2, \ldots,k }[/math].

Последовательность исполнения метода:

1. [math]\displaystyle{ len(a_1)=\sqrt{\alpha_{11}^2+\alpha_{12}^2+\ldots+\alpha_{1n}^2} }[/math].

2. При [math]\displaystyle{ i }[/math] от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ n }[/math]:

[math]\displaystyle{ \gamma_{1j}= \frac{\alpha_{1j}}{len(a_1)} }[/math].

3. При [math]\displaystyle{ i }[/math] от [math]\displaystyle{ 2 }[/math] до [math]\displaystyle{ k }[/math]:

при [math]\displaystyle{ j }[/math] от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ n }[/math]:
[math]\displaystyle{ \beta_{ij}=\alpha_{ij}-\sum\limits_{k=1}^{j-1}\left(\sum\limits_{m=1}^n \alpha_{im}\gamma_{km}\right)\gamma_{kj} }[/math]
[math]\displaystyle{ len(b_i)=\sqrt{\beta_{i1}^2+\beta_{i2}^2+\ldots+\beta_{in}^2} }[/math]
при [math]\displaystyle{ j }[/math] от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ n }[/math]:
[math]\displaystyle{ \gamma_{ij}= \frac{\beta_{ij}}{len(b_{i})} }[/math].

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

Для ортогонализации [math]\displaystyle{ n }[/math] линейно независимых векторов длины [math]\displaystyle{ n }[/math] в последовательном варианте с помощью классического метода ортогонализации Грама-Шмидта потребуется:

  • [math]\displaystyle{ k }[/math] вычислений квадратного корня
  • [math]\displaystyle{ \frac{k(k-1)(n-1)}{2} }[/math] сложений,
  • [math]\displaystyle{ \frac{k(k-1)(n-1)}{2} }[/math] вычитаний,
  • [math]\displaystyle{ k^2 n }[/math] умножений,
  • [math]\displaystyle{ k }[/math] делений.

Умножения, сложения и вычитания составляют основную часть алгоритма.

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

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

Представим граф алгоритма с помощью текстового описания, а также с помощью изображения.

Все вершины графа можно разбить на пять групп, каждой из которых соответствует вид исполняемой операции. Каждая вершина расположена в точках с целочисленными координатами, в пространствах с числом измерений от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ 3 }[/math]. Дадим описание каждой из групп.

Первая группа — вершины, которым соответствует операция скалярного умножения вектора на себя. На графе они располагаются в одномерной области. [math]\displaystyle{ i }[/math] изменяется от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ k }[/math].

Значениями аргументов для этих функций являются:

  • при [math]\displaystyle{ i = 1 }[/math] — входные данные [math]\displaystyle{ \{a_{1p}\}, p = 1..n }[/math];
  • при [math]\displaystyle{ i \gt 1 }[/math] — результат выполнения функции в вершине пятой группы с координатами [math]\displaystyle{ \{i-1,1,p\}, p = 1..n }[/math].

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

Вторая группа — вершины, которым соответствует операция SQRT извлечения квадратного корня. Они расположены в одномерной области, [math]\displaystyle{ i }[/math] изменяется от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ k }[/math].

Значением аргумента для этих функций является результат выполнения функции в вершине первой группы, с координатой [math]\displaystyle{ i }[/math].

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

Третья группа – вершины, которым соответствует операция деления. Располагаются в двумерной области, [math]\displaystyle{ i }[/math] изменяется от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ k }[/math], [math]\displaystyle{ p }[/math] изменяется от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ n }[/math].

Значениями аргументов для этих функций являются:

  • делимое:
    • при [math]\displaystyle{ i = 1 }[/math] — входные данные [math]\displaystyle{ a_{1p} }[/math];
    • при [math]\displaystyle{ i \gt 1 }[/math] — результат выполнения функции в вершине пятой группы с координатами [math]\displaystyle{ i-1,1,p }[/math];
  • делитель - результат выполнения функции в вершине второй группы с координатой [math]\displaystyle{ i }[/math].

Результат является выходным данным алгоритма [math]\displaystyle{ q_{ip} }[/math].

Четвертая группа — вершины, которым соответствует операция скалярного умножения векторов [math]\displaystyle{ \mathbf{a}\cdot\mathbf{b} }[/math]. Располагаются в двумерной области, [math]\displaystyle{ i }[/math] изменяется от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ k-1 }[/math], [math]\displaystyle{ j }[/math] изменяется от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ k-i }[/math].

Значениями аргументов для этих функций являются:

  • [math]\displaystyle{ \mathbf{a} }[/math] — входные данные [math]\displaystyle{ \{a_{1+j,p}\},p = 1..n }[/math];
  • [math]\displaystyle{ \mathbf{b} }[/math] — результат выполнения функции в вершине третьей группы с координатой [math]\displaystyle{ \{i,p\}, p = 1..n }[/math].

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

Пятая группа – вершины которые соответствуют операции [math]\displaystyle{ a - b c }[/math]. Располагаются в трехмерной области, [math]\displaystyle{ i }[/math] изменяется от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ k-1 }[/math], [math]\displaystyle{ j }[/math] изменяется от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ k-i }[/math], [math]\displaystyle{ p }[/math] изменяется от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ n }[/math].

Значениями аргументов для этих функций являются:

  • [math]\displaystyle{ a }[/math]:
    • при [math]\displaystyle{ i = 1 }[/math] — входные данные [math]\displaystyle{ a_{1+j,p} }[/math];
    • при [math]\displaystyle{ i \gt 1 }[/math] — результат выполнения функции в вершине пятой группы с координатами [math]\displaystyle{ i-1,j+1,p }[/math];
  • [math]\displaystyle{ b }[/math] — результат выполнения функции в вершине четвертой группы, с координатами [math]\displaystyle{ i,j }[/math];
  • [math]\displaystyle{ c }[/math] — результат выполнения функции в вершине третьей группы с координатой [math]\displaystyle{ i,p }[/math].

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

Описанный граф для случая [math]\displaystyle{ k = 3 }[/math], [math]\displaystyle{ n = 3 }[/math] изображен на рисунке. Каждая группа вершин отличается цветом и буквенным обозначением. "S" — первая группа, "SQ" — вторая группа, "Div" — третья группа, "Dot" — четвертая группа, "f" — пятая группа. Квадратные метки "In" и "out" обозначают передачу входных и выходных данных соответственно.

Рисунок 1. Граф алгоритма с отображением входных и выходных данных

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

Для построения ортонормированного базиса методом Грама–Шмидта необходимо выполнить следующие ярусы операций:

  • [math]\displaystyle{ k }[/math] ярусов вычисления скалярных произведений векторов на самих себя (по одной операций на каждом, сложность операции по высоте и по ширине ЯПФ - корень квадратный);
  • [math]\displaystyle{ k }[/math] ярусов вычисления квадратного корня (по одной операции на каждом);
  • [math]\displaystyle{ k }[/math] ярусов деления (по [math]\displaystyle{ n }[/math] операций на каждом);
  • [math]\displaystyle{ k-1 }[/math] ярус вычисления скалярных произведений пары векторов (от [math]\displaystyle{ 1 }[/math] до [math]\displaystyle{ (k-1) }[/math] операций на каждом,сложность операции по высоте и по ширине ЯПФ - корень квадратный);
  • [math]\displaystyle{ k-1 }[/math] ярус умножения/вычитания чисел (от [math]\displaystyle{ n }[/math] до [math]\displaystyle{ (k-1)n }[/math] операций на каждом).

В этом случае сложность алгоритма при классификации по высоте ЯПФ — [math]\displaystyle{ O(k\sqrt{n}) }[/math], при классификации по ширине ЯПФ — [math]\displaystyle{ O(kn) }[/math].

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

Входные данные: матрица [math]\displaystyle{ A }[/math] с элементами [math]\displaystyle{ \alpha_{ij} }[/math], где [math]\displaystyle{ i }[/math] принимает значения [math]\displaystyle{ 1,\ldots,k }[/math], [math]\displaystyle{ j }[/math] принимает значения [math]\displaystyle{ 1,\ldots,n }[/math]. Здесь [math]\displaystyle{ k\leqslant n }[/math]. По строкам этой матрицы записаны [math]\displaystyle{ k }[/math] линейно-независимых векторов некоторого пространства размерности [math]\displaystyle{ n }[/math].

Объем входных данных: [math]\displaystyle{ kn }[/math].

Выходные данные: матрица [math]\displaystyle{ Q }[/math] с элементами [math]\displaystyle{ \gamma_{ij} }[/math]. Строки этой матрицы также задают [math]\displaystyle{ k }[/math] векторов единичной длины размерности [math]\displaystyle{ n }[/math], причем всякое скалярное произведение двух различных векторов этой системы равно [math]\displaystyle{ 0 }[/math].

Объем выходных данных: [math]\displaystyle{ kn }[/math].

Замечание: Алгоритм может работать с вырожденной матрицей, он выдаёт нулевую строку на шаге [math]\displaystyle{ j }[/math], если строка [math]\displaystyle{ j }[/math] матрицы [math]\displaystyle{ A }[/math] является линейной комбинацией предыдущих строк. В этом случае для корректного продолжения работы алгоритма необходима дополнительная проверка на равенство строки нулю и пропуск соответствующих строк. Количество построенных векторов будет равняться размерности пространства, порождаемого строками матрицы.

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

Отношение последовательной и параллельной сложности алгоритма в случае неограниченных ресурсов равно [math]\displaystyle{ \dfrac{k^2n}{k\sqrt{n}}=k\sqrt{n} }[/math]. Вычислительная мощность алгоритма линейная.

Алгоритм почти полностью детерминирован — единственность результата выполнения гарантирована, однако возможно накопление ошибок округления.

Алгоритм является численно неустойчивым — ошибки округления могут привести к неортогональности полученных векторов.

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

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

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

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

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

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

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

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

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

Для классического метода ортогонализации Грама–Шмидта существуют реализации в математических программных пакетах, таких как

Также метод реализован в библиотеке SpectralPython для языка Python. Для устранения проблемы ошибок численных округлений иногда используется повторное применение метода к уже построенному ортогональному базису.

Поскольку метод ортогонализации Грама–Шмидта гарантирует получение [math]\displaystyle{ j }[/math] ортогональных векторов к концу шага [math]\displaystyle{ j }[/math], а не в самом конце работы алгоритма, используется в итерационных методах, таких как метод Арнольди. Для поддержки работы этого метода реализация ортогонализации Грама–Шмидта включена в библиотеку ARPACK.

Литература

  1. ↑ Математическая энциклопедия / Гл. ред. И. М. Виноградов — М: Советская энциклопедия — Т.4 Ок–Сло, 1984. — 215 с.
  2. ↑ А. Е. Умнов. Аналитическая геометрия и линейная алгебра — 3-е издание, исправленное и дополненное — М.: МФТИ — 2011 — 544 c.
  3. ↑ 3,0 3,1 Meyer C. D. Matrix analysis and applied linear algebra. — Siam, 2000. — Т.2.
  4. ↑ Gram J. P. Ueber die Entwickelung reeller Functionen in Reihen mittelst der Methode der kleinsten Quadrate. — Journal für die reine und angewandte Mathematik. — 1883. — Т. 94. — pp. 41–73.
  5. ↑ Marquis de Laplace P. S. Théorie analytique des probabilités. — V. Courcier, 1820.
  6. ↑ 6,0 6,1 Erchard Shmidt. Mathematische Annalen Zur Theorie der linearen und nichtlinearen Integralgleichungen, 1. Teil: Entwicklung willkürlicher Funktionen nach Systemen vorgeschriebener. — Mathematische Annalen. — 1908. — V. 65. — №. 3. — pp. 370-399. Ошибка цитирования Неверный тег <ref>: название «Shmidt» определено несколько раз для различного содержимого
  7. ↑ Краснов М.Л. Интегральные уравнения. Введение в теорию. — М.: Наука, 1975. — 302 с.
  8. ↑ Марченко В.А. Введение в теорию обратных задач спектрального анализа. — Харьков: Акта, 2005. — 143 с.
  9. ↑ О некоторых неравенствах, относящихся к определенным интегралам. Записки Академии наук по физико-математическому отделению. Серия 8. Т. 6 № 6. — C. 1–53.
  10. ↑ Nussbaum S., Menz G. Object-based image analysis and treaty verification: new approaches in remote sensing-applied to nuclear facilities in Iran. — Springer Science & Business Media, 2008.
  11. ↑ Gopi E. S. Algorithm collections for digital signal processing applications using matlab. — Springer Science & Business Media, 2007.
  12. ↑ Rajasekaran S., Suresh D., Pai G. A. V. Application of sequential learning neural networks to civil engineering modeling problems. — Engineering with Computers. — 2002. — Т. 18. – №. 2. — pp. 138–147.