|
Текст подпрограммы и версий adg1r_c.zip , adg1d_c.zip , adg1c_c.zip |
Тексты тестовых примеров tadg1r_c.zip , tadg1d_c.zip , tadg1c_c.zip |
Вычисление определителя матрицы методом Гаусса с выбором ведущего элемента по столбцу.
Для матрицы А выполняется разложение вида Q*А = L*U, где Q - матрица перестановок, L, U - треугольные матрицы и матрица L имеет единичные диагональные элементы. Определитель матрицы А вычисляется как произведение определителя матрицы Q и диагональных элементов матрицы U и записывается в виде:
det A = D1*2D2, где 0.0625 ≤ D1 < 1.
В.В.Воеводин, Р.В.Петрина, Комплекс алгоритмов, основанных на преобразованиях Гаусса, в пакете линейной алгебры, Сб. "Численный анализ на ФОPТPАНе", вып.3, Изд-во МГУ, 1973.
int adg1r_c (real *a, real *d1, integer *d2, integer *s,
integer *n)
Параметры
| a - | вещественный двумерный массив размера n на n, в котором задается исходная матрица; |
| d1 - | вещественная переменная, в которой запоминается мантисса определителя; |
| d2 - | целая переменная, в которой запоминается двоичный порядок определителя; |
| is - | целый вектор длины n, используемый как рабочий; |
| n - | заданный порядок исходной матрицы (тип: целый). |
Версии
| adg1d_c - | вычисление определителя матрицы, заданной с удвоенной точностью, методом Гаусса с выбором ведущего элемента по столбцу. |
| adg1c_c - | вычисление определителя комплексной матрицы C с выбором ведущего элемента по столбцу. |
Вызываемые подпрограммы
| afg1r_c - | треугольное разложение матрицы методом Гаусса с выбором ведущего элемента по столбцу. |
| afg1d_c - | треугольное разложение матрицы, заданной с удвоенной точностью, методом Гаусса с выбором ведущего элемента по столбцу. |
| afg1c_c - | треугольное разложение комплексной матрицы методом Гаусса с выбором ведущего элемента по столбцу. |
Замечания по использованию
| 1. |
В подпрограмме adg1d_c массив a и переменная d1 имеют тип double. | |
| 2. | В подпрограмме adg1c_c массив a и переменная d1 имеют тип complex. |
int main(void)
{
/* Initialized data */
static float a[16] /* was [4][4] */ = { 5.f,7.f,6.f,5.f,7.f,10.f,8.f,7.f,
6.f,8.f,10.f,9.f,5.f,7.f,9.f,10.f };
/* Local variables */
extern int adg1r_c(float *, float *, int *, float *, int *);
static int n;
static float s[4], d1;
static int d2;
n = 4;
adg1r_c(a, &d1, &d2, s, &n);
printf("\n %16.7e \n",d1);
printf("\n %5i \n",d2);
return 0;
} /* main */
Результат:
d1 = 0.0625, d2 = 4,
т.е. det a = 0.0625*24 = 1.