Текст подпрограммы и версий ( Фортран ) aes1r.zip |
Тексты тестовых примеров ( Фортран ) taes1r.zip |
Текст подпрограммы и версий ( Си ) aes1r_c.zip |
Тексты тестовых примеров ( Си ) taes1r_c.zip |
Текст подпрограммы и версий ( Паскаль ) aes1r_p.zip |
Тексты тестовых примеров ( Паскаль ) taes1r_p.zip |
Вычисление всех различных собственных значений вещественной симметричной разреженной или имеющей регулярную структуру матрицы методом Ланцоша.
Метод Ланцоша для заданной симметричной матрицы А порядка N и начального вектора v ∈ ЕN , v ≠ 0 , строит последовательность векторов Ланцоша v1, v2, ..., vj и последовательность трехдиагональных матриц Т1, Т2, ..., Тj по следующим формулам процесса (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
Подпрограмма АЕS1R использует следующее свойство метода Ланцоша: в спектре трехдиагональной матрицы Тj , полученной при выполнении достаточно большого числа j (j ~ 2N,...,6N) шагов алгоритма (1), появляются приближения ко всем различным собственным значениям исходной матрицы А.
В подпрограмме АЕS1R на шагах с номерами
p = mi = M1 + (i - 1)*MH , i = 1, 2, ..., (М1, МН - заданные числа)
процесс (1) прерывается и вычисляются собственные значения матриц Тp. Для разделения собственных значений матриц Тp на "истинные" и "лишние" применяется критерий, использующий собственные значения матрицы Тp^ , получаемой из Тp вычеркиванием первой строки и первого столбца. Для истинных собственных значений матриц Тp вычисляются оценки точности.
Пусть Кj - число истинных собственных значений матрицы Тj , К'j - число истинных значений Тj , являющихся приближениями к собственным значениям матрицы А с точностью max { ЕРS, 10*j*ε }*|| А ||2, где ЕРS - заданная пользователем величина, ε - относительная машинная точность, || А ||2 - спектральная норма матрицы А.
Выход из подпрограммы АЕS1R происходит
1) при выполнении одного из соотношений
K'p = Kp = Kp1 , K'p = N ; ( где p1 = mi-1 )
2) по заданному ограничению на число шагов процесса (1);
3) если очередное вычисленное значение βj+1 очень мало;
4) если при работе подпрограммы АЕЕ2R, используемой для вычисления собственных значений трехдиагональных матриц, произошла фатальная ошибка.
Метод Ланцоша использует исходную матрицу только в операциях умножения матрицы на вектор, поэтому информацию о матрице А удобно задавать в виде подпрограммы умножения матрицы на вектор, в которой пользователь может максимально учесть специфику матрицы.
Сullum J., Donath W.Е. Lanczos and thе computation in specified intervals of thе spectrum of large, sparse real symmetric matrices. Sparse Мatrix Рroc., Кnoxville, Тen., 1978. Рhiladelphia, Pа, 1979, 220-255.
Х.Д. Икрамов. Разреженные матрицы. Математический анализ. Т. 20. (Итоги науки и техн. ВИНИТИ АН СССР). М., 1982.
SUBROUTINE AES1R ( N, M0, M1, MH, M2, EPS, FF, VJ, W, E, D, L, EV, ER, IR, IP)
Параметры
N - | порядок исходной матрицы (тип: целый); |
M0 - | целочисленная переменная, содержащая на входе в подпрограмму число уже выполненых (при предыдущих обращениях к подпрограмме) шагов процесса (1), при этом процесс (1) будет продолжен, начиная с (М0+1) - го шага; при первом обращении к подпрограмме М0 = 0, на выходе из подпрограммы М0 содержит суммарное число выполненных шагов алгоритма (1); |
M1 - | задаваемый номер шага, на котором происходит первое прерывание процесса (1) (тип: целый); |
MH - | задаваемый промежуток между двумя последовательными прерываниями процесса (1) (тип: целый); |
M2 - | задаваемое максимальное число шагов процесса (1) (тип: целый); |
EPS - | вещественная переменная, содержащая на входе в подпрограмму требуемую относительную точность для вычисляемых собственных значений (под относительной точностью здесь подразумевается отношение абсолютной ошибки вычисленных приближенных собственных значений к спектральной норме матрицы А); на выходе из подпрограммы ЕРS = max { ЕРS, 10*М0*ε } , где ε - относительная машинная точность; |
FF - |
имя подпрограммы вычисления W:
= (А - S*I) V - W ;
первый оператор подпрограммы должен иметь вид: SUВRОUТINЕ FF (V, W, N, S) Здесь: |
V - | заданный вещественный вектор длины N; |
W - | вещественный вектор длины N, содержащий на входе в подпрограмму заданный вектор, а на выходе из подпрограммы - вычисленный вектор (А - S*I) V - W ; |
N - | порядок матрицы А (тип: целый); |
S - | простая переменная (тип: вещественный); |
VJ - |
вещественный вектор длины N, содержащий на входе
в подпрограмму заданный начальный вектор; если
VJ = 0, то в качестве начального будет взят вектор V = (1., 1., ..., 1.)T; |
W - | вещественный вектор длины N, используемый как рабочий; |
E - | вещественный вектор длины 2*М2 + 1, содержащий в своих первых М2 + 1 компонентах, начиная со второй, вычисленные поддиагональные элементы трехдиагональной матрицы Т; |
D - | вещественный вектор длины М2, содержащий вычисленные диагональные элементы трехдиагональной матрицы Т; |
L - | число вычисленных собственных значений (тип: целый); |
EV - | вещественный вектор длины М2, в первых L (при L ≠ 0) компонентах которого на выходе из подпрограммы расположены в порядке возрастания вычисленные собственные значения; |
ER - | вещественный вектор длины М2, в I - ой компоненте которого, 1 ≤ I ≤ L , на выходе из подпрограммы содержится мантисса вычисленной оценки ошибки для ЕV (I); |
IR - | целочисленный вектор длины М2, в I - ой компоненте которого, 1 ≤ I ≤ L , на выходе из подпрограммы содержится двоичный порядок вычисленной оценки ошибки для ЕV (I); |
IP - | целочисленная переменная, содержащая на выходе из подпрограммы признак выхода, причем |
IР = 0 , | если Кp = N; |
IР = 1 , | если Кp = К'p = Кp1 < N ; |
IР = 2 , | если выполнено заданное число М2 шагов, а требуемая точность еще не достигнута; |
IР = 3 , | если получено слишком малое значение βj+1 , причем Кj < N ; |
IР =-1 , | если при использовании подпрограммы АЕЕ2R произошла фатальная ошибка. |
Версии : нет
Вызываемые подпрограммы
AEE2R - | подпрограмма вычисления всех собственных значений симметричной трехдиагональной матрицы с помощью неявного QL - алгоpитма. |
Замечания по использованию
1. |
Наименование подпрограммы, соответствующей формальному параметру FF, должно быть указано в операторе ЕХТЕRNАL в вызывающей подпрограмме. | |
2. |
Подпрограмма FF должна сохранять вектор V. | |
3. |
Если на выходе из подпрограммы IР = 2, то, обратившись к ней повторно, можно продолжить уже начатый процесс (1), указав число М0 выполненных шагов и задав новые значения М1, МН, М2, ЕРS; информация о выполненных шагах хранится в векторах Е, D, VJ, W. | |
4. |
Если на выходе из подпрограммы IР = 1 или IР = 3, то K < N и, вообще говоря, нет гарантии, что вычислены все различные собственные значения, поэтому при IР = 1, 3 полезно обратиться к подпрограмме еще раз с другим начальным вектором. | |
5. |
При IР = -1 повторное обращение к подпрограмме АЕS1R для продолжения процесса (1) невозможно. | |
6. | Подпрограмма АV04R1 используется в качестве рабочей. |
DIMENSION VJ(6), W(6), E(57), D(28), EV(28), ER(28), IR(28) DATA VJ /6*1./ EXTERNAL FF EPS = 1.E-6 M0 = 0 CALL AES1R (6, M0, 4, 4, 28, EPS, FF, VJ, W, E, D, K, EV, ER, IR, IP) Подпрограмма пользователя, вычисляющая W = (А - S*I)V - W, где А = diag (1, 2, ... , N) SUBROUTINE FF (V, W, N, S) DIMENSION V(N), W(N) DO 10 I = 1, N W(I) = (I - S)*V(I) - W(I) 10 CONTINUE RETURN END Результаты: K = 6, IP = 0 EV = (1., 2., 3., 4., 5., 6.) ER = (1., 1., 1., 1., 1., 1.) IR = (-12, -12, -12, -12, -12, -12)