[英]I'm getting error in my c++ code! & How to find determinant and inverse of matrix in c++?
我正在尝试制作矩阵计算器。 在其中,我几乎完成了矩阵所需的所有操作。 因此,现在我正尝试编写代码来查找矩阵的行列式和逆,但是我收到如下错误:- “ int”类型的参数与“ double(*)[100]”类型的参数不兼容
我正在使用Visual Studio 2019。 int dat(int n, double mat[100][100]) //function { Matrix s1; double det = 0; int p, r, c, subi, i, j, subj; int submat[10][10]; s1.getmatrix1(); r = c = n; if (n == 2) return((mat[0][0] * mat[1][1]) * (mat[1][0] * mat[0][1])); else { for (p = 0; p < n; p++) { subi = 0; for (i = 0; i < n; i++) { subj = 0; for (j = 0; j < n; j++) { if (j == c) continue; submat[subi][subj] = mat[i][j]; subj++; } subi++; } det = det + (pow(-1, p) * mat[0][p] * dat(n - 1, submat[i][j])); //here at 'submat' i'm getting that error. } } return 0; };
您正在将submat的第(i,j)个元素传递给dat()。
submat [i] [j]是一个int。 但是dat()函数需要一个二维双精度数组(第二维为100,因此即使将其替换为
dat(n-1, submat)
不会是正确的
除了编译错误外,您的代码还有几个问题。
1)由于dat
期望第二个参数是一个数组,因此函数调用应为:
det = det + (pow(-1, p) * mat[0][p] * dat(n - 1, submat));
2)2x2矩阵的行列式应计算如下:
return((mat[0][0] * mat[1][1]) - (mat[1][0] * mat[0][1]));
3) int submat[10][10]
应该是double submat[100][100]
因为它必须能够(几乎)包含与mat
一样多的元素,并且应该存储相同的数据类型。
4)返回值应该是double
而不是int
。
5) if (j == c)
应该是if (j == p)
因为p
是我们要排除的行/列。
6) i
循环应该从1开始,因为我们不在子矩阵中包括第一行/列。
7) s1
, r
和c
从未使用过,可以删除。
8)返回值应为det
注意:该算法的时间复杂度称为Laplace Expansion ,为O(n!)
(请参见此处 )。 如果要将其用于生产代码,强烈建议使用基于矩阵分解的更有效算法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.