繁体   English   中英

矩阵计算不起作用…Java输出异常

[英]Matrix calculation not working… very odd output Java

这是我要在A是矩阵时执行的操作。

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

矩阵会给我正确的输出,但

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

在您的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] ;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM