Текст подпрограммы и версий ( Фортран )
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

Подпрограмма:  AES4R

Назначение

Вычисление нескольких крайних собственных значений и соответствующих собственных векторов вещественной симметричной разреженной или имеющей регулярную структуру матрицы методом Ланцоша с выборочной ортогонализацией.

Математическое описание

Метод Ланцоша для заданной симметричной матрицы А порядка 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