Посчитать обратную матрицу - C (СИ)
Формулировка задачи:
Посчитать обратную матрицу
Посчитать обратную матрицу для заданной матрицы A, если это возможно.
_________________________________________________________________________
На входе
В первой строке задано число m, количество строк и столбцов в матрице A, 0 < m ≤ 20. Следующие m строк содержат m целых чисел - элементов матрицы A._________________________________________________________________________
На выходе
Обратная матрица к A. Гарантируется, что обратная матрица также состоит из целых чисел (их и надо вывести). Если обратной матрицы не существует, выведите NONE._________________________________________________________________________
Пример
На входе
2 1 2 1 1На выходе
-1 2 1 -1Решение задачи: «Посчитать обратную матрицу»
textual
Листинг программы
#include<stdio.h>
int main()
{
int matrix[20][20], r,a;
int i, j, k, m;
scanf_s("%d", &m);
for(i = 0; i < m; i++)
{
for(j = 0; j < m; j++)
{
scanf_s("%i", &matrix[i][j]);
}
}
for(i = 0; i < m; i++)
{
for(j = m; j < 2*m; j++)
{
if(i == (j - m))
matrix[i][j] = 1;
else
matrix[i][j] = 0;
}
}
for(i = 0; i < m; i++)
{
for(j = 0; j < m; j++)
{
if(i != j)
{
r = matrix[j][i]/matrix[i][i];
for(k = 0; k < 2*m; k++)
{
matrix[j][k] -= r * matrix[i][k];
}
}
}
}
for(i = 0; i < m; i++)
{
a = matrix[i][i];
for(j = 0; j < 2*m; j++)
{
matrix[i][j] /= a;
}
}
for(i = 0; i < m; i++)
{
for(j = m; j < 2*m; j++)
{
printf("%i\t", matrix[i][j]);
}
printf("\n");
}
return 0;
}
Объяснение кода листинга программы
В этом коде посчитывается обратная матрица. Вот список, описывающий шаг за шагом:
- Ввод количества строк исходной матрицы (m).
- Ввод исходной матрицы (матрицы) с помощью двух вложенных циклов.
- Создание фиктивной диагонали для матрицы, где индексы соответствуют диагонали, а значения равны единице.
- Вычисление обратной матрицы с помощью метода Гаусса, используя два вложенных цикла.
- Вывод обратной матрицы на экран с помощью двух вложенных циклов.
- Конец программы.