23 void build(nda::vector_const_view<std::complex<double>> mesh, nda::vector_const_view<std::complex<double>> data);
32 [[nodiscard]] nda::vector<double>
evaluate(nda::vector_const_view<double> grid,
double eta = 0.05);
39 [[nodiscard]] nda::vector<std::complex<double>>
40 evaluate(nda::vector_const_view<std::complex<double>> grid,
41 nda::vector_const_view<std::complex<double>> theta_M_1 = nda::vector_const_view<std::complex<double>>());
43 [[nodiscard]] nda::vector<double> get_Pick_eigenvalues()
const {
44 auto M = _data.shape()[0];
45 if (M == 0) {
throw Nevanlinna_uninitialized_error(
"Empty continuation data. Please run solve(...) first."); }
47 auto Pick = Eigen::MatrixXcd(M, M);
48 for (
int i = 0; i < M; i++) {
49 for (
int j = 0; j < M; j++) {
50 complex_mpt freq_i = (_mesh(i) - I) / (_mesh(i) + I);
51 complex_mpt freq_j = (_mesh(j) - I) / (_mesh(j) + I);
52 auto val = (One - _data(i) * std::conj(_data(j))) / (One - freq_i * std::conj(freq_j));
53 Pick(i, j) = std::complex<double>(val.real().convert_to<
double>(), val.imag().convert_to<
double>());
56 auto evals = Pick.eigenvalues();
57 auto Pick_eigenvalues = nda::vector<double>(M);
58 std::transform(evals.data(), evals.data() + evals.size(), Pick_eigenvalues.begin(), [](
const std::complex<double> &r) { return r.real(); });
59 return Pick_eigenvalues;
63 nda::vector<complex_mpt> _phis{};
64 nda::vector<matrix_cplx_mpt> _abcds{};
65 nda::vector<complex_mpt> _mesh{};
66 nda::vector<complex_mpt> _data{};
67 nda::vector<complex_mpt> _grid{};
68 nda::vector<matrix_cplx_mpt> _coeffs{};
70 [[nodiscard]] nda::vector<complex_mpt> mobius_trasformation(nda::vector_const_view<std::complex<double>> data)
const;
72 [[nodiscard]] nda::vector<std::complex<double>> evaluate_for_theta(nda::vector_const_view<std::complex<double>> grid,
73 nda::vector_const_view<std::complex<double>> theta_M_1)
const;