Skip to content

Compile error for space-time GCV in qsr.h #14

Description

@Marco2103-polimi

The compile error in qsr.h for the space–time GCV arises because the optimizer is passing a single smoothing parameter, while the space–time version of the model requires two distinct smoothing parameters. The mismatch leads to a compilation failure.

int test_gcv() {

    // geometry 
    using PointT = Eigen::Matrix<double, 2, 1>;

    Eigen::Matrix<double, Dynamic, Dynamic> points = read_csv<double>("my_data/mesh/unit_square_reduced_censoring_476/points.csv").as_matrix();
    Eigen::Matrix<int, Dynamic, Dynamic> elements = read_csv<int>("my_data/mesh/unit_square_reduced_censoring_476/elements.csv").as_matrix();
    Eigen::Matrix<int, Dynamic, Dynamic> boundary = read_csv<int>("my_data/mesh/unit_square_reduced_censoring_476/boundary.csv").as_matrix();

    elements.array() -= 1; // non necessario

    std::string datadir = "my_data/msr/06-missing/";
    const unsigned int M = 8; 
    Triangulation<1, 1> T = Triangulation<1, 1>::Interval(0, 1, M);  
    Triangulation<2, 2> D(points, elements, boundary);

    GeoFrame data(D, T);

    // data 
    auto& l = data.insert_scalar_layer<POINT, POINT>("layer", std::pair{"my_data/msr/06/space_locs.csv", "my_data/msr/06/time_locs.csv"});
    l.load_csv<double>(datadir + "response.csv");
    l.load_csv<double>(datadir + "design_matrix.csv");

    std::cout << "geoframe:" << data[0] << std::endl;

    // physics 
    FeSpace Vh(D, P1<1>);   // functional space definition

    // trial and test function definition
    TrialFunction f(Vh);
    TestFunction v(Vh);
    auto a_D = integral(D)(dot(grad(f), grad(v)));
    // homogeneous forcing linear form
    ZeroField<2> u_D;
    auto F_D = integral(D)(u_D * v);

    BsSpace Bh(T, 3);   // cubic B-splines in time
    TrialFunction g(Bh);
    TestFunction  w(Bh);
    auto a_T = integral(T)(dxx(g) * dxx(w));
    ZeroField<1> u_T;
    auto F_T = integral(T)(u_T * w);    


    std::vector<double> lambdas_d;
    std::vector<double> lambdas_t;
    std::vector<Eigen::Matrix<double, Dynamic, 1>> lambdas_d_t;
    for(double xs = -4.5; xs <= -3.0; xs += 0.5)
        lambdas_d.push_back(std::pow(10,xs));

    for(double xt = -4.0; xt <= -2.0; xt += 2.0)
        lambdas_t.push_back(std::pow(10,xt));

    for(auto i = 0; i < lambdas_d.size(); ++i)
        for(auto j = 0; j < lambdas_t.size(); ++j) 
            lambdas_d_t.push_back(Eigen::Matrix<double, 2, 1>(lambdas_d[i], lambdas_t[j]));
    
    Eigen::Matrix<double, Dynamic, 2> lambda_grid(lambdas_d.size()*lambdas_t.size(), 2);
    for(int i = 0; i < lambdas_d.size(); ++i) { 
        for (int j = 0; j < lambdas_t.size(); ++j) {
            lambda_grid(i * lambdas_t.size() + j, 0) = lambdas_d[i];
            lambda_grid(i * lambdas_t.size() + j, 1) = lambdas_t[j];
        }
    }
    std::cout << "Lambda grid: " << lambda_grid << std::endl;

    GridSearch<2> opt;

    QSRPDE m_qsr("y ~ x1 + x2 + f", data, 0.50, fe_ls_separable_mono(std::pair {a_D, F_D}, std::pair {a_T, F_T}));
    opt.optimize(m_qsr.gcv(200, 1234), lambda_grid);


    return 0;
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions