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