使用高斯-约旦法在C++中求矩阵的逆
在这个问题中,我们给定一个二维矩阵mat[][]。我们的任务是 *使用高斯-约旦法求矩阵的逆*。
现在,让我们了解问题的基础知识:
**矩阵** 是一个二维数字数组。
示例
$\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中求得的增广矩阵进行行化简运算,求矩阵的阶梯形。
在此过程中,可以对增广矩阵执行以下操作:
**行交换**(可以交换任意两行)
**乘法**(行的每个元素都可以乘以一个非零常数)。
行替换(用行与另一行的常数倍的和替换该行)。
示例
程序说明我们解决方案的工作原理
#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
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP