Mercurial > hg > octave-lyh
diff liboctave/dColVector.cc @ 1947:5ab3c25a3cf9
[project @ 1996-02-14 01:50:42 by jwe]
author | jwe |
---|---|
date | Wed, 14 Feb 1996 01:50:42 +0000 |
parents | 1281a23a34dd |
children | 1b57120c997b |
line wrap: on
line diff
--- a/liboctave/dColVector.cc +++ b/liboctave/dColVector.cc @@ -210,26 +210,35 @@ ColumnVector operator * (const Matrix& m, const ColumnVector& a) { + ColumnVector retval; + int nr = m.rows (); int nc = m.cols (); + if (nc != a.length ()) + (*current_liboctave_error_handler) + ("nonconformant matrix multiplication attempted"); + else { - (*current_liboctave_error_handler) - ("nonconformant matrix multiplication attempted"); - return ColumnVector (); + if (nr == 0 || nc == 0) + retval.resize (nr, 0.0); + else + { + int ld = nr; + + retval.resize (nr); + double *y = retval.fortran_vec (); + + F77_XFCN (dgemv, DGEMV, ("N", nr, nc, 1.0, m.data (), ld, + a.data (), 1, 0.0, y, 1, 1L)); + + if (f77_exception_encountered) + (*current_liboctave_error_handler) + ("unrecoverable error in dgemv"); + } } - if (nr == 0 || nc == 0) - return ColumnVector (0); - - int ld = nr; - - double *y = new double [nr]; - - F77_FCN (dgemv, DGEMV) ("N", nr, nc, 1.0, m.data (), ld, a.data (), - 1, 0.0, y, 1, 1L); - - return ColumnVector (y, nr); + return retval; } // diagonal matrix by column vector -> column vector operations @@ -237,28 +246,33 @@ ColumnVector operator * (const DiagMatrix& m, const ColumnVector& a) { + ColumnVector retval; + int nr = m.rows (); int nc = m.cols (); + int a_len = a.length (); + if (nc != a_len) + (*current_liboctave_error_handler) + ("nonconformant matrix multiplication attempted"); + else { - (*current_liboctave_error_handler) - ("nonconformant matrix multiplication attempted"); - return ColumnVector (); + if (nr == 0 || nc == 0) + retval.resize (nr, 0.0); + else + { + retval.resize (nr); + + for (int i = 0; i < a_len; i++) + retval.elem (i) = a.elem (i) * m.elem (i, i); + + for (int i = a_len; i < nr; i++) + retval.elem (i) = 0.0; + } } - if (nc == 0 || nr == 0) - return ColumnVector (0); - - ColumnVector result (nr); - - for (int i = 0; i < a_len; i++) - result.elem (i) = a.elem (i) * m.elem (i, i); - - for (int i = a_len; i < nr; i++) - result.elem (i) = 0.0; - - return result; + return retval; } // other operations