rb-gsl 1.16.0.4 → 1.16.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +12 -0
- data/.travis.yml +24 -0
- data/AUTHORS +6 -0
- data/COPYING +341 -339
- data/ChangeLog +608 -587
- data/Gemfile +4 -0
- data/README.md +77 -0
- data/Rakefile +14 -33
- data/THANKS +1 -1
- data/examples/blas/blas.rb +1 -1
- data/examples/bspline.rb +3 -3
- data/examples/complex/functions.rb +4 -4
- data/examples/complex/mul.rb +1 -1
- data/examples/const/physconst.rb +4 -4
- data/examples/const/travel.rb +4 -4
- data/examples/eigen/nonsymmv.rb +1 -1
- data/examples/eigen/qhoscillator.rb +3 -3
- data/examples/fft/radix2.rb +1 -1
- data/examples/fft/real-halfcomplex.rb +3 -3
- data/examples/fft/real-halfcomplex2.rb +3 -3
- data/examples/fit/expfit.rb +1 -1
- data/examples/fit/multifit.rb +1 -1
- data/examples/fit/ndlinear.rb +44 -44
- data/examples/fit/nonlinearfit.rb +1 -1
- data/examples/fit/wlinear.rb +3 -3
- data/examples/function/function.rb +1 -1
- data/examples/function/min.rb +1 -1
- data/examples/function/synchrotron.rb +2 -2
- data/examples/gallery/koch.rb +1 -1
- data/examples/histogram/cauchy.rb +2 -2
- data/examples/histogram/exponential.rb +1 -1
- data/examples/histogram/histo3d.rb +1 -1
- data/examples/histogram/histogram-pdf.rb +2 -2
- data/examples/histogram/xexp.rb +1 -1
- data/examples/integration/ahmed.rb +2 -2
- data/examples/integration/cosmology.rb +7 -7
- data/examples/integration/friedmann.rb +4 -4
- data/examples/integration/qng.rb +1 -1
- data/examples/interp/demo.rb +2 -2
- data/examples/linalg/LQ_solve.rb +1 -1
- data/examples/linalg/LU.rb +1 -1
- data/examples/linalg/LU2.rb +1 -1
- data/examples/linalg/LU_narray.rb +1 -1
- data/examples/linalg/PTLQ.rb +1 -1
- data/examples/linalg/QRPT.rb +1 -1
- data/examples/linalg/chol.rb +1 -1
- data/examples/linalg/chol_narray.rb +1 -1
- data/examples/linalg/complex.rb +1 -1
- data/examples/math/elementary.rb +1 -1
- data/examples/math/functions.rb +1 -1
- data/examples/math/inf_nan.rb +1 -1
- data/examples/math/minmax.rb +1 -1
- data/examples/math/power.rb +1 -1
- data/examples/math/test.rb +1 -1
- data/examples/min.rb +1 -1
- data/examples/multimin/bundle.rb +1 -1
- data/examples/multimin/cqp.rb +17 -17
- data/examples/multiroot/fsolver3.rb +1 -1
- data/examples/odeiv/binarysystem.rb +12 -12
- data/examples/odeiv/demo.rb +3 -3
- data/examples/odeiv/frei1.rb +7 -7
- data/examples/odeiv/frei2.rb +4 -4
- data/examples/odeiv/oscillator.rb +1 -1
- data/examples/odeiv/sedov.rb +3 -3
- data/examples/odeiv/whitedwarf.rb +11 -11
- data/examples/permutation/ex1.rb +2 -2
- data/examples/permutation/permutation.rb +1 -1
- data/examples/poly/demo.rb +1 -1
- data/examples/random/diffusion.rb +1 -1
- data/examples/random/generator.rb +2 -2
- data/examples/random/randomwalk.rb +3 -3
- data/examples/random/rng.rb +1 -1
- data/examples/roots/bisection.rb +1 -1
- data/examples/roots/brent.rb +1 -1
- data/examples/roots/demo.rb +1 -1
- data/examples/roots/newton.rb +2 -2
- data/examples/roots/recombination.gp +0 -1
- data/examples/sf/hyperg.rb +1 -1
- data/examples/sf/sphbessel.rb +1 -1
- data/examples/sort/sort.rb +1 -1
- data/examples/tamu_anova.rb +4 -4
- data/examples/vector/add.rb +1 -1
- data/examples/vector/decimate.rb +1 -1
- data/examples/vector/gnuplot.rb +8 -8
- data/examples/vector/vector.rb +2 -2
- data/examples/wavelet/wavelet1.rb +1 -1
- data/ext/{gsl → gsl_native}/alf.c +9 -9
- data/ext/{gsl → gsl_native}/array.c +64 -151
- data/ext/{gsl → gsl_native}/array_complex.c +61 -63
- data/ext/{gsl → gsl_native}/blas.c +0 -0
- data/ext/{gsl → gsl_native}/blas1.c +32 -32
- data/ext/{gsl → gsl_native}/blas2.c +54 -58
- data/ext/{gsl → gsl_native}/blas3.c +54 -54
- data/ext/{gsl → gsl_native}/block.c +3 -6
- data/ext/{gsl/block_source.c → gsl_native/block_source.h} +109 -111
- data/ext/gsl_native/bspline.c +122 -0
- data/ext/{gsl → gsl_native}/bundle.c +0 -0
- data/ext/{gsl → gsl_native}/cdf.c +76 -88
- data/ext/{gsl → gsl_native}/cheb.c +74 -85
- data/ext/{gsl → gsl_native}/combination.c +9 -16
- data/ext/{gsl → gsl_native}/common.c +7 -37
- data/ext/{gsl → gsl_native}/complex.c +113 -115
- data/ext/gsl_native/const.c +331 -0
- data/ext/{gsl → gsl_native}/const_additional.c +12 -33
- data/ext/gsl_native/cqp.c +283 -0
- data/ext/{gsl → gsl_native}/deriv.c +22 -30
- data/ext/{gsl → gsl_native}/dht.c +20 -28
- data/ext/{gsl → gsl_native}/diff.c +23 -25
- data/ext/{gsl → gsl_native}/dirac.c +44 -45
- data/ext/{gsl → gsl_native}/eigen.c +1031 -1082
- data/ext/{gsl → gsl_native}/error.c +13 -13
- data/ext/{gsl → gsl_native}/extconf.rb +5 -13
- data/ext/{gsl → gsl_native}/fft.c +192 -198
- data/ext/{gsl → gsl_native}/fit.c +16 -16
- data/ext/gsl_native/fresnel.c +312 -0
- data/ext/{gsl → gsl_native}/function.c +29 -35
- data/ext/{gsl → gsl_native}/geometry.c +15 -15
- data/ext/{gsl → gsl_native}/graph.c +37 -87
- data/ext/{gsl → gsl_native}/gsl.c +10 -23
- data/ext/{gsl → gsl_native}/gsl_narray.c +15 -24
- data/ext/{gsl → gsl_native}/histogram.c +123 -150
- data/ext/{gsl → gsl_native}/histogram2d.c +71 -96
- data/ext/{gsl → gsl_native}/histogram3d.c +72 -72
- data/ext/{gsl → gsl_native}/histogram3d_source.c +195 -196
- data/ext/{gsl → gsl_native}/histogram_find.c +31 -33
- data/ext/{gsl → gsl_native}/histogram_oper.c +43 -52
- data/ext/{gsl → gsl_native}/ieee.c +7 -15
- data/ext/{gsl → gsl_native}/include/rb_gsl.h +0 -7
- data/ext/{gsl → gsl_native}/include/rb_gsl_array.h +15 -25
- data/ext/{gsl → gsl_native}/include/rb_gsl_cheb.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_common.h +44 -52
- data/ext/{gsl → gsl_native}/include/rb_gsl_complex.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_const.h +0 -5
- data/ext/{gsl → gsl_native}/include/rb_gsl_dirac.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_eigen.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_fft.h +0 -3
- data/ext/{gsl → gsl_native}/include/rb_gsl_fit.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_function.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_graph.h +2 -2
- data/ext/{gsl → gsl_native}/include/rb_gsl_histogram.h +8 -8
- data/ext/{gsl → gsl_native}/include/rb_gsl_histogram3d.h +50 -50
- data/ext/{gsl → gsl_native}/include/rb_gsl_integration.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_interp.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_linalg.h +0 -1
- data/ext/{gsl → gsl_native}/include/rb_gsl_math.h +0 -4
- data/ext/{gsl → gsl_native}/include/rb_gsl_odeiv.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_poly.h +3 -3
- data/ext/{gsl → gsl_native}/include/rb_gsl_rational.h +1 -1
- data/ext/{gsl → gsl_native}/include/rb_gsl_rng.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_root.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_sf.h +39 -43
- data/ext/{gsl → gsl_native}/include/rb_gsl_statistics.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_tensor.h +0 -0
- data/ext/{gsl → gsl_native}/include/rb_gsl_with_narray.h +0 -0
- data/ext/{gsl → gsl_native}/include/templates_off.h +0 -0
- data/ext/{gsl → gsl_native}/include/templates_on.h +1 -1
- data/ext/{gsl → gsl_native}/integration.c +160 -183
- data/ext/{gsl → gsl_native}/interp.c +23 -31
- data/ext/gsl_native/jacobi.c +733 -0
- data/ext/{gsl → gsl_native}/linalg.c +448 -576
- data/ext/{gsl → gsl_native}/linalg_complex.c +84 -98
- data/ext/{gsl → gsl_native}/math.c +45 -63
- data/ext/{gsl → gsl_native}/matrix.c +4 -6
- data/ext/{gsl → gsl_native}/matrix_complex.c +111 -114
- data/ext/{gsl → gsl_native}/matrix_double.c +74 -77
- data/ext/{gsl → gsl_native}/matrix_int.c +49 -50
- data/ext/{gsl/matrix_source.c → gsl_native/matrix_source.h} +280 -302
- data/ext/{gsl → gsl_native}/min.c +43 -74
- data/ext/{gsl → gsl_native}/monte.c +45 -59
- data/ext/{gsl → gsl_native}/multifit.c +138 -147
- data/ext/{gsl → gsl_native}/multimin.c +55 -83
- data/ext/{gsl → gsl_native}/multimin_fsdf.c +15 -15
- data/ext/{gsl → gsl_native}/multiroots.c +61 -64
- data/ext/{gsl → gsl_native}/multiset.c +3 -7
- data/ext/{gsl → gsl_native}/ndlinear.c +320 -321
- data/ext/{gsl → gsl_native}/nmf.c +11 -11
- data/ext/{gsl → gsl_native}/nmf_wrap.c +1 -1
- data/ext/{gsl → gsl_native}/ntuple.c +13 -13
- data/ext/{gsl → gsl_native}/odeiv.c +95 -106
- data/ext/gsl_native/ool.c +879 -0
- data/ext/{gsl → gsl_native}/permutation.c +36 -34
- data/ext/{gsl → gsl_native}/poly.c +2 -5
- data/ext/{gsl → gsl_native}/poly2.c +6 -6
- data/ext/{gsl/poly_source.c → gsl_native/poly_source.h} +232 -275
- data/ext/{gsl → gsl_native}/qrng.c +6 -17
- data/ext/{gsl → gsl_native}/randist.c +218 -243
- data/ext/{gsl → gsl_native}/rational.c +9 -9
- data/ext/{gsl → gsl_native}/rng.c +29 -45
- data/ext/{gsl → gsl_native}/root.c +43 -43
- data/ext/{gsl → gsl_native}/sf.c +163 -197
- data/ext/{gsl → gsl_native}/sf_airy.c +0 -0
- data/ext/{gsl → gsl_native}/sf_bessel.c +6 -6
- data/ext/{gsl → gsl_native}/sf_clausen.c +0 -0
- data/ext/{gsl → gsl_native}/sf_coulomb.c +39 -39
- data/ext/{gsl → gsl_native}/sf_coupling.c +29 -29
- data/ext/{gsl → gsl_native}/sf_dawson.c +0 -0
- data/ext/{gsl → gsl_native}/sf_debye.c +0 -9
- data/ext/{gsl → gsl_native}/sf_dilog.c +0 -0
- data/ext/{gsl → gsl_native}/sf_elementary.c +2 -2
- data/ext/{gsl → gsl_native}/sf_ellint.c +42 -42
- data/ext/{gsl → gsl_native}/sf_elljac.c +2 -2
- data/ext/{gsl → gsl_native}/sf_erfc.c +0 -4
- data/ext/{gsl → gsl_native}/sf_exp.c +2 -2
- data/ext/{gsl → gsl_native}/sf_expint.c +1 -11
- data/ext/{gsl → gsl_native}/sf_fermi_dirac.c +0 -0
- data/ext/{gsl → gsl_native}/sf_gamma.c +1 -5
- data/ext/{gsl → gsl_native}/sf_gegenbauer.c +0 -0
- data/ext/{gsl → gsl_native}/sf_hyperg.c +0 -0
- data/ext/{gsl → gsl_native}/sf_laguerre.c +3 -3
- data/ext/{gsl → gsl_native}/sf_lambert.c +0 -0
- data/ext/{gsl → gsl_native}/sf_legendre.c +0 -0
- data/ext/{gsl → gsl_native}/sf_log.c +3 -3
- data/ext/gsl_native/sf_mathieu.c +235 -0
- data/ext/{gsl → gsl_native}/sf_power.c +0 -0
- data/ext/{gsl → gsl_native}/sf_psi.c +2 -11
- data/ext/{gsl → gsl_native}/sf_synchrotron.c +0 -0
- data/ext/{gsl → gsl_native}/sf_transport.c +0 -0
- data/ext/{gsl → gsl_native}/sf_trigonometric.c +3 -3
- data/ext/{gsl → gsl_native}/sf_zeta.c +0 -4
- data/ext/{gsl → gsl_native}/signal.c +60 -64
- data/ext/{gsl → gsl_native}/siman.c +36 -40
- data/ext/{gsl → gsl_native}/sort.c +3 -4
- data/ext/{gsl → gsl_native}/spline.c +25 -43
- data/ext/{gsl → gsl_native}/stats.c +102 -115
- data/ext/{gsl → gsl_native}/sum.c +32 -32
- data/ext/{gsl → gsl_native}/tamu_anova.c +0 -0
- data/ext/{gsl → gsl_native}/tensor.c +2 -4
- data/ext/{gsl/tensor_source.c → gsl_native/tensor_source.h} +144 -144
- data/ext/{gsl → gsl_native}/vector.c +2 -4
- data/ext/{gsl → gsl_native}/vector_complex.c +165 -171
- data/ext/{gsl → gsl_native}/vector_double.c +167 -174
- data/ext/{gsl → gsl_native}/vector_int.c +23 -25
- data/ext/{gsl/vector_source.c → gsl_native/vector_source.h} +400 -414
- data/ext/{gsl → gsl_native}/wavelet.c +215 -236
- data/lib/gsl.rb +1 -7
- data/lib/gsl/gnuplot.rb +2 -2
- data/lib/gsl/version.rb +1 -3
- data/rb-gsl.gemspec +29 -0
- data/rdoc/blas.rdoc +3 -3
- data/rdoc/bspline.rdoc +7 -7
- data/rdoc/cheb.rdoc +8 -8
- data/rdoc/cholesky_complex.rdoc +1 -1
- data/rdoc/combi.rdoc +9 -9
- data/rdoc/complex.rdoc +11 -11
- data/rdoc/const.rdoc +20 -20
- data/rdoc/dht.rdoc +6 -6
- data/rdoc/diff.rdoc +6 -6
- data/rdoc/ehandling.rdoc +3 -3
- data/rdoc/eigen.rdoc +11 -11
- data/rdoc/fft.rdoc +26 -26
- data/rdoc/fit.rdoc +18 -18
- data/rdoc/graph.rdoc +2 -2
- data/rdoc/hist.rdoc +16 -16
- data/rdoc/hist2d.rdoc +4 -4
- data/rdoc/hist3d.rdoc +3 -3
- data/rdoc/integration.rdoc +16 -16
- data/rdoc/interp.rdoc +11 -11
- data/rdoc/intro.rdoc +3 -3
- data/rdoc/linalg.rdoc +20 -20
- data/rdoc/linalg_complex.rdoc +1 -1
- data/rdoc/math.rdoc +13 -13
- data/rdoc/matrix.rdoc +22 -22
- data/rdoc/min.rdoc +9 -9
- data/rdoc/monte.rdoc +3 -3
- data/rdoc/multimin.rdoc +12 -12
- data/rdoc/multiroot.rdoc +12 -12
- data/rdoc/narray.rdoc +9 -9
- data/rdoc/ndlinear.rdoc +4 -4
- data/rdoc/nonlinearfit.rdoc +17 -17
- data/rdoc/ntuple.rdoc +5 -5
- data/rdoc/odeiv.rdoc +12 -12
- data/rdoc/perm.rdoc +11 -11
- data/rdoc/poly.rdoc +17 -17
- data/rdoc/qrng.rdoc +9 -9
- data/rdoc/randist.rdoc +10 -10
- data/rdoc/ref.rdoc +49 -49
- data/rdoc/rng.rdoc +9 -9
- data/rdoc/roots.rdoc +12 -12
- data/rdoc/sf.rdoc +35 -35
- data/rdoc/siman.rdoc +3 -3
- data/rdoc/sort.rdoc +6 -6
- data/rdoc/start.rdoc +2 -2
- data/rdoc/stats.rdoc +13 -13
- data/rdoc/sum.rdoc +4 -4
- data/rdoc/tensor.rdoc +3 -3
- data/rdoc/tut.rdoc +1 -1
- data/rdoc/use.rdoc +3 -3
- data/rdoc/vector.rdoc +28 -28
- data/rdoc/vector_complex.rdoc +6 -6
- data/rdoc/wavelet.rdoc +8 -8
- data/test/gsl/blas_test.rb +1 -1
- data/test/gsl/index_test.rb +61 -0
- data/test/gsl/matrix_test.rb +21 -0
- data/uncrustify.cfg +1693 -0
- metadata +212 -243
- data/README +0 -28
- data/ext/gsl/bspline.c +0 -130
- data/ext/gsl/const.c +0 -672
- data/ext/gsl/cqp.c +0 -283
- data/ext/gsl/fcmp.c +0 -64
- data/ext/gsl/fresnel.c +0 -312
- data/ext/gsl/jacobi.c +0 -739
- data/ext/gsl/ool.c +0 -879
- data/ext/gsl/oper_complex_source.c +0 -251
- data/ext/gsl/sf_mathieu.c +0 -238
- data/rdoc/index.rdoc +0 -50
@@ -16,9 +16,9 @@
|
|
16
16
|
VALUE rb_gsl_permutation_alloc(VALUE klass, VALUE nn);
|
17
17
|
|
18
18
|
/*
|
19
|
-
* Creates a new permutation of size n. The permutation is not initialized
|
20
|
-
* and its elements are undefined. Use the method calloc if you want to create
|
21
|
-
* a permutation which is initialized to the identity.
|
19
|
+
* Creates a new permutation of size n. The permutation is not initialized
|
20
|
+
* and its elements are undefined. Use the method calloc if you want to create
|
21
|
+
* a permutation which is initialized to the identity.
|
22
22
|
*/
|
23
23
|
VALUE rb_gsl_permutation_alloc(VALUE klass, VALUE nn)
|
24
24
|
{
|
@@ -51,12 +51,17 @@ static VALUE rb_gsl_permutation_init(VALUE obj)
|
|
51
51
|
return obj;
|
52
52
|
}
|
53
53
|
|
54
|
-
|
54
|
+
#ifndef CHECK_RANGE_OFFSET
|
55
|
+
#define CHECK_RANGE_OFFSET(i) if (i < -((int) b->size) || i >= ((int) b->size)) \
|
56
|
+
rb_raise(rb_eRangeError, "offset %d out of range", i);
|
57
|
+
#endif
|
58
|
+
|
55
59
|
static VALUE rb_gsl_permutation_get(int argc, VALUE *argv, VALUE obj)
|
56
60
|
{
|
57
61
|
gsl_permutation *b, *bnew;
|
58
62
|
gsl_index *p;
|
59
|
-
|
63
|
+
long beg;
|
64
|
+
int i;
|
60
65
|
size_t n, j, k;
|
61
66
|
Data_Get_Struct(obj, gsl_permutation, b);
|
62
67
|
switch (argc) {
|
@@ -67,6 +72,7 @@ static VALUE rb_gsl_permutation_get(int argc, VALUE *argv, VALUE obj)
|
|
67
72
|
switch (TYPE(argv[0])) {
|
68
73
|
case T_FIXNUM:
|
69
74
|
i = FIX2INT(argv[0]);
|
75
|
+
CHECK_RANGE_OFFSET(i);
|
70
76
|
if (i < 0) j = b->size + i; else j = (size_t) i;
|
71
77
|
return INT2FIX((int) b->data[j]);
|
72
78
|
break;
|
@@ -75,27 +81,30 @@ static VALUE rb_gsl_permutation_get(int argc, VALUE *argv, VALUE obj)
|
|
75
81
|
n = RARRAY_LEN(argv[0]);
|
76
82
|
bnew = gsl_permutation_alloc(n);
|
77
83
|
for (j = 0; j < n; j++) {
|
78
|
-
|
79
|
-
|
80
|
-
|
84
|
+
i = FIX2INT(rb_ary_entry(argv[0], j));
|
85
|
+
CHECK_RANGE_OFFSET(i);
|
86
|
+
if (i < 0) k = b->size + i; else k = (size_t) i;
|
87
|
+
bnew->data[j] = b->data[k];
|
81
88
|
}
|
82
|
-
return Data_Wrap_Struct(CLASS_OF(
|
89
|
+
return Data_Wrap_Struct(CLASS_OF(obj), 0, gsl_permutation_free, bnew);
|
83
90
|
break;
|
84
91
|
default:
|
85
92
|
if (PERMUTATION_P(argv[0])) {
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
93
|
+
Data_Get_Struct(argv[0], gsl_index, p);
|
94
|
+
bnew = gsl_permutation_alloc(p->size);
|
95
|
+
for (j = 0; j < p->size; j++) bnew->data[j] = b->data[p->data[j]];
|
96
|
+
return Data_Wrap_Struct(CLASS_OF(argv[0]), 0, gsl_permutation_free, bnew);
|
90
97
|
} else if (CLASS_OF(argv[0]) == rb_cRange) {
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
98
|
+
rb_range_beg_len(argv[0], &beg, (long *) &n, (long) b->size, 2);
|
99
|
+
if (n == 0) rb_raise(rb_eRangeError, "range overflow");
|
100
|
+
if (n > b->size) n = b->size;
|
101
|
+
bnew = gsl_permutation_alloc(n);
|
102
|
+
for (j = 0; j < n; j++)
|
103
|
+
bnew->data[j] = b->data[beg+j];
|
104
|
+
return Data_Wrap_Struct(CLASS_OF(obj), 0, gsl_permutation_free, bnew);
|
96
105
|
} else {
|
97
|
-
|
98
|
-
|
106
|
+
rb_raise(rb_eArgError, "wrong argument type %s (Fixnum, Array, or Range expected)", rb_class2name(CLASS_OF(argv[0])));
|
107
|
+
break;
|
99
108
|
}
|
100
109
|
}
|
101
110
|
break;
|
@@ -112,7 +121,6 @@ static VALUE rb_gsl_permutation_get(int argc, VALUE *argv, VALUE obj)
|
|
112
121
|
return Qnil;
|
113
122
|
}
|
114
123
|
|
115
|
-
#ifdef GSL_1_1_LATER
|
116
124
|
static VALUE rb_gsl_permutation_clone(VALUE obj)
|
117
125
|
{
|
118
126
|
gsl_permutation *p, *p2 = NULL;
|
@@ -133,7 +141,6 @@ static VALUE rb_gsl_permutation_memcpy(VALUE obj, VALUE pp1, VALUE pp2)
|
|
133
141
|
gsl_permutation_memcpy(p1, p2);
|
134
142
|
return pp1;
|
135
143
|
}
|
136
|
-
#endif
|
137
144
|
|
138
145
|
static VALUE rb_gsl_permutation_swap(VALUE obj, VALUE i, VALUE j)
|
139
146
|
{
|
@@ -271,7 +278,6 @@ static VALUE rb_gsl_permute_vector_inverse(VALUE obj, VALUE pp, VALUE vv)
|
|
271
278
|
}
|
272
279
|
|
273
280
|
/* singleton method */
|
274
|
-
#ifdef GSL_1_2_LATER
|
275
281
|
static VALUE rb_gsl_permutation_mul(VALUE obj, VALUE ppa, VALUE ppb)
|
276
282
|
{
|
277
283
|
gsl_permutation *p = NULL;
|
@@ -291,7 +297,6 @@ static VALUE rb_gsl_permutation_mul(VALUE obj, VALUE ppa, VALUE ppb)
|
|
291
297
|
if (flag == 1) return obj;
|
292
298
|
else return Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p);
|
293
299
|
}
|
294
|
-
#endif
|
295
300
|
|
296
301
|
static VALUE rb_gsl_permutation_print(VALUE obj);
|
297
302
|
|
@@ -367,9 +372,8 @@ static VALUE rb_gsl_permutation_fprintf(int argc, VALUE *argv, VALUE obj)
|
|
367
372
|
FILE *fp = NULL;
|
368
373
|
int status, flag = 0;
|
369
374
|
|
370
|
-
if (argc != 1 && argc != 2) rb_raise(rb_eArgError,
|
371
|
-
|
372
|
-
|
375
|
+
if (argc != 1 && argc != 2) rb_raise(rb_eArgError,
|
376
|
+
"wrong number of arguments (%d for 1 or 2)", argc);
|
373
377
|
Data_Get_Struct(obj, gsl_permutation, h);
|
374
378
|
fp = rb_gsl_open_writefile(argv[0], &flag);
|
375
379
|
if (argc == 1) {
|
@@ -409,7 +413,6 @@ static VALUE rb_gsl_permutation_fscanf(VALUE obj, VALUE io)
|
|
409
413
|
return INT2FIX(status);
|
410
414
|
}
|
411
415
|
|
412
|
-
#ifdef GSL_1_2_LATER
|
413
416
|
static VALUE rb_gsl_permutation_linear_to_canonical(int argc, VALUE *argv, VALUE obj)
|
414
417
|
{
|
415
418
|
gsl_permutation *p, *q;
|
@@ -476,7 +479,6 @@ static VALUE rb_gsl_permutation_canonical_cycles(VALUE obj)
|
|
476
479
|
Data_Get_Struct(obj, gsl_permutation, p);
|
477
480
|
return INT2FIX(gsl_permutation_canonical_cycles(p));
|
478
481
|
}
|
479
|
-
#endif
|
480
482
|
|
481
483
|
static VALUE rb_gsl_vector_permute(VALUE obj, VALUE pp)
|
482
484
|
{
|
@@ -537,10 +539,8 @@ void Init_gsl_permutation(VALUE module)
|
|
537
539
|
rb_define_alias(cgsl_permutation, "[]", "get");
|
538
540
|
rb_define_method(cgsl_permutation, "set", rb_gsl_permutation_set, 2);
|
539
541
|
rb_define_alias(cgsl_permutation, "[]=", "set");
|
540
|
-
#ifdef GSL_1_1_LATER
|
541
542
|
rb_define_singleton_method(cgsl_permutation, "memcpy", rb_gsl_permutation_memcpy, 2);
|
542
543
|
rb_define_method(cgsl_permutation, "clone", rb_gsl_permutation_clone, 0);
|
543
|
-
#endif
|
544
544
|
rb_define_method(cgsl_permutation, "swap", rb_gsl_permutation_swap, 2);
|
545
545
|
rb_define_method(cgsl_permutation, "valid", rb_gsl_permutation_valid, 0);
|
546
546
|
rb_define_method(cgsl_permutation, "valid?", rb_gsl_permutation_valid2, 0);
|
@@ -556,7 +556,7 @@ void Init_gsl_permutation(VALUE module)
|
|
556
556
|
rb_define_alias(cgsl_permutation, "permute", "permute_vector");
|
557
557
|
rb_define_method(cgsl_permutation, "permute_vector_inverse", rb_gsl_permutation_permute_vector_inverse, 1);
|
558
558
|
rb_define_alias(cgsl_permutation, "permute_inverse", "permute_vector_inverse");
|
559
|
-
|
559
|
+
|
560
560
|
rb_define_singleton_method(cgsl_permutation, "permute_vector", rb_gsl_permute_vector, 2);
|
561
561
|
rb_define_singleton_method(cgsl_permutation, "permute_vector_inverse", rb_gsl_permute_vector_inverse, 2);
|
562
562
|
rb_define_module_function(module, "permute_vector", rb_gsl_permute_vector, 2);
|
@@ -574,7 +574,6 @@ void Init_gsl_permutation(VALUE module)
|
|
574
574
|
rb_define_method(cgsl_permutation, "fscanf", rb_gsl_permutation_fscanf, 1);
|
575
575
|
rb_define_method(cgsl_permutation, "print", rb_gsl_permutation_print, 0);
|
576
576
|
|
577
|
-
#ifdef GSL_1_2_LATER
|
578
577
|
rb_define_singleton_method(cgsl_permutation, "mul", rb_gsl_permutation_mul, 2);
|
579
578
|
rb_define_method(cgsl_permutation, "mul", rb_gsl_permutation_mul, 2);
|
580
579
|
rb_define_method(cgsl_permutation, "linear_to_canonical", rb_gsl_permutation_linear_to_canonical, -1);
|
@@ -585,7 +584,6 @@ void Init_gsl_permutation(VALUE module)
|
|
585
584
|
rb_define_method(cgsl_permutation, "inversions", rb_gsl_permutation_inversions, 0);
|
586
585
|
rb_define_method(cgsl_permutation, "linear_cycles", rb_gsl_permutation_linear_cycles, 0);
|
587
586
|
rb_define_method(cgsl_permutation, "canonical_cycles", rb_gsl_permutation_canonical_cycles, 0);
|
588
|
-
#endif
|
589
587
|
|
590
588
|
rb_define_method(cgsl_vector, "permute", rb_gsl_vector_permute, 1);
|
591
589
|
rb_define_method(cgsl_vector, "permute_inverse", rb_gsl_vector_permute_inverse, 1);
|
@@ -594,3 +592,7 @@ void Init_gsl_permutation(VALUE module)
|
|
594
592
|
rb_define_alias(cgsl_permutation, "==", "equal?");
|
595
593
|
|
596
594
|
}
|
595
|
+
|
596
|
+
#ifdef CHECK_RANGE_OFFSET
|
597
|
+
#undef CHECK_RANGE_OFFSET
|
598
|
+
#endif
|
@@ -12,9 +12,6 @@
|
|
12
12
|
#include "include/rb_gsl_poly.h"
|
13
13
|
#include "include/rb_gsl_array.h"
|
14
14
|
#include "include/rb_gsl_common.h"
|
15
|
-
#ifdef HAVE_NARARY_H
|
16
|
-
#include "narray.h"
|
17
|
-
#endif
|
18
15
|
|
19
16
|
void Init_gsl_poly_init(VALUE module);
|
20
17
|
void Init_gsl_poly_int_init(VALUE module);
|
@@ -22,7 +19,7 @@ void Init_gsl_poly2(VALUE module);
|
|
22
19
|
|
23
20
|
#define BASE_DOUBLE
|
24
21
|
#include "include/templates_on.h"
|
25
|
-
#include "poly_source.
|
22
|
+
#include "poly_source.h"
|
26
23
|
#include "include/templates_off.h"
|
27
24
|
void Init_gsl_poly(VALUE module)
|
28
25
|
{
|
@@ -33,7 +30,7 @@ void Init_gsl_poly(VALUE module)
|
|
33
30
|
|
34
31
|
#define BASE_INT
|
35
32
|
#include "include/templates_on.h"
|
36
|
-
#include "poly_source.
|
33
|
+
#include "poly_source.h"
|
37
34
|
#include "include/templates_off.h"
|
38
35
|
void Init_gsl_poly_int(VALUE module)
|
39
36
|
{
|
@@ -48,7 +48,7 @@ static gsl_poly_int* mygsl_poly_hermite(int n1)
|
|
48
48
|
gsl_vector_int_memcpy(p1, p0);
|
49
49
|
}
|
50
50
|
gsl_vector_int_free(p2);
|
51
|
-
gsl_vector_int_free(p1);
|
51
|
+
gsl_vector_int_free(p1);
|
52
52
|
break;
|
53
53
|
}
|
54
54
|
return p0;
|
@@ -87,7 +87,7 @@ static gsl_poly_int* mygsl_poly_cheb(int n1)
|
|
87
87
|
gsl_vector_int_memcpy(p1, p0);
|
88
88
|
}
|
89
89
|
gsl_vector_int_free(p2);
|
90
|
-
gsl_vector_int_free(p1);
|
90
|
+
gsl_vector_int_free(p1);
|
91
91
|
break;
|
92
92
|
}
|
93
93
|
return p0;
|
@@ -125,7 +125,7 @@ static gsl_poly_int* mygsl_poly_chebII(int n1)
|
|
125
125
|
gsl_vector_int_memcpy(p1, p0);
|
126
126
|
}
|
127
127
|
gsl_vector_int_free(p2);
|
128
|
-
gsl_vector_int_free(p1);
|
128
|
+
gsl_vector_int_free(p1);
|
129
129
|
break;
|
130
130
|
}
|
131
131
|
return p0;
|
@@ -195,7 +195,7 @@ static gsl_poly_int* mygsl_poly_bell(int n1)
|
|
195
195
|
gsl_vector_int_memcpy(p0, p1);
|
196
196
|
mygsl_vector_int_shift(p0, n);
|
197
197
|
for (j = 0; j < n; j++) {
|
198
|
-
|
198
|
+
gsl_vector_int_set(p1, j, gsl_vector_int_get(p1, j+1)*(j+1));
|
199
199
|
}
|
200
200
|
gsl_vector_int_set(p1, n, 0);
|
201
201
|
mygsl_vector_int_shift(p1, n);
|
@@ -203,14 +203,14 @@ static gsl_poly_int* mygsl_poly_bell(int n1)
|
|
203
203
|
/* save for the next iteration */
|
204
204
|
gsl_vector_int_memcpy(p1, p0);
|
205
205
|
}
|
206
|
-
gsl_vector_int_free(p1);
|
206
|
+
gsl_vector_int_free(p1);
|
207
207
|
break;
|
208
208
|
}
|
209
209
|
return p0;
|
210
210
|
}
|
211
211
|
|
212
212
|
static VALUE rb_gsl_poly_define_poly(VALUE klass, VALUE order,
|
213
|
-
|
213
|
+
gsl_poly_int* (*f)(int n1)) {
|
214
214
|
int n1;
|
215
215
|
gsl_poly_int *pnew = NULL;
|
216
216
|
CHECK_FIXNUM(order);
|
@@ -51,28 +51,21 @@
|
|
51
51
|
VALUE cgsl_poly, cgsl_poly_int;
|
52
52
|
VALUE cgsl_poly_workspace;
|
53
53
|
VALUE cgsl_poly_complex_workspace;
|
54
|
-
#ifdef GSL_1_1_LATER
|
55
54
|
VALUE cgsl_poly_dd;
|
56
55
|
VALUE cgsl_poly_taylor;
|
57
56
|
#endif
|
58
|
-
#endif
|
59
57
|
|
60
58
|
#ifdef BASE_INT
|
61
59
|
double gsl_poly_int_eval(const BASE c[], const int len, const double x)
|
62
60
|
{
|
63
61
|
int i;
|
64
62
|
double ans = (double) c[len-1];
|
65
|
-
for(i=len-1; i>0; i--) ans = (double) c[i-1] + x * ans;
|
63
|
+
for(i = len-1; i>0; i--) ans = (double) c[i-1] + x * ans;
|
66
64
|
return ans;
|
67
65
|
}
|
68
66
|
#endif
|
69
67
|
#ifdef BASE_DOUBLE
|
70
|
-
#ifdef HAVE_NARRAY_H
|
71
|
-
#include "include/rb_gsl_with_narray.h"
|
72
|
-
#endif
|
73
|
-
#ifdef GSL_1_11_LATER
|
74
68
|
static VALUE rb_gsl_complex_poly_complex_eval(VALUE a, VALUE b);
|
75
|
-
#endif
|
76
69
|
static VALUE rb_gsl_poly_eval_singleton(VALUE klass, VALUE a, VALUE x)
|
77
70
|
{
|
78
71
|
gsl_vector *v = NULL, *vx, *vnew;
|
@@ -82,22 +75,15 @@ static VALUE rb_gsl_poly_eval_singleton(VALUE klass, VALUE a, VALUE x)
|
|
82
75
|
size_t i, N, n;
|
83
76
|
VALUE val;
|
84
77
|
double *ptr0;
|
85
|
-
double *ptr1, *ptr2;
|
86
|
-
#ifdef HAVE_NARRAY_H
|
87
|
-
int shape[1];
|
88
|
-
#endif
|
89
|
-
#ifdef GSL_1_11_LATER
|
78
|
+
double *ptr1, *ptr2;
|
90
79
|
gsl_complex *z, zz;
|
91
80
|
gsl_vector_complex *vz, *vznew;
|
92
|
-
if (rb_obj_is_kind_of(a, cgsl_vector_complex))
|
81
|
+
if (rb_obj_is_kind_of(a, cgsl_vector_complex))
|
93
82
|
return rb_gsl_complex_poly_complex_eval(a, x);
|
94
|
-
#endif
|
95
83
|
switch (TYPE(a)) {
|
96
84
|
case T_ARRAY:
|
97
|
-
|
98
|
-
if (rb_obj_is_kind_of(rb_ary_entry(a, 0), cgsl_complex))
|
85
|
+
if (rb_obj_is_kind_of(rb_ary_entry(a, 0), cgsl_complex))
|
99
86
|
return rb_gsl_complex_poly_complex_eval(a, x);
|
100
|
-
#endif
|
101
87
|
v = make_cvector_from_rarray(a);
|
102
88
|
N = v->size;
|
103
89
|
ptr0 = v->data;
|
@@ -115,7 +101,7 @@ static VALUE rb_gsl_poly_eval_singleton(VALUE klass, VALUE a, VALUE x)
|
|
115
101
|
#endif
|
116
102
|
} else {
|
117
103
|
rb_raise(rb_eTypeError, "Wrong argument type %s (Array, GSL::Vector or NArray expected)",
|
118
|
-
|
104
|
+
rb_class2name(CLASS_OF(a)));
|
119
105
|
}
|
120
106
|
}
|
121
107
|
switch (TYPE(x)) {
|
@@ -123,7 +109,7 @@ static VALUE rb_gsl_poly_eval_singleton(VALUE klass, VALUE a, VALUE x)
|
|
123
109
|
case T_BIGNUM:
|
124
110
|
case T_FLOAT:
|
125
111
|
val = rb_float_new(gsl_poly_eval(ptr0, N, NUM2DBL(x)));
|
126
|
-
break;
|
112
|
+
break;
|
127
113
|
case T_ARRAY:
|
128
114
|
n = RARRAY_LEN(x);
|
129
115
|
val = rb_ary_new2(n);
|
@@ -131,7 +117,7 @@ static VALUE rb_gsl_poly_eval_singleton(VALUE klass, VALUE a, VALUE x)
|
|
131
117
|
rslt = gsl_poly_eval(ptr0, N, NUM2DBL(rb_ary_entry(x, i)));
|
132
118
|
rb_ary_store(val, i, rb_float_new(rslt));
|
133
119
|
}
|
134
|
-
break;
|
120
|
+
break;
|
135
121
|
default:
|
136
122
|
if (rb_obj_is_kind_of(x, cgsl_vector)) {
|
137
123
|
Data_Get_Struct(x, gsl_vector, vx);
|
@@ -143,19 +129,19 @@ static VALUE rb_gsl_poly_eval_singleton(VALUE klass, VALUE a, VALUE x)
|
|
143
129
|
} else if (rb_obj_is_kind_of(x, cgsl_matrix)) {
|
144
130
|
Data_Get_Struct(x, gsl_matrix, mx);
|
145
131
|
mnew = gsl_matrix_alloc(mx->size1, mx->size2);
|
146
|
-
val = Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
132
|
+
val = Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
147
133
|
n = mx->size1*mx->size2;
|
148
134
|
ptr1 = mx->data;
|
149
135
|
ptr2 = mnew->data;
|
150
136
|
#ifdef HAVE_NARRAY_H
|
151
137
|
} else if (NA_IsNArray(x)) {
|
138
|
+
int shape[1];
|
152
139
|
shape[0] = NA_TOTAL(x);
|
153
140
|
n = shape[0];
|
154
141
|
val = na_make_object(NA_DFLOAT, 1, shape, CLASS_OF(x));
|
155
142
|
ptr1 = NA_PTR_TYPE(x, double*);
|
156
|
-
ptr2 = NA_PTR_TYPE(val, double*);
|
143
|
+
ptr2 = NA_PTR_TYPE(val, double*);
|
157
144
|
#endif
|
158
|
-
#ifdef GSL_1_11_LATER
|
159
145
|
} else if (rb_obj_is_kind_of(x, cgsl_complex)) {
|
160
146
|
Data_Get_Struct(x, gsl_complex, z);
|
161
147
|
zz = gsl_poly_complex_eval(ptr0, N, *z);
|
@@ -166,15 +152,14 @@ static VALUE rb_gsl_poly_eval_singleton(VALUE klass, VALUE a, VALUE x)
|
|
166
152
|
Data_Get_Struct(x, gsl_vector_complex, vz);
|
167
153
|
vznew = gsl_vector_complex_alloc(vz->size);
|
168
154
|
for (i = 0; i < vz->size; i++) {
|
169
|
-
|
170
|
-
|
155
|
+
zz = gsl_poly_complex_eval(ptr0, N, gsl_vector_complex_get(vz, i));
|
156
|
+
gsl_vector_complex_set(vznew, i, zz);
|
171
157
|
}
|
172
158
|
if (flag == 1) gsl_vector_free(v);
|
173
159
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vznew);
|
174
|
-
#endif
|
175
160
|
} else {
|
176
161
|
rb_raise(rb_eTypeError, "Wrong argument type %s (A number, Array, GSL::Vector or NArray expected)",
|
177
|
-
|
162
|
+
rb_class2name(CLASS_OF(a)));
|
178
163
|
}
|
179
164
|
for (i = 0; i < n; i++) {
|
180
165
|
ptr2[i] = gsl_poly_eval(ptr0, N, ptr1[i]);
|
@@ -183,7 +168,7 @@ static VALUE rb_gsl_poly_eval_singleton(VALUE klass, VALUE a, VALUE x)
|
|
183
168
|
if (flag == 1) gsl_vector_free(v);
|
184
169
|
return val;
|
185
170
|
}
|
186
|
-
|
171
|
+
|
187
172
|
static VALUE rb_gsl_complex_poly_complex_eval(VALUE a, VALUE b)
|
188
173
|
{
|
189
174
|
gsl_vector_complex *coef = NULL, *zb, *vnew;
|
@@ -207,7 +192,6 @@ static VALUE rb_gsl_complex_poly_complex_eval(VALUE a, VALUE b)
|
|
207
192
|
} else {
|
208
193
|
rb_raise(rb_eTypeError, "rb_gsl_complex_poly_complex_solve: wrong argument type %s (GSL::Vector::Complex or Array expected)\n", rb_class2name(CLASS_OF(a)));
|
209
194
|
}
|
210
|
-
|
211
195
|
switch (TYPE(b)) {
|
212
196
|
case T_FIXNUM:
|
213
197
|
case T_BIGNUM:
|
@@ -238,8 +222,8 @@ static VALUE rb_gsl_complex_poly_complex_eval(VALUE a, VALUE b)
|
|
238
222
|
vnew = gsl_vector_complex_alloc(zb->size);
|
239
223
|
ret = Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vnew);
|
240
224
|
for (i = 0; i < zb->size; i++) {
|
241
|
-
|
242
|
-
|
225
|
+
z = gsl_vector_complex_get(zb, i);
|
226
|
+
gsl_vector_complex_set(vnew, i, gsl_complex_poly_complex_eval(zc, N, z));
|
243
227
|
}
|
244
228
|
} else {
|
245
229
|
rb_raise(rb_eTypeError, "Wrong argument type %s.\n", rb_class2name(CLASS_OF(b)));
|
@@ -249,7 +233,6 @@ static VALUE rb_gsl_complex_poly_complex_eval(VALUE a, VALUE b)
|
|
249
233
|
return ret;
|
250
234
|
}
|
251
235
|
#endif
|
252
|
-
#endif
|
253
236
|
|
254
237
|
static VALUE FUNCTION(rb_gsl_poly,eval)(VALUE obj, VALUE xx)
|
255
238
|
{
|
@@ -261,15 +244,8 @@ static VALUE FUNCTION(rb_gsl_poly,eval)(VALUE obj, VALUE xx)
|
|
261
244
|
VALUE x, ary;
|
262
245
|
size_t i, j;
|
263
246
|
#ifdef BASE_DOUBLE
|
264
|
-
#ifdef HAVE_NARRAY_H
|
265
|
-
struct NARRAY *na;
|
266
|
-
double *ptr1, *ptr2;
|
267
|
-
size_t n;
|
268
|
-
#endif
|
269
|
-
#ifdef GSL_1_11_LATER
|
270
247
|
gsl_complex *z, zz;
|
271
248
|
gsl_vector_complex *vz, *vznew;
|
272
|
-
#endif
|
273
249
|
#endif
|
274
250
|
|
275
251
|
Data_Get_Struct(obj, GSL_TYPE(gsl_poly), p);
|
@@ -293,6 +269,9 @@ static VALUE FUNCTION(rb_gsl_poly,eval)(VALUE obj, VALUE xx)
|
|
293
269
|
#ifdef BASE_DOUBLE
|
294
270
|
#ifdef HAVE_NARRAY_H
|
295
271
|
if (NA_IsNArray(xx)) {
|
272
|
+
struct NARRAY *na;
|
273
|
+
double *ptr1, *ptr2;
|
274
|
+
size_t n;
|
296
275
|
GetNArray(xx, na);
|
297
276
|
ptr1 = (double*) na->ptr;
|
298
277
|
n = na->total;
|
@@ -307,21 +286,20 @@ static VALUE FUNCTION(rb_gsl_poly,eval)(VALUE obj, VALUE xx)
|
|
307
286
|
Data_Get_Struct(xx, GSL_TYPE(gsl_vector), v);
|
308
287
|
vnew = gsl_vector_alloc(v->size);
|
309
288
|
for (i = 0; i < v->size; i++) {
|
310
|
-
|
289
|
+
gsl_vector_set(vnew, i, FUNCTION(gsl_poly,eval)(p->data, p->size, FUNCTION(gsl_vector,get)(v, i)));
|
311
290
|
}
|
312
291
|
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
313
292
|
} else if (MAT_P(xx)) {
|
314
293
|
Data_Get_Struct(xx, GSL_TYPE(gsl_matrix), m);
|
315
294
|
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
316
295
|
for (i = 0; i < m->size1; i++) {
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
296
|
+
for (j = 0; j < m->size2; j++) {
|
297
|
+
gsl_matrix_set(mnew, i, j,
|
298
|
+
FUNCTION(gsl_poly,eval)(p->data, p->size, FUNCTION(gsl_matrix,get)(m, i, j)));
|
299
|
+
}
|
321
300
|
}
|
322
301
|
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
323
302
|
#ifdef BASE_DOUBLE
|
324
|
-
#ifdef GSL_1_11_LATER
|
325
303
|
} else if (rb_obj_is_kind_of(xx, cgsl_complex)) {
|
326
304
|
Data_Get_Struct(xx, gsl_complex, z);
|
327
305
|
zz = gsl_poly_complex_eval(p->data, p->size, *z);
|
@@ -331,11 +309,10 @@ static VALUE FUNCTION(rb_gsl_poly,eval)(VALUE obj, VALUE xx)
|
|
331
309
|
Data_Get_Struct(xx, gsl_vector_complex, vz);
|
332
310
|
vznew = gsl_vector_complex_alloc(vz->size);
|
333
311
|
for (i = 0; i < vz->size; i++) {
|
334
|
-
|
335
|
-
|
312
|
+
zz = gsl_poly_complex_eval(p->data, p->size, gsl_vector_complex_get(vz, i));
|
313
|
+
gsl_vector_complex_set(vznew, i, zz);
|
336
314
|
}
|
337
315
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vznew);
|
338
|
-
#endif
|
339
316
|
#endif
|
340
317
|
} else {
|
341
318
|
rb_raise(rb_eTypeError, "wrong argument type");
|
@@ -355,12 +332,6 @@ static VALUE FUNCTION(rb_gsl_poly,eval2)(int argc, VALUE *argv, VALUE obj)
|
|
355
332
|
gsl_matrix *mnew = NULL;
|
356
333
|
VALUE xx, x, ary;
|
357
334
|
size_t i, j, size;
|
358
|
-
#ifdef BASE_DOUBLE
|
359
|
-
#ifdef HAVE_NARRAY_H
|
360
|
-
struct NARRAY *na;
|
361
|
-
double *ptr1, *ptr2;
|
362
|
-
#endif
|
363
|
-
#endif
|
364
335
|
switch (argc) {
|
365
336
|
case 2:
|
366
337
|
Data_Get_Struct(argv[0], GSL_TYPE(gsl_poly), p);
|
@@ -396,6 +367,8 @@ static VALUE FUNCTION(rb_gsl_poly,eval2)(int argc, VALUE *argv, VALUE obj)
|
|
396
367
|
#ifdef BASE_DOUBLE
|
397
368
|
#ifdef HAVE_NARRAY_H
|
398
369
|
if (NA_IsNArray(xx)) {
|
370
|
+
struct NARRAY *na;
|
371
|
+
double *ptr1, *ptr2;
|
399
372
|
GetNArray(xx, na);
|
400
373
|
ptr1 = (double*) na->ptr;
|
401
374
|
size = na->total;
|
@@ -410,17 +383,17 @@ static VALUE FUNCTION(rb_gsl_poly,eval2)(int argc, VALUE *argv, VALUE obj)
|
|
410
383
|
Data_Get_Struct(xx, GSL_TYPE(gsl_vector), v);
|
411
384
|
vnew = gsl_vector_alloc(v->size);
|
412
385
|
for (i = 0; i < v->size; i++) {
|
413
|
-
|
386
|
+
gsl_vector_set(vnew, i, FUNCTION(gsl_poly,eval)(p->data, size, FUNCTION(gsl_vector,get)(v, i)));
|
414
387
|
}
|
415
388
|
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
416
389
|
} else if (MAT_P(xx)) {
|
417
390
|
Data_Get_Struct(xx, GSL_TYPE(gsl_matrix), m);
|
418
391
|
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
419
392
|
for (i = 0; i < m->size1; i++) {
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
393
|
+
for (j = 0; j < m->size2; j++) {
|
394
|
+
gsl_matrix_set(mnew, i, j,
|
395
|
+
FUNCTION(gsl_poly,eval)(p->data, size, FUNCTION(gsl_matrix,get)(m, i, j)));
|
396
|
+
}
|
424
397
|
}
|
425
398
|
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
426
399
|
} else {
|
@@ -441,29 +414,29 @@ static VALUE FUNCTION(rb_gsl_poly,solve_quadratic)(int argc, VALUE *argv, VALUE
|
|
441
414
|
switch (argc) {
|
442
415
|
case 3:
|
443
416
|
n = gsl_poly_solve_quadratic(NUMCONV2(argv[0]), NUMCONV2(argv[1]), NUMCONV2(argv[2]),
|
444
|
-
|
417
|
+
&x0, &x1);
|
445
418
|
break;
|
446
419
|
case 1:
|
447
420
|
switch (TYPE(argv[0])) {
|
448
421
|
case T_ARRAY:
|
449
|
-
n = gsl_poly_solve_quadratic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
450
|
-
|
451
|
-
|
452
|
-
|
422
|
+
n = gsl_poly_solve_quadratic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
423
|
+
NUMCONV2(rb_ary_entry(argv[0], 1)),
|
424
|
+
NUMCONV2(rb_ary_entry(argv[0], 2)),
|
425
|
+
&x0, &x1);
|
453
426
|
break;
|
454
427
|
default:
|
455
428
|
CHECK_VEC(argv[0]);
|
456
429
|
Data_Get_Struct(argv[0], GSL_TYPE(gsl_poly), v);
|
457
430
|
n = gsl_poly_solve_quadratic(FUNCTION(gsl_vector,get)(v, 0),
|
458
|
-
|
459
|
-
|
460
|
-
|
431
|
+
FUNCTION(gsl_vector,get)(v, 1),
|
432
|
+
FUNCTION(gsl_vector,get)(v, 2),
|
433
|
+
&x0, &x1);
|
461
434
|
break;
|
462
435
|
}
|
463
436
|
break;
|
464
437
|
default:
|
465
|
-
rb_raise(rb_eArgError,
|
466
|
-
|
438
|
+
rb_raise(rb_eArgError,
|
439
|
+
"wrong number of arguments (3 numbers or 1 array or 1 vector)");
|
467
440
|
break;
|
468
441
|
}
|
469
442
|
// If n == 0, we want to return an empty gsl_vector, but gsl_vectors can'y be
|
@@ -473,8 +446,8 @@ static VALUE FUNCTION(rb_gsl_poly,solve_quadratic)(int argc, VALUE *argv, VALUE
|
|
473
446
|
}
|
474
447
|
r = gsl_vector_alloc(n);
|
475
448
|
switch(n) {
|
476
|
-
|
477
|
-
|
449
|
+
case 2: gsl_vector_set(r, 1, x1); /* fall through */
|
450
|
+
case 1: gsl_vector_set(r, 0, x0);
|
478
451
|
}
|
479
452
|
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, r);
|
480
453
|
}
|
@@ -487,31 +460,31 @@ static VALUE FUNCTION(rb_gsl_poly,complex_solve_quadratic)(int argc, VALUE *argv
|
|
487
460
|
int n;
|
488
461
|
switch (argc) {
|
489
462
|
case 3:
|
490
|
-
n = gsl_poly_complex_solve_quadratic(NUMCONV2(argv[0]),
|
491
|
-
|
492
|
-
|
463
|
+
n = gsl_poly_complex_solve_quadratic(NUMCONV2(argv[0]),
|
464
|
+
NUMCONV2(argv[1]), NUMCONV2(argv[2]),
|
465
|
+
&z0, &z1);
|
493
466
|
break;
|
494
467
|
case 1:
|
495
468
|
switch (TYPE(argv[0])) {
|
496
469
|
case T_ARRAY:
|
497
|
-
n = gsl_poly_complex_solve_quadratic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
498
|
-
|
499
|
-
|
500
|
-
|
470
|
+
n = gsl_poly_complex_solve_quadratic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
471
|
+
NUMCONV2(rb_ary_entry(argv[0], 1)),
|
472
|
+
NUMCONV2(rb_ary_entry(argv[0], 2)),
|
473
|
+
&z0, &z1);
|
501
474
|
break;
|
502
475
|
default:
|
503
476
|
CHECK_VEC(argv[0]);
|
504
477
|
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v);
|
505
478
|
n = gsl_poly_complex_solve_quadratic(FUNCTION(gsl_vector,get)(v, 0),
|
506
|
-
|
507
|
-
|
508
|
-
|
479
|
+
FUNCTION(gsl_vector,get)(v, 1),
|
480
|
+
FUNCTION(gsl_vector,get)(v, 2),
|
481
|
+
&z0, &z1);
|
509
482
|
break;
|
510
483
|
}
|
511
484
|
break;
|
512
485
|
default:
|
513
|
-
rb_raise(rb_eArgError,
|
514
|
-
|
486
|
+
rb_raise(rb_eArgError,
|
487
|
+
"wrong number of arguments (3 numbers or 1 array or 1 vector)");
|
515
488
|
break;
|
516
489
|
}
|
517
490
|
// If n == 0, we want to return an empty gsl_vector, but gsl_vectors can'y be
|
@@ -521,8 +494,8 @@ static VALUE FUNCTION(rb_gsl_poly,complex_solve_quadratic)(int argc, VALUE *argv
|
|
521
494
|
}
|
522
495
|
r = gsl_vector_complex_alloc(n);
|
523
496
|
switch(n) {
|
524
|
-
|
525
|
-
|
497
|
+
case 2: gsl_vector_complex_set(r, 1, z1); /* fall through */
|
498
|
+
case 1: gsl_vector_complex_set(r, 0, z0);
|
526
499
|
}
|
527
500
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, r);
|
528
501
|
}
|
@@ -536,36 +509,36 @@ static VALUE FUNCTION(rb_gsl_poly,solve_cubic)(int argc, VALUE *argv, VALUE obj)
|
|
536
509
|
switch (argc) {
|
537
510
|
case 3:
|
538
511
|
n = gsl_poly_solve_cubic(NUMCONV2(argv[0]), NUMCONV2(argv[1]), NUMCONV2(argv[2]),
|
539
|
-
|
512
|
+
&x0, &x1, &x2);
|
540
513
|
break;
|
541
514
|
case 1:
|
542
515
|
switch (TYPE(argv[0])) {
|
543
516
|
case T_ARRAY:
|
544
|
-
n = gsl_poly_solve_cubic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
545
|
-
|
546
|
-
|
547
|
-
|
517
|
+
n = gsl_poly_solve_cubic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
518
|
+
NUMCONV2(rb_ary_entry(argv[0], 1)),
|
519
|
+
NUMCONV2(rb_ary_entry(argv[0], 2)),
|
520
|
+
&x0, &x1, &x2);
|
548
521
|
break;
|
549
522
|
default:
|
550
523
|
CHECK_VEC(argv[0]);
|
551
524
|
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v);
|
552
525
|
n = gsl_poly_solve_cubic(FUNCTION(gsl_vector,get)(v, 0),
|
553
|
-
|
554
|
-
|
555
|
-
|
526
|
+
FUNCTION(gsl_vector,get)(v, 1),
|
527
|
+
FUNCTION(gsl_vector,get)(v, 2),
|
528
|
+
&x0, &x1, &x2);
|
556
529
|
break;
|
557
530
|
}
|
558
531
|
break;
|
559
532
|
default:
|
560
|
-
rb_raise(rb_eArgError,
|
561
|
-
|
533
|
+
rb_raise(rb_eArgError,
|
534
|
+
"wrong number of arguments (3 numbers or 1 array or 1 vector)");
|
562
535
|
break;
|
563
536
|
}
|
564
537
|
r = gsl_vector_alloc(n);
|
565
538
|
switch(n) {
|
566
|
-
|
567
|
-
|
568
|
-
|
539
|
+
case 3: gsl_vector_set(r, 2, x2); /* fall through */
|
540
|
+
case 2: gsl_vector_set(r, 1, x1); /* fall through */
|
541
|
+
case 1: gsl_vector_set(r, 0, x0);
|
569
542
|
}
|
570
543
|
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, r);
|
571
544
|
}
|
@@ -579,36 +552,36 @@ static VALUE FUNCTION(rb_gsl_poly,complex_solve_cubic)(int argc, VALUE *argv, VA
|
|
579
552
|
switch (argc) {
|
580
553
|
case 3:
|
581
554
|
n = gsl_poly_complex_solve_cubic(NUMCONV2(argv[0]), NUMCONV2(argv[1]), NUMCONV2(argv[2]),
|
582
|
-
|
555
|
+
&z0, &z1, &z2);
|
583
556
|
break;
|
584
557
|
case 1:
|
585
558
|
switch (TYPE(argv[0])) {
|
586
559
|
case T_ARRAY:
|
587
|
-
n = gsl_poly_complex_solve_cubic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
588
|
-
|
589
|
-
|
590
|
-
|
560
|
+
n = gsl_poly_complex_solve_cubic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
561
|
+
NUMCONV2(rb_ary_entry(argv[0], 1)),
|
562
|
+
NUMCONV2(rb_ary_entry(argv[0], 2)),
|
563
|
+
&z0, &z1, &z2);
|
591
564
|
break;
|
592
565
|
default:
|
593
566
|
CHECK_VEC(argv[0]);
|
594
567
|
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v);
|
595
568
|
n = gsl_poly_complex_solve_cubic(FUNCTION(gsl_vector,get)(v, 0),
|
596
|
-
|
597
|
-
|
598
|
-
|
569
|
+
FUNCTION(gsl_vector,get)(v, 1),
|
570
|
+
FUNCTION(gsl_vector,get)(v, 2),
|
571
|
+
&z0, &z1, &z2);
|
599
572
|
break;
|
600
573
|
}
|
601
574
|
break;
|
602
575
|
default:
|
603
|
-
rb_raise(rb_eArgError,
|
604
|
-
|
576
|
+
rb_raise(rb_eArgError,
|
577
|
+
"wrong number of arguments (3 numbers or 1 array or 1 vector)");
|
605
578
|
break;
|
606
579
|
}
|
607
580
|
r = gsl_vector_complex_alloc(n);
|
608
581
|
switch(n) {
|
609
|
-
|
610
|
-
|
611
|
-
|
582
|
+
case 3: gsl_vector_complex_set(r, 2, z2); /* fall through */
|
583
|
+
case 2: gsl_vector_complex_set(r, 1, z1); /* fall through */
|
584
|
+
case 1: gsl_vector_complex_set(r, 0, z0);
|
612
585
|
}
|
613
586
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, r);
|
614
587
|
}
|
@@ -623,40 +596,40 @@ static VALUE FUNCTION(rb_gsl_poly,solve_quartic)(int argc, VALUE *argv, VALUE ob
|
|
623
596
|
switch (argc) {
|
624
597
|
case 4:
|
625
598
|
n = gsl_poly_solve_quartic(NUMCONV2(argv[0]), NUMCONV2(argv[1]), NUMCONV2(argv[2]),
|
626
|
-
|
627
|
-
|
599
|
+
NUMCONV2(argv[3]),
|
600
|
+
&x0, &x1, &x2, &x3);
|
628
601
|
break;
|
629
602
|
case 1:
|
630
603
|
switch (TYPE(argv[0])) {
|
631
604
|
case T_ARRAY:
|
632
|
-
n = gsl_poly_solve_quartic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
605
|
+
n = gsl_poly_solve_quartic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
606
|
+
NUMCONV2(rb_ary_entry(argv[0], 1)),
|
607
|
+
NUMCONV2(rb_ary_entry(argv[0], 2)),
|
608
|
+
NUMCONV2(rb_ary_entry(argv[0], 3)),
|
609
|
+
&x0, &x1, &x2, &x3);
|
637
610
|
break;
|
638
611
|
default:
|
639
612
|
CHECK_VEC(argv[0]);
|
640
613
|
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v);
|
641
614
|
n = gsl_poly_solve_quartic(FUNCTION(gsl_vector,get)(v, 0),
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
615
|
+
FUNCTION(gsl_vector,get)(v, 1),
|
616
|
+
FUNCTION(gsl_vector,get)(v, 2),
|
617
|
+
FUNCTION(gsl_vector,get)(v, 3),
|
618
|
+
&x0, &x1, &x2, &x3);
|
646
619
|
break;
|
647
620
|
}
|
648
621
|
break;
|
649
622
|
default:
|
650
|
-
rb_raise(rb_eArgError,
|
651
|
-
|
623
|
+
rb_raise(rb_eArgError,
|
624
|
+
"wrong number of arguments (3 numbers or 1 array or 1 vector)");
|
652
625
|
break;
|
653
626
|
}
|
654
627
|
r = gsl_vector_alloc(n);
|
655
628
|
switch(n) {
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
629
|
+
case 4: gsl_vector_set(r, 3, x3); /* fall through */
|
630
|
+
case 3: gsl_vector_set(r, 2, x2); /* fall through */
|
631
|
+
case 2: gsl_vector_set(r, 1, x1); /* fall through */
|
632
|
+
case 1: gsl_vector_set(r, 0, x0);
|
660
633
|
}
|
661
634
|
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, r);
|
662
635
|
}
|
@@ -669,41 +642,41 @@ static VALUE FUNCTION(rb_gsl_poly,complex_solve_quartic)(int argc, VALUE *argv,
|
|
669
642
|
int n;
|
670
643
|
switch (argc) {
|
671
644
|
case 4:
|
672
|
-
n = gsl_poly_complex_solve_quartic(NUMCONV2(argv[0]), NUMCONV2(argv[1]),
|
673
|
-
|
674
|
-
|
645
|
+
n = gsl_poly_complex_solve_quartic(NUMCONV2(argv[0]), NUMCONV2(argv[1]),
|
646
|
+
NUMCONV2(argv[2]), NUMCONV2(argv[3]),
|
647
|
+
&z0, &z1, &z2, &z3);
|
675
648
|
break;
|
676
649
|
case 1:
|
677
650
|
switch (TYPE(argv[0])) {
|
678
651
|
case T_ARRAY:
|
679
|
-
n = gsl_poly_complex_solve_quartic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
652
|
+
n = gsl_poly_complex_solve_quartic(NUMCONV2(rb_ary_entry(argv[0], 0)),
|
653
|
+
NUMCONV2(rb_ary_entry(argv[0], 1)),
|
654
|
+
NUMCONV2(rb_ary_entry(argv[0], 2)),
|
655
|
+
NUMCONV2(rb_ary_entry(argv[0], 3)),
|
656
|
+
&z0, &z1, &z2, &z3);
|
684
657
|
break;
|
685
658
|
default:
|
686
659
|
CHECK_VEC(argv[0]);
|
687
660
|
Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v);
|
688
661
|
n = gsl_poly_complex_solve_quartic(FUNCTION(gsl_vector,get)(v, 0),
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
662
|
+
FUNCTION(gsl_vector,get)(v, 1),
|
663
|
+
FUNCTION(gsl_vector,get)(v, 2),
|
664
|
+
FUNCTION(gsl_vector,get)(v, 3),
|
665
|
+
&z0, &z1, &z2, &z3);
|
693
666
|
break;
|
694
667
|
}
|
695
668
|
break;
|
696
669
|
default:
|
697
|
-
rb_raise(rb_eArgError,
|
698
|
-
|
670
|
+
rb_raise(rb_eArgError,
|
671
|
+
"wrong number of arguments (3 numbers or 1 array or 1 vector)");
|
699
672
|
break;
|
700
673
|
}
|
701
674
|
r = gsl_vector_complex_alloc(n);
|
702
675
|
switch(n) {
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
676
|
+
case 4: gsl_vector_complex_set(r, 0, z0); /* fall through */
|
677
|
+
case 3: gsl_vector_complex_set(r, 1, z1); /* fall through */
|
678
|
+
case 2: gsl_vector_complex_set(r, 2, z2); /* fall through */
|
679
|
+
case 1: gsl_vector_complex_set(r, 3, z3);
|
707
680
|
}
|
708
681
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, r);
|
709
682
|
}
|
@@ -809,20 +782,19 @@ static VALUE FUNCTION(rb_gsl_poly,solve_quadratic2)(VALUE obj)
|
|
809
782
|
n = gsl_poly_solve_quadratic(a2, a1, a0, &x0, &x1);
|
810
783
|
r = gsl_vector_alloc(n);
|
811
784
|
switch(n) {
|
812
|
-
|
813
|
-
|
785
|
+
case 2: gsl_vector_set(r, 1, x1); /* fall through */
|
786
|
+
case 1: gsl_vector_set(r, 0, x0);
|
814
787
|
}
|
815
788
|
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, r);
|
816
789
|
} else {
|
817
790
|
n = gsl_poly_complex_solve_quadratic(a2, a1, a0, &z0, &z1);
|
818
791
|
r2 = gsl_vector_complex_alloc(n);
|
819
792
|
switch(n) {
|
820
|
-
|
821
|
-
|
793
|
+
case 2: gsl_vector_complex_set(r2, 1, z1); /* fall through */
|
794
|
+
case 1: gsl_vector_complex_set(r2, 0, z0);
|
822
795
|
}
|
823
796
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, r2);
|
824
797
|
}
|
825
|
-
|
826
798
|
}
|
827
799
|
|
828
800
|
|
@@ -843,8 +815,8 @@ static VALUE FUNCTION(rb_gsl_poly,complex_solve_quadratic2)(VALUE obj)
|
|
843
815
|
n = gsl_poly_complex_solve_quadratic(a2, a1, a0, &z0, &z1);
|
844
816
|
r = gsl_vector_complex_alloc(n);
|
845
817
|
switch(n) {
|
846
|
-
|
847
|
-
|
818
|
+
case 2: gsl_vector_complex_set(r, 1, z1); /* fall through */
|
819
|
+
case 1: gsl_vector_complex_set(r, 0, z0);
|
848
820
|
}
|
849
821
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, r);
|
850
822
|
}
|
@@ -862,16 +834,16 @@ static VALUE FUNCTION(rb_gsl_poly,solve_cubic2)(VALUE obj)
|
|
862
834
|
if (v->size < 4) {
|
863
835
|
rb_raise(rb_eArgError, "the order of the object is less than 4.");
|
864
836
|
}
|
865
|
-
a3 = FUNCTION(gsl_vector,get)(v, 3);
|
837
|
+
a3 = FUNCTION(gsl_vector,get)(v, 3);
|
866
838
|
a2 = FUNCTION(gsl_vector,get)(v, 2)/a3; /* coefficients */
|
867
839
|
a1 = FUNCTION(gsl_vector,get)(v, 1)/a3;
|
868
840
|
a0 = FUNCTION(gsl_vector,get)(v, 0)/a3;
|
869
841
|
n = gsl_poly_solve_cubic(a2, a1, a0, &x0, &x1, &x2);
|
870
842
|
r = gsl_vector_alloc(n);
|
871
843
|
switch(n) {
|
872
|
-
|
873
|
-
|
874
|
-
|
844
|
+
case 3: gsl_vector_set(r, 2, x2); /* fall through */
|
845
|
+
case 2: gsl_vector_set(r, 1, x1); /* fall through */
|
846
|
+
case 1: gsl_vector_set(r, 0, x0);
|
875
847
|
}
|
876
848
|
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, r);
|
877
849
|
}
|
@@ -887,16 +859,16 @@ static VALUE FUNCTION(rb_gsl_poly,complex_solve_cubic2)(VALUE obj)
|
|
887
859
|
if (v->size < 4) {
|
888
860
|
rb_raise(rb_eArgError, "the order of the object is less than 4.");
|
889
861
|
}
|
890
|
-
a3 = FUNCTION(gsl_vector,get)(v, 3);
|
862
|
+
a3 = FUNCTION(gsl_vector,get)(v, 3);
|
891
863
|
a2 = FUNCTION(gsl_vector,get)(v, 2)/a3; /* coefficients */
|
892
864
|
a1 = FUNCTION(gsl_vector,get)(v, 1)/a3;
|
893
865
|
a0 = FUNCTION(gsl_vector,get)(v, 0)/a3;
|
894
866
|
n = gsl_poly_complex_solve_cubic(a2, a1, a0, &z0, &z1, &z2);
|
895
867
|
r = gsl_vector_complex_alloc(n);
|
896
868
|
switch(n) {
|
897
|
-
|
898
|
-
|
899
|
-
|
869
|
+
case 3: gsl_vector_complex_set(r, 2, z2); /* fall through */
|
870
|
+
case 2: gsl_vector_complex_set(r, 1, z1); /* fall through */
|
871
|
+
case 1: gsl_vector_complex_set(r, 0, z0);
|
900
872
|
}
|
901
873
|
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, r);
|
902
874
|
}
|
@@ -915,8 +887,8 @@ static VALUE FUNCTION(rb_gsl_poly,solve_quartic2)(VALUE obj)
|
|
915
887
|
if (v->size < 5) {
|
916
888
|
rb_raise(rb_eArgError, "the order of the object is less than 4.");
|
917
889
|
}
|
918
|
-
a4 = FUNCTION(gsl_vector,get)(v, 4);
|
919
|
-
a3 = FUNCTION(gsl_vector,get)(v, 3)/a4;
|
890
|
+
a4 = FUNCTION(gsl_vector,get)(v, 4);
|
891
|
+
a3 = FUNCTION(gsl_vector,get)(v, 3)/a4;
|
920
892
|
a2 = FUNCTION(gsl_vector,get)(v, 2)/a4; /* coefficients */
|
921
893
|
a1 = FUNCTION(gsl_vector,get)(v, 1)/a4;
|
922
894
|
a0 = FUNCTION(gsl_vector,get)(v, 0)/a4;
|
@@ -941,8 +913,8 @@ static VALUE FUNCTION(rb_gsl_poly,complex_solve_quartic2)(VALUE obj)
|
|
941
913
|
if (v->size < 5) {
|
942
914
|
rb_raise(rb_eArgError, "the order of the object is less than 4.");
|
943
915
|
}
|
944
|
-
a4 = FUNCTION(gsl_vector,get)(v, 4);
|
945
|
-
a3 = FUNCTION(gsl_vector,get)(v, 3)/a4;
|
916
|
+
a4 = FUNCTION(gsl_vector,get)(v, 4);
|
917
|
+
a3 = FUNCTION(gsl_vector,get)(v, 3)/a4;
|
946
918
|
a2 = FUNCTION(gsl_vector,get)(v, 2)/a4; /* coefficients */
|
947
919
|
a1 = FUNCTION(gsl_vector,get)(v, 1)/a4;
|
948
920
|
a0 = FUNCTION(gsl_vector,get)(v, 0)/a4;
|
@@ -978,7 +950,6 @@ VALUE FUNCTION(rb_gsl_poly,complex_solve2)(int argc, VALUE *argv, VALUE obj)
|
|
978
950
|
for (i = 0; i < v->size; i++) {
|
979
951
|
gsl_vector_set(a, i, FUNCTION(gsl_vector,get)(v, i));
|
980
952
|
}
|
981
|
-
|
982
953
|
if (argc == 1 && rb_obj_is_kind_of(argv[0], cgsl_poly_workspace)) {
|
983
954
|
Data_Get_Struct(argv[0], gsl_poly_complex_workspace, w);
|
984
955
|
flag = 0;
|
@@ -986,7 +957,6 @@ VALUE FUNCTION(rb_gsl_poly,complex_solve2)(int argc, VALUE *argv, VALUE obj)
|
|
986
957
|
w = gsl_poly_complex_workspace_alloc(size);
|
987
958
|
flag = 1;
|
988
959
|
}
|
989
|
-
|
990
960
|
/*status =*/ gsl_poly_complex_solve(a->data, size, w, z->data);
|
991
961
|
|
992
962
|
r = gsl_vector_complex_alloc(size - 1);
|
@@ -1009,7 +979,7 @@ static VALUE rb_gsl_poly_int_to_f(VALUE obj)
|
|
1009
979
|
size_t i;
|
1010
980
|
Data_Get_Struct(obj, gsl_vector_int, vi);
|
1011
981
|
v = gsl_vector_alloc(vi->size);
|
1012
|
-
for (i = 0; i < v->size; i++)
|
982
|
+
for (i = 0; i < v->size; i++)
|
1013
983
|
gsl_vector_set(v, i, (double) gsl_vector_int_get(vi, i));
|
1014
984
|
return Data_Wrap_Struct(cgsl_poly, 0, gsl_vector_free, v);
|
1015
985
|
}
|
@@ -1023,7 +993,7 @@ static VALUE rb_gsl_poly_to_i(VALUE obj)
|
|
1023
993
|
size_t i;
|
1024
994
|
Data_Get_Struct(obj, gsl_vector, v);
|
1025
995
|
vi = gsl_vector_int_alloc(v->size);
|
1026
|
-
for (i = 0; i < v->size; i++)
|
996
|
+
for (i = 0; i < v->size; i++)
|
1027
997
|
gsl_vector_int_set(vi, i, (int) gsl_vector_get(v, i));
|
1028
998
|
return Data_Wrap_Struct(cgsl_poly_int, 0, gsl_vector_int_free, vi);
|
1029
999
|
}
|
@@ -1035,8 +1005,6 @@ static VALUE FUNCTION(rb_gsl_poly,workspace_new)(VALUE klass, VALUE n)
|
|
1035
1005
|
return Data_Wrap_Struct(klass, 0, gsl_poly_complex_workspace_free, w);
|
1036
1006
|
}
|
1037
1007
|
|
1038
|
-
#ifdef GSL_1_1_LATER
|
1039
|
-
|
1040
1008
|
/* singleton method of the class Poly */
|
1041
1009
|
static VALUE rb_gsl_poly_dd_init(VALUE obj, VALUE vxa, VALUE vya)
|
1042
1010
|
{
|
@@ -1065,7 +1033,7 @@ static VALUE rb_gsl_poly_dd_eval(VALUE obj, VALUE xxa, VALUE xx)
|
|
1065
1033
|
case T_BIGNUM:
|
1066
1034
|
case T_FLOAT:
|
1067
1035
|
return rb_float_new(gsl_poly_dd_eval(dd->data, xa->data, dd->size,
|
1068
|
-
|
1036
|
+
NUM2DBL(xx)));
|
1069
1037
|
break;
|
1070
1038
|
case T_ARRAY:
|
1071
1039
|
size = RARRAY_LEN(xx);
|
@@ -1073,9 +1041,9 @@ static VALUE rb_gsl_poly_dd_eval(VALUE obj, VALUE xxa, VALUE xx)
|
|
1073
1041
|
for (i = 0; i < size; i++) {
|
1074
1042
|
x = rb_ary_entry(xx, i);
|
1075
1043
|
Need_Float(x);
|
1076
|
-
rb_ary_store(ary, i,
|
1077
|
-
|
1078
|
-
|
1044
|
+
rb_ary_store(ary, i,
|
1045
|
+
rb_float_new(gsl_poly_dd_eval(dd->data, xa->data,
|
1046
|
+
dd->size, NUM2DBL(x))));
|
1079
1047
|
}
|
1080
1048
|
return ary;
|
1081
1049
|
break;
|
@@ -1085,9 +1053,9 @@ static VALUE rb_gsl_poly_dd_eval(VALUE obj, VALUE xxa, VALUE xx)
|
|
1085
1053
|
size = v->size;
|
1086
1054
|
vnew = gsl_vector_alloc(v->size);
|
1087
1055
|
for (i = 0; i < size; i++) {
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1056
|
+
gsl_vector_set(vnew, i,
|
1057
|
+
gsl_poly_dd_eval(dd->data, xa->data,
|
1058
|
+
dd->size, FUNCTION(gsl_vector,get)(v, i)));
|
1091
1059
|
}
|
1092
1060
|
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
1093
1061
|
} else if (MAT_P(xx)) {
|
@@ -1095,11 +1063,11 @@ static VALUE rb_gsl_poly_dd_eval(VALUE obj, VALUE xxa, VALUE xx)
|
|
1095
1063
|
size = m->size1;
|
1096
1064
|
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
1097
1065
|
for (i = 0; i < m->size1; i++) {
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1066
|
+
for (j = 0; j < m->size2; j++) {
|
1067
|
+
gsl_matrix_set(mnew, i, j,
|
1068
|
+
gsl_poly_dd_eval(dd->data, xa->data,
|
1069
|
+
dd->size, gsl_matrix_get(m, i, j)));
|
1070
|
+
}
|
1103
1071
|
}
|
1104
1072
|
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
1105
1073
|
} else {
|
@@ -1160,7 +1128,6 @@ static VALUE rb_gsl_poly_dd_taylor(int argc, VALUE *argv, VALUE obj)
|
|
1160
1128
|
return Data_Wrap_Struct(cgsl_poly_taylor, 0, gsl_vector_free, c);
|
1161
1129
|
}
|
1162
1130
|
|
1163
|
-
#endif
|
1164
1131
|
#endif
|
1165
1132
|
|
1166
1133
|
static VALUE FUNCTION(rb_gsl_poly,order)(VALUE obj)
|
@@ -1171,7 +1138,7 @@ static VALUE FUNCTION(rb_gsl_poly,order)(VALUE obj)
|
|
1171
1138
|
}
|
1172
1139
|
|
1173
1140
|
int FUNCTION(gsl_poly,conv)(const BASE *a, size_t na, const BASE *b, size_t nb,
|
1174
|
-
|
1141
|
+
BASE *c, size_t *nc)
|
1175
1142
|
{
|
1176
1143
|
BASE x;
|
1177
1144
|
size_t i, j;
|
@@ -1192,7 +1159,7 @@ GSL_TYPE(gsl_vector)* FUNCTION(gsl_poly,conv_vector)(const GSL_TYPE(gsl_vector)
|
|
1192
1159
|
{
|
1193
1160
|
GSL_TYPE(gsl_vector) *vnew = NULL;
|
1194
1161
|
size_t n, tmp;
|
1195
|
-
if (v1->size == 1) {
|
1162
|
+
if (v1->size == 1) {
|
1196
1163
|
vnew = FUNCTION(make_vector,clone)(v2);
|
1197
1164
|
FUNCTION(gsl_vector,scale)(vnew, FUNCTION(gsl_vector,get)(v1, 0));
|
1198
1165
|
return vnew;
|
@@ -1249,8 +1216,8 @@ GSL_TYPE(gsl_vector)* FUNCTION(gsl_poly,integ)(const GSL_TYPE(gsl_vector) *v)
|
|
1249
1216
|
return vnew;
|
1250
1217
|
}
|
1251
1218
|
|
1252
|
-
GSL_TYPE(gsl_vector)* FUNCTION(gsl_poly,deconv_vector)(const GSL_TYPE(gsl_vector) *c, const GSL_TYPE(gsl_vector) *a,
|
1253
|
-
|
1219
|
+
GSL_TYPE(gsl_vector)* FUNCTION(gsl_poly,deconv_vector)(const GSL_TYPE(gsl_vector) *c, const GSL_TYPE(gsl_vector) *a,
|
1220
|
+
GSL_TYPE(gsl_vector) **r)
|
1254
1221
|
{
|
1255
1222
|
GSL_TYPE(gsl_vector) *vnew = NULL, *a2 = NULL, *c2 = NULL, *vtmp = NULL;
|
1256
1223
|
GSL_TYPE(gsl_vector) *rtmp = NULL;
|
@@ -1270,8 +1237,8 @@ GSL_TYPE(gsl_vector)* FUNCTION(gsl_poly,deconv_vector)(const GSL_TYPE(gsl_vector
|
|
1270
1237
|
jj = c2->size-1-k-j;
|
1271
1238
|
//if (jj > k || jj < 0) continue;
|
1272
1239
|
if (jj <= k) {
|
1273
|
-
|
1274
|
-
|
1240
|
+
y = FUNCTION(gsl_vector,get)(a2, jj);
|
1241
|
+
x -= y*z;
|
1275
1242
|
}
|
1276
1243
|
if (j == 0) break;
|
1277
1244
|
}
|
@@ -1357,11 +1324,11 @@ VALUE FUNCTION(rb_gsl_poly,deconv)(VALUE obj, VALUE bb)
|
|
1357
1324
|
}
|
1358
1325
|
vnew = FUNCTION(gsl_poly,deconv_vector)(v, v2, &r);
|
1359
1326
|
if (flag == 1) FUNCTION(gsl_vector,free)(v2);
|
1360
|
-
if (FUNCTION(gsl_vector,isnull)(r))
|
1327
|
+
if (FUNCTION(gsl_vector,isnull)(r))
|
1361
1328
|
return Data_Wrap_Struct(GSL_TYPE(cgsl_poly), 0, FUNCTION(gsl_vector,free), vnew);
|
1362
1329
|
else
|
1363
1330
|
return rb_ary_new3(2, Data_Wrap_Struct(GSL_TYPE(cgsl_poly), 0, FUNCTION(gsl_vector,free), vnew),
|
1364
|
-
|
1331
|
+
Data_Wrap_Struct(GSL_TYPE(cgsl_poly), 0, FUNCTION(gsl_vector,free), r));
|
1365
1332
|
}
|
1366
1333
|
|
1367
1334
|
static VALUE FUNCTION(rb_gsl_poly,reduce)(VALUE obj)
|
@@ -1410,7 +1377,7 @@ static VALUE FUNCTION(rb_gsl_poly,conv2)(VALUE klass, VALUE v1, VALUE v2)
|
|
1410
1377
|
p3 = FUNCTION(gsl_poly,conv_vector)(p1, p2);
|
1411
1378
|
if (flag1 == 1) FUNCTION(gsl_vector,free)(p1);
|
1412
1379
|
if (flag2 == 1) FUNCTION(gsl_vector,free)(p2);
|
1413
|
-
if (flag1 == 1 && flag2 == 1) {
|
1380
|
+
if (flag1 == 1 && flag2 == 1) {
|
1414
1381
|
ary = rb_ary_new2(p3->size);
|
1415
1382
|
for (i = 0; i < p3->size; i++)
|
1416
1383
|
rb_ary_store(ary, i, C_TO_VALUE2(FUNCTION(gsl_vector,get)(p3, i)));
|
@@ -1431,15 +1398,15 @@ static VALUE FUNCTION(rb_gsl_poly,deconv2)(VALUE klass, VALUE v1, VALUE v2)
|
|
1431
1398
|
vnew = FUNCTION(gsl_poly,deconv_vector)(p1, p2, &r);
|
1432
1399
|
if (flag1 == 1) FUNCTION(gsl_vector,free)(p1);
|
1433
1400
|
if (flag2 == 1) FUNCTION(gsl_vector,free)(p2);
|
1434
|
-
if (FUNCTION(gsl_vector,isnull)(r))
|
1401
|
+
if (FUNCTION(gsl_vector,isnull)(r))
|
1435
1402
|
return Data_Wrap_Struct(GSL_TYPE(cgsl_poly), 0, FUNCTION(gsl_vector,free), vnew);
|
1436
1403
|
else
|
1437
1404
|
return rb_ary_new3(2, Data_Wrap_Struct(GSL_TYPE(cgsl_poly), 0, FUNCTION(gsl_vector,free), vnew),
|
1438
|
-
|
1405
|
+
Data_Wrap_Struct(GSL_TYPE(cgsl_poly), 0, FUNCTION(gsl_vector,free), r));
|
1439
1406
|
}
|
1440
1407
|
|
1441
|
-
GSL_TYPE(gsl_poly)* FUNCTION(gsl_poly,add)(const GSL_TYPE(gsl_poly) *a,
|
1442
|
-
|
1408
|
+
GSL_TYPE(gsl_poly)* FUNCTION(gsl_poly,add)(const GSL_TYPE(gsl_poly) *a,
|
1409
|
+
const GSL_TYPE(gsl_poly) *b)
|
1443
1410
|
{
|
1444
1411
|
GSL_TYPE(gsl_poly) *c = NULL;
|
1445
1412
|
const GSL_TYPE(gsl_poly) *longer;
|
@@ -1449,7 +1416,7 @@ GSL_TYPE(gsl_poly)* FUNCTION(gsl_poly,add)(const GSL_TYPE(gsl_poly) *a,
|
|
1449
1416
|
longer = a;
|
1450
1417
|
} else {
|
1451
1418
|
c = FUNCTION(gsl_vector,alloc)(b->size);
|
1452
|
-
|
1419
|
+
longer = b;
|
1453
1420
|
}
|
1454
1421
|
n = GSL_MIN(a->size, b->size);
|
1455
1422
|
for (i = 0; i < n; i++) {
|
@@ -1521,7 +1488,7 @@ static VALUE FUNCTION(rb_gsl_poly,coerce)(VALUE obj, VALUE other)
|
|
1521
1488
|
vb = FUNCTION(gsl_vector,calloc)(1);
|
1522
1489
|
FUNCTION(gsl_vector,set)(vb, 0, (BASE) NUM2DBL(other));
|
1523
1490
|
return rb_ary_new3(2, Data_Wrap_Struct(CLASS_OF(obj), 0, FUNCTION(gsl_vector,free), vb),
|
1524
|
-
|
1491
|
+
obj);
|
1525
1492
|
break;
|
1526
1493
|
default:
|
1527
1494
|
CHECK_VEC(other);
|
@@ -1548,10 +1515,10 @@ static VALUE FUNCTION(rb_gsl_poly,companion_matrix)(VALUE obj)
|
|
1548
1515
|
size = p->size - 1;
|
1549
1516
|
m = gsl_matrix_calloc(size, size);
|
1550
1517
|
z = FUNCTION(gsl_vector,get)(p, size);
|
1551
|
-
for (j = 0; j < size; j++)
|
1518
|
+
for (j = 0; j < size; j++)
|
1552
1519
|
gsl_matrix_set(m, 0, size-j-1, -FUNCTION(gsl_vector,get)(p, j)/z);
|
1553
1520
|
for (i = 1; i < size; i++) {
|
1554
|
-
|
1521
|
+
gsl_matrix_set(m, i, i-1, 1.0);
|
1555
1522
|
}
|
1556
1523
|
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, m);
|
1557
1524
|
}
|
@@ -1580,7 +1547,7 @@ static VALUE rb_gsl_poly_fit(int argc, VALUE *argv, VALUE obj)
|
|
1580
1547
|
double chisq, val;
|
1581
1548
|
int status, flag = 0;
|
1582
1549
|
VALUE vc, vcov;
|
1583
|
-
if (argc != 3 && argc != 4)
|
1550
|
+
if (argc != 3 && argc != 4)
|
1584
1551
|
rb_raise(rb_eArgError, "wrong number of arguments (%d for 3 or 4)", argc);
|
1585
1552
|
x = &xx.vector;
|
1586
1553
|
y = &yy.vector;
|
@@ -1621,7 +1588,7 @@ static VALUE rb_gsl_poly_wfit(int argc, VALUE *argv, VALUE obj)
|
|
1621
1588
|
double chisq, val;
|
1622
1589
|
int status, flag = 0;
|
1623
1590
|
VALUE vc, vcov;
|
1624
|
-
if (argc != 4 && argc != 5)
|
1591
|
+
if (argc != 4 && argc != 5)
|
1625
1592
|
rb_raise(rb_eArgError, "wrong number of arguments (%d for 4 or 5)", argc);
|
1626
1593
|
Data_Get_Vector(argv[0], x);
|
1627
1594
|
Data_Get_Vector(argv[1], w);
|
@@ -1654,17 +1621,11 @@ static VALUE rb_gsl_poly_wfit(int argc, VALUE *argv, VALUE obj)
|
|
1654
1621
|
#endif
|
1655
1622
|
|
1656
1623
|
#ifdef BASE_DOUBLE
|
1657
|
-
#ifdef GSL_1_13_LATER
|
1658
1624
|
static VALUE rb_gsl_poly_eval_derivs_singleton(int argc, VALUE *argv, VALUE klass)
|
1659
1625
|
{
|
1660
1626
|
VALUE ary;
|
1661
1627
|
gsl_vector *v = NULL, *v2 = NULL;
|
1662
1628
|
size_t i, lenc, lenres;
|
1663
|
-
#ifdef HAVE_NARRAY_H
|
1664
|
-
struct NARRAY *na;
|
1665
|
-
double *ptr1, *ptr2;
|
1666
|
-
int shape[1];
|
1667
|
-
#endif
|
1668
1629
|
|
1669
1630
|
if (argc < 2) rb_raise(rb_eArgError, "Wrong number of arguments (%d for >= 2)", argc);
|
1670
1631
|
if (rb_obj_is_kind_of(argv[0], rb_cArray)) {
|
@@ -1696,6 +1657,9 @@ static VALUE rb_gsl_poly_eval_derivs_singleton(int argc, VALUE *argv, VALUE klas
|
|
1696
1657
|
}
|
1697
1658
|
#ifdef HAVE_NARRAY_H
|
1698
1659
|
if (NA_IsNArray(argv[0])) {
|
1660
|
+
struct NARRAY *na;
|
1661
|
+
double *ptr1, *ptr2;
|
1662
|
+
int shape[1];
|
1699
1663
|
GetNArray(argv[0], na);
|
1700
1664
|
ptr1 = (double*) na->ptr;
|
1701
1665
|
lenc = na->total;
|
@@ -1731,7 +1695,6 @@ static VALUE rb_gsl_poly_eval_derivs(int argc, VALUE *argv, VALUE obj)
|
|
1731
1695
|
return Data_Wrap_Struct(cgsl_poly, 0, gsl_vector_free, v2);
|
1732
1696
|
}
|
1733
1697
|
#endif
|
1734
|
-
#endif
|
1735
1698
|
|
1736
1699
|
void FUNCTION(Init_gsl_poly,init)(VALUE module)
|
1737
1700
|
{
|
@@ -1742,78 +1705,78 @@ void FUNCTION(Init_gsl_poly,init)(VALUE module)
|
|
1742
1705
|
|
1743
1706
|
cgsl_poly_workspace = rb_define_class_under(cgsl_poly, "Workspace", cGSL_Object);
|
1744
1707
|
mgsl_poly_complex = rb_define_module_under(cgsl_poly, "Complex");
|
1745
|
-
cgsl_poly_complex_workspace = rb_define_class_under(mgsl_poly_complex,
|
1746
|
-
|
1747
|
-
rb_define_singleton_method(cgsl_poly_workspace, "alloc",
|
1748
|
-
|
1708
|
+
cgsl_poly_complex_workspace = rb_define_class_under(mgsl_poly_complex,
|
1709
|
+
"Workspace", cGSL_Object);
|
1710
|
+
rb_define_singleton_method(cgsl_poly_workspace, "alloc",
|
1711
|
+
rb_gsl_poly_workspace_new, 1);
|
1749
1712
|
rb_define_singleton_method(cgsl_poly_complex_workspace, "alloc",
|
1750
|
-
|
1713
|
+
rb_gsl_poly_workspace_new, 1);
|
1751
1714
|
|
1752
|
-
rb_define_singleton_method(mgsl_poly_complex, "solve_quadratic",
|
1753
|
-
|
1715
|
+
rb_define_singleton_method(mgsl_poly_complex, "solve_quadratic",
|
1716
|
+
FUNCTION(rb_gsl_poly,complex_solve_quadratic), -1);
|
1754
1717
|
rb_define_singleton_method(mgsl_poly_complex, "solve_cubic",
|
1755
|
-
|
1718
|
+
FUNCTION(rb_gsl_poly,complex_solve_cubic), -1);
|
1756
1719
|
#ifdef HAVE_GSL_POLY_SOLVE_QUARTIC
|
1757
1720
|
rb_define_singleton_method(mgsl_poly_complex, "solve_quartic",
|
1758
|
-
|
1721
|
+
FUNCTION(rb_gsl_poly,complex_solve_quartic), -1);
|
1759
1722
|
#endif
|
1760
1723
|
|
1761
1724
|
rb_define_singleton_method(mgsl_poly_complex, "solve",
|
1762
|
-
|
1763
|
-
rb_define_singleton_method(mgsl_poly_complex, "roots",
|
1764
|
-
|
1725
|
+
FUNCTION(rb_gsl_poly,complex_solve), -1);
|
1726
|
+
rb_define_singleton_method(mgsl_poly_complex, "roots",
|
1727
|
+
FUNCTION(rb_gsl_poly,complex_solve), -1);
|
1765
1728
|
#endif
|
1766
1729
|
|
1767
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "solve_quadratic",
|
1768
|
-
|
1769
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "solve_cubic",
|
1770
|
-
|
1730
|
+
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "solve_quadratic",
|
1731
|
+
FUNCTION(rb_gsl_poly,solve_quadratic), -1);
|
1732
|
+
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "solve_cubic",
|
1733
|
+
FUNCTION(rb_gsl_poly,solve_cubic), -1);
|
1771
1734
|
|
1772
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "complex_solve_quadratic",
|
1773
|
-
|
1774
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "complex_solve_cubic",
|
1775
|
-
|
1735
|
+
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "complex_solve_quadratic",
|
1736
|
+
FUNCTION(rb_gsl_poly,complex_solve_quadratic), -1);
|
1737
|
+
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "complex_solve_cubic",
|
1738
|
+
FUNCTION(rb_gsl_poly,complex_solve_cubic), -1);
|
1776
1739
|
#ifdef HAVE_GSL_POLY_SOLVE_QUARTIC
|
1777
1740
|
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "solve_quartic",
|
1778
|
-
|
1741
|
+
FUNCTION(rb_gsl_poly,solve_quartic), -1);
|
1779
1742
|
|
1780
1743
|
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "complex_solve_quartic",
|
1781
|
-
|
1744
|
+
FUNCTION(rb_gsl_poly,complex_solve_quartic), -1);
|
1782
1745
|
#endif
|
1783
1746
|
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "complex_solve",
|
1784
|
-
|
1747
|
+
FUNCTION(rb_gsl_poly,complex_solve), -1);
|
1785
1748
|
|
1786
1749
|
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "solve",
|
1787
|
-
|
1788
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "roots",
|
1789
|
-
|
1750
|
+
FUNCTION(rb_gsl_poly,complex_solve), -1);
|
1751
|
+
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "roots",
|
1752
|
+
FUNCTION(rb_gsl_poly,complex_solve), -1);
|
1790
1753
|
|
1791
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "eval",
|
1792
|
-
|
1754
|
+
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "eval",
|
1755
|
+
FUNCTION(rb_gsl_poly,eval2), -1);
|
1793
1756
|
|
1794
1757
|
rb_define_method(GSL_TYPE(cgsl_poly), "eval",
|
1795
|
-
|
1758
|
+
FUNCTION(rb_gsl_poly,eval), 1);
|
1796
1759
|
rb_define_alias(GSL_TYPE(cgsl_poly), "at", "eval");
|
1797
1760
|
|
1798
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "solve_quadratic",
|
1799
|
-
|
1800
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "complex_solve_quadratic",
|
1801
|
-
|
1761
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "solve_quadratic",
|
1762
|
+
FUNCTION(rb_gsl_poly,solve_quadratic2), 0);
|
1763
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "complex_solve_quadratic",
|
1764
|
+
FUNCTION(rb_gsl_poly,complex_solve_quadratic2), 0);
|
1802
1765
|
|
1803
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "solve_cubic",
|
1804
|
-
|
1805
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "complex_solve_cubic",
|
1806
|
-
|
1766
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "solve_cubic",
|
1767
|
+
FUNCTION(rb_gsl_poly,solve_cubic2), 0);
|
1768
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "complex_solve_cubic",
|
1769
|
+
FUNCTION(rb_gsl_poly,complex_solve_cubic2), 0);
|
1807
1770
|
|
1808
1771
|
#ifdef HAVE_GSL_POLY_SOLVE_QUARTIC
|
1809
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "solve_quartic",
|
1810
|
-
|
1811
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "complex_solve_quartic",
|
1812
|
-
|
1772
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "solve_quartic",
|
1773
|
+
FUNCTION(rb_gsl_poly,solve_quartic2), 0);
|
1774
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "complex_solve_quartic",
|
1775
|
+
FUNCTION(rb_gsl_poly,complex_solve_quartic2), 0);
|
1813
1776
|
#endif
|
1814
1777
|
|
1815
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "complex_solve",
|
1816
|
-
|
1778
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "complex_solve",
|
1779
|
+
FUNCTION(rb_gsl_poly,complex_solve2), -1);
|
1817
1780
|
rb_define_alias(GSL_TYPE(cgsl_poly), "solve", "complex_solve");
|
1818
1781
|
rb_define_alias(GSL_TYPE(cgsl_poly), "roots", "complex_solve");
|
1819
1782
|
|
@@ -1824,18 +1787,14 @@ void FUNCTION(Init_gsl_poly,init)(VALUE module)
|
|
1824
1787
|
#ifdef BASE_DOUBLE
|
1825
1788
|
// rb_define_singleton_method(cgsl_poly, "eval", rb_gsl_poly_eval_singleton, 2);
|
1826
1789
|
rb_define_method(cgsl_poly, "to_i", rb_gsl_poly_to_i, 0);
|
1827
|
-
#ifdef GSL_1_11_LATER
|
1828
1790
|
rb_define_singleton_method(cgsl_poly, "complex_eval", rb_gsl_poly_eval_singleton, 2);
|
1829
1791
|
rb_define_method(cgsl_vector_complex, "eval", rb_gsl_complex_poly_complex_eval, 1);
|
1830
|
-
#endif
|
1831
|
-
#ifdef GSL_1_1_LATER
|
1832
1792
|
cgsl_poly_dd = rb_define_class_under(cgsl_poly, "DividedDifference", cgsl_poly);
|
1833
1793
|
cgsl_poly_taylor = rb_define_class_under(cgsl_poly, "Taylor", cgsl_poly);
|
1834
1794
|
rb_define_singleton_method(cgsl_poly, "dd_init", rb_gsl_poly_dd_init, 2);
|
1835
1795
|
|
1836
1796
|
rb_define_method(cgsl_poly_dd, "eval",rb_gsl_poly_dd_eval, 2);
|
1837
1797
|
rb_define_method(cgsl_poly_dd, "taylor", rb_gsl_poly_dd_taylor, -1);
|
1838
|
-
#endif
|
1839
1798
|
#endif
|
1840
1799
|
|
1841
1800
|
rb_define_method(GSL_TYPE(cgsl_poly), "order", FUNCTION(rb_gsl_poly,order), 0);
|
@@ -1844,15 +1803,15 @@ void FUNCTION(Init_gsl_poly,init)(VALUE module)
|
|
1844
1803
|
rb_define_method(GSL_TYPE(cgsl_poly), "conv", FUNCTION(rb_gsl_poly,conv), 1);
|
1845
1804
|
rb_define_alias(GSL_TYPE(cgsl_poly), "*", "conv");
|
1846
1805
|
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "conv",
|
1847
|
-
|
1806
|
+
FUNCTION(rb_gsl_poly,conv2), 2);
|
1848
1807
|
|
1849
1808
|
rb_define_method(GSL_TYPE(cgsl_poly), "deconv",
|
1850
|
-
|
1809
|
+
FUNCTION(rb_gsl_poly,deconv), 1);
|
1851
1810
|
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "deconv",
|
1852
|
-
|
1811
|
+
FUNCTION(rb_gsl_poly,deconv2), 2);
|
1853
1812
|
|
1854
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "reduce",
|
1855
|
-
|
1813
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "reduce",
|
1814
|
+
FUNCTION(rb_gsl_poly,reduce), 1);
|
1856
1815
|
rb_define_method(GSL_TYPE(cgsl_poly), "deriv", FUNCTION(rb_gsl_poly,deriv), 1);
|
1857
1816
|
rb_define_method(GSL_TYPE(cgsl_poly), "integ", FUNCTION(rb_gsl_poly,integ), 1);
|
1858
1817
|
|
@@ -1866,29 +1825,27 @@ void FUNCTION(Init_gsl_poly,init)(VALUE module)
|
|
1866
1825
|
rb_define_method(GSL_TYPE(cgsl_poly), "-@", FUNCTION(rb_gsl_poly,uminus), 0);
|
1867
1826
|
rb_define_method(GSL_TYPE(cgsl_poly), "+@", FUNCTION(rb_gsl_poly,uplus), 0);
|
1868
1827
|
|
1869
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "coerce",
|
1870
|
-
|
1828
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "coerce",
|
1829
|
+
FUNCTION(rb_gsl_poly,coerce), 1);
|
1871
1830
|
rb_define_method(GSL_TYPE(cgsl_poly), "to_gv", FUNCTION(rb_gsl_poly,to_gv), 0);
|
1872
1831
|
rb_define_alias(GSL_TYPE(cgsl_poly), "to_v", "to_gv");
|
1873
1832
|
|
1874
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "companion_matrix",
|
1875
|
-
|
1833
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "companion_matrix",
|
1834
|
+
FUNCTION(rb_gsl_poly,companion_matrix), 0);
|
1876
1835
|
rb_define_alias(GSL_TYPE(cgsl_poly), "compan", "companion_matrix");
|
1877
1836
|
|
1878
1837
|
/*****/
|
1879
|
-
rb_define_method(GSL_TYPE(cgsl_poly), "info",
|
1880
|
-
|
1838
|
+
rb_define_method(GSL_TYPE(cgsl_poly), "info",
|
1839
|
+
FUNCTION(rb_gsl_poly,info), 0);
|
1881
1840
|
|
1882
1841
|
#ifdef BASE_DOUBLE
|
1883
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "fit",
|
1884
|
-
|
1885
|
-
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "wfit",
|
1886
|
-
|
1842
|
+
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "fit",
|
1843
|
+
FUNCTION(rb_gsl_poly,fit), -1);
|
1844
|
+
rb_define_singleton_method(GSL_TYPE(cgsl_poly), "wfit",
|
1845
|
+
FUNCTION(rb_gsl_poly,wfit), -1);
|
1887
1846
|
|
1888
|
-
#ifdef GSL_1_13_LATER
|
1889
1847
|
rb_define_singleton_method(cgsl_poly, "eval_derivs", rb_gsl_poly_eval_derivs_singleton, -1);
|
1890
1848
|
rb_define_method(cgsl_vector, "eval_derivs", rb_gsl_poly_eval_derivs, -1);
|
1891
|
-
#endif
|
1892
1849
|
|
1893
1850
|
#endif
|
1894
1851
|
}
|