Other Alias

im_matmul, im_mattrn## SYNOPSIS

**#include <vips/vips.h>**

**DOUBLEMASK *im_matinv( const DOUBLEMASK *in, const char *name );**

**int im_matinv_inplace( DOUBLEMASK *mat );**

**DOUBLEMASK *im_matmul( in1, in2, name )**

**DOUBLEMASK *in1, *in2;**

**char *name;**

**DOUBLEMASK *im_matcat( in1, in2, name )**

**DOUBLEMASK *in1, *in2;**

**char *name;**

**DOUBLEMASK *im_mattrn( in, name )**

**DOUBLEMASK *in;**

**char *name;**

## DESCRIPTION

These functions treat DOUBLEMASKs as matricies, performing some of the basics of matrix algebra on them.There should be more matrix functions: those implemeneted are just sufficient for the Gallery's calibration routines. im_matadd, im_matidentity should really be added.

None of these functions damage their arguments, except
**im_matinv_inplace(3)**.

**im_matinv(3)**
inverts DOUBLEMASK
*in*,
returning a new DOUBLEMASK, called
*name*,
which contains the inverse of in. If no inverse exists, NULL is returned and
**im_error(3)**
is called with a diagnostic message.

**im_matinv_inplace(3)**
is as
**im_matinv(3)**
except that it overwrites its input.

**im_matmul()**
multiples the matrices held in in1 and in2, returning their product in a
matrix called name.

**im_matcat()**
returns a new matrix formed by appending matrix in2 to the end of matrix in1.
The two matricies must be the same width. It is useful for combining several
im_measure()s into a single matrix.

**im_mattrn()**
transposes matrix in, returning the transpose in new matrix called name.

## NOTES

**DO NOT**use matrix inversion to solve systems of linear equations (SLEs). The routines

**im_lu_decomp(3)**and

**im_lu_solve(3)**are more efficient, even for a single SLE.

## RETURN VALUE

The functions returns a new DOUBLEMASK on sucess, and NULL on failure.
**im_matinv_inplace(3)**
returns zero on success, and -1 on failure.

## COPYRIGHT

National Gallery, 1992. Tom Vajzovic, 2006## AUTHORS

J. CupittTom Vajzovic