C++ I';我的c+中出现错误+;密码&;如何在c+中求矩阵的行列式和逆+;?
我在试着做矩阵计算器。在其中,我几乎完成了矩阵中要求的所有操作。所以现在我试图编写代码来寻找矩阵的行列式和逆,但我得到的错误是:-类型为“int”的参数与类型为“double(*)[100]”的参数不兼容。 我正在使用VisualStudio2019。C++ I';我的c+中出现错误+;密码&;如何在c+中求矩阵的行列式和逆+;?,c++,matrix,calculator,inverse,C++,Matrix,Calculator,Inverse,我在试着做矩阵计算器。在其中,我几乎完成了矩阵中要求的所有操作。所以现在我试图编写代码来寻找矩阵的行列式和逆,但我得到的错误是:-类型为“int”的参数与类型为“double(*)[100]”的参数不兼容。 我正在使用VisualStudio2019。 int dat(int n, double mat[100][100]) //function { Matrix s1; double det = 0; int p, r, c, subi, i, j, subj;
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;
};
int-dat(int-n,双垫[100][100])//函数
{
矩阵s1;
双det=0;
int p,r,c,subi,i,j,subc;
int submat[10][10];
s1.getmatrix1();
r=c=n;
如果(n==2)
返回((mat[0][0]*mat[1][1])*(mat[1][0]*mat[0][1]);
其他的
{
对于(p=0;p
您正在将submat的第(i,j)个元素传递给dat()
submat[i][j]是一个int。但是dat()函数需要一个2-d的double数组(第二个维度是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
注:此算法的时间复杂度称为
O(n!)
(请参阅)。如果您想将其用于生产代码,我强烈建议您使用基于矩阵分解的更高效算法。错误消息有什么不清楚的?显然,不能将int
传递给需要double(*)[100]
的函数。