VALUE rb_gsl_linalg_complex_LU_decomp(int argc, VALUE *argv, VALUE obj) { gsl_matrix_complex *m = NULL; gsl_permutation *p = NULL; int signum, itmp; size_t size; VALUE obj2; switch (TYPE(obj)) { case T_MODULE: case T_CLASS: case T_OBJECT: if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc); CHECK_MATRIX_COMPLEX(argv[0]); Data_Get_Struct(argv[0], gsl_matrix_complex, m); itmp = 1; break; default: CHECK_MATRIX_COMPLEX(obj); Data_Get_Struct(obj, gsl_matrix_complex, m); itmp = 0; } size = m->size1; switch (argc-itmp) { case 0: p = gsl_permutation_alloc(size); gsl_linalg_complex_LU_decomp(m, p, &signum); if (itmp == 1) RBGSL_SET_CLASS(argv[0], cgsl_matrix_complex_LU); else RBGSL_SET_CLASS(obj, cgsl_matrix_complex_LU); obj2 = Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p); return rb_ary_new3(2, obj2, INT2FIX(signum)); break; case 1: /* when a permutation object is given */ CHECK_PERMUTATION(argv[itmp]); Data_Get_Struct(argv[itmp], gsl_permutation, p); gsl_linalg_complex_LU_decomp(m, p, &signum); if (itmp == 1) RBGSL_SET_CLASS(argv[0], cgsl_matrix_complex_LU); else RBGSL_SET_CLASS(obj, cgsl_matrix_complex_LU); return INT2FIX(signum); break; default: rb_raise(rb_eArgError, "Usage: LU_decomp!() or LU_decomp!(permutation)"); } }
static VALUE rb_ool_conmin_gencan_parameters_default(VALUE klass) { ool_conmin_gencan_parameters P; VALUE ary; ool_conmin_parameters_default(ool_conmin_minimizer_gencan, (void*) &P); ary = create_parameters_ary_gencan(&P); RBGSL_SET_CLASS(ary, cool_conmin_gencan_parameters); return ary; }