📜  两个矩阵相乘的Java程序

📅  最后修改于: 2022-05-13 01:54:22.838000             🧑  作者: Mango

两个矩阵相乘的Java程序

给定两个矩阵,将它们相乘的任务。矩阵可以是正方形或矩形。

例子:

Input : mat1[][] = {{1, 2}, 
                   {3, 4}}
        mat2[][] = {{1, 1}, 
                    {1, 1}}
Output : {{3, 3}, 
          {7, 7}}
Input : mat1[][] = {{2, 4}, 
                    {3, 4}}
        mat2[][] = {{1, 2}, 
                    {1, 3}}       
Output : {{6, 16}, 
          {7, 18}}

平方矩阵的乘法:
下面的程序将两个大小为 4*4 的方阵相乘,我们可以将 N 更改为不同的维度。

Java
// Java program to multiply two square
// matrices.
import java.io.*;
  
class GFG {
  
    static int N = 4;
  
    // This function multiplies mat1[][]
    // and mat2[][], and stores the result
    // in res[][]
    static void multiply(int mat1[][],
                         int mat2[][], int res[][])
    {
        int i, j, k;
        for (i = 0; i < N; i++) {
            for (j = 0; j < N; j++) {
                res[i][j] = 0;
                for (k = 0; k < N; k++)
                    res[i][j] += mat1[i][k]
                                 * mat2[k][j];
            }
        }
    }
  
    // Driver code
    public static void main(String[] args)
    {
        int mat1[][] = { { 1, 1, 1, 1 },
                         { 2, 2, 2, 2 },
                         { 3, 3, 3, 3 },
                         { 4, 4, 4, 4 } };
  
        int mat2[][] = { { 1, 1, 1, 1 },
                         { 2, 2, 2, 2 },
                         { 3, 3, 3, 3 },
                         { 4, 4, 4, 4 } };
  
        // To store result
        int res[][] = new int[N][N];
        int i, j;
        multiply(mat1, mat2, res);
  
        System.out.println("Result matrix"
                           + " is ");
        for (i = 0; i < N; i++) {
            for (j = 0; j < N; j++)
                System.out.print(res[i][j]
                                 + " ");
            System.out.println();
        }
    }
}
  
// This code is contributed by anuj_67.


Java
// Java program to multiply two matrices.
  
public class GFG 
{
  
    /**
     * to find out matrix multiplication
     *
     * @param matrix1 First matrix
     * @param rows1   Number of rows in matrix 1
     * @param cols1   Number of columns in matrix 1
     * @param matrix2 Second matrix
     * @param rows2   Number of rows in matrix 2
     * @param cols2   Number of columns in matrix 2
     * @return the result matrix (matrix 1 and matrix 2
     * multiplication)
     */
    public static int[][] matrixMultiplication(
        int[][] matrix1, int rows1, int cols1,
        int[][] matrix2, int rows2, int cols2)
        throws Exception
    {
  
        // Required condition for matrix multiplication
        if (cols1 != rows2) {
            throw new Exception("Invalid matrix given.");
        }
  
        // create a result matrix
        int resultMatrix[][] = new int[rows1][cols2];
  
        // Core logic for 2 matrices multiplication
        for (int i = 0; i < resultMatrix.length; i++) 
        {
            for (int j = 0; 
                 j < resultMatrix[i].length;
                 j++) 
            {
                for (int k = 0; k < cols1; k++) 
                {
                    resultMatrix[i][j]
                        += matrix1[i][k] * matrix2[k][j];
                }
            }
        }
        return resultMatrix;
    }
  
    // Driver code
    public static void main(String[] args) throws Exception
    {
  
        // Initial matrix 1 and matrix 2
        int matrix1[][] = { { 2, 4 }, { 3, 4 } };
        int matrix2[][] = { { 1, 2 }, { 1, 3 } };
  
        // Function call to get a matrix multiplication
        int resultMatrix[][] = matrixMultiplication(
            matrix1, 2, 2, matrix2, 2, 2);
  
        // Display result matrix
        System.out.println("Result Matrix is:");
        for (int i = 0; i < resultMatrix.length; i++) 
        {
            for (int j = 0; 
                 j < resultMatrix[i].length;
                 j++)
            {
                System.out.print(resultMatrix[i][j] + "    ");
            }
            System.out.println();
        }
    }
    // This code is contributed by darshatandel1998 (Darshan
    // Tandel)
}


输出
Result matrix is 
10 10 10 10 
20 20 20 20 
30 30 30 30 
40 40 40 40

时间复杂度: O(n 3 )。可以使用 Strassen 的矩阵乘法进行优化

辅助空间: O(n 2 )

矩形矩阵的乘法:
我们在 C 中使用指针来乘以矩阵。请参阅以下帖子作为代码的先决条件。
如何在C中将二维数组作为参数传递?

Java

// Java program to multiply two matrices.
  
public class GFG 
{
  
    /**
     * to find out matrix multiplication
     *
     * @param matrix1 First matrix
     * @param rows1   Number of rows in matrix 1
     * @param cols1   Number of columns in matrix 1
     * @param matrix2 Second matrix
     * @param rows2   Number of rows in matrix 2
     * @param cols2   Number of columns in matrix 2
     * @return the result matrix (matrix 1 and matrix 2
     * multiplication)
     */
    public static int[][] matrixMultiplication(
        int[][] matrix1, int rows1, int cols1,
        int[][] matrix2, int rows2, int cols2)
        throws Exception
    {
  
        // Required condition for matrix multiplication
        if (cols1 != rows2) {
            throw new Exception("Invalid matrix given.");
        }
  
        // create a result matrix
        int resultMatrix[][] = new int[rows1][cols2];
  
        // Core logic for 2 matrices multiplication
        for (int i = 0; i < resultMatrix.length; i++) 
        {
            for (int j = 0; 
                 j < resultMatrix[i].length;
                 j++) 
            {
                for (int k = 0; k < cols1; k++) 
                {
                    resultMatrix[i][j]
                        += matrix1[i][k] * matrix2[k][j];
                }
            }
        }
        return resultMatrix;
    }
  
    // Driver code
    public static void main(String[] args) throws Exception
    {
  
        // Initial matrix 1 and matrix 2
        int matrix1[][] = { { 2, 4 }, { 3, 4 } };
        int matrix2[][] = { { 1, 2 }, { 1, 3 } };
  
        // Function call to get a matrix multiplication
        int resultMatrix[][] = matrixMultiplication(
            matrix1, 2, 2, matrix2, 2, 2);
  
        // Display result matrix
        System.out.println("Result Matrix is:");
        for (int i = 0; i < resultMatrix.length; i++) 
        {
            for (int j = 0; 
                 j < resultMatrix[i].length;
                 j++)
            {
                System.out.print(resultMatrix[i][j] + "    ");
            }
            System.out.println();
        }
    }
    // This code is contributed by darshatandel1998 (Darshan
    // Tandel)
}
输出
6 16 
7 18

时间复杂度: O(n 3 )。可以使用 Strassen 的矩阵乘法进行优化

辅助空间: O(m1 * n2)

有关更多详细信息,请参阅有关将两个矩阵相乘的完整文章!