Текст подпрограммы и версий
aet2r_c.zip , aet2d_c.zip
Тексты тестовых примеров
taet2r_c.zip , taet2d_c.zip

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

Назначение

Вычисление всех собственных значений вещественной верхней матрицы Хессенберга QR - алгоpитмом с двойным сдвигом.

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

Подпрограмма aet2r_c вычисляет собственные значения вещественной верхней матрицы Хессенберга с помощью QR - алгоpитма с двойным сдвигом.

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

Для расщепления текущей матрицы на матрицу более низкого порядка перед каждой двухшаговой итерацией производится выявление малых поддиагональных элементов или двух подряд идущих поддиагональных элементов, произведение которых мало.

Предполагается, что матрица была предварительно промасштабирована с помощью подпрограммы amb1r_c.

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

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

    int aet2r_c (integer *nm, integer *n, integer *low, integer *
        igh, real *h, real *wr, real *wi, integer *ierr)

Параметры

nm - число строк двумерного массива h, указанное при описании этого массива в вызывающей подпрограмме (тип: целый);
n - порядок исходной матрицы Хессенберга, n ≤ nm (тип: целый);
      low -
      igh  
исходные параметры подпрограммы amb1r_c (тип: целый); если исходная матрица не масштабировалась, то можно взять low = 1, igh = n;
h - вещественный двумерный массив размерности nm на n, содержащий в своих первых n строках исходную матрицу Хессенберга;
wr, wi - вещественные векторы длины n, содержащие собственно действительные и мнимые части вычисленных собственных значений;
ierr - целочисленная переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; ierr полагается равным индексу собственного значения, для вычисления которого требуется более 30 итераций, при этом собственные значения с индексами ierr + 1, ierr + 2, ..., n вычислены правильно; ierr = 0, если вычислены все собственные значения.

Версии

aet2d_c - вычисление всех собственных значений вещественной верхней матрицы Хессенберга, заданной с двойной точностью, QR - алгоpитмом с двойным сдвигом.

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

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

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

  1. 

В подпрограмме aet2d_c параметры h, wr, wi имеют тип double.

  2.  Подпрограмма aet2r_c (aet2d_c) не сохраняет исходную матрицу.

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

int main(void)
{
    /* Initialized data */
    static float a[16]   /* was [4][4] */ = { 4.f,3.f,0.f,0.f,-2.f,-3.f,2.f,
                                     0.f,-2.f,-6.f,6.f,1.f,2.f,6.f,-2.f,3.f };
    /* Local variables */
    static int ierr, i__;
    extern int aet2r_c(int *, int *, int *, int *, float *, float *,
                       float *, int *);
    static float wi[4], wr[4];

    aet2r_c(&c__4, &c__4, &c__1, &c__4, a, wr, wi, &ierr);

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


Результаты:

       ierr  =  0
       wr  =  (1., 2., 3., 4.)
       wi  =  (0., 0., 0., 0.)