Подпрограмма: 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