|
Текст подпрограммы и версий adh3r_c.zip , adh3d_c.zip , adh3c_c.zip , ads3c_c.zip |
Тексты тестовых примеров tadh3r_c.zip , tadh3d_c.zip , tadh3c_c.zip , tads3c_c.zip |
Вычисление определителя симметричной матрицы, заданной в компактной форме, с использованием метода квадратного корня (метода Холецкого).
Симметричная матрица А, записанная в компактной форме, раскладывается в произведение А = L D LT, где L - треугольная матрица c единичными диагональными элементами, LT - транспонированная к ней, а D - блочнодиагональная матрица с блоками порядка 1 или 2. Определитель матрицы А вычисляется как определитель матрицы D и записывается в виде:
det A = D1*2D2 , где 0.0625 ≤ D1 < 1 .
Bunch J.R., Parlett B.N. Direct methods for solving symmetric indefinite systems of linear equations, siam J. Numer. Anal., v.8, No.4, 1971.
int adh3r_c (real *a, real *d1, integer *d2, integer *ri, real
*r__, integer *n)
Параметры
| a - | вещественный вектор длины n * (n + 1)/2, содержащий исходную матрицу, записанную в компактной форме; |
| d1 - | вещественная переменная, в которой запоминается мантисса определителя; |
| d2 - | целая переменная, в которой запоминается двоичный порядок определителя; |
| ir - | целый вектор длины 2n, в последних n компонентах которого запоминаются порядки блоков матрицы d; |
| r - | вещественный вектор длины n, используемый как рабочий; |
| n - | заданный порядок исходной матрицы (тип: целый). |
Версии
| adh3d_c - | вычисление определителя симметричной матрицы, заданной с удвоенной точностью в компактной форме, с использованием метода квадратного корня. |
| adh3c_c - | вычисление определителя эрмитовой матрицы, заданной в компактной форме, с использованием метода квадратного корня. |
| ads3c_c - | вычисление определителя симметричной комплексной матрицы, заданной в компактной форме, с использованием метода квадратного корня. |
Вызываемые подпрограммы
| afh3r_c - | треугольное разложение вещественной симметричной матрицы, заданной в компактной форме, с использованием метода квадратного корня (метода Холецкого). |
| afh3d_c - | треугольное разложение вещественной симметричной матрицы, заданной с удвоенной точностью в компактной форме, с использованием метода квадратного корня (метода Холецкого). |
| afh3c_c - | треугольное разложение неособенной эрмитовой матрицы с компактной формой представления методом квадратного корня. |
| afs3c_c - | треугольное разложение неособенной симметричной комплексной матрицы с компактной формой представления методом квадратного корня. |
Замечания по использованию
| 1. |
В подпрограмме adh3d_c массивы a, r и переменная d1 имеют тип double. | |
| 2. | В подпрограммах adh3c_c и ads3c_c массив a и переменная d1 имеют тип complex. |
int main(void)
{
/* Initialized data */
static float a[6] = { 1.f,.5f,-1.f,3.f,2.f,1.f };
/* Local variables */
extern int adh3r_c(float *, float *, int *, float *, float *, int *);
static int n;
static float r__[3], d1;
static int d2;
static float ri[6];
n = 3;
adh3r_c(a, &d1, &d2, ri, r__, &n);
printf("\n %16.7e \n",d1);
printf("\n %5i \n",d2);
return 0;
} /* main */
Результат:
d1 = 0.609375 , d2 = 4 ,
т.е. det A = 0.609375*24 = 9.75