carray-gsl 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Rakefile +17 -0
- data/carray-gsl.gemspec +5 -4
- data/examples/lu_decomp.rb +42 -0
- data/examples/test_graph.rb +6 -0
- data/examples/test_integ.rb +26 -0
- data/{carray_gsl.c → ext/carray_gsl.c} +4 -4
- data/{carray_mathfunc_gsl.c → ext/carray_mathfunc_gsl.c} +92 -45
- data/{extconf.rb → ext/extconf.rb} +1 -1
- data/lib/carray-gsl.rb +4 -2
- data/lib/{math/gsl.rb → carray-gsl/core.rb} +54 -57
- metadata +55 -15
- data/lib/autoload/autoload_math_gsl.rb +0 -5
- data/lib/math/interp/adapter_gsl_spline.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '0427847b4968614e038e8396dde48bba089a7e65a47b0dc82bf6417cf6af9974'
|
4
|
+
data.tar.gz: 53a89928adbebaffa9b3e2b5f0f3c2ee29acd811d4ac086a96ab3399ffe45f0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ab534743740183c20c0b94ffa053ebcac0738e74f9c43ee02da98ef5c40009d1b5bd1dfb57edc70446cc7b7838135aaf872453c90da59ea7de42a416c366b92
|
7
|
+
data.tar.gz: 82c77eadd821c234d1a568d4f3227c4eb0bfdd189417aaa3784e9333737b4a90339fec6ac8844ea4586de5b50c319a89ca4dcc1c650c07795c9165bf1770efa9
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#
|
2
|
+
#
|
3
|
+
#
|
4
|
+
|
5
|
+
GEMSPEC = "carray-gsl.gemspec"
|
6
|
+
|
7
|
+
task :install do
|
8
|
+
spec = eval File.read(GEMSPEC)
|
9
|
+
system %{
|
10
|
+
gem build #{GEMSPEC}; gem install #{spec.full_name}.gem
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'rspec/core/rake_task'
|
15
|
+
RSpec::Core::RakeTask.new
|
16
|
+
|
17
|
+
|
data/carray-gsl.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
Gem::Specification::new do |s|
|
3
|
-
version = "1.
|
3
|
+
version = "1.1.0"
|
4
4
|
|
5
5
|
files = Dir.glob("**/*") - [
|
6
6
|
Dir.glob("carray*.gem"),
|
@@ -17,7 +17,8 @@ Gem::Specification::new do |s|
|
|
17
17
|
s.email = ""
|
18
18
|
s.homepage = 'https://github.com/himotoyoshi/carray-gsl'
|
19
19
|
s.files = files
|
20
|
-
s.extensions = [ "extconf.rb" ]
|
21
|
-
s.
|
22
|
-
s.
|
20
|
+
s.extensions = [ "ext/extconf.rb" ]
|
21
|
+
s.required_ruby_version = ">= 2.4.0"
|
22
|
+
s.add_runtime_dependency 'carray', '~> 1.4.0', '>=1.4.0'
|
23
|
+
s.add_runtime_dependency 'gsl', '~> 2.1.0.3', '>=2.1.0.3'
|
23
24
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "carray-gsl"
|
2
|
+
|
3
|
+
class CArray
|
4
|
+
|
5
|
+
def mat_to_mat
|
6
|
+
Matrix[*self]
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
data = [
|
12
|
+
[1, 2],
|
13
|
+
[3, 4]
|
14
|
+
]
|
15
|
+
|
16
|
+
mat = CA_DOUBLE(data)
|
17
|
+
|
18
|
+
out = mat.lu_decomp
|
19
|
+
|
20
|
+
p out
|
21
|
+
|
22
|
+
data = [
|
23
|
+
[1, 0],
|
24
|
+
[1.0/3.0,1]
|
25
|
+
]
|
26
|
+
l = CA_DOUBLE(data).gm
|
27
|
+
|
28
|
+
data = [
|
29
|
+
[3, 4],
|
30
|
+
[0,2.0/3.0]
|
31
|
+
]
|
32
|
+
u = CA_DOUBLE(data).gm
|
33
|
+
|
34
|
+
p out.upper
|
35
|
+
p out.lower
|
36
|
+
|
37
|
+
p l*u
|
38
|
+
|
39
|
+
__END__
|
40
|
+
require 'matrix'
|
41
|
+
a = Matrix[[1, 2], [3, 4]]
|
42
|
+
p a.lup.solve([3,-1])
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "carray-gsl"
|
2
|
+
|
3
|
+
f = GSL::Function.alloc { |x| Math::sin(x)/x }
|
4
|
+
p f.qag([0, 1])
|
5
|
+
|
6
|
+
include GSL
|
7
|
+
|
8
|
+
f = GSL::Function.alloc { |x|
|
9
|
+
pow(x,1.5)
|
10
|
+
}
|
11
|
+
|
12
|
+
printf ("f(x) = x^(3/2)\n");
|
13
|
+
|
14
|
+
x = 2.0
|
15
|
+
h = 1e-8
|
16
|
+
result, abserr = f.deriv_central(x, h)
|
17
|
+
printf("x = 2.0\n");
|
18
|
+
printf("f'(x) = %.12f +/- %.12f\n", result, abserr);
|
19
|
+
printf("exact = %.12f\n\n", 1.5 * Math::sqrt(2.0));
|
20
|
+
|
21
|
+
x = 0.0
|
22
|
+
result, abserr = Deriv.forward(f, x, h) # equivalent to f.deriv_forward(x, h)
|
23
|
+
printf("x = 0.0\n");
|
24
|
+
printf("f'(x) = %.10f +/- %.10f\n", result, abserr);
|
25
|
+
printf("exact = %.10f\n", 0.0);
|
26
|
+
|
@@ -26,7 +26,7 @@ rb_gsl_vector_ca (VALUE self)
|
|
26
26
|
volatile VALUE obj, block;
|
27
27
|
gsl_vector *v;
|
28
28
|
int data_type;
|
29
|
-
|
29
|
+
ca_size_t dim[2], dim0;
|
30
30
|
|
31
31
|
Data_Get_Struct(self, gsl_vector, v);
|
32
32
|
|
@@ -44,7 +44,7 @@ rb_gsl_vector_ca (VALUE self)
|
|
44
44
|
}
|
45
45
|
|
46
46
|
if ( v->stride > 1 ) {
|
47
|
-
|
47
|
+
ca_size_t start0, step0, count0;
|
48
48
|
if ( rb_obj_is_kind_of(self, rb_cVectorCol) ||
|
49
49
|
rb_obj_is_kind_of(self, rb_cVectorIntCol) ||
|
50
50
|
rb_obj_is_kind_of(self, rb_cVectorComplexCol) ) {
|
@@ -168,7 +168,7 @@ rb_gsl_matrix_ca (VALUE self)
|
|
168
168
|
volatile VALUE obj, block;
|
169
169
|
gsl_matrix *v;
|
170
170
|
int data_type;
|
171
|
-
|
171
|
+
ca_size_t dim[2];
|
172
172
|
|
173
173
|
Data_Get_Struct(self, gsl_matrix, v);
|
174
174
|
|
@@ -186,7 +186,7 @@ rb_gsl_matrix_ca (VALUE self)
|
|
186
186
|
}
|
187
187
|
|
188
188
|
if ( v->tda != v->size2 ) {
|
189
|
-
|
189
|
+
ca_size_t start[2], step[2], count[2];
|
190
190
|
dim[0] = v->size1;
|
191
191
|
dim[1] = v->tda;
|
192
192
|
block = rb_carray_wrap_ptr(data_type, 2, dim, 0, NULL,
|
@@ -439,7 +439,7 @@ rb_camath_random_dir_2d (VALUE mod, VALUE vn)
|
|
439
439
|
{
|
440
440
|
CArray *cx, *cy;
|
441
441
|
double *px, *py;
|
442
|
-
|
442
|
+
ca_size_t elements = NUM2SIZE(vn), i;
|
443
443
|
cx = carray_new(CA_DOUBLE, 1, &elements, 0, NULL);
|
444
444
|
cy = carray_new(CA_DOUBLE, 1, &elements, 0, NULL);
|
445
445
|
px = (double*) cx->ptr;
|
@@ -465,7 +465,7 @@ rb_camath_random_dir_3d (VALUE mod, VALUE vn)
|
|
465
465
|
{
|
466
466
|
CArray *cx, *cy, *cz;
|
467
467
|
double *px, *py, *pz;
|
468
|
-
|
468
|
+
ca_size_t elements = NUM2SIZE(vn), i;
|
469
469
|
cx = carray_new(CA_DOUBLE, 1, &elements, 0, NULL);
|
470
470
|
cy = carray_new(CA_DOUBLE, 1, &elements, 0, NULL);
|
471
471
|
cz = carray_new(CA_DOUBLE, 1, &elements, 0, NULL);
|
@@ -499,7 +499,7 @@ rb_camath_random_dir_nd (VALUE mod, VALUE vn, VALUE vd)
|
|
499
499
|
CArray **ca;
|
500
500
|
double **p;
|
501
501
|
double *pv;
|
502
|
-
|
502
|
+
ca_size_t d = NUM2SIZE(vd), elements = NUM2SIZE(vn), k, i;
|
503
503
|
if ( d < 0 ) {
|
504
504
|
rb_raise(rb_eArgError, "dimension should be positive number");
|
505
505
|
}
|
@@ -547,12 +547,12 @@ rb_camath_random_multinomial (VALUE mod,
|
|
547
547
|
CArray **ca;
|
548
548
|
unsigned int **pn;
|
549
549
|
unsigned int *pv;
|
550
|
-
|
551
|
-
m =
|
550
|
+
ca_size_t elements, i, k, d, m;
|
551
|
+
m = NUM2SIZE(vm);
|
552
552
|
if ( m <0 ) {
|
553
553
|
rb_raise(rb_eArgError, "# of tries should be positive number");
|
554
554
|
}
|
555
|
-
elements =
|
555
|
+
elements = NUM2SIZE(vn);
|
556
556
|
if ( elements < 0 ) {
|
557
557
|
rb_raise(rb_eArgError, "elements should be positive number");
|
558
558
|
}
|
@@ -571,7 +571,7 @@ rb_camath_random_multinomial (VALUE mod,
|
|
571
571
|
|
572
572
|
ca_attach(cpk);
|
573
573
|
for (i=0; i<elements; i++) {
|
574
|
-
gsl_ran_multinomial(camath_gsl_rng, d, m, (double*)cpk->ptr, pv);
|
574
|
+
gsl_ran_multinomial(camath_gsl_rng, d, (unsigned int)m, (double*)cpk->ptr, pv);
|
575
575
|
for (k=0; k<d; k++) {
|
576
576
|
*(pn[k]) = pv[k];
|
577
577
|
pn[k]++;
|
@@ -582,7 +582,7 @@ rb_camath_random_multinomial (VALUE mod,
|
|
582
582
|
out = rb_ary_new();
|
583
583
|
if ( elements == 1 ) {
|
584
584
|
for (k=0; k<d; k++) {
|
585
|
-
rb_ary_store(out, k,
|
585
|
+
rb_ary_store(out, k, UINT2NUM(*(unsigned int*)ca[k]->ptr));
|
586
586
|
ca_free(ca[k]);
|
587
587
|
}
|
588
588
|
}
|
@@ -607,7 +607,7 @@ rb_camath_multinomial_pdf (VALUE mod,
|
|
607
607
|
unsigned int **pn;
|
608
608
|
unsigned int *pv;
|
609
609
|
double *py;
|
610
|
-
|
610
|
+
ca_size_t elements, i, k, d;
|
611
611
|
|
612
612
|
Check_Type(vnk, T_ARRAY);
|
613
613
|
|
@@ -681,7 +681,7 @@ rb_camath_multinomial_lnpdf (VALUE mod,
|
|
681
681
|
unsigned int **pn;
|
682
682
|
unsigned int *pv;
|
683
683
|
double *py;
|
684
|
-
|
684
|
+
ca_size_t elements, i, k, d;
|
685
685
|
|
686
686
|
Check_Type(vnk, T_ARRAY);
|
687
687
|
|
@@ -757,6 +757,8 @@ rb_camath_gsl_func_d_di(sf, airy_Ai_deriv_scaled);
|
|
757
757
|
rb_camath_gsl_func_d_di(sf, airy_Bi_deriv_scaled);
|
758
758
|
rb_camath_gsl_func_d_i(sf, airy_zero_Ai);
|
759
759
|
rb_camath_gsl_func_d_i(sf, airy_zero_Bi);
|
760
|
+
rb_camath_gsl_func_d_i(sf, airy_zero_Ai_deriv);
|
761
|
+
rb_camath_gsl_func_d_i(sf, airy_zero_Bi_deriv);
|
760
762
|
|
761
763
|
rb_camath_gsl_func_d_d(sf, bessel_J0);
|
762
764
|
rb_camath_gsl_func_d_d(sf, bessel_J1);
|
@@ -805,6 +807,7 @@ rb_camath_gsl_func_d_dd(sf, bessel_Ynu);
|
|
805
807
|
rb_camath_gsl_func_d_dd(sf, bessel_Inu);
|
806
808
|
rb_camath_gsl_func_d_dd(sf, bessel_Inu_scaled);
|
807
809
|
rb_camath_gsl_func_d_dd(sf, bessel_Knu);
|
810
|
+
rb_camath_gsl_func_d_dd(sf, bessel_lnKnu);
|
808
811
|
rb_camath_gsl_func_d_dd(sf, bessel_Knu_scaled);
|
809
812
|
|
810
813
|
rb_camath_gsl_func_d_i(sf, bessel_zero_J0);
|
@@ -821,6 +824,7 @@ rb_camath_gsl_func_d_iidd(sf, hydrogenicR);
|
|
821
824
|
rb_camath_gsl_func_d_iiiiii(sf, coupling_3j);
|
822
825
|
rb_camath_gsl_func_d_iiiiii(sf, coupling_6j);
|
823
826
|
|
827
|
+
/* not implemented : 9j symbols */
|
824
828
|
/* rb_camath_gsl_func_d_iiiiiiiii(sf, coupling_9j); */
|
825
829
|
|
826
830
|
rb_camath_gsl_func_d_d(sf, dawson);
|
@@ -833,7 +837,7 @@ rb_camath_gsl_func_d_d(sf, debye_5);
|
|
833
837
|
rb_camath_gsl_func_d_d(sf, debye_6);
|
834
838
|
|
835
839
|
rb_camath_gsl_func_d_d(sf, dilog);
|
836
|
-
/* rb_camath_gsl_func_d_d(sf, complex_dilog); */
|
840
|
+
/* not implemented: rb_camath_gsl_func_d_d(sf, complex_dilog); */
|
837
841
|
|
838
842
|
rb_camath_gsl_func_d_di(sf, ellint_Kcomp);
|
839
843
|
rb_camath_gsl_func_d_di(sf, ellint_Ecomp);
|
@@ -841,7 +845,7 @@ rb_camath_gsl_func_d_ddi(sf, ellint_Pcomp);
|
|
841
845
|
rb_camath_gsl_func_d_ddi(sf, ellint_F);
|
842
846
|
rb_camath_gsl_func_d_ddi(sf, ellint_E);
|
843
847
|
rb_camath_gsl_func_d_dddi(sf, ellint_P);
|
844
|
-
|
848
|
+
rb_camath_gsl_func_d_ddi(sf, ellint_D);
|
845
849
|
rb_camath_gsl_func_d_ddi(sf, ellint_RC);
|
846
850
|
rb_camath_gsl_func_d_dddi(sf, ellint_RD);
|
847
851
|
rb_camath_gsl_func_d_dddi(sf, ellint_RF);
|
@@ -850,18 +854,18 @@ rb_camath_gsl_func_d_ddddi(sf, ellint_RJ);
|
|
850
854
|
rb_camath_gsl_func_ddd_dd(sf, elljac, _e);
|
851
855
|
|
852
856
|
rb_camath_gsl_func_d_d(sf, erf);
|
853
|
-
rb_camath_gsl_func_d_d(sf, erf_Z);
|
854
|
-
rb_camath_gsl_func_d_d(sf, erf_Q);
|
855
857
|
rb_camath_gsl_func_d_d(sf, erfc);
|
856
858
|
rb_camath_gsl_func_d_d(sf, log_erfc);
|
859
|
+
rb_camath_gsl_func_d_d(sf, erf_Z);
|
860
|
+
rb_camath_gsl_func_d_d(sf, erf_Q);
|
857
861
|
rb_camath_gsl_func_d_d(sf, hazard);
|
858
862
|
|
859
863
|
/* rb_camath_gsl_func_d_dd(sf, exp); */
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
864
|
+
rb_camath_gsl_func_d_dd(sf, exp_mult);
|
865
|
+
rb_camath_gsl_func_d_d(sf, expm1);
|
866
|
+
rb_camath_gsl_func_d_d(sf, exprel);
|
867
|
+
rb_camath_gsl_func_d_d(sf, exprel_2);
|
868
|
+
rb_camath_gsl_func_d_id(sf, exprel_n);
|
865
869
|
|
866
870
|
rb_camath_gsl_func_d_d(sf, expint_E1);
|
867
871
|
rb_camath_gsl_func_d_d(sf, expint_E2);
|
@@ -889,10 +893,6 @@ rb_camath_gsl_func_d_d(sf, lngamma);
|
|
889
893
|
rb_camath_gsl_func_d_d(sf, gammastar);
|
890
894
|
rb_camath_gsl_func_d_d(sf, gammainv);
|
891
895
|
|
892
|
-
rb_camath_gsl_func_d_dd(sf, gamma_inc);
|
893
|
-
rb_camath_gsl_func_d_dd(sf, gamma_inc_Q);
|
894
|
-
rb_camath_gsl_func_d_dd(sf, gamma_inc_P);
|
895
|
-
|
896
896
|
rb_camath_gsl_func_d_i(sf, fact);
|
897
897
|
rb_camath_gsl_func_d_i(sf, doublefact);
|
898
898
|
rb_camath_gsl_func_d_i(sf, lnfact);
|
@@ -901,6 +901,14 @@ rb_camath_gsl_func_d_ii(sf, choose);
|
|
901
901
|
rb_camath_gsl_func_d_ii(sf, lnchoose);
|
902
902
|
rb_camath_gsl_func_d_id(sf, taylorcoeff);
|
903
903
|
|
904
|
+
rb_camath_gsl_func_d_dd(sf, poch);
|
905
|
+
rb_camath_gsl_func_d_dd(sf, lnpoch);
|
906
|
+
rb_camath_gsl_func_d_dd(sf, pochrel);
|
907
|
+
|
908
|
+
rb_camath_gsl_func_d_dd(sf, gamma_inc);
|
909
|
+
rb_camath_gsl_func_d_dd(sf, gamma_inc_Q);
|
910
|
+
rb_camath_gsl_func_d_dd(sf, gamma_inc_P);
|
911
|
+
|
904
912
|
rb_camath_gsl_func_d_dd(sf, beta);
|
905
913
|
rb_camath_gsl_func_d_dd(sf, lnbeta);
|
906
914
|
rb_camath_gsl_func_d_ddd(sf, beta_inc);
|
@@ -910,6 +918,19 @@ rb_camath_gsl_func_d_dd(sf, gegenpoly_2);
|
|
910
918
|
rb_camath_gsl_func_d_dd(sf, gegenpoly_3);
|
911
919
|
rb_camath_gsl_func_d_idd(sf, gegenpoly_n);
|
912
920
|
|
921
|
+
rb_camath_gsl_func_d_id(sf, hermite);
|
922
|
+
/* not implemented: herimite_series */
|
923
|
+
rb_camath_gsl_func_d_id(sf, hermite_prob);
|
924
|
+
/* not implemented: herimite_prob_series */
|
925
|
+
rb_camath_gsl_func_d_iid(sf, hermite_deriv);
|
926
|
+
rb_camath_gsl_func_d_iid(sf, hermite_prob_deriv);
|
927
|
+
rb_camath_gsl_func_d_id(sf, hermite_func);
|
928
|
+
rb_camath_gsl_func_d_id(sf, hermite_func_fast);
|
929
|
+
rb_camath_gsl_func_d_iid(sf, hermite_func_der);
|
930
|
+
rb_camath_gsl_func_d_ii(sf, hermite_zero);
|
931
|
+
rb_camath_gsl_func_d_ii(sf, hermite_prob_zero);
|
932
|
+
rb_camath_gsl_func_d_ii(sf, hermite_func_zero);
|
933
|
+
|
913
934
|
rb_camath_gsl_func_d_dd(sf, hyperg_0F1);
|
914
935
|
rb_camath_gsl_func_d_iid(sf, hyperg_1F1_int);
|
915
936
|
rb_camath_gsl_func_d_ddd(sf, hyperg_1F1);
|
@@ -1185,7 +1206,7 @@ rb_camath_gsl_func_d_id(ran, logarithmic_pdf);
|
|
1185
1206
|
void
|
1186
1207
|
Init_carray_mathfunc_gsl ()
|
1187
1208
|
{
|
1188
|
-
|
1209
|
+
unsigned long seed;
|
1189
1210
|
|
1190
1211
|
camath_gsl_rng = gsl_rng_alloc(gsl_rng_mt19937);
|
1191
1212
|
|
@@ -1206,6 +1227,8 @@ Init_carray_mathfunc_gsl ()
|
|
1206
1227
|
rb_define_camath_gsl_func2_(airy_Bi_deriv_scaled, 2);
|
1207
1228
|
rb_define_camath_gsl_func2u(airy_zero_Ai, 1); /* not func2 */
|
1208
1229
|
rb_define_camath_gsl_func2u(airy_zero_Bi, 1); /* not func2 */
|
1230
|
+
rb_define_camath_gsl_func2u(airy_zero_Ai_deriv, 1); /* not func2 */
|
1231
|
+
rb_define_camath_gsl_func2u(airy_zero_Bi_deriv, 1); /* not func2 */
|
1209
1232
|
|
1210
1233
|
rb_define_camath_gsl_func2(bessel_J0, 1);
|
1211
1234
|
rb_define_camath_gsl_func2(bessel_J1, 1);
|
@@ -1254,25 +1277,13 @@ Init_carray_mathfunc_gsl ()
|
|
1254
1277
|
rb_define_camath_gsl_func2(bessel_Inu, 2);
|
1255
1278
|
rb_define_camath_gsl_func2(bessel_Inu_scaled, 2);
|
1256
1279
|
rb_define_camath_gsl_func2(bessel_Knu, 2);
|
1280
|
+
rb_define_camath_gsl_func2(bessel_lnKnu, 2);
|
1257
1281
|
rb_define_camath_gsl_func2(bessel_Knu_scaled, 2);
|
1258
1282
|
|
1259
1283
|
rb_define_camath_gsl_func2u(bessel_zero_J0, 1); /* not func2 */
|
1260
1284
|
rb_define_camath_gsl_func2u(bessel_zero_J1, 1); /* not func2 */
|
1261
1285
|
rb_define_camath_gsl_func2u(bessel_zero_Jnu, 2); /* not func2 */
|
1262
1286
|
|
1263
|
-
rb_define_camath_gsl_func2(gamma, 1);
|
1264
|
-
rb_define_camath_gsl_func2(lngamma, 1);
|
1265
|
-
rb_define_camath_gsl_func2(gammastar, 1);
|
1266
|
-
rb_define_camath_gsl_func2(gammainv, 1);
|
1267
|
-
|
1268
|
-
rb_define_camath_gsl_func2(gamma_inc, 2);
|
1269
|
-
rb_define_camath_gsl_func2(gamma_inc_P, 2);
|
1270
|
-
rb_define_camath_gsl_func2(gamma_inc_Q, 2);
|
1271
|
-
|
1272
|
-
rb_define_camath_gsl_func2(beta, 2);
|
1273
|
-
rb_define_camath_gsl_func2(lnbeta, 2);
|
1274
|
-
rb_define_camath_gsl_func2(beta_inc, 3);
|
1275
|
-
|
1276
1287
|
rb_define_camath_gsl_func2(clausen, 1);
|
1277
1288
|
|
1278
1289
|
rb_define_camath_gsl_func2(hydrogenicR_1, 2);
|
@@ -1306,14 +1317,6 @@ Init_carray_mathfunc_gsl ()
|
|
1306
1317
|
|
1307
1318
|
rb_define_camath_gsl_func(elljac, 2); /* not func2 */
|
1308
1319
|
|
1309
|
-
rb_define_camath_gsl_func2(fact, 1);
|
1310
|
-
rb_define_camath_gsl_func2(doublefact, 1);
|
1311
|
-
rb_define_camath_gsl_func2(lnfact, 1);
|
1312
|
-
rb_define_camath_gsl_func2(lndoublefact, 1);
|
1313
|
-
rb_define_camath_gsl_func2(choose, 2);
|
1314
|
-
rb_define_camath_gsl_func2(lnchoose, 2);
|
1315
|
-
rb_define_camath_gsl_func2(taylorcoeff, 2);
|
1316
|
-
|
1317
1320
|
rb_define_camath_gsl_func2(erf, 1);
|
1318
1321
|
rb_define_camath_gsl_func2(erf_Z, 1);
|
1319
1322
|
rb_define_camath_gsl_func2(erf_Q, 1);
|
@@ -1321,6 +1324,12 @@ Init_carray_mathfunc_gsl ()
|
|
1321
1324
|
rb_define_camath_gsl_func2(log_erfc, 1);
|
1322
1325
|
rb_define_camath_gsl_func2(hazard, 1);
|
1323
1326
|
|
1327
|
+
rb_define_camath_gsl_func2(exp_mult, 2);
|
1328
|
+
rb_define_camath_gsl_func2(expm1, 1);
|
1329
|
+
rb_define_camath_gsl_func2(exprel, 1);
|
1330
|
+
rb_define_camath_gsl_func2(exprel_2, 1);
|
1331
|
+
rb_define_camath_gsl_func2(exprel_n, 2);
|
1332
|
+
|
1324
1333
|
rb_define_camath_gsl_func2(expint_E1, 1);
|
1325
1334
|
rb_define_camath_gsl_func2(expint_E2, 1);
|
1326
1335
|
rb_define_camath_gsl_func2(expint_En, 2);
|
@@ -1342,11 +1351,49 @@ Init_carray_mathfunc_gsl ()
|
|
1342
1351
|
rb_define_camath_gsl_func2(fermi_dirac_3half, 1);
|
1343
1352
|
rb_define_camath_gsl_func2(fermi_dirac_inc_0, 2);
|
1344
1353
|
|
1354
|
+
rb_define_camath_gsl_func2(gamma, 1);
|
1355
|
+
rb_define_camath_gsl_func2(lngamma, 1);
|
1356
|
+
rb_define_camath_gsl_func2(gammastar, 1);
|
1357
|
+
rb_define_camath_gsl_func2(gammainv, 1);
|
1358
|
+
|
1359
|
+
rb_define_camath_gsl_func2(fact, 1);
|
1360
|
+
rb_define_camath_gsl_func2(doublefact, 1);
|
1361
|
+
rb_define_camath_gsl_func2(lnfact, 1);
|
1362
|
+
rb_define_camath_gsl_func2(lndoublefact, 1);
|
1363
|
+
rb_define_camath_gsl_func2(choose, 2);
|
1364
|
+
rb_define_camath_gsl_func2(lnchoose, 2);
|
1365
|
+
rb_define_camath_gsl_func2(taylorcoeff, 2);
|
1366
|
+
|
1367
|
+
rb_define_camath_gsl_func2(poch, 2);
|
1368
|
+
rb_define_camath_gsl_func2(lnpoch, 2);
|
1369
|
+
rb_define_camath_gsl_func2(pochrel, 2);
|
1370
|
+
|
1371
|
+
rb_define_camath_gsl_func2(gamma_inc, 2);
|
1372
|
+
rb_define_camath_gsl_func2(gamma_inc_P, 2);
|
1373
|
+
rb_define_camath_gsl_func2(gamma_inc_Q, 2);
|
1374
|
+
|
1375
|
+
rb_define_camath_gsl_func2(beta, 2);
|
1376
|
+
rb_define_camath_gsl_func2(lnbeta, 2);
|
1377
|
+
rb_define_camath_gsl_func2(beta_inc, 3);
|
1378
|
+
|
1345
1379
|
rb_define_camath_gsl_func2(gegenpoly_1, 2);
|
1346
1380
|
rb_define_camath_gsl_func2(gegenpoly_2, 2);
|
1347
1381
|
rb_define_camath_gsl_func2(gegenpoly_3, 2);
|
1348
1382
|
rb_define_camath_gsl_func2(gegenpoly_n, 3);
|
1349
1383
|
|
1384
|
+
rb_define_camath_gsl_func2(hermite, 2);
|
1385
|
+
rb_define_camath_gsl_func2(hermite_deriv, 3);
|
1386
|
+
rb_define_camath_gsl_func2(hermite_zero, 2);
|
1387
|
+
|
1388
|
+
rb_define_camath_gsl_func2(hermite_prob, 2);
|
1389
|
+
rb_define_camath_gsl_func2(hermite_prob_deriv, 3);
|
1390
|
+
rb_define_camath_gsl_func2(hermite_prob_zero, 2);
|
1391
|
+
|
1392
|
+
rb_define_camath_gsl_func2(hermite_func, 2);
|
1393
|
+
rb_define_camath_gsl_func2(hermite_func_fast, 2);
|
1394
|
+
rb_define_camath_gsl_func2(hermite_func_der, 3);
|
1395
|
+
rb_define_camath_gsl_func2(hermite_func_zero, 2);
|
1396
|
+
|
1350
1397
|
rb_define_camath_gsl_func2(hyperg_0F1, 2);
|
1351
1398
|
rb_define_camath_gsl_func2(hyperg_1F1_int, 3);
|
1352
1399
|
rb_define_camath_gsl_func2(hyperg_1F1, 3);
|
data/lib/carray-gsl.rb
CHANGED
@@ -10,9 +10,6 @@
|
|
10
10
|
#
|
11
11
|
# ----------------------------------------------------------------------------
|
12
12
|
|
13
|
-
require 'gsl'
|
14
|
-
require 'carray'
|
15
|
-
require 'carray/carray_gsl'
|
16
13
|
|
17
14
|
module CA::GSL
|
18
15
|
end
|
@@ -51,40 +48,40 @@ class CArray
|
|
51
48
|
end
|
52
49
|
|
53
50
|
[
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
51
|
+
["random_gaussian", ["sigma"]],
|
52
|
+
["random_ugaussian", []],
|
53
|
+
["random_gaussian_tail", ["a", "sigma"]],
|
54
|
+
["random_ugaussian_tail", ["a"]],
|
55
|
+
["random_exponential", ["mu"]],
|
56
|
+
["random_laplace", ["a"]],
|
57
|
+
["random_exppaw", ["a", "b"]],
|
58
|
+
["random_cauchy", ["a"]],
|
59
|
+
["random_rayleigh", ["sigma"]],
|
60
|
+
["random_rayleigh_tail", ["a", "sigma"]],
|
61
|
+
["random_landau", []],
|
62
|
+
["random_levy", ["c", "alpha"]],
|
63
|
+
["random_levy_skew", ["c", "alpha", "beta"]],
|
64
|
+
["random_gamma", ["a", "b"]],
|
65
|
+
["random_erlang", ["a", "n"]],
|
66
|
+
["random_flat", ["a", "b"]],
|
67
|
+
["random_lognormal", ["zeta", "sigma"]],
|
68
|
+
["random_chisq", ["nu"]],
|
69
|
+
["random_fdist", ["nu1", "nu2"]],
|
70
|
+
["random_tdist", ["nu"]],
|
71
|
+
["random_beta", ["a", "b"]],
|
72
|
+
["random_logistic", ["a"]],
|
73
|
+
["random_pareto", ["a", "b"]],
|
74
|
+
["random_weibull", ["a", "b"]],
|
75
|
+
["random_gumbel1", ["a", "b"]],
|
76
|
+
["random_gumbel2", ["a", "b"]],
|
77
|
+
["random_poisson", ["mu"]],
|
78
|
+
["random_bernoulli", ["p"]],
|
79
|
+
["random_binomial", ["p", "n"]],
|
80
|
+
["random_negative_binomial", ["p", "n"]],
|
81
|
+
["random_pascal", ["p", "n"]],
|
82
|
+
["random_geometric", ["p"]],
|
83
|
+
["random_hypergeometric", ["n1", "n2", "t"]],
|
84
|
+
["random_logarithmic", ["p"]],
|
88
85
|
].each do |name, parms|
|
89
86
|
eval %{
|
90
87
|
def #{name} (#{parms.join(",")})
|
@@ -100,19 +97,19 @@ class CArray
|
|
100
97
|
attach {
|
101
98
|
lu, perm, sign = *GSL::Linalg::LU.decomp(self.gm)
|
102
99
|
out = lu.ca.m
|
103
|
-
out.attribute[
|
104
|
-
out.attribute[
|
105
|
-
out.attribute[
|
106
|
-
out.attribute[
|
100
|
+
out.attribute["@A"] = self.gm
|
101
|
+
out.attribute["@LU"] = lu
|
102
|
+
out.attribute["@perm"] = perm
|
103
|
+
out.attribute["@sign"] = sign
|
107
104
|
return out
|
108
105
|
}
|
109
106
|
end
|
110
107
|
|
111
108
|
def lu_solve (b)
|
112
|
-
if self
|
109
|
+
if self["@LU"]
|
113
110
|
CArray.attach(self, b) {
|
114
|
-
lu = self
|
115
|
-
perm = self
|
111
|
+
lu = self["@LU"]
|
112
|
+
perm = self["@perm"]
|
116
113
|
return GSL::Linalg::LU.solve(lu, perm, b.gv).ca.v
|
117
114
|
}
|
118
115
|
else
|
@@ -124,9 +121,9 @@ class CArray
|
|
124
121
|
|
125
122
|
def lu_refine (b, x)
|
126
123
|
CArray.attach(self, b, x) {
|
127
|
-
a = self
|
128
|
-
lu = self
|
129
|
-
perm = self
|
124
|
+
a = self["@A"]
|
125
|
+
lu = self["@LU"]
|
126
|
+
perm = self["@perm"]
|
130
127
|
return GSL::Linalg::LU.refine(a, lu, perm, b.gv, x.gv).first.ca.v
|
131
128
|
}
|
132
129
|
end
|
@@ -147,8 +144,8 @@ class CArray
|
|
147
144
|
attach {
|
148
145
|
qr, tau = *GSL::Linalg::QR.decomp(self.gm)
|
149
146
|
out = qr.ca.m
|
150
|
-
out
|
151
|
-
out
|
147
|
+
out["@qr"] = qr
|
148
|
+
out["@tau"] = tau
|
152
149
|
return out
|
153
150
|
}
|
154
151
|
end
|
@@ -161,8 +158,8 @@ class CArray
|
|
161
158
|
|
162
159
|
def qr_unpack
|
163
160
|
attach {
|
164
|
-
qr = self
|
165
|
-
tau = self
|
161
|
+
qr = self["@qr"]
|
162
|
+
tau = self["@tau"]
|
166
163
|
q, r = *GSL::Linalg::QR.unpack(qr, tau)
|
167
164
|
return q.ca.m, r.ca.m
|
168
165
|
}
|
@@ -185,7 +182,7 @@ class CArray
|
|
185
182
|
attach {
|
186
183
|
c = GSL::Linalg::Cholesky.decomp(self.gm)
|
187
184
|
out = c.ca.m
|
188
|
-
out
|
185
|
+
out["@cholesky"] = c
|
189
186
|
return out
|
190
187
|
}
|
191
188
|
end
|
@@ -591,15 +588,15 @@ module CAMath
|
|
591
588
|
|
592
589
|
def lu_solve (lu, b)
|
593
590
|
CArray.attach(lu, b) {
|
594
|
-
perm = lu
|
591
|
+
perm = lu["@perm"]
|
595
592
|
return GSL::Linalg::LU.solve(lu.gm, perm, b.gv).ca.v
|
596
593
|
}
|
597
594
|
end
|
598
595
|
|
599
596
|
def qr_solve (qr, b)
|
600
597
|
CArray.attach(qr, b) {
|
601
|
-
qrm = qr
|
602
|
-
tau = qr
|
598
|
+
qrm = qr["@qr"]
|
599
|
+
tau = qr["@tau"]
|
603
600
|
return GSL::Linalg::QR.solve(qrm, tau, b.gv).ca.v
|
604
601
|
}
|
605
602
|
end
|
@@ -612,7 +609,7 @@ module CAMath
|
|
612
609
|
|
613
610
|
def cholesky_solve (c, b)
|
614
611
|
CArray.attach(c, b) {
|
615
|
-
cholesky = c
|
612
|
+
cholesky = c["@cholesky"]
|
616
613
|
return GSL::Linalg::Cholesky.solve(cholesky, b.gv).ca.v
|
617
614
|
}
|
618
615
|
end
|
@@ -687,7 +684,7 @@ class CAMatrix
|
|
687
684
|
|
688
685
|
def upper
|
689
686
|
attach {
|
690
|
-
return self.gm.
|
687
|
+
return self.gm.upper.ca.m
|
691
688
|
}
|
692
689
|
end
|
693
690
|
|
metadata
CHANGED
@@ -1,32 +1,73 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carray-gsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroki Motoyoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
11
|
+
date: 2020-06-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: carray
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.4.0
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.4.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.4.0
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.4.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: gsl
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.1.0.3
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 2.1.0.3
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.1.0.3
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.1.0.3
|
53
|
+
description: " Extension for accessing Ruby/GSL with CArray\n"
|
15
54
|
email: ''
|
16
55
|
executables: []
|
17
56
|
extensions:
|
18
|
-
- extconf.rb
|
57
|
+
- ext/extconf.rb
|
19
58
|
extra_rdoc_files: []
|
20
59
|
files:
|
21
60
|
- README.md
|
61
|
+
- Rakefile
|
22
62
|
- carray-gsl.gemspec
|
23
|
-
-
|
24
|
-
-
|
25
|
-
-
|
26
|
-
-
|
63
|
+
- examples/lu_decomp.rb
|
64
|
+
- examples/test_graph.rb
|
65
|
+
- examples/test_integ.rb
|
66
|
+
- ext/carray_gsl.c
|
67
|
+
- ext/carray_mathfunc_gsl.c
|
68
|
+
- ext/extconf.rb
|
27
69
|
- lib/carray-gsl.rb
|
28
|
-
- lib/
|
29
|
-
- lib/math/interp/adapter_gsl_spline.rb
|
70
|
+
- lib/carray-gsl/core.rb
|
30
71
|
homepage: https://github.com/himotoyoshi/carray-gsl
|
31
72
|
licenses: []
|
32
73
|
metadata: {}
|
@@ -38,7 +79,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
38
79
|
requirements:
|
39
80
|
- - ">="
|
40
81
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
82
|
+
version: 2.4.0
|
42
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
84
|
requirements:
|
44
85
|
- - ">="
|
@@ -46,9 +87,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
46
87
|
version: '0'
|
47
88
|
requirements: []
|
48
89
|
rubyforge_project:
|
49
|
-
rubygems_version: 2.
|
90
|
+
rubygems_version: 2.7.7
|
50
91
|
signing_key:
|
51
92
|
specification_version: 4
|
52
93
|
summary: Extension for accessing Ruby/GSL with CArray
|
53
94
|
test_files: []
|
54
|
-
has_rdoc: false
|
@@ -1,44 +0,0 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
4
|
-
|
5
|
-
#
|
6
|
-
# :type => type
|
7
|
-
#
|
8
|
-
# * "linear"
|
9
|
-
# * "polynomial"
|
10
|
-
# * "cspline"
|
11
|
-
# * "cspline_periodic"
|
12
|
-
# * "akima"
|
13
|
-
# * "akima_periodic"
|
14
|
-
#
|
15
|
-
|
16
|
-
require "carray/math/interp"
|
17
|
-
require "gsl"
|
18
|
-
|
19
|
-
class CA::Interp::GSLSpline < CA::Interp::Adapter
|
20
|
-
|
21
|
-
install_adapter "gsl:spline"
|
22
|
-
|
23
|
-
def initialize (scales, value, options={})
|
24
|
-
@y = value
|
25
|
-
@x = scales
|
26
|
-
type = options[:type] || "linear"
|
27
|
-
CArray.attach(@x, @y) {
|
28
|
-
@interp = GSL::Spline.alloc(type, @x.na, @y.na)
|
29
|
-
}
|
30
|
-
end
|
31
|
-
|
32
|
-
def evaluate (x0)
|
33
|
-
case x0
|
34
|
-
when CArray
|
35
|
-
return x0.attach { @interp.eval(x0.na).ca }
|
36
|
-
else
|
37
|
-
return @interp.eval(x0)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
alias grid evaluate
|
42
|
-
|
43
|
-
end
|
44
|
-
|