Gan_Matrix mA, mB, mC; /* declare matrices x, y and z */ Gan_Matrix *pmC; /* declare matrix z alternatively as pointer */ /* ... create and fill mA & mB, create mC ... */ gan_mat_sub_q ( &mA, &mB, &mC ); /* compute C = A - B */ pmC = gan_mat_sub_s ( &mA, &mB ); /* compute C = A - B */ gan_mat_sub_i1 ( &mA, &mB ); /* replace A = A - B */ gan_mat_sub_i2 ( &mA, &mB ); /* replace B = A - B */ gan_mat_decrement ( &mA, &mB ); /* replace A = A - B */If one of the input matrices is to be implicitly transposed, use instead
Gan_Matrix mA, mB, mC; /* declare matrices x, y and z */ Gan_Matrix *pmC; /* declare matrix z alternatively as pointer */ /* ... create and fill mA & mB, create mC ... */ /* here B must have the same number of columns as A has rows, and vice versa */ gan_mat_subT_q ( &mA, &mB, &mC ); /* compute C = A - B^T */ pmC = gan_mat_subT_s ( &mA, &mB ); /* compute C = A - B^T */ gan_mat_decrementT ( &mA, &mB ); /* replace A = A - B^T */
There are equivalent functions for square matrices. Firstly the simple routines for subtracting two matrices:
Gan_SquMatrix smA, smB, smC, *psmC; /* declare matrices A, B & C */ /* ... create and fill smA & smB, create smC ... */ gan_squmat_sub_q ( &smA, &smB, &smC ); /* compute C = A - B, OR */ gan_squmat_sub_i1 ( &smA, &smB ); /* replace A = A - B, OR */ gan_squmat_sub_i2 ( &smA, &smB ); /* replace B = A - B, OR */ gan_squmat_decrement ( &smA, &smB ); /* replace A = A - B, OR */ psmC = gan_squmat_sub_s ( &smA, &smB ); /* compute C = A - B as new matrix */Other routines implicitly transpose one of the input matrices:
Gan_SquMatrix smA, smB, smC, *psmC; /* declare matrices A, B & C */ /* ... create and fill smA & smB, create smC ... */ gan_squmat_subT_q ( &smA, &smB, &smC ); /* compute C = A - B^T, OR */ gan_squmat_decrementT ( &smA, &smB ); /* replace A = A - B^T, OR */ psmC = gan_squmat_subT_s ( &smA, &smB ); /* compute C = A - B^T as new matrix */
Error detection: NULL is returned and the Gandalf error handler invoked if the matrix addition fails. The most likely failure modes are failing to create/set the result matrix, or size/type incompatibility between the input matrices.