实现用Java代码得出矩阵的n次幂

179 阅读1分钟

代码如下:

package exer;

import java.util.Scanner;

public class test3 {
    public static void main(String[] args) {
        System.out.println("请输入一个数:");
        Scanner scanner = new Scanner(System.in);
        int sc = scanner.nextInt();
        int a = 0;
        //sc += 1;
        int[][] arr = new int[][]{{0, 1, 2, 5},
                {1, 2, 1, 0},
                {1, 0, 0, 1},
                {0, 8, 9, 0}};
        int[][] arr2 = new int[4][4];
        int[][] arr3 = new int[4][4];
        while (a < sc) {
            a++;
            //先得到二次幂,
            if(a == 1){
                for (int i = 0; i < arr2.length; i++) {
                    for (int j = 0; j < arr2[i].length; j++) {
                        arr2[i][j] = arr[i][j];
                    }
                }
            }
            for (int i = 0; i < arr3.length; i++) {
                for (int j = 0; j < arr3[i].length; j++) {
                    arr3[i][j] = arr2[i][0] * arr[0][j]
                            + arr2[i][1] * arr[1][j]
                            + arr2[i][2] * arr[2][j]
                            + arr2[i][3] * arr[3][j];
                }
            }
            if(a > 1){
                for (int i = 0; i < arr2.length; i++) {
                    for (int j = 0; j < arr2[i].length; j++) {
                        arr2[i][j] = arr3[i][j];//将前面的结果作为一个整体
                    }
                }
            }else {
                for (int i = 0; i < arr3.length; i++) {
                    for (int j = 0; j < arr3[i].length; j++) {
                        arr3[i][j] = arr[i][j];
                    }
                }
            }
        }
        System.out.println( sc + "阶矩阵为:");
        for (int i = 0; i < arr3.length; i++) {
            for(int j = 0;j < arr3[i].length;j++){
                System.out.print(arr3[i][j]);
                System.out.print(" ");
                if(j % 3 == 0 && j != 0){
                    System.out.println("\n");
                }
            }
        }
    }
}

核心代码:

   for (int i = 0; i < arr2.length; i++) {
                    for (int j = 0; j < arr2[i].length; j++) {
                        arr2[i][j] = arr3[i][j];//将前面的结果作为一个整体
                    }
   }

即将前n个矩阵的乘积作为一个整体赋值给arr2。

具体步骤

a++是为跳出循环做准备。

首先给arr2赋值为arr1,为2次幂做准备。

再通过if ……else……判断要求的幂的次数是否大于1,大于1才可以进行累乘。

当a自加到a == sc 时就能跳出循环。

矩阵的乘法代码公式可以简写成:

for (int i = 0; i < arr3.length; i++) {
    for (int j = 0; j < arr3[i].length; j++) {
        arr3[i][j] = 0;
        for(int k = 0;k < arr3[i].length;k++){
            arr3[i][j] += arr2[i][k] * arr[k][j];
        }
    }
}

当然这不一定是最好的实现方式。仅提供一种思路。

如果有其它实现方法,欢迎沟通交流。