GNU Octave  9.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fEIG.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_fEIG_h)
27 #define octave_fEIG_h 1
28 
29 #include "octave-config.h"
30 
31 #include <iosfwd>
32 
33 #include "mx-fwd.h"
34 
35 #include "fCColVector.h"
36 #include "fCMatrix.h"
37 
38 class
41 {
42  friend class FloatMatrix;
43  friend class FloatComplexMatrix;
44 
45 public:
46 
47  FloatEIG () : m_lambda (), m_v (), m_w () { }
48 
49  FloatEIG (const FloatMatrix& a, bool calc_rev = true,
50  bool calc_lev = true, bool balance = true)
51  : m_lambda (), m_v (), m_w ()
52  {
53  init (a, calc_rev, calc_lev, balance);
54  }
55 
57  bool calc_rev = true, bool calc_lev = true, bool balance = true)
58  : m_lambda (), m_v (), m_w ()
59  {
60  info = init (a, calc_rev, calc_lev, balance);
61  }
62 
63  FloatEIG (const FloatMatrix& a, const FloatMatrix& b,
64  bool calc_rev = true, bool calc_lev = true, bool force_qz = false)
65  : m_lambda (), m_v (), m_w ()
66  {
67  init (a, b, calc_rev, calc_lev, force_qz);
68  }
69 
70  FloatEIG (const FloatMatrix& a, const FloatMatrix& b, octave_idx_type& info,
71  bool calc_rev = true, bool calc_lev = true, bool force_qz = false)
72  : m_lambda (), m_v (), m_w ()
73  {
74  info = init (a, b, calc_rev, calc_lev, force_qz);
75  }
76 
77  FloatEIG (const FloatComplexMatrix& a, bool calc_rev = true,
78  bool calc_lev = true, bool balance = true)
79  : m_lambda (), m_v (), m_w ()
80  {
81  init (a, calc_rev, calc_lev, balance);
82  }
83 
85  bool calc_rev = true, bool calc_lev = true, bool balance = true)
86  : m_lambda (), m_v (), m_w ()
87  {
88  info = init (a, calc_rev, calc_lev, balance);
89  }
90 
92  bool calc_rev = true, bool calc_lev = true, bool force_qz = false)
93  : m_lambda (), m_v (), m_w ()
94  {
95  init (a, b, calc_rev, calc_lev, force_qz);
96  }
97 
99  octave_idx_type& info, bool calc_rev = true, bool calc_lev = true,
100  bool force_qz = false)
101  : m_lambda (), m_v (), m_w ()
102  {
103  info = init (a, b, calc_rev, calc_lev, force_qz);
104  }
105 
106  FloatEIG (const FloatEIG& a) : m_lambda (a.m_lambda), m_v (a.m_v), m_w (a.m_w) { }
107 
109  {
110  if (this != &a)
111  {
112  m_lambda = a.m_lambda;
113  m_v = a.m_v;
114  m_w = a.m_w;
115  }
116  return *this;
117  }
118 
119  ~FloatEIG () = default;
120 
121  FloatComplexColumnVector eigenvalues () const { return m_lambda; }
122  FloatComplexMatrix right_eigenvectors () const { return m_v; }
123  FloatComplexMatrix left_eigenvectors () const { return m_w; }
124 
125  friend std::ostream& operator << (std::ostream& os, const FloatEIG& a);
126 
127 private:
128 
129  FloatComplexColumnVector m_lambda;
130  FloatComplexMatrix m_v;
131  FloatComplexMatrix m_w;
132 
133  octave_idx_type init (const FloatMatrix& a, bool calc_rev, bool calc_lev,
134  bool balance);
135 
136  octave_idx_type init (const FloatMatrix& a, const FloatMatrix& b,
137  bool calc_rev, bool calc_lev, bool force_qz);
138 
139  octave_idx_type init (const FloatComplexMatrix& a, bool calc_rev,
140  bool calc_lev, bool balance);
141 
142  octave_idx_type init (const FloatComplexMatrix& a,
143  const FloatComplexMatrix& b,
144  bool calc_rev, bool calc_lev, bool force_qz);
145 
146  octave_idx_type symmetric_init (const FloatMatrix& a, bool calc_rev,
147  bool calc_lev);
148 
149  octave_idx_type symmetric_init (const FloatMatrix& a, const FloatMatrix& b,
150  bool calc_rev, bool calc_lev);
151 
152  octave_idx_type hermitian_init (const FloatComplexMatrix& a,
153  bool calc_rev, bool calc_lev);
154 
155  octave_idx_type hermitian_init (const FloatComplexMatrix& a,
156  const FloatComplexMatrix& b,
157  bool calc_rev, bool calc_lev);
158 
159 };
160 
161 #endif
template std::ostream & operator<<(std::ostream &, const Array< bool > &)
FloatComplexMatrix & operator=(const FloatComplexMatrix &a)=default
Definition: fEIG.h:41
FloatEIG(const FloatEIG &a)
Definition: fEIG.h:106
FloatEIG(const FloatMatrix &a, const FloatMatrix &b, bool calc_rev=true, bool calc_lev=true, bool force_qz=false)
Definition: fEIG.h:63
FloatEIG(const FloatComplexMatrix &a, const FloatComplexMatrix &b, bool calc_rev=true, bool calc_lev=true, bool force_qz=false)
Definition: fEIG.h:91
FloatComplexMatrix left_eigenvectors() const
Definition: fEIG.h:123
FloatEIG(const FloatComplexMatrix &a, octave_idx_type &info, bool calc_rev=true, bool calc_lev=true, bool balance=true)
Definition: fEIG.h:84
FloatEIG(const FloatMatrix &a, octave_idx_type &info, bool calc_rev=true, bool calc_lev=true, bool balance=true)
Definition: fEIG.h:56
FloatEIG()
Definition: fEIG.h:47
FloatComplexMatrix right_eigenvectors() const
Definition: fEIG.h:122
FloatComplexColumnVector eigenvalues() const
Definition: fEIG.h:121
FloatEIG(const FloatMatrix &a, const FloatMatrix &b, octave_idx_type &info, bool calc_rev=true, bool calc_lev=true, bool force_qz=false)
Definition: fEIG.h:70
FloatEIG(const FloatComplexMatrix &a, bool calc_rev=true, bool calc_lev=true, bool balance=true)
Definition: fEIG.h:77
FloatEIG(const FloatMatrix &a, bool calc_rev=true, bool calc_lev=true, bool balance=true)
Definition: fEIG.h:49
~FloatEIG()=default
FloatEIG(const FloatComplexMatrix &a, const FloatComplexMatrix &b, octave_idx_type &info, bool calc_rev=true, bool calc_lev=true, bool force_qz=false)
Definition: fEIG.h:98
#define OCTAVE_API
Definition: main.cc:55