Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/ae_htm_c/aet2r_c.htm
Дата изменения: Wed Dec 2 10:54:34 2015 Дата индексирования: Sun Apr 10 02:58:09 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий aet2r_c.zip , aet2d_c.zip |
Тексты тестовых примеров taet2r_c.zip , taet2d_c.zip |
Вычисление всех собственных значений вещественной верхней матрицы Хессенберга QR - алгоpитмом с двойным сдвигом.
Подпрограмма aet2r_c вычисляет собственные значения вещественной верхней матрицы Хессенберга с помощью QR - алгоpитма с двойным сдвигом.
В качестве сдвигов используются собственные значения подматрицы размерности 2 на 2, расположенной в нижнем углу текущей матрицы.
Для расщепления текущей матрицы на матрицу более низкого порядка перед каждой двухшаговой итерацией производится выявление малых поддиагональных элементов или двух подряд идущих поддиагональных элементов, произведение которых мало.
Предполагается, что матрица была предварительно промасштабирована с помощью подпрограммы amb1r_c.
Уилкинсон, Райнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра. М.: "Машиностроение", 1976.
int aet2r_c (integer *nm, integer *n, integer *low, integer * igh, real *h, real *wr, real *wi, integer *ierr)
Параметры
nm - | число строк двумерного массива h, указанное при описании этого массива в вызывающей подпрограмме (тип: целый); |
n - | порядок исходной матрицы Хессенберга, n ≤ nm (тип: целый); |
low - igh | исходные параметры подпрограммы amb1r_c (тип: целый); если исходная матрица не масштабировалась, то можно взять low = 1, igh = n; |
h - | вещественный двумерный массив размерности nm на n, содержащий в своих первых n строках исходную матрицу Хессенберга; |
wr, wi - | вещественные векторы длины n, содержащие собственно действительные и мнимые части вычисленных собственных значений; |
ierr - | целочисленная переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; ierr полагается равным индексу собственного значения, для вычисления которого требуется более 30 итераций, при этом собственные значения с индексами ierr + 1, ierr + 2, ..., n вычислены правильно; ierr = 0, если вычислены все собственные значения. |
Версии
aet2d_c - | вычисление всех собственных значений вещественной верхней матрицы Хессенберга, заданной с двойной точностью, QR - алгоpитмом с двойным сдвигом. |
Вызываемые подпрограммы
utae12_c - | подпрограмма выдачи диагностических сообщений при работе подпрограмм aet2r_c и aet2d_c. |
Замечания по использованию
1. |
В подпрограмме aet2d_c параметры h, wr, wi имеют тип double. | |
2. | Подпрограмма aet2r_c (aet2d_c) не сохраняет исходную матрицу. |
int main(void) { /* Initialized data */ static float a[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 }; /* Local variables */ static int ierr, i__; extern int aet2r_c(int *, int *, int *, int *, float *, float *, float *, int *); static float wi[4], wr[4]; aet2r_c(&c__4, &c__4, &c__1, &c__4, a, 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 = (0., 0., 0., 0.)