使用JAVA生成随机数实现矩阵乘法

矩阵乘法的定义:
在计算机中,一个矩阵实际上就是一个二维数组。一个m行n列的矩阵与一个n行p列的矩阵可以相乘,得到的结果是一个m行p列的矩阵,其中的第i行第j列位置上的数为第一个矩阵第i行上的n个数与第二个矩阵第j列上的n个数对应相乘后所得的n个乘积之和。比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是一个2行3列的矩阵。
其中,结果矩阵的那个4(结果矩阵中第二(i)行第二(j)列)=2(第一个矩阵第二(i)行第一列)*2(第二个矩阵中第一行第二(j)列)+0(第一个矩阵第二(i)行第二列)*1(第二个矩阵中第二行第二(j)列):
 
 

 下面用Java实现矩阵乘法:

import java.util.Random;
public class MultiMatrixTest {
 static int[][] multiplyMatrix;//定义一个全局矩阵,存放矩阵乘积的结果
 static Random ran=new Random();
 public static void main(String args[]){
  int length1;
  int length2;
  int length3;
  length1=ran.nextInt(10)+1;//随机产生矩阵A的行数以及矩阵B列数,两个矩阵相乘行数和列数必须相同
  length2=ran.nextInt(10)+1;//随机产生矩阵A的列数
  length3=ran.nextInt(10)+1;//随机产生矩阵B的行数
  int [][]a = new int[length2][length1];
  int [][]b = new int[length1][length3];
  getAB(a,b);
  mMatrix(a,b);
  show();
 }
 public static void getAB(int[][]a,int[][]b){//使用随机数生成矩阵a和b
  for(int i=0;i<a.length;i++){
   for(int j=0;j<a[0].length;j++){
    a[i][j]=ran.nextInt(100);
   }
  }
  for(int i=0;i<b.length;i++){
   for(int j=0;j<b[0].length;j++){
    b[i][j]=ran.nextInt(100);
   }
  }
  System.out.println("输出矩阵A");//输出矩阵A
  for(int i=0;i<a.length;i++){
   for(int j=0;j<a[0].length;j++){
    System.out.print(a[i][j]+" ");
   }
   System.out.println("");
  }
  System.out.println("输出矩阵B");//输出矩阵B
  for(int i=0;i<b.length;i++){
   for(int j=0;j<b[0].length;j++){
    System.out.print(b[i][j]+" ");
   }
   System.out.println("");
  }
 }
 public static void mMatrix(int[][] a,int[][] b){//矩阵A*B
      System.out.println("输出矩阵A*B");
      multiplyMatrix=new int[a.length][b[0].length];
      for (int i = 0; i<a.length; i++) {//A的行数
      for (int j = 0; j<b[0].length; j++) {//B的列数
      for (int k = 0; k<a[0].length; k++) {//A的列数
      multiplyMatrix[i][j]=multiplyMatrix[i][j]+a[i][k]*b[k][j];//将矩阵A的第I行和矩阵B的第J列对应的数相乘得到multiplyMatrix[i][j]
      }
  }
 }
 }
 public static void show(){//输出矩阵乘积multiplyMatrix
  for (int i = 0; i<multiplyMatrix.length; i++) {
   for (int j = 0; j<multiplyMatrix[0].length; j++) {
   System.out.print (multiplyMatrix[i][j]+" ");
   }
   System.out.println ("");
   }
 }

}

posted @ 2014-07-01 18:40  超人不会飞LC  阅读(2590)  评论(0编辑  收藏  举报