cuLite v0.3.1
A lite CUDA C++ Interface
Loading...
Searching...
No Matches
General Eigenvalue Problem (GEEV)

This section demonstrates how to compute eigenvalues and eigenvectors of general (non-symmetric) dense matrices on GPU using the GEEV algorithm. Eigenvalues are returned as complex values, even for real input matrices. Optionally, left and/or right eigenvectors can be computed.

Source CodeConsole Output
#include <iostream>
#include <cla3p/dense.hpp>
#include <culite/dense.hpp>
#include <culite/eigsol.hpp>
int main()
{
/*
* Create a random (5x5) dense matrix on host and transfer to device
*/
HostA >> A;
HostB >> B;
std::cout << "A:\n" << A;
std::cout << "B:\n" << B;
/*
* Create an eigensolver that computes right eigenvectors (default)
*/
/*
* Decompose A
*/
geev.decompose(A);
std::cout << "Eigenvalues (A):\n" << geev.eigenvalues();
std::cout << "Right Eigenvectors (A):\n" << geev.rightEigenvectors();
/*
* Create an eigensolver that computes only eigenvalues (no eigenvectors)
*/
geev.setCalcLeft(false);
geev.setCalcRight(false);
geev.decompose(B);
std::cout << "Eigenvalues only (B):\n" << geev.eigenvalues();
return 0;
}
static XxMatrix< T_Scalar > random(int_t nr, int_t nc, const Property &pr=Property::General(), T_RScalar lo=T_RScalar(0), T_RScalar hi=T_RScalar(1))
Eigenvalue decomposition solver using LAPACK/cuSOLVER GEEV routines.
Definition lapack_geev.hpp:60
void setCalcRight(bool calcRight)
Sets whether to compute right eigenvectors.
Definition lapack_geev.hpp:120
const T_CVector & eigenvalues() const
Gets the computed eigenvalues.
Definition lapack_geev.hpp:157
void setCalcLeft(bool calcLeft)
Sets whether to compute left eigenvectors.
Definition lapack_geev.hpp:114
void decompose(const T_Matrix &mat)
Performs eigenvalue decomposition on the input matrix.
const T_CMatrix & rightEigenvectors() const
Gets the computed right eigenvectors.
Definition lapack_geev.hpp:173
XxMatrix< real_t > RdMatrix
XxMatrix< real_t > RdMatrix
Double precision real matrix.
Definition dense.hpp:55
A:
0 1 2 3 4
0 | 8.401877e-01 1.975514e-01 4.773971e-01 9.161951e-01 1.630057e-02
1 | 3.943829e-01 3.352228e-01 6.288709e-01 6.357117e-01 2.428868e-01
2 | 7.830992e-01 7.682296e-01 3.647845e-01 7.172969e-01 1.372316e-01
3 | 7.984400e-01 2.777747e-01 5.134009e-01 1.416026e-01 8.041768e-01
4 | 9.116474e-01 5.539700e-01 9.522297e-01 6.069689e-01 1.566791e-01
B:
0 1 2 3 4 5 6
0 | 4.009444e-01 6.126398e-01 7.713577e-01 8.077245e-01 6.632269e-01 2.382800e-01 7.602487e-01
1 | 1.297904e-01 2.960316e-01 5.267450e-01 9.190265e-01 8.902326e-01 9.706341e-01 5.125354e-01
2 | 1.088088e-01 6.375523e-01 7.699138e-01 6.975528e-02 3.488929e-01 9.022081e-01 6.677238e-01
3 | 9.989245e-01 5.242872e-01 4.002286e-01 9.493271e-01 6.417132e-02 8.509198e-01 5.316064e-01
4 | 2.182569e-01 4.935830e-01 8.915295e-01 5.259953e-01 2.002305e-02 2.666657e-01 3.928034e-02
5 | 5.129324e-01 9.727750e-01 2.833147e-01 8.605585e-02 4.577017e-01 5.397603e-01 4.376376e-01
6 | 8.391122e-01 2.925168e-01 3.524583e-01 1.922138e-01 6.309584e-02 3.752070e-01 9.318351e-01
Eigenvalues (A):
0
0 | ( 2.582653e+00, 0.000000e+00)
1 | ( 3.755807e-01, 0.000000e+00)
2 | (-4.857685e-01, 0.000000e+00)
3 | (-3.169942e-01, 3.829129e-01)
4 | (-3.169942e-01,-3.829129e-01)
Right Eigenvectors (A):
0 1 2 3 4
0 | (-4.077873e-01, 0.000000e+00) (-6.725043e-01, 0.000000e+00) (-4.627980e-01, 0.000000e+00) (-3.371479e-01,-1.210146e-01) (-3.371479e-01, 1.210146e-01)
1 | (-3.823901e-01, 0.000000e+00) ( 6.111218e-01, 0.000000e+00) (-5.253138e-01, 0.000000e+00) (-5.142940e-02,-2.199607e-01) (-5.142940e-02, 2.199607e-01)
2 | (-4.538854e-01, 0.000000e+00) ( 3.255235e-01, 0.000000e+00) ( 4.480339e-01, 0.000000e+00) (-3.517333e-01, 9.853515e-02) (-3.517333e-01,-9.853515e-02)
3 | (-4.471547e-01, 0.000000e+00) ( 3.503252e-02, 0.000000e+00) ( 5.509275e-01, 0.000000e+00) ( 6.672731e-01, 0.000000e+00) ( 6.672731e-01,-0.000000e+00)
4 | (-5.305923e-01, 0.000000e+00) ( 2.589890e-01, 0.000000e+00) (-7.488600e-02, 0.000000e+00) ( 1.965353e-01, 4.509479e-01) ( 1.965353e-01,-4.509479e-01)
Eigenvalues only (B):
0
0 | ( 3.606017e+00, 0.000000e+00)
1 | (-6.073472e-01, 0.000000e+00)
2 | (-3.201514e-01, 0.000000e+00)
3 | (-1.317723e-01, 5.524071e-01)
4 | (-1.317723e-01,-5.524071e-01)
5 | ( 7.464307e-01, 3.584350e-02)
6 | ( 7.464307e-01,-3.584350e-02)