0
我有了下面的方法寻找小矩阵
private Matrix matrixMinors()
{
double[][] matrixM = new double[matrix.length][matrix.length];
for(int i = 0; i < matrixM.length; i++)
for(int j = 0; j < matrixM.length; j++)
{
double[][] newone = new double[matrixM.length - 1][matrixM.length - 1];
for(int k = 0; k < newone.length; k++)
for(int h = 0; h < newone[0].length; h++)
if(k == i)
;
else if(h == j)
;
else
newone[k][h] = matrix[k][h];
test(newone, "little matrix"); //this just prints the matrix for debugging purposes
matrixM[i][j] = determinant(newone, newone.length);
}
test(matrixM, "minor matrix"); //this just prints the matrix for debugging purposes
return new Matrix(matrixM);
}
当打印较小的矩阵矩阵类具有全部为零,任何建议如何解决此问题。
更新:
我的判定方法只保留打印零,但我不知道,如果这只是因为我给它的数据使得零决定还是我的代码是错误的。
private double determinant(double[][] mat, int size)
{
double det = 0;
if(size == 1)
det = mat[0][0];
else if (size == 2)
det = mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1];
else
{
for(int j1 = 0; j1 < size; j1++)
{
double[][] m = new double[size-1][];
for(int k = 0; k < (size-1); k++)
m[k] = new double[size-1];
for(int i = 1; i < size; i++)
{
int j2 = 0;
for(int j = 0; j < size; j++)
{
if(j == j1)
continue;
m[i-1][j2] = mat[i][j];
j2++;
}
}
det += Math.pow(-1.0, 1.0 + j1 + 1.0) * mat[0][j1] * determinant(m, size - 1);
}
}
return det;
}
我替换了我的if else,但仍然打印出相同的结果。 – Jacob
测试正在打印,但不是4次喜欢它,通常只有一次或两次。对于我的行列式,请参阅我的更新问题 – Jacob
newone不像预期的那样简单地按照矩阵double [] []矩阵= {{3,0,2},{2,0,2},{0,1, 1}};新的第一次迭代应该是{{0,-2},{1,1}}。但它只是显示为零 – Jacob