// ??? // int gsl_permutation_canonical_to_linear (gsl_permutation * p, const gsl_permutation * q) // This function converts a permutation q in canonical form back into linear form storing it in the output argument p. (viceversa, it seems to me) #include #include #include #include int main (void) { const size_t N = 3; const gsl_rng_type * T; gsl_rng * r; gsl_permutation * p = gsl_permutation_alloc (N); gsl_permutation * q1 = gsl_permutation_alloc (N); gsl_permutation * q2 = gsl_permutation_alloc (N); gsl_rng_env_setup(); T = gsl_rng_default; r = gsl_rng_alloc (T); printf("initial permutation:"); gsl_permutation_init (p); gsl_permutation_fprintf (stdout, p, " %u"); printf("\n"); printf(" random permutation:"); gsl_ran_shuffle (r, p->data, N, sizeof(size_t)); gsl_permutation_fprintf (stdout, p, " %u"); printf("\n"); printf("gsl_permutation_linear_to_canonical(q1,p)\n"); gsl_permutation_linear_to_canonical(q1,p); printf("q1: "); gsl_permutation_fprintf (stdout, q1, " %u"); printf("\np: "); gsl_permutation_fprintf (stdout, p, " %u"); printf("\n"); printf("gsl_permutation_canonical_to_linear(q2,q1)\n"); gsl_permutation_canonical_to_linear(q2,q1); printf("q1: "); // both q1 and q2 change, none makes sense gsl_permutation_fprintf (stdout, q1, " %u"); printf("\nq2: "); gsl_permutation_fprintf (stdout, q2, " %u"); printf("\n"); return 0; } /* initial permutation: 0 1 2 random permutation: 1 0 2 gsl_permutation_linear_to_canonical(q1,p) q1: 2 0 1 p: 1 0 2 gsl_permutation_canonical_to_linear(q2,q1) q1: 0 1 2 q2: 0 0 0 */