Участник:Bashleon: различия между версиями
Bashleon (обсуждение | вклад) (Новая страница: «Вариант 4 Башлыков Леонид Александрович 616») |
Bashleon (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
Башлыков Леонид Александрович | Башлыков Леонид Александрович | ||
616 | 616 | ||
+ | |||
+ | Математическое описание алгоритма Ланцоща для вычисления собственных значений симметричной матрицы А | ||
+ | требует 1) математического описания метода Ланцоща для построения крыловского подпространства и 2) | ||
+ | математического описания т.н. процедуры Рэлея-Ритца. | ||
+ | |||
+ | ==== Метод Ланцоща для построения крыловского подпространства ==== | ||
+ | |||
+ | Пусть дано уравнение <math>A * x = b</math>, причём вектор <math>b</math> известен и имеется | ||
+ | способ вычисления <math>A * x</math>.<br/> | ||
+ | |||
+ | Вычислим <math>y_{1} = b</math> , <math>y_{2} = A * b</math>, <math>y_{3} = A^2 * b</math>,...,<math>y_{n} = A^(n - 1) * b</math>, где <math>n</math> - | ||
+ | порядок матрицы <math>A</math>. Определим матрицу <math>K = [y_{1},...,y_{n}]</math>.<br/> | ||
+ | |||
+ | Тогда <math>A * K = [A * y_{1},...,A * y_{n - 1}, A * y_{n}] = [y_{2},...,y_{n},A^n * y_{1}]</math>. | ||
+ | В предположении, что матрица <math>K</math> - невырождена, можно вычислить вектор <math>c = -K^-1 * A^n * y_{1}</math>. | ||
+ | Поскольку первые <math>n - 1</math> столбцов в <math>A * K</math> совпадают с последними <math>n - 1</math> столбцами в | ||
+ | <math>K</math>, то справедливо: <math>A * K = K * [e_{2},e_{3},...,e_{n},-c] = K * C</math>, то есть <math>K^-1 * A * K = C</math>, где <math>C</math> - верхняя хессенбергова матрица.<br/> | ||
+ | |||
+ | Заменим <math>K</math> ортогональной матрицей <math>Q</math> так, что при любом <math>k</math> | ||
+ | линейные оболочки первых <math>k</math> столбцов в <math>K</math> и <math>Q</math> - одно и то же | ||
+ | подпространство. Это подпространство называется крыловским и точно определяется как | ||
+ | <math>\kappa_{k}(A, b)</math> - линейная оболочка векторов <math>b</math>,<math>A * b</math>,...,<math>A^(k - 1) * b</math>. | ||
+ | Суть алгоритма Ланцоша заключается в вычислении стольких первых столбцов в <math>Q</math>, | ||
+ | сколько необходимо для получения требуемого приближения к решению <math>A * x = b</math> (<math>A * x = \lambda * x</math>). | ||
+ | |||
+ | Используем QR-разложение матрицы <math>K = Q * Q</math><br/> | ||
+ | Тогда <math>K^-1 * A * K = (R^-1 * Q^T) * A * (Q * R) = C</math>, откуда <math>Q^T * A * Q = R * C * R^-1 = H</math><br/> | ||
+ | |||
+ | Матрица <math>H</math> является верхней хессенберговой в силу того, что верхней хессенберговой | ||
+ | является матрица <math>C</math>, а матрицы <math>R</math> и <math>R^-1</math> - верхние треугольные. | ||
+ | |||
+ | Однако алгоритм Ланцоша подразумевает симметричность матрицы <math>A</math>. | ||
+ | Положим <math>Q = [Q_{k}, Q_{u}]</math>, где <math>Q_{k} = [q_{1},...,q_{k}]</math> и | ||
+ | <math>Q_{u} = [q_{k+1},...,q_{n}]</math>. В итоге получается, что <math>H = Q^T * A * Q = [Q_{k},Q_{u}]^T * A * [Q_{k},Q_{u}]</math> | ||
+ | Из симметричности <math>A</math>, таким образом, следует симметричность и трехдиагональность матрицы <math>H = T</math>. | ||
+ | Теперь можно вывести две основные формулы, используемые в методе Ланцоша: | ||
+ | |||
+ | *<math>A * Q_{j} = \beta_{j - 1} * q_{j - 1} + \alpha_{j} * q_{j} + \beta_{j} * q_{j + 1}</math> - получается приравниванием столбцов <math>j</math> в обеих частях равенства <math>A * Q = Q * T</math>. | ||
+ | *<math>q_{j}^T * A * q_{j} = \alpha_{j}</math> - получается домножением обеих частей предыдущего соотношения на <math>q_{j}^T</math> и учетом ортогональности <math>Q</math>. | ||
+ | |||
+ | ==== Процедура Рэлея-Ритца ==== | ||
+ | |||
+ | Пусть <math>Q = [Q_{k}, Q_{u}]</math> - произвольная ортогональная матрица порядка <math>n</math>, причём | ||
+ | <math>Q_{k}</math> и <math>Q_{u}</math> имеют размеры <math>n * k</math> и <math>n * (n - k)</math>. | ||
+ | |||
+ | Пусть <math>T = Q^T * A * Q = [Q_{k},Q_{u}]^T * A * [Q_{k},Q_{u}]</math>. Обратим внимание, что в случае <math>k = 1</math> выражение <math>T_{k} = Q_{k}^T * A * Q_{k}</math> - | ||
+ | отношение Рэлея <math>\rho(Q_{1},A)</math>, то есть число <math>(Q_{1}^T * A * Q_{1}) / (Q_{1}^T * Q_{1})</math>. Определим теперь суть | ||
+ | процедуры Рэлея-Ритца:<br/> | ||
+ | |||
+ | *Процедура Рэлея-Ритца - интерпретация собственных значений матрицы <math>T = Q^T * A * Q</math> как приближений к собственным значениям матрицы <math>A</math>. Эти приближения называются числами Ритца. Пусть <math>T_{k} = V * \lambda * V^T</math> - спектральное разложение матрицы <math>T_{k}</math>. Столбцы матрицы <math>Q_{k} * V</math> рассматриваются как приближения к соответствующим собственным векторам и называются векторами Ритца. | ||
+ | |||
+ | Существует несколько важных фактов о процедуре Рэлея-Ритца, характеризующих получаемые приближения собственных значений матрицы <math>A</math>. | ||
+ | |||
+ | *Минимум величины <math>||A * Q_{k} - Q_{k} * R||_{2}</math> по всем симметричным <math>k * k</math> матрицам <math>R</math> достигается при <math>R = T_{k}</math>. При этом <math>||A * Q_{k} - Q_{k} * R||_{2} = ||T_{ku}||_{2}</math>. Пусть <math>T_{k} = V * \lambda * V^T</math> - спектральное разложение матрицы <math>T_{k}</math>. Минимум величины <math>||A * P_{k} - P_{k} * D||_{2}</math>, когда <math>P_{k}</math> пробегает множество <math>n * k </math> матрицы с ортонормированными столбцами, таких, что <math>span(P_{k}) = span(Q_{k})</math>, а <math>D</math> пробегает множество диагональных <math>k * k</math> матриц также равен <math>||T_{ku}||_{2}</math> и достигается для <math>P_{k} = Q_{k} * V</math> и <math>D = \lambda</math>. | ||
+ | |||
+ | Пусть <math>T_{k}</math>, <math>T_{ku}</math>, <math>Q_{k}</math> - те же самые матрицы. Пусть <math>T_{k} = V * \lambda * V^T</math> - всё то же спектральное разложение, | ||
+ | причём <math>V = [v_{1},...,v_{k}]</math> - ортогональная матрица, а <math>\lambda = diag(\theta_{1},...,\theta_{k})</math>. Тогда: | ||
+ | |||
+ | * Найдутся <math>k</math> необязательно наибольших собственных значений <math>\alpha_{1},...,\alpha_{k}</math> матрицы <math>A</math>, такие, что <math>|\theta_{i} - \alpha_{i}| <= ||T_{ku}||_{2}</math> для <math>i = 1,...,k</math>. Если <math>Q_{k}</math> вычислена методом Ланцоша,то правая часть этого выражения равняется <math>\beta_{k}</math>, то есть единственному элементу блока <math>T_{ku}</math>, который может быть отличен от нуля. Указанный эдемент находится в правом верхнем углу блока. | ||
+ | * <math>||A * (Q_{k} * v_{i}) - (Q_{k} * v_{i}) * \theta_{i}||_{2} = ||T_{ku} * v_{i}||_{2}</math>. Таким образом, разность между числом Ритца <math>\theta_{j}</math> и некоторым собственным значением <math>\alpha</math> матрицы <math>A</math> не превышает величины <math>||T_{ku} * v_{i}||_{2}</math>, которая может быть много меньше, чем <math>||T_{ku}||_{2}</math>. Если матрица <math>Q_{k}</math> вычислена алгоритмом Ланцоша, то эта величина равна <math>\beta_{k} * |v_{i}(k)|</math>, где <math>v_{i}(k)</math> - k-ая компонента вектора <math>v_{i}</math>. Таким образом, можно дещево вычислить норму невязки - левой части выражения, не выполняя ни одного умножения вектора на матрицы <math>Q_{k}</math> или <math>A</math>. | ||
+ | * Не имея информации о спектре матрицы <math>T_{u}</math>, нельзя дать какую-либо содержательную оценку для погрешности в векторе Ритца <math>Q_{k} * v_{i}</math>. Если известно, что <math>\theta_{j}</math> отделено расстоянием, не меньшим <math>g</math>, от прочих собственных значений матриц <math>T_{k}</math>, <math>T_{u}</math> и матрица <math>Q_{k}</math> вычислена алгоритмом Ланцоша, то угол <math>\theta</math> между <math>Q_{k} * v_{i}</math> и точным собственным вектором <math>A</math> можно оценить формулой <math>\frac{1}{2} * \sin{2 * \theta} <= \frac{b_{k}}{g}</math> |
Версия 21:05, 21 октября 2016
Вариант 4 Башлыков Леонид Александрович 616
Математическое описание алгоритма Ланцоща для вычисления собственных значений симметричной матрицы А требует 1) математического описания метода Ланцоща для построения крыловского подпространства и 2) математического описания т.н. процедуры Рэлея-Ритца.
1 Метод Ланцоща для построения крыловского подпространства
Пусть дано уравнение A * x = b, причём вектор b известен и имеется
способ вычисления A * x.
Вычислим y_{1} = b , y_{2} = A * b, y_{3} = A^2 * b,...,y_{n} = A^(n - 1) * b, где n -
порядок матрицы A. Определим матрицу K = [y_{1},...,y_{n}].
Тогда A * K = [A * y_{1},...,A * y_{n - 1}, A * y_{n}] = [y_{2},...,y_{n},A^n * y_{1}].
В предположении, что матрица K - невырождена, можно вычислить вектор c = -K^-1 * A^n * y_{1}.
Поскольку первые n - 1 столбцов в A * K совпадают с последними n - 1 столбцами в
K, то справедливо: A * K = K * [e_{2},e_{3},...,e_{n},-c] = K * C, то есть K^-1 * A * K = C, где C - верхняя хессенбергова матрица.
Заменим K ортогональной матрицей Q так, что при любом k линейные оболочки первых k столбцов в K и Q - одно и то же подпространство. Это подпространство называется крыловским и точно определяется как \kappa_{k}(A, b) - линейная оболочка векторов b,A * b,...,A^(k - 1) * b. Суть алгоритма Ланцоша заключается в вычислении стольких первых столбцов в Q, сколько необходимо для получения требуемого приближения к решению A * x = b (A * x = \lambda * x).
Используем QR-разложение матрицы K = Q * Q
Тогда K^-1 * A * K = (R^-1 * Q^T) * A * (Q * R) = C, откуда Q^T * A * Q = R * C * R^-1 = H
Матрица H является верхней хессенберговой в силу того, что верхней хессенберговой является матрица C, а матрицы R и R^-1 - верхние треугольные.
Однако алгоритм Ланцоша подразумевает симметричность матрицы A. Положим Q = [Q_{k}, Q_{u}], где Q_{k} = [q_{1},...,q_{k}] и Q_{u} = [q_{k+1},...,q_{n}]. В итоге получается, что H = Q^T * A * Q = [Q_{k},Q_{u}]^T * A * [Q_{k},Q_{u}] Из симметричности A, таким образом, следует симметричность и трехдиагональность матрицы H = T. Теперь можно вывести две основные формулы, используемые в методе Ланцоша:
- A * Q_{j} = \beta_{j - 1} * q_{j - 1} + \alpha_{j} * q_{j} + \beta_{j} * q_{j + 1} - получается приравниванием столбцов j в обеих частях равенства A * Q = Q * T.
- q_{j}^T * A * q_{j} = \alpha_{j} - получается домножением обеих частей предыдущего соотношения на q_{j}^T и учетом ортогональности Q.
2 Процедура Рэлея-Ритца
Пусть Q = [Q_{k}, Q_{u}] - произвольная ортогональная матрица порядка n, причём Q_{k} и Q_{u} имеют размеры n * k и n * (n - k).
Пусть T = Q^T * A * Q = [Q_{k},Q_{u}]^T * A * [Q_{k},Q_{u}]. Обратим внимание, что в случае k = 1 выражение T_{k} = Q_{k}^T * A * Q_{k} -
отношение Рэлея \rho(Q_{1},A), то есть число (Q_{1}^T * A * Q_{1}) / (Q_{1}^T * Q_{1}). Определим теперь суть
процедуры Рэлея-Ритца:
- Процедура Рэлея-Ритца - интерпретация собственных значений матрицы T = Q^T * A * Q как приближений к собственным значениям матрицы A. Эти приближения называются числами Ритца. Пусть T_{k} = V * \lambda * V^T - спектральное разложение матрицы T_{k}. Столбцы матрицы Q_{k} * V рассматриваются как приближения к соответствующим собственным векторам и называются векторами Ритца.
Существует несколько важных фактов о процедуре Рэлея-Ритца, характеризующих получаемые приближения собственных значений матрицы A.
- Минимум величины ||A * Q_{k} - Q_{k} * R||_{2} по всем симметричным k * k матрицам R достигается при R = T_{k}. При этом ||A * Q_{k} - Q_{k} * R||_{2} = ||T_{ku}||_{2}. Пусть T_{k} = V * \lambda * V^T - спектральное разложение матрицы T_{k}. Минимум величины ||A * P_{k} - P_{k} * D||_{2}, когда P_{k} пробегает множество n * k матрицы с ортонормированными столбцами, таких, что span(P_{k}) = span(Q_{k}), а D пробегает множество диагональных k * k матриц также равен ||T_{ku}||_{2} и достигается для P_{k} = Q_{k} * V и D = \lambda.
Пусть T_{k}, T_{ku}, Q_{k} - те же самые матрицы. Пусть T_{k} = V * \lambda * V^T - всё то же спектральное разложение, причём V = [v_{1},...,v_{k}] - ортогональная матрица, а \lambda = diag(\theta_{1},...,\theta_{k}). Тогда:
- Найдутся k необязательно наибольших собственных значений \alpha_{1},...,\alpha_{k} матрицы A, такие, что |\theta_{i} - \alpha_{i}| \lt = ||T_{ku}||_{2} для i = 1,...,k. Если Q_{k} вычислена методом Ланцоша,то правая часть этого выражения равняется \beta_{k}, то есть единственному элементу блока T_{ku}, который может быть отличен от нуля. Указанный эдемент находится в правом верхнем углу блока.
- ||A * (Q_{k} * v_{i}) - (Q_{k} * v_{i}) * \theta_{i}||_{2} = ||T_{ku} * v_{i}||_{2}. Таким образом, разность между числом Ритца \theta_{j} и некоторым собственным значением \alpha матрицы A не превышает величины ||T_{ku} * v_{i}||_{2}, которая может быть много меньше, чем ||T_{ku}||_{2}. Если матрица Q_{k} вычислена алгоритмом Ланцоша, то эта величина равна \beta_{k} * |v_{i}(k)|, где v_{i}(k) - k-ая компонента вектора v_{i}. Таким образом, можно дещево вычислить норму невязки - левой части выражения, не выполняя ни одного умножения вектора на матрицы Q_{k} или A.
- Не имея информации о спектре матрицы T_{u}, нельзя дать какую-либо содержательную оценку для погрешности в векторе Ритца Q_{k} * v_{i}. Если известно, что \theta_{j} отделено расстоянием, не меньшим g, от прочих собственных значений матриц T_{k}, T_{u} и матрица Q_{k} вычислена алгоритмом Ланцоша, то угол \theta между Q_{k} * v_{i} и точным собственным вектором A можно оценить формулой \frac{1}{2} * \sin{2 * \theta} \lt = \frac{b_{k}}{g}