Example: Matrix multiplication

Published 2008-12-15 | Author: Alain Matthes

Illustration of how to compute the product of two matrices.

Source:Altermundus.com

Download as: [PDF] [TEX]

Matrix multiplication

Do you have a question regarding this example, TikZ or LaTeX in general? Just ask in the LaTeX Forum.
Oder frag auf Deutsch auf TeXwelt.de. En français: TeXnique.fr.

% Author : Alain Matthes
% Source : http://altermundus.com/pages/examples.html
\documentclass[]{article}
\usepackage[utf8]{inputenc}
\usepackage[upright]{fourier}
\usepackage{tikz}
\usetikzlibrary{matrix,arrows,decorations.pathmorphing}
\usepackage{verbatim}
\begin{document}
% l' unite
\newcommand{\myunit}{1 cm}
\tikzset{
node style sp/.style={draw,circle,minimum size=\myunit},
node style ge/.style={circle,minimum size=\myunit},
arrow style mul/.style={draw,sloped,midway,fill=white},
arrow style plus/.style={midway,sloped,fill=white},
}
\begin{tikzpicture}[>=latex]
% les matrices
\matrix (A) [matrix of math nodes,
nodes = {node style ge},
left delimiter = (,
right delimiter = )] at (0,0)
{
a_{11} & a_{12} & \ldots & a_{1p} \\
|[node style sp]| a_{21}
& |[node style sp]| a_{22}
& \ldots
& |[node style sp]| a_{2p} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \ldots & a_{np} \\
};
\node [draw,below=10pt] at (A.south)
{ $A$ : \textcolor{red}{$n$ rows} $p$ columns};
\matrix (B) [matrix of math nodes,
nodes = {node style ge},
left delimiter = (,
right delimiter = )] at (6*\myunit,6*\myunit)
{
b_{11} & |[node style sp]| b_{12}
& \ldots & b_{1q} \\
b_{21} & |[node style sp]| b_{22}
& \ldots & b_{2q} \\
\vdots & \vdots & \ddots & \vdots \\
b_{p1} & |[node style sp]| b_{p2}
& \ldots & b_{pq} \\
};
\node [draw,above=10pt] at (B.north)
{ $B$ : $p$ rows \textcolor{red}{$q$ columns}};
% matrice résultat
\matrix (C) [matrix of math nodes,
nodes = {node style ge},
left delimiter = (,
right delimiter = )] at (6*\myunit,0)
{
c_{11} & c_{12} & \ldots & c_{1q} \\
c_{21} & |[node style sp,red]| c_{22}
& \ldots & c_{2q} \\
\vdots & \vdots & \ddots & \vdots \\
c_{n1} & c_{n2} & \ldots & c_{nq} \\
};
% les fleches
\draw[blue] (A-2-1.north) -- (C-2-2.north);
\draw[blue] (A-2-1.south) -- (C-2-2.south);
\draw[blue] (B-1-2.west) -- (C-2-2.west);
\draw[blue] (B-1-2.east) -- (C-2-2.east);
\draw[<->,red](A-2-1) to[in=180,out=90]
node[arrow style mul] (x) {$a_{21}\times b_{12}$} (B-1-2);
\draw[<->,red](A-2-2) to[in=180,out=90]
node[arrow style mul] (y) {$a_{22}\times b_{22}$} (B-2-2);
\draw[<->,red](A-2-4) to[in=180,out=90]
node[arrow style mul] (z) {$a_{2p}\times b_{p2}$} (B-4-2);
\draw[red,->] (x) to node[arrow style plus] {$+$} (y)%
to node[arrow style plus] {$+\raisebox{.5ex}{\ldots}+$} (z)
to (C-2-2.north west);
\node [draw,below=10pt] at (C.south)
{$ C=A\times B$ : \textcolor{red}{$n$ rows}
\textcolor{red}{$q$ columns}};
\end{tikzpicture}
\begin{tikzpicture}[>=latex]
% unit
% defintion of matrices
\matrix (A) [matrix of math nodes,%
nodes = {node style ge},%
left delimiter = (,%
right delimiter = )] at (0,0)
{%
a_{11} &\ldots & a_{1k} & \ldots & a_{1p} \\
\vdots & \ddots & \vdots & \vdots & \vdots \\
|[node style sp]| a_{i1} & \ldots%
& |[node style sp]| a_{ik}%
& \ldots%
& |[node style sp]| a_{ip} \\
 

Comments

  • #1 Nick Andersen, December 16, 2008 at 4:03 p.m.

    This is a very nice depicturement of the matrix multiplication... Simply love it...

    The only thing i would change is the three lines: \vdots & \vdots & \vdots & \vdots \ I would change them to: \vdots & \vdots & \ddots & \vdots \

    Great!

  • #2 Kjell Magne Fauske, December 17, 2008 at 9:11 p.m.

    Thanks Nick for the comment. Alain Matthes sent me an updated version of the example as well as a variant of the same illustration. I have now updated the example with the changes.

  • #3 Rasmus, January 29, 2009 at 9:46 a.m.

    Really impressive example and a nice illustration of matrix multiplication. Thanks!

  • #4 Kien, March 26, 2012 at 1:36 a.m.

    Hi, I wanted to use your adapation of this matrix multiplication to demonstrate the Nearest Neighbour Algorithm, but I am having troubles with drawing the blue lines in my LaTeX document. I was wondering if you could offer any assistance? Many thanks.

  • #5 Nestor Valles, January 27, 2013 at 6:30 a.m.

    This is called the Falk's scheme

Adding comments is currently not enabled.