// from mDup.c int dup(ARMat *dest, ARMat *source) { int r, c; assert(dest->row == source->row && dest->clm == source->clm); for (r = 0; r < source->row; r++) { for (c = 0; c < source->clm; c++) { ARELEM0(dest, r, c) = ARELEM0(source, r, c); } } return 0; }
// from mDup.c int dup(ARMat *dest, ARMat *source) { int r, c; if (dest->row != source->row || dest->clm != source->clm) { return -1; } for (r = 0; r < source->row; r++) { for (c = 0; c < source->clm; c++) { ARELEM0(dest, r, c) = ARELEM0(source, r, c); } } return 0; }
// from mMul.c int mul(ARMat *dest, ARMat *a, ARMat *b) { int r, c, i; assert(a->clm == b->row && dest->row == a->row && dest->clm == b->clm); for (r = 0; r < dest->row; r++) { for (c = 0; c < dest->clm; c++) { ARELEM0(dest, r, c) = 0.0; for (i = 0; i < a->clm; i++) { ARELEM0(dest, r, c) += ARELEM0(a, r, i) * ARELEM0(b, i, c); } } } return 0; }
// from mMul.c int mul(ARMat *dest, ARMat *a, ARMat *b) { int r, c, i; if (a->clm != b->row || dest->row != a->row || dest->clm != b->clm) return -1; for (r = 0; r < dest->row; r++) { for (c = 0; c < dest->clm; c++) { ARELEM0(dest, r, c) = 0.0; for (i = 0; i < a->clm; i++) { ARELEM0(dest, r, c) += ARELEM0(a, r, i) * ARELEM0(b, i, c); } } } return 0; }
AR_DLL_API int arMatrixUnit(ARMat *unit) { int r, c; if(unit->row != unit->clm) return -1; for(r = 0; r < unit->row; r++) { for(c = 0; c < unit->clm; c++) { if(r == c) { ARELEM0(unit, r, c) = 1.0; } else { ARELEM0(unit, r, c) = 0.0; } } } return 0; }
int arMatrixDisp(ARMat *m) { int r, c; printf(" === matrix (%d,%d) ===\n", m->row, m->clm); for(r = 0; r < m->row; r++) { printf(" |"); for(c = 0; c < m->clm; c++) { printf(" %10g", ARELEM0(m, r, c)); } printf(" |\n"); } printf(" ======================\n"); return 0; }