Class WatchedDoubleStepQREigen_DDRM
java.lang.Object
org.ejml.dense.row.decomposition.eig.watched.WatchedDoubleStepQREigen_DDRM
- Direct Known Subclasses:
WatchedDoubleStepQREigen_MT_DDRM
The double step implicit Eigenvalue decomposition algorithm is fairly complicated and needs to be designed so that it can handle several special cases. To aid in development and debugging this class was created. It allows individual components to be tested and to print out their results. This shows how each step is performed.
Do not use this class to compute the eigenvalues since it is much slower than a non-debug implementation.
-
Field Summary
Modifier and TypeFieldDescriptionprotected DMatrixRMaj
boolean
protected double
@Nullable DMatrixRMaj
protected DMatrixRMaj
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addComputedEigen2x2
(int x1, int x2) void
addEigenAt
(int x1) boolean
bulgeDoubleStepQn
(int i) boolean
bulgeDoubleStepQn
(int i, double a11, double a21, double a31, double threshold, boolean set) boolean
bulgeSingleStepQn
(int i) boolean
bulgeSingleStepQn
(int i, double a11, double a21, double threshold, boolean set) boolean
createBulgeSingleStep
(int x1, double eigenvalue) void
eigen2by2_scale
(double a11, double a12, double a21, double a22) void
exceptionalShift
(int x1, int x2) Perform a shift in a random direction that is of the same magnitude as the elements in the matrix.int
void
implicitDoubleStep
(int x1, int x2) Performs an implicit double step using the values contained in the lower right hand side of the submatrix for the estimated eigenvector values.void
boolean
isReal2x2
(int x1, int x2) boolean
isZero
(int x1, int x2) void
performImplicitDoubleStep
(int x1, int x2, double real, double img) Performs an implicit double step given the set of two imaginary eigenvalues provided.void
performImplicitSingleStep
(int x1, int x2, double eigenvalue) void
protected void
rank1UpdateMultL
(DMatrixRMaj A, double gamma, int colA0, int w0, int w1) protected void
rank1UpdateMultR
(DMatrixRMaj A, double gamma, int colA0, int w0, int w1) void
setChecks
(boolean hessenberg, boolean orthogonal, boolean uncountable) void
setQ
(@Nullable DMatrixRMaj Q) void
setup
(DMatrixRMaj A)
-
Field Details
-
u
-
gamma
protected double gamma -
_temp
-
createR
public boolean createR -
Q
-
-
Constructor Details
-
WatchedDoubleStepQREigen_DDRM
public WatchedDoubleStepQREigen_DDRM()
-
-
Method Details
-
incrementSteps
public void incrementSteps() -
setQ
-
setChecks
public void setChecks(boolean hessenberg, boolean orthogonal, boolean uncountable) -
isZero
public boolean isZero(int x1, int x2) -
setup
-
exceptionalShift
public void exceptionalShift(int x1, int x2) Perform a shift in a random direction that is of the same magnitude as the elements in the matrix. -
implicitDoubleStep
public void implicitDoubleStep(int x1, int x2) Performs an implicit double step using the values contained in the lower right hand side of the submatrix for the estimated eigenvector values. -
performImplicitDoubleStep
public void performImplicitDoubleStep(int x1, int x2, double real, double img) Performs an implicit double step given the set of two imaginary eigenvalues provided. Since one eigenvalue is the complex conjugate of the other only one set of real and imaginary numbers is needed.- Parameters:
x1
- upper index of submatrix.x2
- lower index of submatrix.real
- Real component of each of the eigenvalues.img
- Imaginary component of one of the eigenvalues.
-
performImplicitSingleStep
public void performImplicitSingleStep(int x1, int x2, double eigenvalue) -
createBulgeSingleStep
public boolean createBulgeSingleStep(int x1, double eigenvalue) -
bulgeDoubleStepQn
public boolean bulgeDoubleStepQn(int i) -
bulgeDoubleStepQn
public boolean bulgeDoubleStepQn(int i, double a11, double a21, double a31, double threshold, boolean set) -
bulgeSingleStepQn
public boolean bulgeSingleStepQn(int i) -
bulgeSingleStepQn
public boolean bulgeSingleStepQn(int i, double a11, double a21, double threshold, boolean set) -
eigen2by2_scale
public void eigen2by2_scale(double a11, double a12, double a21, double a22) -
getNumberOfEigenvalues
public int getNumberOfEigenvalues() -
getEigenvalues
-
addComputedEigen2x2
public void addComputedEigen2x2(int x1, int x2) -
isReal2x2
public boolean isReal2x2(int x1, int x2) -
addEigenAt
public void addEigenAt(int x1) -
rank1UpdateMultL
-
rank1UpdateMultR
-
printSteps
public void printSteps()
-