[C++] 计算行列式的若干种方法

测试样例

10
1 3 4 0 2 0 4 -5 9 3
6 7 8 5 2 7 8 4 6 2
8 7 6 9 8 7 6 8 45 2
4 3 2 5 4 3 2 8 6 4
1 2 0 4 1 2 3 9 87 6
5 6 7 8 5 6 8 6 8 1
9 8 7 6 9 8 7 -9 2 3
5 6 3 5 4 1 8 7 9 2
-9 8 6 2 4 56 6 3 8 9
5 3 6 8 6 6 1 8 2 3
答案:7583304

按行(列)展开法

d e t ( A n ∗ n ) = ∑ j = 1 n a i j A i j , ( i = 1 , 2 , . . . , n ) det(A_{n*n}) = \sum\limits_{j=1}^na_{ij}A_{ij},(i=1,2,...,n) det(Ann)=j=1naijAij,(i=1,2,...,n)

d e t ( A n ∗ n ) = ∑ i = 1 n a i j A i j , ( j = 1 , 2 , . . . , n ) det(A_{n*n}) = \sum\limits_{i=1}^na_{ij}A_{ij},(j=1,2,...,n) det(Ann)=i=1naijAij,(j=1,2,...,n)

#include <iostream>
#include <fstream>
using namespace std;
//构造第一行第line个元素的余子式
void StructMinor(double* matrix, int dimension, int line, double* minor){
   
	int ptr=0;
	for(int cnt1=1; cnt1<dimension; cnt1++) for(int cnt2=0; cnt2<dimension; cnt2++)
		if(line!=cnt2) minor[ptr++] = matrix[cnt1*dimension+cnt2];
	return;
}
double Determinant(double* matrix, int dimension){
   
	//递归基,当矩阵中只有一个元素的时候,行列式的值即为实数值
	if(dimension <= 1) return *matrix;
	double minor[(dimension-1)*(dimension-1)];
	double determinant = 0;
	int sign = 1;
	for(int cnt=0; cnt<dimension; cnt++){
   
		//构造matrix[0][cnt]的余子式
		StructMinor(matrix, dimension, cnt, minor);
		//determinant=ΣELEMENT0j*A0j
		determinant += sign*matrix[cnt]*Determinant(minor, dimension-1);
		sign *= -1;
	}
	return determinant;
}
int main(){
   
	int dimension;
	int scale;
	double matrix[100
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值