20 August, 2008 | Written by Vincent Tan

Matrix multiplication code

The following code is to illustrate the matrix multiplication method mentioned previously. For simplicity sake, I’m limiting the size of the matrices to 3.

const int cnSize = 3;
int[,] A = new int[cnSize, cnSize];
int[,] B = new int[cnSize, cnSize];
int[,] C = new int[cnSize, cnSize];
int[] x = new int[cnSize];
int[] y = new int[cnSize];
Random rand = new Random();
int i, j, k;

// fill matrix and vector with random values
for (i = 0; i < cnSize; ++i)
{
    for (j = 0; j < cnSize; ++j)
    {
        A[i, j] = rand.Next(1, 10);
        B[i, j] = rand.Next(1, 10);
    }
    x[i] = rand.Next(1, 10);
}

// matrix-vector multiplication
for (i = 0; i < cnSize; ++i)
{
    y[i] = 0;
    for (k = 0; k < cnSize; ++k)
    {
        y[i] += A[i, k] * x[k];
    }
}

// matrix-matrix multiplication
for (i = 0; i < cnSize; ++i)
{
    for (j = 0; j < cnSize; ++j)
    {
        C[i, j] = 0;
        for (k = 0; k < cnSize; ++k)
        {
            C[i, j] += A[i, k] * B[k, j];
        }
    }
}

Console.WriteLine("Matrix-vector multiplication");
for (i = 0; i < cnSize; ++i)
{
    Console.Write("[");
    for (j = 0; j < cnSize; ++j)
    {
        Console.Write(" {0}", A[i, j].ToString().PadLeft(3));
    }
    Console.WriteLine("][{0}] {1} [{2}]", x[i].ToString().PadLeft(3), ((cnSize / 2) == i ? "=" : " "), y[i].ToString().PadLeft(3));
}
Console.WriteLine();

Console.WriteLine("Matrix-matrix multiplication");
for (i = 0; i < cnSize; ++i)
{
    Console.Write("[");
    for (j = 0; j < cnSize; ++j)
    {
        Console.Write(" {0}", A[i, j].ToString().PadLeft(3));
    }
    Console.Write("][");
    for (j = 0; j < cnSize; ++j)
    {
        Console.Write(" {0}", B[i, j].ToString().PadLeft(3));
    }
    Console.Write("] {0} [", ((cnSize / 2) == i ? "=" : " "));
    for (j = 0; j < cnSize; ++j)
    {
        Console.Write(" {0}", C[i, j].ToString().PadLeft(3));
    }
    Console.WriteLine("]");
}
Console.WriteLine();

You will notice there’s a lot of nested for loops. Get used to it. Here’s a screenshot of the output:

Matrix multiplication screenshot

Exercise: Explain what this does. (a ternary operator refresher might help)

((cnSize / 2) == i ? "=" : " ")
Enjoyed reading this? Share it!
  • StumbleUpon
  • del.icio.us
  • Reddit
  • Ma.gnolia
  • Pownce
  • TwitThis
  • TailRank
  • Live

Comments

2 Responses to “Matrix multiplication code”

  1. Will Dwinnell on August 22nd, 2008 4:03 am

    This is one thing to like about MATLAB. Matrix multiplication is *easy*! With 2 matrices, matrix multiplication is as easy as:

    C = A * B;

    As we say: “Life is too short for DO loops.”

  2. Vincent Tan on August 22nd, 2008 10:15 pm

    @Will: C = A * B;

    Hey, that’s cheating!! *Real* programmers use loops. *smile*

Leave a Reply