我的方法不起作用?有什么问题吗

kd3sttzy  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(342)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
下面的代码是我的“消除方法”,它是关于高斯算法。我很难理解为什么我的消除方法不起作用。另外两个(pivotisiere意思是pivoting,loese意思是solve methods)工作得非常好。我一直坐在这里试图编码一整天,但没有找到一个解决方案,如果有任何形式的帮助会很高兴。
该方法的工作原理:矩阵对角线下的数字需要转换成“0”,与0(包括向量)在同一行的其余数字也需要相应地转换。

2ic8powd

2ic8powd1#

如果我使用lcm(最小公倍数)来计算因子,我得到的结果仍然是正确的(还有整数!!!)但与测试用例相比仍相差2倍:

lcm(26,6) = 78

78/6 = 13
78/26 = 3

然后我得到

13*16 - 3*46 = 70
13*186 - 3*386 = 1260

与预期的完全相同,但相差2倍。根据测试用例的编写方式,这可能会通过或不通过。
在任何情况下,我认为重要的是在这里使用整数数学,并确保没有四舍五入发生。
因此,我想到,如果用26*6代替lcm,系数2可以计算出来:

26*6 = 156

156/6 = 23 (obviously)
156/26 = 6 (obviously)

然后我得到

26*16 - 6*46 = 140
26*186 - 6*386 = 2520

换句话说,你只需要做,而不是:

matrix[i][j] -= faktor * matrix[position][j];

matrix[i][j] = matrix[i][j]*matrix[position][position] - matrix[i][position]*matrix[position][j];

测试用例失败是因为你盲目地使用浮点数学,而没有考虑到你必须处理整数的事实。

sczxawaw

sczxawaw2#

我无法解决你的问题,但你的代码中有一些逻辑错误。您没有使用数组的给定参数在数组矩阵上迭代。看看如何正确地执行,在我的示例方法printmatrix中。
例如,您的代码从不使用变量z。
还有一种更简单的方法来初始化多维数组。请看一下我的示例方法getexamplea和getexampleb。

package test;

public class Static {
    public static long[][] getExampleA() {
        long[][] matrix = new long [3][3];
        matrix[0][0] = 7; matrix[0][1] = 17; matrix[0][2] = 29;
        matrix[1][0] = 0; matrix[1][1] = -26; matrix[1][2] = -46;
        matrix[2][0] = 0; matrix[2][1] = -6; matrix[2][2] = -16;
        return matrix;
    }

    public static long[][] getExampleB() {
        long[][] matrix = {{7, 17, 29}, {0, -26, -46}, {0, -6, -16}};
        return matrix;
    }

    public static void printMatrix(long[][] matrix) {
        for(int i = 0; i < matrix.length; i++) {
            for(int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println("");
        }
        System.out.println("");
    }

    public static void main(String[] args) {
        printMatrix(getExampleA());
        printMatrix(getExampleB());
    }
}

相关问题