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