GNU Octave  9.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
fCDiagMatrix.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (C) 1994-2024 The Octave Project Developers
4 //
5 // See the file COPYRIGHT.md in the top-level directory of this
6 // distribution or <https://octave.org/copyright/>.
7 //
8 // This file is part of Octave.
9 //
10 // Octave is free software: you can redistribute it and/or modify it
11 // under the terms of the GNU General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // Octave is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with Octave; see the file COPYING. If not, see
22 // <https://www.gnu.org/licenses/>.
23 //
24 ////////////////////////////////////////////////////////////////////////
25 
26 #if ! defined (octave_fCDiagMatrix_h)
27 #define octave_fCDiagMatrix_h 1
28 
29 #include "octave-config.h"
30 
31 #include "DET.h"
32 #include "MDiagArray2.h"
33 #include "fCColVector.h"
34 #include "fCRowVector.h"
35 #include "fColVector.h"
36 #include "fRowVector.h"
37 #include "mx-defs.h"
38 
39 class
42 {
43 public:
44 
46 
47  typedef float real_elt_type;
50 
51  FloatComplexDiagMatrix () = default;
52 
54 
55  FloatComplexDiagMatrix& operator = (const FloatComplexDiagMatrix& a) = default;
56 
58 
61  : MDiagArray2<FloatComplex> (r, c) { }
62 
64  const FloatComplex& val)
65  : MDiagArray2<FloatComplex> (r, c, val) { }
66 
68  : MDiagArray2<FloatComplex> (a) { }
69 
72  : MDiagArray2<FloatComplex> (a, r, c) { }
73 
76 
78 
80  : MDiagArray2<FloatComplex> (a) { }
81 
82  template <typename U>
84  : MDiagArray2<FloatComplex> (a) { }
85 
86  OCTAVE_API bool operator == (const FloatComplexDiagMatrix& a) const;
87  OCTAVE_API bool operator != (const FloatComplexDiagMatrix& a) const;
88 
89  OCTAVE_API FloatComplexDiagMatrix& fill (float val);
92  fill (float val, octave_idx_type beg, octave_idx_type end);
94  fill (const FloatComplex& val, octave_idx_type beg, octave_idx_type end);
100  fill (const FloatColumnVector& a, octave_idx_type beg);
102  fill (const FloatComplexColumnVector& a, octave_idx_type beg);
104  fill (const FloatRowVector& a, octave_idx_type beg);
106  fill (const FloatComplexRowVector& a, octave_idx_type beg);
107 
112  OCTAVE_API FloatDiagMatrix abs () const;
113 
115  conj (const FloatComplexDiagMatrix& a);
116 
117  // resize is the destructive analog for this one
118 
120  extract (octave_idx_type r1, octave_idx_type c1,
121  octave_idx_type r2, octave_idx_type c2) const;
122 
123  // extract row or column i
124 
126  OCTAVE_API FloatComplexRowVector row (char *s) const;
127 
129  OCTAVE_API FloatComplexColumnVector column (char *s) const;
130 
131  OCTAVE_API FloatComplexDiagMatrix inverse (octave_idx_type& info) const;
132  OCTAVE_API FloatComplexDiagMatrix inverse () const;
133  OCTAVE_API FloatComplexDiagMatrix pseudo_inverse (float tol = 0.0f) const;
134 
135  OCTAVE_API bool all_elements_are_real () const;
136 
137  // diagonal matrix by diagonal matrix -> diagonal matrix operations
138 
141 
142  // other operations
143 
146 
147  OCTAVE_API FloatComplexDET determinant () const;
148  OCTAVE_API float rcond () const;
149 
150  // i/o
151 
152  friend OCTAVE_API std::ostream&
153  operator << (std::ostream& os, const FloatComplexDiagMatrix& a);
154 
155 };
156 
158 
159 // diagonal matrix by diagonal matrix -> diagonal matrix operations
160 
163 
166 
169 
171 
172 #endif
template std::ostream & operator<<(std::ostream &, const Array< bool > &)
ComplexColumnVector operator+=(ComplexColumnVector &x, const Complex &y)
Definition: CColVector.h:158
ComplexColumnVector operator-=(ComplexColumnVector &x, const Complex &y)
Definition: CColVector.h:158
#define MDIAGARRAY2_FORWARD_DEFS(B, R, T)
Definition: MDiagArray2.h:132
N Dimensional Array with copy-on-write semantics.
Definition: Array.h:130
Array< T > extract_diag(octave_idx_type k=0) const
Definition: DiagArray2.cc:50
FloatComplexDiagMatrix transpose() const
Definition: fCDiagMatrix.h:110
~FloatComplexDiagMatrix()=default
FloatComplex element_type
Definition: fCDiagMatrix.h:49
FloatComplexDiagMatrix(const Array< float > &a)
Definition: fCDiagMatrix.h:74
FloatComplexColumnVector extract_diag(octave_idx_type k=0) const
Definition: fCDiagMatrix.h:144
FloatComplexDiagMatrix(octave_idx_type r, octave_idx_type c)
Definition: fCDiagMatrix.h:59
FloatComplexDiagMatrix(const FloatComplexDiagMatrix &a)=default
FloatComplexDiagMatrix(const Array< FloatComplex > &a, octave_idx_type r, octave_idx_type c)
Definition: fCDiagMatrix.h:70
FloatComplexDiagMatrix hermitian() const
Definition: fCDiagMatrix.h:108
FloatComplex complex_elt_type
Definition: fCDiagMatrix.h:48
FloatComplexDiagMatrix(const MDiagArray2< FloatComplex > &a)
Definition: fCDiagMatrix.h:79
FloatComplexDiagMatrix(const DiagArray2< U > &a)
Definition: fCDiagMatrix.h:83
FloatComplexMatrix full_matrix_type
Definition: fCDiagMatrix.h:45
FloatComplexDiagMatrix(const Array< FloatComplex > &a)
Definition: fCDiagMatrix.h:67
FloatComplexDiagMatrix(octave_idx_type r, octave_idx_type c, const FloatComplex &val)
Definition: fCDiagMatrix.h:63
FloatComplexDiagMatrix()=default
MDiagArray2< T > transpose() const
Definition: MDiagArray2.h:106
MDiagArray2< T > hermitian(T(*fcn)(const T &)=nullptr) const
Definition: MDiagArray2.h:107
Definition: DET.h:39
bool operator!=(const dim_vector &a, const dim_vector &b)
Definition: dim-vector.h:536
bool operator==(const dim_vector &a, const dim_vector &b)
Definition: dim-vector.h:520
FloatComplexDiagMatrix conj(const FloatComplexDiagMatrix &a)
FloatComplexDiagMatrix operator*(const FloatComplexDiagMatrix &a, const FloatComplexDiagMatrix &b)
#define OCTAVE_API
Definition: main.cc:55
T * r
Definition: mx-inlines.cc:781
std::complex< float > FloatComplex
Definition: oct-cmplx.h:34
template int8_t abs(int8_t)