<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Qmakar</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Qmakar"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Qmakar"/>
	<updated>2026-10-22T17:26:31Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21281</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21281"/>
		<updated>2016-12-18T20:58:31Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Присваивается &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до посчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора проводится&lt;br /&gt;
    выборочная ортогонализация к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы &amp;lt;math&amp;gt;\|T_{t}\|_2, &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \| T \|_2 =  \sup\limits_{\| x \|_2 = 1} \| T x \|_2 = \sup\limits_{(x, x) = 1} \sqrt{(Tx, Tx)}&amp;lt;/math&amp;gt;, подчиненная векторной норме &amp;lt;math&amp;gt; \| x \|_2 = \sqrt{\sum_{i = 1}^n |x_i|^2} &amp;lt;/math&amp;gt;. Т.е. &lt;br /&gt;
       &amp;lt;math&amp;gt; \|    T_{t} \|_2 =  \max\limits_{i=1 \dots t} \theta_i&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \theta_i&amp;lt;/math&amp;gt; - собственные значения матрицы &amp;lt;math&amp;gt; T,&amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Берется &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координата вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и проверяется, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполняется, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Производится возврат к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
Рассмотрим последовательную сложность алгоритма.&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы,&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений, одно вычисление корня,&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений,&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной : &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt;:&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается два вектора : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   2n &amp;lt;/math&amp;gt; вычитаний и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; Повторяется цикл : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз. На каждом из этапов:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы: : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; сравнений,&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Проверяется равенство::  2 умножения, одно сравнение&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца : &amp;lt;math&amp;gt;   n*(j-1) &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножаются два вектора:  &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; умножений и вычитаний,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Одно сложение.&lt;br /&gt;
      Таким образом, т.к. внутренний цикл повторяется &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз, а &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt; в свою очередь пробегает от &amp;lt;math&amp;gt;1 \dots k &amp;lt;/math&amp;gt;, значит, полное количество операций в пункте &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt;, которое будет занимать весь внутренний цикл будет: сравнений &amp;lt;math&amp;gt; \frac{(k-1)k(k+1)}{3} + \frac{k(k-1)}{2} &amp;lt;/math&amp;gt;, умножений: &amp;lt;math&amp;gt; 2\frac{k(k-1)}{2}  + \frac{(k-1)k(k+1)}{3} + \frac{(2n)k(k-1)}{2} &amp;lt;/math&amp;gt;, сложений &amp;lt;math&amp;gt;\frac{(k-1)k(k+1)}{3} + \frac{(n+1)k(k-1)}{2}&amp;lt;/math&amp;gt; и вычитаний &amp;lt;math&amp;gt; \frac{(n)k(k-1)}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение  и собственный вектор ??????????????????????????????????????????????????????????&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, одно сложение. &lt;br /&gt;
    &lt;br /&gt;
    Так, пункты  &amp;lt;math&amp;gt;4.1 - 4.3, 4.5 - 4.8&amp;lt;/math&amp;gt; занимают &amp;lt;math&amp;gt; k*(n+n+n+1)&amp;lt;/math&amp;gt; сложений, &amp;lt;math&amp;gt;k(n+n+2n+n)&amp;lt;/math&amp;gt; умножений, &amp;lt;math&amp;gt;2nk&amp;lt;/math&amp;gt; вычитаний и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Подводя итог, общее количество операций умножения и деления &amp;lt;math&amp;gt;n + n + 2\frac{k(k-1)}{2}  + \frac{(k-1)k(k+1)}{3} + \frac{(2n)k(k-1)}{2} +  k(n+n+2n+n) + n&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;O( k^3+nk^2+k^2+kn+n )&amp;lt;/math&amp;gt;&lt;br /&gt;
 общее количество сложений и вычитаний: &amp;lt;math&amp;gt; n + \frac{(k-1)k(k+1)}{3} + \frac{(n+1)k(k-1)}{2}+ \frac{(n)k(k-1)}{2} + k*(n+n+n+1) + 2nk&amp;lt;/math&amp;gt;, т.е.  &amp;lt;math&amp;gt;O( k^3+nk^2+kn+n )&amp;lt;/math&amp;gt;&lt;br /&gt;
 И &amp;lt;math&amp;gt; \frac{(k-1)k(k+1)}{3} + \frac{k(k-1)}{2} &amp;lt;/math&amp;gt; сравнений ( &amp;lt;math&amp;gt;O( k^3+k^2)&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
НЕ ЗАБЫТЬ СЛОЖНОСТЬ НАХОЖДЕНИЯ СОБСТЗНАЧ&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[File:LanzochGraph.png]]&lt;br /&gt;
&lt;br /&gt;
Троеточием в данном алгоритме обозначаются операции, выполняющиеся для всех элементов от &amp;lt;math&amp;gt;i=1..n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Хотя алгоритм является итерационным, возможно распараллелить внутри каждой итерации умножение матрицы на вектор и процесс переортогонализации Грамма-Шмидта.&lt;br /&gt;
&lt;br /&gt;
Процесс умножения матриц matvec можно распараллелить несколькими способами[https://eprint.iacr.org/2011/416.pdf].&lt;br /&gt;
&lt;br /&gt;
Как видно из графа, для выполнения j-й операции, необходимо выполнить следующие ярусы:&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом (вычисление &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\alpha_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (первая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вторая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\beta_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус делений размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вычисление &amp;lt;math&amp;gt;q_{j + 1}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Если учесть весь ресурс параллелизма, можно получить мультипликативную вычислительную сложность всего алгоритма: &amp;lt;math&amp;gt;O(n^2k+nk^2)/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность данного алгоритма, как отношение числа операций к суммарному объему входных и выходных, данных равняется  &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\theta_1 \dots \theta_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Если &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; эрмитова матрица, то алгоритм Ланцоша и Bi-Lanczos сходятся к одинаковым трехдиагональным матрицам Ритца[http://ta.twi.tudelft.nl/nw/users/vuik/papers/DUT-TWI-96-44.pdf].&lt;br /&gt;
&lt;br /&gt;
При реализации классического алгоритма Ланцоша возникает большая погрешность при округлении. Вариант с полной переортогонализацией позволяет избегать больших погрешностей, однако является более ресурсоемким.  Вариант с частичной переортогонализацией является промежуточным. &lt;br /&gt;
&lt;br /&gt;
Алгоритм может завершить свою работу досрочно, когда найденные собственные значения будут достаточно близки к целевым.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21279</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21279"/>
		<updated>2016-12-18T20:58:00Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Присваивается &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до посчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора проводится&lt;br /&gt;
    выборочная ортогонализация к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы &amp;lt;math&amp;gt;\|T_{t}\|_2, &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \| T \|_2 =  \sup\limits_{\| x \|_2 = 1} \| T x \|_2 = \sup\limits_{(x, x) = 1} \sqrt{(Tx, Tx)}&amp;lt;/math&amp;gt;, подчиненная векторной норме &amp;lt;math&amp;gt; \| x \|_2 = \sqrt{\sum_{i = 1}^n |x_i|^2} &amp;lt;/math&amp;gt;. Т.е. &lt;br /&gt;
       &amp;lt;math&amp;gt; \|    T_{t} \|_2 =  \max\limits_{i=1 \dots t} \theta_i&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \theta_i&amp;lt;/math&amp;gt; - собственные значения матрицы &amp;lt;math&amp;gt; T,&amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Берется &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координата вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и проверяется, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполняется, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Производится возврат к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
Рассмотрим последовательную сложность алгоритма.&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы,&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений, одно вычисление корня,&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений,&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной : &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt;:&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается два вектора : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   2n &amp;lt;/math&amp;gt; вычитаний и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; Повторяется цикл : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз. На каждом из этапов:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы: : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; сравнений,&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Проверяется равенство::  2 умножения, одно сравнение&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца : &amp;lt;math&amp;gt;   n*(j-1) &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножаются два вектора:  &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; умножений и вычитаний,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Одно сложение.&lt;br /&gt;
      Таким образом, т.к. внутренний цикл повторяется &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз, а &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt; в свою очередь пробегает от &amp;lt;math&amp;gt;1 \dots k &amp;lt;/math&amp;gt;, значит, полное количество операций в пункте &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt;, которое будет занимать весь внутренний цикл будет: сравнений &amp;lt;math&amp;gt; \frac{(k-1)k(k+1)}{3} + \frac{k(k-1)}{2} &amp;lt;/math&amp;gt;, умножений: &amp;lt;math&amp;gt; 2\frac{k(k-1)}{2}  + \frac{(k-1)k(k+1)}{3} + \frac{(2n)k(k-1)}{2} &amp;lt;/math&amp;gt;, сложений &amp;lt;math&amp;gt;\frac{(k-1)k(k+1)}{3} + \frac{(n+1)k(k-1)}{2}&amp;lt;/math&amp;gt; и вычитаний &amp;lt;math&amp;gt; \frac{(n)k(k-1)}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение  и собственный вектор ??????????????????????????????????????????????????????????&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, одно сложение. &lt;br /&gt;
    &lt;br /&gt;
    Так, пункты  &amp;lt;math&amp;gt;4.1 - 4.3, 4.5 - 4.8&amp;lt;/math&amp;gt; занимают &amp;lt;math&amp;gt; k*(n+n+n+1)&amp;lt;/math&amp;gt; сложений, &amp;lt;math&amp;gt;k(n+n+2n+n)&amp;lt;/math&amp;gt; умножений, &amp;lt;math&amp;gt;2nk&amp;lt;/math&amp;gt; вычитаний и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Подводя итог, общее количество операций умножения и деления &amp;lt;math&amp;gt;n + n + 2\frac{k(k-1)}{2}  + \frac{(k-1)k(k+1)}{3} + \frac{(2n)k(k-1)}{2} +  k(n+n+2n+n) + n&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;O( k^3+nk^2+k^2+kn+n )&amp;lt;/math&amp;gt;&lt;br /&gt;
 общее количество сложений и вычитаний: &amp;lt;math&amp;gt; n + \frac{(k-1)k(k+1)}{3} + \frac{(n+1)k(k-1)}{2}+ \frac{(n)k(k-1)}{2} + k*(n+n+n+1) + 2nk&amp;lt;/math&amp;gt;, т.е.  &amp;lt;math&amp;gt;O( k^3+nk^2+kn+n )&amp;lt;/math&amp;gt;&lt;br /&gt;
 И &amp;lt;math&amp;gt; \frac{(k-1)k(k+1)}{3} + \frac{k(k-1)}{2} &amp;lt;/math&amp;gt; сравнений ( &amp;lt;math&amp;gt;O( k^3+k^2)&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
НЕ ЗАБЫТЬ СЛОЖНОСТЬ НАХОЖДЕНИЯ СОБСТЗНАЧ&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[File:LanzochGraph.png]]&lt;br /&gt;
&lt;br /&gt;
Троеточием в данном алгоритме обозначаются операции, выполняющиеся для всех элементов от &amp;lt;math&amp;gt;i=1..n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Хотя алгоритм является итерационным, возможно распараллелить внутри каждой итерации умножение матрицы на вектор и процесс переортогонализации Грамма-Шмидта.&lt;br /&gt;
&lt;br /&gt;
Процесс умножения матриц matvec можно распараллелить несколькими способами[https://eprint.iacr.org/2011/416.pdf].&lt;br /&gt;
&lt;br /&gt;
Как видно из графа, для выполнения j-й операции, необходимо выполнить следующие ярусы:&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом (вычисление &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\alpha_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (первая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вторая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\beta_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус делений размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вычисление &amp;lt;math&amp;gt;q_{j + 1}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Если учесть весь ресурс параллелизма, можно получить мультипликативную вычислительную сложность всего алгоритма: &amp;lt;math&amp;gt;O(n^2k+nk^2)/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность данного алгоритма, как отношение числа операций к суммарному объему входных и выходных, данных равняется  &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\theta_1 \dots \theta_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Если &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; эрмитова матрица, то алгоритм Ланцоша и Bi-Lanczos сходятся к одинаковым трехдиагональным матрицам Ритца[http://ta.twi.tudelft.nl/nw/users/vuik/papers/DUT-TWI-96-44.pdf].&lt;br /&gt;
&lt;br /&gt;
При реализации классического алгоритма Ланцоша возникает большая погрешность при округлении. Вариант с полной переортогонализацией позволяет избегать больших погрешностей, однако является более ресурсоемким.  Вариант с частичной переортогонализацией является промежуточным. &lt;br /&gt;
&lt;br /&gt;
Алгоритм может завершить свою работу досрочно, когда найденные собственные значения будут достаточно близки к целевым.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21278</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21278"/>
		<updated>2016-12-18T20:57:35Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Присваивается &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до посчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора проводится&lt;br /&gt;
    выборочная ортогонализация к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы &amp;lt;math&amp;gt;\|T_{t}\|_2, &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \| T \|_2 =  \sup\limits_{\| x \|_2 = 1} \| T x \|_2 = \sup\limits_{(x, x) = 1} \sqrt{(Tx, Tx)}&amp;lt;/math&amp;gt;, подчиненная векторной норме &amp;lt;math&amp;gt; \| x \|_2 = \sqrt{\sum_{i = 1}^n |x_i|^2} &amp;lt;/math&amp;gt;. Т.е. &lt;br /&gt;
       &amp;lt;math&amp;gt; \|    T_{t} \|_2 =  \max\limits_{i=1 \dots t} \theta_i&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \theta_i&amp;lt;/math&amp;gt; - собственные значения матрицы &amp;lt;math&amp;gt; T,&amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Берется &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координата вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и проверяется, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполняется, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Производится возврат к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 1 + n &amp;lt;/math&amp;gt; присваиваний&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
Рассмотрим последовательную сложность алгоритма.&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы,&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений, одно вычисление корня,&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений,&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной : &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt;:&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается два вектора : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   2n &amp;lt;/math&amp;gt; вычитаний и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; Повторяется цикл : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз. На каждом из этапов:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы: : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; сравнений,&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Проверяется равенство::  2 умножения, одно сравнение&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца : &amp;lt;math&amp;gt;   n*(j-1) &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножаются два вектора:  &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; умножений и вычитаний,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Одно сложение.&lt;br /&gt;
      Таким образом, т.к. внутренний цикл повторяется &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз, а &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt; в свою очередь пробегает от &amp;lt;math&amp;gt;1 \dots k &amp;lt;/math&amp;gt;, значит, полное количество операций в пункте &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt;, которое будет занимать весь внутренний цикл будет: сравнений &amp;lt;math&amp;gt; \frac{(k-1)k(k+1)}{3} + \frac{k(k-1)}{2} &amp;lt;/math&amp;gt;, умножений: &amp;lt;math&amp;gt; 2\frac{k(k-1)}{2}  + \frac{(k-1)k(k+1)}{3} + \frac{(2n)k(k-1)}{2} &amp;lt;/math&amp;gt;, сложений &amp;lt;math&amp;gt;\frac{(k-1)k(k+1)}{3} + \frac{(n+1)k(k-1)}{2}&amp;lt;/math&amp;gt; и вычитаний &amp;lt;math&amp;gt; \frac{(n)k(k-1)}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение  и собственный вектор ??????????????????????????????????????????????????????????&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, одно сложение. &lt;br /&gt;
    &lt;br /&gt;
    Так, пункты  &amp;lt;math&amp;gt;4.1 - 4.3, 4.5 - 4.8&amp;lt;/math&amp;gt; занимают &amp;lt;math&amp;gt; k*(n+n+n+1)&amp;lt;/math&amp;gt; сложений, &amp;lt;math&amp;gt;k(n+n+2n+n)&amp;lt;/math&amp;gt; умножений, &amp;lt;math&amp;gt;2nk&amp;lt;/math&amp;gt; вычитаний и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Подводя итог, общее количество операций умножения и деления &amp;lt;math&amp;gt;n + n + 2\frac{k(k-1)}{2}  + \frac{(k-1)k(k+1)}{3} + \frac{(2n)k(k-1)}{2} +  k(n+n+2n+n) + n&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;O( k^3+nk^2+k^2+kn+n )&amp;lt;/math&amp;gt;&lt;br /&gt;
 общее количество сложений и вычитаний: &amp;lt;math&amp;gt; n + \frac{(k-1)k(k+1)}{3} + \frac{(n+1)k(k-1)}{2}+ \frac{(n)k(k-1)}{2} + k*(n+n+n+1) + 2nk&amp;lt;/math&amp;gt;, т.е.  &amp;lt;math&amp;gt;O( k^3+nk^2+kn+n )&amp;lt;/math&amp;gt;&lt;br /&gt;
 И &amp;lt;math&amp;gt; \frac{(k-1)k(k+1)}{3} + \frac{k(k-1)}{2} &amp;lt;/math&amp;gt; сравнений ( &amp;lt;math&amp;gt;O( k^3+k^2)&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
НЕ ЗАБЫТЬ СЛОЖНОСТЬ НАХОЖДЕНИЯ СОБСТЗНАЧ&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[File:LanzochGraph.png]]&lt;br /&gt;
&lt;br /&gt;
Троеточием в данном алгоритме обозначаются операции, выполняющиеся для всех элементов от &amp;lt;math&amp;gt;i=1..n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Хотя алгоритм является итерационным, возможно распараллелить внутри каждой итерации умножение матрицы на вектор и процесс переортогонализации Грамма-Шмидта.&lt;br /&gt;
&lt;br /&gt;
Процесс умножения матриц matvec можно распараллелить несколькими способами[https://eprint.iacr.org/2011/416.pdf].&lt;br /&gt;
&lt;br /&gt;
Как видно из графа, для выполнения j-й операции, необходимо выполнить следующие ярусы:&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом (вычисление &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\alpha_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (первая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вторая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\beta_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус делений размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вычисление &amp;lt;math&amp;gt;q_{j + 1}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Если учесть весь ресурс параллелизма, можно получить мультипликативную вычислительную сложность всего алгоритма: &amp;lt;math&amp;gt;O(n^2k+nk^2)/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность данного алгоритма, как отношение числа операций к суммарному объему входных и выходных, данных равняется  &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\theta_1 \dots \theta_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Если &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; эрмитова матрица, то алгоритм Ланцоша и Bi-Lanczos сходятся к одинаковым трехдиагональным матрицам Ритца[http://ta.twi.tudelft.nl/nw/users/vuik/papers/DUT-TWI-96-44.pdf].&lt;br /&gt;
&lt;br /&gt;
При реализации классического алгоритма Ланцоша возникает большая погрешность при округлении. Вариант с полной переортогонализацией позволяет избегать больших погрешностей, однако является более ресурсоемким.  Вариант с частичной переортогонализацией является промежуточным. &lt;br /&gt;
&lt;br /&gt;
Алгоритм может завершить свою работу досрочно, когда найденные собственные значения будут достаточно близки к целевым.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21274</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21274"/>
		<updated>2016-12-18T20:45:59Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Присваивается &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до посчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора проводится&lt;br /&gt;
    выборочная ортогонализация к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы &amp;lt;math&amp;gt;\|T_{t}\|_2, &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \| T \|_2 =  \sup\limits_{\| x \|_2 = 1} \| T x \|_2 = \sup\limits_{(x, x) = 1} \sqrt{(Tx, Tx)}&amp;lt;/math&amp;gt;, подчиненная векторной норме &amp;lt;math&amp;gt; \| x \|_2 = \sqrt{\sum_{i = 1}^n |x_i|^2} &amp;lt;/math&amp;gt;. Т.е. &lt;br /&gt;
       &amp;lt;math&amp;gt; \|    T_{t} \|_2 =  \max\limits_{i=1 \dots t} \theta_i&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \theta_i&amp;lt;/math&amp;gt; - собственные значения матрицы &amp;lt;math&amp;gt; T,&amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Берется &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координата вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и проверяется, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполняется, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Производится возврат к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 1 + n &amp;lt;/math&amp;gt; присваиваний&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
Рассмотрим последовательную сложность алгоритма.&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы,&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений, одно вычисление корня,&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений,&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной : &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt;:&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается два вектора : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   2n &amp;lt;/math&amp;gt; вычитаний и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; Повторяется цикл : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз. На каждом из этапов:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы: : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; сравнений,&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Проверяется равенство::  2 умножения, одно сравнение&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца : &amp;lt;math&amp;gt;   n*(j-1) &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножаются два вектора:  &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; умножений и вычитаний,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Одно сложение.&lt;br /&gt;
      Таким образом, т.к. внутренний цикл повторяется &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз, а &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt; в свою очередь пробегает от &amp;lt;math&amp;gt;1 \dots k &amp;lt;/math&amp;gt;, значит, полное количество операций в пункте &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt;, которое будет занимать весь внутренний цикл будет: сравнений &amp;lt;math&amp;gt; \frac{(k-1)k(k+1)}{3} + \frac{k(k-1)}{2} &amp;lt;/math&amp;gt;, умножений: &amp;lt;math&amp;gt; 2\frac{k(k-1)}{2}  + \frac{(k-1)k(k+1)}{3} + \frac{(2n)k(k-1}{2} &amp;lt;/math&amp;gt;, сложений &amp;lt;math&amp;gt;\frac{(k-1)k(k+1)}{3} + \frac{(n+1)k(k-1)}{2}&amp;lt;/math&amp;gt; и вычитаний &amp;lt;math&amp;gt; \frac{(n)k(k-1)}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение  и собственный вектор ??????????????????????????????????????????????????????????&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, одно сложение. &lt;br /&gt;
    &lt;br /&gt;
    Так, пункты  &amp;lt;math&amp;gt;4.1 - 4.3, 4.5 - 4.8&amp;lt;/math&amp;gt; занимают &amp;lt;math&amp;gt; k*(n+n+n+1)&amp;lt;/math&amp;gt; сложений, &amp;lt;math&amp;gt;k(n+n+2n+n)&amp;lt;/math&amp;gt; умножений, &amp;lt;math&amp;gt;2nk&amp;lt;/math&amp;gt; вычитаний и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[File:LanzochGraph.png]]&lt;br /&gt;
&lt;br /&gt;
Троеточием в данном алгоритме обозначаются операции, выполняющиеся для всех элементов от &amp;lt;math&amp;gt;i=1..n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Хотя алгоритм является итерационным, возможно распараллелить внутри каждой итерации умножение матрицы на вектор и процесс переортогонализации Грамма-Шмидта.&lt;br /&gt;
&lt;br /&gt;
Процесс умножения матриц matvec можно распараллелить несколькими способами[https://eprint.iacr.org/2011/416.pdf].&lt;br /&gt;
&lt;br /&gt;
Как видно из графа, для выполнения j-й операции, необходимо выполнить следующие ярусы:&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом (вычисление &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\alpha_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (первая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вторая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\beta_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус делений размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вычисление &amp;lt;math&amp;gt;q_{j + 1}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Если учесть весь ресурс параллелизма, можно получить мультипликативную вычислительную сложность всего алгоритма: &amp;lt;math&amp;gt;O(n^2k+nk^2)/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность данного алгоритма, как отношение числа операций к суммарному объему входных и выходных, данных равняется  &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\theta_1 \dots \theta_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Если &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; эрмитова матрица, то алгоритм Ланцоша и Bi-Lanczos сходятся к одинаковым трехдиагональным матрицам Ритца[http://ta.twi.tudelft.nl/nw/users/vuik/papers/DUT-TWI-96-44.pdf].&lt;br /&gt;
&lt;br /&gt;
При реализации классического алгоритма Ланцоша возникает большая погрешность при округлении. Вариант с полной переортогонализацией позволяет избегать больших погрешностей, однако является более ресурсоемким.  Вариант с частичной переортогонализацией является промежуточным. &lt;br /&gt;
&lt;br /&gt;
Алгоритм может завершить свою работу досрочно, когда найденные собственные значения будут достаточно близки к целевым.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21267</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21267"/>
		<updated>2016-12-18T20:34:13Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Присваивается &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до посчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора проводится&lt;br /&gt;
    выборочная ортогонализация к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы &amp;lt;math&amp;gt;\|T_{t}\|_2, &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \| T \|_2 =  \sup\limits_{\| x \|_2 = 1} \| T x \|_2 = \sup\limits_{(x, x) = 1} \sqrt{(Tx, Tx)}&amp;lt;/math&amp;gt;, подчиненная векторной норме &amp;lt;math&amp;gt; \| x \|_2 = \sqrt{\sum_{i = 1}^n |x_i|^2} &amp;lt;/math&amp;gt;. Т.е. &lt;br /&gt;
       &amp;lt;math&amp;gt; \|    T_{t} \|_2 =  \max\limits_{i=1 \dots t} \theta_i&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \theta_i&amp;lt;/math&amp;gt; - собственные значения матрицы &amp;lt;math&amp;gt; T,&amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Берется &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координата вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и проверяется, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполняется, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Производится возврат к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 1 + n &amp;lt;/math&amp;gt; присваиваний&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
Рассмотрим последовательную сложность алгоритма.&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы,&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений, одно вычисление корня,&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений,&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной : &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt;:&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается два вектора : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   2n &amp;lt;/math&amp;gt; вычитаний и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; Повторяется цикл : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз. На каждом из этапов:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы: : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; сравнений,&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Проверяется равенство::  2 умножения, одно сравнение&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца : &amp;lt;math&amp;gt;   n*(j-1) &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножаются два вектора:  &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; умножений и вычитаний,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Одно сложение.&lt;br /&gt;
            Таким образом, т.к. внутренний цикл повторяется &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз, а &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt; в свою очередь пробегает от &amp;lt;math&amp;gt;1 \dots k &amp;lt;/math&amp;gt;, значит, полное количество операций, которое будет занимать весь внутренний цикл будет: сравнений &amp;lt;math&amp;gt; \frac{(k-1)k(k+1)}{3} + \frac{k(k-1}{2} &amp;lt;/math&amp;gt;, умножений: &amp;lt;math&amp;gt; 2\frac{k(k-1)}{2}  + \frac{(k-1)k(k+1)}{3} + \frac{(2n)k(k-1}{2} &amp;lt;/math&amp;gt;, сложений &amp;lt;math&amp;gt;\frac{(k-1)k(k+1)}{3} + \frac{(n+1)k(k-1)}{2}&amp;lt;/math&amp;gt; и вычитаний &amp;lt;math&amp;gt; \frac{(n)k(k-1)}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[File:LanzochGraph.png]]&lt;br /&gt;
&lt;br /&gt;
Троеточием в данном алгоритме обозначаются операции, выполняющиеся для всех элементов от &amp;lt;math&amp;gt;i=1..n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Хотя алгоритм является итерационным, возможно распараллелить внутри каждой итерации умножение матрицы на вектор и процесс переортогонализации Грамма-Шмидта.&lt;br /&gt;
&lt;br /&gt;
Процесс умножения матриц matvec можно распараллелить несколькими способами[https://eprint.iacr.org/2011/416.pdf].&lt;br /&gt;
&lt;br /&gt;
Как видно из графа, для выполнения j-й операции, необходимо выполнить следующие ярусы:&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом (вычисление &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\alpha_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (первая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вторая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\beta_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус делений размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вычисление &amp;lt;math&amp;gt;q_{j + 1}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Если учесть весь ресурс параллелизма, можно получить мультипликативную вычислительную сложность всего алгоритма: &amp;lt;math&amp;gt;O(n^2k+nk^2)/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность данного алгоритма, как отношение числа операций к суммарному объему входных и выходных, данных равняется  &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\theta_1 \dots \theta_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Если &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; эрмитова матрица, то алгоритм Ланцоша и Bi-Lanczos сходятся к одинаковым трехдиагональным матрицам Ритца[http://ta.twi.tudelft.nl/nw/users/vuik/papers/DUT-TWI-96-44.pdf].&lt;br /&gt;
&lt;br /&gt;
При реализации классического алгоритма Ланцоша возникает большая погрешность при округлении. Вариант с полной переортогонализацией позволяет избегать больших погрешностей, однако является более ресурсоемким.  Вариант с частичной переортогонализацией является промежуточным. &lt;br /&gt;
&lt;br /&gt;
Алгоритм может завершить свою работу досрочно, когда найденные собственные значения будут достаточно близки к целевым.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21258</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21258"/>
		<updated>2016-12-18T20:17:18Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Присваивается &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до посчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора проводится&lt;br /&gt;
    выборочная ортогонализация к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы &amp;lt;math&amp;gt;\|T_{t}\|_2, &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \| T \|_2 =  \sup\limits_{\| x \|_2 = 1} \| T x \|_2 = \sup\limits_{(x, x) = 1} \sqrt{(Tx, Tx)}&amp;lt;/math&amp;gt;, подчиненная векторной норме &amp;lt;math&amp;gt; \| x \|_2 = \sqrt{\sum_{i = 1}^n |x_i|^2} &amp;lt;/math&amp;gt;. Т.е. &lt;br /&gt;
       &amp;lt;math&amp;gt; \|    T_{t} \|_2 =  \max\limits_{i=1 \dots t} \theta_i&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \theta_i&amp;lt;/math&amp;gt; - собственные значения матрицы &amp;lt;math&amp;gt; T,&amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Берется &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координата вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и проверяется, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполняется, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Производится возврат к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 1 + n &amp;lt;/math&amp;gt; присваиваний&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
Рассмотрим последовательную сложность алгоритма.&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы,&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; сложений и умножений, одно вычисление корня,&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы: &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; делений,&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной : &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt;:&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается два вектора : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   2n &amp;lt;/math&amp;gt; вычитаний и умножений,&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; Повторяется цикл : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз. На каждом из этапов:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы: : &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; сравнений,&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Проверяется равенство::  2 умножения, одно сравнение&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца : &amp;lt;math&amp;gt;   n*(j-1) &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножаются два вектора:  &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; сложений и умножений,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов : &amp;lt;math&amp;gt;   n &amp;lt;/math&amp;gt; умножений и вычитаний,&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Одно сложение.&lt;br /&gt;
            Таким образом, т.к. внутренний цикл повторяется &amp;lt;math&amp;gt;   j-1 &amp;lt;/math&amp;gt; раз, а &amp;lt;math&amp;gt;   j &amp;lt;/math&amp;gt; в свою очередь пробегает от &amp;lt;math&amp;gt;1 \dots k &amp;lt;/math&amp;gt;, значит, полное количество операций, которое будет занимать весь внутренний цикл будет равно &amp;lt;math&amp;gt;  &amp;lt;/math&amp;gt; раз&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[File:LanzochGraph.png]]&lt;br /&gt;
&lt;br /&gt;
Троеточием в данном алгоритме обозначаются операции, выполняющиеся для всех элементов от &amp;lt;math&amp;gt;i=1..n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Хотя алгоритм является итерационным, возможно распараллелить внутри каждой итерации умножение матрицы на вектор и процесс переортогонализации Грамма-Шмидта.&lt;br /&gt;
&lt;br /&gt;
Процесс умножения матриц matvec можно распараллелить несколькими способами[https://eprint.iacr.org/2011/416.pdf].&lt;br /&gt;
&lt;br /&gt;
Как видно из графа, для выполнения j-й операции, необходимо выполнить следующие ярусы:&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом (вычисление &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\alpha_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (первая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вторая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\beta_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус делений размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вычисление &amp;lt;math&amp;gt;q_{j + 1}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Если учесть весь ресурс параллелизма, можно получить мультипликативную вычислительную сложность всего алгоритма: &amp;lt;math&amp;gt;O(n^2k+nk^2)/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность данного алгоритма, как отношение числа операций к суммарному объему входных и выходных, данных равняется  &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\theta_1 \dots \theta_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Если &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; эрмитова матрица, то алгоритм Ланцоша и Bi-Lanczos сходятся к одинаковым трехдиагональным матрицам Ритца[http://ta.twi.tudelft.nl/nw/users/vuik/papers/DUT-TWI-96-44.pdf].&lt;br /&gt;
&lt;br /&gt;
При реализации классического алгоритма Ланцоша возникает большая погрешность при округлении. Вариант с полной переортогонализацией позволяет избегать больших погрешностей, однако является более ресурсоемким.  Вариант с частичной переортогонализацией является промежуточным. &lt;br /&gt;
&lt;br /&gt;
Алгоритм может завершить свою работу досрочно, когда найденные собственные значения будут достаточно близки к целевым.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21247</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21247"/>
		<updated>2016-12-18T19:42:57Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Присваивается &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до посчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора проводится&lt;br /&gt;
    выборочная ортогонализация к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы &amp;lt;math&amp;gt;\|T_{t}\|_2, &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \| T \|_2 =  \sup\limits_{\| x \|_2 = 1} \| T x \|_2 = \sup\limits_{(x, x) = 1} \sqrt{(Tx, Tx)}&amp;lt;/math&amp;gt;, подчиненная векторной норме &amp;lt;math&amp;gt; \| x \|_2 = \sqrt{\sum_{i = 1}^n |x_i|^2} &amp;lt;/math&amp;gt;. Т.е. &lt;br /&gt;
       &amp;lt;math&amp;gt; \|    T_{t} \|_2 =  \max\limits_{i=1 \dots t} \theta_i&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \theta_i&amp;lt;/math&amp;gt; - собственные значения матрицы &amp;lt;math&amp;gt; T,&amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Берется &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координата вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и проверяется, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполняется, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Производится возврат к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[File:LanzochGraph.png]]&lt;br /&gt;
&lt;br /&gt;
Троеточием в данном алгоритме обозначаются операции, выполняющиеся для всех элементов от &amp;lt;math&amp;gt;i=1..n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Хотя алгоритм является итерационным, возможно распараллелить внутри каждой итерации умножение матрицы на вектор и процесс переортогонализации Грамма-Шмидта.&lt;br /&gt;
&lt;br /&gt;
Процесс умножения матриц matvec можно распараллелить несколькими способами[https://eprint.iacr.org/2011/416.pdf].&lt;br /&gt;
&lt;br /&gt;
Как видно из графа, для выполнения j-й операции, необходимо выполнить следующие ярусы:&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом (вычисление &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\alpha_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (первая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вторая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\beta_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус делений размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вычисление &amp;lt;math&amp;gt;q_{j + 1}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Если учесть весь ресурс параллелизма, можно получить мультипликативную вычислительную сложность всего алгоритма: &amp;lt;math&amp;gt;O(n^2k+nk^2)/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность данного алгоритма, как отношение числа операций к суммарному объему входных и выходных, данных равняется  &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\theta_1 \dots \theta_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Если &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; эрмитова матрица, то алгоритм Ланцоша и Bi-Lanczos сходятся к одинаковым трехдиагональным матрицам Ритца[http://ta.twi.tudelft.nl/nw/users/vuik/papers/DUT-TWI-96-44.pdf].&lt;br /&gt;
&lt;br /&gt;
При реализации классического алгоритма Ланцоша возникает большая погрешность при округлении. Вариант с полной переортогонализацией позволяет избегать больших погрешностей, однако является более ресурсоемким.  Вариант с частичной переортогонализацией является промежуточным. &lt;br /&gt;
&lt;br /&gt;
Алгоритм может завершить свою работу досрочно, когда найденные собственные значения будут достаточно близки к целевым.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21237</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=21237"/>
		<updated>2016-12-18T18:38:55Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируются векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считается норма вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находится первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считается произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; Присваивается &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до посчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора проводится&lt;br /&gt;
    выборочная ортогонализация к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Считается норма матрицы &amp;lt;math&amp;gt;\|T_{t}\|, &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Берется &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координата вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и проверяется, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполняется, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Ищется вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножается &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляется линейная комбинация векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Производится возврат к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Ищется норма вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Ищется вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычисляется новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличивается &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, производится возврат к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[File:LanzochGraph.png]]&lt;br /&gt;
&lt;br /&gt;
Троеточием в данном алгоритме обозначаются операции, выполняющиеся для всех элементов от &amp;lt;math&amp;gt;i=1..n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Хотя алгоритм является итерационным, возможно распараллелить внутри каждой итерации умножение матрицы на вектор и процесс переортогонализации Грамма-Шмидта.&lt;br /&gt;
&lt;br /&gt;
Процесс умножения матриц matvec можно распараллелить несколькими способами[https://eprint.iacr.org/2011/416.pdf].&lt;br /&gt;
&lt;br /&gt;
Как видно из графа, для выполнения j-й операции, необходимо выполнить следующие ярусы:&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом (вычисление &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\alpha_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (первая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; операциями умножения в каждом, &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус вычитаний размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вторая переортогонализация);&lt;br /&gt;
# &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов сложений с &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; операцией умножения в каждом (вычисление &amp;lt;math&amp;gt;\beta_j&amp;lt;/math&amp;gt;);&lt;br /&gt;
# &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; ярус делений размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (вычисление &amp;lt;math&amp;gt;q_{j + 1}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Если учесть весь ресурс параллелизма, можно получить мультипликативную вычислительную сложность всего алгоритма: &amp;lt;math&amp;gt;O(n^2k+nk^2)/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность данного алгоритма, как отношение числа операций к суммарному объему входных и выходных, данных равняется  &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\theta_1 \dots \theta_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Если &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; эрмитова матрица, то алгоритм Ланцоша и Bi-Lanczos сходятся к одинаковым трехдиагональным матрицам Ритца[http://ta.twi.tudelft.nl/nw/users/vuik/papers/DUT-TWI-96-44.pdf].&lt;br /&gt;
&lt;br /&gt;
При реализации классического алгоритма Ланцоша возникает большая погрешность при округлении. Вариант с полной переортогонализацией позволяет избегать больших погрешностей, однако является более ресурсоемким.  Вариант с частичной переортогонализацией является промежуточным. &lt;br /&gt;
&lt;br /&gt;
Алгоритм может завершить свою работу досрочно, когда найденные собственные значения будут достаточно близки к целевым.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20677</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20677"/>
		<updated>2016-12-11T22:30:05Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируем векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считаем норму вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находим первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считаем произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножаем &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляем линейную комбинацию векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; присвоить &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до высчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора провести&lt;br /&gt;
    выборочную ортогонализацию к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Высчитать норму матрицы &amp;lt;math&amp;gt;\|T_{t}\|, &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Взять &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координату вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и понять, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполнено, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Найти вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножаем &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляем линейную комбинацию векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличить &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Вернуться к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Найти норму вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Найти вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычислить новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличить &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, вернуться к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\theta_1 \dots \theta_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
Фишечки, клевые свойства, сложность реализаций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20671</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20671"/>
		<updated>2016-12-11T21:57:52Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;1)&amp;lt;/math&amp;gt; Инициализируем векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0,&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;2)&amp;lt;/math&amp;gt; Считаем норму вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;3)&amp;lt;/math&amp;gt; Находим первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2},&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;4)&amp;lt;/math&amp;gt; Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j: &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.1)&amp;lt;/math&amp;gt; Считаем произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_d - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.2)&amp;lt;/math&amp;gt; Скалярно умножаем &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.3)&amp;lt;/math&amp;gt; Вычисляем линейную комбинацию векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.4)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; присвоить &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до высчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора провести&lt;br /&gt;
    выборочную ортогонализацию к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.1)&amp;lt;/math&amp;gt; Высчитать норму матрицы &amp;lt;math&amp;gt;\|T_{t}\|, &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;4.4.2)&amp;lt;/math&amp;gt; Взять &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координату вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и понять, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, ,&amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполнено, то&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.1)&amp;lt;/math&amp;gt; Найти вектор Ритца &amp;lt;math&amp;gt;y_{i,t_d} = \sum\limits_{x=1}^{t} q_{x_d} v_{i_x}, \; d = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_d}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.2)&amp;lt;/math&amp;gt; Скалярно умножаем &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d,&amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.3)&amp;lt;/math&amp;gt; Вычисляем линейную комбинацию векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t}, &amp;lt;/math&amp;gt;&lt;br /&gt;
           &amp;lt;math&amp;gt;4.4.2.4)&amp;lt;/math&amp;gt; Увеличить &amp;lt;math&amp;gt;i &amp;lt;/math&amp;gt;. Вернуться к пункту &amp;lt;math&amp;gt;4.4.2,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.5)&amp;lt;/math&amp;gt; Найти норму вектора &amp;lt;math&amp;gt; z: \; \; \beta_{j}=\|z\|_2, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.6)&amp;lt;/math&amp;gt; Найти вектор Ланцоша &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.7)&amp;lt;/math&amp;gt; Вычислить новое собственное значение &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственный вектор &amp;lt;math&amp;gt; v_j &amp;lt;/math&amp;gt; для полученной матрицы &amp;lt;math&amp;gt; T_j,&amp;lt;/math&amp;gt;&lt;br /&gt;
    &amp;lt;math&amp;gt;4.8)&amp;lt;/math&amp;gt; Увеличить &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;, вернуться к шагу &amp;lt;math&amp;gt;4.1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\lambda_1 \dots \lambda_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
Фишечки, клевые свойства, сложность реализаций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20668</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20668"/>
		<updated>2016-12-11T21:40:53Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 1) Инициализируем векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 2) Считаем норму вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 3) Находим первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 4) Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;&lt;br /&gt;
    4.1) Считаем произведение матрицы на вектор: &amp;lt;math&amp;gt; z_d = \sum\limits_{y=1}^{n} a_{dy} q_{j_y}, \; d = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_x - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z. &amp;lt;/math&amp;gt;&lt;br /&gt;
    4.2) Скалярно умножаем &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{d=1}^{n}q_{j_d} z_d&amp;lt;/math&amp;gt;&lt;br /&gt;
    4.3) Вычисляем линейную комбинацию векторов &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
    4.4) &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; присвоить &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле по &amp;lt;math&amp;gt; i &amp;lt;/math&amp;gt; от первого до высчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора провести&lt;br /&gt;
    выборочную ортогонализацию к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       4.4.1) Высчитать норму матрицы &amp;lt;math&amp;gt;\|T_{t}\| &amp;lt;/math&amp;gt;&lt;br /&gt;
       4.4.2) Взять &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координату вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и понять, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
       Если выполнено, то&lt;br /&gt;
           4.4.2.1) Найти вектор Ритца &amp;lt;math&amp;gt;y_{i,t_x} = \sum\limits_{d=1}^{t} q_{d_x} v_{i_d}, \; x = 1,\,\dots\,, n,&amp;lt;/math&amp;gt;, где  &amp;lt;math&amp;gt;y_{i,t_x}&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-я компонента вектора Ритца &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
           4.4.2.2) Скалярно умножаем &amp;lt;math&amp;gt;y_{i,t}^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \gamma = \sum\limits_{d=1}^{n}y_{i,t_d} z_d&amp;lt;/math&amp;gt;&lt;br /&gt;
           4.4.2.3) Вычисляем линейную комбинацию векторов &amp;lt;math&amp;gt;z = z-\gamma\,  y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\lambda_1 \dots \lambda_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
Фишечки, клевые свойства, сложность реализаций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20666</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20666"/>
		<updated>2016-12-11T21:15:06Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
&amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 1) Инициализируем векторы &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 2) Считаем норму вектора &amp;lt;math&amp;gt; b: \; \;  \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 3) Находим первый вектор матрицы &amp;lt;math&amp;gt; Q: \; \; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 4) Начинается цикл, повторяющийся &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; раз по переменной &amp;lt;math&amp;gt; j &amp;lt;/math&amp;gt;&lt;br /&gt;
    4.1) Считаем произведение матрицы на вектор: &amp;lt;math&amp;gt; z_x = \sum\limits_{y=1}^{n} a_{xy} q_{i_y}, \; x = 1,\,\dots\,, n, &amp;lt;/math&amp;gt; где &lt;br /&gt;
    &amp;lt;math&amp;gt;z_x - &amp;lt;/math&amp;gt; компоненты вектора Ланцоша &amp;lt;math&amp;gt;z. &amp;lt;/math&amp;gt;&lt;br /&gt;
    4.2) Скалярно умножаем &amp;lt;math&amp;gt;q_j^T&amp;lt;/math&amp;gt;  и &amp;lt;math&amp;gt; z: \; \; \alpha_j = \sum\limits_{x=1}^{n}q_{j_x} z_x&amp;lt;/math&amp;gt;&lt;br /&gt;
    4.3) &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; присвоить &amp;lt;math&amp;gt;j - 1.  &amp;lt;/math&amp;gt; В цикле от первого до высчитанного &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;-го собственного вектора провести&lt;br /&gt;
    выборочную ортогонализацию к сошедшимся векторам Ритца. То есть:&lt;br /&gt;
       4.3.1) Высчитать норму матрицы &amp;lt;math&amp;gt;\|T_{t}\| &amp;lt;/math&amp;gt;&lt;br /&gt;
       4.3.2) Взять &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-ю координату вектора &amp;lt;math&amp;gt; v_i&amp;lt;/math&amp;gt;  и понять, выполняется ли равенство:&amp;lt;math&amp;gt;\beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\lambda_1 \dots \lambda_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
Фишечки, клевые свойства, сложность реализаций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20665</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20665"/>
		<updated>2016-12-11T20:42:02Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\lambda_1 \dots \lambda_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
Фишечки, клевые свойства, сложность реализаций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20663</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20663"/>
		<updated>2016-12-11T20:40:10Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\lambda_1 \dots \lambda_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных:  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20662</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20662"/>
		<updated>2016-12-11T20:39:51Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\lambda_1 \dots \lambda_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20661</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20661"/>
		<updated>2016-12-11T20:39:33Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица  &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt;, начальный вектор  &amp;lt;math&amp;gt; b &amp;lt;/math&amp;gt; и число собственных значений, которые мы хотим найти  &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ввиду симметричности из матрицы &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; достаточно хранить только ее диагональ и элементы, лежащие выше ее. Таким образом, объем входных данных &amp;lt;math&amp;gt;\frac{n (n + 1)}{2} + n + 1 = \frac{n^2+3n+2}{2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица собственных значений &amp;lt;math&amp;gt; \Lambda = diag(\lambda_1 \dots \lambda_k) &amp;lt;/math&amp;gt;, матрица собственных векторов &amp;lt;math&amp;gt; V = [v_1 \dots v_k] &amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt; n \times k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так, объем выходных данных  &amp;lt;math&amp;gt; k + kn &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20649</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20649"/>
		<updated>2016-12-11T17:38:48Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Для вычисления собственных значений матрицы будет использоваться алгоритм &amp;quot;разделяй и властвуй&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20648</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20648"/>
		<updated>2016-12-11T17:12:08Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
Julia Math  https://github.com/JuliaMath/IterativeSolvers.jl Julia&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20647</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20647"/>
		<updated>2016-12-11T17:08:15Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Умножение матрицы на вектор, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
2. Вычисление вектора &amp;lt;math&amp;gt;q_{j+1} &amp;lt;/math&amp;gt; с помощью линейной комбинации других векторов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_{j+1}=z/\|z\|_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Ортогонализация вектора Ланцоша с помощью скалярного произведения:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
Алгоритм Ланцоша реализован в различных пакетах, библиотеках и проектах&lt;br /&gt;
&lt;br /&gt;
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R&lt;br /&gt;
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB&lt;br /&gt;
GrapLab https://turi.com/products/create/open_source.html C++&lt;br /&gt;
Gaussian Belief Propagation Matlab Package http://www.cs.cmu.edu/~bickson/gabp/ MATLAB&lt;br /&gt;
The IETL Project http://www.comp-phys.org/software/ietl/ C++&lt;br /&gt;
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20646</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20646"/>
		<updated>2016-12-11T16:39:53Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
Были выделены следующие операции:&lt;br /&gt;
&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
 И ЭТО&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20645</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20645"/>
		<updated>2016-12-11T16:33:52Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма===&lt;br /&gt;
===Схема реализации последовательного алгоритма===&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
=== Информационный граф===&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
=== Входные и выходные данные алгоритма===&lt;br /&gt;
=== Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации===&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
=== Выводы для классов архитектур===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
 И ЭТО&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20644</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20644"/>
		<updated>2016-12-11T16:32:49Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Макроструктура алгоритма&lt;br /&gt;
===Схема реализации последовательного алгоритма&lt;br /&gt;
=== Последовательная сложность алгоритма&lt;br /&gt;
=== Информационный граф&lt;br /&gt;
=== Ресурс параллелизма алгоритма&lt;br /&gt;
=== Входные и выходные данные алгоритма&lt;br /&gt;
=== Свойства алгоритма&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма&lt;br /&gt;
=== Особенности реализации последовательного алгоритма&lt;br /&gt;
=== Локальность данных и вычислений&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации&lt;br /&gt;
&lt;br /&gt;
 ЭТО&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма&lt;br /&gt;
=== Выводы для классов архитектур&lt;br /&gt;
=== Существующие реализации алгоритма&lt;br /&gt;
 И ЭТО&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20638</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20638"/>
		<updated>2016-12-11T16:11:37Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобретения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{t}|v_i(t)|, i = 1 \dots t, t = j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(t) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{t}|v_i(t)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{t}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| \, \,  then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20637</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20637"/>
		<updated>2016-12-11T16:07:43Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобритения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)|, i = 1 \dots j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(j-1) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;j-1&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{j-1}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;t = j - 1,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, t\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{t}|v_i(t)| \leqslant \sqrt{\varepsilon}\|T_{t}\| then:&amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,t} = Q_{t}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Выделены следующие вычислительные ядра:&lt;br /&gt;
&lt;br /&gt;
* Умножение матрицы на вектор, &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Ортогонализация по отношению к сошедшимся векторам  &amp;lt;math&amp;gt;z = z-(y^T_{i,t},z)y_{i,t} &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt;i  = 1 \dots t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20634</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20634"/>
		<updated>2016-12-11T15:49:29Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации &amp;lt;ref&amp;gt;&amp;quot;The Lanczos Algorithm With Partial Reorthogonalization&amp;quot;, Horst D. Simon, Mathematics of computation, volume 42, number 165, pages 115-142  (1984)&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобритения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)|, i = 1 \dots j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(j-1) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;j-1&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{j-1}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», c. 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{j-1}|v_i(j-1)| \leqslant \sqrt{\varepsilon}\|T_{j-1}\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j-1},z)y_{i,j-1} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j-1} = Q_{j-1}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20632</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20632"/>
		<updated>2016-12-11T15:37:48Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобритения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)|, i = 1 \dots j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(j-1) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;j-1&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{j-1}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После следует вычисление собственных значений  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственных векторов &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;, для чего существует, например, метод &amp;quot;разделяй и властвуй&amp;quot;&amp;lt;ref&amp;gt;Дж. Деммель «Вычислительная линейная алгебра», 232, алгоритм 5.2&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{j-1}|v_i(j-1)| \leqslant \sqrt{\varepsilon}\|T_{j-1}\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j-1},z)y_{i,j-1} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j-1} = Q_{j-1}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Литература ==&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20631</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20631"/>
		<updated>2016-12-11T15:31:32Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}} &amp;lt;math&amp;gt; \, \;  (1), &amp;lt;/math&amp;gt;&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}\; (2).&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобритения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)|, i = 1 \dots j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(j-1) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;j-1&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{j-1}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{j-1}|v_i(j-1)| \leqslant \sqrt{\varepsilon}\|T_{j-1}\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j-1},z)y_{i,j-1} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j-1} = Q_{j-1}v_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Строим матрицу  &amp;lt;math&amp;gt; T_j&amp;lt;/math&amp;gt; (2), вычисляем собственные значения  &amp;lt;math&amp;gt; \theta_j &amp;lt;/math&amp;gt; и собственные векторы &amp;lt;math&amp;gt;v_j &amp;lt;/math&amp;gt; полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20630</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20630"/>
		<updated>2016-12-11T15:23:37Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}},&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобритения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)|, i = 1 \dots j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(j-1) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;j-1&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{j-1}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_{j-1}|v_i(j-1)| \leqslant \sqrt{\varepsilon}\|T_{j-1}\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j} = Q_jv_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычисляем собственные значения и собственные векторы полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20629</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20629"/>
		<updated>2016-12-11T15:22:27Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}},&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;. В качестве приближенных собственных значений берутся числа Ритца &amp;lt;math&amp;gt;\theta_i &amp;lt;/math&amp;gt;, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобритения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому чтобы построить &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt;, предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)|, i = 1 \dots j - 1 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(j-1) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;j-1&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша &amp;lt;math&amp;gt;z &amp;lt;/math&amp;gt;. Величина &amp;lt;math&amp;gt;\beta_{j-1}|v_i(j-1)| &amp;lt;/math&amp;gt; считается малой, если она меньше, чем &amp;lt;math&amp;gt;\sqrt{\varepsilon}||T_{j-1}|| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - доступная машинная точность чисел.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j} = Q_jv_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычисляем собственные значения и собственные векторы полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20628</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20628"/>
		<updated>2016-12-11T15:07:55Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}},&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти, т.е. количество итераций.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша. В качестве приближенных собственных значений берутся числа Ритца, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q_j&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, векторы &amp;lt;math&amp;gt;q_j &amp;lt;/math&amp;gt; теряют ортогональность вследствие приобритения больших компонент в направлениях векторов Ритца &amp;lt;math&amp;gt;y_{i,j} = Q_j v_i &amp;lt;/math&amp;gt;, отвечающих сошедшимся числам Ритца &amp;lt;math&amp;gt; \theta_i &amp;lt;/math&amp;gt;. Поэтому предлагается на каждом шаге следить за оценками погрешностей  &amp;lt;math&amp;gt;\beta_j|v_i(j)| &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;v_i(j) &amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-я компонента собственного вектора &amp;lt;math&amp;gt;v_i &amp;lt;/math&amp;gt;. И когда какая-то оценка становится слишком малой, проводить ортогонализацию вектора Ланцоша.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j} = Q_jv_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычисляем собственные значения и собственные векторы полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20627</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20627"/>
		<updated>2016-12-11T14:50:11Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^T&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}},&lt;br /&gt;
случайный вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора матрицы, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша. В качестве приближенных собственных значений берутся числа Ритца, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_j = Q^T_j A Q&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;j \times j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_j = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{j-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{j-1} &amp;amp; \alpha_j&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Он состоит в том, что на каждом шаге проверяется&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j} = Q_jv_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычисляем собственные значения и собственные векторы полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20626</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20626"/>
		<updated>2016-12-11T14:45:38Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Подается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^{T}&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}},&lt;br /&gt;
случайны вектор &amp;lt;math&amp;gt;b &amp;lt;/math&amp;gt;, являющийся первым приближением собственного вектора, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; - количество собственных значений и собственных векторов, которые мы хотим найти.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_j = [q_1, q_2, \dots, q_j]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times j&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша. А в качестве приближенных собственных значений берутся числа Ритца, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_k = Q^T_k A Q&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_k = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{k-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{k-1} &amp;amp; \alpha_k&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Он состоит в том, что на каждом шаге проверяется&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j} = Q_jv_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычисляем собственные значения и собственные векторы полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20625</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20625"/>
		<updated>2016-12-11T14:41:27Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На вход алгоритма подается вещественная симметричная матрица  &amp;lt;math&amp;gt;A = A^{T}&amp;lt;/math&amp;gt;,&lt;br /&gt;
{{Шаблон:ASymmetric}}&lt;br /&gt;
Поэтому достаточно хранить только чуть больше половины элементов исходной матрицы.&lt;br /&gt;
&lt;br /&gt;
Сам алгоритм соединяет в себя метод Ланцоша построения крыловского подпространства с процедурой Релея-Ритца. На каждой итерации строится матрица &amp;lt;math&amp;gt;Q_k = [q_1, q_2, \dots, q_k]&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;n \times k&amp;lt;/math&amp;gt;, состоящая из ортонормированных векторов Ланцоша. А в качестве приближенных собственных значений берутся числа Ритца, т.е. собственные значения симметричной трехдиагональной матрицы &amp;lt;math&amp;gt;T_k = Q^T_k A Q&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k \times k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
T_k = \begin{pmatrix}&lt;br /&gt;
\alpha_1 &amp;amp; \beta_1 \\&lt;br /&gt;
\beta_1 &amp;amp; \alpha_2 &amp;amp; \beta_2 \\&lt;br /&gt;
&amp;amp; \beta_2 &amp;amp; \ddots &amp;amp; \ddots \\&lt;br /&gt;
&amp;amp; &amp;amp; \ddots &amp;amp; \ddots &amp;amp; \beta_{k-1} \\&lt;br /&gt;
&amp;amp; &amp;amp; &amp;amp; \beta_{k-1} &amp;amp; \alpha_k&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Он состоит в том, что на каждом шаге проверяется&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j} = Q_jv_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычисляем собственные значения и собственные векторы полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20623</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20623"/>
		<updated>2016-12-11T14:28:41Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он состоит в том, что на каждом шаге проверяется&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j} = Q_jv_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычисляем собственные значения и собственные векторы полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20621</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20621"/>
		<updated>2016-12-11T14:00:40Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
===Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j} = Q_jv_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычисляем собственные значения и собственные векторы полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20216</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20216"/>
		<updated>2016-12-06T23:49:19Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|ASA}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_{i,j} = Q_jv_i&amp;lt;/math&amp;gt; &lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     Вычисляем собственные значения и собственные векторы полученной матрицы &amp;lt;math&amp;gt;T_j&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20214</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20214"/>
		<updated>2016-12-06T23:45:57Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|ASA}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z=z-\alpha_jq_j-\beta_{j-1}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;for\, i=1\,\, to\, \, j-1\, \, do: &amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;if\,  \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| &amp;lt;/math&amp;gt;&lt;br /&gt;
             &amp;lt;math&amp;gt;z = z-(y^T_{i,j},z)y_{i,j} &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j}=\|z\|_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}=z/\beta_{j}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; к вектору &amp;lt;math&amp;gt;q_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;i.2\, \alpha_i = \sum\limits_{j=1}^{n}q_{i_j} z_j&amp;lt;/math&amp;gt; #Получаем результат скалярного произведения векторов &amp;lt;math&amp;gt;q_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.3\, z_j = z_j - \alpha_i q_{i_j} - \beta_{i-1}q_{i-1_j}, \, j = 1,\,\dots\,, n&amp;lt;/math&amp;gt; #Вычисляем линейную комбинацию векторов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.4\, \beta_i = \|z\|_2 = \sqrt{\sum\limits_{j=1}^{n} z_j^2}&amp;lt;/math&amp;gt; #Считаем норму вектора &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.5&amp;lt;/math&amp;gt; Проверка равенства &amp;lt;math&amp;gt;\beta_i == 0&amp;lt;/math&amp;gt; # Если норма оказалась равной нулю, то завершаем итерации и переходим к вычислению собственных векторов и собственных значений полученной матрицы. В обратном случае, продолжаем выполнения итераций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.6\, q_{i+1_j} = \frac{z_j}{\beta_i}, \; j = 1,\, \dots \,, n&amp;lt;/math&amp;gt; #Нормируем вектор &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.7\,&amp;lt;/math&amp;gt; Если выполнили &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций, то завершаем выполнение итераций, переходим к следующему шагу. Иначе начинаем последующую итерацию цикла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;4.&amp;lt;/math&amp;gt; Вычисляем собственные значения и собственные вектора полученной матрицы &amp;lt;math&amp;gt;T_k&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20211</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20211"/>
		<updated>2016-12-06T23:33:29Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|ASA}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt; \beta_0=0,q_0=0&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; q_{1} = \frac{b_{j}}{\|b\|_2}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt; for\, j=1\,\, to\, \, k\, \, do:&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z_j = \sum\limits_{m=1}^{n} a_{jm} q_{i_m}, \; j = 1,\,\dots\,, n&amp;lt;/math&amp;gt; #Считаем результат применения линейного оператора     &lt;br /&gt;
     &amp;lt;math&amp;gt;z&amp;amp;=Aq_j,  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\alpha_j&amp;amp;=q_j^Tz, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;z&amp;amp;=z-\alpha_jq_j-\beta_{j}q_{j-1},  &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\beta_{j+1}&amp;amp;=||z|| &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;q_{j+1}&amp;amp;=z/\beta_{j+1}, &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt; &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt; &amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt; &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; к вектору &amp;lt;math&amp;gt;q_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;i.2\, \alpha_i = \sum\limits_{j=1}^{n}q_{i_j} z_j&amp;lt;/math&amp;gt; #Получаем результат скалярного произведения векторов &amp;lt;math&amp;gt;q_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.3\, z_j = z_j - \alpha_i q_{i_j} - \beta_{i-1}q_{i-1_j}, \, j = 1,\,\dots\,, n&amp;lt;/math&amp;gt; #Вычисляем линейную комбинацию векторов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.4\, \beta_i = \|z\|_2 = \sqrt{\sum\limits_{j=1}^{n} z_j^2}&amp;lt;/math&amp;gt; #Считаем норму вектора &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.5&amp;lt;/math&amp;gt; Проверка равенства &amp;lt;math&amp;gt;\beta_i == 0&amp;lt;/math&amp;gt; # Если норма оказалась равной нулю, то завершаем итерации и переходим к вычислению собственных векторов и собственных значений полученной матрицы. В обратном случае, продолжаем выполнения итераций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.6\, q_{i+1_j} = \frac{z_j}{\beta_i}, \; j = 1,\, \dots \,, n&amp;lt;/math&amp;gt; #Нормируем вектор &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;i.7\,&amp;lt;/math&amp;gt; Если выполнили &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций, то завершаем выполнение итераций, переходим к следующему шагу. Иначе начинаем последующую итерацию цикла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;4.&amp;lt;/math&amp;gt; Вычисляем собственные значения и собственные вектора полученной матрицы &amp;lt;math&amp;gt;T_k&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20201</id>
		<title>Алгоритм Ланцоша с выборочной ортогонализацией</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B0%D0%BD%D1%86%D0%BE%D1%88%D0%B0_%D1%81_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D0%BE%D1%80%D1%82%D0%BE%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B5%D0%B9&amp;diff=20201"/>
		<updated>2016-12-06T20:56:08Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: Новая страница: «{{Assignment|ASA}}   &amp;#039;&amp;#039;&amp;#039;Алгоритм&amp;#039;&amp;#039;&amp;#039;  \beta_0 = 0,\; q_0 = 0»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|ASA}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритм&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
\beta_0 = 0,\; q_0 = 0&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Syuzana/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%C2%AB%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8F%D0%B9_%D0%B8_%D0%B2%D0%BB%D0%B0%D1%81%D1%82%D0%B2%D1%83%D0%B9%C2%BB_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2_%D1%81%D0%B8%D0%BC%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B9_%D1%82%D1%80%D0%B5%D1%85%D0%B4%D0%B8%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B&amp;diff=8440</id>
		<title>Участница:Syuzana/Метод «разделяй и властвуй» вычисления собственных значений и векторов симметричной трехдиагональной матрицы</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Syuzana/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%C2%AB%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8F%D0%B9_%D0%B8_%D0%B2%D0%BB%D0%B0%D1%81%D1%82%D0%B2%D1%83%D0%B9%C2%BB_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2_%D1%81%D0%B8%D0%BC%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B9_%D1%82%D1%80%D0%B5%D1%85%D0%B4%D0%B8%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B&amp;diff=8440"/>
		<updated>2016-10-14T22:50:00Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Страница создана&lt;br /&gt;
&lt;br /&gt;
Kkk&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Syuzana/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%C2%AB%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8F%D0%B9_%D0%B8_%D0%B2%D0%BB%D0%B0%D1%81%D1%82%D0%B2%D1%83%D0%B9%C2%BB_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2_%D1%81%D0%B8%D0%BC%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B9_%D1%82%D1%80%D0%B5%D1%85%D0%B4%D0%B8%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B&amp;diff=8438</id>
		<title>Участница:Syuzana/Метод «разделяй и властвуй» вычисления собственных значений и векторов симметричной трехдиагональной матрицы</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Syuzana/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%C2%AB%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8F%D0%B9_%D0%B8_%D0%B2%D0%BB%D0%B0%D1%81%D1%82%D0%B2%D1%83%D0%B9%C2%BB_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2_%D1%81%D0%B8%D0%BC%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B9_%D1%82%D1%80%D0%B5%D1%85%D0%B4%D0%B8%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B&amp;diff=8438"/>
		<updated>2016-10-14T22:49:44Z</updated>

		<summary type="html">&lt;p&gt;Qmakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Страница создана&lt;br /&gt;
Kkk&lt;/div&gt;</summary>
		<author><name>Qmakar</name></author>
	</entry>
</feed>