【问题标题】:Finding the determinant of a matrix找到矩阵的行列式
【发布时间】:2021-03-08 03:14:16
【问题描述】:

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

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);

我不确定这是否是解决此问题的正确方法,或者我的代码中是否存在一些错误。非常感谢任何帮助。

【问题讨论】:

    标签: java arrays matrix sub-array


    【解决方案1】:

    here 所述,计算 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

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      相关资源
      最近更新 更多