Основы вычислительной математики. Денисова Э.В - 49 стр.

UptoLike

Составители: 

scanf("%d%d", &m, &n);
// Захватываем память под элементы матрицы
a = (double *) malloc(m * n * sizeof(double));
printf("Введите элементы матрицы:\n");
for (i = 0; i < m; ++i) {
for (j = 0; j < n; ++j) {
// Вводим элемент с индексами i, j
scanf("%lf", (a+i*n + j));
}
}
printf("Введите точность вычислений eps: ");
scanf("%lf", &eps);
// Вызываем метод Гаусса
rank = gaussMethod(m, n, a, eps);
// Печатаем ступенчатую матрицу
printf("Ступенчатый вид матрицы:\n");
for (i = 0; i < m; ++i) {
// Печатаем i-ю строку матрицы
for (j = 0; j < n; ++j) {
printf( // Формат %10.3lf означает 10
"%10.3lf ", // позиций на печать числа,
*(a+i*n + j) // 3 знака после точки
);
}
printf("\n"); // Перевести строку
}
// Печатаем
ранг матрицы
printf("Ранг матрицы = %d\n", rank);
if (m == n) {
// Для квадратной матрицы вычисляем и печатаем
// ее определитель
det = 1.0;
for (i = 0; i < m; ++i) {
det *= *(a+i*n + i);
}
printf("Определитель матрицы = %.3lf\n", det);
}
free(a); // Освобождаем память
return 0; // Успешное завершение программы
}
// Приведение вещественной матрицы
// к ступенчатому виду методом Гаусса с выбором
// максимального разрешающего элемента в столбце.
// Функция возвращает ранг матрицы
int gaussMethod(
int m, // Число строк матрицы
int n, // Число
столбцов матрицы
double *a, // Адрес массива элементов матрицы
double eps // Точность вычислений
) {
int i, j, k, l;
double r;
i = 0; j = 0;
while (i < m && j < n) {