gsl 1.16.0.6 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +5 -13
- data/ChangeLog +6 -0
- data/Gemfile +1 -0
- data/README.md +77 -1
- data/Rakefile +7 -1
- data/examples/linalg/QR_solve_narray.rb +2 -1
- data/examples/linalg/SV_narray.rb +10 -0
- data/examples/linalg/chol_narray.rb +3 -0
- data/examples/wavelet/wavelet1.rb +4 -2
- data/ext/gsl_native/array.c +10 -0
- data/ext/gsl_native/bspline.c +15 -2
- data/ext/gsl_native/cheb.c +76 -10
- data/ext/gsl_native/common.c +33 -0
- data/ext/gsl_native/dht.c +26 -0
- data/ext/gsl_native/eigen.c +129 -0
- data/ext/gsl_native/extconf.rb +60 -6
- data/ext/gsl_native/fft.c +42 -0
- data/ext/gsl_native/function.c +18 -0
- data/ext/gsl_native/gsl.c +5 -0
- data/ext/gsl_native/gsl_nmatrix.c +204 -0
- data/ext/gsl_native/histogram.c +42 -0
- data/ext/gsl_native/include/rb_gsl.h +4 -0
- data/ext/gsl_native/include/rb_gsl_array.h +4 -0
- data/ext/gsl_native/include/rb_gsl_common.h +5 -0
- data/ext/gsl_native/include/rb_gsl_interp.h +4 -0
- data/ext/gsl_native/include/rb_gsl_with_nmatrix.h +28 -0
- data/ext/gsl_native/interp.c +14 -0
- data/ext/gsl_native/linalg.c +414 -22
- data/ext/gsl_native/math.c +64 -0
- data/ext/gsl_native/multifit.c +61 -0
- data/ext/gsl_native/randist.c +42 -0
- data/ext/gsl_native/sf.c +6 -0
- data/ext/gsl_native/sf_ellint.c +4 -4
- data/ext/gsl_native/sf_mathieu.c +48 -0
- data/ext/gsl_native/spline.c +30 -0
- data/ext/gsl_native/tamu_anova.c +1 -1
- data/gsl.gemspec +8 -1
- data/lib/gsl.rb +5 -0
- data/lib/gsl/version.rb +1 -1
- data/rdoc/nmatrix.rdoc +129 -0
- data/rdoc/ref.rdoc +1 -0
- data/test.sh +21 -0
- data/test/gsl/bspline_test.rb +15 -14
- data/test/gsl/combination_test.rb +17 -6
- data/test/gsl/dht_test.rb +42 -33
- data/test/gsl/nmatrix_tests/nmatrix_cheb_test.rb +34 -0
- data/test/gsl/nmatrix_tests/nmatrix_eigen_test.rb +28 -0
- data/test/gsl/nmatrix_tests/nmatrix_gsl_test.rb +65 -0
- data/test/gsl/nmatrix_tests/nmatrix_interp_test.rb +45 -0
- data/test/gsl/nmatrix_tests/nmatrix_linalg_test.rb +100 -0
- data/test/gsl/nmatrix_tests/nmatrix_stats_test.rb +88 -0
- data/test/gsl/nmatrix_tests/nmatrix_wavelet_test.rb +5 -0
- data/test/gsl/randist_test.rb +43 -23
- data/test/test_helper.rb +30 -2
- metadata +191 -51
data/ext/gsl_native/math.c
CHANGED
@@ -169,6 +169,21 @@ static VALUE rb_gsl_math_eval(double (*func)(const double), VALUE xx)
|
|
169
169
|
return ary;
|
170
170
|
}
|
171
171
|
#endif
|
172
|
+
|
173
|
+
#ifdef HAVE_NMATRIX_H
|
174
|
+
if (NM_IsNMatrix(xx)) {
|
175
|
+
NM_DENSE_STORAGE *nm;
|
176
|
+
double *ptr1, *ptr2;
|
177
|
+
nm = NM_STORAGE_DENSE(xx);
|
178
|
+
size = NM_ELEMENTS_COUNT(xx);
|
179
|
+
ptr1 = (double*) nm->elements;
|
180
|
+
ary = rb_nmatrix_dense_create(FLOAT64, nm->shape, nm->dim, nm->elements,
|
181
|
+
size);
|
182
|
+
ptr2 = (double*)NM_DENSE_ELEMENTS(ary);
|
183
|
+
for (i = 0; i < size; i++) ptr2[i] = (*func)(ptr1[i]);
|
184
|
+
return ary;
|
185
|
+
}
|
186
|
+
#endif
|
172
187
|
if (VECTOR_P(xx)) {
|
173
188
|
return vector_eval_create(xx, func);
|
174
189
|
} else if (MATRIX_P(xx)) {
|
@@ -230,6 +245,23 @@ static VALUE rb_gsl_math_eval2(double (*func)(const double, const double), VALUE
|
|
230
245
|
return ary;
|
231
246
|
}
|
232
247
|
#endif
|
248
|
+
|
249
|
+
#ifdef HAVE_NMATRIX_H
|
250
|
+
if (NM_IsNMatrix(xx)) {
|
251
|
+
NM_DENSE_STORAGE *nmx, *nmy;
|
252
|
+
double *ptr1, *ptr2, *ptr3;
|
253
|
+
nmx = NM_STORAGE_DENSE(xx);
|
254
|
+
size = NM_ELEMENTS_COUNT(xx);
|
255
|
+
nmy = NM_STORAGE_DENSE(yy);
|
256
|
+
ptr1 = (double*) nmx->elements;
|
257
|
+
ptr2 = (double*) nmy->elements;
|
258
|
+
ary = rb_nmatrix_dense_create(FLOAT64, nmx->shape, nmx->dim, nmx->elements,
|
259
|
+
size);
|
260
|
+
ptr3 = (double*)NM_DENSE_ELEMENTS(ary);
|
261
|
+
for (i = 0; i < size; i++) ptr3[i] = (*func)(ptr1[i], ptr2[i]);
|
262
|
+
return ary;
|
263
|
+
}
|
264
|
+
#endif
|
233
265
|
if (VECTOR_P(xx)) {
|
234
266
|
CHECK_VECTOR(yy);
|
235
267
|
Data_Get_Struct(xx, gsl_vector, v);
|
@@ -353,6 +385,21 @@ VALUE rb_gsl_pow(VALUE obj, VALUE xx, VALUE nn)
|
|
353
385
|
for (i = 0; i < size; i++) ptr2[i] = pow(ptr1[i], n);
|
354
386
|
return ary;
|
355
387
|
}
|
388
|
+
#endif
|
389
|
+
#ifdef HAVE_NMATRIX_H
|
390
|
+
if (NM_IsNMatrix(xx)) {
|
391
|
+
NM_DENSE_STORAGE *nm;
|
392
|
+
double *ptr1, *ptr2;
|
393
|
+
n = NUM2DBL(nn);
|
394
|
+
nm = NM_STORAGE_DENSE(xx);
|
395
|
+
size = NM_ELEMENTS_COUNT(xx);
|
396
|
+
ptr1 = (double*) nm->elements;
|
397
|
+
ary = rb_nmatrix_dense_create(FLOAT64, nm->shape, nm->dim, nm->elements,
|
398
|
+
size);
|
399
|
+
ptr2 = (double*)NM_DENSE_ELEMENTS(ary);
|
400
|
+
for (i = 0; i < size; i++) ptr2[i] = pow(ptr1[i], n);
|
401
|
+
return ary;
|
402
|
+
}
|
356
403
|
#endif
|
357
404
|
if (VECTOR_P(xx)) {
|
358
405
|
n = NUM2DBL(nn);
|
@@ -430,6 +477,23 @@ static VALUE rb_gsl_pow_int(VALUE obj, VALUE xx, VALUE nn)
|
|
430
477
|
return ary;
|
431
478
|
}
|
432
479
|
#endif
|
480
|
+
|
481
|
+
#ifdef HAVE_NMATRIX_H
|
482
|
+
if (NM_IsNMatrix(xx)) {
|
483
|
+
NM_DENSE_STORAGE *nm;
|
484
|
+
double *ptr1, *ptr2;
|
485
|
+
CHECK_FIXNUM(nn);
|
486
|
+
n = FIX2INT(nn);
|
487
|
+
nm = NM_STORAGE_DENSE(xx);
|
488
|
+
size = NM_ELEMENTS_COUNT(xx);
|
489
|
+
ptr1 = (double*) nm->elements;
|
490
|
+
ary = rb_nmatrix_dense_create(FLOAT64, nm->shape, nm->dim, nm->elements,
|
491
|
+
size);
|
492
|
+
ptr2 = (double*)NM_DENSE_ELEMENTS(ary);
|
493
|
+
for (i = 0; i < size; i++) ptr2[i] = gsl_pow_int(ptr1[i], n);
|
494
|
+
return ary;
|
495
|
+
}
|
496
|
+
#endif
|
433
497
|
if (VECTOR_P(xx)) {
|
434
498
|
CHECK_FIXNUM(nn);
|
435
499
|
n = FIX2INT(nn);
|
data/ext/gsl_native/multifit.c
CHANGED
@@ -324,6 +324,9 @@ static VALUE rb_gsl_multifit_fdfsolver_test_gradient(int argc, VALUE *argv, VALU
|
|
324
324
|
{
|
325
325
|
gsl_multifit_fdfsolver *solver = NULL;
|
326
326
|
gsl_vector *g = NULL;
|
327
|
+
#ifndef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
328
|
+
gsl_matrix *J = NULL;
|
329
|
+
#endif
|
327
330
|
int status;
|
328
331
|
double epsabs;
|
329
332
|
Data_Get_Struct(obj, gsl_multifit_fdfsolver, solver);
|
@@ -331,7 +334,14 @@ static VALUE rb_gsl_multifit_fdfsolver_test_gradient(int argc, VALUE *argv, VALU
|
|
331
334
|
case 1:
|
332
335
|
Need_Float(argv[0]);
|
333
336
|
g = gsl_vector_alloc(solver->x->size);
|
337
|
+
#ifdef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
334
338
|
gsl_multifit_gradient(solver->J, solver->f, g);
|
339
|
+
#else
|
340
|
+
J = gsl_matrix_alloc(solver->f->size, solver->x->size);
|
341
|
+
gsl_multifit_fdfsolver_jac(solver, J);
|
342
|
+
gsl_multifit_gradient(J, solver->f, g);
|
343
|
+
gsl_matrix_free(J);
|
344
|
+
#endif
|
335
345
|
epsabs = NUM2DBL(argv[0]);
|
336
346
|
status = gsl_multifit_test_gradient(g, epsabs);
|
337
347
|
gsl_vector_free(g);
|
@@ -353,15 +363,35 @@ static VALUE rb_gsl_multifit_fdfsolver_gradient(int argc, VALUE *argv, VALUE obj
|
|
353
363
|
{
|
354
364
|
gsl_multifit_fdfsolver *solver = NULL;
|
355
365
|
gsl_vector *g = NULL;
|
366
|
+
#ifndef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
367
|
+
gsl_matrix *J = gsl_matrix_alloc(solver->f->size, solver->x->size);
|
368
|
+
#endif
|
356
369
|
// local variable "status" declared and set, but never used
|
357
370
|
//int status;
|
358
371
|
Data_Get_Struct(obj, gsl_multifit_fdfsolver, solver);
|
372
|
+
#ifndef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
373
|
+
gsl_multifit_fdfsolver_jac(solver, J);
|
374
|
+
#endif
|
359
375
|
if (argc == 1) {
|
376
|
+
#ifndef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
377
|
+
int retval = 0;
|
378
|
+
#endif
|
360
379
|
Data_Get_Vector(argv[0], g);
|
380
|
+
#ifdef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
361
381
|
return INT2FIX(gsl_multifit_gradient(solver->J, solver->f, g));
|
382
|
+
#else
|
383
|
+
retval = gsl_multifit_gradient(J, solver->f, g);
|
384
|
+
gsl_matrix_free(J);
|
385
|
+
return INT2FIX(retval);
|
386
|
+
#endif
|
362
387
|
} else {
|
363
388
|
g = gsl_vector_alloc(solver->x->size);
|
389
|
+
#ifdef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
364
390
|
/*status =*/ gsl_multifit_gradient(solver->J, solver->f, g);
|
391
|
+
#else
|
392
|
+
/*status =*/ gsl_multifit_gradient(J, solver->f, g);
|
393
|
+
gsl_matrix_free(J);
|
394
|
+
#endif
|
365
395
|
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, g);
|
366
396
|
}
|
367
397
|
}
|
@@ -377,15 +407,33 @@ static VALUE rb_gsl_multifit_fdfsolver_covar(int argc, VALUE *argv, VALUE obj)
|
|
377
407
|
Need_Float(argv[0]);
|
378
408
|
Data_Get_Struct(obj, gsl_multifit_fdfsolver, solver);
|
379
409
|
epsrel = NUM2DBL(argv[0]);
|
410
|
+
#ifndef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
411
|
+
gsl_matrix *J = gsl_matrix_alloc(solver->f->size, solver->x->size);
|
412
|
+
gsl_multifit_fdfsolver_jac(solver, J);
|
413
|
+
#endif
|
380
414
|
switch (argc) {
|
415
|
+
#ifndef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
416
|
+
int retval = 0;
|
417
|
+
#endif
|
381
418
|
case 1:
|
382
419
|
covar = gsl_matrix_alloc(solver->x->size, solver->x->size);
|
420
|
+
#ifdef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
383
421
|
/*status =*/ gsl_multifit_covar(solver->J, epsrel, covar);
|
422
|
+
#else
|
423
|
+
/*status =*/ gsl_multifit_covar(J, epsrel, covar);
|
424
|
+
gsl_matrix_free(J);
|
425
|
+
#endif
|
384
426
|
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, covar);
|
385
427
|
break;
|
386
428
|
case 2:
|
387
429
|
Data_Get_Matrix(argv[1], covar);
|
430
|
+
#ifdef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
388
431
|
return INT2FIX(gsl_multifit_covar(solver->J, epsrel, covar));
|
432
|
+
#else
|
433
|
+
retval = gsl_multifit_covar(J, epsrel, covar);
|
434
|
+
gsl_matrix_free(J);
|
435
|
+
return INT2FIX(retval);
|
436
|
+
#endif
|
389
437
|
break;
|
390
438
|
default:
|
391
439
|
rb_raise(rb_eArgError, "wrong number of arguments");
|
@@ -418,7 +466,13 @@ static VALUE rb_gsl_multifit_fdfsolver_J(VALUE obj)
|
|
418
466
|
{
|
419
467
|
gsl_multifit_fdfsolver *solver = NULL;
|
420
468
|
Data_Get_Struct(obj, gsl_multifit_fdfsolver, solver);
|
469
|
+
#ifdef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
421
470
|
return Data_Wrap_Struct(cgsl_matrix_view_ro, 0, NULL, solver->J);
|
471
|
+
#else
|
472
|
+
gsl_matrix *J = gsl_matrix_alloc(solver->f->size, solver->x->size);
|
473
|
+
gsl_multifit_fdfsolver_jac(solver, J);
|
474
|
+
return Data_Wrap_Struct(cgsl_matrix_view_ro, 0, gsl_matrix_free, J);
|
475
|
+
#endif
|
422
476
|
}
|
423
477
|
|
424
478
|
/* singleton */
|
@@ -1699,7 +1753,14 @@ static VALUE rb_gsl_multifit_fit(int argc, VALUE *argv, VALUE klass)
|
|
1699
1753
|
covar = gsl_matrix_alloc(p, p);
|
1700
1754
|
chi2 = gsl_pow_2(gsl_blas_dnrm2(solver->f)); /* not reduced chi-square */
|
1701
1755
|
dof = n - p;
|
1756
|
+
#ifdef HAVE_GSL_MULTIFIT_FDFSOLVER_J
|
1702
1757
|
gsl_multifit_covar(solver->J, 0.0, covar);
|
1758
|
+
#else
|
1759
|
+
gsl_matrix *J = gsl_matrix_alloc(n,p);
|
1760
|
+
gsl_multifit_fdfsolver_jac(solver, J);
|
1761
|
+
gsl_multifit_covar(J, 0.0, covar);
|
1762
|
+
gsl_matrix_free(J);
|
1763
|
+
#endif
|
1703
1764
|
for (i = 0; i < p; i++)
|
1704
1765
|
gsl_vector_set(verr, i, sqrt(chi2/dof*gsl_matrix_get(covar, i, i)));
|
1705
1766
|
gsl_matrix_free(covar);
|
data/ext/gsl_native/randist.c
CHANGED
@@ -1316,6 +1316,20 @@ VALUE rb_gsl_eval_pdf_cdf(VALUE xx, double (*f)(double))
|
|
1316
1316
|
return ary;
|
1317
1317
|
}
|
1318
1318
|
#endif
|
1319
|
+
|
1320
|
+
#ifdef HAVE_NMATRIX_H
|
1321
|
+
if (NM_IsNMatrix(xx)) {
|
1322
|
+
NM_DENSE_STORAGE *nm;
|
1323
|
+
double *ptr1, *ptr2;
|
1324
|
+
nm = NM_STORAGE_DENSE(xx);
|
1325
|
+
n = NM_DENSE_COUNT(xx);
|
1326
|
+
ptr1 = (double *) nm->elements;
|
1327
|
+
ary = rb_nmatrix_dense_create(FLOAT64, nm->shape, nm->dim, nm->elements, n);
|
1328
|
+
ptr2 = (double*)NM_DENSE_ELEMENTS(ary);
|
1329
|
+
for (i = 0; i < n; i++) ptr2[i] = (*f)(ptr1[i]);
|
1330
|
+
return ary;
|
1331
|
+
}
|
1332
|
+
#endif
|
1319
1333
|
if (VECTOR_P(xx)) {
|
1320
1334
|
Data_Get_Struct(xx, gsl_vector, v);
|
1321
1335
|
vnew = gsl_vector_alloc(v->size);
|
@@ -1384,6 +1398,20 @@ VALUE rb_gsl_eval_pdf_cdf2(VALUE xx, VALUE aa,
|
|
1384
1398
|
return ary;
|
1385
1399
|
}
|
1386
1400
|
#endif
|
1401
|
+
|
1402
|
+
#ifdef HAVE_NMATRIX_H
|
1403
|
+
if (NM_IsNMatrix(xx)) {
|
1404
|
+
NM_DENSE_STORAGE *nm;
|
1405
|
+
double *ptr1, *ptr2;
|
1406
|
+
nm = NM_STORAGE_DENSE(xx);
|
1407
|
+
n = NM_DENSE_COUNT(xx);
|
1408
|
+
ptr1 = (double*) nm->elements;
|
1409
|
+
ary = rb_nmatrix_dense_create(FLOAT64, nm->shape, nm->dim, nm->elements, n);
|
1410
|
+
ptr2 = (double*)NM_DENSE_ELEMENTS(ary);
|
1411
|
+
for (i = 0; i < n; i++) ptr2[i] = (*f)(ptr1[i], a);
|
1412
|
+
return ary;
|
1413
|
+
}
|
1414
|
+
#endif
|
1387
1415
|
if (VECTOR_P(xx)) {
|
1388
1416
|
Data_Get_Struct(xx, gsl_vector, v);
|
1389
1417
|
vnew = gsl_vector_alloc(v->size);
|
@@ -1452,6 +1480,20 @@ VALUE rb_gsl_eval_pdf_cdf3(VALUE xx, VALUE aa, VALUE bb,
|
|
1452
1480
|
return ary;
|
1453
1481
|
}
|
1454
1482
|
#endif
|
1483
|
+
|
1484
|
+
#ifdef HAVE_NMATRIX_H
|
1485
|
+
if (NM_IsNMatrix(xx)) {
|
1486
|
+
NM_DENSE_STORAGE *nm;
|
1487
|
+
double *ptr1, *ptr2;
|
1488
|
+
nm = NM_STORAGE_DENSE(xx);
|
1489
|
+
n = NM_DENSE_COUNT(xx);
|
1490
|
+
ptr1 = (double *) nm->elements;
|
1491
|
+
ary = rb_nmatrix_dense_create(FLOAT64, nm->shape, nm->dim, nm->elements, n);
|
1492
|
+
ptr2 = (double*) NM_DENSE_ELEMENTS(ary);
|
1493
|
+
for (i = 0; i < n; i++) ptr2[i] = (*f)(ptr1[i], a, b);
|
1494
|
+
return ary;
|
1495
|
+
}
|
1496
|
+
#endif
|
1455
1497
|
if (VECTOR_P(xx)) {
|
1456
1498
|
Data_Get_Struct(xx, gsl_vector, v);
|
1457
1499
|
vnew = gsl_vector_alloc(v->size);
|
data/ext/gsl_native/sf.c
CHANGED
@@ -131,6 +131,12 @@ VALUE rb_gsl_sf_eval1(double (*func)(double), VALUE argv)
|
|
131
131
|
return rb_gsl_nary_eval1(argv, func);
|
132
132
|
}
|
133
133
|
#endif
|
134
|
+
|
135
|
+
#ifdef HAVE_NMATRIX_H
|
136
|
+
if (NM_IsNMatrix(argv)) {
|
137
|
+
return rb_gsl_nmatrix_eval1(argv, func);
|
138
|
+
}
|
139
|
+
#endif
|
134
140
|
if (MATRIX_P(argv)) {
|
135
141
|
return matrix_eval_create(argv, func);
|
136
142
|
} else if (VECTOR_P(argv)) {
|
data/ext/gsl_native/sf_ellint.c
CHANGED
@@ -82,17 +82,17 @@ static VALUE rb_gsl_sf_ellint_P_e(VALUE obj, VALUE phi, VALUE k,
|
|
82
82
|
static VALUE rb_gsl_sf_ellint_D(int argc, VALUE *argv, VALUE obj)
|
83
83
|
{
|
84
84
|
if (argc == 3)
|
85
|
-
return
|
85
|
+
return rb_gsl_sf_eval_double2_m(gsl_sf_ellint_D, argv[0], argv[1],
|
86
86
|
INT2FIX(GSL_PREC_DOUBLE));
|
87
87
|
else
|
88
|
-
return
|
88
|
+
return rb_gsl_sf_eval_double2_m(gsl_sf_ellint_D, argv[0], argv[1],
|
89
89
|
argv[3]);
|
90
90
|
}
|
91
91
|
|
92
92
|
static VALUE rb_gsl_sf_ellint_D_e(VALUE obj, VALUE phi, VALUE k,
|
93
|
-
VALUE
|
93
|
+
VALUE m)
|
94
94
|
{
|
95
|
-
return
|
95
|
+
return rb_gsl_sf_eval_e_double2_m(gsl_sf_ellint_D_e, phi, k, m);
|
96
96
|
}
|
97
97
|
|
98
98
|
static VALUE rb_gsl_sf_ellint_RC(int argc, VALUE *argv, VALUE obj)
|
data/ext/gsl_native/sf_mathieu.c
CHANGED
@@ -133,11 +133,19 @@ static VALUE sf_mathieu_eval_e_int2_double2(VALUE n1, VALUE n2, VALUE qq, VALUE
|
|
133
133
|
/**********/
|
134
134
|
static VALUE rb_gsl_sf_mathieu_a_e(VALUE module, VALUE order, VALUE qq)
|
135
135
|
{
|
136
|
+
#ifdef HAVE_GSL_SF_MATHIEU_A_E
|
137
|
+
return rb_gsl_sf_eval_e_int_double(gsl_sf_mathieu_a_e, order, qq);
|
138
|
+
#else
|
136
139
|
return rb_gsl_sf_eval_e_int_double(gsl_sf_mathieu_a, order, qq);
|
140
|
+
#endif
|
137
141
|
}
|
138
142
|
static VALUE rb_gsl_sf_mathieu_a(VALUE module, VALUE order, VALUE qq)
|
139
143
|
{
|
144
|
+
#ifdef HAVE_GSL_SF_MATHIEU_A_E
|
145
|
+
return sf_mathieu_eval(order, qq, gsl_sf_mathieu_a_e);
|
146
|
+
#else
|
140
147
|
return sf_mathieu_eval(order, qq, gsl_sf_mathieu_a);
|
148
|
+
#endif
|
141
149
|
}
|
142
150
|
static VALUE rb_gsl_sf_mathieu_a_array(VALUE module, int argc, VALUE *argv)
|
143
151
|
{
|
@@ -145,11 +153,19 @@ static VALUE rb_gsl_sf_mathieu_a_array(VALUE module, int argc, VALUE *argv)
|
|
145
153
|
}
|
146
154
|
static VALUE rb_gsl_sf_mathieu_b_e(VALUE module, VALUE order, VALUE qq)
|
147
155
|
{
|
156
|
+
#ifdef HAVE_GSL_SF_MATHIEU_B_E
|
157
|
+
return rb_gsl_sf_eval_e_int_double(gsl_sf_mathieu_b_e, order, qq);
|
158
|
+
#else
|
148
159
|
return rb_gsl_sf_eval_e_int_double(gsl_sf_mathieu_b, order, qq);
|
160
|
+
#endif
|
149
161
|
}
|
150
162
|
static VALUE rb_gsl_sf_mathieu_b(VALUE module, VALUE order, VALUE qq)
|
151
163
|
{
|
164
|
+
#ifdef HAVE_GSL_SF_MATHIEU_B_E
|
165
|
+
return sf_mathieu_eval(order, qq, gsl_sf_mathieu_b_e);
|
166
|
+
#else
|
152
167
|
return sf_mathieu_eval(order, qq, gsl_sf_mathieu_b);
|
168
|
+
#endif
|
153
169
|
}
|
154
170
|
static VALUE rb_gsl_sf_mathieu_b_array(VALUE module, int argc, VALUE *argv)
|
155
171
|
{
|
@@ -157,11 +173,19 @@ static VALUE rb_gsl_sf_mathieu_b_array(VALUE module, int argc, VALUE *argv)
|
|
157
173
|
}
|
158
174
|
static VALUE rb_gsl_sf_mathieu_ce_e(VALUE module, VALUE order, VALUE qq, VALUE zz)
|
159
175
|
{
|
176
|
+
#ifdef HAVE_GSL_SF_MATHIEU_CE_E
|
177
|
+
return sf_mathieu_eval_e_int_double2(order, qq, zz, gsl_sf_mathieu_ce_e);
|
178
|
+
#else
|
160
179
|
return sf_mathieu_eval_e_int_double2(order, qq, zz, gsl_sf_mathieu_ce);
|
180
|
+
#endif
|
161
181
|
}
|
162
182
|
static VALUE rb_gsl_sf_mathieu_ce(VALUE module, VALUE order, VALUE qq, VALUE zz)
|
163
183
|
{
|
184
|
+
#ifdef HAVE_GSL_SF_MATHIEU_CE_E
|
185
|
+
return sf_mathieu_eval_int_double2(order, qq, zz, gsl_sf_mathieu_ce_e);
|
186
|
+
#else
|
164
187
|
return sf_mathieu_eval_int_double2(order, qq, zz, gsl_sf_mathieu_ce);
|
188
|
+
#endif
|
165
189
|
}
|
166
190
|
static VALUE rb_gsl_sf_mathieu_ce_array(VALUE module, int argc, VALUE *argv)
|
167
191
|
{
|
@@ -169,11 +193,19 @@ static VALUE rb_gsl_sf_mathieu_ce_array(VALUE module, int argc, VALUE *argv)
|
|
169
193
|
}
|
170
194
|
static VALUE rb_gsl_sf_mathieu_se_e(VALUE module, VALUE order, VALUE qq, VALUE zz)
|
171
195
|
{
|
196
|
+
#ifdef HAVE_GSL_SF_MATHIEU_SE_E
|
197
|
+
return sf_mathieu_eval_e_int_double2(order, qq, zz, gsl_sf_mathieu_se_e);
|
198
|
+
#else
|
172
199
|
return sf_mathieu_eval_e_int_double2(order, qq, zz, gsl_sf_mathieu_se);
|
200
|
+
#endif
|
173
201
|
}
|
174
202
|
static VALUE rb_gsl_sf_mathieu_se(VALUE module, VALUE order, VALUE qq, VALUE zz)
|
175
203
|
{
|
204
|
+
#ifdef HAVE_GSL_SF_MATHIEU_SE_E
|
205
|
+
return sf_mathieu_eval_int_double2(order, qq, zz, gsl_sf_mathieu_se_e);
|
206
|
+
#else
|
176
207
|
return sf_mathieu_eval_int_double2(order, qq, zz, gsl_sf_mathieu_se);
|
208
|
+
#endif
|
177
209
|
}
|
178
210
|
static VALUE rb_gsl_sf_mathieu_se_array(VALUE module, int argc, VALUE *argv)
|
179
211
|
{
|
@@ -183,11 +215,19 @@ static VALUE rb_gsl_sf_mathieu_se_array(VALUE module, int argc, VALUE *argv)
|
|
183
215
|
/*****/
|
184
216
|
static VALUE rb_gsl_sf_mathieu_Mc_e(VALUE module, VALUE n1, VALUE n2, VALUE q, VALUE x)
|
185
217
|
{
|
218
|
+
#ifdef HAVE_GSL_SF_MATHIEU_MC_E
|
219
|
+
return sf_mathieu_eval_e_int2_double2(n1, n2, q, x, gsl_sf_mathieu_Mc_e);
|
220
|
+
#else
|
186
221
|
return sf_mathieu_eval_e_int2_double2(n1, n2, q, x, gsl_sf_mathieu_Mc);
|
222
|
+
#endif
|
187
223
|
}
|
188
224
|
static VALUE rb_gsl_sf_mathieu_Mc(VALUE module, VALUE n1, VALUE n2, VALUE q, VALUE x)
|
189
225
|
{
|
226
|
+
#ifdef HAVE_GSL_SF_MATHIEU_MC_E
|
227
|
+
return sf_mathieu_eval2(n1, n2, q, x, gsl_sf_mathieu_Mc_e);
|
228
|
+
#else
|
190
229
|
return sf_mathieu_eval2(n1, n2, q, x, gsl_sf_mathieu_Mc);
|
230
|
+
#endif
|
191
231
|
}
|
192
232
|
static VALUE rb_gsl_sf_mathieu_Mc_array(VALUE module, int argc, VALUE *argv)
|
193
233
|
{
|
@@ -195,11 +235,19 @@ static VALUE rb_gsl_sf_mathieu_Mc_array(VALUE module, int argc, VALUE *argv)
|
|
195
235
|
}
|
196
236
|
static VALUE rb_gsl_sf_mathieu_Ms_e(VALUE module, VALUE n1, VALUE n2, VALUE q, VALUE x)
|
197
237
|
{
|
238
|
+
#ifdef HAVE_GSL_SF_MATHIEU_MS_E
|
239
|
+
return sf_mathieu_eval_e_int2_double2(n1, n2, q, x, gsl_sf_mathieu_Ms_e);
|
240
|
+
#else
|
198
241
|
return sf_mathieu_eval_e_int2_double2(n1, n2, q, x, gsl_sf_mathieu_Ms);
|
242
|
+
#endif
|
199
243
|
}
|
200
244
|
static VALUE rb_gsl_sf_mathieu_Ms(VALUE module, VALUE n1, VALUE n2, VALUE q, VALUE x)
|
201
245
|
{
|
246
|
+
#ifdef HAVE_GSL_SF_MATHIEU_MS_E
|
247
|
+
return sf_mathieu_eval2(n1, n2, q, x, gsl_sf_mathieu_Ms_e);
|
248
|
+
#else
|
202
249
|
return sf_mathieu_eval2(n1, n2, q, x, gsl_sf_mathieu_Ms);
|
250
|
+
#endif
|
203
251
|
}
|
204
252
|
static VALUE rb_gsl_sf_mathieu_Ms_array(VALUE module, int argc, VALUE *argv)
|
205
253
|
{
|
data/ext/gsl_native/spline.c
CHANGED
@@ -85,6 +85,14 @@ static VALUE rb_gsl_spline_init(VALUE obj, VALUE xxa, VALUE yya)
|
|
85
85
|
size = nax->total;
|
86
86
|
ptr1 = (double *) nax->ptr;
|
87
87
|
#endif
|
88
|
+
#ifdef HAVE_NARRAY_H
|
89
|
+
} else if (NM_IsNMatrix(xxa)) {
|
90
|
+
NM_DENSE_STORAGE *nmx = NULL;
|
91
|
+
nmx = NM_STORAGE_DENSE(xxa);
|
92
|
+
size = NM_DENSE_COUNT(xxa);
|
93
|
+
ptr1 = (double *) nmx->elements;
|
94
|
+
#endif
|
95
|
+
|
88
96
|
} else {
|
89
97
|
rb_raise(rb_eTypeError, "not a vector");
|
90
98
|
}
|
@@ -99,6 +107,13 @@ static VALUE rb_gsl_spline_init(VALUE obj, VALUE xxa, VALUE yya)
|
|
99
107
|
GetNArray(yya, nay);
|
100
108
|
ptr2 = (double *) nay->ptr;
|
101
109
|
#endif
|
110
|
+
|
111
|
+
#ifdef HAVE_NARRAY_H
|
112
|
+
} else if (NM_IsNMatrix(yya)) {
|
113
|
+
NM_DENSE_STORAGE *nmy;
|
114
|
+
nmy = NM_STORAGE_DENSE(yya);
|
115
|
+
ptr2 = (double *) nmy->elements;
|
116
|
+
#endif
|
102
117
|
} else if (VECTOR_P(yya)) {
|
103
118
|
Data_Get_Struct(yya, gsl_vector, ya);
|
104
119
|
ptr2 = ya->data;
|
@@ -162,6 +177,21 @@ static VALUE rb_gsl_spline_evaluate(VALUE obj, VALUE xx,
|
|
162
177
|
return ary;
|
163
178
|
}
|
164
179
|
#endif
|
180
|
+
|
181
|
+
#ifdef HAVE_NMATRIX_H
|
182
|
+
if (NM_IsNMatrix(xx)) {
|
183
|
+
double *ptr1 = NULL, *ptr2 = NULL;
|
184
|
+
NM_DENSE_STORAGE *nm = NULL;
|
185
|
+
nm = NM_STORAGE_DENSE(xx);
|
186
|
+
n = NM_DENSE_COUNT(xx);
|
187
|
+
ptr1 = (double *) nm->elements;
|
188
|
+
ary = rb_nmatrix_dense_create(FLOAT64, nm->shape, nm->dim, nm->elements, n);
|
189
|
+
ptr2 = (double*)NM_DENSE_ELEMENTS(ary);
|
190
|
+
for (i = 0; i < n; i++)
|
191
|
+
ptr2[i] = (*eval)(rgs->s, ptr1[i], rgs->a);
|
192
|
+
return ary;
|
193
|
+
}
|
194
|
+
#endif
|
165
195
|
if (VECTOR_P(xx)) {
|
166
196
|
Data_Get_Struct(xx, gsl_vector, v);
|
167
197
|
vnew = gsl_vector_alloc(v->size);
|