1: #pragma once
2: #include <petsc/private/regressorimpl.h>
3: #include <petscksp.h>
4: #include <petsctao.h>
6: /* We define this header, since it serves as a "base" for all linear models. */
7: #define REGRESSOR_LINEAR_HEADER \
8: PetscRegressorLinearType type; \
9: /* Parameters of the fitted regression model */ \
10: Vec coefficients; \
11: PetscScalar intercept; \
12: \
13: Mat X; /* Operator of the linear model; often the training data matrix, but might be a MATCOMPOSITE */ \
14: Mat C; /* Centering matrix */ \
15: Vec rhs; /* Right-hand side of the linear model; often the target vector, but may be the mean-centered version */ \
16: Vec residual; /* Residual for our model, or the loss vector */ \
17: /* Various options */ \
18: PetscBool fit_intercept; /* Calculate intercept ("bias" or "offset") if true. Assume centered data if false. */ \
19: PetscBool use_ksp /* Use KSP for the model-fitting problem; otherwise we will use TAO. */
21: typedef struct {
22: REGRESSOR_LINEAR_HEADER;
24: PetscInt ksp_its, ksp_tot_its;
25: KSP ksp;
26: Mat XtX; /* Normal matrix formed from X */
27: } PetscRegressor_Linear;