求矩阵的行列式

1tuwyuhd  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(322)

我正在写一个程序,我必须写一个方法来找到一个矩阵的行列式,我遇到了一些麻烦。这就是我目前所拥有的。

public Matrix determinant() {
Matrix determinantM = new Matrix(this.rows, this.columns);
for(int r = 0; r < 3; r++) {
    for (int c = 0; c < 3; c++) {
        determinantM.data[r][c] = this.data[r][c];
    }
}
Matrix x = (determinantM.data[1][1] * determinantM.data[2][2]) - (determinantM.data[2][1] * determinantM.data[1][2]);
Matrix y = (determinantM.data[1][0] * determinantM.data[2][2]) - (determinantM.data[2][0] * determinantM.data[1][2]);
Matrix z = (determinantM.data[1][0] * determinantM.data[2][1]) - (determinantM.data[2][0] * determinantM.data[1][1]);

Matrix newD = (determinantM.data[0][0] * x) - (determinantM.data[0][1] * y) + (determinantM.data[0][2] * 2);
return newD;
}

这就是我从main给它起的名字

Matrix z = new Matrix(new double[][]{{1, 2, 3},{0, 4, 5},{1, 0, 6}});
    Matrix v = z.determinant();
    System.out.println("v:\n" + v);

我不确定这是解决这个问题的正确方法,还是我的代码中有一些错误。我真的很感激任何帮助。

ruoxqz4g

ruoxqz4g1#

如下所述,计算3x3矩阵的行列式,如:

a b c
d e f
g h i

决定因素是:

|A| = a(ei − fh) − b(di − fg) + c(dh − eg)

因此,这部分代码:

Matrix x = (determinantM.data[1][1] * determinantM.data[2][2]) - (determinantM.data[2][1] * determinantM.data[1][2]);
    Matrix y = (determinantM.data[1][0] * determinantM.data[2][2]) - (determinantM.data[2][0] * determinantM.data[1][2]);
    Matrix z = (determinantM.data[1][0] * determinantM.data[2][1]) - (determinantM.data[2][0] * determinantM.data[1][1]);

实际上应该是:

double x=(determinantM.data[0][0] * (determinantM.data[1][1] * determinantM.data[2][2] – determinantM.data[1][2] * determinantM.data[2][1]));
double y=(determinantM.data[0][1] * (determinantM.data[1][0] * determinantM.data[2][2] – determinantM.data[1][2] * determinantM.data[2][0]));
double z=(determinantM.data[0][2] * (determinantM.data[1][0] * determinantM.data[2][1] – determinantM.data[1][1] * determinantM.data[2][0]));

那么决定就是 x - y + z ;
所以最后的方法应该是:

public double determinant() {
     double x=(determinantM.data[0][0] * (determinantM.data[1][1] * determinantM.data[2][2] – determinantM.data[1][2] * determinantM.data[2][1]));
     double y=(determinantM.data[0][1] * (determinantM.data[1][0] * determinantM.data[2][2] – determinantM.data[1][2] * determinantM.data[2][0]));
     double z=(determinantM.data[0][2] * (determinantM.data[1][0] * determinantM.data[2][1] – determinantM.data[1][1] * determinantM.data[2][0]));

     return x - y + z;
 }

因为您没有修改原始矩阵,所以不需要对其进行复制。
这段代码自然,只适用于矩阵 3x3 .

相关问题