|
Текст подпрограммы и версий aet2c_c.zip |
Тексты тестовых примеров taet2c_c.zip |
Вычисление всех собственных значений комплексной верхней матрицы Хессенберга 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.)