Class: Jac::Quadrature

Inherits:
GSL::Object show all
Defined in:
ext/jacobi.c

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from GSL::Object

#dup, #info, #inspect

Class Method Details

.alloc(vQ) ⇒ Object

**



230
231
232
233
234
235
236
237
# File 'ext/jacobi.c', line 230

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);
}

Instance Method Details

#alphaObject



253
254
255
256
257
258
# File 'ext/jacobi.c', line 253

static VALUE rb_jac_quadrature_alpha(VALUE obj)
{
	jac_quadrature *q;
	Data_Get_Struct(obj, jac_quadrature, q);
	return NUM2DBL(q->alpha);
}

#betaObject



260
261
262
263
264
265
# File 'ext/jacobi.c', line 260

static VALUE rb_jac_quadrature_beta(VALUE obj)
{
	jac_quadrature *q;
	Data_Get_Struct(obj, jac_quadrature, q);
	return NUM2DBL(q->beta);
}

#DObject



291
292
293
294
295
296
297
298
299
300
301
# File 'ext/jacobi.c', line 291

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);
}

#differentiate(*args) ⇒ Object



414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
# File 'ext/jacobi.c', line 414

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(ff) ⇒ Object



377
378
379
380
381
382
383
384
385
# File 'ext/jacobi.c', line 377

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) ⇒ Object



315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
# File 'ext/jacobi.c', line 315

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_freeObject



340
341
342
343
344
345
346
# File 'ext/jacobi.c', line 340

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) ⇒ Object



387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
# File 'ext/jacobi.c', line 387

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;
}

#QObject



239
240
241
242
243
244
# File 'ext/jacobi.c', line 239

static VALUE rb_jac_quadrature_Q(VALUE obj)
{
	jac_quadrature *q;
	Data_Get_Struct(obj, jac_quadrature, q);
	return INT2FIX(q->Q);
}

#typeObject



246
247
248
249
250
251
# File 'ext/jacobi.c', line 246

static VALUE rb_jac_quadrature_type(VALUE obj)
{
	jac_quadrature *q;
	Data_Get_Struct(obj, jac_quadrature, q);
	return INT2FIX((int) q->type);
}

#wObject



279
280
281
282
283
284
285
286
287
288
289
# File 'ext/jacobi.c', line 279

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);
}

#xObject



267
268
269
270
271
272
273
274
275
276
277
# File 'ext/jacobi.c', line 267

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);
}

#xpObject



303
304
305
306
307
308
309
310
311
312
313
# File 'ext/jacobi.c', line 303

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) ⇒ Object



348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
# File 'ext/jacobi.c', line 348

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);
}