Текст подпрограммы и версий
aeh5r_c.zip , aeh5d_c.zip
Тексты тестовых примеров
taeh5r_c.zip , taeh5d_c.zip

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

Назначение

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

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

Заданная матрица ортогонaльными преобразованиями подобия приводится к трехдиагональной симметричной форме, собственные значения которой затем вычисляются с помощью неявного QL - алгоpитма.
Информация о преобразованиях используется для вычисления собственных вектopoв.

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

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

    int aeh5r_c (integer *n, integer *nv, real *a, real *ev, real *
        v, real *r, integer *ierr)

Параметры

n - порядок исходной матрицы (тип: целый);
nv - длина вектора  a,  nv ≥ n(n + 1)/2 (тип: целый);
a - вещественный вектор длины nv, содержащий в своих первых n (n + 1)/2 компонентах исходную матрицу, заданную в компактной форме;
ev - вещественный вектор длины  n, содержащий вычисленные собственные значения, расположенные в порядке неубывания;
v - вещественный двумерный массив размерности n на n, содержащий в своих столбцах ортонормированные собственные векторы;
r - вещественный вектор длины 3 * n, используемый как рабочий;
ierr - целочисленная переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом ierr имеет тот же смысл, что и в подпрограмме aee1r_c.

Версии

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

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

afh5r_c - приведение вещественной симметричной матрицы, заданной в компактной форме, к симметричной трехдиагональной форме ортогональными преобразованиями подобия.
aee1r_c - вычисление всех собственных значений и соответствующих собственных векторов вещественной симметричной трехдиагональной матрицы неявным QL - алгоpитмом.
afh5r1_c - рабочая подпрограмма.
utae10_c - подпрограмма выдачи диагностических сообщений при работе подпрограмм aee1r_c и aee1d_c.

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

  1. 

Подпрограмма aeh5r_c не сохраняет исходный вектор  a.

  2. 

В подпрограмме aeh5d_c параметры a, ev, v, r имеют тип double.

  3.  Подпрограмма aeh5r1_c используется в качестве рабочей.

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

int main(void)
{
    /* Initialized data */
    static float a[10] = { 43.f,0.f,68.f,0.f,24.f,82.f,24.f,0.f,0.f,57.f };

    /* Local variables */
    static int ierr;
    extern int aeh5r_c(int *, int *, float *, float *,
                       float *, float *, int *);
    static int i__;
    static float r__[12], v[16] /* was [4][4] */, ev[4];

#define v_ref(a_1,a_2) v[(a_2)*4 + a_1 - 5]

    aeh5r_c(&c__4, &c__10, a, ev, v, r__, &ierr);

    printf("\n %5i \n", ierr);
    printf("\n %16.7e %16.7e \n %16.7e %16.7e \n",
               ev[0], ev[1], ev[2], ev[3]);
    for (i__ = 1; i__ <= 4; ++i__) {
        printf("\n %16.7e %16.7e %16.7e %16.7e \n",
            v_ref(i__, 1), v_ref(i__, 2), v_ref(i__, 3), v_ref(i__, 4));
    }
    return 0;
} /* main */


Результаты:

       ierr  =  0

                | - 0.8            1.8e -12      0.6       0.    |
    v_ref  =  |   0.             - 0.8              0.       - 0.6 |
                |   1.8e -12     0.6              0.       - 0.8 |
                |   0.6              0.               0.8       0.    |

       ev  =  (25., 50., 75., 100.)