矩阵乘法的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=147125813691B=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

posted @   别团等shy哥发育  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 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
点击右上角即可分享
微信分享提示