Текст подпрограммы и версий
aet2c_c.zip
Тексты тестовых примеров
taet2c_c.zip

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

Назначение

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

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

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

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

Уилкинсон Дж.Х. Алгебраическая проблема собственных значений. М.: "Наука", 1970.

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

    int aet2c_c (integer *nm, integer *n, integer *low, integer *
        igh, real *hr, real *hi, real *wr, real *wi, integer *ierr)

Параметры

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

Версии

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

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

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

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

  1. 

В подпрограмме aet2p_c паpаметpы hr, hi, wr, wi имеют тип double.

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

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

int main(void)
{
    /* Initialized data */
    static float hr[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 };
    static float hi[16]  /* was [4][4] */ = { 1.f,0.f,0.f,0.f,0.f,1.f,0.f,0.f,
                                            0.f,0.f,1.f,0.f,0.f,0.f,0.f,1.f };
    /* Local variables */
    static int ierr;
    extern int aet2c_c(int *, int *, int *, int *, float *, float *,
                       float *, float *, int *);
    static int i__, n;
    static float wi[4], wr[4];

    n = 4;
    aet2c_c(&n, &n, &c__1, &n, hr, hi, 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  =  (1., 1., 1., 1.)