Написать программу для работы с матрицами, которая реализует сложение матриц, умножение матриц и указанную ниже операцию. Память под матрицы выделяется динамически указанным способом (нумерация способов соответствует нумерации, которая приводилась на лекции). Исходные матрицы читаются из файла, результирующие матрицы записываются в файл. Один файл содержит одну матрицу. Количество строк и столбцов матрицы указывается в первой строчке файла. Тестирование выполняется с помощью сравнения полученного результата с ожидаемым. При этом нужно помнить, что сравнивать вещественные числа на равенство можно только с заданной точностью. Имена файлов и выполняемая операция указывается через параметры командной строки.
- Метод Гаусса с выбором главного (ведущего) элемента по столбцу.
- Метод Гаусса с выбором главного (ведущего) элемента по строке.
- Метод Гаусса с выбором главного (ведущего) элемента по активной подматрице.
- Вычисление определителя с помощью разложения по строке. ✅
- Вычисление определителя с помощью разложения по столбцу.
- Вычисление обратной матрицы методом Гаусса.
- Вычисление обратной матрицы методом элементарных преобразований.
- Вычисление определителя методом Гаусса.
Пояснения к 6.
Обратная матрица ищется через решение системы Ax=f
с различными правыми частями. Правая часть последовательно пробегает значения столбцов e(j)
единичной матрицы E
, при этом для каждой из них найденное решение системы Ax=f
образует j-ый столбец искомой обратной матрицы.
Пояснения к 7.
К исходной матрице справа приписывается единичная матрица того же порядка: (A|E)
. С помощью элементарных преобразований строк и столбцов левая "половина" приводится к единичной, совершая одновременно точно такие же преобразования над правой матрицей.
Замечание. На практике метод Гаусса не используется без выбора главного элемента. Поэтому если не оговорено специально и в формулировке задания указан метод Гаусса, считайте, что это метод Гаусса с выбором главного элемента по столбцу.
Обычно используется следующий подход
if (fabs(a - b) <= eps * fmax(fabs(a), fabs(b))
{
// Числа равны с относительной точностью eps (0 < eps < 1)
}