8/09/2008

Compute Determinant of 3x3-Matrix with Sarrus' Method

I wrote a program which computes determinant of 3x3-matrix with Sarrus' Method because someone accessed my blog in order to find a program computing determinant of 3x3-matrix. This program is written in C.

Of course, we can calculate it by Cofactor Expansion, but Sarrus' Method is much easier than it. So, I use Sarrus' Method.

Function to Compute Determinant of Matrix

int det(int a[3][3]) {
  return a[0][0]*a[1][1]*a[2][2]
       + a[0][1]*a[1][2]*a[2][0]
       + a[0][2]*a[1][0]*a[2][1]
       - a[0][2]*a[1][1]*a[2][0]
       - a[1][2]*a[2][1]*a[0][0]
       - a[2][2]*a[0][1]*a[1][0];
}

Main Function for Test

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  int a[3][3], i, j;

  if(argc == 1) {
    a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
    a[1][0] = 4; a[1][1] = 5; a[1][2] = 6;
    a[2][0] = 7; a[2][1] = 8; a[2][2] = 9;
  } else if(argc == 10) {
    for(i=0; i<3; i++)
      for(j=0; j<3; j++)
 a[i][j] = atoi(argv[3*i+j+1]);
  } else {
    printf("Usage:\n");
    printf("./a.out\n");
    printf("   or\n");
    printf("./a.out a11 a12 a13 a21 a22 a23 a31 a32 a33");
  }

  printf("a =\n");
  for(i=0; i<3; i++) {
    for(j=0; j<3; j++) {
      printf("%3d", a[i][j]);
    }
    printf("\n");
  }
  printf("\n");

  printf("det(a) = %d\n", det(a));

  return 0;
}

Output

$ ./det
a =
  1  2  3
  4  5  6
  7  8  9

det(a) = 0
$ ./det 1 6 -2 5 -3 4 -1 -2 4
a =
  1  6 -2
  5 -3  4
 -1 -2  4

det(a) = -122

Main Function for Test(Simple Version)

I prepare simple version of test function for beginners of programming.

#include <stdio.h>

int main(int argc, char *argv[]) {
  int a[3][3];

  a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
  a[1][0] = 4; a[1][1] = 5; a[1][2] = 6;
  a[2][0] = 7; a[2][1] = 8; a[2][2] = 9;

  printf("det(a) = %d\n", det(a));

  return 0;
}

Original Text(Japanese)

No comments: