CMSIS-DSP: Matrix Inverse

| CMSIS-DSP Version 1.10.0 CMSIS DSP Software Library

- Main Page
- Usage and Description
- Reference

All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Functions
Matrix Inverse
Matrix Functions

## Functions

arm_status | arm_mat_inverse_f16 (const arm_matrix_instance_f16 *pSrc, arm_matrix_instance_f16 *pDst)
| Floating-point matrix inverse. More...
arm_status | arm_mat_inverse_f32 (const arm_matrix_instance_f32 *pSrc, arm_matrix_instance_f32 *pDst)
| Floating-point matrix inverse. More...
arm_status | arm_mat_inverse_f64 (const arm_matrix_instance_f64 *pSrc, arm_matrix_instance_f64 *pDst)
| Floating-point (64 bit) matrix inverse. More...
arm_status | arm_mat_solve_lower_triangular_f16 (const arm_matrix_instance_f16 *lt, const arm_matrix_instance_f16 *a, arm_matrix_instance_f16 *dst)
| Solve LT . X = A where LT is a lower triangular matrix. More...
arm_status | arm_mat_solve_lower_triangular_f32 (const arm_matrix_instance_f32 *lt, const arm_matrix_instance_f32 *a, arm_matrix_instance_f32 *dst)
| Solve LT . X = A where LT is a lower triangular matrix. More...
arm_status | arm_mat_solve_lower_triangular_f64 (const arm_matrix_instance_f64 *lt, const arm_matrix_instance_f64 *a, arm_matrix_instance_f64 *dst)
| Solve LT . X = A where LT is a lower triangular matrix. More...
arm_status | arm_mat_solve_upper_triangular_f16 (const arm_matrix_instance_f16 *ut, const arm_matrix_instance_f16 *a, arm_matrix_instance_f16 *dst)
| Solve UT . X = A where UT is an upper triangular matrix. More...
arm_status | arm_mat_solve_upper_triangular_f32 (const arm_matrix_instance_f32 *ut, const arm_matrix_instance_f32 *a, arm_matrix_instance_f32 *dst)
| Solve UT . X = A where UT is an upper triangular matrix. More...
arm_status | arm_mat_solve_upper_triangular_f64 (const arm_matrix_instance_f64 *ut, const arm_matrix_instance_f64 *a, arm_matrix_instance_f64 *dst)
| Solve UT . X = A where UT is an upper triangular matrix. More...

## Description

Computes the inverse of a matrix.

The inverse is defined only if the input matrix is square and non-singular (the determinant is non-zero). The function checks that the input and output matrices are square and of the same size.

Matrix inversion is numerically sensitive and the CMSIS DSP library only supports matrix inversion of floating-point matrices.

Algorithm
  The Gauss-Jordan method is used to find the inverse. The algorithm performs a sequence of elementary row-operations until it reduces the input matrix to an identity matrix. Applying the same sequence of elementary row-operations to an identity matrix yields the inverse matrix. If the input matrix is singular, then the algorithm terminates and returns error status `ARM_MATH_SINGULAR`.
  Matrix Inverse of a 3 x 3 matrix using Gauss-Jordan Method

## Function Documentation

arm_status arm_mat_inverse_f16 | ( | const arm_matrix_instance_f16 * | pSrc,
|  | arm_matrix_instance_f16 * | pDst
| ) |  |

Parameters

  [in] | pSrc | points to input matrix structure. The source matrix is modified by the function.
  [out] | pDst | points to output matrix structure

Returns
  execution status
  - ARM_MATH_SUCCESS : Operation successful
  - ARM_MATH_SIZE_MISMATCH : Matrix size check failed
  - ARM_MATH_SINGULAR : Input matrix is found to be singular (non-invertible)

arm_status arm_mat_inverse_f32 | ( | const arm_matrix_instance_f32 * | pSrc,
|  | arm_matrix_instance_f32 * | pDst
| ) |  |

Parameters

  [in] | pSrc | points to input matrix structure. The source matrix is modified by the function.
  [out] | pDst | points to output matrix structure

Returns
  execution status
  - ARM_MATH_SUCCESS : Operation successful
  - ARM_MATH_SIZE_MISMATCH : Matrix size check failed
  - ARM_MATH_SINGULAR : Input matrix is found to be singular (non-invertible)

arm_status arm_mat_inverse_f64 | ( | const arm_matrix_instance_f64 * | pSrc,
|  | arm_matrix_instance_f64 * | pDst
| ) |  |

Floating-point matrix inverse.

Parameters

  [in] | pSrc | points to input matrix structure. The source matrix is modified by the function.
  [out] | pDst | points to output matrix structure

Returns
  execution status
  - ARM_MATH_SUCCESS : Operation successful
  - ARM_MATH_SIZE_MISMATCH : Matrix size check failed
  - ARM_MATH_SINGULAR : Input matrix is found to be singular (non-invertible)

arm_status arm_mat_solve_lower_triangular_f16 | ( | const arm_matrix_instance_f16 * | lt,
|  | const arm_matrix_instance_f16 * | a,
|  | arm_matrix_instance_f16 * | dst
| ) |  |

Parameters

  [in] | lt | The lower triangular matrix
  [in] | a | The matrix a
  [out] | dst | The solution X of LT . X = A

Returns
  The function returns ARM_MATH_SINGULAR, if the system can't be solved.

arm_status arm_mat_solve_lower_triangular_f32 | ( | const arm_matrix_instance_f32 * | lt,
|  | const arm_matrix_instance_f32 * | a,
|  | arm_matrix_instance_f32 * | dst
| ) |  |

Parameters

  [in] | lt | The lower triangular matrix
  [in] | a | The matrix a
  [out] | dst | The solution X of LT . X = A

Returns
  The function returns ARM_MATH_SINGULAR, if the system can't be solved.

arm_status arm_mat_solve_lower_triangular_f64 | ( | const arm_matrix_instance_f64 * | lt,
|  | const arm_matrix_instance_f64 * | a,
|  | arm_matrix_instance_f64 * | dst
| ) |  |

Parameters

  [in] | lt | The lower triangular matrix
  [in] | a | The matrix a
  [out] | dst | The solution X of LT . X = A

Returns
  The function returns ARM_MATH_SINGULAR, if the system can't be solved.

arm_status arm_mat_solve_upper_triangular_f16 | ( | const arm_matrix_instance_f16 * | ut,
|  | const arm_matrix_instance_f16 * | a,
|  | arm_matrix_instance_f16 * | dst
| ) |  |

Parameters

  [in] | ut | The upper triangular matrix
  [in] | a | The matrix a
  [out] | dst | The solution X of UT . X = A

Returns
  The function returns ARM_MATH_SINGULAR, if the system can't be solved.

arm_status arm_mat_solve_upper_triangular_f32 | ( | const arm_matrix_instance_f32 * | ut,
|  | const arm_matrix_instance_f32 * | a,
|  | arm_matrix_instance_f32 * | dst
| ) |  |

Parameters

  [in] | ut | The upper triangular matrix
  [in] | a | The matrix a
  [out] | dst | The solution X of UT . X = A

Returns
  The function returns ARM_MATH_SINGULAR, if the system can't be solved.

arm_status arm_mat_solve_upper_triangular_f64 | ( | const arm_matrix_instance_f64 * | ut,
|  | const arm_matrix_instance_f64 * | a,
|  | arm_matrix_instance_f64 * | dst
| ) |  |

Parameters

  [in] | ut | The upper triangular matrix
  [in] | a | The matrix a
  [out] | dst | The solution X of UT . X = A

Returns
  The function returns ARM_MATH_SINGULAR, if the system can't be solved.