将矩阵提升到幂方法JAVA

时间:2014-04-06 22:36:38

标签: java math matrix multiplication

我很难创建一种方法来将矩阵提升到幂。我试过用这个

public static int powerMethod(int matrix, int power) {
    int temp = matrix ; 

    for (int i = power; i == 1; i--)
        temp = temp * matrix ; 



    return temp ;

但回报是WAYYY。只有第一个(1,1)矩阵元素在点上。

我尝试在像这样的主体中使用该方法

// Multiplying matrices
            for (i = 0; i < row; i++)
            {
                for (j = 0; j < column; j++) 
                {
                    for (l = 0; l < row; l++)
                    {
                        sum += matrix[i][l] * matrix[l][j] ;
                    }
                    matrix[i][j] = sum ;
                    sum = 0 ;
                }
                }

    // Solving Power of matrix
            for (i = 0; i < row; i++) {
                for (j = 0; j < column; j++) 
            matrixFinal[power][i][j] = Tools.powerMethod(matrix[i][j], power) ;
            }

&#34; power&#34;,&#34; row&#34;,&#34; column&#34;是用户输入的int。

我有什么想法可以做到这一点??

感谢!!!

2 个答案:

答案 0 :(得分:4)

这里有很多问题。

首先,矩阵平方算法存在(常见)错误。你有:

for (i = 0; i < row; i++) {
    for (j = 0; j < column; j++) {
        for (l = 0; l < row; l++) {
            sum += matrix[i][l] * matrix[l][j] ;
        }
        matrix[i][j] = sum ;
        sum = 0 ;
    }
}

但是,您需要将结果存储在临时的第二个矩阵中,因为当您执行matrix[i][j] = sum时,它会将该位置的值替换为输出,然后结果将不正确。另外,我建议首先将sum初始化为0 ,因为它似乎是在此循环之外声明它,并且首先初始化它会保护您免受sum之前可能具有的任意值的影响进入循环。此外,rowcolumn无法立即明确您的意思 - 确保您在整个矩阵上进行迭代。 E.g:

int temp[][] = new int[matrix.length];

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

// the result is now in 'temp', you could do this if you wanted:
matrix = temp;

请注意,matrix.lengthmatrix[i].length如果矩阵是正方形(它必须是,为了与自身相乘),则在上面是可以互换的。

其次,你的乘法正方形一个矩阵。这意味着如果你反复应用它,你每次都要保持矩阵的平方,这意味着你只能计算本身就是2的幂的幂。

你的第三个问题是你的最后一点没有多大意义:

for (i = 0; i < row; i++) {
    for (j = 0; j < column; j++) 
        matrixFinal[power][i][j] = Tools.powerMethod(matrix[i][j], power) ;
}

目前还不清楚你在这里要做什么。最后一部分似乎是试图将个别元素提升到一定的力量。但这与将矩阵提升为幂是不同的。

你需要做的是定义一个适当的矩阵乘法,它可以乘以两个任意矩阵,例如:

int[][] multiplyMatrices (int[][] a, int[][] b) {
    // compute and return a x b, similar to your existing multiplication
    // algorithm, and of course taking into account the comments about
    // the 'temp' output matrix above
}

然后计算能力变得简单:

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

答案 1 :(得分:-3)

为什么不使用Math.pow

    import java.lang.Math;

然后你只需做

    matrixFinal[power][i][j] = (int) Math.pow(matrix[i][j],power); //might have to cast this to an int