Find the eigenvalues of a generalised eigenvalue problem specified by \( Ax = \lambda Mx \)
Use LAPACK to solve a complex eigen problem specified by the given matrices.
715 char no_eigvecs[2] =
"N";
717 char eigvecs[2] =
"V";
724 double* M_linear =
new double[2 *
n *
n];
725 double* A_linear =
new double[2 *
n *
n];
729 for (
int i = 0;
i <
n; ++
i)
731 for (
int j = 0;
j <
n; ++
j)
733 M_linear[index] =
M(
j,
i).real();
734 A_linear[index] =
A(
j,
i).real();
736 M_linear[index] =
M(
j,
i).imag();
737 A_linear[index] =
A(
j,
i).imag();
743 double*
alpha =
new double[2 *
n];
744 double*
beta =
new double[2 *
n];
746 double* vec_left =
new double[2];
747 double* vec_right =
new double[2 *
n *
n];
750 std::vector<double> work(2, 0.0);
751 std::vector<double> rwork(8 *
n, 0.0);
777 int required_workspace = (
int)work[0];
779 work.resize(2 * required_workspace);
802 eigenvalue.resize(
n);
803 eigenvector.resize(
n);
806 for (
int i = 0;
i <
n; ++
i)
809 std::complex<double> num(
alpha[2 *
i],
alpha[2 *
i + 1]);
810 std::complex<double> den(
beta[2 *
i],
beta[2 *
i + 1]);
814 eigenvalue[
i] = num / den;
817 eigenvector[
i].resize(
n);
819 for (
int k = 0;
k <
n; ++
k)
821 eigenvector[
i][
k] = std::complex<double>(
822 vec_right[2 *
i *
n + 2 *
k], vec_right[2 *
i *
n + 2 *
k + 1]);
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
Matrix< RealScalar, Dynamic, Dynamic > M
Definition: bench_gemm.cpp:50
#define LAPACK_ZGGEV(JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHA, BETA, VL, LDVL, VR, LDVR, WORK, LWORK, RWORK, INFO)
Definition: lapack_qz.h:56
RealScalar alpha
Definition: level1_cplx_impl.h:151
int info
Definition: level2_cplx_impl.h:39
Scalar beta
Definition: level2_cplx_impl.h:36
char char char int int * k
Definition: level2_impl.h:374
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2