Текст подпрограммы и версий ( Фортран )
agg2c.zip 
Тексты тестовых примеров ( Фортран )
tagg2c.zip 
Текст подпрограммы и версий ( Си )
agg2c_c.zip 
Тексты тестовых примеров ( Си )
tagg2c_c.zip 
Текст подпрограммы и версий ( Паскаль )
agg2c_p.zip 
Тексты тестовых примеров ( Паскаль )
tagg2c_p.zip 

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

Назначение

Вычисление всех собственных значений и собственных вектоpов в обобщенной проблеме Ax = λBx для двух комплексных матриц с помощью LZ - алгоpитма.

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

Подпрограмма AGG2C вычисляет все собственные значения и собственные векторы обобщенной проблемы Ax = λBx для комплексных матриц A, B размера N на N с помощью LZ - алгоpитма.

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

                        λk = ALFA(k) / BETA(k), при BETA(k) ≠ 0,
   (1)                 λk = ∞                            , при BETA(k) = 0,
                        λk = любое число          , при ALFA(k) = BETA(k) = 0.

Вычисленные собственные векторы запоминаются в столбцах матрицы V.

R.S.Martin, J.H.Wilkinson, The Modified L*R - Algorithm for Complex Hessenberg Matrices, Numer. Math. 12, 1968.

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

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

    SUBROUTINE  AGG2C (A, B, V, ALFA, BETA, N, IERR) 

Параметры

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

Версии : нет

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

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

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

  Исходные матрицы A и B не сохраняются.

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

         DIMENSION  A(3, 3), B(3, 3), V(3, 3), ALFA(3), BETA(3)
         COMPLEX  A, B, V, ALFA, BETA 
         DATA  A /(1., 0.), (-10., 0.), (5., 0.), (0.5, 0.), (2., 0.), 
        *                (1., 0.), 2*(0., 0.), (0.5, 0.)/
         DATA  B /(0.5, 0.), (3., 0.), (4., 0.), (0., 0.), (3., 0.), 
        *                (0.5, 0.), 2*(0., 0.), (1., 0.)/
         N = 3
         CALL  AGG2C (A, B, V, ALFA, BETA, N, IERR)

Результаты:

      IERR  =  0

                      |  2.79963-3.65018*i  |
      ALFA  =  |  0.42142+0.54945*i |
                      | -1.09877+0.0*i        |
   
                      | -1.05899-1.84748*i |
      BETA  =  | -0.15941+0.27809*i |
                      | -2.19753+0.0*i        |

               | -0.25205+0.19169*i |
               | -0.25205-0.19169*i |
               |  0.00 + 0.00*i           |
               | -0.08799-0.72598*i |
      V  =  | -0.08799+0.72598*i |
               |  0.00 + 0.00*i           |
               |  1.00000+0.0*i         |
               |  1.00000+0.0*i         |
               |  1.0+0.0*i                |

Собственные значения    λk = ALFA(k) / BETA(k)

      λ1  =  0.8333 + 1.993*i
      λ2  =  0.8333 - 1.993*i
      λ3  =  0.500 + 0.0*i

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

                | -0.25205+0.19169*i |
      x1  =  | -0.08799-0.72598*i  |
                |  1.00000+0.0*i        |

                | -0.25205-0.19169*i |
      x2  =  | -0.08799+0.72598*i |
                |  1.00000+0.0*i       |
                          
                |  0.0+0.0*i |
      x3  =  |  0.0+0.0*i |
                |  1.0+0.0*i |