矩阵乘法的java实现
1、算法思想
最近老是碰到迭代问题,小数太多手算又算不过来,写个矩阵乘法辅助一下吧。
有两个矩阵A和B,计算矩阵A与B相乘之后的结果C。
A的列数必须等于B的行数
用矩阵A的第i行的值分别乘以矩阵B的第J列,然后将结果相加,就得到C[i][j]。
矩阵A的行等于C的行,矩阵B的列等于C的列,这两个数值用来控制循环的次数,但是每一步中需要把行和列中对应的乘机求和,所以再加一个内循环控制乘法求和就行。
下面我们进行矩阵乘法的测试
A
=
[
1
2
3
4
5
6
7
8
9
1
1
1
]
B
=
[
1
0
0
0
1
0
0
0
1
]
A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9\\ 1 & 1& 1 \end{bmatrix} B= \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\\ \end{bmatrix}
A=⎣⎢⎢⎡147125813691⎦⎥⎥⎤B=⎣⎡100010001⎦⎤
2、代码实现
package com.Unit4;
public class Multiply {
/**
* 矩阵乘法
*
* @param x1 第一个矩阵
* @param x2 第二个矩阵
*/
public static void multiplyMatrix(int x1[][],int x2[][]){
//前提条件:第一个矩阵的列必须等于第二个矩阵的行
if(x1[0].length!=x2.length){
System.out.println("不满足相乘的条件");
return;
}
int lineLength=x1.length; //第一个矩阵的行
int listLength=x2[0].length;//第二个矩阵的列
int[][] multiply=new int[lineLength][listLength];//相乘的结果矩阵
//乘法
for(int i=0;i<lineLength;i++){
for(int j=0;j<listLength;j++){
for(int k=0;k<x1[0].length;k++){
multiply[i][j]+=x1[i][k]*x2[k][j];
}
}
}
System.out.println("相乘之后的结果为:");
for(int i=0;i<multiply.length;i++){
for(int j=0;j<multiply[0].length;j++){
System.out.print(multiply[i][j]+" ");
}
System.out.print("\n");
}
}
public static void main(String[] args) {
//4*3
int[][] x1={{1,2,3},{4,5,6},{7,8,9},{1,1,1}};
//3*3
int[][] x2={{1,0,0},{0,1,0},{0,0,1}};
multiplyMatrix(x1,x2);
}
}
我们用一个4*
3的矩阵去和一个3*
3的单位矩阵相乘,方便我们观察结果。
可以看到最后的计算结果为:
A = [ 1 2 3 4 5 6 7 8 9 1 1 1 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9\\ 1 & 1& 1 \end{bmatrix} A=⎣⎢⎢⎡147125813691⎦⎥⎥⎤
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-10-11 SyntaxError: Non-UTF-8 code starting with ‘\xc6‘ in file E:\demo.py on line 1, but no encoding decla