繁体   English   中英

我的C ++代码出现错误! &如何在c ++中找到矩阵的行列式和逆矩阵?

[英]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) s1rc从未使用过,可以删除。

8)返回值应为det

注意:该算法的时间复杂度称为Laplace Expansion ,为O(n!) (请参见此处 )。 如果要将其用于生产代码,强烈建议使用基于矩阵分解的更有效算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM