class Jac::Quadrature

Public Class Methods

alloc(p1) click to toggle source
static VALUE rb_jac_quadrature_alloc(VALUE klass, VALUE vQ)
{
        jac_quadrature *q;
        
        q = jac_quadrature_alloc(FIX2INT(vQ));
        
        return Data_Wrap_Struct(klass, 0, jac_quadrature_free, q);
}

Public Instance Methods

D() click to toggle source
static VALUE rb_jac_quadrature_D(VALUE obj)
{
        jac_quadrature *q;
        gsl_vector_view *v;
        Data_Get_Struct(obj, jac_quadrature, q);
        v = gsl_vector_view_alloc();
        v->vector.data = q->D;
        v->vector.size = q->Q;
        v->vector.stride = 1;
        return Data_Wrap_Struct(cgsl_vector_view, 0, gsl_vector_view_free, v);
}
Q() click to toggle source
static VALUE rb_jac_quadrature_Q(VALUE obj)
{
        jac_quadrature *q;
        Data_Get_Struct(obj, jac_quadrature, q);
        return INT2FIX(q->Q);
}
alpha() click to toggle source
static VALUE rb_jac_quadrature_alpha(VALUE obj)
{
        jac_quadrature *q;
        Data_Get_Struct(obj, jac_quadrature, q);
        return NUM2DBL(q->alpha);
}
beta() click to toggle source
static VALUE rb_jac_quadrature_beta(VALUE obj)
{
        jac_quadrature *q;
        Data_Get_Struct(obj, jac_quadrature, q);
        return NUM2DBL(q->beta);
}
differentiate(*args) click to toggle source
static VALUE rb_jac_differentiate(int argc, VALUE *argv, VALUE obj)
{
        jac_quadrature *q;
        gsl_vector *f, *fout;
        VALUE vfout;
        switch (argc) {
        case 1:
                CHECK_VECTOR(argv[0]);
                Data_Get_Struct(argv[0], gsl_vector, f);
                fout = gsl_vector_alloc(f->size);
                vfout = Data_Wrap_Struct(VECTOR_ROW_COL(CLASS_OF(argv[0])), 0, gsl_vector_free, fout);
                break;
        case 2:
                CHECK_VECTOR(argv[0]);
                Data_Get_Struct(argv[0], gsl_vector, f);
                CHECK_VECTOR(argv[1]);
                Data_Get_Struct(argv[1], gsl_vector, fout);
                vfout = argv[1];
                break;
        default:
                rb_raise(rb_eArgError, "Wrong number of arguments (%d for 1 or 2)", argc);
        }
        Data_Get_Struct(obj, jac_quadrature, q);
        jac_differentiate(q, f->data, fout->data);
        return vfout;
}
integrate(p1) click to toggle source
static VALUE rb_jac_integrate(VALUE obj, VALUE ff)
{
        jac_quadrature *q;
        gsl_vector *f;
        CHECK_VECTOR(ff);
        Data_Get_Struct(obj, jac_quadrature, q);
        Data_Get_Struct(ff, gsl_vector, f);
        return rb_float_new(jac_integrate(q, f->data));
}
interpmat_alloc(*args) click to toggle source
static VALUE rb_jac_interpmat_alloc(int argc, VALUE *argv, VALUE obj)
{
        int err;
        jac_quadrature *q;
        gsl_vector *xp;
        int np;
        Data_Get_Struct(obj, jac_quadrature, q);       
        switch (argc) {
        case 1:
                CHECK_VECTOR(argv[0]);
                Data_Get_Struct(argv[0], gsl_vector, xp);     
                np = xp->size;
                break;
        case 2:
                CHECK_VECTOR(argv[1]);
                Data_Get_Struct(argv[1], gsl_vector, xp);     
                np = FIX2INT(argv[0]);        
                break;
        default:
                rb_raise(rb_eArgError, "Wrong number of arguments (%d for 1 or 2)", argc);
        }
        err = jac_interpmat_alloc(q, np, xp->data);
        return FIX2INT(err);
}
interpmat_free() click to toggle source
static VALUE rb_jac_interpmat_free(VALUE obj)
{
        jac_quadrature *q;     
        Data_Get_Struct(obj, jac_quadrature, q);               
        jac_interpmat_free(q);
        return Qtrue;
}
interpolate(*args) click to toggle source
static VALUE rb_jac_interpolate(int argc, VALUE *argv, VALUE obj)
{
        jac_quadrature *q;
        gsl_vector *f, *fout;
        VALUE vfout;
        switch (argc) {
        case 1:
                CHECK_VECTOR(argv[0]);
                Data_Get_Struct(argv[0], gsl_vector, f);
                fout = gsl_vector_alloc(f->size);
                vfout = Data_Wrap_Struct(VECTOR_ROW_COL(CLASS_OF(argv[0])), 0, gsl_vector_free, fout);
                break;
        case 2:
                CHECK_VECTOR(argv[0]);
                Data_Get_Struct(argv[0], gsl_vector, f);
                CHECK_VECTOR(argv[1]);
                Data_Get_Struct(argv[1], gsl_vector, fout);
                vfout = argv[1];
                break;
        default:
                rb_raise(rb_eArgError, "Wrong number of arguments (%d for 1 or 2)", argc);
        }
        Data_Get_Struct(obj, jac_quadrature, q);
        jac_interpolate(q, f->data, fout->data);
        return vfout;
}
type() click to toggle source
static VALUE rb_jac_quadrature_type(VALUE obj)
{
        jac_quadrature *q;
        Data_Get_Struct(obj, jac_quadrature, q);
        return INT2FIX((int) q->type);
}
w() click to toggle source
static VALUE rb_jac_quadrature_w(VALUE obj)
{
        jac_quadrature *q;
        gsl_vector_view *v;
        Data_Get_Struct(obj, jac_quadrature, q);
        v = gsl_vector_view_alloc();
        v->vector.data = q->w;
        v->vector.size = q->Q;
        v->vector.stride = 1;
        return Data_Wrap_Struct(cgsl_vector_view, 0, gsl_vector_view_free, v);
}
x() click to toggle source
static VALUE rb_jac_quadrature_x(VALUE obj)
{
        jac_quadrature *q;
        gsl_vector_view *v;
        Data_Get_Struct(obj, jac_quadrature, q);
        v = gsl_vector_view_alloc();
        v->vector.data = q->x;
        v->vector.size = q->Q;
        v->vector.stride = 1;
        return Data_Wrap_Struct(cgsl_vector_view, 0, gsl_vector_view_free, v);
}
xp() click to toggle source
static VALUE rb_jac_quadrature_xp(VALUE obj)
{
        jac_quadrature *q;
        gsl_vector_view *v;
        Data_Get_Struct(obj, jac_quadrature, q);
        v = gsl_vector_view_alloc();
        v->vector.data = q->w;
        v->vector.size = q->np;
        v->vector.stride = 1;
        return Data_Wrap_Struct(cgsl_vector_view, 0, gsl_vector_view_free, v);
}
zwd(*args) click to toggle source
static VALUE rb_jac_quadrature_zwd(int argc, VALUE *argv, VALUE obj)
{
        jac_quadrature *q;
        gsl_vector *ws;
        int flag = 0, type, status;
        double a, b;
        Data_Get_Struct(obj, jac_quadrature, q);                       
        switch (argc) {
        case 3:
                type = FIX2INT(argv[0]);
                a = NUM2DBL(argv[1]);
                b = NUM2DBL(argv[2]);
                ws = gsl_vector_alloc(q->Q);  
                flag = 1;
                break;
        case 4:
                type = FIX2INT(argv[0]);
                a = NUM2DBL(argv[1]);
                b = NUM2DBL(argv[2]);
                Data_Get_Struct(argv[3], gsl_vector, ws);
                break;
        default:
                rb_raise(rb_eArgError, "Wrong number of arguments (%d for 3 or 4)", argc);
        }
        status = jac_quadrature_zwd(q, type, a, b, ws->data);
        if (flag == 1) gsl_vector_free(ws);
        return INT2FIX(status);
}