<?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=Volkov+Nikita+94+student</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=Volkov+Nikita+94+student"/>
	<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/Volkov_Nikita_94_student"/>
	<updated>2026-10-22T19:38:48Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<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%D0%BA:Volkov_Nikita_94_student/Lanczos_without_reortogonalization&amp;diff=13177</id>
		<title>Участник:Volkov Nikita 94 student/Lanczos without reortogonalization</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%D0%BA:Volkov_Nikita_94_student/Lanczos_without_reortogonalization&amp;diff=13177"/>
		<updated>2016-10-19T13:46:35Z</updated>

		<summary type="html">&lt;p&gt;Volkov Nikita 94 student: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор статьи: Волков Никита ( группа 623 ).&lt;br /&gt;
&lt;br /&gt;
{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Алгоритм Ланцоша для точной арифметики ( без переортогонализации )&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2) + O(k^3)&amp;lt;/math&amp;gt; - на одну итерацию. &amp;lt;math&amp;gt;O(k * n^2)&amp;lt;/math&amp;gt; - суммарно.&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;, при экономии памяти  сокращается до &amp;lt;math&amp;gt;\frac{n(n - 1)}{2} + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, если нужны собственные векторы, то &amp;lt;math&amp;gt;k + k * n&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;k&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;br /&gt;
&lt;br /&gt;
На вход алгоритму Ланцоша подаётся симметричная матрица порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, для которой необходимо найти собственные значения.&lt;br /&gt;
Для этого из ортонормированных векторов Ланцоша строится матрица &amp;lt;math&amp;gt;Q_{k} = [q_{1}, .. , q{k}]&amp;lt;/math&amp;gt; , и в качестве приближенных собственных значений исходной матрицы принимаются числа Ритца, т.е. собственные значения симметричной трёхдиагональной матрицы, вычисляемой по &amp;lt;b&amp;gt;основной формуле метода:&amp;lt;/b&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;Q_{j}&amp;lt;/math&amp;gt; – ортогональная матрица Ланцоша, &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; -  исходная матрица, &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt; – симметричная трехдиагональная матрица, собственные значения которой — приближения собственных значений матрицы &amp;lt;math&amp;gt;A&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;T_{k} = V * \lambda * V^T&amp;lt;/math&amp;gt; - спектральное разложение матрицы &amp;lt;math&amp;gt;T_{k}&amp;lt;/math&amp;gt;. Тогда столбцы матрицы &amp;lt;math&amp;gt;Q_{k} * V&amp;lt;/math&amp;gt; - приближения к соответствующим собственным векторам, называемым векторами Ритца.&lt;br /&gt;
&lt;br /&gt;
===Вычислительное ядро алгоритма===&lt;br /&gt;
Вычислительное ядро алгоритма Ланцоща состоит в получении на каждой итерации очередного промежуточного вектора &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, получаемого путём умножения исходной матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на вектор Ланцоша &amp;lt;math&amp;gt;q_{j}&amp;lt;/math&amp;gt;, полученный на предыдущей итерации.&lt;br /&gt;
&lt;br /&gt;
Также при значениях &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, сопоставимых с &amp;lt;math&amp;gt;n&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;
Метод Ланцоша соединяет метод Ланцоша для построения крыловского подпространства в процедурой Рэлея-Ритца, подразумевающей вычисление собственных значений симметричной трёхдиагональной матрицы. &lt;br /&gt;
&lt;br /&gt;
Первая часть алгоритма представляет собой строго последовательные итерации, на каждой из которых вначале строится очередной столбец матрицы &amp;lt;math&amp;gt;Q_{j}&amp;lt;/math&amp;gt; из первых &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ортонормированных векторов Ланцоша и матрица &amp;lt;math&amp;gt;T_{j} =  Q^T_{j} * A * Q_{j}&amp;lt;/math&amp;gt;  порядка j. Итерационный процесс завершается, когда &amp;lt;math&amp;gt;j = k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая часть алгоритма представляет собой поиск собственных значений и собственных векторов симметричной трёхдиагональной матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt;, что реализуется отдельным алгоритмом ( QR-алгоритм, метод «Разделяй-и-властвуй», итерации Арнольди и.т.д. ), который мы будем рассматривать как отдельную макрооперацию.&lt;br /&gt;
&lt;br /&gt;
===Схема последовательной реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
Коэффициенты &amp;lt;math&amp;gt;alpha_{j}&amp;lt;/math&amp;gt; соответствуют диагональным элементам матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt;, коэффициенты &amp;lt;math&amp;gt;beta_{j}&amp;lt;/math&amp;gt; – наддиагональным и поддиагональным элементам той же матрицы.&lt;br /&gt;
&lt;br /&gt;
 Вычислить столбец q1 матрицы Qk q1 = b / ||b||&lt;br /&gt;
 q0 - нулевой вектор&lt;br /&gt;
 beta_0 = 0&lt;br /&gt;
 foreach (j = 1 .. k ) &lt;br /&gt;
 {&lt;br /&gt;
      z = A * qj&lt;br /&gt;
      alpha_j = qj * z &lt;br /&gt;
      z = z – alpha_j * qj – beta_(j-1) * q(j – 1)&lt;br /&gt;
      beta_j = ||z||&lt;br /&gt;
      if ( beta_j == 0 )&lt;br /&gt;
      {&lt;br /&gt;
          break // Все ненулевые собственные значения найдены. Выход может быть досрочным.&lt;br /&gt;
      }&lt;br /&gt;
      else &lt;br /&gt;
      {&lt;br /&gt;
          q(j + 1) = z/beta_j&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
 Вычислить собственные значения и собственные векторы симметричной трехдиагональной матрицы Tj наиболее подходящим методом.&lt;br /&gt;
 Полученный вектор Lj есть искомые собственные значения.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
Все дальнейшие выкладки верны для наиболее быстрого последовательного варианта выполнения указываемых операций. &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;n^2&amp;lt;/math&amp;gt; умножений и сложений.&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;br/&amp;gt;&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; сложений.&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; умножений.&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; умножений и сложений, а также одну операцию извлечения квадратного корня.&lt;br /&gt;
*Вычисление собственных значений матрицы порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; QR-алгоритмом требует &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; операций, вычисление также и собственных векторов требует примерно &amp;lt;math&amp;gt;6 * k ^ 3&amp;lt;/math&amp;gt;, то есть &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; операций; при использовании метода «Разделяй-и-властвуй» для вычисления собственных значений и векторов аналогичной матрицы в среднем затрачивается &amp;lt;math&amp;gt;O(k^{2.3})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
Таким образом, для выполнения одной итерации метода Ланцоща требуется 1 операция вычисления квадратного корня, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений, а также по &amp;lt;math&amp;gt;n ^ 2 + n + 2 * n + n&amp;lt;/math&amp;gt; сложений и умножений, а также суммарно &amp;lt;math&amp;gt;O(k ^ 3)&amp;lt;/math&amp;gt;  операций, требуемых для поиска собственных значений и собственных векторов матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt;. То есть последовательная сложность алгоритма Ланцоша составляет &amp;lt;math&amp;gt;O(n ^ 2) + O(k ^ 3)&amp;lt;/math&amp;gt;. Это, очевидно, меньше, чем &amp;lt;math&amp;gt;O(n ^ 3)&amp;lt;/math&amp;gt; операций, требуемых в алгоритмах вычисления всех собственных значений произвольных симметричных матриц, в чём и заключается выгода метода Ланцоша.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&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;n * \log{n}&amp;lt;/math&amp;gt; потоков, чего можно было бы достичь, используя суммирование сдваиванием. Это допущение аналогично допущениям из статей от матрично-векторных операциях. Это же допущение будет использовано и при оценке ресурса параллелизма алгоритма. Приводится граф без отображения входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
[[File:Volkov Lanzcos 1.png|600px|thumb|center|Граф алгоритма для матрицы А порядка 5 и k = 3. Op - одна итерация алгоритма, Eigen - процедура вычисления собственных значений]]&lt;br /&gt;
[[File:Volkov Lanzcos 2.png|600px|thumb|center|Внутренний граф итерации алгоритма для матрицы A порядка 5. Vector sum - нахождение суммы элементов вектора-&amp;lt;b&amp;gt;поэлементного произведения&amp;lt;/b&amp;gt; векторов z и qj. Op - вычитания из z векторов qj и q(j - 1), домноженных на коэффициенты.  Norm - вычисление нормы вектора z.]]&lt;br /&gt;
&lt;br /&gt;
===Ресурс параллелизма алгоритма===&lt;br /&gt;
Каждая итерация алгоритма Ланцоща выполняется строго последовательно. Однако внутри итерации возможно распараллеливание алгоритма.&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; ярусов умножений и сложений.&lt;br /&gt;
*Все остальные операции в рамках одной итерации, ведущие к вычислению матрицы &amp;lt;math&amp;gt;Tj&amp;lt;/math&amp;gt; выполняются строго последовательно. При этом вычисление значений векторов может быть выполнено за 1 ярус умножений / сложений, а вычисление чисел - за &amp;lt;math&amp;gt;\log{n}&amp;lt;/math&amp;gt; таких операций.&lt;br /&gt;
*Ресурс параллелизма алгоритма вычисления собственных значений зависит от используемого алгоритма и рассматривается в соответствующей статье.&lt;br /&gt;
&lt;br /&gt;
Таким образом, при классисифкации по ширине ЯПФ алгоритм обладает &amp;lt;i&amp;gt;линейной&amp;lt;/i&amp;gt; сложностью. В случае классификации по высоте ЯПФ алгоритм также имеет &amp;lt;i&amp;gt;линейную&amp;lt;/i&amp;gt; сложность.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&amp;lt;b&amp;gt;Входные данные: &amp;lt;/b&amp;gt; квадратная матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; ( элементы &amp;lt;math&amp;gt;a_{ij}&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;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Объём входных данных:&amp;lt;/b&amp;gt; &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Выходные данные:&amp;lt;/b&amp;gt; вектор &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, матрица &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; ( элементы &amp;lt;math&amp;gt;e_{pq}&amp;lt;/math&amp;gt; )&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Объём выходных данных:&amp;lt;/b&amp;gt; &amp;lt;math&amp;gt;k + k * n&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
В случае неограниченности ресурсов соотношение последовательной и параллельной сложности алгоритма Ланцоща по сумме всех итераций представляет собой &amp;lt;math&amp;gt;k ^ 3 + k * n ^ 2&amp;lt;/math&amp;gt; к &amp;lt;math&amp;gt;X + k * n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; - параллельная сложность алгоритма, используемого для вычисления собственных значений. В случае использования метода вычисления собственных значений с линейной сложностью при классисифкации по высоте ЯПФ это соотношение будет равно &amp;lt;math&amp;gt;(k ^ 2 + n ^ 2) / (k  + n)&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;T_{j}&amp;lt;/math&amp;gt; появляются собственные значения с максимальной величиной по модулю. Таким образом, метод особенно хорошо подходит для вычисления собственных значений матрицы &amp;lt;math&amp;gt;A&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;
Для проверки масштабируемости алгоритма из реализации была исключена непосредственно задача поиска собственных значений матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt; на каждой итерации, так как это является предметом отдельных статей ( QR-алгоритм, метод «Разделяй-и-властвуй», итерации Арнольди и.т.д. ). Таким образом, проверяемая на масштабируемость задача сводится к итерационному вычислению коэффициентов матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt;. Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; в рассматриваемой реализации хранится построчно и построчно же разделяется между процессорами.&lt;br /&gt;
&lt;br /&gt;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
Существует несколько как последовательных, так и параллельных реализаций алгоритма Ланцоша, включенных в программные библиотеки для поиска собственных значений матриц. Свойства этих реализаций можно увидеть в таблицах ниже. Первая таблица — относительно недавние реализации, вторая - «музейные экспонаты». Следует уделить особенное внимание столбцам «тип метода» и «параллелизация». В первом из них значение только N соответствует описанному варианту без реортогонализации, F – полной реортогонализации, P – частичной реортогонализации, S – выборочной реортогонализации. Во втором значние «none» соответствует отсутствию параллельной реализации, M – параллельной реализации посредством MPI, O – параллельной реализации посредством OpenMP. Их приведение целесообразно, так как на практике алгоритм Ланцоша без переортогонализации неустойчив. Также указываются библиотеки, в которых реализованы более глубокие модификации метода Ланцоша, с указанием изменений в графе «тип метода».&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;b&amp;gt;Таблица 1 - «современные» реализации.&amp;lt;/b&amp;gt;&lt;br /&gt;
!Название библиотеки&lt;br /&gt;
!Язык программирования&lt;br /&gt;
!Дата появления, версия библиотки&lt;br /&gt;
!Тип метода&lt;br /&gt;
!Параллелизация&lt;br /&gt;
|-&lt;br /&gt;
|BLKLAN&lt;br /&gt;
|C/Matlab&lt;br /&gt;
|2003&lt;br /&gt;
|P&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|BLZPACK&lt;br /&gt;
|F77&lt;br /&gt;
|2000, 04/00&lt;br /&gt;
|P  + S&lt;br /&gt;
|M&lt;br /&gt;
|-&lt;br /&gt;
|IETL&lt;br /&gt;
|C++&lt;br /&gt;
|2006, 2.2&lt;br /&gt;
|N&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|SLEPc&lt;br /&gt;
|C/F77&lt;br /&gt;
|2009, 3.0.0&lt;br /&gt;
|All&lt;br /&gt;
|M&lt;br /&gt;
|-&lt;br /&gt;
|TRLAN&lt;br /&gt;
|F90&lt;br /&gt;
|2006&lt;br /&gt;
|Dynamic thick-restart&lt;br /&gt;
|M&lt;br /&gt;
|-&lt;br /&gt;
|PROPACK&lt;br /&gt;
|F77/Matlab&lt;br /&gt;
|2005, 2.1 / 1.1&lt;br /&gt;
|P, finds SVD&lt;br /&gt;
|O&lt;br /&gt;
|-&lt;br /&gt;
|IRBLEIGS&lt;br /&gt;
|Matlab&lt;br /&gt;
|2000, 1.0&lt;br /&gt;
|Indefinitie symmetric&lt;br /&gt;
|none&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;b&amp;gt;Таблица 2 - «исторические» реализации.&amp;lt;/b&amp;gt;&lt;br /&gt;
!Название библиотеки&lt;br /&gt;
!Язык программирования&lt;br /&gt;
!Дата появления, версия библиотки&lt;br /&gt;
!Тип метода&lt;br /&gt;
!Параллелизация&lt;br /&gt;
|-&lt;br /&gt;
|ARPACK&lt;br /&gt;
|F77&lt;br /&gt;
|1995, 2.1&lt;br /&gt;
|Arnoldi iterations, impliicit restart&lt;br /&gt;
|M&lt;br /&gt;
|-&lt;br /&gt;
|ARPACK++&lt;br /&gt;
|C++&lt;br /&gt;
|1998, 1.1&lt;br /&gt;
|Arnoldi iterations, impliicit restart&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|LANCZOS&lt;br /&gt;
|F77&lt;br /&gt;
|1992&lt;br /&gt;
|N&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|LANZ&lt;br /&gt;
|F77&lt;br /&gt;
|1991, 1.0&lt;br /&gt;
|P&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|LASO&lt;br /&gt;
|F77&lt;br /&gt;
|1983, 2&lt;br /&gt;
|S&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|NAPACK&lt;br /&gt;
|F77&lt;br /&gt;
|1987&lt;br /&gt;
|N&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|QMRPACK&lt;br /&gt;
|F77&lt;br /&gt;
|1996&lt;br /&gt;
|Designed for nonsymmetric matrices ( lookahead )&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|SVDPACK&lt;br /&gt;
|C/F77&lt;br /&gt;
|1992&lt;br /&gt;
|P, finds SVD&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|Underwood&lt;br /&gt;
|F77&lt;br /&gt;
|1975&lt;br /&gt;
|F, block version&lt;br /&gt;
|none&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;/div&gt;</summary>
		<author><name>Volkov Nikita 94 student</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%D0%BA:Volkov_Nikita_94_student/Lanczos_without_reortogonalization&amp;diff=13122</id>
		<title>Участник:Volkov Nikita 94 student/Lanczos without reortogonalization</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%D0%BA:Volkov_Nikita_94_student/Lanczos_without_reortogonalization&amp;diff=13122"/>
		<updated>2016-10-18T18:58:18Z</updated>

		<summary type="html">&lt;p&gt;Volkov Nikita 94 student: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Алгоритм Ланцоша для точной арифметики ( без переортогонализации )&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2) + O(k^3)&amp;lt;/math&amp;gt; - на одну итерацию. &amp;lt;math&amp;gt;O(k * n^2)&amp;lt;/math&amp;gt; - суммарно.&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;, при экономии памяти  сокращается до &amp;lt;math&amp;gt;\frac{n(n - 1)}{2} + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, если нужны собственные векторы, то &amp;lt;math&amp;gt;k + k * n&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;k&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;br /&gt;
&lt;br /&gt;
На вход алгоритму Ланцоша подаётся симметричная матрица порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, для которой необходимо найти собственные значения.&lt;br /&gt;
Для этого из ортонормированных векторов Ланцоша строится матрица &amp;lt;math&amp;gt;Q_{k} = [q_{1}, .. , q{k}]&amp;lt;/math&amp;gt; , и в качестве приближенных собственных значений исходной матрицы принимаются числа Ритца, т.е. собственные значения симметричной трёхдиагональной матрицы, вычисляемой по &amp;lt;b&amp;gt;основной формуле метода:&amp;lt;/b&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;Q_{j}&amp;lt;/math&amp;gt; – ортогональная матрица Ланцоша, &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; -  исходная матрица, &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt; – симметричная трехдиагональная матрица, собственные значения которой — приближения собственных значений матрицы &amp;lt;math&amp;gt;A&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;T_{k} = V * \lambda * V^T&amp;lt;/math&amp;gt; - спектральное разложение матрицы &amp;lt;math&amp;gt;T_{k}&amp;lt;/math&amp;gt;. Тогда столбцы матрицы &amp;lt;math&amp;gt;Q_{k} * V&amp;lt;/math&amp;gt; - приближения к соответствующим собственным векторам, называемым векторами Ритца.&lt;br /&gt;
&lt;br /&gt;
===Вычислительное ядро алгоритма===&lt;br /&gt;
Вычислительное ядро алгоритма Ланцоща состоит в получении на каждой итерации очередного промежуточного вектора &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, получаемого путём умножения исходной матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на вектор Ланцоша &amp;lt;math&amp;gt;q_{j}&amp;lt;/math&amp;gt;, полученный на предыдущей итерации.&lt;br /&gt;
&lt;br /&gt;
Также при значениях &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, сопоставимых с &amp;lt;math&amp;gt;n&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;
Метод Ланцоша соединяет метод Ланцоша для построения крыловского подпространства в процедурой Рэлея-Ритца, подразумевающей вычисление собственных значений симметричной трёхдиагональной матрицы. &lt;br /&gt;
&lt;br /&gt;
Первая часть алгоритма представляет собой строго последовательные итерации, на каждой из которых вначале строится очередной столбец матрицы &amp;lt;math&amp;gt;Q_{j}&amp;lt;/math&amp;gt; из первых &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; ортонормированных векторов Ланцоша и матрица &amp;lt;math&amp;gt;T_{j} =  Q^T_{j} * A * Q_{j}&amp;lt;/math&amp;gt;  порядка j. Итерационный процесс завершается, когда &amp;lt;math&amp;gt;j = k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вторая часть алгоритма представляет собой поиск собственных значений и собственных векторов симметричной трёхдиагональной матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt;, что реализуется отдельным алгоритмом ( QR-алгоритм, метод «Разделяй-и-властвуй», итерации Арнольди и.т.д. ), который мы будем рассматривать как отдельную макрооперацию.&lt;br /&gt;
&lt;br /&gt;
===Схема последовательной реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
Коэффициенты &amp;lt;math&amp;gt;alpha_{j}&amp;lt;/math&amp;gt; соответствуют диагональным элементам матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt;, коэффициенты &amp;lt;math&amp;gt;beta_{j}&amp;lt;/math&amp;gt; – наддиагональным и поддиагональным элементам той же матрицы.&lt;br /&gt;
&lt;br /&gt;
 Вычислить столбец q1 матрицы Qk q1 = b / ||b||&lt;br /&gt;
 q0 - нулевой вектор&lt;br /&gt;
 beta_0 = 0&lt;br /&gt;
 foreach (j = 1 .. k ) &lt;br /&gt;
 {&lt;br /&gt;
      z = A * qj&lt;br /&gt;
      alpha_j = qj * z &lt;br /&gt;
      z = z – alpha_j * qj – beta_(j-1) * q(j – 1)&lt;br /&gt;
      beta_j = ||z||&lt;br /&gt;
      if ( beta_j == 0 )&lt;br /&gt;
      {&lt;br /&gt;
          break // Все ненулевые собственные значения найдены. Выход может быть досрочным.&lt;br /&gt;
      }&lt;br /&gt;
      else &lt;br /&gt;
      {&lt;br /&gt;
          q(j + 1) = z/beta_j&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
 Вычислить собственные значения и собственные векторы симметричной трехдиагональной матрицы Tj наиболее подходящим методом.&lt;br /&gt;
 Полученный вектор Lj есть искомые собственные значения.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
Все дальнейшие выкладки верны для наиболее быстрого последовательного варианта выполнения указываемых операций. &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;n^2&amp;lt;/math&amp;gt; умножений и сложений.&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;br/&amp;gt;&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; сложений.&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; умножений.&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; умножений и сложений, а также одну операцию извлечения квадратного корня.&lt;br /&gt;
*Вычисление собственных значений матрицы порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; QR-алгоритмом требует &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; операций, вычисление также и собственных векторов требует примерно &amp;lt;math&amp;gt;6 * k ^ 3&amp;lt;/math&amp;gt;, то есть &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; операций; при использовании метода «Разделяй-и-властвуй» для вычисления собственных значений и векторов аналогичной матрицы в среднем затрачивается &amp;lt;math&amp;gt;O(k^{2.3})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
Таким образом, для выполнения одной итерации метода Ланцоща требуется 1 операция вычисления квадратного корня, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений, а также по &amp;lt;math&amp;gt;n ^ 2 + n + 2 * n + n&amp;lt;/math&amp;gt; сложений и умножений, а также суммарно &amp;lt;math&amp;gt;O(k ^ 3)&amp;lt;/math&amp;gt;  операций, требуемых для поиска собственных значений и собственных векторов матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt;. То есть последовательная сложность алгоритма Ланцоша составляет &amp;lt;math&amp;gt;O(n ^ 2) + O(k ^ 3)&amp;lt;/math&amp;gt;. Это, очевидно, меньше, чем &amp;lt;math&amp;gt;O(n ^ 3)&amp;lt;/math&amp;gt; операций, требуемых в алгоритмах вычисления всех собственных значений произвольных симметричных матриц, в чём и заключается выгода метода Ланцоша.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&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;n * \log{n}&amp;lt;/math&amp;gt; потоков, чего можно было бы достичь, используя суммирование сдваиванием. Это допущение аналогично допущениям из статей от матрично-векторных операциях. Это же допущение будет использовано и при оценке ресурса параллелизма алгоритма. Приводится граф без отображения входных и выходных данных.&lt;br /&gt;
&lt;br /&gt;
[[File:Volkov Lanzcos 1.png|600px|thumb|center|Граф алгоритма для матрицы А порядка 5 и k = 3. Op - одна итерация алгоритма, Eigen - процедура вычисления собственных значений]]&lt;br /&gt;
[[File:Volkov Lanzcos 2.png|600px|thumb|center|Внутренний граф итерации алгоритма для матрицы A порядка 5. Vector sum - нахождение суммы элементов вектора-&amp;lt;b&amp;gt;поэлементного произведения&amp;lt;/b&amp;gt; векторов z и qj. Op - вычитания из z векторов qj и q(j - 1), домноженных на коэффициенты.  Norm - вычисление нормы вектора z.]]&lt;br /&gt;
&lt;br /&gt;
===Ресурс параллелизма алгоритма===&lt;br /&gt;
Каждая итерация алгоритма Ланцоща выполняется строго последовательно. Однако внутри итерации возможно распараллеливание алгоритма.&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; ярусов умножений и сложений.&lt;br /&gt;
*Все остальные операции в рамках одной итерации, ведущие к вычислению матрицы &amp;lt;math&amp;gt;Tj&amp;lt;/math&amp;gt; выполняются строго последовательно. При этом вычисление значений векторов может быть выполнено за 1 ярус умножений / сложений, а вычисление чисел - за &amp;lt;math&amp;gt;\log{n}&amp;lt;/math&amp;gt; таких операций.&lt;br /&gt;
*Ресурс параллелизма алгоритма вычисления собственных значений зависит от используемого алгоритма и рассматривается в соответствующей статье.&lt;br /&gt;
&lt;br /&gt;
Таким образом, при классисифкации по ширине ЯПФ алгоритм обладает &amp;lt;i&amp;gt;линейной&amp;lt;/i&amp;gt; сложностью. В случае классификации по высоте ЯПФ алгоритм также имеет &amp;lt;i&amp;gt;линейную&amp;lt;/i&amp;gt; сложность.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&amp;lt;b&amp;gt;Входные данные: &amp;lt;/b&amp;gt; квадратная матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; ( элементы &amp;lt;math&amp;gt;a_{ij}&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;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Объём входных данных:&amp;lt;/b&amp;gt; &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Выходные данные:&amp;lt;/b&amp;gt; вектор &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, матрица &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; ( элементы &amp;lt;math&amp;gt;e_{pq}&amp;lt;/math&amp;gt; )&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Объём выходных данных:&amp;lt;/b&amp;gt; &amp;lt;math&amp;gt;k + k * n&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
В случае неограниченности ресурсов соотношение последовательной и параллельной сложности алгоритма Ланцоща по сумме всех итераций представляет собой &amp;lt;math&amp;gt;k ^ 3 + k * n ^ 2&amp;lt;/math&amp;gt; к &amp;lt;math&amp;gt;X + k * n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; - параллельная сложность алгоритма, используемого для вычисления собственных значений. В случае использования метода вычисления собственных значений с линейной сложностью при классисифкации по высоте ЯПФ это соотношение будет равно &amp;lt;math&amp;gt;(k ^ 2 + n ^ 2) / (k  + n)&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;T_{j}&amp;lt;/math&amp;gt; появляются собственные значения с максимальной величиной по модулю. Таким образом, метод особенно хорошо подходит для вычисления собственных значений матрицы &amp;lt;math&amp;gt;A&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;
Для проверки масштабируемости алгоритма из реализации была исключена непосредственно задача поиска собственных значений матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt; на каждой итерации, так как это является предметом отдельных статей ( QR-алгоритм, метод «Разделяй-и-властвуй», итерации Арнольди и.т.д. ). Таким образом, проверяемая на масштабируемость задача сводится к итерационному вычислению коэффициентов матрицы &amp;lt;math&amp;gt;T_{j}&amp;lt;/math&amp;gt;. Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; в рассматриваемой реализации хранится построчно и построчно же разделяется между процессорами.&lt;br /&gt;
&lt;br /&gt;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
Существует несколько как последовательных, так и параллельных реализаций алгоритма Ланцоша, включенных в программные библиотеки для поиска собственных значений матриц. Свойства этих реализаций можно увидеть в таблицах ниже. Первая таблица — относительно недавние реализации, вторая - «музейные экспонаты». Следует уделить особенное внимание столбцам «тип метода» и «параллелизация». В первом из них значение только N соответствует описанному варианту без реортогонализации, F – полной реортогонализации, P – частичной реортогонализации, S – выборочной реортогонализации. Во втором значние «none» соответствует отсутствию параллельной реализации, M – параллельной реализации посредством MPI, O – параллельной реализации посредством OpenMP. Их приведение целесообразно, так как на практике алгоритм Ланцоша без переортогонализации неустойчив. Также указываются библиотеки, в которых реализованы более глубокие модификации метода Ланцоша, с указанием изменений в графе «тип метода».&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;b&amp;gt;Таблица 1 - «современные» реализации.&amp;lt;/b&amp;gt;&lt;br /&gt;
!Название библиотеки&lt;br /&gt;
!Язык программирования&lt;br /&gt;
!Дата появления, версия библиотки&lt;br /&gt;
!Тип метода&lt;br /&gt;
!Параллелизация&lt;br /&gt;
|-&lt;br /&gt;
|BLKLAN&lt;br /&gt;
|C/Matlab&lt;br /&gt;
|2003&lt;br /&gt;
|P&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|BLZPACK&lt;br /&gt;
|F77&lt;br /&gt;
|2000, 04/00&lt;br /&gt;
|P  + S&lt;br /&gt;
|M&lt;br /&gt;
|-&lt;br /&gt;
|IETL&lt;br /&gt;
|C++&lt;br /&gt;
|2006, 2.2&lt;br /&gt;
|N&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|SLEPc&lt;br /&gt;
|C/F77&lt;br /&gt;
|2009, 3.0.0&lt;br /&gt;
|All&lt;br /&gt;
|M&lt;br /&gt;
|-&lt;br /&gt;
|TRLAN&lt;br /&gt;
|F90&lt;br /&gt;
|2006&lt;br /&gt;
|Dynamic thick-restart&lt;br /&gt;
|M&lt;br /&gt;
|-&lt;br /&gt;
|PROPACK&lt;br /&gt;
|F77/Matlab&lt;br /&gt;
|2005, 2.1 / 1.1&lt;br /&gt;
|P, finds SVD&lt;br /&gt;
|O&lt;br /&gt;
|-&lt;br /&gt;
|IRBLEIGS&lt;br /&gt;
|Matlab&lt;br /&gt;
|2000, 1.0&lt;br /&gt;
|Indefinitie symmetric&lt;br /&gt;
|none&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&amp;lt;b&amp;gt;Таблица 2 - «исторические» реализации.&amp;lt;/b&amp;gt;&lt;br /&gt;
!Название библиотеки&lt;br /&gt;
!Язык программирования&lt;br /&gt;
!Дата появления, версия библиотки&lt;br /&gt;
!Тип метода&lt;br /&gt;
!Параллелизация&lt;br /&gt;
|-&lt;br /&gt;
|ARPACK&lt;br /&gt;
|F77&lt;br /&gt;
|1995, 2.1&lt;br /&gt;
|Arnoldi iterations, impliicit restart&lt;br /&gt;
|M&lt;br /&gt;
|-&lt;br /&gt;
|ARPACK++&lt;br /&gt;
|C++&lt;br /&gt;
|1998, 1.1&lt;br /&gt;
|Arnoldi iterations, impliicit restart&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|LANCZOS&lt;br /&gt;
|F77&lt;br /&gt;
|1992&lt;br /&gt;
|N&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|LANZ&lt;br /&gt;
|F77&lt;br /&gt;
|1991, 1.0&lt;br /&gt;
|P&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|LASO&lt;br /&gt;
|F77&lt;br /&gt;
|1983, 2&lt;br /&gt;
|S&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|NAPACK&lt;br /&gt;
|F77&lt;br /&gt;
|1987&lt;br /&gt;
|N&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|QMRPACK&lt;br /&gt;
|F77&lt;br /&gt;
|1996&lt;br /&gt;
|Designed for nonsymmetric matrices ( lookahead )&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|SVDPACK&lt;br /&gt;
|C/F77&lt;br /&gt;
|1992&lt;br /&gt;
|P, finds SVD&lt;br /&gt;
|none&lt;br /&gt;
|-&lt;br /&gt;
|Underwood&lt;br /&gt;
|F77&lt;br /&gt;
|1975&lt;br /&gt;
|F, block version&lt;br /&gt;
|none&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;/div&gt;</summary>
		<author><name>Volkov Nikita 94 student</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%D0%BA:Volkov_Nikita_94_student/Lanczos_without_reortogonalization&amp;diff=13120</id>
		<title>Участник:Volkov Nikita 94 student/Lanczos without reortogonalization</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%D0%BA:Volkov_Nikita_94_student/Lanczos_without_reortogonalization&amp;diff=13120"/>
		<updated>2016-10-18T18:56:41Z</updated>

		<summary type="html">&lt;p&gt;Volkov Nikita 94 student: Создана пустая страница&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Volkov Nikita 94 student</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%D0%BA:Volkov_Nikita_94_student&amp;diff=13119</id>
		<title>Участник:Volkov Nikita 94 student</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%D0%BA:Volkov_Nikita_94_student&amp;diff=13119"/>
		<updated>2016-10-18T18:56:12Z</updated>

		<summary type="html">&lt;p&gt;Volkov Nikita 94 student: Новая страница: «Участник.»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Участник.&lt;/div&gt;</summary>
		<author><name>Volkov Nikita 94 student</name></author>
	</entry>
</feed>