Текст подпрограммы и версий ( Фортран )
agt0r.zip 
Тексты тестовых примеров ( Фортран )
tagt0r.zip 
Текст подпрограммы и версий ( Си )
agt0r_c.zip 
Тексты тестовых примеров ( Си )
tagt0r_c.zip 
Текст подпрограммы и версий ( Паскаль )
agt0r_p.zip 
Тексты тестовых примеров ( Паскаль )
tagt0r_p.zip 

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

Назначение

Вычисление всех собственных значений и собственных вектоpов в обобщенной проблеме AV - 1x = λBV - 1 для вещественных верхней почти треугольной матрицы A, произвольной невырожденной матрицы V и верхней треугольной матрицы B с помощью QR - алгоритма.

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

Подпрограмма AGT0R вычисляет все собственные значения и собственные векторы обобщенной проблемы

     AV - 1x = λBV - 1x 

для вещественных верхней почти треугольной матрицы A, верхней треугольной матрицы B и произвольной невырожденной матрицы V с помощью QR - алгоритма. Матрицы A, B и V имеют размеры N на N.

Информация о вычисленных собственных значениях обобщенной проблемы выдается в вектоpах ALFR, ALFI, BETA длины N, по которым k - ое собственное значение λk определяется с помощью формулы:

      λk = ALFR(K) / BETA(K) + i ALFI(K) / BETA(K),  при BETA(K) ≠ 0,
(1)  λk = ∞                                                          , при BETA(K) = 0,
      λk = любое число                                        , при ALFR(K) = ALFI(K) = 
                                                                                    = BETA(K) = 0. 

Вычисленные собственные векторы Xk обобщенной проблемы помещаются на место матрицы V таким образом, что вещественному значению λk соответствует k - ый столбец Vk матрицы V, т.е. Xk = Vk, а паре комплексно - сопряженных собственных значений λk и λk+1 соответствуют столбцы Vk и Vk+1 матрицы V. При этом

     Xk = Vk + i Vk+1,    Xk+1 = Vk - i Vk+1.  

C.B.Moler, G.W.Stewart, An Algorithm for Generalized Matrix Eigenvalue Problems, SIAM J. Numer. Anal., 10, 1973.

Использование

    SUBROUTINE  AGT0R (A, B, V, ALFR, ALFI, BETA, N, IERR) 

Параметры

A, B - вещественные двумерные массивы размера N на N, содержащие соответственно верхнюю почти треугольную и верхнюю треугольную матрицы;
V - вещественный двумерный массив размера N на N, содержащий заданную невырожденную матрицу V; в результате работы подпрограммы в столбцах массива V содержатся вычисленные собственные векторы Xk таким образом, что вещественному собственному значению λk соответствует k - ый столбец Vk, т.е Xk = Vk, а паре комплексно - сопряженных собственных значений λk и λk+1 соответствуют два столбца Vk и Vk+1; при этом Xk = Vk + i Vk+1,  а  Xk+1 = Vk - i Vk+1;
  ALFR -
 ALFI  
  BETA  
вещественные векторы длины N, содержащие информацию о собственных значениях λk обобщенной проблемы; при этом собственные значения определяются формулой (1);
N - заданный порядок исходных матриц A, B и V (тип: целый);
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженых в ходе работы подпрограммы; значение IERR полагается равным J+128, где J - номеp собственного значения, для вычисления которого потребовалось более 30 итераций, при этом собственные значения с индексами J+1, ..., N вычислены правильно, а с индексами 1, ..., J и собственные векторы могут быть вычислены не точно.

Версии : нет

Вызываемые подпрограммы

UTAG10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы AGT0R.

Замечания по использованию

  1. 

Подпрограмма AGT0R не сохраняет исходную информацию.

  2. 

B массиве V должна задаваться единичная матрица, если решается обобщенная проблема Ax = λBx для вещественных верхней почти треугольной матрицы A и верхней треугольной матрицы B.

  3.  Вычисленные собственные векторы нормализованы так, что наибольшая компонента по модулю pавна 1.

Пример использования

          DIMENSION  A (3, 3), B (3, 3), V (3, 3), ALFR (3), ALFI (3), BETA (3)
          DATA  A /1., -10., 5., 0.5, 2., 1., 2*0., 0.5/
          DATA  B /0.5, 3., 4., 0., 3., 0.5, 2*0., 1./
          N = 3
          M = 0
          CALL  AFG3R (A, B, V, N, M)
          CALL  AGT0R (A, B, V, ALFR, ALFI, BETA, N, IERR)

Результаты:

       IERR  =  0
       ALFR  =   ( 1.27052,   0.40869,   1.00306)
       ALFI   =   ( 3.03864,  -0.97744,   0.00000)
       BETA  =   ( 1.52462,   0.49043,   2.00612)

                | -0.25205   0.19169   0.00000 |
       V  =  | -0.08799  -0.72598   0.00000 |
                |  1.00000    0.00000   1.00000 |

Собственные значения
   λk  =   (ALFR(k) + i ALFI(k)) / BETA(k),  k  =  1, 2, 3:

   λ1  =  0.83333 + 1.9930i
   λ2  =  0.83333 - 1.9930i
   λ3  =  0.50000 + 0.0000i

Собственные векторы:

                | -0.25205 + 0.19169i |
      X1  =  | -0.08799 - 0.72598i |
                |  1.00000 + 0.00000i |

                 | -0.25205 - 0.19169i |
      X2  =  | -0.08799 + 0.72598i |
                 |  1.00000 - 0.00000i |

                 |  0.00000 + 0.00000i |
      X3  =  |  0.00000 + 0.00000i |
                 |  1.00000 + 0.00000i |