Текст подпрограммы и версий ( Фортран ) aes4r.zip , aes4d.zip |
Тексты тестовых примеров ( Фортран ) taes4r.zip , taes4d.zip |
Текст подпрограммы и версий ( Си ) aes4r_c.zip , aes4d_c.zip |
Тексты тестовых примеров ( Си ) taes4r_c.zip , taes4d_c.zip |
Текст подпрограммы и версий ( Паскаль ) aes4r_p.zip , aes4e_p.zip |
Тексты тестовых примеров ( Паскаль ) taes4r_p.zip , taes4e_p.zip |
Вычисление нескольких крайних собственных значений и соответствующих собственных векторов вещественной симметричной разреженной или имеющей регулярную структуру матрицы методом Ланцоша с выборочной ортогонализацией.
Метод Ланцоша для заданной симметричной матрицы А порядка N и начального вектора v ∈ EN, v ≠ 0, строит последовательность векторов v1, v2,..., vj и последовательность трехдиагональных матриц T1, T2,..., Tj по следующим формулам
(1) v1 = v / (vTv)1/2 , β1 = 0 , ui = Avi - βivi -1 , αi = uiTvi , T1 = α1 , i = 1 , | | 0 | | | . | Ti = | Ti-1 | 0 | , i > 1 , | ______ | βi | | 0 ... 0 βi αi | wi +1 = ui - αivi , βi +1 = (wTi +1wi +1)1/2 , vi +1 = wi +1 / βi +1 , i = 1,..., j
Метод Ланцоша может быть рассмотрен как реализация для спектральной задачи Az = λz метода проекций Ритца - Галеркина на последовательность подпространств Крылова
K( j ) = span { v1, Av1,... , Aj -1 v1 } , j = 1,... , N ,
при этом числа Ритца (собственные значения сужения оператора PjA на K ( j ), где Pj - ортогональный проект на K ( j ) ) совпадают с собственными значениями Θi ( j ), i = 1,..., j, матрицы Tj, получаемой на j - ом шаге метода Ланцоша, а векторы Ритца равны Vjsi ( j ), где si ( j ) - соответствующие Θi ( j ) собственные векторы Tj, а Vj - матрица, столбцами которой являются векторы Ланцоша v1, v2,..., vj.
Полезной особенностью метода Ланцоша является то, что часто уже при j ~ 2√N крайние пары Ритца ( Θi ( j ), Vj sj ( j ) ) оказываются хорошими приближениями к искомым крайним собственным парам матрицы А.
Метод Ланцоша использует исходную матрицу только в операциях умножения матрицы на вектор, поэтому информацию о матрице удобно задавать в виде подпрограммы умножения матрицы на вектор, в которой пользователь может максимально учесть специфику матрицы.
В подпрограмме AES4R используется метод Ланцоша с выборочной ортогонализацией - устойчивая к влиянию ошибок округления модификация простого метода Ланцоша, отличающаяся от него тем, что на некоторых шагах процесса (1) проводится ортогонализация wj + 1 относительно некоторых векторов Ритца.
В подпрограмме АЕS4R предполагается, что || A || 2 ~ 1, где || A || 2 - спектральная норма матрицы. Гарантированной точностью по невязке для вычисляемых собственных векторов является величина k || A ||2√ε, где ε - относительная машинная точность, k ~ 1, но часто возможно получение лучшей точности.
Выход из подпрограммы происходит, когда все требуемые собственные векторы будут вычислены с заданной точностью по невязке или если продолжение процесса (1) окажется невозможным или бесполезным.
Б.Парлетт. Симметричная проблема собственных значений. Численные методы. М.: Мир, 1983.
SUBROUTINE AES4R (N, KL, KR, FF, EPS, M, VJ, K, L, R, R1, R2, EV, ER, V, Y, IP)
Параметры
N - | порядок исходной матрицы, (тип: целый); |
KL, KR - | задаваемые соответственно число наименьших и число наибольших собственных значений и соответствующих собственных векторов, которые требуется вычислить (тип: целый); |
FF - |
имя подпрограммы вычисления
w : = ( A - sI ) v - w;
первый оператор подпрограммы должен иметь вид: SUBROUTINE FF (V, W, N, S) Здесь: |
V - | заданный вещественный вектор длины N; |
W - | вещественный вектор длины N, содержащий на входе в подпрограмму заданный вектор, а на выходе из программы - вычисленный вектор ( A - sI ) V - W; |
N - | порядок матрицы А (тип: целый); |
S - | простая переменная (тип: вещественный); |
EPS - | заданная требуемая точность по невязке для вычисляемых собственных значений и соответствующих собственных векторов (тип: вещественный); |
M - | целая переменная, содержащая на входе в подпрограмму задаваемое максимальное число шагов алгоритма, а на выходе из подпрограммы - число выполненных шагов; |
VJ - | вещественный вектор длины N, содержащий на входе в подпрограмму заданный начальный вектор; если VJ = 0, то в качестве начального будет взят вектор v1 = (1., 1., ... , 1.) T; |
K - | заданное максимальное число вычисляемых собственых значений и соответствующих собственных векторов матриц Tj, K ≥ KL + KR + 2 (тип: целый); |
L - | длина рабочего вектора R (тип: целый), L ≥ M (K + 9) + 8K; |
R - | вещественный рабочий вектор длины L, использемый как рабочий; |
R1, R2 - | вещественные рабочие вектора длины N, используемые как рабочие; |
EV - | вещественный вектор длины (KL + KR), в первых KL компонентах которого на выходе из подпрограммы содержатся в порядке неубывания вычисленные KL наименьших собственных значений, а в последних KR компонентах в порядке невозрастания - KR наибольших собственных значений; |
ЕR - | вещественный вектор длины (KL + KR), содержащий невязки ER ( I ) = || AyI - ER ( I ) yI ||, где yI = yI - вычисленный нормированный собственный вектор матрицы А соответствующий собственному значению ER ( I ), 1 ≤ I ≤ KL + KR; |
V - | вещественный двумерный массив размерности N * MMAX, в столбцах которого в ходе работы подпрограммы располагаются вычисленные векторы Ланцоша v1, v2, ..., vMMAX; |
Y - | вещественный двумерный массив размерности N * K, в I - ом, 1 ≤ I ≤ KL + KR, столбце которого на выходе из подпрограммы содержится вычисленный нормированный собственный вектор, соответствующий выходному значению EV ( I ); |
IP - | простая целочисленная переменная, содержащая на входе в подпрограмму признак рещаемой задачи, при этом: |
IP = 1 - | если требуется выполнить ровно М шагов алгоритма; |
IP = 0 - | если допустим выход из программы при j < M, j - число выполненных шагов; в этом случае вычисления будут прекращены после того, как на некотором шаге j будет получено заданное число приближений к собственным парам матрицы А с заданной точностью; |
на выходе из подпрограммы IP содержит признак выхода, причем: |
IP = -1 - | если заданное значение параметра L не удовлетворяет неравенству L ≥ M * (9 + K) + 8K; |
IP = -2 - | если заданное значение параметра K не удовлетворяет неравенству K ≥ KL + KR + 2; |
IP = -3 - | если обе описанные выше ошибки имели место; |
IP = 0 - | если требуемые собственные значения и соответствующие собственные векторы вычислены с заданной точностью; |
IP = 1 - | если выполнено заданное число М шагов алгоритма, а заданная точность еще не достигнута; |
IP = 2 - | если на некотором шаге j, j < M, алгоритма потребовалось вычислить более К собственных пар матрицы Tj; в этом случае для продолжения процесса не хватает памяти; |
IP = 3 - | если заданная точность не может быть достигнута; |
IP = 4 - | если получено слишком малое значение βj + 1; |
IP = 5 - | если резко возрастает объем работ по проведению выборочной ортогонализации. |
Версии
AES4D - | вычисление нескольких крайних собственных значений и соответствующих собственных векторов вещественной симметричной разреженной или имеющей регулярную структуру матрицы, заданной с двойной точностью, методом Ланцоша с выборочной ортогонализацией. |
Вызываемые подпрограммы
AVZ6R - | упорядочивание вектора по возрастанию его компонент с запоминанием произведенных перестановок; |
AVZ2R - | нахождение максимальной по модулю компоненты и ее индекса из всего вектора или из заданного подмножества компонент этого вектора; |
AV02R - | вычисление евклидовой нормы вектора; |
AV04A - | вычисление скалярного произведения в режиме накопления; |
AM05R - | вычисление произведения матрицы на вектор. |
Замечания по использованию
1. | Наименование подпрограммы, соответствующей формальному параметру FF, должно быть указано в операторе EXTERNAL в программе пользователя, вызывающей AES4R; | |
2. | Подпpогpамма FF должна сохранять вектор V; | |
3. | Если начальный вектор был выбран неудачно (имел нулевые составляющие вдоль направлений некоторых из искомых собственных векторов), то возможно, что вычисленные векторы не обязательно будут приближениями именно к тем собственным векторам, которые соответствуют первым KL и последним KR собственным значениям. Поэтому, вообще говоря, для проверки необходимо обратиться к АЕS4R с начальными векторами. Особенно это необходимо, если на выходе из программы IP = 4 или мало выходное значение параметра M; | |
4. | Неудачный выбор начального вектора может привести к выходу из подпрограммы на шаге с номером j < KL + KR по признаку IP = 4. В этом случае будут вычислены все j собственных пар, причем все j вычисленных собственных значений будут расположены в массиве EV в порядке неубывания. Понятно, что в этом случае повторное обращение к подпрограмме совершенно необходимо; | |
5. | Если на выходе из подпрограммы IP < 0, то никакой информации об искомых собственных парах получено не будет; если же IP > 0, то на выходе из подпрограммы будут получены KL первых и KR последних пар Ритца, вычисленных на шаге прерывания (номер этого шага - выходное значение M), т.е. будут получены приближения к искомым собственным парам, хотя их точность и не является удовлетворительной. Эти приближения могут быть использованы для построения нового начального вектора и повторного обращения к AES4R; | |
6. | Если на выходе из подпрограммы IP = 2, то необходимо увеличить значение параметра K и соответственно L. Рекомендации для выбора значения K, которые были бы удовлетворительными для любых матриц, не могут быть даны, т.к. требуемое значение K зависит от спектра исходной матрицы и равно числу пар Ритца, невязки которых станут величинами ~ || A || √ε к тому моменту, когда невязки для заданного числа крайних пар Ритца станут меньше EPS; | |
7. | В подпpогpамме AES4D паpаметpы EPS, VJ, R, R1, R2, EV, ER, V, Y имеют тип DOUBLE PRECISION; | |
8. | Подпpогpаммы AES4R1 (AES4D1), AES0R0 (AES0D0), AV04R1 (AV04D1) используются в качестве рабочих; | |
9. |
В подпpогpамме FF паpаметpы V, W, S должны
иметь тип DOUBLE PRECISION.
Пример использованияSUBROUTINE F0 (X, Z, N, S) DIMENSION X(N), Z(N), RAB(6) DATA RAB /0., 1.E - 5, 2.E - 5, 3.E - 5, 0.1, 1./ DO 10 I = 1, N Z(I) = (RAB(I) - S) * X(I) - Z(I) 10 CONTINUE RETURN END DIMENSION VJ(6), EV(2), ER(2), R(97), R1(6), R2(6), V(6,5), Y(6,2) EXTERNAL F0 DATA VJ /6*1./ M = 5 IP = 0 CALL AES4R (6, 0, 2, F0, 1.E - 3, M, VJ, 4, 97, * R, R1, R2, EV, ER, V, Y, IP) Результаты: IP = 0 , M = 3 Собственные значения: EV(1) = 1. , EV(2) = 0.1 Собственные векторы: | 5.E - 7 2.E - 4 | | - 6.E - 7 5.E - 5 | | - 2.E - 6 - 6.E - 5 | Y = | - 3.E - 6 - 2.E - 4 | | 1.E - 6 - 1. | | 1. 3.E - 6 | Невязки: ER(1) = 4.E - 6 , ER(2) = 2.E - 5 |