|
Текст подпрограммы и версий adg0r_c.zip , adg0d_c.zip , adg0c_c.zip |
Тексты тестовых примеров tadg0r_c.zip , tadg0d_c.zip , tadg0c_c.zip |
Вычисление определителя матрицы методом Гаусса без выбора ведущего элемента.
Для матрица А вычисляется разложение вида А = L*U, где L, U - треугольные матрицы, матрица L имеет единичные диагональные элементы. Определитель матрицы А вычисляется как произведение диагональных элементов матрицы U и записывается в виде:
det A = D1*2D2 , где 0.0625 ≤ D1 < 1.
В.В.Воеводин, Р.В.Петрина, Комплекс алгоритмов, основанных на преобразованиях Гаусса, в пакете линейной алгебры, Сб. "Численный анализ на ФОPТPАНе", вып.3, Изд-во МГУ, 1973.
int adg0r_c (real *a, real *d1, integer *d2, integer *n)
Параметры
| a - | вещественный двумерный массив размера n на n, в котором задается исходная матрица; |
| d1 - | вещественная переменная, в которой запоминается мантисса определителя; |
| d2 - | целая переменная, в которой запоминается двоичный порядок определителя; |
| n - | заданный порядок исходной матрицы (тип: целый). |
Версии
| adg0d_c - | вычисление определителя матрицы, заданной с удвоенной точностью, методом Гаусса без выбора ведущего элемента. |
| adg0c_c - | вычисление определителя комплексной матрицы, методом Гаусса без выбора ведущего элемента. |
Вызываемые подпрограммы
| afg0r_c - | треугольное разложение матрицы методом Гаусса без выбора ведущего элемента. |
| afg0d_c - | треугольное разложение матрицы, заданной с удвоенной точностью, методом Гаусса без выбора ведущего элемента. |
| afg0c_c - | треугольное разложение комплексной матрицы методом Гаусса без выбора ведущего элемента. |
Замечания по использованию
| 1. |
В подпрограмме adg0d_c массив a и переменная d1 имеют тип double. | |
| 2. | В подпрограмме adg0c_c массив a и переменная d1 имеют тип complex. |
int main(void)
{
/* Initialized data */
static float a[9] /* was [3][3] */ = { -73.f,92.f,-80.f,78.f,66.f,37.f,
24.f,25.f,10.f };
/* Local variables */
extern int adg0r_c(float *, float *, int *, int *);
static int n;
static float d1;
static int d2;
n = 3;
adg0r_c(a, &d1, &d2, &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