Текст подпрограммы и версий
afe1r_c.zip , afe1d_c.zip
Тексты тестовых примеров
tafe1r_c.zip , tafe1d_c.zip

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

Назначение

Одновременное приведение вещественной симметрической трехдиагональной матрицы и диагональной положительно определенной матрицы двусторонним диагональным преобразованием соответственно к вещественной симметрической трехдиагональной и единичной матрицам.

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

Пусть Т - заданная вещественная симметрическая трехдиагональная матрица, D - диагональная положительно определенная матрица. Подпрограмма afe1r_c получает вещественную симметрическую трехдиагональную матрицу Н и диагональную матрицу D1 = D - 1/2, такие что  Н = D1ТD1 и  D1DD1 = Е .

Эта подпрограмма может быть использована для сведения обобщенной проблемы собственных значений вида Тx = λDx , где Т - вещественная симметрическая трехдиагональная, D - диагональная, D > 0, к стандартной проблеме Нz = λz с вещественной симметрической трехдиагональной матрицей Н; при этом собственные значения этих задач совпадают, а соответствующие собственные векторы связаны следующим образом :  x = D1z .

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

    int afe1r_c (real *a, real *b, real *d, integer *n, integer *
        ierr)

Параметры

a - вещественный вектор длины n, содержащий диагональные элементы исходной трехдиагональной матрицы T; на выходе из подпрограммы на соответствующих местах вектора a запоминаются вычисленные диагональные элементы матрицы H;
b - вещественный вектор длины n, в последних n - 1 компонентах которого содержатся наддиагональные элементы исходной трехдиагональной матрицы T; на выходе из подпрограммы на соответствующих местах вектора b запоминаются вычисленные наддиагональные элементы вещественной симметрической трехдиагональной матрицы H;
d - вещественный вектор длины n, содержащий диагональные элементы исходной диагональной матрицы D; на выходе из подпрограммы на соответствующих местах вектора d запоминаются вычисленные диагональные элементы матрицы D1;
n - заданный порядок исходных матриц T и D (тип: целый);
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
ierr=65 - если исходная диагональная матрица D не является положительно определенной.

Версии

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

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

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

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

  В подпрограмме afe1d_c параметры a, b, d должны иметь тип double.

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

int main(void)
{
    /* Initialized data */
    static float a[5] = { 1.f,2.f,2.f,2.f,1.f };
    static float b[5] = { 0.f,2.f,2.f,2.f,2.f };
    static float d__[5] = { 1.f,4.f,4.f,4.f,4.f };

    /* Local variables */
    static int ierr, i__;
    extern int afe1r_c(float *, float *, float *, int *, int *);

    afe1r_c(a, b, d__, &c__5, &ierr);

    for (i__ = 1; i__ <= 5; ++i__) {
        printf("\n  %15.7e \n", a[i__-1]);
    }
    for (i__ = 1; i__ <= 5; ++i__) {
        printf("\n  %15.7e \n", b[i__-1]);
    }
    for (i__ = 1; i__ <= 5; ++i__) {
        printf("\n  %15.7e \n", d__[i__-1]);
    }
    printf("\n  %5i \n", ierr);
    return 0;
} /* main */


Результаты:

      a      =   (1., 0.5, 0.5, 0.5, 0.25) ,
      b      =   (0., 1., 0.5, 0.5, 0.5) ,
      d__  =   (1., 0.5, 0.5, 0.5, 0.5) ,

      ierr  =  0 .