递归求解行列式

晚上朋友说写个行列式程序,就兴致勃勃地写了下来,给大家参考。
行列式:
行列式在数学中,是一个函数,其定义域为det的矩阵A,取值为一个标量,写作det(A)或 | A | 。
行列式的计算参见《线性代数》教材。
这里要强调的是:行列式所组成的矩阵必定是个方阵,也就是说其所成矩阵的行数等于列数。
除去化简行列式为上下三角行列式的方法之外,由行列式的手工朴素解法(模拟),易得求解行列式可以使用递归的方法来求解,将大矩阵不断分解为小矩阵来缩小其规模,最后逐层返回答案。

#include using namespace std; int determinant(int S,int a[][11]) {//传入参数,S代表当前行列式的阶数,a代表代数余子式所成矩阵 if(S == 2) { return a[1][1]*a[2][2]-a[2][1]*a[1][2]; //到达边界,如果当前阶数为2,那么主对角线乘积减去副对角线乘积即可return } int tmp[11][11],ans=0; //tmp用于储存代数余子式所成矩阵,ans就是最后要返回的结果 int row=1,col=1; for(int k=1; k<=S; k++) {//遍历第一行元素,这是第一个乘因子 for(int i=2; i<=S; i++) { for(int j=1; j<=S; j++) {//这两层循环用于求代数余子式所成矩阵 if(j==k)continue; //如果当前元素刚好是被“划”掉的,那么不做任何操作 else { tmp[row][col++]=a[i][j]; //构造tmp数组 if(col==S) {//如果到达行末了,记得换行,列数置1 col=1; row++; } } } } ans += ((k+1)%2==0? 1: -1)* a[1][k]*determinant(S-1,tmp); //控制正负,递归求解 row=col=1; //递归过程决定接下来要构造新矩阵,所以这里一定一定要记得置1 } return ans; //最后把答案返回 } int main() { int a[11][11]; int n; cin>>n; //输入行列式的阶数 for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { cin>>a[i][j]; //按顺序输入数据 } } cout<

运行实例:
【递归求解行列式】递归求解行列式
文章图片

upd: 只是需要计算或验证行列式的同学,你可以直接下载可执行程序食用。
exe可执行文件下载地址:
链接: https://pan.baidu.com/s/1lcQfDNWLskQMiuClg5HGpw 提取码: d8mm

    推荐阅读