Нахождение обратной матрицы методом Гаусса - Жордана | Комплект 2

Опубликовано: 3 Декабря, 2021

Для данной матрицы задача состоит в том, чтобы найти обратную матрицу, используя метод Гаусса-Жордана.
Что такое матрица?

Матрица - это упорядоченный прямоугольный массив чисел.

С матрицей можно выполнять следующие операции : сложение, вычитание, умножение или транспонирование матрицы и т. Д.

Обратная матрица:

Дана квадратная матрица A, которая не является сингулярной (означает, что определитель A отличен от нуля); Тогда существует матрица

которая называется обратной к матрице A.
Инверсия матрицы возможна только при соблюдении следующих свойств:

  1. Матрица должна быть квадратной матрицей.
  2. Матрица должна быть невырожденной матрицей и,
  3. Существует матрица идентичности I, для которой

В общем, матрица A, обратная n X n, может быть найдена с помощью этой простой формулы:

где Adj (A) обозначает сопряженный элемент матрицы, а Det (A) - определитель матрицы A.

Методы поиска обратной матрицы:

Найти обратную матрицу 2 × 2 - простая задача, но найти обратную матрицу большего размера (например, 3 × 3, 4 × 4 и т. Д.) - сложная задача, поэтому можно использовать следующие методы:

  1. Операция с элементарной строкой (метод Гаусса-Жордана) (эффективный)
  2. Миноры, кофакторы и метод адъюгата (неэффективный)

Операция с элементарной строкой (метод Гаусса - Джордана):

Метод Гаусса-Жордана - это вариант метода исключения Гаусса, при котором выполняется операция сокращения строки для нахождения обратной матрицы.
Шаги, чтобы найти обратную матрицу с помощью метода Гаусса-Жордана:
Чтобы найти обратную матрицу, необходимо выполнить следующие шаги:

  1. Сформируйте расширенную матрицу с помощью единичной матрицы.
  2. Выполните операцию сокращения строк на этой расширенной матрице, чтобы сгенерировать эшелонированную форму матрицы с сокращенными строками.
  3. При необходимости над расширенной матрицей выполняются следующие операции со строками:
    • Поменяйте местами любые два ряда.
    • Умножьте каждый элемент строки на ненулевое целое число.
    • Замените строку суммой самой себя и постоянной кратной другой строки матрицы.

Пример:

  • Расширенная матрица формируется как A: B

  • После применения метода исключения Гаусса-Жордана:

Ниже приведена программа на C ++ для поиска обратной матрицы с помощью метода Гаусса-Жордана:

CPP

// C++ program to find the inverse of Matrix.
#include <iostream>
#include <vector>
using namespace std;
// Function to Print matrix.
void PrintMatrix( float ** ar, int n, int m)
{
for ( int i = 0; i < n; i++) {
for ( int j = 0; j < m; j++) {
cout << ar[i][j] << " " ;
}
printf ( " " );
}
return ;
}
// Function to Print inverse matrix
void PrintInverse( float ** ar, int n, int m)
{
for ( int i = 0; i < n; i++) {
for ( int j = n; j < m; j++) {
printf ( "%.3f " , ar[i][j]);
}
printf ( " " );
}
return ;
}
// Function to perform the inverse operation on the matrix.
void InverseOfMatrix( float ** matrix, int order)
{
// Matrix Declaration.
temp; float
// PrintMatrix function to print the element
// of the matrix.
printf ( "=== Matrix === " );
PrintMatrix(matrix, order, order);
// Create the augmented matrix
// Add the identity matrix
// of order at the end of original matrix.
for ( int i = 0; i < order; i++) {
for ( int j = 0; j < 2 * order; j++) {
// Add '1' at the diagonal places of
// the matrix to create a identity matirx
if (j == (i + order))
matrix[i][j] = 1;
}
}
// Interchange the row of matrix,
// interchanging of row will start from the last row
for ( int i = order - 1; i > 0; i--) {
// Swapping each and every element of the two rows
// if (matrix[i - 1][0] < matrix[i][0])
// for (int j = 0; j < 2 * order; j++) {
//
// // Swapping of the row, if above
// // condition satisfied.
// temp = matrix[i][j];
// matrix[i][j] = matrix[i - 1][j];
// matrix[i - 1][j] = temp;
// }
// Directly swapping the rows using pointers saves
// time
if (matrix[i - 1][0] < matrix[i][0]) {
float * temp = matrix[i];
matrix[i] = matrix[i - 1];
matrix[i - 1] = temp;
}
}
// Print matrix after interchange operations.
printf ( " === Augmented Matrix === " );
PrintMatrix(matrix, order, order * 2);
// Replace a row by sum of itself and a
// constant multiple of another row of the matrix
for ( int i = 0; i < order; i++) {
for ( int j = 0; j < order; j++) {
if (j != i) {
temp = matrix[j][i] / matrix[i][i];
for ( int k = 0; k < 2 * order; k++) {
matrix[j][k] -= matrix[i][k] * temp;
}
}
}
}
// Multiply each row by a nonzero integer.
// Divide row element by the diagonal element
for ( int i = 0; i < order; i++) {
temp = matrix[i][i];
for ( int j = 0; j < 2 * order; j++) {
matrix[i][j] = matrix[i][j] / temp;
}
}
// print the resultant Inverse matrix.
printf ( " === Inverse Matrix === " );
PrintInverse(matrix, order, 2 * order);
return ;
}
// Driver code
int main()
{
int order;
// Order of the matrix
// The matrix must be a square a matrix
order = 3;
/*
float matrix[20][20] = { { 5, 7, 9 },
{ 4, 3, 8 },
{ 7, 5, 6 },
{ 0 } };
*/
float ** matrix = new float *[20];
for ( int i = 0; i < 20; i++)
matrix[i] = new float [20];
matrix[0][0] = 5;
matrix[0][1] = 7;
matrix[0][2] = 9;
matrix[1][0] = 4;
matrix[1][1] = 3;
matrix[1][2] = 8;
matrix[2][0] = 7;
matrix[2][1] = 5;
matrix[2][2] = 6;
// Get the inverse of matrix
InverseOfMatrix(matrix, order);
return 0;
}
Выход:
 === Матрица ===
5 7 9  
4 3 8  
7 5 6  

=== Дополненная матрица ===
7 5 6 0 0 1  
5 7 9 1 0 0  
4 3 8 0 1 0  

=== Обратная матрица ===
-0,210 0,029 0,276  
0,305 -0,314 -0,038  
-0,010 0,229 -0,124





Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .