gsl 1.12.108
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +29 -0
- data/Rakefile +54 -0
- data/VERSION +2 -0
- data/ext/MANIFEST +119 -0
- data/ext/alf.c +206 -0
- data/ext/array.c +666 -0
- data/ext/array_complex.c +247 -0
- data/ext/blas.c +29 -0
- data/ext/blas1.c +731 -0
- data/ext/blas2.c +1093 -0
- data/ext/blas3.c +881 -0
- data/ext/block.c +44 -0
- data/ext/block_source.c +886 -0
- data/ext/bspline.c +130 -0
- data/ext/bundle.c +3 -0
- data/ext/cdf.c +754 -0
- data/ext/cheb.c +542 -0
- data/ext/combination.c +283 -0
- data/ext/common.c +325 -0
- data/ext/complex.c +1004 -0
- data/ext/const.c +673 -0
- data/ext/const_additional.c +120 -0
- data/ext/cqp.c +283 -0
- data/ext/deriv.c +195 -0
- data/ext/dht.c +361 -0
- data/ext/diff.c +166 -0
- data/ext/dirac.c +395 -0
- data/ext/eigen.c +2373 -0
- data/ext/error.c +194 -0
- data/ext/extconf.rb +281 -0
- data/ext/fcmp.c +66 -0
- data/ext/fft.c +1092 -0
- data/ext/fit.c +205 -0
- data/ext/fresnel.c +312 -0
- data/ext/function.c +524 -0
- data/ext/geometry.c +139 -0
- data/ext/graph.c +1638 -0
- data/ext/gsl.c +271 -0
- data/ext/gsl_narray.c +653 -0
- data/ext/histogram.c +1995 -0
- data/ext/histogram2d.c +1068 -0
- data/ext/histogram3d.c +884 -0
- data/ext/histogram3d_source.c +750 -0
- data/ext/histogram_find.c +101 -0
- data/ext/histogram_oper.c +159 -0
- data/ext/ieee.c +98 -0
- data/ext/integration.c +1138 -0
- data/ext/interp.c +512 -0
- data/ext/jacobi.c +739 -0
- data/ext/linalg.c +4047 -0
- data/ext/linalg_complex.c +741 -0
- data/ext/math.c +725 -0
- data/ext/matrix.c +39 -0
- data/ext/matrix_complex.c +1732 -0
- data/ext/matrix_double.c +560 -0
- data/ext/matrix_int.c +256 -0
- data/ext/matrix_source.c +2733 -0
- data/ext/min.c +250 -0
- data/ext/monte.c +992 -0
- data/ext/multifit.c +1879 -0
- data/ext/multimin.c +808 -0
- data/ext/multimin_fsdf.c +156 -0
- data/ext/multiroots.c +955 -0
- data/ext/ndlinear.c +321 -0
- data/ext/nmf.c +167 -0
- data/ext/nmf_wrap.c +72 -0
- data/ext/ntuple.c +469 -0
- data/ext/odeiv.c +959 -0
- data/ext/ool.c +879 -0
- data/ext/oper_complex_source.c +253 -0
- data/ext/permutation.c +596 -0
- data/ext/poly.c +42 -0
- data/ext/poly2.c +265 -0
- data/ext/poly_source.c +1885 -0
- data/ext/qrng.c +171 -0
- data/ext/randist.c +1873 -0
- data/ext/rational.c +480 -0
- data/ext/rng.c +612 -0
- data/ext/root.c +408 -0
- data/ext/sf.c +1494 -0
- data/ext/sf_airy.c +200 -0
- data/ext/sf_bessel.c +867 -0
- data/ext/sf_clausen.c +28 -0
- data/ext/sf_coulomb.c +206 -0
- data/ext/sf_coupling.c +118 -0
- data/ext/sf_dawson.c +29 -0
- data/ext/sf_debye.c +157 -0
- data/ext/sf_dilog.c +42 -0
- data/ext/sf_elementary.c +44 -0
- data/ext/sf_ellint.c +206 -0
- data/ext/sf_elljac.c +29 -0
- data/ext/sf_erfc.c +93 -0
- data/ext/sf_exp.c +164 -0
- data/ext/sf_expint.c +211 -0
- data/ext/sf_fermi_dirac.c +148 -0
- data/ext/sf_gamma.c +344 -0
- data/ext/sf_gegenbauer.c +96 -0
- data/ext/sf_hyperg.c +197 -0
- data/ext/sf_laguerre.c +112 -0
- data/ext/sf_lambert.c +47 -0
- data/ext/sf_legendre.c +367 -0
- data/ext/sf_log.c +104 -0
- data/ext/sf_mathieu.c +238 -0
- data/ext/sf_power.c +46 -0
- data/ext/sf_psi.c +98 -0
- data/ext/sf_synchrotron.c +48 -0
- data/ext/sf_transport.c +76 -0
- data/ext/sf_trigonometric.c +207 -0
- data/ext/sf_zeta.c +119 -0
- data/ext/signal.c +310 -0
- data/ext/siman.c +718 -0
- data/ext/sort.c +208 -0
- data/ext/spline.c +395 -0
- data/ext/stats.c +799 -0
- data/ext/sum.c +168 -0
- data/ext/tamu_anova.c +56 -0
- data/ext/tensor.c +38 -0
- data/ext/tensor_source.c +1123 -0
- data/ext/vector.c +38 -0
- data/ext/vector_complex.c +2236 -0
- data/ext/vector_double.c +1433 -0
- data/ext/vector_int.c +204 -0
- data/ext/vector_source.c +3329 -0
- data/ext/wavelet.c +937 -0
- data/include/rb_gsl.h +151 -0
- data/include/rb_gsl_array.h +238 -0
- data/include/rb_gsl_cheb.h +21 -0
- data/include/rb_gsl_common.h +343 -0
- data/include/rb_gsl_complex.h +25 -0
- data/include/rb_gsl_const.h +29 -0
- data/include/rb_gsl_dirac.h +13 -0
- data/include/rb_gsl_eigen.h +17 -0
- data/include/rb_gsl_fft.h +62 -0
- data/include/rb_gsl_fit.h +25 -0
- data/include/rb_gsl_function.h +27 -0
- data/include/rb_gsl_graph.h +70 -0
- data/include/rb_gsl_histogram.h +63 -0
- data/include/rb_gsl_histogram3d.h +97 -0
- data/include/rb_gsl_integration.h +17 -0
- data/include/rb_gsl_interp.h +46 -0
- data/include/rb_gsl_linalg.h +25 -0
- data/include/rb_gsl_math.h +26 -0
- data/include/rb_gsl_odeiv.h +21 -0
- data/include/rb_gsl_poly.h +71 -0
- data/include/rb_gsl_rational.h +37 -0
- data/include/rb_gsl_rng.h +21 -0
- data/include/rb_gsl_root.h +22 -0
- data/include/rb_gsl_sf.h +119 -0
- data/include/rb_gsl_statistics.h +17 -0
- data/include/rb_gsl_tensor.h +45 -0
- data/include/rb_gsl_with_narray.h +22 -0
- data/include/templates_off.h +87 -0
- data/include/templates_on.h +241 -0
- data/lib/gsl/gnuplot.rb +41 -0
- data/lib/gsl/oper.rb +68 -0
- data/lib/ool.rb +22 -0
- data/lib/ool/conmin.rb +30 -0
- metadata +224 -0
data/ext/jacobi.c
ADDED
|
@@ -0,0 +1,739 @@
|
|
|
1
|
+
#ifdef HAVE_JACOBI_H
|
|
2
|
+
#include "rb_gsl.h"
|
|
3
|
+
#include "jacobi.h"
|
|
4
|
+
|
|
5
|
+
static VALUE jac_eval3_e(VALUE x, VALUE a, VALUE b,
|
|
6
|
+
int (*f)(double, double, double, gsl_sf_result*))
|
|
7
|
+
{
|
|
8
|
+
gsl_sf_result *result;
|
|
9
|
+
VALUE obj;
|
|
10
|
+
obj = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, result);
|
|
11
|
+
(*f)(NUM2DBL(x), NUM2DBL(a), NUM2DBL(b), result);
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static VALUE jac_eval3(VALUE xx, VALUE aa, VALUE bb, double (*f)(double, double, double))
|
|
16
|
+
{
|
|
17
|
+
gsl_vector *x, *y;
|
|
18
|
+
double a, b;
|
|
19
|
+
size_t i, len;
|
|
20
|
+
VALUE ary;
|
|
21
|
+
#ifdef HAVE_NARRAY_H
|
|
22
|
+
double *ptr1, *ptr2;
|
|
23
|
+
struct NARRAY *na;
|
|
24
|
+
#endif
|
|
25
|
+
a = NUM2DBL(aa);
|
|
26
|
+
b = NUM2DBL(bb);
|
|
27
|
+
if (VECTOR_P(xx)) {
|
|
28
|
+
Data_Get_Struct(xx, gsl_vector, x);
|
|
29
|
+
y = gsl_vector_alloc(x->size);
|
|
30
|
+
for (i = 0; i < x->size; i++) {
|
|
31
|
+
gsl_vector_set(y, i, (*f)(gsl_vector_get(x, i), a, b));
|
|
32
|
+
}
|
|
33
|
+
return Data_Wrap_Struct(VECTOR_ROW_COL(CLASS_OF(xx)), 0, gsl_vector_free, y);
|
|
34
|
+
} else if (TYPE(xx) == T_ARRAY) {
|
|
35
|
+
// len = RARRAY(xx)->len;
|
|
36
|
+
len = RARRAY_LEN(xx);
|
|
37
|
+
ary = rb_ary_new2(len);
|
|
38
|
+
for (i = 0; i < len; i++) {
|
|
39
|
+
rb_ary_store(ary, i, rb_float_new((*f)(NUM2DBL(rb_ary_entry(xx, i)), a, b)));
|
|
40
|
+
}
|
|
41
|
+
return ary;
|
|
42
|
+
#ifdef HAVE_NARRAY_H
|
|
43
|
+
} else if (NA_IsNArray(xx)) {
|
|
44
|
+
GetNArray(xx, na);
|
|
45
|
+
len = na->total;
|
|
46
|
+
ptr1 = (double*) na->ptr;
|
|
47
|
+
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(xx));
|
|
48
|
+
ptr2 = NA_PTR_TYPE(ary, double*);
|
|
49
|
+
for (i = 0; i < len; i++) {
|
|
50
|
+
ptr2[i] = (*f)(ptr1[i], a, b);
|
|
51
|
+
}
|
|
52
|
+
return ary;
|
|
53
|
+
#endif
|
|
54
|
+
} else {
|
|
55
|
+
return rb_float_new((*f)(NUM2DBL(xx), a, b));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static VALUE rb_jac_jacobi_eval(int argc, VALUE *argv,
|
|
60
|
+
double (*f)(double, int, double, double),
|
|
61
|
+
int (*f2)(int, const double*, int, double*, double, double, double*))
|
|
62
|
+
{
|
|
63
|
+
gsl_vector *x, *ws, *y;
|
|
64
|
+
double a, b;
|
|
65
|
+
VALUE ary;
|
|
66
|
+
size_t len, i;
|
|
67
|
+
int n, flag = 0;
|
|
68
|
+
#ifdef HAVE_NARRAY_H
|
|
69
|
+
double *ptr1, *ptr2;
|
|
70
|
+
struct NARRAY *na;
|
|
71
|
+
#endif
|
|
72
|
+
if (argc < 4) rb_raise(rb_eArgError, "Too few arguments (%d for >= 4)", argc);
|
|
73
|
+
if (VECTOR_P(argv[0])) {
|
|
74
|
+
Data_Get_Struct(argv[0], gsl_vector, x);
|
|
75
|
+
y = gsl_vector_alloc(x->size);
|
|
76
|
+
ary = Data_Wrap_Struct(VECTOR_ROW_COL(CLASS_OF(x)), 0, gsl_vector_free, y);
|
|
77
|
+
switch (argc) {
|
|
78
|
+
case 4:
|
|
79
|
+
ws = gsl_vector_alloc(2*x->size);
|
|
80
|
+
flag = 1;
|
|
81
|
+
break;
|
|
82
|
+
case 5:
|
|
83
|
+
CHECK_VECTOR(argv[4]);
|
|
84
|
+
Data_Get_Struct(argv[4], gsl_vector, ws);
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
rb_raise(rb_eArgError, "Too many arguments (%d for 4 or 5)", argc);
|
|
88
|
+
}
|
|
89
|
+
(*f2)(x->size, x->data, FIX2INT(argv[1]), y->data, NUM2DBL(argv[2]), NUM2DBL(argv[3]),
|
|
90
|
+
ws->data);
|
|
91
|
+
if (flag == 1) gsl_vector_free(ws);
|
|
92
|
+
return ary;
|
|
93
|
+
} else if (TYPE(argv[0]) == T_ARRAY) {
|
|
94
|
+
n = FIX2INT(argv[1]);
|
|
95
|
+
a = NUM2DBL(argv[2]);
|
|
96
|
+
b = NUM2DBL(argv[3]);
|
|
97
|
+
// len = RARRAY(argv[0])->len;
|
|
98
|
+
len = RARRAY_LEN(argv[0]);
|
|
99
|
+
ary = rb_ary_new2(len);
|
|
100
|
+
for (i = 0; i < len; i++) {
|
|
101
|
+
rb_ary_store(ary, i, rb_float_new((*f)(NUM2DBL(rb_ary_entry(argv[0], i)), n, a, b)));
|
|
102
|
+
}
|
|
103
|
+
return ary;
|
|
104
|
+
#ifdef HAVE_NARRAY_H
|
|
105
|
+
} else if (NA_IsNArray(argv[0])) {
|
|
106
|
+
GetNArray(argv[0], na);
|
|
107
|
+
len = na->total;
|
|
108
|
+
ptr1 = (double*) na->ptr;
|
|
109
|
+
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv[0]));
|
|
110
|
+
ptr2 = NA_PTR_TYPE(ary, double*);
|
|
111
|
+
n = FIX2INT(argv[1]);
|
|
112
|
+
a = NUM2DBL(argv[2]);
|
|
113
|
+
b = NUM2DBL(argv[3]);
|
|
114
|
+
ws = gsl_vector_alloc(len);
|
|
115
|
+
(*f2)(len, ptr1, n, ptr2, a, b, ws->data);
|
|
116
|
+
gsl_vector_free(ws);
|
|
117
|
+
return ary;
|
|
118
|
+
#endif
|
|
119
|
+
} else {
|
|
120
|
+
return rb_float_new((*f)(NUM2DBL(argv[0]), FIX2INT(argv[1]), NUM2DBL(argv[2]), NUM2DBL(argv[3])));
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
static VALUE rb_jac_jacobi_P0_e(VALUE module, VALUE x, VALUE a, VALUE b)
|
|
125
|
+
{
|
|
126
|
+
return jac_eval3_e(x, a, b, jac_jacobi_P0_e);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
static VALUE rb_jac_jacobi_P0(VALUE module, VALUE x, VALUE a, VALUE b)
|
|
130
|
+
{
|
|
131
|
+
return jac_eval3(x, a, b, jac_jacobi_P0);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
static VALUE rb_jac_jacobi_P1_e(VALUE module, VALUE x, VALUE a, VALUE b)
|
|
135
|
+
{
|
|
136
|
+
return jac_eval3_e(x, a, b, jac_jacobi_P1_e);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
static VALUE rb_jac_jacobi_P1(VALUE module, VALUE x, VALUE a, VALUE b)
|
|
140
|
+
{
|
|
141
|
+
return jac_eval3(x, a, b, jac_jacobi_P1);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
static VALUE rb_jac_jacobi(int argc, VALUE *argv, VALUE module)
|
|
146
|
+
{
|
|
147
|
+
return rb_jac_jacobi_eval(argc, argv, jac_jacobi, jac_jacobi_array);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
static VALUE rb_jac_djacobi_P0_e(VALUE module, VALUE x, VALUE a, VALUE b)
|
|
151
|
+
{
|
|
152
|
+
return jac_eval3_e(x, a, b, jac_djacobi_P0_e);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
static VALUE rb_jac_djacobi_P0(VALUE module, VALUE x, VALUE a, VALUE b)
|
|
156
|
+
{
|
|
157
|
+
return jac_eval3(x, a, b, jac_djacobi_P0);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
static VALUE rb_jac_djacobi_P1_e(VALUE module, VALUE x, VALUE a, VALUE b)
|
|
161
|
+
{
|
|
162
|
+
return jac_eval3_e(x, a, b, jac_djacobi_P1_e);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
static VALUE rb_jac_djacobi_P1(VALUE module, VALUE x, VALUE a, VALUE b)
|
|
166
|
+
{
|
|
167
|
+
return jac_eval3(x, a, b, jac_djacobi_P1);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
static VALUE rb_jac_djacobi(int argc, VALUE *argv, VALUE module)
|
|
171
|
+
{
|
|
172
|
+
return rb_jac_jacobi_eval(argc, argv, jac_djacobi, jac_djacobi_array);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
static VALUE rb_jac_zeros_eval(int argc, VALUE *argv, VALUE module,
|
|
176
|
+
int (*f)(double*, int, double, double))
|
|
177
|
+
{
|
|
178
|
+
gsl_vector *x;
|
|
179
|
+
int m, status;
|
|
180
|
+
double a, b;
|
|
181
|
+
VALUE xx;
|
|
182
|
+
switch (argc) {
|
|
183
|
+
case 3:
|
|
184
|
+
if (FIXNUM_P(argv[0])) {
|
|
185
|
+
m = FIX2INT(argv[0]);
|
|
186
|
+
a = NUM2DBL(argv[1]);
|
|
187
|
+
b = NUM2DBL(argv[2]);
|
|
188
|
+
x = gsl_vector_alloc(m);
|
|
189
|
+
xx = Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, x);
|
|
190
|
+
} else if (VECTOR_P(argv[0])) {
|
|
191
|
+
Data_Get_Struct(argv[0], gsl_vector, x);
|
|
192
|
+
m = x->size;
|
|
193
|
+
a = NUM2DBL(argv[1]);
|
|
194
|
+
b = NUM2DBL(argv[2]);
|
|
195
|
+
xx = argv[0];
|
|
196
|
+
} else {
|
|
197
|
+
rb_raise(rb_eTypeError, "Wrong argument type %s (Fixnum or GSL::Vector expected)",
|
|
198
|
+
rb_class2name(CLASS_OF(argv[0])));
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
case 4:
|
|
202
|
+
CHECK_VECTOR(argv[0]);
|
|
203
|
+
Data_Get_Struct(argv[0], gsl_vector, x);
|
|
204
|
+
m = FIX2INT(argv[1]);
|
|
205
|
+
a = NUM2DBL(argv[2]);
|
|
206
|
+
b = NUM2DBL(argv[3]);
|
|
207
|
+
break;
|
|
208
|
+
default:
|
|
209
|
+
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 3 or 4)", argc);
|
|
210
|
+
}
|
|
211
|
+
status = (*f)(x->data, m, a, b);
|
|
212
|
+
if (status != GSL_SUCCESS)
|
|
213
|
+
rb_raise(rb_eRuntimeError, "Something wrong. (error code %d)", status);
|
|
214
|
+
return xx;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
static VALUE rb_jac_jacobi_zeros(int argc, VALUE *argv, VALUE module)
|
|
218
|
+
{
|
|
219
|
+
return rb_jac_zeros_eval(argc, argv, module, jac_jacobi_zeros);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
static void jac_define_const(VALUE module)
|
|
223
|
+
{
|
|
224
|
+
rb_define_const(module, "GJ", INT2FIX(JAC_GJ));
|
|
225
|
+
rb_define_const(module, "GLJ", INT2FIX(JAC_GLJ));
|
|
226
|
+
rb_define_const(module, "GRJM", INT2FIX(JAC_GRJM));
|
|
227
|
+
rb_define_const(module, "GRJP", INT2FIX(JAC_GRJP));
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
static VALUE rb_jac_quadrature_alloc(VALUE klass, VALUE vQ)
|
|
231
|
+
{
|
|
232
|
+
jac_quadrature *q;
|
|
233
|
+
|
|
234
|
+
q = jac_quadrature_alloc(FIX2INT(vQ));
|
|
235
|
+
|
|
236
|
+
return Data_Wrap_Struct(klass, 0, jac_quadrature_free, q);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
static VALUE rb_jac_quadrature_Q(VALUE obj)
|
|
240
|
+
{
|
|
241
|
+
jac_quadrature *q;
|
|
242
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
243
|
+
return INT2FIX(q->Q);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
static VALUE rb_jac_quadrature_type(VALUE obj)
|
|
247
|
+
{
|
|
248
|
+
jac_quadrature *q;
|
|
249
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
250
|
+
return INT2FIX((int) q->type);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
static VALUE rb_jac_quadrature_alpha(VALUE obj)
|
|
254
|
+
{
|
|
255
|
+
jac_quadrature *q;
|
|
256
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
257
|
+
return NUM2DBL(q->alpha);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
static VALUE rb_jac_quadrature_beta(VALUE obj)
|
|
261
|
+
{
|
|
262
|
+
jac_quadrature *q;
|
|
263
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
264
|
+
return NUM2DBL(q->beta);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
static VALUE rb_jac_quadrature_x(VALUE obj)
|
|
268
|
+
{
|
|
269
|
+
jac_quadrature *q;
|
|
270
|
+
gsl_vector_view *v;
|
|
271
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
272
|
+
v = gsl_vector_view_alloc();
|
|
273
|
+
v->vector.data = q->x;
|
|
274
|
+
v->vector.size = q->Q;
|
|
275
|
+
v->vector.stride = 1;
|
|
276
|
+
return Data_Wrap_Struct(cgsl_vector_view, 0, gsl_vector_view_free, v);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
static VALUE rb_jac_quadrature_w(VALUE obj)
|
|
280
|
+
{
|
|
281
|
+
jac_quadrature *q;
|
|
282
|
+
gsl_vector_view *v;
|
|
283
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
284
|
+
v = gsl_vector_view_alloc();
|
|
285
|
+
v->vector.data = q->w;
|
|
286
|
+
v->vector.size = q->Q;
|
|
287
|
+
v->vector.stride = 1;
|
|
288
|
+
return Data_Wrap_Struct(cgsl_vector_view, 0, gsl_vector_view_free, v);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
static VALUE rb_jac_quadrature_D(VALUE obj)
|
|
292
|
+
{
|
|
293
|
+
jac_quadrature *q;
|
|
294
|
+
gsl_vector_view *v;
|
|
295
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
296
|
+
v = gsl_vector_view_alloc();
|
|
297
|
+
v->vector.data = q->D;
|
|
298
|
+
v->vector.size = q->Q;
|
|
299
|
+
v->vector.stride = 1;
|
|
300
|
+
return Data_Wrap_Struct(cgsl_vector_view, 0, gsl_vector_view_free, v);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
static VALUE rb_jac_quadrature_xp(VALUE obj)
|
|
304
|
+
{
|
|
305
|
+
jac_quadrature *q;
|
|
306
|
+
gsl_vector_view *v;
|
|
307
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
308
|
+
v = gsl_vector_view_alloc();
|
|
309
|
+
v->vector.data = q->w;
|
|
310
|
+
v->vector.size = q->np;
|
|
311
|
+
v->vector.stride = 1;
|
|
312
|
+
return Data_Wrap_Struct(cgsl_vector_view, 0, gsl_vector_view_free, v);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
static VALUE rb_jac_interpmat_alloc(int argc, VALUE *argv, VALUE obj)
|
|
316
|
+
{
|
|
317
|
+
int err;
|
|
318
|
+
jac_quadrature *q;
|
|
319
|
+
gsl_vector *xp;
|
|
320
|
+
int np;
|
|
321
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
322
|
+
switch (argc) {
|
|
323
|
+
case 1:
|
|
324
|
+
CHECK_VECTOR(argv[0]);
|
|
325
|
+
Data_Get_Struct(argv[0], gsl_vector, xp);
|
|
326
|
+
np = xp->size;
|
|
327
|
+
break;
|
|
328
|
+
case 2:
|
|
329
|
+
CHECK_VECTOR(argv[1]);
|
|
330
|
+
Data_Get_Struct(argv[1], gsl_vector, xp);
|
|
331
|
+
np = FIX2INT(argv[0]);
|
|
332
|
+
break;
|
|
333
|
+
default:
|
|
334
|
+
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 1 or 2)", argc);
|
|
335
|
+
}
|
|
336
|
+
err = jac_interpmat_alloc(q, np, xp->data);
|
|
337
|
+
return FIX2INT(err);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
static VALUE rb_jac_interpmat_free(VALUE obj)
|
|
341
|
+
{
|
|
342
|
+
jac_quadrature *q;
|
|
343
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
344
|
+
jac_interpmat_free(q);
|
|
345
|
+
return Qtrue;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
static VALUE rb_jac_quadrature_zwd(int argc, VALUE *argv, VALUE obj)
|
|
349
|
+
{
|
|
350
|
+
jac_quadrature *q;
|
|
351
|
+
gsl_vector *ws;
|
|
352
|
+
int flag = 0, type, status;
|
|
353
|
+
double a, b;
|
|
354
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
355
|
+
switch (argc) {
|
|
356
|
+
case 3:
|
|
357
|
+
type = FIX2INT(argv[0]);
|
|
358
|
+
a = NUM2DBL(argv[1]);
|
|
359
|
+
b = NUM2DBL(argv[2]);
|
|
360
|
+
ws = gsl_vector_alloc(q->Q);
|
|
361
|
+
flag = 1;
|
|
362
|
+
break;
|
|
363
|
+
case 4:
|
|
364
|
+
type = FIX2INT(argv[0]);
|
|
365
|
+
a = NUM2DBL(argv[1]);
|
|
366
|
+
b = NUM2DBL(argv[2]);
|
|
367
|
+
Data_Get_Struct(argv[3], gsl_vector, ws);
|
|
368
|
+
break;
|
|
369
|
+
default:
|
|
370
|
+
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 3 or 4)", argc);
|
|
371
|
+
}
|
|
372
|
+
status = jac_quadrature_zwd(q, type, a, b, ws->data);
|
|
373
|
+
if (flag == 1) gsl_vector_free(ws);
|
|
374
|
+
return INT2FIX(status);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
static VALUE rb_jac_integrate(VALUE obj, VALUE ff)
|
|
378
|
+
{
|
|
379
|
+
jac_quadrature *q;
|
|
380
|
+
gsl_vector *f;
|
|
381
|
+
CHECK_VECTOR(ff);
|
|
382
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
383
|
+
Data_Get_Struct(ff, gsl_vector, f);
|
|
384
|
+
return rb_float_new(jac_integrate(q, f->data));
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
static VALUE rb_jac_interpolate(int argc, VALUE *argv, VALUE obj)
|
|
388
|
+
{
|
|
389
|
+
jac_quadrature *q;
|
|
390
|
+
gsl_vector *f, *fout;
|
|
391
|
+
VALUE vfout;
|
|
392
|
+
switch (argc) {
|
|
393
|
+
case 1:
|
|
394
|
+
CHECK_VECTOR(argv[0]);
|
|
395
|
+
Data_Get_Struct(argv[0], gsl_vector, f);
|
|
396
|
+
fout = gsl_vector_alloc(f->size);
|
|
397
|
+
vfout = Data_Wrap_Struct(VECTOR_ROW_COL(CLASS_OF(argv[0])), 0, gsl_vector_free, fout);
|
|
398
|
+
break;
|
|
399
|
+
case 2:
|
|
400
|
+
CHECK_VECTOR(argv[0]);
|
|
401
|
+
Data_Get_Struct(argv[0], gsl_vector, f);
|
|
402
|
+
CHECK_VECTOR(argv[1]);
|
|
403
|
+
Data_Get_Struct(argv[1], gsl_vector, fout);
|
|
404
|
+
vfout = argv[1];
|
|
405
|
+
break;
|
|
406
|
+
default:
|
|
407
|
+
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 1 or 2)", argc);
|
|
408
|
+
}
|
|
409
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
410
|
+
jac_interpolate(q, f->data, fout->data);
|
|
411
|
+
return vfout;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
static VALUE rb_jac_differentiate(int argc, VALUE *argv, VALUE obj)
|
|
415
|
+
{
|
|
416
|
+
jac_quadrature *q;
|
|
417
|
+
gsl_vector *f, *fout;
|
|
418
|
+
VALUE vfout;
|
|
419
|
+
switch (argc) {
|
|
420
|
+
case 1:
|
|
421
|
+
CHECK_VECTOR(argv[0]);
|
|
422
|
+
Data_Get_Struct(argv[0], gsl_vector, f);
|
|
423
|
+
fout = gsl_vector_alloc(f->size);
|
|
424
|
+
vfout = Data_Wrap_Struct(VECTOR_ROW_COL(CLASS_OF(argv[0])), 0, gsl_vector_free, fout);
|
|
425
|
+
break;
|
|
426
|
+
case 2:
|
|
427
|
+
CHECK_VECTOR(argv[0]);
|
|
428
|
+
Data_Get_Struct(argv[0], gsl_vector, f);
|
|
429
|
+
CHECK_VECTOR(argv[1]);
|
|
430
|
+
Data_Get_Struct(argv[1], gsl_vector, fout);
|
|
431
|
+
vfout = argv[1];
|
|
432
|
+
break;
|
|
433
|
+
default:
|
|
434
|
+
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 1 or 2)", argc);
|
|
435
|
+
}
|
|
436
|
+
Data_Get_Struct(obj, jac_quadrature, q);
|
|
437
|
+
jac_differentiate(q, f->data, fout->data);
|
|
438
|
+
return vfout;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/*****/
|
|
442
|
+
static VALUE rb_jac_qeval(int argc, VALUE *argv,
|
|
443
|
+
int (*f)(double*, double*, const int, double, double, double*))
|
|
444
|
+
{
|
|
445
|
+
gsl_vector *z, *D, *ws;
|
|
446
|
+
int Q;
|
|
447
|
+
int flag = 0, status;
|
|
448
|
+
double alpha, beta;
|
|
449
|
+
VALUE vD;
|
|
450
|
+
if (argc < 3) rb_raise(rb_eArgError, "Too few arguments (%d for >= 3)", argc);
|
|
451
|
+
CHECK_VECTOR(argv[0]);
|
|
452
|
+
Data_Get_Struct(argv[0], gsl_vector, z);
|
|
453
|
+
argc -= 1;
|
|
454
|
+
argv += 1;
|
|
455
|
+
if (VECTOR_P(argv[argc-1])) {
|
|
456
|
+
Data_Get_Struct(argv[argc-1], gsl_vector, ws);
|
|
457
|
+
argc -= 1;
|
|
458
|
+
} else {
|
|
459
|
+
ws = gsl_vector_alloc(z->size);
|
|
460
|
+
flag = 1;
|
|
461
|
+
}
|
|
462
|
+
switch (argc) {
|
|
463
|
+
case 2:
|
|
464
|
+
Q = z->size;
|
|
465
|
+
D = gsl_vector_alloc(Q*Q);
|
|
466
|
+
alpha = NUM2DBL(argv[0]);
|
|
467
|
+
beta = NUM2DBL(argv[1]);
|
|
468
|
+
vD = Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, D);
|
|
469
|
+
break;
|
|
470
|
+
case 4:
|
|
471
|
+
Data_Get_Struct(argv[0], gsl_vector, D);
|
|
472
|
+
vD = argv[0];
|
|
473
|
+
Q = FIX2INT(argv[1]);
|
|
474
|
+
alpha = NUM2DBL(argv[2]);
|
|
475
|
+
beta = NUM2DBL(argv[3]);
|
|
476
|
+
break;
|
|
477
|
+
case 3:
|
|
478
|
+
if (VECTOR_P(argv[0])) {
|
|
479
|
+
Q = z->size;
|
|
480
|
+
Data_Get_Struct(argv[0], gsl_vector, D);
|
|
481
|
+
vD = argv[0];
|
|
482
|
+
} else {
|
|
483
|
+
Q = FIX2INT(argv[0]);
|
|
484
|
+
D = gsl_vector_alloc(Q*Q);
|
|
485
|
+
vD = Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, D);
|
|
486
|
+
}
|
|
487
|
+
alpha = NUM2DBL(argv[1]);
|
|
488
|
+
beta = NUM2DBL(argv[2]);
|
|
489
|
+
break;
|
|
490
|
+
default:
|
|
491
|
+
rb_raise(rb_eArgError, "Wrong number of arguments.");
|
|
492
|
+
}
|
|
493
|
+
status = (*f)(z->data, D->data, Q, alpha, beta, ws->data);
|
|
494
|
+
if (flag == 1) gsl_vector_free(ws);
|
|
495
|
+
if (status != GSL_SUCCESS) rb_raise(rb_eRuntimeError, "Something wrong.");
|
|
496
|
+
return vD;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
static VALUE rb_jac_diffmat_gj(int argc, VALUE *argv, VALUE module)
|
|
500
|
+
{
|
|
501
|
+
return rb_jac_qeval(argc, argv, jac_diffmat_gj);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
static VALUE rb_jac_diffmat_glj(int argc, VALUE *argv, VALUE module)
|
|
505
|
+
{
|
|
506
|
+
return rb_jac_qeval(argc, argv, jac_diffmat_glj);
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
static VALUE rb_jac_diffmat_grjm(int argc, VALUE *argv, VALUE module)
|
|
510
|
+
{
|
|
511
|
+
return rb_jac_qeval(argc, argv, jac_diffmat_grjm);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
static VALUE rb_jac_diffmat_grjp(int argc, VALUE *argv, VALUE module)
|
|
515
|
+
{
|
|
516
|
+
return rb_jac_qeval(argc, argv, jac_diffmat_grjp);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
static VALUE rb_jac_weights_gj(int argc, VALUE *argv, VALUE module)
|
|
520
|
+
{
|
|
521
|
+
return rb_jac_qeval(argc, argv, jac_weights_gj);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
static VALUE rb_jac_weights_glj(int argc, VALUE *argv, VALUE module)
|
|
525
|
+
{
|
|
526
|
+
return rb_jac_qeval(argc, argv, jac_weights_glj);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
static VALUE rb_jac_weights_grjm(int argc, VALUE *argv, VALUE module)
|
|
530
|
+
{
|
|
531
|
+
return rb_jac_qeval(argc, argv, jac_weights_grjm);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
static VALUE rb_jac_weights_grjp(int argc, VALUE *argv, VALUE module)
|
|
535
|
+
{
|
|
536
|
+
return rb_jac_qeval(argc, argv, jac_weights_grjp);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
static VALUE rb_jac_zeros_gj(int argc, VALUE *argv, VALUE module)
|
|
540
|
+
{
|
|
541
|
+
return rb_jac_zeros_eval(argc, argv, module, jac_zeros_gj);
|
|
542
|
+
}
|
|
543
|
+
static VALUE rb_jac_zeros_glj(int argc, VALUE *argv, VALUE module)
|
|
544
|
+
{
|
|
545
|
+
return rb_jac_zeros_eval(argc, argv, module, jac_zeros_glj);
|
|
546
|
+
}
|
|
547
|
+
static VALUE rb_jac_zeros_grjm(int argc, VALUE *argv, VALUE module)
|
|
548
|
+
{
|
|
549
|
+
return rb_jac_zeros_eval(argc, argv, module, jac_zeros_grjm);
|
|
550
|
+
}
|
|
551
|
+
static VALUE rb_jac_zeros_grjp(int argc, VALUE *argv, VALUE module)
|
|
552
|
+
{
|
|
553
|
+
return rb_jac_zeros_eval(argc, argv, module, jac_zeros_grjp);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
static VALUE rb_jac_lagrange_eval(int argc, VALUE *argv,
|
|
557
|
+
double (*f)(int, double, int, double*, double, double))
|
|
558
|
+
{
|
|
559
|
+
gsl_vector *z;
|
|
560
|
+
int i, Q;
|
|
561
|
+
double alpha, beta, zz;
|
|
562
|
+
|
|
563
|
+
switch (argc) {
|
|
564
|
+
case 5:
|
|
565
|
+
i = FIX2INT(argv[0]);
|
|
566
|
+
zz = NUM2DBL(argv[1]);
|
|
567
|
+
CHECK_VECTOR(argv[2]);
|
|
568
|
+
Data_Get_Struct(argv[2], gsl_vector, z);
|
|
569
|
+
Q = z->size;
|
|
570
|
+
alpha = NUM2DBL(argv[3]);
|
|
571
|
+
beta = NUM2DBL(argv[4]);
|
|
572
|
+
break;
|
|
573
|
+
case 6:
|
|
574
|
+
i = FIX2INT(argv[0]);
|
|
575
|
+
zz = NUM2DBL(argv[1]);
|
|
576
|
+
Q = FIX2INT(argv[2]);
|
|
577
|
+
CHECK_VECTOR(argv[3]);
|
|
578
|
+
Data_Get_Struct(argv[3], gsl_vector, z);
|
|
579
|
+
alpha = NUM2DBL(argv[4]);
|
|
580
|
+
beta = NUM2DBL(argv[5]);
|
|
581
|
+
break;
|
|
582
|
+
default:
|
|
583
|
+
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 5 or 6)", argc);
|
|
584
|
+
}
|
|
585
|
+
return rb_float_new((*f)(i, zz, Q, z->data, alpha, beta));
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
static VALUE rb_jac_lagrange_gj(int argc, VALUE *argv, VALUE module)
|
|
589
|
+
{
|
|
590
|
+
return rb_jac_lagrange_eval(argc, argv, jac_lagrange_gj);
|
|
591
|
+
}
|
|
592
|
+
static VALUE rb_jac_lagrange_glj(int argc, VALUE *argv, VALUE module)
|
|
593
|
+
{
|
|
594
|
+
return rb_jac_lagrange_eval(argc, argv, jac_lagrange_glj);
|
|
595
|
+
}
|
|
596
|
+
static VALUE rb_jac_lagrange_grjm(int argc, VALUE *argv, VALUE module)
|
|
597
|
+
{
|
|
598
|
+
return rb_jac_lagrange_eval(argc, argv, jac_lagrange_grjm);
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
static VALUE rb_jac_lagrange_grjp(int argc, VALUE *argv, VALUE module)
|
|
602
|
+
{
|
|
603
|
+
return rb_jac_lagrange_eval(argc, argv, jac_lagrange_grjp);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
static VALUE rb_jac_interpmat_eval(int argc, VALUE *argv,
|
|
607
|
+
int (*f) (double*, double*, int, double*, int, double, double))
|
|
608
|
+
{
|
|
609
|
+
gsl_vector *imat, *zp, *z;
|
|
610
|
+
double alpha, beta;
|
|
611
|
+
int np, Q, status;
|
|
612
|
+
VALUE vimat;
|
|
613
|
+
|
|
614
|
+
if (argc < 3) rb_raise(rb_eArgError, "Too few arguments (%d for >= 3)", argc);
|
|
615
|
+
|
|
616
|
+
CHECK_VECTOR(argv[0]);
|
|
617
|
+
if (VECTOR_P(argv[1])) {
|
|
618
|
+
Data_Get_Struct(argv[0], gsl_vector, imat);
|
|
619
|
+
Data_Get_Struct(argv[1], gsl_vector, zp);
|
|
620
|
+
vimat = argv[0];
|
|
621
|
+
if (FIXNUM_P(argv[2])) np = FIX2INT(argv[2]);
|
|
622
|
+
argc -= 3;
|
|
623
|
+
argv += 3;
|
|
624
|
+
} else {
|
|
625
|
+
Data_Get_Struct(argv[0], gsl_vector, zp);
|
|
626
|
+
if (FIXNUM_P(argv[1])) np = FIX2INT(argv[1]);
|
|
627
|
+
else np = zp->size;
|
|
628
|
+
imat = gsl_vector_alloc(np);
|
|
629
|
+
vimat = Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, imat);
|
|
630
|
+
argc -= 2;
|
|
631
|
+
argv += 2;
|
|
632
|
+
}
|
|
633
|
+
CHECK_VECTOR(argv[0]);
|
|
634
|
+
Data_Get_Struct(argv[0], gsl_vector, z);
|
|
635
|
+
argc -= 1;
|
|
636
|
+
argv += 1;
|
|
637
|
+
switch (argc) {
|
|
638
|
+
case 3:
|
|
639
|
+
Q = FIX2INT(argv[0]);
|
|
640
|
+
alpha = NUM2DBL(argv[1]);
|
|
641
|
+
beta = NUM2DBL(argv[2]);
|
|
642
|
+
break;
|
|
643
|
+
case 2:
|
|
644
|
+
Q = z->size;
|
|
645
|
+
alpha = NUM2DBL(argv[0]);
|
|
646
|
+
beta = NUM2DBL(argv[1]);
|
|
647
|
+
break;
|
|
648
|
+
default:
|
|
649
|
+
rb_raise(rb_eArgError, "Wrong number of arguments.");
|
|
650
|
+
}
|
|
651
|
+
(*f)(imat->data, zp->data, np, z->data, Q, alpha, beta);
|
|
652
|
+
if (status != GSL_SUCCESS) rb_raise(rb_eRuntimeError, "Some error.");
|
|
653
|
+
return vimat;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
static VALUE rb_jac_interpmat_gj(int argc, VALUE *argv, VALUE module)
|
|
657
|
+
{
|
|
658
|
+
return rb_jac_interpmat_eval(argc, argv, jac_interpmat_gj);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
static VALUE rb_jac_interpmat_glj(int argc, VALUE *argv, VALUE module)
|
|
662
|
+
{
|
|
663
|
+
return rb_jac_interpmat_eval(argc, argv, jac_interpmat_glj);
|
|
664
|
+
}
|
|
665
|
+
static VALUE rb_jac_interpmat_grjm(int argc, VALUE *argv, VALUE module)
|
|
666
|
+
{
|
|
667
|
+
return rb_jac_interpmat_eval(argc, argv, jac_interpmat_grjm);
|
|
668
|
+
}
|
|
669
|
+
static VALUE rb_jac_interpmat_grjp(int argc, VALUE *argv, VALUE module)
|
|
670
|
+
{
|
|
671
|
+
return rb_jac_interpmat_eval(argc, argv, jac_interpmat_grjp);
|
|
672
|
+
}
|
|
673
|
+
void Init_jacobi(VALUE module)
|
|
674
|
+
{
|
|
675
|
+
VALUE mjac, cjacq;
|
|
676
|
+
|
|
677
|
+
mjac = rb_define_module("Jac");
|
|
678
|
+
jac_define_const(mjac);
|
|
679
|
+
cjacq = rb_define_class_under(mjac, "Quadrature", cGSL_Object);
|
|
680
|
+
|
|
681
|
+
rb_define_module_function(mjac, "jacobi_P0_e", rb_jac_jacobi_P0_e, 3);
|
|
682
|
+
rb_define_module_function(mjac, "jacobi_P0", rb_jac_jacobi_P0, 3);
|
|
683
|
+
rb_define_module_function(mjac, "jacobi_P1_e", rb_jac_jacobi_P1_e, 3);
|
|
684
|
+
rb_define_module_function(mjac, "jacobi_P1", rb_jac_jacobi_P1, 3);
|
|
685
|
+
rb_define_module_function(mjac, "jacobi", rb_jac_jacobi, -1);
|
|
686
|
+
rb_define_module_function(mjac, "djacobi_P0_e", rb_jac_djacobi_P0_e, 3);
|
|
687
|
+
rb_define_module_function(mjac, "djacobi_P0", rb_jac_djacobi_P0, 3);
|
|
688
|
+
rb_define_module_function(mjac, "djacobi_P1_e", rb_jac_djacobi_P1_e, 3);
|
|
689
|
+
rb_define_module_function(mjac, "djacobi_P1", rb_jac_djacobi_P1, 3);
|
|
690
|
+
rb_define_module_function(mjac, "djacobi", rb_jac_djacobi, 4);
|
|
691
|
+
|
|
692
|
+
rb_define_module_function(mjac, "jacobi_zeros", rb_jac_jacobi_zeros, -1);
|
|
693
|
+
|
|
694
|
+
/*****/
|
|
695
|
+
rb_define_singleton_method(cjacq, "alloc", rb_jac_quadrature_alloc, 1);
|
|
696
|
+
rb_define_method(cjacq, "Q", rb_jac_quadrature_Q, 0);
|
|
697
|
+
rb_define_method(cjacq, "type", rb_jac_quadrature_type, 0);
|
|
698
|
+
rb_define_method(cjacq, "alpha", rb_jac_quadrature_alpha, 0);
|
|
699
|
+
rb_define_method(cjacq, "beta", rb_jac_quadrature_beta, 0);
|
|
700
|
+
rb_define_method(cjacq, "x", rb_jac_quadrature_x, 0);
|
|
701
|
+
rb_define_method(cjacq, "w", rb_jac_quadrature_w, 0);
|
|
702
|
+
rb_define_method(cjacq, "D", rb_jac_quadrature_D, 0);
|
|
703
|
+
rb_define_method(cjacq, "xp", rb_jac_quadrature_xp, 0);
|
|
704
|
+
rb_define_method(cjacq, "interpmat_alloc", rb_jac_interpmat_alloc, -1);
|
|
705
|
+
rb_define_method(cjacq, "interpmat_free", rb_jac_interpmat_free, 0);
|
|
706
|
+
rb_define_method(cjacq, "zwd", rb_jac_quadrature_zwd, -1);
|
|
707
|
+
rb_define_method(cjacq, "integrate", rb_jac_integrate, 1);
|
|
708
|
+
rb_define_method(cjacq, "interpolate", rb_jac_interpolate, -1);
|
|
709
|
+
rb_define_method(cjacq, "differentiate", rb_jac_differentiate, -1);
|
|
710
|
+
/*****/
|
|
711
|
+
rb_define_module_function(mjac, "diffmat_gj", rb_jac_diffmat_gj, -1);
|
|
712
|
+
rb_define_module_function(mjac, "diffmat_glj", rb_jac_diffmat_glj, -1);
|
|
713
|
+
rb_define_module_function(mjac, "diffmat_grjm", rb_jac_diffmat_grjm, -1);
|
|
714
|
+
rb_define_module_function(mjac, "diffmat_grjp", rb_jac_diffmat_grjp, -1);
|
|
715
|
+
|
|
716
|
+
rb_define_module_function(mjac, "weights_gj", rb_jac_weights_gj, -1);
|
|
717
|
+
rb_define_module_function(mjac, "weights_glj", rb_jac_weights_glj, -1);
|
|
718
|
+
rb_define_module_function(mjac, "weights_grjm", rb_jac_weights_grjm, -1);
|
|
719
|
+
rb_define_module_function(mjac, "weights_grjp", rb_jac_weights_grjp, -1);
|
|
720
|
+
|
|
721
|
+
rb_define_module_function(mjac, "zeros_gj", rb_jac_zeros_gj, -1);
|
|
722
|
+
rb_define_module_function(mjac, "zeros_glj", rb_jac_zeros_glj, -1);
|
|
723
|
+
rb_define_module_function(mjac, "zeros_grjm", rb_jac_zeros_grjm, -1);
|
|
724
|
+
rb_define_module_function(mjac, "zeros_grjp", rb_jac_zeros_grjp, -1);
|
|
725
|
+
|
|
726
|
+
rb_define_module_function(mjac, "lagrange_gj", rb_jac_lagrange_gj, -1);
|
|
727
|
+
rb_define_module_function(mjac, "lagrange_glj", rb_jac_lagrange_glj, -1);
|
|
728
|
+
rb_define_module_function(mjac, "lagrange_grjm", rb_jac_lagrange_grjm, -1);
|
|
729
|
+
rb_define_module_function(mjac, "lagrange_grjp", rb_jac_lagrange_grjp, -1);
|
|
730
|
+
|
|
731
|
+
rb_define_module_function(mjac, "interpmat_gj", rb_jac_interpmat_gj, -1);
|
|
732
|
+
rb_define_module_function(mjac, "interpmat_glj", rb_jac_interpmat_glj, -1);
|
|
733
|
+
rb_define_module_function(mjac, "interpmat_grjm", rb_jac_interpmat_grjm, -1);
|
|
734
|
+
rb_define_module_function(mjac, "interpmat_grjp", rb_jac_interpmat_grjp, -1);
|
|
735
|
+
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
#endif
|
|
739
|
+
|