Текст подпрограммы и версий ( Фортран )
aeb6r.zip , aeb6d.zip
Тексты тестовых примеров ( Фортран )
taeb6r.zip , taeb6d.zip
Текст подпрограммы и версий ( Си )
aeb6r_c.zip , aeb6d_c.zip
Тексты тестовых примеров ( Си )
taeb6r_c.zip , taeb6d_c.zip
Текст подпрограммы и версий ( Паскаль )
aeb6r_p.zip , aeb6e_p.zip
Тексты тестовых примеров ( Паскаль )
taeb6r_p.zip , taeb6e_p.zip

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

Назначение

Вычисление нескольких собственных векторов, соответствующих заданным собственным значениям, для симметричной ленточной матрицы, заданной в компактной форме.

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

Подпрограмма АЕВ6R по заданным собственным значениям вычисляет соответствующие собственные векторы симметричной ленточной матрицы с помощью метода обратных итераций. Возникающие в методе обратных итераций системы

               ( A - λ I ) x  =  y , 

где А - симметричная ленточная матрица, решаются методом Гаусса с перестановками.

Уилкинсон, Райнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра. М.: "Машиностроение", 1976.

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

    SUBROUTINE  AEB6R (NM, N, M, B, C, EV, L, L0, V, Z, W, LOG,
                                            IERR) 

Параметры

NM - число строк двумерного массива B, указанное при описании этого массива в вызывающей подпрограмме (тип: целый);
N - порядок исходной матрицы, N ≤ NМ (тип: целый);
M - число нижних ненулевых кодиагоналей исходной симметричной ленточной матрицы (включая главную диагональ) (тип: целый);
B - вещественный двумерный массив размерности NМ * М, в первых N строках которого задана исходная симметричная ленточная матрица в компактной форме (см. Организация Библиотеки. Способы представления матриц специального вида);
C - вещественный рабочий двумерный массив размерности N * (2М - 1);
EV - вещественный вектор длины L, содержащий собственные значения, для которых должны быть вычислены собственные векторы, при L0 > 0 для первых L0 собственных значений собственные векторы задаются пользователем;
L - число заданных собственных значений (тип: целый);
L0 - число собственных значений, собственные векторы для которых уже известны и задаются на входе в подпрограмму, L0 < L (тип: целый);
V - вещественный двумерный массив размерности NМ * L, содержащий на входе в подпрограмму в своих первых L0 столбцах ортонормированные собственные векторы, соответствующие собственным значениям, расположенным в первых L0 компонентах вектора EV, а на выходе из подпрограммы - L ортонормированных собственных векторов, соответствующих заданным собственным значениям;
Z - вещественный рабочий вектор длины N;
W - вещественный рабочий двумерный массив размерности N * М;
LOG - логический рабочий двумерный массив размерности N * М;
IERR - целочисленная переменная, содержащая на входе признак задания пользователем начального приближения к искомым собственным векторам, при этом:
IERR=1 - если пользователь сам задает в соответствующих столбцах массива V начальные приближения к собственным вектоpам;
IERR=0 - ecли пользователь не задает начальных приближений;
  а при выходе из подпрограммы:
IERR=0 - если вычислены все требуемые собственные векторы;
IERR=К - если при вычислении собственного вектора с индексом К ни один из векторов, используемых в качестве начальных, не позволил получить приемлемого приближения; при этом компоненты К - ого столбца массива V полагаются равными нулю; если таких собственных векторов было несколько, то значение IERR полагается равным индексу последнего из них.

Версии

AEB6D - вычисление нескольких собственных векторов, соответствующих заданным собственным значениям, для симметричной ленточной матрицы, заданной в компактной форме и с двойной точностью.

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

       AV04R -        AV04D   вычисление скалярного произведения;
       AV02R -        AV02D   вычисление евклидовой нормы вектора.

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

  1. 

Подпpогpамма AEВ6R сохpаняет исходный массив В;

  2. 

В подпpогpамме AEВ6D паpаметpы B, C, EV, V, Z, W имеют тип DOUBLE PRECISION;

  3. 

Если начальное приближение, заданное пользователем, окажется неудачным, то подпрограмма AEB6R продолжит работу с новым начальным вектором;

  4. 

При повторном обращении к подпрограмме можно задать уже вычисленные L0 собственных векторов в первых столбцах массива V, тогда подпрограмма AEB6R, вычисляя новые собственные векторы, обеспечит их ортогональность по отношению к заданным. Это важно, если среди новых и старых собственных значений имеются близкие, так как сам по себе метод обратных итераций не гарантирует ортогональность собственных векторов, соответствующих близким собственным значениям, и требуется дополнительная ортогонализация;

  5.  Собственные значения, задаваемые в компонентах вектора EV, могут не быть упорядочены.

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

       DIMENSION  C(5, 5), B(5, 3), EV(2), V(5, 2), Z(5), W(5, 2),
     *                        LOG(5, 2)
       LOGICAL  LOG
       DATA  B /2*0., 4., 0., 4., 0., 4*3., 5., 3.25, 1., 4.25, 6./
       DATA  EV /1., 2./
       N = 5
       NM = 5
       M = 3
       L = 2
       L0 = 0
       IERR = 0
       CALL  AEB6R (NM, N, M, B, C, EV, L, L0, V, Z, W, LOG, IERR)

Результаты:

      IERR  =  0 ,

      | - 0.6              1.E - 11  |
      |   0.8              5.E - 12  |
      |   1.E - 11       8.E - 12  |
      |   2.E - 11     - 0.8         |
      | - 3.E - 11       0.6         |