使用 C++ 中的高斯-乔丹法求矩阵的逆
c++server side programmingprogramming更新于 2025/3/15 11:52:17
在这个问题中,我们给出了一个二维矩阵 mat[][。我们的任务是使用高斯-乔丹法求矩阵的逆。
现在,让我们了解问题的基本原理,
MATRIX 是一个二维数字数组。
示例
$\begin{bmatrix}2&5&4 \1&6&7 \9&3&8\end{bmatrix}$
矩阵 [A-1] 的逆 −
这是对方阵执行的运算。以下是矩阵具有逆矩阵 − 所需的属性
初始矩阵应为方阵。
它必须是非奇异矩阵。
对于矩阵 A,存在一个单位矩阵 I,并且
$$AA^{-1} = A^{-1}.A = I$$
有一个公式可用于求给定矩阵的逆矩阵。它是
$A^{-1}\:=\:\left(\frac{adj(A)}{\det(A)}\right)$
adj(A) 是矩阵 A 的伴随矩阵
det(A) 是矩阵 A 的行列式。
使用 可以找到矩阵的逆矩阵,方法有很多种。在本文中,我们将学习高斯-乔丹方法,也称为基本行运算。
这是一种逐步查找矩阵逆的方法,以下是所涉及的步骤−
使用单位矩阵查找增广矩阵。
通过对步骤 1 中找到的增广矩阵执行行减少操作来查找矩阵的梯形。
在此过程中可以对增广矩阵执行的一些操作是
行交换(您可以交换任意两行)
乘法(行的每个元素都可以乘以 0 以外的常数值)。
行交换(用行与矩阵另一行的常数倍数之和替换行)。
示例
程序用于说明我们的解决方案的工作原理
#include <iostream> #include <vector> using namespace std; void printMatrixValues(float** arr, int n, int m){ for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout<<arr[i][j]<<"\t"; } cout<<endl; } return; } void printInverseMatrix(float** arr, int n, int m){ for (int i = 0; i < n; i++) { for (int j = n; j < m; j++) { printf("%.3f\t", arr[i][j]); } cout<<endl; } return; } void findInvMatGaussJordan(float** mat, int order){ float temp; printf("The inverse of matrix : A = \n"); printMatrixValues(mat, order, order); for (int i = 0; i < order; i++) { for (int j = 0; j < 2 * order; j++) { if (j == (i + order)) mat[i][j] = 1; } } for (int i = order - 1; i > 0; i--) { if (mat[i - 1][0] < mat[i][0]) { float* temp = mat[i]; mat[i] = mat[i - 1]; mat[i - 1] = temp; } } for (int i = 0; i < order; i++) { for (int j = 0; j < order; j++) { if (j != i) { temp = mat[j][i] / mat[i][i]; for (int k = 0; k < 2 * order; k++) { mat[j][k] -= mat[i][k] * temp; } } } } for (int i = 0; i < order; i++) { temp = mat[i][i]; for (int j = 0; j < 2 * order; j++) { mat[i][j] = mat[i][j] / temp; } } cout<<"A' =\n"; printInverseMatrix(mat, order, 2 * order); return; } int main(){ int order = 3; float** mat = new float*[20]; for (int i = 0; i < 20; i++) mat[i] = new float[20]; mat[0][0] = 6; mat[0][1] = 9; mat[0][2] = 5; mat[1][0] = 8; mat[1][1] = 3; mat[1][2] = 2; mat[2][0] = 1; mat[2][1] = 4; mat[2][2] = 7; findInvMatGaussJordan(mat, order); return 0; }
输出
The inverse of matrix : A = 6 9 5 8 3 2 1 4 7 A' = -0.049 0.163 -0.011 0.205 -0.141 -0.106 -0.110 0.057 0.205