gsl 1.12.108

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. data/README.rdoc +29 -0
  2. data/Rakefile +54 -0
  3. data/VERSION +2 -0
  4. data/ext/MANIFEST +119 -0
  5. data/ext/alf.c +206 -0
  6. data/ext/array.c +666 -0
  7. data/ext/array_complex.c +247 -0
  8. data/ext/blas.c +29 -0
  9. data/ext/blas1.c +731 -0
  10. data/ext/blas2.c +1093 -0
  11. data/ext/blas3.c +881 -0
  12. data/ext/block.c +44 -0
  13. data/ext/block_source.c +886 -0
  14. data/ext/bspline.c +130 -0
  15. data/ext/bundle.c +3 -0
  16. data/ext/cdf.c +754 -0
  17. data/ext/cheb.c +542 -0
  18. data/ext/combination.c +283 -0
  19. data/ext/common.c +325 -0
  20. data/ext/complex.c +1004 -0
  21. data/ext/const.c +673 -0
  22. data/ext/const_additional.c +120 -0
  23. data/ext/cqp.c +283 -0
  24. data/ext/deriv.c +195 -0
  25. data/ext/dht.c +361 -0
  26. data/ext/diff.c +166 -0
  27. data/ext/dirac.c +395 -0
  28. data/ext/eigen.c +2373 -0
  29. data/ext/error.c +194 -0
  30. data/ext/extconf.rb +281 -0
  31. data/ext/fcmp.c +66 -0
  32. data/ext/fft.c +1092 -0
  33. data/ext/fit.c +205 -0
  34. data/ext/fresnel.c +312 -0
  35. data/ext/function.c +524 -0
  36. data/ext/geometry.c +139 -0
  37. data/ext/graph.c +1638 -0
  38. data/ext/gsl.c +271 -0
  39. data/ext/gsl_narray.c +653 -0
  40. data/ext/histogram.c +1995 -0
  41. data/ext/histogram2d.c +1068 -0
  42. data/ext/histogram3d.c +884 -0
  43. data/ext/histogram3d_source.c +750 -0
  44. data/ext/histogram_find.c +101 -0
  45. data/ext/histogram_oper.c +159 -0
  46. data/ext/ieee.c +98 -0
  47. data/ext/integration.c +1138 -0
  48. data/ext/interp.c +512 -0
  49. data/ext/jacobi.c +739 -0
  50. data/ext/linalg.c +4047 -0
  51. data/ext/linalg_complex.c +741 -0
  52. data/ext/math.c +725 -0
  53. data/ext/matrix.c +39 -0
  54. data/ext/matrix_complex.c +1732 -0
  55. data/ext/matrix_double.c +560 -0
  56. data/ext/matrix_int.c +256 -0
  57. data/ext/matrix_source.c +2733 -0
  58. data/ext/min.c +250 -0
  59. data/ext/monte.c +992 -0
  60. data/ext/multifit.c +1879 -0
  61. data/ext/multimin.c +808 -0
  62. data/ext/multimin_fsdf.c +156 -0
  63. data/ext/multiroots.c +955 -0
  64. data/ext/ndlinear.c +321 -0
  65. data/ext/nmf.c +167 -0
  66. data/ext/nmf_wrap.c +72 -0
  67. data/ext/ntuple.c +469 -0
  68. data/ext/odeiv.c +959 -0
  69. data/ext/ool.c +879 -0
  70. data/ext/oper_complex_source.c +253 -0
  71. data/ext/permutation.c +596 -0
  72. data/ext/poly.c +42 -0
  73. data/ext/poly2.c +265 -0
  74. data/ext/poly_source.c +1885 -0
  75. data/ext/qrng.c +171 -0
  76. data/ext/randist.c +1873 -0
  77. data/ext/rational.c +480 -0
  78. data/ext/rng.c +612 -0
  79. data/ext/root.c +408 -0
  80. data/ext/sf.c +1494 -0
  81. data/ext/sf_airy.c +200 -0
  82. data/ext/sf_bessel.c +867 -0
  83. data/ext/sf_clausen.c +28 -0
  84. data/ext/sf_coulomb.c +206 -0
  85. data/ext/sf_coupling.c +118 -0
  86. data/ext/sf_dawson.c +29 -0
  87. data/ext/sf_debye.c +157 -0
  88. data/ext/sf_dilog.c +42 -0
  89. data/ext/sf_elementary.c +44 -0
  90. data/ext/sf_ellint.c +206 -0
  91. data/ext/sf_elljac.c +29 -0
  92. data/ext/sf_erfc.c +93 -0
  93. data/ext/sf_exp.c +164 -0
  94. data/ext/sf_expint.c +211 -0
  95. data/ext/sf_fermi_dirac.c +148 -0
  96. data/ext/sf_gamma.c +344 -0
  97. data/ext/sf_gegenbauer.c +96 -0
  98. data/ext/sf_hyperg.c +197 -0
  99. data/ext/sf_laguerre.c +112 -0
  100. data/ext/sf_lambert.c +47 -0
  101. data/ext/sf_legendre.c +367 -0
  102. data/ext/sf_log.c +104 -0
  103. data/ext/sf_mathieu.c +238 -0
  104. data/ext/sf_power.c +46 -0
  105. data/ext/sf_psi.c +98 -0
  106. data/ext/sf_synchrotron.c +48 -0
  107. data/ext/sf_transport.c +76 -0
  108. data/ext/sf_trigonometric.c +207 -0
  109. data/ext/sf_zeta.c +119 -0
  110. data/ext/signal.c +310 -0
  111. data/ext/siman.c +718 -0
  112. data/ext/sort.c +208 -0
  113. data/ext/spline.c +395 -0
  114. data/ext/stats.c +799 -0
  115. data/ext/sum.c +168 -0
  116. data/ext/tamu_anova.c +56 -0
  117. data/ext/tensor.c +38 -0
  118. data/ext/tensor_source.c +1123 -0
  119. data/ext/vector.c +38 -0
  120. data/ext/vector_complex.c +2236 -0
  121. data/ext/vector_double.c +1433 -0
  122. data/ext/vector_int.c +204 -0
  123. data/ext/vector_source.c +3329 -0
  124. data/ext/wavelet.c +937 -0
  125. data/include/rb_gsl.h +151 -0
  126. data/include/rb_gsl_array.h +238 -0
  127. data/include/rb_gsl_cheb.h +21 -0
  128. data/include/rb_gsl_common.h +343 -0
  129. data/include/rb_gsl_complex.h +25 -0
  130. data/include/rb_gsl_const.h +29 -0
  131. data/include/rb_gsl_dirac.h +13 -0
  132. data/include/rb_gsl_eigen.h +17 -0
  133. data/include/rb_gsl_fft.h +62 -0
  134. data/include/rb_gsl_fit.h +25 -0
  135. data/include/rb_gsl_function.h +27 -0
  136. data/include/rb_gsl_graph.h +70 -0
  137. data/include/rb_gsl_histogram.h +63 -0
  138. data/include/rb_gsl_histogram3d.h +97 -0
  139. data/include/rb_gsl_integration.h +17 -0
  140. data/include/rb_gsl_interp.h +46 -0
  141. data/include/rb_gsl_linalg.h +25 -0
  142. data/include/rb_gsl_math.h +26 -0
  143. data/include/rb_gsl_odeiv.h +21 -0
  144. data/include/rb_gsl_poly.h +71 -0
  145. data/include/rb_gsl_rational.h +37 -0
  146. data/include/rb_gsl_rng.h +21 -0
  147. data/include/rb_gsl_root.h +22 -0
  148. data/include/rb_gsl_sf.h +119 -0
  149. data/include/rb_gsl_statistics.h +17 -0
  150. data/include/rb_gsl_tensor.h +45 -0
  151. data/include/rb_gsl_with_narray.h +22 -0
  152. data/include/templates_off.h +87 -0
  153. data/include/templates_on.h +241 -0
  154. data/lib/gsl/gnuplot.rb +41 -0
  155. data/lib/gsl/oper.rb +68 -0
  156. data/lib/ool.rb +22 -0
  157. data/lib/ool/conmin.rb +30 -0
  158. metadata +224 -0
@@ -0,0 +1,799 @@
1
+ /*
2
+ stats.c
3
+ Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
4
+ (C) Copyright 2001-2006 by Yoshiki Tsunesada
5
+
6
+ Ruby/GSL is free software: you can redistribute it and/or modify it
7
+ under the terms of the GNU General Public License.
8
+ This library is distributed in the hope that it will be useful, but
9
+ WITHOUT ANY WARRANTY.
10
+ */
11
+ #include "rb_gsl_config.h"
12
+ #include "rb_gsl_array.h"
13
+ #include "rb_gsl_statistics.h"
14
+ #ifdef HAVE_NARRAY_H
15
+ #include "narray.h"
16
+ #endif
17
+
18
+ static double* get_vector_stats2(int argc, VALUE *argv, VALUE obj,
19
+ size_t *stride, size_t *size)
20
+ {
21
+ double *v = NULL;
22
+ switch (TYPE(obj)) {
23
+ case T_MODULE: case T_CLASS: case T_OBJECT:
24
+ if (argc < 1) rb_raise(rb_eArgError, "too few arguments");
25
+ v = get_vector_ptr(argv[0], stride, size);
26
+ break;
27
+ default:
28
+ v = get_vector_ptr(obj, stride, size);
29
+ break;
30
+ }
31
+ return v;
32
+ }
33
+
34
+ static VALUE rb_gsl_stats_XXX(int argc, VALUE *argv, VALUE obj,
35
+ double (*f)(const double*, size_t, size_t))
36
+ {
37
+ size_t stride, size;
38
+ double *data = NULL;
39
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
40
+ return rb_float_new((*f)(data, stride, size));
41
+ }
42
+
43
+ static VALUE rb_gsl_stats_XXX1(int argc, VALUE *argv, VALUE obj,
44
+ double (*f)(const double*, size_t, size_t, double))
45
+ {
46
+ size_t stride, size;
47
+ double *data = NULL;
48
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
49
+ return rb_float_new((*f)(data, stride, size, NUM2DBL(argv[argc-1])));
50
+ }
51
+
52
+ static VALUE rb_gsl_stats_XXX2(int argc, VALUE *argv, VALUE obj,
53
+ double (*f)(const double*, size_t, size_t),
54
+ double (*fm)(const double*, size_t, size_t, double, double))
55
+ {
56
+ double x, a, b, *data = NULL;
57
+ size_t stride, size;
58
+ switch (TYPE(obj)) {
59
+ case T_MODULE: case T_CLASS: case T_OBJECT:
60
+ switch (argc) {
61
+ case 2:
62
+ data = get_vector_ptr(argv[0], &stride, &size);
63
+ a = NUM2DBL(argv[1]); b = NUM2DBL(argv[2]);
64
+ x = (*fm)(data, stride, size, a, b);
65
+ break;
66
+ case 1:
67
+ data = get_vector_ptr(argv[0], &stride, &size);
68
+ x = (*f)(data, stride, size);
69
+ break;
70
+ default:
71
+ rb_raise(rb_eArgError,
72
+ "wrong number of arguments (%d for 1 or 2)", argc);
73
+ break;
74
+ }
75
+ break;
76
+ default:
77
+ switch (argc) {
78
+ case 0:
79
+ data = get_vector_ptr(obj, &stride, &size);
80
+ x = (*f)(data, stride, size);
81
+ break;
82
+ case 1:
83
+ data = get_vector_ptr(obj, &stride, &size);
84
+ a = NUM2DBL(argv[0]); b = NUM2DBL(argv[1]);
85
+ x = (*fm)(data, stride, size, a, b);
86
+ break;
87
+ default:
88
+ rb_raise(rb_eArgError,
89
+ "wrong number of arguments (%d for 0 or 1)", argc);
90
+ break;
91
+ }
92
+ break;
93
+ }
94
+ return rb_float_new(x);
95
+ }
96
+
97
+ static VALUE rb_gsl_stats_mean(int argc, VALUE *argv, VALUE obj)
98
+ {
99
+ return rb_gsl_stats_XXX(argc, argv, obj, gsl_stats_mean);
100
+ }
101
+
102
+ static VALUE rb_gsl_stats_XXX_m(int argc, VALUE *argv, VALUE obj,
103
+ double (*f)(const double*, size_t, size_t),
104
+ double (*fm)(const double*, size_t, size_t, double))
105
+ {
106
+ double x, mean, *data = NULL;
107
+ size_t stride, size;
108
+ switch (TYPE(obj)) {
109
+ case T_MODULE: case T_CLASS: case T_OBJECT:
110
+ switch (argc) {
111
+ case 2:
112
+ data = get_vector_ptr(argv[0], &stride, &size);
113
+ mean = NUM2DBL(argv[1]);
114
+ x = (*fm)(data, stride, size, mean);
115
+ break;
116
+ case 1:
117
+ data = get_vector_ptr(argv[0], &stride, &size);
118
+ x = (*f)(data, stride, size);
119
+ break;
120
+ default:
121
+ rb_raise(rb_eArgError,
122
+ "wrong number of arguments (%d for 1 or 2)", argc);
123
+ break;
124
+ }
125
+ break;
126
+ default:
127
+ switch (argc) {
128
+ case 0:
129
+ data = get_vector_ptr(obj, &stride, &size);
130
+ x = (*f)(data, stride, size);
131
+ break;
132
+ case 1:
133
+ data = get_vector_ptr(obj, &stride, &size);
134
+ mean = NUM2DBL(argv[0]);
135
+ x = (*fm)(data, stride, size, mean);
136
+ break;
137
+ default:
138
+ rb_raise(rb_eArgError,
139
+ "wrong number of arguments (%d for 0 or 1)", argc);
140
+ break;
141
+ }
142
+ break;
143
+ }
144
+ return rb_float_new(x);
145
+ }
146
+
147
+ static VALUE rb_gsl_stats_variance_m(int argc, VALUE *argv, VALUE obj)
148
+ {
149
+ return rb_gsl_stats_XXX_m(argc, argv, obj,
150
+ gsl_stats_variance, gsl_stats_variance_m);
151
+ }
152
+
153
+ static VALUE rb_gsl_stats_sd_m(int argc, VALUE *argv, VALUE obj)
154
+ {
155
+ return rb_gsl_stats_XXX_m(argc, argv, obj,
156
+ gsl_stats_sd, gsl_stats_sd_m);
157
+ }
158
+
159
+ #ifdef GSL_1_11_LATER
160
+ static VALUE rb_gsl_stats_tss_m(int argc, VALUE *argv, VALUE obj)
161
+ {
162
+ return rb_gsl_stats_XXX_m(argc, argv, obj,
163
+ gsl_stats_tss, gsl_stats_tss_m);
164
+ }
165
+ #endif
166
+
167
+ static VALUE rb_gsl_stats_variance_with_fixed_mean(int argc, VALUE *argv,
168
+ VALUE obj)
169
+ {
170
+ return rb_gsl_stats_XXX1(argc, argv, obj,
171
+ gsl_stats_variance_with_fixed_mean);
172
+ }
173
+
174
+ static VALUE rb_gsl_stats_sd_with_fixed_mean(int argc, VALUE *argv,
175
+ VALUE obj)
176
+ {
177
+ return rb_gsl_stats_XXX1(argc, argv, obj,
178
+ gsl_stats_sd_with_fixed_mean);
179
+ }
180
+
181
+ static VALUE rb_gsl_stats_absdev_m(int argc, VALUE *argv, VALUE obj)
182
+ {
183
+ return rb_gsl_stats_XXX_m(argc, argv, obj,
184
+ gsl_stats_absdev, gsl_stats_absdev_m);
185
+ }
186
+
187
+ static VALUE rb_gsl_stats_skew(int argc, VALUE *argv,
188
+ VALUE obj)
189
+ {
190
+ return rb_gsl_stats_XXX2(argc, argv, obj,
191
+ gsl_stats_skew,
192
+ gsl_stats_skew_m_sd);
193
+ }
194
+
195
+ static VALUE rb_gsl_stats_kurtosis(int argc, VALUE *argv,
196
+ VALUE obj)
197
+ {
198
+ return rb_gsl_stats_XXX2(argc, argv, obj,
199
+ gsl_stats_kurtosis,
200
+ gsl_stats_kurtosis_m_sd);
201
+ }
202
+
203
+ static VALUE rb_gsl_stats_lag1_autocorrelation(int argc, VALUE *argv, VALUE obj)
204
+ {
205
+ return rb_gsl_stats_XXX_m(argc, argv, obj,
206
+ gsl_stats_lag1_autocorrelation, gsl_stats_lag1_autocorrelation_m);
207
+ }
208
+
209
+ /****************************/
210
+
211
+ static void get_vector_stats3(int argc, VALUE *argv, VALUE obj,
212
+ double **w, size_t *stridew, size_t *sizew,
213
+ double **x, size_t *stridex, size_t *sizex)
214
+ {
215
+ switch (TYPE(obj)) {
216
+ case T_MODULE: case T_CLASS: case T_OBJECT:
217
+ if (argc < 2) rb_raise(rb_eArgError, "too few arguments");
218
+ *w = get_vector_ptr(argv[0], stridew, sizew);
219
+ *x = get_vector_ptr(argv[1], stridex, sizex);
220
+ break;
221
+ default:
222
+ if (argc < 1) rb_raise(rb_eArgError, "too few arguments");
223
+ *x = get_vector_ptr(obj, stridex, sizex);
224
+ *w = get_vector_ptr(argv[0], stridew, sizew);
225
+ break;
226
+ }
227
+ }
228
+
229
+ static VALUE rb_gsl_stats_wXXX(int argc, VALUE *argv, VALUE obj,
230
+ double (*f)(const double*, size_t, const double*,
231
+ size_t, size_t))
232
+ {
233
+ double *w, *x;
234
+ double mean;
235
+ size_t sizew, stridew, sizex, stridex;
236
+ get_vector_stats3(argc, argv, obj, &w, &stridew, &sizew, &x, &stridex, &sizex);
237
+ mean = (*f)(w, stridew, x, stridex, sizex);
238
+ return rb_float_new(mean);
239
+ }
240
+
241
+ static VALUE rb_gsl_stats_wXXX_m(int argc, VALUE *argv, VALUE obj,
242
+ double (*f)(const double*, size_t, const double*,
243
+ size_t, size_t, double))
244
+ {
245
+ double *w, *x;
246
+ double mean;
247
+ size_t sizew, stridew, sizex, stridex;
248
+ get_vector_stats3(argc, argv, obj, &w, &stridew, &sizew, &x, &stridex, &sizex);
249
+ mean = (*f)(w, stridew, x, stridex, sizex, NUM2DBL(argv[argc-1]));
250
+ return rb_float_new(mean);
251
+ }
252
+
253
+ static VALUE rb_gsl_stats_wmean(int argc, VALUE *argv, VALUE obj)
254
+ {
255
+ return rb_gsl_stats_wXXX(argc, argv, obj, gsl_stats_wmean);
256
+ }
257
+
258
+ static VALUE rb_gsl_stats_wvariance(int argc, VALUE *argv, VALUE obj)
259
+ {
260
+ return rb_gsl_stats_wXXX(argc, argv, obj, gsl_stats_wvariance);
261
+ }
262
+
263
+ static VALUE rb_gsl_stats_wsd(int argc, VALUE *argv, VALUE obj)
264
+ {
265
+ return rb_gsl_stats_wXXX(argc, argv, obj, gsl_stats_wsd);
266
+ }
267
+
268
+ static VALUE rb_gsl_stats_wvariance_m(int argc, VALUE *argv, VALUE obj)
269
+ {
270
+ return rb_gsl_stats_wXXX_m(argc, argv, obj, gsl_stats_wvariance_m);
271
+ }
272
+
273
+ static VALUE rb_gsl_stats_wsd_m(int argc, VALUE *argv, VALUE obj)
274
+ {
275
+ return rb_gsl_stats_wXXX_m(argc, argv, obj, gsl_stats_wsd_m);
276
+ }
277
+
278
+ static VALUE rb_gsl_stats_wvariance_with_fixed_mean(int argc, VALUE *argv, VALUE obj)
279
+ {
280
+ return rb_gsl_stats_wXXX_m(argc, argv, obj, gsl_stats_wvariance_with_fixed_mean);
281
+ }
282
+
283
+ static VALUE rb_gsl_stats_wsd_with_fixed_mean(int argc, VALUE *argv, VALUE obj)
284
+ {
285
+ return rb_gsl_stats_wXXX_m(argc, argv, obj, gsl_stats_wsd_with_fixed_mean);
286
+ }
287
+
288
+ static VALUE rb_gsl_stats_wabsdev(int argc, VALUE *argv, VALUE obj)
289
+ {
290
+ return rb_gsl_stats_wXXX(argc, argv, obj, gsl_stats_wabsdev);
291
+ }
292
+
293
+ static VALUE rb_gsl_stats_wabsdev_m(int argc, VALUE *argv, VALUE obj)
294
+ {
295
+ return rb_gsl_stats_wXXX_m(argc, argv, obj, gsl_stats_wabsdev_m);
296
+ }
297
+
298
+ static VALUE rb_gsl_stats_wskew(int argc, VALUE *argv, VALUE obj)
299
+ {
300
+ return rb_gsl_stats_wXXX(argc, argv, obj, gsl_stats_wskew);
301
+ }
302
+
303
+ static VALUE rb_gsl_stats_wkurtosis(int argc, VALUE *argv, VALUE obj)
304
+ {
305
+ return rb_gsl_stats_wXXX(argc, argv, obj, gsl_stats_wkurtosis);
306
+ }
307
+
308
+ static VALUE rb_gsl_stats_wskew_m_sd(VALUE obj, VALUE ww, VALUE wm, VALUE wsd)
309
+ {
310
+ double *w, *x;
311
+ size_t stridew, stridex, sizew, sizex;
312
+ double skew_m;
313
+ x = get_vector_ptr(obj, &stridex, &sizex);
314
+ w = get_vector_ptr(ww, &stridew, &sizew);
315
+ skew_m = gsl_stats_wskew_m_sd(w, stridew, x, stridex, sizex, NUM2DBL(wm),
316
+ NUM2DBL(wsd));
317
+ return rb_float_new(skew_m);
318
+ }
319
+
320
+ static VALUE rb_gsl_stats_wkurtosis_m_sd(VALUE obj, VALUE ww, VALUE wm, VALUE wsd)
321
+ {
322
+ double *w, *x;
323
+ size_t stridew, stridex, sizew, sizex;
324
+ double kurtosis_m;
325
+ x = get_vector_ptr(obj, &stridex, &sizex);
326
+ w = get_vector_ptr(ww, &stridew, &sizew);
327
+ kurtosis_m = gsl_stats_wkurtosis_m_sd(w, stridew, x, stridex, sizex, NUM2DBL(wm),
328
+ NUM2DBL(wsd));
329
+ return rb_float_new(kurtosis_m);
330
+ }
331
+
332
+ static VALUE rb_gsl_stats_max(int argc, VALUE *argv, VALUE obj)
333
+ {
334
+ size_t stride, size;
335
+ double max, *data = NULL;
336
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
337
+ max = gsl_stats_max(data, stride, size);
338
+ return rb_float_new(max);
339
+ }
340
+
341
+ static VALUE rb_gsl_stats_min(int argc, VALUE *argv, VALUE obj)
342
+ {
343
+ double min, *data = NULL;
344
+ size_t stride, size;
345
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
346
+ min = gsl_stats_min(data, stride, size);
347
+ return rb_float_new(min);
348
+ }
349
+
350
+ static VALUE rb_gsl_stats_minmax(int argc, VALUE *argv, VALUE obj)
351
+ {
352
+ size_t stride, size;
353
+ double min, max, *data = NULL;
354
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
355
+ gsl_stats_minmax(&min, &max, data, stride, size);
356
+ return rb_ary_new3(2, rb_float_new(min), rb_float_new(max));
357
+ }
358
+
359
+ static VALUE rb_gsl_stats_max_index(int argc, VALUE *argv, VALUE obj)
360
+ {
361
+ double *data = NULL;
362
+ size_t index, stride, size;
363
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
364
+ index = gsl_stats_max_index(data, stride, size);
365
+ return INT2FIX(index);
366
+ }
367
+
368
+ static VALUE rb_gsl_stats_min_index(int argc, VALUE *argv, VALUE obj)
369
+ {
370
+ double *data = NULL;
371
+ size_t index, stride, size;
372
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
373
+ index = gsl_stats_min_index(data, stride, size);
374
+ return INT2FIX(index);
375
+ }
376
+
377
+ static VALUE rb_gsl_stats_minmax_index(int argc, VALUE *argv, VALUE obj)
378
+ {
379
+ double *data = NULL;
380
+ size_t imin, imax, stride, size;
381
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
382
+ gsl_stats_minmax_index(&imin, &imax, data, stride, size);
383
+ return rb_ary_new3(2, INT2FIX(imin), INT2FIX(imax));
384
+ }
385
+
386
+ static VALUE rb_gsl_stats_median_from_sorted_data(int argc, VALUE *argv, VALUE obj)
387
+ {
388
+ size_t stride, size;
389
+ double median, *data = NULL;
390
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
391
+ median = gsl_stats_median_from_sorted_data(data, stride, size);
392
+ return rb_float_new(median);
393
+ }
394
+
395
+ static VALUE rb_gsl_stats_median(int argc, VALUE *argv, VALUE obj)
396
+ {
397
+ size_t stride, size;
398
+ double median, *data = NULL, *data2 = NULL;
399
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
400
+ data2 = (double *) malloc(sizeof(double)*size*stride);
401
+ memcpy(data2, data, sizeof(double)*size*stride);
402
+ gsl_sort(data2, stride, size);
403
+ median = gsl_stats_median_from_sorted_data(data2, stride, size);
404
+ free(data2);
405
+ return rb_float_new(median);
406
+ }
407
+
408
+ static VALUE rb_gsl_stats_quantile_from_sorted_data(int argc, VALUE *argv, VALUE obj)
409
+ {
410
+ return rb_gsl_stats_XXX1(argc, argv, obj,
411
+ gsl_stats_quantile_from_sorted_data);
412
+ /* size_t stride, size;
413
+ double quantile, *data = NULL;
414
+ data = get_vector_ptr(obj, &stride, &size);
415
+ quantile = gsl_stats_quantile_from_sorted_data(data, stride, size, NUM2DBL(f));
416
+ return rb_float_new(quantile);*/
417
+ }
418
+ /*
419
+ static VALUE rb_gsl_stats_quantile(int argc, VALUE *argv, VALUE obj)
420
+ {
421
+ size_t stride, size;
422
+ double quantile, *data = NULL, *data2 = NULL;
423
+ data = get_vector_stats2(argc, argv, obj, &stride, &size);
424
+ data2 = (double *) malloc(sizeof(double)*size*stride);
425
+ memcpy(data2, data, sizeof(double)*size*stride);
426
+ gsl_sort(data2, stride, size);
427
+ quantile = gsl_stats_quantile_from_sorted_data(data2, stride, size);
428
+ free(data2);
429
+ return rb_float_new(quantile);
430
+ }
431
+ */
432
+ static VALUE rb_gsl_stats_covariance2(VALUE obj, VALUE vv1, VALUE vv2)
433
+ {
434
+ double *data1, *data2;
435
+ size_t stride1, stride2, size;
436
+ data1 = get_vector_ptr(vv1, &stride1, &size);
437
+ data2 = get_vector_ptr(vv2, &stride2, &size);
438
+ return rb_float_new(gsl_stats_covariance(data1, stride1, data2,
439
+ stride2, size));
440
+ }
441
+
442
+ static VALUE rb_gsl_stats_covariance_m2(VALUE obj, VALUE vv1, VALUE vv2,
443
+ VALUE m1, VALUE m2)
444
+ {
445
+ double *data1, *data2;
446
+ size_t stride1, stride2, size;
447
+ data1 = get_vector_ptr(vv1, &stride1, &size);
448
+ data2 = get_vector_ptr(vv2, &stride2, &size);
449
+ return rb_float_new(gsl_stats_covariance_m(data1, stride1, data2,
450
+ stride2, size, NUM2DBL(m1), NUM2DBL(m2)));
451
+ }
452
+
453
+ #ifdef GSL_1_10_LATER
454
+ static VALUE rb_gsl_stats_correlation(VALUE obj, VALUE vv1, VALUE vv2)
455
+ {
456
+ double *data1, *data2;
457
+ size_t stride1, stride2, size;
458
+ data1 = get_vector_ptr(vv1, &stride1, &size);
459
+ data2 = get_vector_ptr(vv2, &stride2, &size);
460
+ return rb_float_new(gsl_stats_correlation(data1, stride1, data2,
461
+ stride2, size));
462
+ }
463
+ static VALUE rb_gsl_stats_pvariance(VALUE obj, VALUE vv1, VALUE vv2)
464
+ {
465
+ double *data1, *data2;
466
+ size_t stride1, stride2, size1, size2;
467
+ data1 = get_vector_ptr(vv1, &stride1, &size1);
468
+ data2 = get_vector_ptr(vv2, &stride2, &size2);
469
+ return rb_float_new(gsl_stats_pvariance(data1, stride1, size1, data2,
470
+ stride2, size2));
471
+ }
472
+ static VALUE rb_gsl_stats_ttest(VALUE obj, VALUE vv1, VALUE vv2)
473
+ {
474
+ double *data1, *data2;
475
+ size_t stride1, stride2, size1, size2;
476
+ data1 = get_vector_ptr(vv1, &stride1, &size1);
477
+ data2 = get_vector_ptr(vv2, &stride2, &size2);
478
+ return rb_float_new(gsl_stats_ttest(data1, stride1, size1, data2,
479
+ stride2, size2));
480
+ }
481
+ #endif
482
+
483
+ static VALUE rb_gsl_stats_wmean2(VALUE obj, VALUE ww, VALUE dd)
484
+ {
485
+ double wmean, *dataw = NULL, *data = NULL;
486
+ size_t stridew, strided, size;
487
+ dataw = get_vector_ptr(ww, &stridew, &size);
488
+ data = get_vector_ptr(dd, &strided, &size);
489
+ wmean = gsl_stats_wmean(dataw, stridew, data, strided, size);
490
+ return rb_float_new(wmean);
491
+ }
492
+
493
+ static VALUE rb_gsl_stats_wvariance2(VALUE obj, VALUE ww, VALUE dd)
494
+ {
495
+ double wvariance, *dataw = NULL, *data = NULL;
496
+ size_t stridew, strided, size;
497
+ dataw = get_vector_ptr(ww, &stridew, &size);
498
+ data = get_vector_ptr(dd, &strided, &size);
499
+ wvariance = gsl_stats_wvariance(dataw, stridew, data, strided, size);
500
+ return rb_float_new(wvariance);
501
+ }
502
+
503
+ static VALUE rb_gsl_stats_wvariance_m2(VALUE obj, VALUE ww, VALUE dd, VALUE mm)
504
+ {
505
+ double *dataw = NULL, *data = NULL;
506
+ double wvariance, m;
507
+ size_t stridew, strided, size;
508
+ dataw = get_vector_ptr(ww, &stridew, &size);
509
+ data = get_vector_ptr(dd, &strided, &size);
510
+ m = NUM2DBL(mm);
511
+ wvariance = gsl_stats_wvariance_m(dataw, stridew, data, strided, size, m);
512
+ return rb_float_new(wvariance);
513
+ }
514
+
515
+ static VALUE rb_gsl_stats_wsd2(VALUE obj, VALUE ww, VALUE dd)
516
+ {
517
+ double wsd, *dataw = NULL, *data = NULL;
518
+ size_t stridew, strided, size;
519
+ dataw = get_vector_ptr(ww, &stridew, &size);
520
+ data = get_vector_ptr(dd, &strided, &size);
521
+ wsd = gsl_stats_wsd(dataw, stridew, data, strided, size);
522
+ return rb_float_new(wsd);
523
+ }
524
+
525
+ static VALUE rb_gsl_stats_wsd_m2(VALUE obj, VALUE ww, VALUE dd, VALUE mm)
526
+ {
527
+ double *dataw = NULL, *data = NULL;
528
+ double wsd, m;
529
+ size_t stridew, strided, size;
530
+ dataw = get_vector_ptr(ww, &stridew, &size);
531
+ data = get_vector_ptr(dd, &strided, &size);
532
+ m = NUM2DBL(mm);
533
+ wsd = gsl_stats_wsd_m(dataw, stridew, data, strided, size, m);
534
+ return rb_float_new(wsd);
535
+ }
536
+
537
+ static VALUE rb_gsl_stats_wvariance_with_fixed_mean2(VALUE obj, VALUE ww, VALUE dd,
538
+ VALUE mm)
539
+ {
540
+ double wvariance, m;
541
+ double *dataw = NULL, *data = NULL;
542
+ size_t stridew, strided, size;
543
+ dataw = get_vector_ptr(ww, &stridew, &size);
544
+ data = get_vector_ptr(dd, &strided, &size);
545
+ m = NUM2DBL(mm);
546
+ wvariance = gsl_stats_wvariance_with_fixed_mean(dataw, stridew,
547
+ data, strided, size, m);
548
+
549
+ return rb_float_new(wvariance);
550
+ }
551
+
552
+ static VALUE rb_gsl_stats_wsd_with_fixed_mean2(VALUE obj, VALUE ww, VALUE dd,
553
+ VALUE mm)
554
+ {
555
+ double wsd, m;
556
+ double *dataw = NULL, *data = NULL;
557
+ size_t stridew, strided, size;
558
+ dataw = get_vector_ptr(ww, &stridew, &size);
559
+ data = get_vector_ptr(dd, &strided, &size);
560
+ m = NUM2DBL(mm);
561
+ wsd = gsl_stats_wsd_with_fixed_mean(dataw, stridew, data, strided, size, m);
562
+ return rb_float_new(wsd);
563
+ }
564
+
565
+
566
+ static VALUE rb_gsl_stats_wabsdev2(VALUE obj, VALUE ww, VALUE dd)
567
+ {
568
+ double wabsdev, *dataw = NULL, *data = NULL;
569
+ size_t stridew, strided, size;
570
+ dataw = get_vector_ptr(ww, &stridew, &size);
571
+ data = get_vector_ptr(dd, &strided, &size);
572
+ wabsdev = gsl_stats_wabsdev(dataw, stridew, data, strided, size);
573
+ return rb_float_new(wabsdev);
574
+ }
575
+
576
+ static VALUE rb_gsl_stats_wabsdev_m2(VALUE obj, VALUE ww, VALUE dd, VALUE mm)
577
+ {
578
+ double *dataw = NULL, *data = NULL;
579
+ double wabsdev, m;
580
+ size_t stridew, strided, size;
581
+ dataw = get_vector_ptr(ww, &stridew, &size);
582
+ data = get_vector_ptr(dd, &strided, &size);
583
+ m = NUM2DBL(mm);
584
+ wabsdev = gsl_stats_wabsdev_m(dataw, stridew, data, strided, size, m);
585
+ return rb_float_new(wabsdev);
586
+ }
587
+ static VALUE rb_gsl_stats_wskew2(VALUE obj, VALUE ww, VALUE dd)
588
+ {
589
+ double wskew, *dataw = NULL, *data = NULL;
590
+ size_t stridew, strided, size;
591
+ dataw = get_vector_ptr(ww, &stridew, &size);
592
+ data = get_vector_ptr(dd, &strided, &size);
593
+ wskew = gsl_stats_wskew(dataw, stridew, data, strided, size);
594
+ return rb_float_new(wskew);
595
+ }
596
+
597
+ static VALUE rb_gsl_stats_wskew_m2(VALUE obj, VALUE ww, VALUE dd, VALUE mm, VALUE ss)
598
+ {
599
+ double *dataw = NULL, *data = NULL;
600
+ double wskew, m, sd;
601
+ size_t stridew, strided, size;
602
+ dataw = get_vector_ptr(ww, &stridew, &size);
603
+ data = get_vector_ptr(dd, &strided, &size);
604
+ m = NUM2DBL(mm);
605
+ sd = NUM2DBL(ss);
606
+ wskew = gsl_stats_wskew_m_sd(dataw, stridew, data, strided, size, m, sd);
607
+ return rb_float_new(wskew);
608
+ }
609
+
610
+ static VALUE rb_gsl_stats_wkurtosis2(VALUE obj, VALUE ww, VALUE dd)
611
+ {
612
+ double wkurtosis, *dataw = NULL, *data = NULL;
613
+ size_t stridew, strided, size;
614
+ dataw = get_vector_ptr(ww, &stridew, &size);
615
+ data = get_vector_ptr(dd, &strided, &size);
616
+ wkurtosis = gsl_stats_wkurtosis(dataw, stridew, data, strided, size);
617
+ return rb_float_new(wkurtosis);
618
+ }
619
+
620
+ static VALUE rb_gsl_stats_wkurtosis_m2(VALUE obj, VALUE ww, VALUE dd, VALUE mm, VALUE ss)
621
+ {
622
+ double *dataw = NULL, *data = NULL;
623
+ double wkurtosis, m, sd;
624
+ size_t stridew, strided, size;
625
+ dataw = get_vector_ptr(ww, &stridew, &size);
626
+ data = get_vector_ptr(dd, &strided, &size);
627
+ m = NUM2DBL(mm);
628
+ sd = NUM2DBL(ss);
629
+ wkurtosis = gsl_stats_wkurtosis_m_sd(dataw, stridew, data, strided, size, m, sd);
630
+ return rb_float_new(wkurtosis);
631
+ }
632
+
633
+ void Init_gsl_stats(VALUE module)
634
+ {
635
+ VALUE mgsl_stats;
636
+
637
+ mgsl_stats = rb_define_module_under(module, "Stats");
638
+
639
+ rb_define_singleton_method(mgsl_stats, "mean", rb_gsl_stats_mean, -1);
640
+ rb_define_method(cgsl_vector, "stats_mean", rb_gsl_stats_mean, -1);
641
+ rb_define_alias(cgsl_vector, "mean", "stats_mean");
642
+ rb_define_alias(cgsl_vector, "average", "stats_mean");
643
+
644
+ rb_define_singleton_method(mgsl_stats, "variance", rb_gsl_stats_variance_m, -1);
645
+ rb_define_singleton_method(mgsl_stats, "variance_m", rb_gsl_stats_variance_m, -1);
646
+ rb_define_method(cgsl_vector, "stats_variance_m", rb_gsl_stats_variance_m, -1);
647
+ rb_define_alias(cgsl_vector, "variance_m", "stats_variance_m");
648
+ rb_define_alias(cgsl_vector, "variance", "stats_variance_m");
649
+ rb_define_alias(cgsl_vector, "var", "stats_variance_m");
650
+
651
+ rb_define_singleton_method(mgsl_stats, "sd", rb_gsl_stats_sd_m, -1);
652
+ rb_define_singleton_method(mgsl_stats, "sd_m", rb_gsl_stats_sd_m, -1);
653
+ #ifdef GSL_1_11_LATER
654
+ rb_define_singleton_method(mgsl_stats, "tss", rb_gsl_stats_tss_m, -1);
655
+ rb_define_singleton_method(mgsl_stats, "tss_m", rb_gsl_stats_tss_m, -1);
656
+ #endif
657
+ rb_define_singleton_method(mgsl_stats, "sdev", rb_gsl_stats_sd_m, -1);
658
+ rb_define_singleton_method(mgsl_stats, "sigma", rb_gsl_stats_sd_m, -1);
659
+ rb_define_method(cgsl_vector, "stats_sd_m", rb_gsl_stats_sd_m, -1);
660
+ rb_define_alias(cgsl_vector, "sd_m", "stats_sd_m");
661
+ rb_define_alias(cgsl_vector, "stats_sd", "stats_sd_m");
662
+ rb_define_alias(cgsl_vector, "sd", "stats_sd_m");
663
+ rb_define_alias(cgsl_vector, "sigma", "stats_sd_m");
664
+ rb_define_alias(cgsl_vector, "sdev", "stats_sd_m");
665
+ #ifdef GSL_1_11_LATER
666
+ rb_define_method(cgsl_vector, "stats_tss_m", rb_gsl_stats_tss_m, -1);
667
+ rb_define_alias(cgsl_vector, "stats_tss", "stats_tss_m");
668
+ rb_define_alias(cgsl_vector, "tss_m", "stats_tss_m");
669
+ rb_define_alias(cgsl_vector, "tss", "stats_tss_m");
670
+ #endif
671
+
672
+ rb_define_singleton_method(mgsl_stats, "variance_with_fixed_mean",
673
+ rb_gsl_stats_variance_with_fixed_mean, -1);
674
+ rb_define_method(cgsl_vector, "stats_variance_with_fixed_mean",
675
+ rb_gsl_stats_variance_with_fixed_mean, -1);
676
+ rb_define_alias(cgsl_vector, "variance_with_fixed_mean",
677
+ "stats_variance_with_fixed_mean");
678
+
679
+ rb_define_singleton_method(mgsl_stats, "sd_with_fixed_mean",
680
+ rb_gsl_stats_sd_with_fixed_mean, -1);
681
+ rb_define_method(cgsl_vector, "stats_sd_with_fixed_mean",
682
+ rb_gsl_stats_sd_with_fixed_mean, -1);
683
+ rb_define_alias(cgsl_vector, "sd_with_fixed_mean",
684
+ "stats_sd_with_fixed_mean");
685
+
686
+ rb_define_singleton_method(mgsl_stats, "absdev", rb_gsl_stats_absdev_m, -1);
687
+ rb_define_singleton_method(mgsl_stats, "absdev_m", rb_gsl_stats_absdev_m, -1);
688
+ rb_define_method(cgsl_vector, "stats_absdev_m", rb_gsl_stats_absdev_m, -1);
689
+ rb_define_alias(cgsl_vector, "absdev_m", "stats_absdev_m");
690
+ rb_define_alias(cgsl_vector, "absdev", "stats_absdev_m");
691
+
692
+ rb_define_singleton_method(mgsl_stats, "skew", rb_gsl_stats_skew, -1);
693
+ rb_define_singleton_method(mgsl_stats, "skew_m", rb_gsl_stats_skew, -1);
694
+ rb_define_method(cgsl_vector, "stats_skew_m", rb_gsl_stats_skew, -1);
695
+ rb_define_alias(cgsl_vector, "skew_m", "stats_skew_m");
696
+ rb_define_alias(cgsl_vector, "skew", "stats_skew_m");
697
+
698
+ rb_define_singleton_method(mgsl_stats, "kurtosis", rb_gsl_stats_kurtosis, -1);
699
+ rb_define_singleton_method(mgsl_stats, "kurtosis_m", rb_gsl_stats_kurtosis, -1);
700
+ rb_define_method(cgsl_vector, "stats_kurtosis_m", rb_gsl_stats_kurtosis, -1);
701
+ rb_define_alias(cgsl_vector, "kurtosis_m", "stats_kurtosis_m");
702
+ rb_define_alias(cgsl_vector, "kurtosis", "stats_kurtosis_m");
703
+
704
+ rb_define_singleton_method(mgsl_stats, "lag1_autocorrelation", rb_gsl_stats_lag1_autocorrelation, -1);
705
+ rb_define_singleton_method(mgsl_stats, "lag1_autocorrelation_m", rb_gsl_stats_lag1_autocorrelation, -1);
706
+ rb_define_method(cgsl_vector, "stats_lag1_autocorrelation_m", rb_gsl_stats_lag1_autocorrelation, -1);
707
+ rb_define_alias(cgsl_vector, "lag1_autocorrelation_m", "stats_lag1_autocorrelation_m");
708
+ rb_define_alias(cgsl_vector, "lag1_autocorrelation", "stats_lag1_autocorrelation_m");
709
+
710
+ rb_define_singleton_method(mgsl_stats, "covariance", rb_gsl_stats_covariance2, 2);
711
+ rb_define_singleton_method(mgsl_stats, "covariance_m", rb_gsl_stats_covariance_m2, 4);
712
+
713
+ #ifdef GSL_1_10_LATER
714
+ rb_define_singleton_method(mgsl_stats, "correlation", rb_gsl_stats_correlation, 2);
715
+ rb_define_singleton_method(mgsl_stats, "pvariance", rb_gsl_stats_pvariance, 2);
716
+ rb_define_singleton_method(mgsl_stats, "ttest", rb_gsl_stats_ttest, 2);
717
+ #endif
718
+
719
+ /*****/
720
+
721
+ rb_define_singleton_method(mgsl_stats, "wmean", rb_gsl_stats_wmean2, -1);
722
+ rb_define_singleton_method(mgsl_stats, "wvariance", rb_gsl_stats_wvariance2, -1);
723
+ rb_define_singleton_method(mgsl_stats, "wvariance_m", rb_gsl_stats_wvariance_m2, -1);
724
+ rb_define_singleton_method(mgsl_stats, "wsd", rb_gsl_stats_wsd2, -1);
725
+ rb_define_singleton_method(mgsl_stats, "wsd_m", rb_gsl_stats_wsd_m2, -1);
726
+ rb_define_singleton_method(mgsl_stats, "wvariance_with_fixed_mean",
727
+ rb_gsl_stats_wvariance_with_fixed_mean2, -1);
728
+ rb_define_singleton_method(mgsl_stats, "wsd_with_fixed_mean",
729
+ rb_gsl_stats_wsd_with_fixed_mean2, -1);
730
+ rb_define_singleton_method(mgsl_stats, "wabsdev", rb_gsl_stats_wabsdev2, -1);
731
+ rb_define_singleton_method(mgsl_stats, "wabsdev_m", rb_gsl_stats_wabsdev_m2, -1);
732
+ rb_define_singleton_method(mgsl_stats, "wskew", rb_gsl_stats_wskew2, -1);
733
+ rb_define_singleton_method(mgsl_stats, "wskew_m_sd", rb_gsl_stats_wskew_m2, 4);
734
+ rb_define_singleton_method(mgsl_stats, "wkurtosis", rb_gsl_stats_wkurtosis2, -1);
735
+ rb_define_singleton_method(mgsl_stats, "wkurtosis_m_sd", rb_gsl_stats_wkurtosis_m2, 4);
736
+
737
+ /*****/
738
+
739
+ rb_define_method(cgsl_vector, "stats_wmean", rb_gsl_stats_wmean, -1);
740
+ rb_define_alias(cgsl_vector, "wmean", "stats_wmean");
741
+ rb_define_method(cgsl_vector, "stats_wvariance", rb_gsl_stats_wvariance, -1);
742
+ rb_define_alias(cgsl_vector, "wvariance", "stats_wvariance");
743
+ rb_define_method(cgsl_vector, "stats_wvariance_m", rb_gsl_stats_wvariance_m, -1);
744
+ rb_define_alias(cgsl_vector, "wvariance_m", "stats_wvariance_m");
745
+ rb_define_method(cgsl_vector, "stats_wsd", rb_gsl_stats_wsd, -1);
746
+ rb_define_alias(cgsl_vector, "wsd", "stats_wsd");
747
+ rb_define_method(cgsl_vector, "stats_wsd_m", rb_gsl_stats_wsd_m, -1);
748
+ rb_define_alias(cgsl_vector, "wsd_m", "stats_wsd_m");
749
+ rb_define_method(cgsl_vector, "stats_wvariance_with_fixed_mean",
750
+ rb_gsl_stats_wvariance_with_fixed_mean, -1);
751
+ rb_define_alias(cgsl_vector, "wvariance_with_fixed_mean",
752
+ "stats_wvariance_with_fixed_mean");
753
+ rb_define_method(cgsl_vector, "stats_wsd_with_fixed_mean",
754
+ rb_gsl_stats_wsd_with_fixed_mean, -1);
755
+ rb_define_alias(cgsl_vector, "wsd_with_fixed_mean", "stats_wsd_with_fixed_mean");
756
+ rb_define_method(cgsl_vector, "stats_wabsdev", rb_gsl_stats_wabsdev, -1);
757
+ rb_define_alias(cgsl_vector, "wabsdev", "stats_wabsdev");
758
+ rb_define_method(cgsl_vector, "stats_wabsdev_m", rb_gsl_stats_wabsdev_m, -1);
759
+ rb_define_alias(cgsl_vector, "wabsdev_m", "stats_wabsdev_m");
760
+ rb_define_method(cgsl_vector, "stats_wskew", rb_gsl_stats_wskew, -1);
761
+ rb_define_alias(cgsl_vector, "wskew", "stats_wskew");
762
+ rb_define_method(cgsl_vector, "stats_wskew_m_sd", rb_gsl_stats_wskew_m_sd, 2);
763
+ rb_define_alias(cgsl_vector, "wskew_m_sd", "stats_wskew_m_sd");
764
+ rb_define_method(cgsl_vector, "stats_wkurtosis", rb_gsl_stats_wkurtosis, -1);
765
+ rb_define_alias(cgsl_vector, "wkurtosis", "stats_wkurtosis");
766
+ rb_define_method(cgsl_vector, "stats_wkurtosis_m_sd",
767
+ rb_gsl_stats_wkurtosis_m_sd, 2);
768
+ rb_define_alias(cgsl_vector, "wkurtosis_m_sd", "stats_wkurtosis_m_sd");
769
+
770
+ /*****/
771
+ rb_define_singleton_method(mgsl_stats, "max", rb_gsl_stats_max, -1);
772
+ rb_define_singleton_method(mgsl_stats, "min", rb_gsl_stats_min, -1);
773
+ rb_define_singleton_method(mgsl_stats, "minmax", rb_gsl_stats_minmax, -1);
774
+ rb_define_singleton_method(mgsl_stats, "max_index", rb_gsl_stats_max_index, -1);
775
+ rb_define_singleton_method(mgsl_stats, "min_index", rb_gsl_stats_min_index, -1);
776
+ rb_define_singleton_method(mgsl_stats, "minmax_index",
777
+ rb_gsl_stats_minmax_index, -1);
778
+
779
+ rb_define_method(cgsl_vector, "stats_max", rb_gsl_stats_max, -1);
780
+ rb_define_method(cgsl_vector, "stats_min", rb_gsl_stats_min, -1);
781
+ rb_define_method(cgsl_vector, "stats_minmax", rb_gsl_stats_minmax, -1);
782
+ rb_define_method(cgsl_vector, "stats_max_index", rb_gsl_stats_max_index, -1);
783
+ rb_define_method(cgsl_vector, "stats_min_index", rb_gsl_stats_min_index, -1);
784
+ rb_define_method(cgsl_vector, "stats_minmax_index", rb_gsl_stats_minmax_index, -1);
785
+
786
+ rb_define_singleton_method(mgsl_stats, "median_from_sorted_data",
787
+ rb_gsl_stats_median_from_sorted_data, -1);
788
+ rb_define_method(cgsl_vector, "stats_median_from_sorted_data",
789
+ rb_gsl_stats_median_from_sorted_data, -1);
790
+ rb_define_alias(cgsl_vector, "median_from_sorted_data",
791
+ "stats_median_from_sorted_data");
792
+ rb_define_method(cgsl_vector, "median", rb_gsl_stats_median, -1);
793
+
794
+ rb_define_method(cgsl_vector, "stats_quantile_from_sorted_data",
795
+ rb_gsl_stats_quantile_from_sorted_data, -1);
796
+ rb_define_alias(cgsl_vector, "quantile_from_sorted_data",
797
+ "stats_quantile_from_sorted_data");
798
+
799
+ }