C++中矩阵的行列式?

矩阵的行列式只能通过将第一行辅因子乘以相应辅因子的行列式并用交替符号相加得到最终结果来计算方阵。

$$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) 函数,它接受矩阵和矩阵的维度值。如果矩阵只有一维,则它返回 [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) 函数将矩阵、辅因子矩阵、0、firstRow 值和矩阵的维度作为参数值。嵌套的 for 循环然后帮助我们迭代矩阵,并且 p & q 值分别不等于行和列值,这些值存储在临时矩阵中。

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),它采用矩阵和行数和列数,并将矩阵作为二维数组进行迭代,并在每一行和每一列上打印这些值。

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<<"矩阵是 "<<endl;

   display(mat,3,3);

   cout<<"Determinant of 矩阵是 "<<determinantOfMatrix(mat, N);

   return 0;

}

输出结果

上面的代码将产生以下输出 -

矩阵是

1 0 2

3 0 0

2 1 4

Determinant of 矩阵是 6

以上是 C++中矩阵的行列式? 的全部内容, 来源链接: utcz.com/z/359535.html

回到顶部