NMat provides several other operations for matrix calculus, such as:
-Finding the minimum/maximum element of a matrix
-Computing the sum/product of all elements of a matrix
-Extracting rows and columns from a matrix into a submatrix
-Computing the arithmetic, geometric and harmonic mean of all elements of a matrix
The prototypes for the functions implementing these operations are:
/*
* Description:
* Finds the minimum element of the matrix
* Parameters:
* mat - a pointer to the matrix
* Returns:
* The minimum element. If an error happened it will return REAL_MAX
*/
real NMatrix_MinElement(const NMatrix* mat);
/*
* Description:
* Finds the maximum element of the matrix
* Parameters:
* mat - a pointer to the matrix
* Returns:
* The maximum element. If an error happened it will return REAL_MIN
*/
real NMatrix_MaxElement(const NMatrix* mat);
/*
* Description:
* Sums up all the elements of the matrix
* Parameters:
* mat - a pointer to the matrix
* Returns:
* The sum of all the elements. If an error happened it will return NAN
*/
real NMatrix_ElementSum(const NMatrix* mat);
/*
* Description:
* Computes the product of all elements in the matrix
* Parameters:
* mat - a pointer to the matrix
* Returns:
* The product of all elements in the matrix. If an error happened it will
* return NAN.
*/
real NMatrix_ElementProduct(const NMatrix* mat);
/*
* Description:
* Computes the number of elements in the matrix
* Parameters:
* mat - a pointer to the matrix
* Returns:
* The number of elements in the matrix. If an error happened it will
* return -1.
*/
integer NMatrix_ElementCount(const NMatrix* mat);
/*
* Description:
* Creates a submatrix of the current matrix
* Parameters:
* mat - a pointer to the matrix
* startRow,endRow - the row delimiters
* startColumn, endColumn - the column delimiters
* Returns:
* The specified submatrix. If an error happened it will return NULL.
*/
NMatrix* NMatrix_Submatrix(const NMatrix* mat,
integer startRow, integer endRow,
integer startColumn, integer endColumn);
/*
* Description:
* Computes the arithmetic mean of all elements
* Parameters:
* mat - a pointer to the matrix
* Returns:
* The arithmetic mean. If an error happened it will return NAN.
*/
real NMatrix_ArithmeticMean(const NMatrix* mat);
/*
* Description:
* Computes the harmonic mean of all elements
* Parameters:
* mat - a pointer to the matrix
* Returns:
* The harmonic mean. If an error happened it will return NAN.
*/
real NMatrix_HarmonicMean(const NMatrix* mat);
/*
* Description:
* Computes the geometric mean of all elements
* Parameters:
* mat - a pointer to the matrix
* Returns:
* The geometric mean. If an error happened it will return NAN.
*/
real NMatrix_GeometricMean(const NMatrix* mat);
Example:#include<stdio.h>
#include"NMatrix.h"
void PrintMatrix(const NMatrix* mat)
{
integer i, j;
for (i = 0; i < mat->rows; ++i)
{
for (j = 0; j < mat->columns; ++j)
{
printf("%+f ", mat->data[i][j]);
}
putchar('\n');
}
}
int main(void)
{
NMatrix *mat = NULL;
NMatrix *smat1 = NULL, *smat2=NULL;
integer i,j;
mat = NMatrix_Create(3,3);
for(i=0; i<mat->rows; i++)
{
for(j=0; j<mat->columns; j++)
{
mat->data[i][j] = (real)(i+j+1);
}
}
puts("The matrix: ");
PrintMatrix(mat);
printf("The smallest element is :%f \n",
NMatrix_MinElement(mat));
printf("The largest element is :%f \n",
NMatrix_MaxElement(mat));
printf("The sum of all elements is :%f \n",
NMatrix_ElementSum(mat));
printf("The product of all elements is :%f \n",
NMatrix_ElementProduct(mat));
printf("The total number of elements is :%d \n",
NMatrix_ElementCount(mat));
printf("The arithmetic mean of all elements is :%f \n",
NMatrix_ArithmeticMean(mat));
printf("The geometric mean of all elements is :%f \n",
NMatrix_GeometricMean(mat));
printf("The harmonic mean of all elements is :%f \n",
NMatrix_HarmonicMean(mat));
/*Will be a column vector containing column 1*/
smat1 = NMatrix_Submatrix(mat,0,2,1,1);
/*Will be a row vector containing only row 0*/
smat2 = NMatrix_Submatrix(mat,0,0,0,2);
puts("Submatrix 1: ");
PrintMatrix(smat1);
puts("Submatrix 2: ");
PrintMatrix(smat2);
return 0;
}
/*Output:
The matrix:
+1.000000 +2.000000 +3.000000
+2.000000 +3.000000 +4.000000
+3.000000 +4.000000 +5.000000
The smallest element is :1.000000
The largest element is :5.000000
The sum of all elements is :27.000000
The product of all elements is :8640.000000
The total number of elements is :9
The arithmetic mean of all elements is :3.000000
The geometric mean of all elements is :2.432432
The harmonic mean of all elements is :2.737729
The matrix:
+2.000000
+3.000000
+4.000000
The matrix:
+1.000000 +2.000000 +3.000000
*/
No comments:
Post a Comment
Got a question regarding something in the article? Leave me a comment and I will get back at you as soon as I can!