Текст подпрограммы и версий afh3r_c.zip , afh3d_c.zip , afh3c_c.zip , afs3c_c.zip |
Тексты тестовых примеров tafh3r_c.zip , tafh3d_c.zip , tafh3c_c.zip , tafs3c_c.zip |
Треугольное разложение неособенной симметричной матрицы, заданной в компактной форме, с использованием метода квадратного корня.
Подпрограмма afh3r_c реализует разложение неособенной симметричной матрицы А, записанной в компактной форме, в произведение А = L*D*LТ, где L - нижняя треугольная матрица с единичными диагональными элементами, LТ - транспортированная к ней, а D - блочно - диагональная матрица с блоками порядка 1 или 2.
Вunch J.R., Рarlett В.N., Direct methods for solving symmetric indefinite systems of linear equations, siam J. Numer. Аnal., Vol.8, No.4, December 1971.
int afh3r_c (real *a, integer *n, integer *ir, real *r, integer *ierr)
Параметры
a - | вещественный вектор длины n * (n + 1) / 2, который содержит исходную матрицу, записанную в компактной форме; в процессе работы в массиве a накапливаются элементы матриц L и D (см. замечания по использованию); |
n - | порядок заданной матрицы a (тип: целый); |
ir - | целый вектор длины 2n, в первых n компонентах которого запоминаются перестановки диагональных элементов, в последних - порядки блоков матрицы D; |
r - | вещественный вектор длины n, используемый как рабочий; |
ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в процессе работы подпрограммы; при этом: |
ierr=65 - | если матрица является сингулярной. |
Версии
afh3d_c - | разложение неособенной симметричной матрицы с компактной формой представления методом квадратного корня с повышенной точностью. |
afh3c_c - | разложение неособенной эрмитовой матрицы с компактной формой представления методом квадратного корня; |
afs3c_c - | разложение неособенной симметричной комплексной матрицы с компактной формой представления методом квадратного корня. |
Вызываемые подпрограммы
utaf10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограмм afh3r_c, afh3c_c, afs3c_c . |
utaf11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограмм afh3d_c, afh3p_c. |
Замечания по использованию
1. |
Значения выходных матриц L и D помещаются в матрице A, причем Ai i = Di i ; Ai+1 i = Di+1 i , если Di+1 i ≠ 0 (в этом случае Li+1 i = 0) Ai+1 i = Li+1 i , если Di+1 i = 0 | |
2. |
Для подпрограммы afh3d_c параметры a, r должны иметь тип double. | |
3. | Для подпрограмм afh3c_c, afs3c_c параметр a имеет тип complex. |
int main(void) { /* Initialized data */ static float a[6] = { 1.f,.5f,-1.f,3.f,2.f,1.f }; /* Local variables */ static int ierr; extern int afh3r_c(float *, int *, int *, float *, int *); static int n, i__; static float r__[3]; static int ir[6]; n = 3; afh3r_c(a, &n, ir, r__, &ierr); for (i__ = 1; i__ <= 6; ++i__) { printf("\n %15.7e \n", a[i__-1]); } printf("\n %5i %5i %5i %5i %5i %5i \n", ir[0], ir[1], ir[2], ir[3], ir[4], ir[5]); printf("\n %5i \n", ierr); return 0; } /* main */ Результаты: a = (1., 3., 1., 0.69, -0.06, -1.22) , ir(4) = 2 , ir(5) = 0 , ir(6) = 1 , ierr = 0