Mercurial > octave-nkf
diff liboctave/Sparse-op-defs.h @ 5429:2042301733ce
[project @ 2005-08-25 12:21:24 by dbateman]
author | dbateman |
---|---|
date | Thu, 25 Aug 2005 12:21:24 +0000 |
parents | 4c8a2e4e0717 |
children | b4cfbb0ec8c4 |
line wrap: on
line diff
--- a/liboctave/Sparse-op-defs.h Tue Aug 23 18:38:28 2005 +0000 +++ b/liboctave/Sparse-op-defs.h Thu Aug 25 12:21:24 2005 +0000 @@ -1603,6 +1603,67 @@ } \ } +#define SPARSE_FULL_MUL( RET_TYPE, EL_TYPE ) \ + octave_idx_type nr = m.rows (); \ + octave_idx_type nc = m.cols (); \ + \ + octave_idx_type a_nr = a.rows (); \ + octave_idx_type a_nc = a.cols (); \ + \ + if (nc != a_nr) \ + { \ + gripe_nonconformant ("operator *", nr, nc, a_nr, a_nc); \ + return RET_TYPE (); \ + } \ + else \ + { \ + RET_TYPE retval (nr, a_nc, EL_TYPE ()); \ + \ + for (octave_idx_type i = 0; i < a_nc ; i++) \ + { \ + for (octave_idx_type j = 0; j < a_nr; j++) \ + { \ + OCTAVE_QUIT; \ + \ + EL_TYPE tmpval = a.elem(j,i); \ + for (octave_idx_type k = m.cidx(j) ; k < m.cidx(j+1); k++) \ + retval.elem (m.ridx(k),i) += tmpval * m.data(k); \ + } \ + } \ + return retval; \ + } + +#define FULL_SPARSE_MUL( RET_TYPE, EL_TYPE ) \ + octave_idx_type nr = m.rows (); \ + octave_idx_type nc = m.cols (); \ + \ + octave_idx_type a_nr = a.rows (); \ + octave_idx_type a_nc = a.cols (); \ + \ + if (nc != a_nr) \ + { \ + gripe_nonconformant ("operator *", nr, nc, a_nr, a_nc); \ + return RET_TYPE (); \ + } \ + else \ + { \ + RET_TYPE retval (nr, a_nc, EL_TYPE ()); \ + \ + for (octave_idx_type i = 0; i < a_nc ; i++) \ + { \ + for (octave_idx_type j = a.cidx(i); j < a.cidx(i+1); j++) \ + { \ + octave_idx_type col = a.ridx(j); \ + EL_TYPE tmpval = a.data(j); \ + OCTAVE_QUIT; \ + \ + for (octave_idx_type k = 0 ; k < nr; k++) \ + retval.elem (k,i) += tmpval * m.elem(k,col); \ + } \ + } \ + return retval; \ + } + #endif /*