|
Текст подпрограммы и версий adp8r_c.zip , adp8d_c.zip , adp8c_c.zip |
Тексты тестовых примеров tadp8r_c.zip , tadp8d_c.zip , tadp8c_c.zip |
Вычисление определителя матрицы на основе преобразований вращения.
Матрица А размера N на N с помощью преобразований вращения R21, R31, ..., RNN приводится к верхней треугольной матрице:
RNN ... R21*A = L .
Определитель матрицы А вычисляется как произведение диагональных элементов матрицы L и записывается в виде:
det A = D1*2D2, где 0.0625 ≤ D1 < 1.
В.В.Воеводин, Вычислительные основы линейной алгебры, М., "Наука", 1977.
int adp8r_c (real *a, real *d1, integer *d2, integer *n)
Параметры
| a - | вещественный двумерный массив размера n на n, в котором задается исходная матрица; |
| d1 - | вещественная переменная, в которой запоминается мантисса определителя; |
| d2 - | целая переменная, в которой запоминается двоичный порядок определителя; |
| n - | заданный порядок исходной матрицы (тип: целый). |
Версии
| adp8d_c - | вычисление определителя матрицы, заданной с удвоенной точностью, на основе преобразований вращения. |
| adp8c_c - | вычисление определителя комплексной матрицы на основе преобразования вращения. |
Вызываемые подпрограммы
| afp8r_c - | приведение прямоугольной матрицы к верхнему треугольному виду преобразованиями вращения. |
| afp8d_c - | приведение прямоугольной матрицы, заданной с удвоенной точностью, к верхнему треугольному виду преобразованиями вращения. |
| afp8c_c - | приведение комплексной прямоугольной матрицы к верхнему треугольному виду преобразованиями вращения. |
Замечания по использованию
| 1. |
В подпрограмме adp8d_c массив a и переменная d1 имеют тип double. | |
| 2. | В подпрограмме adp8c_c массив a и переменная d1 имеют тип complex. |
int main(void)
{
/* Initialized data */
static float a[9] /* was [3][3] */ = { .6f,.8f,0.f,.4f,2.2f,0.f,2.6f,
6.8f,.6f };
/* Local variables */
extern int adp8r_c(float *, float *, int *, int *);
static int n;
static float d1;
static int d2;
n = 3;
adp8r_c(a, &d1, &d2, &n);
printf("\n %16.7e \n",d1);
printf("\n %5i \n",d2);
return 0;
} /* main */
Результат:
d1 = 0.6, d2 = 0,
т.е. det a = 0.6*20 = 0.6