欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【算法】矩阵 的 加、乘、转置

程序员文章站 2022-07-12 20:59:37
...

一、矩阵相加

公式:C[m][n]=A[m][n]+B[m][n];

public class Matrix_Addition {


    public static void MattrixAdd(int a[][],int b[][],int c[][],int x,int y)
    {
        int row,col;
        if(x<=0&&y<=0)
        {
            System.out.printf("矩阵纬数必须大于0");
            return ;
        }
        for( row=1;row<=x;row++ )
        {
            for (col=1;col<=y;col++)
            {
                c[(row-1)][(col-1)]=a[(row-1)][(col-1)]+b[(row-1)][(col-1)];
            }
        }


    }
    public static void main(String args[])
    {
        int i,j;
        final int rows=3;
        final int cols=3;
        int [][]a={{1,3,4},{3,3,3},{6,6,6}};
        int [][]b={{3,4,5},{2,2,2},{5,5,5}};
        int [][]c=new int[rows][cols];
        MattrixAdd(a,b,c,3,3);
        System.out.println("相加后的c矩阵如下");
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                System.out.print(c[i][j]+"  ");

            }
            System.out.println("");
        }
    }
}

二、矩阵相乘

公式:C[m][p]=A[m][0]*B[0][p]+A[m][1]*B[1][p]+……+A[m][n]*B[n][p];

import java.io.*;

public class Matrix_Multiply {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        int M,N1,N2,P;
        int i,j;
        String strM;
        String strN1,strN2;
        String strP;
        String tempstr;
        BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请先输入矩阵A的纬数(M,N1)");
        System.out.println("请先输入矩阵A的M值:");
        strM=keyin.readLine();
        M=Integer.parseInt(strM);
        System.out.println("请输入矩阵A的N值:");
        strN1=keyin.readLine();
        N1=Integer.parseInt(strN1);
        int A[][]=new int[M][N1];
        System.out.println("请输入矩阵A的各个元素");
        System.out.println("注意!每一次输入一个值按下Enter键确认输入");
        for(i=0;i<M;i++)
        {
            for(j=0;j<N1;j++)
            {
                System.out.print("a"+i+j+"=");
                tempstr=keyin.readLine();
                A[i][j]=Integer.parseInt(tempstr);
            }
        }
        System.out.println("请输入矩阵B的纬数值(N2,P)");
        System.out.println("请先输入矩阵B的N2值:");
        strN2=keyin.readLine();
        N2=Integer.parseInt(strN2);
        while(N1!=N2)
        {
            System.out.println("请保证N1与N2的值相等");
            strN2=keyin.readLine();
            N2=Integer.parseInt(strN2);

        }
        System.out.println("请输入矩阵B的P值:");
        strP=keyin.readLine();
        P=Integer.parseInt(strP);
        int B[][]=new int[N2][P];
        System.out.println("请输入矩阵A的各个元素");
        System.out.println("注意!每一次输入一个值按下Enter键确认输入");
        for(i=0;i<N2;i++)
        {
            for(j=0;j<P;j++)
            {
                System.out.print("b"+i+j+"=");
                tempstr=keyin.readLine();
                B[i][j]=Integer.parseInt(tempstr);
            }
        }
        int C[][]=new int[M][P];
        MatrixMultiply(A,B,C,M,N2,P);
        System.out.println("[AxB结果是]");
        for(i=0;i<M;i++)
        {
            for(j=0;j<P;j++)
            {
                System.out.print(C[i][j]);
                System.out.print('\t');
            }
            System.out.println();
        }

    }

    public static void MatrixMultiply(int arrA[][],int arrB[][],int arrC[][],int M,int N,int P)
    {
        int i,j,k,temp = 0;
        for(i=0;i<M;i++)
        {
            for(j=0;j<P;j++)
            {
                for(k=0;k<N;k++)
                {

                    temp += arrA[i][k]*arrB[k][j];

                }
                arrC[i][j]=temp;
            }
        }

    }
}

三、转置矩阵
公式:
A[m][n]->At[n][m];

public class zz {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        int M,N;
        int i,j;
        String strM;
        String strN;

        String tempstr;
        BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请先输入矩阵A的纬数(M,N)");
        System.out.println("请先输入矩阵A的M值:");
        strM=keyin.readLine();
        M=Integer.parseInt(strM);
        System.out.println("请输入矩阵A的N值:");
        strN=keyin.readLine();
        N=Integer.parseInt(strN);
        int A[][]=new int[M][N];
        int B[][]=new int[N][M];
        System.out.println("请输入矩阵A的各个元素");
        System.out.println("注意!每一次输入一个值按下Enter键确认输入");
        for(i=0;i<M;i++)
        {
            for(j=0;j<N;j++)
            {
                System.out.print("a"+i+j+"=");
                tempstr=keyin.readLine();
                A[i][j]=Integer.parseInt(tempstr);
            }
        }


        System.out.println("[输入矩阵的内容为]\n");
        for(i=0;i<M;i++)
        {
            for(j=0;j<N;j++)
            {
                System.out.print(A[i][j]);
                System.out.print('\t');
            }
            System.out.println();
        }

        exchangeT(A,B,M,N);
    }
    public static void exchangeT(int [][]A,int B[][],int M,int N)
    {
        int i,j;
        for(i=0;i<N;i++)
        {
            for(j=0;j<M;j++)
            {
                B[i][j]=A[j][i];
            }
        }
        System.out.println("[输出转置后的矩阵的内容为]\n");
        for(i=0;i<N;i++)
        {
            for(j=0;j<M;j++)
            {
                System.out.print(B[i][j]);
                System.out.print('\t');
            }
            System.out.println();
        }
    }
}