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