Текст подпрограммы и версий 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.)