C++ 中矩阵的行列式?

c++server side programmingprogramming

矩阵的行列式只能通过方阵计算,方法是将第一行余因子乘以相应余因子的行列式,然后以交替符号相加,得到最终结果。

$$A = \begin{bmatrix}a & b & c\d & e &f \g & h &i \ \end{bmatrix} |A| = a(ei-fh)-b(di-gf)+c(dh-eg)$$

首先,我们有 determinantOfMatrix(int mat[N][N], int dimension) 函数,该函数接受矩阵和矩阵的维度值。如果矩阵只有 1 维,则它返回 [0][0] 矩阵值。此条件也用作基本条件,因为我们以递归方式迭代矩阵,并在每次递归调用中减少维度。

int determinantOfMatrix(int mat[N][N], int dimension){
   int Det = 0;
   if (dimension == 1)
      return mat[0][0];

然后我们声明 cofactorMat[N][N],它将传递给 cofactor(int mat[N][N], int temp[N][N], int p, int q, int n) 函数,直到 firstRow 小于维度。矩阵的行列式存储在 Det 变量中,每次 for 循环迭代时符号交替。然后将此 det 返回到主函数并打印出来。

int cofactorMat[N][N];
int sign = 1;
for (int firstRow = 0; firstRow < dimension; firstRow++){
   cofactor(mat, cofactorMat, 0, firstRow, dimension);
   Det += sign * mat[0][firstRow] * determinantOfMatrix(cofactorMat, dimension - 1);
   sign = -sign;
}
   return Det;
}

cofactor(int mat[N][N], int temp[N][N], int p,int q, int n) 函数将矩阵、cofactor 矩阵、0、firstRow 值和矩阵的维度作为参数值。然后,嵌套的 for 循环帮助我们遍历矩阵,并且当 p 和 q 值分别不等于行和列值时,这些值存储在 temp 矩阵中。

void cofactor(int mat[N][N], int temp[N][N], int p,int q, int n){
   int i = 0, j = 0;
for (int row = 0; row < n; row++){
   for (int column = 0; column < n; column++){
      if (row != p && column != q){
         temp[i][j++] = mat[row][column];

一旦行填满,我们就增加行索引并重置列索引。

if (j == n - 1){
   j = 0;
   i++;
}

最后,我们有了 display(int mat[N][N], int row, int col),它接受矩阵以及行数和列数,并以 2d 数组的形式遍历矩阵,并在每一行和每一列上打印这些值。

void display(int mat[N][N], int row, int col){
   for (int i = 0; i < row; i++){
      for (int j = 0; j < col; j++)
         cout<<mat[i][j]<<&" &";;
         cout<<endl;
   }
   cout<<endl;
}

示例

让我们看看下面的实现来找到矩阵的行列式。

#include <iostream>
using namespace std;
const int N = 3;
void cofactor(int mat[N][N], int temp[N][N], int p,int q, int n){
   int i = 0, j = 0;
   for (int row = 0; row < n; row++){
      for (int column = 0; column < n; column++){
         if (row != p && column != q){
            temp[i][j++] = mat[row][column];
            if (j == n - 1){
                  j = 0;
                  i++;
            }
         }
      }
   }
}
int determinantOfMatrix(int mat[N][N], int dimension){
   int Det = 0;
   if (dimension == 1)
      return mat[0][0];
   int cofactorMat[N][N];
   int sign = 1;
   for (int firstRow = 0; firstRow < dimension; firstRow++){
      cofactor(mat, cofactorMat, 0, firstRow, dimension);
      Det += sign * mat[0][firstRow] * determinantOfMatrix(cofactorMat, dimension - 1);
      sign = -sign;
   }
   return Det;
}
void display(int mat[N][N], int row, int col){
   for (int i = 0; i < row; i++){
      for (int j = 0; j < col; j++)
         cout<<mat[i][j]<<" ";
         cout<<endl;
   }
   cout<<endl;
}
int main(){
   int mat[3][3] = {
      { 1, 0, 2},
      { 3, 0, 0},
      { 2, 1, 4}};
   cout<<"The matrix is "<<endl;
   display(mat,3,3);
   cout<<"Determinant of the matrix is "<<determinantOfMatrix(mat, N);
   return 0;
}

输出

上述代码将产生以下输出 −

The matrix is
1 0 2
3 0 0
2 1 4

Determinant of the matrix is 6

相关文章