每日总结

今天学习了tensorflow的基本使用keras,安装了PostgreSql数据库,并做了一定的了解,研究了n阶矩阵求m次幂的算法

package Basic;

import java.util.Scanner;

/**
 * 矩阵乘法
 * 给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
 * 输入格式
 * 第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
 * 接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
 * 输出格式
 * 输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
 * 样例输入
 * 2 2
 * 1 2
 * 3 4
 * 样例输出
 * 7 10
 * 15 22
 */
public class Basic_17 {
    /**
     * 注意考虑特殊的单位矩阵,0次幂
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //n存放矩阵的阶数
        int n = scanner.nextInt();
        //m存放矩阵的次幂
        int m =scanner.nextInt();
        //arr存放最初的矩阵
        int[][] arr = new int[n][n];
        //res存放结果矩阵
        int[][] res = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                arr[i][j] = scanner.nextInt();
                res[i][j] = arr[i][j];
            }
        }
        if (m != 0){//当为零时,是单位矩阵
            //运算m次矩阵乘法
            for (int i = 0; i < m - 1; i++) {
                //将数组临时存放,避免中途赋值影响矩阵数值从而影响计算结果
                int[][] temp = new int[n][n];
                //开始运算
                for (int j = 0; j < n; j++) {
                    for (int k = 0; k < n; k++) {
                        //给res[i][j]进行赋值
                        //int tmp临时存放矩阵中的部分值
                        int tmp = 0;
                        for (int l = 0; l < n; l++) {
                            tmp += res[j][l] * arr[l][k];
                        }
                        temp[j][k] = tmp;
                    }
                }
                //将结果赋值给结果矩阵
                for (int j = 0; j < n; j++) {
                    for (int k = 0; k < n; k++) {
                        res[j][k] = temp[j][k];
                    }
                }
            }
        }else {
            //将结果矩阵转为单位矩阵
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (i == j){
                        res[i][j] = 1;
                    }else {
                        res[i][j] = 0;
                    }
                }
            }
        }

        //输出结果矩阵
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print(res[i][j] + " ");
            }
            System.out.print("\n");
        }
    }
}

上一篇:1运动规划概述


下一篇:第9节 使用Clang编译