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;