 
 
 
 
 
 
 
  
 and
 and  together, obtaining the sum
 together, obtaining the sum
 , use the routine
, use the routine
      Gan_Matrix mA, mB, mC; /* declare matrices A, B and C */
      /* ... create and fill mA & mB, create mC ... */
      gan_mat_add_q ( &mA, &mB, &mC ); /* compute C = A + B */
Again matrix  is reallocated if necessary. Matrices
 is reallocated if necessary. Matrices  and
 and
 must of course be the same size, or the error handler is invoked
and NULL is returned. The sum matrix
 must of course be the same size, or the error handler is invoked
and NULL is returned. The sum matrix  may be create from scratch
using
 may be create from scratch
using
      Gan_Matrix *pmC; /* declare matrix C as pointer */
      /* ... create and fill mA & mB ... */
      pmC = gan_mat_add_s ( &mA, &mB ); /* compute C = A + B */
Another way of computing matrix addition is to replace one of the input
matrix  or
 or  with the result, using one of the in-place routines
 with the result, using one of the in-place routines
      gan_mat_add_i1 ( &mA, &mB ); /* replace A = A + B */
      gan_mat_add_i2 ( &mA, &mB ); /* replace B = A + B */
An alternative to gan_mat_add_i1() is the more explicit routine
      gan_mat_increment ( &mA, &mB ); /* replace A = A + B */
There is also a set of routines for adding a general size matrix to the transpose of another:
      Gan_Matrix mA, mB, mC, *pmC; /* declare matrices A, B and C */
      /* ... create and fill A & B, create C ... */
      /* B must have the same number of columns as A has rows, and vice versa */
      gan_mat_addT_q ( &mA, &mB, &mC ); /* compute C = A + B^T, OR */
      pmC = gan_mat_addT_s ( &mA, &mB ); /* compute C = A + B^T, OR */
      gan_mat_incrementT ( &mA, &mB ); /* replace A = A + B^T */
Another set of routines allows you to add two matrices and generate a symmetric matrix, on the assumption that the result is indeed symmetric. Either matrix may be implicitly transposed for the purpose of the operation:
      Gan_Matrix mA, mB; /* declare matrices A, B */
      Gan_SquMatrix smS, *psmS; /* declare result matrix S */
      /* ... create and fill A & B, create S ... */
      /* for these functions, B must have the same number of columns and rows as A */
      gan_mat_add_sym_q ( &mA, &mB, &smS ); /* S = A + B, OR */
      psmS = gan_mat_add_sym_s ( &mA, &mB ); /* S = A + B */
      gan_matT_addT_sym_q ( &mA, &mB, &smS ); /* S = A^T + B^T, OR */
      psmS = gan_matT_addT_sym_s ( &mA, &mB ); /* S = A^T + B^T */
      /* here B must have the same number of columns as A has rows, and vice versa */
      gan_mat_addT_sym_q ( &mA, &mB, &smS ); /* S = A + B^T, OR */
      psmS = gan_mat_addT_sym_s ( &mA, &mB ); /* S = A + B^T */
      gan_matT_add_sym_q ( &mA, &mB, &smS ); /* S = A^T + B, OR */
      psmS = gan_matT_add_sym_s ( &mA, &mB ); /* S = A^T + B */
Finally we have some routines for adding a matrix to its own transpose, producing a symmetric matrix:
      Gan_Matrix mA; /* declare matrix A */
      Gan_SquMatrix smS, *psmS; /* declare result matrix S */
      /* ... create and fill A, create S ... */
      gan_mat_saddT_sym_q ( &mA, &smS ); /* S = A + A^T, OR */
      psmS = gan_mat_saddT_sym_s ( &mA ); /* S = A + A^T */
There are equivalent functions for square matrices. Firstly the simple routines for adding two matrices:
      Gan_SquMatrix smA, smB, smC, *psmC; /* declare matrices A, B & C */
      /* ... create and fill smA & smB, create smC ... */
      gan_squmat_add_q ( &smA, &smB, &smC ); /* compute C = A + B, OR */
      gan_squmat_add_i1 ( &smA, &smB ); /* replace A = A + B, OR */
      gan_squmat_add_i2 ( &smA, &smB ); /* replace B = A + B, OR */
      gan_squmat_increment ( &smA, &smB ); /* replace A = A + B, OR */
      psmC = gan_squmat_add_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_addT_q ( &smA, &smB, &smC ); /* compute C = A + B^T, OR */
      gan_squmat_incrementT ( &smA, &smB ); /* replace A = A + B^T, OR */
      psmC = gan_squmat_addT_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.
 
 
 
 
 
 
