3
Copyright (C) 1994-2013 John W. Eaton
5
This file is part of Octave.
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.
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
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/>.
23
#if !defined (octave_CDiagMatrix_h)
24
#define octave_CDiagMatrix_h 1
26
#include "MDiagArray2.h"
28
#include "dRowVector.h"
29
#include "CRowVector.h"
30
#include "dColVector.h"
31
#include "CColVector.h"
38
ComplexDiagMatrix : public MDiagArray2<Complex>
42
ComplexDiagMatrix (void) : MDiagArray2<Complex> () { }
44
ComplexDiagMatrix (octave_idx_type r, octave_idx_type c)
45
: MDiagArray2<Complex> (r, c) { }
47
ComplexDiagMatrix (octave_idx_type r, octave_idx_type c, const Complex& val)
48
: MDiagArray2<Complex> (r, c, val) { }
50
explicit ComplexDiagMatrix (const Array<Complex>& a)
51
: MDiagArray2<Complex> (a) { }
53
explicit ComplexDiagMatrix (const Array<double>& a)
54
: MDiagArray2<Complex> (Array<Complex> (a)) { }
56
ComplexDiagMatrix (const Array<Complex>& a, octave_idx_type r,
58
: MDiagArray2<Complex> (a, r, c) { }
60
explicit ComplexDiagMatrix (const DiagMatrix& a);
62
ComplexDiagMatrix (const MDiagArray2<Complex>& a)
63
: MDiagArray2<Complex> (a) { }
65
ComplexDiagMatrix (const ComplexDiagMatrix& a)
66
: MDiagArray2<Complex> (a) { }
69
ComplexDiagMatrix (const DiagArray2<U>& a)
70
: MDiagArray2<Complex> (a) { }
72
ComplexDiagMatrix& operator = (const ComplexDiagMatrix& a)
74
MDiagArray2<Complex>::operator = (a);
78
bool operator == (const ComplexDiagMatrix& a) const;
79
bool operator != (const ComplexDiagMatrix& a) const;
81
ComplexDiagMatrix& fill (double val);
82
ComplexDiagMatrix& fill (const Complex& val);
83
ComplexDiagMatrix& fill (double val,
84
octave_idx_type beg, octave_idx_type end);
85
ComplexDiagMatrix& fill (const Complex& val,
86
octave_idx_type beg, octave_idx_type end);
87
ComplexDiagMatrix& fill (const ColumnVector& a);
88
ComplexDiagMatrix& fill (const ComplexColumnVector& a);
89
ComplexDiagMatrix& fill (const RowVector& a);
90
ComplexDiagMatrix& fill (const ComplexRowVector& a);
91
ComplexDiagMatrix& fill (const ColumnVector& a, octave_idx_type beg);
92
ComplexDiagMatrix& fill (const ComplexColumnVector& a, octave_idx_type beg);
93
ComplexDiagMatrix& fill (const RowVector& a, octave_idx_type beg);
94
ComplexDiagMatrix& fill (const ComplexRowVector& a, octave_idx_type beg);
96
ComplexDiagMatrix hermitian (void) const
97
{ return MDiagArray2<Complex>::hermitian (std::conj); }
98
ComplexDiagMatrix transpose (void) const
99
{ return MDiagArray2<Complex>::transpose (); }
100
DiagMatrix abs (void) const;
102
friend OCTAVE_API ComplexDiagMatrix conj (const ComplexDiagMatrix& a);
104
// resize is the destructive analog for this one
106
ComplexMatrix extract (octave_idx_type r1, octave_idx_type c1,
107
octave_idx_type r2, octave_idx_type c2) const;
109
// extract row or column i
111
ComplexRowVector row (octave_idx_type i) const;
112
ComplexRowVector row (char *s) const;
114
ComplexColumnVector column (octave_idx_type i) const;
115
ComplexColumnVector column (char *s) const;
117
ComplexDiagMatrix inverse (octave_idx_type& info) const;
118
ComplexDiagMatrix inverse (void) const;
119
ComplexDiagMatrix pseudo_inverse (void) const;
121
bool all_elements_are_real (void) const;
123
// diagonal matrix by diagonal matrix -> diagonal matrix operations
125
ComplexDiagMatrix& operator += (const DiagMatrix& a);
126
ComplexDiagMatrix& operator -= (const DiagMatrix& a);
130
ComplexColumnVector extract_diag (octave_idx_type k = 0) const
131
{ return MDiagArray2<Complex>::extract_diag (k); }
133
ComplexDET determinant (void) const;
134
double rcond (void) const;
138
friend std::ostream& operator << (std::ostream& os,
139
const ComplexDiagMatrix& a);
143
OCTAVE_API ComplexDiagMatrix conj (const ComplexDiagMatrix& a);
145
// diagonal matrix by diagonal matrix -> diagonal matrix operations
147
OCTAVE_API ComplexDiagMatrix
148
operator * (const ComplexDiagMatrix& a, const ComplexDiagMatrix& b);
150
OCTAVE_API ComplexDiagMatrix
151
operator * (const ComplexDiagMatrix& a, const DiagMatrix& b);
153
OCTAVE_API ComplexDiagMatrix
154
operator * (const DiagMatrix& a, const ComplexDiagMatrix& b);
156
MDIAGARRAY2_FORWARD_DEFS (MDiagArray2, ComplexDiagMatrix, Complex)