4 #ifndef NORMALEQ_SOLVER_H
5 #define NORMALEQ_SOLVER_H
17 extern "C" void cposv_(
char* uplo,
int* n,
int* nrhs, std::complex<float>* a,
18 int* lda, std::complex<float>* b,
int* ldb,
int* info);
33 bool Solve(std::complex<float>* a, std::complex<float>* b)
override {
35 for (
int n = 0; n <
n_; ++n) {
36 for (
int np = n; np <
n_; ++np) {
37 adaggera_[n + np *
n_] = std::complex<float>(0.0, 0.0);
38 for (
int m = 0; m <
m_; ++m) {
39 adaggera_[n + np *
n_] += std::conj(a[m + n *
m_]) * a[m + np *
m_];
43 for (
int p = 0; p <
nrhs_; ++p) {
44 for (
int n = 0; n <
n_; ++n) {
45 adaggerb_[n + p *
n_] = std::complex<float>(0.0, 0.0);
46 for (
int m = 0; m <
m_; ++m) {
47 adaggerb_[n + p *
n_] += std::conj(a[m + n *
m_]) * b[m + p *
m_];
57 cposv_(&uplo, &
n_, &
nrhs_, adaggera_.data(), &
n_, adaggerb_.data(), &ldb,
60 std::copy_n(adaggerb_.data(),
n_ *
nrhs_, b);
67 std::vector<std::complex<float>> adaggera_;
68 std::vector<std::complex<float>> adaggerb_;
Definition: LLSSolver.h:25
int m_
Definition: LLSSolver.h:44
int n_
Definition: LLSSolver.h:45
int nrhs_
Definition: LLSSolver.h:46
Definition: NormalEquationsSolver.h:20
bool Solve(std::complex< float > *a, std::complex< float > *b) override
Definition: NormalEquationsSolver.h:33
NormalEquationsSolver(int m, int n, int nrhs)
Definition: NormalEquationsSolver.h:22
void cposv_(char *uplo, int *n, int *nrhs, std::complex< float > *a, int *lda, std::complex< float > *b, int *ldb, int *info)
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53