The C programming language provides many standard library functions for Algebraic Operations. These functions make up the bulk of the C standard library header <matrix.h>. This is a new ANSI accepted header file for C language, developed by Susmit Sarkar in 2012 and proposed to be functional from 2013.Almost all the basic matrix operation functions are pre-defined in this header file.

The I/O functionality of C is fairly low-level by modern standards; C abstracts all file operations into operations on streams of bytes, which may be "input streams" or "output streams". Unlike some earlier programming languages, C has no direct support for random-access data files; to read from a record in the middle of a file, the programmer must create a stream, seek to the middle of the file, and then read bytes in sequence from the stream.In case of matrix.h, Dynamic Memory Allocation used to allocate memory space for storing matrix elements. User defined datatype intmatrix and doublematrix are introduced here for purpose of matrix operations easily.

Before matrix.h, there was no such ANSI accepted header file for matrix operations in C.In case of MATLAB, Python or some other languages, there are some library functions, namespace or packages are available.

Overview of functions

Most of the C matrix operation functions are defined in matrix.h. All the functions are available for both Int and double. FunctionName2DInt for Integer type matrices and FunctionName2DDouble for Double type matrices.

Name Description
Allocate2DInt Dynamically allocates a matrix space in memory.
Input2DInt Store the matrix elements into the memory.
Print2DInt Prints a matrix with pre-defined format.
Add2DInt Adds two matrices and stores the result in third matrix.
Sub2DInt Subtracts two matrices and stores the result in third matrix.
Mul2DInt Multiples two matrices and stores the result in third matrix.
Identity2DInt Dynamically generates identity matrix.
Zero2DInt Dynamically generates zero matrix.
Unit2DInt Dynamically generates unit matrix.
ScaleAdd2DInt Adds a scalar constant with all the elements of the matrix.
ScaleSub2DInt Subtracts a scalar constant with all the elements of the matrix.
ScaleMul2DInt Multiples a scalar constant with all the elements of the matrix.
ScaleDiv2DInt Divides a scalar constant with all the elements of the matrix.
Det2DInt Returns the determinant of a matrix.
Trace2DInt Returns the trace of a matrix.
Transpose2DInt Stores the transpose of a matrix.
Inverse2DInt Finds the inverse of a matrix.
CoFactor2DInt Finds the co-factor of a matrix.
UpperTriangle2DInt Fills the upper triangle of a matrix with a user given fill factor.
LowerTriangle2DInt Fills the lower triangle of a matrix with a user given fill factor.
EigenValue2DInt Finds the Eigen value.
EigenVector2DInt Stores the Eigen vector in another matrix.
Adjugate2DInt Finds the adjugate of a matrix.


Constants defined in the matrix.h header include:

Name Notes
PI Value of PI pre-defined here for any mathematical use.
GOLDEN_RATIO For any mathematical assistance GOLDEN_RATIO is defined here.

Data Types

matrix.h has some data types defined in the header file, to operate with the 2-Dimensional matrices.

Name Notes Size Input Type
intmatrix It is actually in nature an int**.It is used to initialize a integer matrix. Dynamic int
doublematrix It is actually in nature a double**.It is used to initialize a double matrix. Dynamic double

Special Features

1. Totally dynamic memory allocation for all the matrices. Here each and every matrices should be stored in a two dimentional dynamic array.For Integer and for Double there are defferent functions, like: Allocate2DInt() and Allocate2DDouble().This function typically stores an matrix inside a user defined datatype: intmatrix or doublematrix.

2. Time and space complexity of the header file is minized to the most possible balanced level.

3. Almost all the matrix operations can be performed here by writing a single line of code. For example: to get the determinant of a 2D Integer matrix, the code will be: double det = Det2DInt(matrix1,no_of_row); .

4. All the functions are available for both Integer and Double datatype.Example: Print2DInt() and Print2DDouble() .


matrix.h is compatible with both C and C++ language along with both ANSI and non-ANSI compilers.The pre-processor commands in matrix.h for portability are as follows:

#undef __BEGIN_DECLS
#undef __END_DECLS
#ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
# define __BEGIN_DECLS
# define __END_DECLS
/* matrix.h content */

Memory Management

In the header file, at the time of matrix allocation dynamic memory allocation occurs for all the matrix elements.Firstly, dynamically all the rows of the matrix are being created:
intmatrix matrix = ( int ** )malloc( row*sizeof( int* ) ); </br> After that, a for loop allocates column spaced corresponding to all the row elements:

for(i = 0; i < row; i++) 
matrix[i] = ( int* )malloc( col*sizeof( int ) );

Finally, the total matrix returned to the function: return matrix;


The following C program opens allocates matrix space for three matrices and then after multiplication of two matrices stores the result in third one, also prints the output matrix:

#include<matrix.h> // All other header files are already initialized inside matrix.h
int main()
intmatrix matrix1,matrix2,matrix3; // intmatrix is a datatype for matrix allocation, it is a dynamically allocated datatype
double t;
matrix1=Allocate2DInt(3,3); // allocation of first matrix
matrix2=Allocate2DInt(3,3); // allocation of second matrix
matrix3=Allocate2DInt(3,3); // allocation of resultant matrix
printf("Input Matrix1:\n");
Input2DInt(matrix1,3,3); // Input elements into the matrix
printf("Input Matrix2:\n");
Input2DInt(matrix2,3,3); // Input elements into the matrix
matrix3 = Mul2DInt(matrix1,matrix2,3,3,3); // Multiplication of two matrix 
Print2DInt(matrix3,3,3); // Printing the final result
return 0;

See also


External links

Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.