Текст подпрограммы и версий
afj0c_c.zip , afj0p_c.zip
Тексты тестовых примеров
tafj0c_c.zip , tafj0p_c.zip

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

Назначение

Приведение комплексной матрицы Якоби к симметрической трехдиагональной матрице преобразованием подобия.

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

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

Подпрограмма afj0c_c приводит матрицу Т к вещественной симметрической матрице Н преобразованием подобия Н = D - 1ТD , где D - комплексная диагональная матрица. При этом используются лишь внедиагональные элементы матрицы Т, т.к. диагональные элементы матриц Т и Н совпадают.

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

    int afj0c_c (real *br, real *bi, real *cr, real *ci,
            integer *n, integer *ierr)

Параметры

br, bi - вещественные векторы длины n, в последних n - 1 компонентах которых содержатся соответственно вещественные и мнимые части наддиагональных элементов исходной матрицы Якоби; на выходе подпрограммы в последних n - 1 компонентах вектора br запоминаются вычисленные наддиагональные элементы трехдиагональной матрицы H;
cr, ci - вещественные векторы длины n, в последних n - 1 компонентах которых содержатся соответственно вещественные и мнимые части поддиагональных элементов; на выходе подпрограммы в векторах cr и ci запоминаются соответственно вещественные и мнимые части вычисленных диагональных элементов диагональной матрицы D;
n - заданный порядок исходной матрицы Якоби (тип: целый);
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
ierr=66 - если не все попарные произведения соответствующих элементов побочных диагоналей исходной матрицы неотрицательны;
ierr=67 - если имеется равное нулю произведение соответствующих элементов побочных диагоналей, причем сомножители равны нулю неодновременно;
ierr=68 - если матрица H получена, но матрица преобразования D не вычислена, т.к. она или обратная к ней матрица алгоритмически вырождена.

Версии

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

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

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

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

  В подпрограмме afj0p_c параметры br, bi, cr, ci должны иметь тип double.

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

int main(void)
{
    /* Initialized data */
    static float br[4] = { 0.f,0.f,1.f,-4.f };
    static float ci[4] = { 0.f,1.f,8.f,0.f };
    static float bi[4] = { 0.f,-1.f,-1.f,0.f };
    static float cr[4] = { 0.f,0.f,8.f,-4.f };

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

    afj0c_c(br, bi, cr, ci, &c__4, &ierr);

    printf("\n %15.6e %15.6e %15.6e %15.6e \n",
               br[0], br[1], br[2], br[3]);
    printf("\n %15.6e %15.6e %15.6e %15.6e \n",
               cr[0], cr[1], cr[2], cr[3]);
    printf("\n %15.6e %15.6e %15.6e %15.6e \n",
               ci[0], ci[1], ci[2], ci[3]);
    printf("\n %5i \n", ierr);
    return 0;
} /* main */


Результаты:

      br  =   (0., 1., 4., 4.), 
      cr  =   (1., 0., -2., 2.), 
      ci  =   (0., 1., 2., -2.), 

      ierr  =  0