Алгоритм Ланцоша с выборочной ортогонализацией: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Qmakar (обсуждение | вклад) |
Qmakar (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
== Свойства и структура алгоритма == | == Свойства и структура алгоритма == | ||
===Общее описание алгоритма=== | ===Общее описание алгоритма=== | ||
− | Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он состоит в том, что на каждом шаге проверяется | + | Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации. |
+ | |||
+ | |||
+ | На вход алгоритма подается вещественная симметричная матрица <math>A = A^{T}</math>, | ||
+ | {{Шаблон:ASymmetric}} | ||
+ | Поэтому достаточно хранить только чуть больше половины элементов исходной матрицы. | ||
+ | |||
+ | Сам алгоритм соединяет в себя метод Ланцоша построения крыловского подпространства с процедурой Релея-Ритца. На каждой итерации строится матрица <math>Q_k = [q_1, q_2, \dots, q_k]</math> размерности <math>n \times k</math>, состоящая из ортонормированных векторов Ланцоша. А в качестве приближенных собственных значений берутся числа Ритца, т.е. собственные значения симметричной трехдиагональной матрицы <math>T_k = Q^T_k A Q</math> размерности <math>k \times k</math>. | ||
+ | |||
+ | :<math> | ||
+ | T_k = \begin{pmatrix} | ||
+ | \alpha_1 & \beta_1 \\ | ||
+ | \beta_1 & \alpha_2 & \beta_2 \\ | ||
+ | & \beta_2 & \ddots & \ddots \\ | ||
+ | & & \ddots & \ddots & \beta_{k-1} \\ | ||
+ | & & & \beta_{k-1} & \alpha_k | ||
+ | \end{pmatrix} | ||
+ | </math> | ||
+ | |||
+ | |||
+ | |||
+ | Он состоит в том, что на каждом шаге проверяется | ||
<math> \beta_0=0,q_0=0</math> | <math> \beta_0=0,q_0=0</math> |
Версия 17:41, 11 декабря 2016
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Алгоритм Лáнцоша представляет собой мощный метод для нахождения нескольких собственных значений и собственных векторов симметричной матрицы А и для решения систем линейных уравнений. Алгоритм особенно эффективен, если матрица А разреженная и большого размера. Однако любая практическая реализация этого алгоритма страдает от ошибок округления, т.к. векторы Ланцоша теряют взаимную ортогональность. Для того чтобы поддерживать некоторый уровень ортогональности, появились методы полной переортогонализации и выборочной ортогонализации. В этой работе мы рассмотрим последний метод в качестве способа для поддержания ортогональности среди векторов Ланцоша. Он обладает почти столь же высокой точностью, как алгоритм с полной переортогонализацией, и почти столь же низкой стоимостью, как алгоритм без ортогонализации.
На вход алгоритма подается вещественная симметричная матрица [math]A = A^{T}[/math],
- [math] A = \begin{pmatrix} a_{11} & a_{12} & a_{13} & \cdots & a_{1\ n-1} & a_{1\ n} \\ a_{12} & a_{22} & a_{23} & \cdots & a_{2\ n-1} & a_{2\ n} \\ a_{13} & a_{23} & a_{33} & \cdots & a_{3\ n-1} & a_{3\ n} \\ \vdots & \vdots & \ddots & \ddots & \ddots & \vdots \\ a_{1\ n-1} & \cdots & \cdots & a_{n-2\ n-1} & a_{n-1\ n-1} & a_{n-1\ n} \\ a_{1\ n} & \cdots & \cdots & a_{n-2\ n} & a_{n-1\ n} & a_{n\ n} \\ \end{pmatrix} [/math]
Поэтому достаточно хранить только чуть больше половины элементов исходной матрицы.
Сам алгоритм соединяет в себя метод Ланцоша построения крыловского подпространства с процедурой Релея-Ритца. На каждой итерации строится матрица [math]Q_k = [q_1, q_2, \dots, q_k][/math] размерности [math]n \times k[/math], состоящая из ортонормированных векторов Ланцоша. А в качестве приближенных собственных значений берутся числа Ритца, т.е. собственные значения симметричной трехдиагональной матрицы [math]T_k = Q^T_k A Q[/math] размерности [math]k \times k[/math].
- [math] T_k = \begin{pmatrix} \alpha_1 & \beta_1 \\ \beta_1 & \alpha_2 & \beta_2 \\ & \beta_2 & \ddots & \ddots \\ & & \ddots & \ddots & \beta_{k-1} \\ & & & \beta_{k-1} & \alpha_k \end{pmatrix} [/math]
Он состоит в том, что на каждом шаге проверяется
[math] \beta_0=0,q_0=0[/math] [math] q_{1} = \frac{b_{j}}{\|b\|_2}[/math], где [math] \|b\|_2 = \sqrt{\sum\limits_{j=1}^{n} b_j^2}[/math] [math] for\, j=1\,\, to\, \, k\, \, do:[/math] [math]z=Aq_j, [/math] [math]\alpha_j=q_j^Tz, [/math] [math]z=z-\alpha_jq_j-\beta_{j-1}q_{j-1}, [/math] [math]for\, i=1\,\, to\, \, j-1\, \, do: [/math] [math]if\, \beta_j|v_i(j)| \leqslant \sqrt{\varepsilon}\|T_j\| [/math] [math]z = z-(y^T_{i,j},z)y_{i,j} [/math], где [math]y_{i,j} = Q_jv_i[/math] [math]\beta_{j}=\|z\|_2 [/math] [math]q_{j+1}=z/\beta_{j}, [/math] Вычисляем собственные значения и собственные векторы полученной матрицы [math]T_j[/math].