double matrix::determinant() { // calculate the determinant of the matrix
//使用定义法计算行列式
//如果只有一个元素,则返回当前元素
if (n == 1) {
return values[0];
}
else {
//对第一行使用代数余子式的方式计算
double sub = 0;
for (int i = 0; i < n; i++) {
//初始化一个子矩阵
int *subMatrix = new int[(n - 1)*(n - 1)];
int index = 0;
for (int j = n; j < n*n; j++) {
int col = j % n;
if (col != i % n) {
subMatrix[index++] = values[j];
}
}
matrix subm(subMatrix, n - 1);
double result = subm.determinant();
sub += pow(-1, 2 + i)*result*values[i];
}
return sub;
}
}