Рубрики

Программа для умножения двух матриц

Учитывая две матрицы, задача умножить их. Матрицы могут быть квадратными или прямоугольными.

Примеры:

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 для разных измерений.

C ++

// C ++ программа для умножения
// две квадратные матрицы.
#include <iostream>

  

using namespace std;

  
#define N 4

  
// Эта функция умножается
// mat1 [] [] и mat2 [] [], и
// сохраняет результат в res [] []

void multiply(int mat1[][N], 

              int mat2[][N], 

              int res[][N])

{

    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];

        }

    }

}

  
// Код драйвера

int main()

{

    int i, j;

    int res[N][N]; // Для сохранения результата

    int mat1[N][N] = {{1, 1, 1, 1},

                      {2, 2, 2, 2},

                      {3, 3, 3, 3},

                      {4, 4, 4, 4}};

  

    int mat2[N][N] = {{1, 1, 1, 1},

                      {2, 2, 2, 2},

                      {3, 3, 3, 3},

                      {4, 4, 4, 4}};

  

    multiply(mat1, mat2, res);

  

    cout << "Result matrix is \n";

    for (i = 0; i < N; i++)

    {

        for (j = 0; j < N; j++)

        cout << res[i][j] << " ";

        cout << "\n";

    }

  

    return 0;

}

  
// Этот код добавлен
// Соумик Мондал

С

// C программа для умножения двух квадратных матриц.
#include <stdio.h>
#define N 4

  
// Эта функция умножает mat1 [] [] и mat2 [] [],
// и сохраняет результат в res [] []

void multiply(int mat1[][N], int mat2[][N], int res[][N])

{

    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];

        }

    }

}

  

int main()

{

    int mat1[N][N] = { {1, 1, 1, 1},

                    {2, 2, 2, 2},

                    {3, 3, 3, 3},

                    {4, 4, 4, 4}};

  

    int mat2[N][N] = { {1, 1, 1, 1},

                    {2, 2, 2, 2},

                    {3, 3, 3, 3},

                    {4, 4, 4, 4}};

  

    int res[N][N]; // Для сохранения результата

    int i, j;

    multiply(mat1, mat2, res);

  

    printf("Result matrix is \n");

    for (i = 0; i < N; i++)

    {

        for (j = 0; j < N; j++)

           printf("%d ", res[i][j]);

        printf("\n");

    }

  

    return 0;

}

Джава

// Java программа для умножения двух квадратов
// матрицы.

import java.io.*;

  

class GFG {

      

  

    static int N = 4;

      

    // Эта функция умножает mat1 [] []

    // и mat2 [] [], и сохраняет результат

    // в 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];

            }

        }

    }

  

    // Код драйвера

    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}};

  

        // Для сохранения результата

        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();

        }

    }

}

  
// Этот код предоставлен anuj_67.

Python 3

# 4x4 умножение матриц с использованием Python3
# Определение функции

def matrix_multiplication(M,N):

    # Список для сохранения результата умножения матриц

    R = [[0, 0, 0, 0], 

        [0, 0, 0, 0], 

        [0, 0, 0, 0],

        [0, 0, 0, 0]] 

  

    for i in range(0, 4): 

        for j in range(0, 4):

            for k in range(0, 4): 

                R[i][j] += M[i][k] * N[k][j] 

  

    for i in range(0,4): 

        for j in range(0,4): 

            # если мы используем print (), по умолчанию курсор перемещается на следующую строку каждый раз,

            # Теперь мы можем явно определить конечный символ или последовательность передачи

            # второй параметр as end = "<символ или строка>"

            #syntax: print (<переменная или значение для печати>, end = "<заканчивается на>")

            # Здесь пробел ("") используется для печати пробела после печати

            # каждый элемент R

            print(R[i][j],end=" ")

        print("\n",end="")

  
# Первая матрица. М это список

M = [[1, 1, 1, 1], 

    [2, 2, 2, 2], 

    [3, 3, 3, 3],

    [4, 4, 4, 4]]

  
# Вторая матрица. N это список

N = [[1, 1, 1, 1], 

    [2, 2, 2, 2], 

    [3, 3, 3, 3],

    [4, 4, 4, 4]] 

      
# Вызов функции matrix_multiplication
matrix_multiplication(M,N)

  
# Этот код предоставлен Santanu

C #

// C # программа для умножения двух квадратов
// матрицы.

using System;

  

class GFG {

      

  

    static int N = 4;

      

    // Эта функция умножает mat1 [] []

    // и mat2 [] [], и сохраняет результат

    // в 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];

            }

        }

    }

  

    // Код драйвера

    public static void Main () 

    {

        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}};

  

        // Для сохранения результата

        int [,]res = new int[N,N] ;

        int i, j;

        multiply(mat1, mat2, res);

      

        Console.WriteLine("Result matrix"

                                + " is ");

        for (i = 0; i < N; i++)

        {

            for (j = 0; j < N; j++)

                Console.Write( res[i,j]

                                    + " ");

            Console.WriteLine();

        }

    }

}

  
// Этот код предоставлен anuj_67.

PHP

<?php
// PHP программа для умножения двух
// квадратные матрицы.

  
// Эта функция умножает mat1 [] [] и
// mat2 [] [] и сохраняет результат в res [] []

function multiply(&$mat1, &$mat2, &$res)

{

    $N = 4;

    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];

        }

    }

}

  
// Код драйвера

$mat1 = array(array(1, 1, 1, 1),

              array(2, 2, 2, 2),

              array(3, 3, 3, 3),

              array(4, 4, 4, 4));

  

$mat2 = array(array(1, 1, 1, 1),

              array(2, 2, 2, 2),

              array(3, 3, 3, 3),

              array(4, 4, 4, 4));

  

multiply($mat1, $mat2, $res);

$N = 4;

echo ("Result matrix is \n");

for ($i = 0; $i < $N; $i++)

{

    for ($j = 0; $j < $N; $j++)

    {

        echo ($res[$i][$j]);

        echo(" ");

    }

    echo ("\n");

}

  
// Этот код добавлен
// от Shivi_Aggarwal
?>


Выход:

Result matrix is
10 10 10 10
20 20 20 20
30 30 30 30
40 40 40 40 

Умножение прямоугольных матриц:
Мы используем указатели в C для умножения на матрицы. Пожалуйста, обратитесь к следующему сообщению в качестве предварительного условия кода.

Как передать 2D массив в качестве параметра в C?

C ++

// C ++ программа для умножения двух
// прямоугольные матрицы
#include<bits/stdc++.h>

using namespace std;

  
// Умножаем две матрицы mat1 [] []
// и mat2 [] [] и выводит результат.
// (m1) x (m2) и (n1) x (n2)
// размеры заданных матриц.

void multiply(int m1, int m2, int mat1[][2], 

              int n1, int n2, int mat2[][2])

{

    int x, i, j;

    int res[m1][n2];

    for (i = 0; i < m1; i++) 

    {

        for (j = 0; j < n2; j++) 

        {

            res[i][j] = 0;

            for (x = 0; x < m2; x++) 

            {

                *(*(res + i) + j) += *(*(mat1 + i) + x) *

                                     *(*(mat2 + x) + j);

            }

        }

    }

    for (i = 0; i < m1; i++) 

    {

        for (j = 0; j < n2; j++) 

        {

            cout << *(*(res + i) + j) << " ";

        }

        cout << "\n";

    }

}

  
// Код драйвера

int main()

{

    int mat1[][2] = { { 2, 4 }, { 3, 4 } };

    int mat2[][2] = { { 1, 2 }, { 1, 3 } };

    int m1 = 2, m2 = 2, n1 = 2, n2 = 2;

    multiply(m1, m2, mat1, n1, n2, mat2);

    return 0;

}

  
// Этот код добавлен
// Аканкша Рай (Abby_akku)

С

// C программа для умножения двух прямоугольных матриц
#include<stdio.h>

  
// Умножаем две матрицы mat1 [] [] и mat2 [] []
// и выводит результат.
// (m1) x (m2) и (n1) x (n2) являются размерами
// заданных матриц.

void multiply(int m1, int m2, int mat1[][m2],

            int n1, int n2, int mat2[][n2])

{

    int x, i, j;

    int res[m1][n2];

    for (i = 0; i < m1; i++)

    {

        for (j = 0; j < n2; j++)

        {

            res[i][j] = 0;

            for (x = 0; x < m2; x++)

            {

                *(*(res + i) + j) += *(*(mat1 + i) + x) *

                                    *(*(mat2 + x) + j);

            }

        }

    }

    for (i = 0; i < m1; i++)

    {

        for (j = 0; j < n2; j++)

        {

            printf("%d ", *(*(res + i) + j));

        }

        printf("\n");

    }

}

  
// Код драйвера

int main()

{

    int mat1[][2] = { { 2, 4 }, { 3, 4 } };

    int mat2[][2] = { { 1, 2 }, { 1, 3 } };

    int m1 = 2, m2 = 2, n1 = 2, n2 = 2;

    multiply(m1, m2, mat1, n1, n2, mat2);

    return 0;

}

PHP

<?php
// PHP программа для умножения двух
// прямоугольные матрицы

  
// Умножаем две матрицы mat1 [] []
// и mat2 [] [] и выводит результат.
// (m1) x (m2) и (n1) x (n2)
// размеры заданных матриц.

function multiply($m1, $m2, $mat1

                  $n1, $n2, $mat2

    for ($i = 0; $i < $m1; $i++) 

    

        for ($j = 0; $j < $n2; $j++) 

        

            $res[$i][$j] = 0; 

            for ($x = 0; $x < $m2; $x++) 

            

                $res[$i][$j] += $mat1[$i][$x] * 

                                $mat2[$x][$j]; 

            

        

    

    for ($i = 0; $i < $m1; $i++) 

    

        for ($j = 0; $j < $n2; $j++) 

        

            echo $res[$i][$j] . " "

        

        echo "\n"

    

  
// Код драйвера

$mat1 = array( array( 2, 4 ), array( 3, 4 )); 

$mat2 = array( array( 1, 2 ), array( 1, 3 )); 

$m1 = 2;

$m2 = 2;

$n1 = 2;

$n2 = 2; 

multiply($m1, $m2, $mat1, $n1, $n2, $mat2); 

  
// Этот код предоставлен rathbhupendra
?>


Выход:

6 16
7 18

Временная сложность вышеуказанной программы составляет O (n 3 ). Его можно оптимизировать с помощью умножения матриц Штрассена

Эта статья предоставлена Адитьей Ранджаном . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Программа для умножения двух матриц

0.00 (0%) 0 votes