matrix.h

小矩阵的加、减、乘、除、求逆等操作,由于均为小型数组操作,所有函数均为内联函数

Author

Zhu Dengda (zhudengda@mail.iggcas.ac.cn)

Date

2024-07-24

Defines

GRT_INIT_ZERO_2x2_MATRIX

初始化复数0矩阵

GRT_INIT_IDENTITY_2x2_MATRIX

初始化复数单位阵

Functions

inline int grt_cmat2x2_inv(const cplx_t M[2][2], cplx_t invM[2][2])

计算2x2复矩阵的逆

参数:
  • M[in] 原矩阵

  • invM[out] 逆矩阵

返回:

状态代码,是否有除零错误,非0为异常值

inline void grt_cmat2x2_add(const cplx_t M1[2][2], const cplx_t M2[2][2], cplx_t M[2][2])

计算2x2复矩阵的和

参数:
  • M1[in] 矩阵1

  • M2[in] 矩阵2

  • M[out] 和矩阵

inline void grt_cmat2x2_sub(const cplx_t M1[2][2], const cplx_t M2[2][2], cplx_t M[2][2])

计算2x2复矩阵的差

参数:
  • M1[in] 矩阵1

  • M2[in] 矩阵2

  • M[out] 差矩阵, M1 - M2

inline void grt_cmat2x2_one_sub(cplx_t M[2][2])

计算单位阵与2x2复矩阵的差

参数:

M[inout] 差矩阵 I-M2

inline void grt_cmat2x2_mul(const cplx_t M1[2][2], const cplx_t M2[2][2], cplx_t M[2][2])

计算2x2复矩阵的积(矩阵相乘)

参数:
  • M1[in] 矩阵1

  • M2[in] 矩阵2

  • M[out] 积矩阵, M1 * M2

inline void grt_cmat2x2_k(const cplx_t M1[2][2], cplx_t k0, cplx_t M[2][2])

计算2x2复矩阵和常量的积

参数:
  • M1[in] 矩阵1

  • k[in] 常数

  • M[out] 积矩阵, k * M2

inline void grt_cmat2x1_mul(const cplx_t M1[2][2], const cplx_t M2[2], cplx_t M[2])

计算2x2复矩阵和2x1的复向量的积

参数:
  • M1[in] 矩阵1

  • M2[in] 向量

  • M[out] 积矩阵, M1 * M2

inline void grt_cmat2x2_assign(const cplx_t M1[2][2], cplx_t M2[2][2])

2x2复矩阵赋值

参数:
  • M1[in] 源矩阵

  • M2[out] 目标矩阵

inline void grt_cmatmxn_mul(size_t m1, size_t n1, size_t p1, const cplx_t M1[m1][n1], const cplx_t M2[n1][p1], cplx_t M[m1][p1])

计算mxn复矩阵的积(小矩阵)(最暴力的方式)

参数:
  • m1[in] M1矩阵行数

  • n1[in] M1矩阵列数

  • p1[in] M2矩阵列数

  • M1[in] M1矩阵

  • M2[in] M2矩阵

  • M[out] 积矩阵 M1 * M2

inline void grt_cmatmxn_transpose(size_t m1, size_t n1, const cplx_t M1[m1][n1], cplx_t M2[n1][m1])

计算mxn复矩阵的转置矩阵(不共轭)

参数:
  • m1[in] M1矩阵行数

  • n1[in] M1矩阵列数

  • M1[in] M1矩阵

  • M2[out] M2矩阵 (M1^T)

inline void grt_cmatmxn_block(size_t m1, size_t n1, const cplx_t M[m1][n1], size_t im, size_t in, size_t lm, size_t ln, cplx_t Q[lm][ln])

从M1大矩阵中划分Q子矩阵

参数:
  • m1[in] M1矩阵行数

  • n1[in] M1矩阵列数

  • M1[in] M1矩阵

  • im[in] 子矩阵起始行索引

  • in[in] 子矩阵起始列索引

  • lm[in] 子矩阵行数

  • ln[in] 子矩阵列数

  • Q[out] 子矩阵

inline void grt_cmatmxn_block_assign(size_t m1, size_t n1, cplx_t M[m1][n1], size_t im, size_t in, size_t lm, size_t ln, const cplx_t Q[lm][ln])

将小矩阵Q填充到M1大矩阵中

参数:
  • m1[in] M1矩阵行数

  • n1[in] M1矩阵列数

  • M1[in] M1矩阵

  • im[in] 子矩阵起始行索引

  • in[in] 子矩阵起始列索引

  • lm[in] 子矩阵行数

  • ln[in] 子矩阵列数

  • Q[out] 子矩阵

inline void grt_cmatmxn_print(size_t m1, size_t n1, const cplx_t M1[m1][n1])

打印矩阵

参数:
  • m1[in] M1矩阵行数

  • n1[in] M1矩阵列数

  • M1[in] M1矩阵

inline void grt_cmatmx1_mul(size_t m1, size_t n1, const cplx_t M1[m1][n1], const cplx_t M2[n1], cplx_t M[n1])

计算mxn复矩阵和nx1的复向量的积

参数:
  • M1[in] 矩阵1

  • M2[in] 向量

  • M[out] 积矩阵, M1 * M2