Java的矩阵乘积

一、思路
函数
1.定义两个矩阵数组,先判断矩阵a与b是否可以相乘
2.若不可以,输出矩阵不能相乘,若可以,定义乘积后的矩阵数组为c,使c=a*b,遍历输出c
3.其中定义c为 c[ a的行数 ][ b的列数 ],遍历a,b使他们乘积
主函数
1.编写输入语句
2.分别输入a与b的行数与列数,构造数组a,b,再输入矩阵a,b
3.调用函数

二、Java程序展示

import java.util.Scanner;
public class juzhenchengji {

	public static void chengji(int a[][],int b[][]) {
		
		if(a[0].length != b.length){                    //判断a的列数与b的行数是否相等
			System.out.println("矩阵无法相乘,数组不存在");
		}
		else {
			int x=a.length;
        	int y=b[0].length;
        	int c[][]=new int[x][y];                  //定义乘积后的数组c[ a的行数 ][ b的列数 ]
        	for(int i=0;i<x;i++)
        	{
        		for(int j=0;j<y;j++) 
        		{
        			for (int k = 0; k < b.length; k++)
        				c[i][j] += a[i][k] * b[k][j];     //即c[i][j] = a[0][0]*b[0][0] + a[0][1]*b[1][0] + a[0][2]*b[2][0] + ......
        		}
        	}
        	System.out.println("矩阵相乘后结果为");
    	    for(int m = 0;m<a.length;m++)
    		{
    			for(int n = 0;n<b[0].length;n++)
    			{
    				System.out.print(c[m][n]+"\t");        //"\t"意思是补空格到当前字符串长度到8的整数倍
    			}
    			System.out.println();
    		}	
		}
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入第一个矩阵的行数和列数:");
		int x1 = sc.nextInt();
		int y1 = sc.nextInt();
		int[][] arr1 = new int[x1][y1];
		System.out.println("请输入第一个矩阵");
		for (int i = 0; i < x1; i++) {
			for (int j = 0; j <y1; j++) 
				arr1[i][j]=sc.nextInt();
		} 
	   
		System.out.print("请输入第二个矩阵的行数和列数:");
 		int x2 = sc.nextInt();
 		int y2 = sc.nextInt();
 		int[][] arr2 = new int[x2][y2];
 		System.out.println("请输入第二个矩阵");
 		for (int i=0; i<x2; i++) {
 			for (int j = 0; j <y2; j++)
 				arr2[i][j]=sc.nextInt();
 		}
		chengji(arr1,arr2);
	}
}

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是Java实现串行、并行、并发求大数量矩阵乘积,并把每一步的矩阵乘积输出的示例: 1. 串行求矩阵乘积并输出每一步结果 ```java public class SerialMatrixMultiplication { public static void main(String[] args) { int[][] A = generateMatrix(100, 100); int[][] B = generateMatrix(100, 100); int[][] C = new int[A.length][B[0].length]; for (int i = 0; i < A.length; i++) { for (int j = 0; j < B[0].length; j++) { for (int k = 0; k < B.length; k++) { C[i][j] += A[i][k] * B[k][j]; } System.out.print(C[i][j] + " "); } System.out.println(); } } private static int[][] generateMatrix(int rows, int cols) { int[][] matrix = new int[rows][cols]; Random random = new Random(); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { matrix[i][j] = random.nextInt(10); } } return matrix; } } ``` 2. 并行求矩阵乘积并输出每一步结果 ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class ParallelMatrixMultiplication { private static int[][] A, B, C; public static void main(String[] args) throws InterruptedException { A = generateMatrix(100, 100); B = generateMatrix(100, 100); C = new int[A.length][B[0].length]; int processors = Runtime.getRuntime().availableProcessors(); ExecutorService executor = Executors.newFixedThreadPool(processors); for (int i = 0; i < A.length; i++) { for (int j = 0; j < B[0].length; j++) { executor.submit(new Task(i, j)); } } executor.shutdown(); executor.awaitTermination(1, TimeUnit.HOURS); } private static class Task implements Runnable { int i, j; public Task(int i, int j) { this.i = i; this.j = j; } @Override public void run() { for (int k = 0; k < B.length; k++) { C[i][j] += A[i][k] * B[k][j]; } System.out.println("C[" + i + "][" + j + "] = " + C[i][j]); } } private static int[][] generateMatrix(int rows, int cols) { int[][] matrix = new int[rows][cols]; Random random = new Random(); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { matrix[i][j] = random.nextInt(10); } } return matrix; } } ``` 3. 并发求矩阵乘积并输出每一步结果 ```java import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class ConcurrentMatrixMultiplication { private static final int THREAD_COUNT = 4; private static int[][] A, B, C; public static void main(String[] args) throws InterruptedException { A = generateMatrix(100, 100); B = generateMatrix(100, 100); C = new int[A.length][B[0].length]; ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT); for (int t = 0; t < THREAD_COUNT; t++) { executor.submit(new Task(t)); } executor.shutdown(); executor.awaitTermination(1, TimeUnit.HOURS); } private static class Task implements Runnable { private int id; public Task(int id) { this.id = id; } @Override public void run() { int start = id * A.length / THREAD_COUNT; int end = (id + 1) * A.length / THREAD_COUNT; for (int i = start; i < end; i++) { for (int j = 0; j < B[0].length; j++) { for (int k = 0; k < B.length; k++) { C[i][j] += A[i][k] * B[k][j]; } System.out.println("C[" + i + "][" + j + "] = " + C[i][j]); } } } } private static int[][] generateMatrix(int rows, int cols) { int[][] matrix = new int[rows][cols]; Random random = new Random(); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { matrix[i][j] = random.nextInt(10); } } return matrix; } } ``` 上述三个示例分别实现了串行、并行和并发求大数量矩阵乘积,并输出了每一步的结果。其中,串行和并行示例使用了线程池和多线程技术,而并发示例使用了Java并发编程中的Executor框架。在实际应用中,可以根据具体情况选择使用不同的实现方式,以获得最优的计算效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值