fCmplxSVD.h

Go to the documentation of this file.
00001 /*
00002 
00003 Copyright (C) 1994-2012 John W. Eaton
00004 
00005 This file is part of Octave.
00006 
00007 Octave is free software; you can redistribute it and/or modify it
00008 under the terms of the GNU General Public License as published by the
00009 Free Software Foundation; either version 3 of the License, or (at your
00010 option) any later version.
00011 
00012 Octave is distributed in the hope that it will be useful, but WITHOUT
00013 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
00015 for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Octave; see the file COPYING.  If not, see
00019 <http://www.gnu.org/licenses/>.
00020 
00021 */
00022 
00023 #if !defined (octave_FloatComplexSVD_h)
00024 #define octave_FloatComplexSVD_h 1
00025 
00026 #include <iosfwd>
00027 
00028 #include "fDiagMatrix.h"
00029 #include "fCMatrix.h"
00030 #include "dbleSVD.h"
00031 
00032 class
00033 OCTAVE_API
00034 FloatComplexSVD
00035 {
00036 public:
00037 
00038   FloatComplexSVD (void)
00039     : type_computed (), sigma (), left_sm (), right_sm ()
00040     { }
00041 
00042   FloatComplexSVD (const FloatComplexMatrix& a,
00043                    SVD::type svd_type = SVD::std,
00044                    SVD::driver svd_driver = SVD::GESVD)
00045     : type_computed (), sigma (), left_sm (), right_sm ()
00046     {
00047       init (a, svd_type, svd_driver);
00048     }
00049 
00050   FloatComplexSVD (const FloatComplexMatrix& a, octave_idx_type& info,
00051                    SVD::type svd_type = SVD::std,
00052                    SVD::driver svd_driver = SVD::GESVD)
00053     : type_computed (), sigma (), left_sm (), right_sm ()
00054     {
00055       info = init (a, svd_type, svd_driver);
00056     }
00057 
00058   FloatComplexSVD (const FloatComplexSVD& a)
00059     : type_computed (a.type_computed), sigma (a.sigma),
00060       left_sm (a.left_sm), right_sm (a.right_sm)
00061     { }
00062 
00063   FloatComplexSVD& operator = (const FloatComplexSVD& a)
00064     {
00065       if (this != &a)
00066         {
00067           type_computed = a.type_computed;
00068           sigma = a.sigma;
00069           left_sm = a.left_sm;
00070           right_sm = a.right_sm;
00071         }
00072       return *this;
00073     }
00074 
00075   ~FloatComplexSVD (void) { }
00076 
00077   FloatDiagMatrix singular_values (void) const { return sigma; }
00078 
00079   FloatComplexMatrix left_singular_matrix (void) const;
00080 
00081   FloatComplexMatrix right_singular_matrix (void) const;
00082 
00083   friend std::ostream&  operator << (std::ostream& os, const FloatComplexSVD& a);
00084 
00085 private:
00086 
00087   SVD::type type_computed;
00088 
00089   FloatDiagMatrix sigma;
00090   FloatComplexMatrix left_sm;
00091   FloatComplexMatrix right_sm;
00092 
00093   octave_idx_type init (const FloatComplexMatrix& a,
00094                         SVD::type svd_type = SVD::std,
00095                         SVD::driver svd_driver = SVD::GESVD);
00096 };
00097 
00098 #endif
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines