{
/* The variables for which the covariance matrix is to be calculated. */
size_t n_vars;
- const struct variable **vars;
+ const struct variable *const *vars;
/* Categorical variables. */
struct categoricals *categoricals;
/* Create a covariance struct.
*/
struct covariance *
-covariance_1pass_create (size_t n_vars, const struct variable **vars,
+covariance_1pass_create (size_t n_vars, const struct variable *const *vars,
const struct variable *weight, enum mv_class exclude)
{
size_t i;
- struct covariance *cov = xmalloc (sizeof *cov);
+ struct covariance *cov = xzalloc (sizeof *cov);
cov->passes = 1;
cov->state = 0;
cov->n_cm = (n_vars * (n_vars - 1) ) / 2;
- cov->cm = xcalloc (sizeof *cov->cm, cov->n_cm);
+ if (cov->n_cm > 0)
+ cov->cm = xcalloc (sizeof *cov->cm, cov->n_cm);
cov->categoricals = NULL;
return cov;
until then.
*/
struct covariance *
-covariance_2pass_create (size_t n_vars, const struct variable **vars,
- size_t n_catvars, const struct variable **catvars,
+covariance_2pass_create (size_t n_vars, const struct variable *const *vars,
+ size_t n_catvars, const struct variable *const *catvars,
const struct variable *wv, enum mv_class exclude)
{
size_t i;
return categoricals_get_binary_by_subscript (cov->categoricals, i - cov->n_vars, c);
}
+#if 0
void
dump_matrix (const gsl_matrix *m)
{
printf ("\n");
}
}
+#endif
/* Call this function for every case in the data set */
void
const gsl_matrix *
covariance_calculate (struct covariance *cov)
{
- assert ( cov->state > 0 );
+ if ( cov->state <= 0 )
+ return NULL;
switch (cov->passes)
{
covariance_calculate_single_pass_unnormalized (struct covariance *cov)
{
size_t i, j;
- size_t m;
for (i = 0 ; i < cov->dim; ++i)
{
const gsl_matrix *
covariance_calculate_unnormalized (struct covariance *cov)
{
- assert ( cov->state > 0 );
+ if ( cov->state <= 0 )
+ return NULL;
switch (cov->passes)
{
}
}
+/* Function to access the categoricals used by COV
+ The return value is owned by the COV
+*/
+const struct categoricals *
+covariance_get_categoricals (const struct covariance *cov)
+{
+ return cov->categoricals;
+}
/* Destroy the COV object */