Mercurial > hg > octave-nkf
diff liboctave/fCDiagMatrix.cc @ 8371:c3f7e2549abb
make det & inv aware of diagonal & permutation matrices
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Thu, 04 Dec 2008 12:03:45 +0100 |
parents | 8b1a2555c4e2 |
children | e3c9102431a9 |
line wrap: on
line diff
--- a/liboctave/fCDiagMatrix.cc +++ b/liboctave/fCDiagMatrix.cc @@ -591,6 +591,33 @@ return d; } +FloatComplexDET +FloatComplexDiagMatrix::determinant (void) const +{ + FloatComplexDET det (1.0f); + if (rows () != cols ()) + { + (*current_liboctave_error_handler) ("determinant requires square matrix"); + det = FloatComplexDET (0.0); + } + else + { + octave_idx_type len = length (); + for (octave_idx_type i = 0; i < len; i++) + det *= elem (i, i); + } + + return det; +} + +float +FloatComplexDiagMatrix::rcond (void) const +{ + FloatColumnVector av = diag (0).map (std::abs); + float amx = av.max (), amn = av.min (); + return amx == 0 ? 0.0f : amn / amx; +} + // i/o std::ostream&