了解特定函数矩阵的行列式

时间:2017-10-20 12:38:15

标签: c++ matrix determinants

我在互联网上找到了一个计算矩阵行列式的程序:

 /*
 * C++ Program to Find the Determinant of a Given Matrix
 */
#include<iostream>
#include<math.h>
#include<conio.h>
using namespace std;
double d = 0;
double det(int n, double mat[10][10])
{
    int c, subi, i, j, subj;
    double submat[10][10];  
    if (n == 2) 
    {
        return( (mat[0][0] * mat[1][1]) - (mat[1][0] * mat[0][1]));
    }
    else
    {  
        for(c = 0; c < n; c++)
        {  
            subi = 0;  
            for(i = 1; i < n; i++)
            {  
                subj = 0;
                for(j = 0; j < n; j++)
                {    
                    if (j == c)
                    {
                        continue;
                    }
                    submat[subi][subj] = mat[i][j];
                    subj++;
                }
                subi++;
            }
        d = d + (pow(-1 ,c) * mat[0][c] * det(n - 1 ,submat));
        }
    }
    return d;
}
int main()
{
    int n;
    cout<<"enter the order of matrix" ;
    cin>>n;
    double mat[10][10];
    int i, j;
    cout<<"enter the elements"<<endl;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cin>>mat[i][j];
        }
    }
    cout<<"\ndeterminant"<<det(n,mat);
    getch();
}

来源:http://www.sanfoundry.com/cpp-program-find-determinant-given-matrix/

我想从中学习,但我不明白。与高斯消除是否有任何联系?否则你知道哪个进程使用这个算法吗?

提前感谢任何能够帮助我的人

2 个答案:

答案 0 :(得分:0)

这是一种使用Lapace扩展的算法,它通过计算n x n subminors的n个决定因素来递归地计算(n-1) x (n-1)矩阵的行列式。 2 x 2矩阵的决定因素应该是显而易见的。

有更好的方法可以做到这一点,比如LU分解。

答案 1 :(得分:0)

程序使用递归函数创建子矩阵,并在子矩阵为2x2时计算行列式。

当程序具有子矩阵的行列式时,它总和并减去它,就像你在Wikipedia page上看到的关于行列式一样。

最后,递归函数返回完整矩阵的行列式。