Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matrix determinant algorithm C++

I'm new to programming and I was looking for a way to find the determinant of a matrix. I found this code online, but I have trouble understanding the algorithm in place here. I have no problems for the base of the recursion , but the continue and main loop I have trouble understanding. Big thanks to anyone who can explain to me the algorithm.

int determ(int a[MAX][MAX],int n) {
  int det=0, p, h, k, i, j, temp[MAX][MAX];
  if(n==1) {
    return a[0][0];
  } else if(n==2) {
    det=(a[0][0]*a[1][1]-a[0][1]*a[1][0]);
    return det;
  } else {
    for(p=0;p<n;p++) {
      h = 0;
      k = 0;
      for(i=1;i<n;i++) {
        for( j=0;j<n;j++) {
          if(j==p) {
            continue;
          }
          temp[h][k] = a[i][j];
          k++;
          if(k==n-1) {
            h++;
            k = 0;
          }
        }
      }
      det=det+a[0][p]*pow(-1,p)*determ(temp,n-1);
    }
    return det;
  }
}
like image 497
user3144334 Avatar asked Jan 19 '14 18:01

user3144334


People also ask

How do you find the determinant of an algorithm?

The simplest way (and not a bad way, really) to find the determinant of an nxn matrix is by row reduction. By keeping in mind a few simple rules about determinants, we can solve in the form: det(A) = α * det(R), where R is the row echelon form of the original matrix A, and α is some coefficient.

How do you find the determinant of a 3x3 matrix?

To find determinant of 3x3 matrix, you first take the first element of the first row and multiply it by a secondary 2x2 matrix which comes from the elements remaining in the 3x3 matrix that do not belong to the row or column to which your first selected element belongs.

What is matrix program in C?

A matrix is a rectangular array of numbers or symbols arranged in rows and columns. There are different types of matrices like row matrix, column matrix, horizontal matrix, vertical matrix, square matrix, diagonal matrix, identity matrix, equal matrix, singular matrix, etc.


1 Answers

This algorithm uses a divide-conquer approach for solving the problem (finding the determinant of an N*N Matrix).

The algorithm uses a recursive pattern which is one of divide and conquer approaches. You can find out this by noticing the algorithm is calling itself in the third condition statement.

Every recursive algorithm have an exit condition which is the first if-statement in your code. and they also contain a section which is the solution to the most convenient problem or an atomic problem of the main big problem which is hard to solve in the first place. The atomic problem or the most-divided problem can be solved easily as you can see the the second if-statement of your code. In your case it is actually solving the determinant of a 2*2 Matrix.

The most important part of your code to understand which is challenging a little bit too is the part you do the dividing (which is recursive too!). This part has the key to conquering either. By doing a little back trace and numerical examples you can find it out:

det = det + a[0][p] * pow(-1,p) * determ(temp,n-1);

For the final suggestion try a 3*3 Matrix which only needs one dividing. Good luck with that.

This book is a great one to start studying and understanding algorithms

like image 183
Novin Shahroudi Avatar answered Oct 12 '22 10:10

Novin Shahroudi