Recent changes Random page
GAMING
Technology
 
Gaming
Entertainment
Science Fiction
Biggest wikis
Hobbies
Music
See more...

Matrix multiplication

From Programmer's Wiki

Jump to: navigation, search
 

Contents

[edit] Introduction

[edit] Prerequisites

It is assumed that those reading this have a basic understanding of what a matrix is and how to add them, and multiply them by scalars, i.e. plain old numbers like 3, or -5. A secondary school algebra course would probably give one more than enough background, but is surely not required by any means.

If you need some background Go here

[edit] Matrix Multiplication Basics

In order to multiply 2 matrices given one must have the same amount of rows that the other has columns. In other words two matrices can be multiplied only if one is of dimension m×n and the other is of dimension n×p where m, n, and p are natural numbers {m,n,p math}. The resulting matrix will be of dimension n×n.

[edit] Example 4x2 Multiplied by 2x4

Take a matrix 4x2 call it math; another of dimension 2x4 and call it math. Give them some arbitrary values and lets do some multiplication.

math

Our result matrix is going to be 2×2 as you will see as we go step by step. First we multiply and sum the first row with the first column: 2(3) + 3(2) + (-1)(-1) + 0(2). Then we do the same for the first row and second column: 2(4) + 3(1) + (-1)(2)+ 0(7), etc.

To make a long story short, our matrix would be:

math

As this implies, multiplication is non-commutative in general for matrices, i.e. math since in this case if we reversed the order the resulting matrix mathwould be 4×4 instead of 2×2.

[edit] More General Approach

Now lets visualize A and B as m×n and n×p matrices respectively.

math

We are going to be adding and multiplying like before, but generally.

math

[edit] Psedocode & General Algorithm

So now that we have a general idea of what a matrix is, and how to multiply them in general, we can derive some psedocode around it. We could break down the steps as follows.

  1. Check the sizes of two matrices math (m×n) and math (t×u): if n = t then we can multiply them otherwise no (in that order math)
  2. If they can be multiplied, then create a new square matrix of size n (or t, since n = t)
  3. For each row in A and each column in math multiply and sum the elements and the place the results in the rows and columns of the result matrix math

Here is some psedocode treating matrices like if they have a m element and an n element, so the dimension of a matrix object is m×n.


multiplyMatrix(matrix1, matrix2)

--  Multiplies rows and columns and sums them
  multiplyRowAndColumn(row, column) returns number
  var
    total: number
  begin
    for each rval in row and cval in column
    begin
       total += rval*cval
    end
    return total
  end

begin

--  If the rows don't match up then the function fails

  if matrix1:n != matrix2:m  return failure;

  dim    = matrix1:n   -- Could also be matrix2:m
  newmat = new squarematrix(dim)  -- Create a new dim x dim matrix
  for each r in matrix1:rows and c in matrix2:columns
  begin
    
  end
  
end

[edit] Implementations

[edit] C#

// Program in C# to multiply two matrices using Rectangular arrays. using System; class MatrixMultiplication { int[,] a; int[,] b; int[,] c;

public void ReadMatrix() { Console.WriteLine("\n Size of Matrix 1:"); Console.Write("\n Enter the number of rows in Matrix 1 :"); int m=int.Parse(Console.ReadLine()); Console.Write("\n Enter the number of columns in Matrix 1 :"); int n=int.Parse(Console.ReadLine()); a=new int[m,n]; Console.WriteLine("\n Enter the elements of Matrix 1:"); for(int i=0;i<a.GetLength(0);i++) { for(int j=0;j<a.GetLength(1);j++) { a[i,j]=int.Parse(Console.ReadLine()); } }

Console.WriteLine("\n Size of Matrix 2 :"); Console.Write("\n Enter the number of rows in Matrix 2 :"); m=int.Parse(Console.ReadLine()); Console.Write("\n Enter the number of columns in Matrix 2 :"); n=int.Parse(Console.ReadLine()); b=new int[m,n]; Console.WriteLine("\n Enter the elements of Matrix 2:"); for(int i=0;i<b.GetLength(0);i++) { for(int j=0;j<b.GetLength(1);j++) { b[i,j]=int.Parse(Console.ReadLine()); } } }

public void PrintMatrix() { Console.WriteLine("\n Matrix 1:"); for(int i=0;i<a.GetLength(0);i++) { for(int j=0;j<a.GetLength(1);j++) { Console.Write("\t"+a[i,j]); } Console.WriteLine(); } Console.WriteLine("\n Matrix 2:"); for(int i=0;i<b.GetLength(0);i++) { for(int j=0;j<b.GetLength(1);j++) { Console.Write("\t"+b[i,j]); } Console.WriteLine(); } Console.WriteLine("\n Resultant Matrix after multiplying Matrix 1 & Matrix 2:"); for(int i=0;i<c.GetLength(0);i++) { for(int j=0;j<c.GetLength(1);j++) { Console.Write("\t"+c[i,j]); } Console.WriteLine(); }

} public void MultiplyMatrix() { if(a.GetLength(1)==b.GetLength(0)) { c=new int[a.GetLength(0),b.GetLength(1)]; for(int i=0;i<c.GetLength(0);i++) { for(int j=0;j<c.GetLength(1);j++) { c[i,j]=0; for(int k=0;k<a.GetLength(1);k++) // OR k<b.GetLength(0) c[i,j]=c[i,j]+a[i,k]*b[k,j]; } } } else { Console.WriteLine("\n Number of columns in Matrix1 is not equal to Number of rows in Matrix2."); Console.WriteLine("\n Therefore Multiplication of Matrix1 with Matrix2 is not possible"); Environment.Exit(-1); } } } class Matrices { public static void Main() { MatrixMultiplication MM=new MatrixMultiplication(); MM.ReadMatrix(); MM.MultiplyMatrix(); MM.PrintMatrix(); } }

[edit] VB

[edit] Python

[edit] Ruby

[edit] Javascript

[edit] Java

[edit] Squeak / Smalltalk

[edit] Scheme / Lisp

[edit] C

Single Dimension arrays in C

Rate this article:
Share this article: