GNU Octave  3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
fDiagMatrix.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1994-2013 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if !defined (octave_fDiagMatrix_h)
24 #define octave_fDiagMatrix_h 1
25 
26 #include "MDiagArray2.h"
27 
28 #include "fRowVector.h"
29 #include "fColVector.h"
30 #include "DET.h"
31 
32 #include "mx-defs.h"
33 
34 class
35 OCTAVE_API
37 {
38  friend class FloatSVD;
39  friend class FloatComplexSVD;
40 
41 public:
42 
44 
46  : MDiagArray2<float> (r, c) { }
47 
49  : MDiagArray2<float> (r, c, val) { }
50 
52 
54 
55  template <class U>
57 
58  explicit FloatDiagMatrix (const Array<double>& a) : MDiagArray2<float> (a) { }
59 
61  : MDiagArray2<float> (a, r, c) { }
62 
64  {
66  return *this;
67  }
68 
69  bool operator == (const FloatDiagMatrix& a) const;
70  bool operator != (const FloatDiagMatrix& a) const;
71 
72  FloatDiagMatrix& fill (float val);
73  FloatDiagMatrix& fill (float val, octave_idx_type beg, octave_idx_type end);
74  FloatDiagMatrix& fill (const FloatColumnVector& a);
75  FloatDiagMatrix& fill (const FloatRowVector& a);
77  FloatDiagMatrix& fill (const FloatRowVector& a, octave_idx_type beg);
78 
80  { return MDiagArray2<float>::transpose (); }
81 
82  FloatDiagMatrix abs (void) const;
83 
84  friend OCTAVE_API FloatDiagMatrix real (const FloatComplexDiagMatrix& a);
85  friend OCTAVE_API FloatDiagMatrix imag (const FloatComplexDiagMatrix& a);
86 
87  // resize is the destructive analog for this one
88 
91 
92  // extract row or column i.
93 
94  FloatRowVector row (octave_idx_type i) const;
95  FloatRowVector row (char *s) const;
96 
97  FloatColumnVector column (octave_idx_type i) const;
98  FloatColumnVector column (char *s) const;
99 
100  FloatDiagMatrix inverse (void) const;
101  FloatDiagMatrix inverse (octave_idx_type& info) const;
102  FloatDiagMatrix pseudo_inverse (void) const;
103 
104  // other operations
105 
106  FloatColumnVector extract_diag (octave_idx_type k = 0) const
107  { return MDiagArray2<float>::extract_diag (k); }
108 
109  FloatDET determinant (void) const;
110  float rcond (void) const;
111 
112  // i/o
113 
114  friend OCTAVE_API std::ostream& operator << (std::ostream& os,
115  const FloatDiagMatrix& a);
116 
117 };
118 
119 OCTAVE_API FloatDiagMatrix real (const FloatComplexDiagMatrix& a);
120 OCTAVE_API FloatDiagMatrix imag (const FloatComplexDiagMatrix& a);
121 
122 // diagonal matrix by diagonal matrix -> diagonal matrix operations
123 
124 OCTAVE_API FloatDiagMatrix operator * (const FloatDiagMatrix& a,
125  const FloatDiagMatrix& b);
126 
128 
129 #endif