矩阵计算不起作用......非常奇怪的输出Java

时间:2014-04-11 02:00:17

标签: java math matrix

当A是 square 矩阵时,这就是我想要做的。

P - 是力量。 A& B是方形矩阵。

将要求用户输入矩阵A的大小,矩阵A的元素以及他们想要将矩阵提升到的功率。 一旦他们输入了什么样的力量,以及我的程序应该计算出什么元素: (假设P = 5)

A ^ 5 + A ^ 4 + A ^ 3 + A ^ 2 + A

我编写了一种方法,可以为矩阵添加一个将它们相乘的方法,以及一种将它们提升为幂的方法,它们都能正常工作。

我遇到的问题是我在上面显示的最后一步 A ^ 5 + A ^ 4 + A ^ 3 ...

这就是问题变得更加怪异的地方,我的程序在矩阵中的元素都相同时工作......这样一个

2 2 2
2 2 2
2 2 2

矩阵会给我CORRECT输出,但是

1 2 3
4 5 6
7 8 9

矩阵会给我错误输出,我不知道为什么。

这是发生问题的方法

public static void addPowers(int [][] a, int[][] b, int p) {
    while( p != 1){
        b = addMatrices(powerMatrix(a,p), b)  ;
        addPowers(a,b,p-1) ;
        return ;
    }
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) 
                System.out.print(b[i][j] + "\t") ;
                System.out.println();
        }

}

以防万一你问,因为我在一个while循环中有递归,所以它不会一遍又一遍地打印。

感谢您的时间! :)

编辑:更多澄清信息。 addMatrices是一种使用两个int [] []参数添加矩阵的方法。 powerMatrix是一种使用(int [] [],int)参数查找矩阵的强大功能的方法。

编辑正在调用方法......

public static int[][] multiplyMatrices(int matrixA[][], int matrixB[][]) {
    int temp[][] = new int[matrixA.length][matrixB.length];
    int matrix[][] = new int[matrixA.length][matrixB.length]; 
    int sum = 0 ;

    for (int i = 0; i < matrixA.length; i++)
    {
        for (int j = 0; j < matrixB.length; j++) 
        {
            for (int l = 0; l < matrixA.length; l++)
            {
                sum += matrixA[i][l] * matrixB[l][j] ;
            }
            temp[i][j] = sum ;
            sum = 0 ;
        }
        }
    matrix = temp;
    return matrix ;
}


public static int[][] addMatrices(int matrixA[][], int matrixB[][]) {
    int temp[][] = new int[matrixA.length][matrixB.length]; 
    int sum = 0 ;

    for (int i = 0; i < matrixA.length; i++)
    {
        for (int j = 0; j < matrixB.length; j++) {
            {
                sum = matrixA[i][j] + matrixB[i][j] ;
            }
            temp[i][j] = sum ;
        }
    }
    return temp ;
}


public static int[][] powerMatrix (int[][] a, int p) {
    int[][] result = a;
    for (int n = 1; n < p; n++)
        result = multiplyMatrices(result, a);
    return result;
}

1 个答案:

答案 0 :(得分:1)

addMatrices方法中,您应该删除第三个循环。

像这样:

for (int i = 0; i < matrixA.length; i++) {
    for (int j = 0; j < matrixA[i].length; j++) {
        temp[i][j] = matrixA[i][j] + matrixB[i][j] ;
    }
}