Medial Code Documentation
Loading...
Searching...
No Matches
External
Eigen
src
Eigenvalues
MatrixBaseEigenvalues.h
1
// This file is part of Eigen, a lightweight C++ template library
2
// for linear algebra.
3
//
4
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
5
// Copyright (C) 2010 Jitse Niesen <jitse@maths.leeds.ac.uk>
6
//
7
// This Source Code Form is subject to the terms of the Mozilla
8
// Public License v. 2.0. If a copy of the MPL was not distributed
9
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
11
#ifndef EIGEN_MATRIXBASEEIGENVALUES_H
12
#define EIGEN_MATRIXBASEEIGENVALUES_H
13
14
namespace
Eigen {
15
16
namespace
internal {
17
18
template
<
typename
Derived,
bool
IsComplex>
19
struct
eigenvalues_selector
20
{
21
// this is the implementation for the case IsComplex = true
22
static
inline
typename
MatrixBase<Derived>::EigenvaluesReturnType
const
23
run(
const
MatrixBase<Derived>
& m)
24
{
25
typedef
typename
Derived::PlainObject PlainObject;
26
PlainObject m_eval(m);
27
return
ComplexEigenSolver<PlainObject>
(m_eval,
false
).eigenvalues();
28
}
29
};
30
31
template
<
typename
Derived>
32
struct
eigenvalues_selector
<Derived,
false
>
33
{
34
static
inline
typename
MatrixBase<Derived>::EigenvaluesReturnType
const
35
run(
const
MatrixBase<Derived>
& m)
36
{
37
typedef
typename
Derived::PlainObject PlainObject;
38
PlainObject m_eval(m);
39
return
EigenSolver<PlainObject>
(m_eval,
false
).eigenvalues();
40
}
41
};
42
43
}
// end namespace internal
44
65
template
<
typename
Derived>
66
inline
typename
MatrixBase<Derived>::EigenvaluesReturnType
67
MatrixBase<Derived>::eigenvalues
()
const
68
{
69
typedef
typename
internal::traits<Derived>::Scalar
Scalar;
70
return
internal::eigenvalues_selector<Derived, NumTraits<Scalar>::IsComplex
>::run(derived());
71
}
72
87
template
<
typename
MatrixType,
unsigned
int
UpLo>
88
inline
typename
SelfAdjointView<MatrixType, UpLo>::EigenvaluesReturnType
89
SelfAdjointView<MatrixType, UpLo>::eigenvalues
()
const
90
{
91
typedef
typename
SelfAdjointView<MatrixType, UpLo>::PlainObject PlainObject;
92
PlainObject
thisAsMatrix
(*
this
);
93
return
SelfAdjointEigenSolver<PlainObject>
(
thisAsMatrix
,
false
).eigenvalues();
94
}
95
96
97
120
template
<
typename
Derived>
121
inline
typename
MatrixBase<Derived>::RealScalar
122
MatrixBase<Derived>::operatorNorm
()
const
123
{
124
using
std::sqrt;
125
typename
Derived::PlainObject m_eval(derived());
126
// FIXME if it is really guaranteed that the eigenvalues are already sorted,
127
// then we don't need to compute a maxCoeff() here, comparing the 1st and last ones is enough.
128
return
sqrt((m_eval*m_eval.adjoint())
129
.eval()
130
.template
selfadjointView<Lower>
()
131
.eigenvalues()
132
.maxCoeff()
133
);
134
}
135
151
template
<
typename
MatrixType,
unsigned
int
UpLo>
152
inline
typename
SelfAdjointView<MatrixType, UpLo>::RealScalar
153
SelfAdjointView<MatrixType, UpLo>::operatorNorm
()
const
154
{
155
return
eigenvalues().cwiseAbs().maxCoeff();
156
}
157
158
}
// end namespace Eigen
159
160
#endif
Eigen::MatrixBase
Base class for all dense matrices, vectors, and expressions.
Definition
MatrixBase.h:50
Eigen::SelfAdjointView
Expression of a selfadjoint matrix from a triangular part of a dense matrix.
Definition
SelfAdjointView.h:51
Eigen::Solve
Pseudo expression representing a solving operation.
Definition
Solve.h:63
Eigen::internal::eigenvalues_selector
Definition
MatrixBaseEigenvalues.h:20
Eigen::internal::traits
Definition
ForwardDeclarations.h:17
Generated on Mon Sep 15 2025 12:11:59 for Medial Code Documentation by
1.9.8