7 #include <eigen3/unsupported/Eigen/MatrixFunctions> 11 typedef complex<double>
Cd_t;
24 Eigen::VectorXd kzval = Eigen::VectorXd::LinSpaced(10, 1.0, 4.0);
29 double k2 = kx * kx + kz * kz;
32 Eigen::MatrixXcd Dmat = Eigen::MatrixXcd::Zero(
N + 1,
N + 1);
33 Eigen::MatrixXcd Dpmat = Eigen::MatrixXcd::Zero(
N - 1,
N - 1);
34 for (
int k = 0; k <
N + 1; k++) {
35 for (
int p = k + 1; p <
N + 1; p++) {
41 cout <<
"line: " << __LINE__ << endl << flush;
42 for (
int k = 0; k <
N - 1; k++) {
43 for (
int p = k + 1; p <
N - 1; p++) {
49 cout <<
"line: " << __LINE__ << endl
53 Eigen::MatrixXcd If = Eigen::MatrixXcd::Identity(
N + 1,
N + 1);
54 Eigen::MatrixXcd Ip = Eigen::MatrixXcd::Identity(
N - 1,
N - 1);
55 Eigen::MatrixXcd D1f = Dmat * If;
56 Eigen::MatrixXcd D2f = D1f * D1f;
57 Eigen::MatrixXcd D1p = Dpmat * Ip;
58 Eigen::MatrixXcd D2p = Dpmat * Dpmat;
59 cout <<
"line: " << __LINE__ << endl
62 Eigen::MatrixXcd bc1(1,
N + 1);
64 Eigen::MatrixXcd bc2(1,
N + 1);
65 for (
int i = 0; i <
N + 1; i++){
66 bc2(0, i) =
pow(-1.0, i);
69 bc1(0,0) = 0.5 * bc1(0,0);
70 bc2(0,0) = 0.5 * bc2(0,0);
71 cout <<
"line: " << __LINE__ << endl
73 Eigen::MatrixXcd I = If.block(0, 0,
N - 1,
N + 1);
75 Eigen::MatrixXcd D1 = D1f.block(0, 0,
N - 1,
N + 1);
77 Eigen::MatrixXcd D2 = D2f.block(0, 0,
N - 1,
N + 1);
79 Eigen::MatrixXcd E(4 * (
N - 1) + 6, 4 * (
N - 1) + 6), F(4 * (
N - 1) + 6, 4 * (
N - 1) + 6), B(4 * (
N - 1) + 6, 3 * (
N - 1)), C(3 * (
N + 1), 3 * (
N + 1) +
N - 1);
80 cout <<
"line: " << __LINE__ << endl
82 E << I, 0.0 * I, I * 0.0, 0.0 * Ip,
83 0.0 * I, I, I * 0.0, 0.0 * Ip,
84 0.0 * I, 0.0 * I, I , 0.0 * Ip,
85 0.0 * I, 0.0 * I, I * 0.0, 0.0 * Ip,
86 Eigen::MatrixXcd::Zero(6, 3 * (
N + 1) +
N - 1);
92 cout <<
"line: " << __LINE__ << endl
96 cout <<
"line: " << __LINE__ << endl
100 cout <<
"line: " << __LINE__ << endl
104 Eigen::MatrixXcd Delta = D2 - k2 * I;
105 Eigen::MatrixXcd Diag = (1 / R) * Delta -
ii * kx * U * I;
106 cout <<
"line: " << __LINE__ << endl
108 F << Diag, -Uy * I, I * 0, -
ii * kx * Ip,
109 I * 0, Diag, I * 0, -D1p,
110 I * 0, I * 0, Diag, -
ii * kz * Ip,
111 ii * kx * I, D1,
ii * kz * I, 0 * Ip,
112 bc1, bc1 * 0, bc1 * 0, Eigen::MatrixXcd::Zero(1,
N - 1),
113 bc2, bc2 * 0, bc2 * 0, Eigen::MatrixXcd::Zero(1,
N - 1),
114 0 * bc1, bc1, bc1 * 0, Eigen::MatrixXcd::Zero(1,
N - 1),
115 0 * bc2, bc2, bc2 * 0, Eigen::MatrixXcd::Zero(1,
N - 1),
116 0 * bc1, bc1 * 0, bc1, Eigen::MatrixXcd::Zero(1,
N - 1),
117 0 * bc2, bc2 * 0, bc2, Eigen::MatrixXcd::Zero(1,
N - 1);
118 cout <<
"line: " << __LINE__ << endl
123 Eigen::MatrixXcd::Zero(
N-1+6, 3*(
N-1));
124 cout <<
"line: " << __LINE__ << endl
128 C << If, 0 * If, 0 * If, Eigen::MatrixXcd::Zero(
N + 1,
N - 1),
129 0 * If, If, 0 * If, Eigen::MatrixXcd::Zero(
N + 1,
N - 1),
130 0 * If, 0 * If, If, Eigen::MatrixXcd::Zero(
N + 1,
N - 1);
134 cout <<
"line: " << __LINE__ << endl
138 cout <<
"line: " << __LINE__ << endl
140 Eigen::MatrixXcd evals = qz.
alpha.array()/qz.
beta.array();
141 cout <<
"line: " << __LINE__ << endl
143 cout <<
"Showing the eigenvalues: " << evals << endl;
146 cout <<
"info: " << qz.
info << endl;
147 Eigen::ColPivHouseholderQR<Eigen::Matrix<std::complex<double>, Eigen::Dynamic, Eigen::Dynamic> > qr;
148 qr.compute(qz.
T.block(0, 0, qz.
M, qz.
M));
149 cout <<
"is invertible: " << qr.isInvertible() << endl;
This is a chebfun analogue. Chebfun will represent both values in physical space or an array of Cheby...
complex< double > ii(0.0, 1.0)
std::valarray< std::complex< SIS_TYPE > > yc(N+1)
valarray< complex< T > > pow(valarray< complex< T > > base, T power)
int N
Specifies number of Chebyshev polynomials, default N = 31.