gsl 1.16.0.6 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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);
|