Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/af_htm_c/afe1c_c.htm
Дата изменения: Wed Dec 2 13:03:28 2015 Дата индексирования: Sun Apr 10 01:22:04 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий afe1c_c.zip , afe1p_c.zip |
Тексты тестовых примеров tafe1c_c.zip , tafe1p_c.zip |
Одновременное приведение эрмитовой трехдиагональной и диагональной положительно определенной матриц двусторонним диагональным преобразованием соответственно к вещественной симметрической трехдиагональной и единичной матрицам.
Пусть Т - заданная эрмитова трехдиагональная матрица, D - диагональная положительно определенная матрица. Подпрограмма afe1c_c получает вещественную симметрическую трехдиагональную матрицу Н и диагональную матрицу D1, такие, что Н = D2ТD1 и D2DD1 = Е , где D2 - диагональная матрица.
Эта подпрограмма может быть использована для сведения обобщенной проблемы собственных значений вида Тx = λDx , где D > 0, к стандартной проблеме Нz = λz с вещественной симметрической трехдиагональной матрицей Н; при этом собственные значения этих задач совпадают, а соответствующие собственные векторы связаны следующим образом: x = D1z .
int afe1c_c (real *a, real *br, real *bi, real *d, real *fr, real *fi, integer *n, integer *ierr)
Параметры
a - | вещественный вектор длины n, содержащий диагональные элементы исходной трехдиагональной матрицы T; на выходе из подпрограммы на месте вектора a запоминаются вычисленные диагональные элементы матрицы H; |
br, bi - | вещественные векторы длины n, в последних n - 1 компонентах которых содержатся соответственно вещественные и мнимые части наддиагональных элементов исходной трехдиагональной матрицы T; на выходе из подпрограммы в последних n - 1 компонентах вектора br запоминаются вычисленные наддиагональные элементы трехдиагональной матрицы H; |
d - | вещественный вектор длины n, содержащий диагональные элементы исходной диагональной матрицы D; |
fr, fi - | вещественные векторы длины n, содержащие соответственно вещественные и мнимые части диагональных элементов диагональной матрицы перехода D1; |
n - | заданный порядок исходных матриц T и D (тип: целый); |
ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
ierr=65 - | если исходная диагональная матрица D не является положительно определенной. |
Версии
afe1p_c - | одновременное приведение эрмитовой трехдиагональной и диагональной положительно определенной матриц, заданных с двойной точностью, двусторонним диагональным преобразованием соответственно к вещественной симметрической трехдиагональной и единичной матрицам. |
Вызываемые подпрограммы
utaf12_c - | подпрограмма выдачи диагностических сообщений при работе подпрограмм afe1c_c и afe1p_c. |
Замечания по использованию
В подпрограмме afe1p_c параметры a, br, bi, d, fr, fi должны иметь тип double. |
int main(void) { /* Initialized data */ static float a[4] = { 4.f,4.f,4.f,4.f }; static float br[4] = { 0.f,0.f,-4.f,2.f }; static float bi[4] = { 0.f,2.f,0.f,2.f }; static float d__[4] = { 1.f,4.f,4.f,2.f }; /* Local variables */ static int ierr; extern int afe1c_c(float *, float *, float *, float *, float *, float *, int *, int *); static float fi[4], fr[4]; static int i__; afe1c_c(a, br, bi, d__, fr, fi, &c__4, &ierr); for (i__ = 1; i__ <= 4; ++i__) { printf("\n %15.7e \n", a[i__-1]); } for (i__ = 1; i__ <= 4; ++i__) { printf("\n %15.7e \n", br[i__-1]); } for (i__ = 1; i__ <= 4; ++i__) { printf("\n %15.7e \n", fr[i__-1]); } for (i__ = 1; i__ <= 4; ++i__) { printf("\n %15.7e \n", fi[i__-1]); } printf("\n %5i \n", ierr); return 0; } /* main */ Результаты: a = (4., 1., 1., 2.) , br = (0., 1., 1., 1.) , fr = (1., 0., 0., 0.5) , fi = (0., -0.5, 0.5, 0.5) , ierr = 0 .