C program to find the determinant of n by n matrix.
Read more at http://www.brainyquote.com/quotes/authors/a/albert_einstein.html#Ib4lbZ3qWL8wS7TE.9
“You cannot teach a man anything; you can only help him discover it in himself.” -GalileoThis program calculates the determinant of the matrix by using co-factor method which I read in my high school. It utilizes recursion also.
Here are some snapshot of the program.
Source Code:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#define clrscr() system("cls");
#define TRUE 1
#define FALSE 0
double det(double **m, int order);
void minor(double **m, int order, int row, int col, double **f_m);
int main(){
int i,j,order;
double **m,deter;
printf("\n Enter the order of the matrix : ");
scanf(" %d", &order);
//Creating the array of above order.
m=(double **) malloc(order * sizeof(double));
for(i=0;i<order;i++){
m[i]=(double *) malloc(order * sizeof(double));
}
//Storing each element of the matrix in the array
for(i=0;i<order;i++){
for(j=0;j<order;j++){
printf("\n Element [%d][%d] : ",i+1,j+1);
scanf(" %lg",&m[i][j]);
}
}
//clrscr();
deter=det(m,order); //deter holds the determinant of the given matrix i.e. m
//Printing the matrix elements
for(i=0;i<order;i++){
for(j=0;j<order;j++){
printf("\t%lg",m[i][j]);
}
printf("\n");
}
//Freeing up the memory allocated for matrix i.e. m
for(i=0;i<order;i++){
free(m[i]);
}
free(m);
printf("\n\n Determinant = %lg",deter);
getch();
}
double det(double **m, int order){
double **x, d=0;
int i;
if (order==2){
d=m[0][0]*m[1][1] - m[0][1]*m[1][0]; //Calculating the determinant of 2 by 2 matrix.
} else {
x=(double **) malloc((order-1) * sizeof(double));
for(i=0;i<order-1;i++){
x[i]=(double *) malloc((order-1) * sizeof(double));
}
for(i=0;i<order;i++){
minor(m,order,0,i,x); //Calculating the minor of m[0][i] and storing it in x matrix.
d=d + pow(-1,1+(i+1)) * m[0][i] * det(x,order-1); //Calculating determinant of the matrix m. Here," pow(-1,1+(i+1)) * m[0][i] * det(x,order-1) " is the co-factor of m[0][i].
}
for(i=0;i<order-1;i++){
free(x[i]);
}
free(x);
}
return(d);
}
void minor(double **m, int order, int row, int col, double **f_m){
int i,j,a=0,b=0;
//f_m stores the minor of m
for(i=0;i<order;i++){
for(j=0;j<order;j++){
if(row!=i && col!=j){
f_m[a][b]=m[i][j];
b++;
if(b>=order-1){ b=0; a++; }
}
}
}
}
Reference :
[1] http://www.chilimath.com/algebra/advanced/det/more-examples-determinant-3x3.html
[2] http://www.eskimo.com/~scs/cclass/int/sx8.html
Comments
Post a Comment