Skip to content

Commit f9a7000

Browse files
committed
fe_ls_elliptic::analyze_data from just geoframe, fpca bug fix. core submodule update
1 parent 406666a commit f9a7000

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

fdaPDE/src/models/fpca.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,6 @@ template <typename VariationalSolver> class fPCA {
520520
using smoother_t = std::decay_t<VariationalSolver>;
521521
using vector_t = Eigen::Matrix<double, Dynamic, 1>;
522522
using matrix_t = Eigen::Matrix<double, Dynamic, Dynamic>;
523-
using data_t = Eigen::Map<const Eigen::Matrix<double, Dynamic, Dynamic, Eigen::ColMajor>>;
524523
using binary_t = BinaryMatrix<Dynamic, Dynamic>;
525524
static constexpr int n_lambda = smoother_t::n_lambda;
526525
public:
@@ -533,12 +532,14 @@ template <typename VariationalSolver> class fPCA {
533532
template <typename... Args> void discretize(Args&&... args) {
534533
smoother_.discretize(std::forward<Args>(args)...);
535534
n_dofs_ = smoother_.n_dofs();
535+
return;
536536
}
537537
template <typename GeoFrame> void analyze_data(const std::string& colname, const GeoFrame& gf) {
538538
fdapde_assert(gf.n_layers() == 1);
539539
data_ = gf[0].data().template col<double>(colname).as_matrix();
540540
n_locs_ = data_.rows();
541541
n_units_ = data_.cols();
542+
smoother_.analyze_data(gf, vector_t::Ones(gf[0].rows()).asDiagonal());
542543
// detect if data_ has at least one missing value
543544
has_nan_ = false;
544545
for (int i = 0; i < n_locs_; ++i) {
@@ -549,6 +550,7 @@ template <typename VariationalSolver> class fPCA {
549550
}
550551
}
551552
}
553+
return;
552554
}
553555

554556
template <typename LambdaT, typename Policy = fpca_power_solver>
@@ -588,7 +590,7 @@ template <typename VariationalSolver> class fPCA {
588590
const std::vector<double>& loadings_norm() const { return f_norm_; }
589591
const matrix_t& lambda() const { return lambda_; }
590592
private:
591-
data_t data_; // mapped geoframe data
593+
matrix_t data_; // mapped geoframe data
592594
smoother_t smoother_; // variational solver used in the smoothing step
593595
bool has_nan_;
594596

fdaPDE/src/solvers/fe_ls_elliptic.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,17 @@ struct fe_ls_elliptic {
215215
update_response_and_weights(y_, W); // this updates also design_matrix releated matrices
216216
return;
217217
}
218-
218+
// evaluates basis system at physical locations
219+
template <typename GeoFrame, typename WeightMatrix> void analyze_data(const GeoFrame& gf, const WeightMatrix& W) {
220+
fdapde_static_assert(GeoFrame::Order == 1, THIS_CLASS_IS_FOR_ORDER_ONE_GEOFRAMES_ONLY);
221+
fdapde_assert(gf.n_layers() == 1);
222+
n_obs_ = gf[0].rows();
223+
n_locs_ = n_obs_;
224+
eval_basis_at_(gf); // update \Psi matrix
225+
W_ = W;
226+
return;
227+
}
228+
219229
// modifiers
220230
void update_response(const vector_t& y) {
221231
fdapde_assert(Psi_.rows() > 0 && y.rows() == n_locs_ && y.cols() == 1);

0 commit comments

Comments
 (0)