二阶矩阵幂方运算

327 阅读2分钟

解释:我们需要将一个二阶矩阵进行矩阵的幂方运算,首先,你得知道矩阵运算的性质,如果没接触过矩阵运算,那就先看看线性代数

int[][]matrx = {{1,2},{1,2}}拿一个简单的矩阵,即可推算的所有矩阵运算规律 我们在进行矩阵运算容易遇到的问题,怎么去接收每一行每一列的运算的结果,这个是一个最大的问题,如果解决这个问题那么二阶矩阵的运算就迎刃而解了。 假设我们进行矩阵二次幂运算

我们定义一个方法,我们需要定义两个同阶的数组,一个是用来接收矩阵每一次行与列运算时的结果,另一个是用来得到最终结果的,也就是每一次幂之积的结果

public class Juzheng {
public static void main(String[] args) {
    int[][] matrix = {{1,2},{1,2}};
    mijuzheng(matrix, 2);
    }

public static int[][] mijuzheng(int[][] matrix, int n) {
    int[][] newMatrix = matrix;
    //n-1表示 多少次幂,n = 2 ,就是二次幂
    for (int j = 0; j < n - 1; j++) {
       
        //初始化一个二维数组,用于接收每一次的矩阵运算
        int[][] startM = new int[matrix.length][matrix.length];
        for (int y = 0; y < matrix.length; y++) {
            //startM的每一个元素的获取
            for (int x = 0; x < matrix.length; x++) {

                for (int i = 0; i < matrix.length; i++) {

                    //每一行乘以每一列的值,累加到一起
                    startM[y][x] += newMatrix[y][i] * matrix[i][x];


                }
            }
        }
        //startM运算完,则用newMatrix接收
        newMatrix = startM;
    }

    for (int i = 0; i < newMatrix.length; i++) {
        for (int j = 0; j < newMatrix.length; j++) {
            System.out.print(newMatrix[i][j] + "\t\t");
        }
        System.out.println("\n");
    }
    System.out.println();


    return newMatrix;
}

}

输出结果

[3,6] [3,6]

当n取4,matrix初值为

[ [0, 1, 2, 5], [1, 2, 1, 0], [1, 0, 0, 1], [0, 8, 9, 0] ]

输出结果

[169, 782, 828, 506]
    
[126, 283, 250, 110]
    
[112, 224, 197, 154]
    
[252, 1010, 1006, 251]