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/blas3.c
ADDED
|
@@ -0,0 +1,881 @@
|
|
|
1
|
+
/*
|
|
2
|
+
blas3.c
|
|
3
|
+
Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
|
|
4
|
+
(C) Copyright 2001-2006 by Yoshiki Tsunesada
|
|
5
|
+
|
|
6
|
+
Ruby/GSL is free software: you can redistribute it and/or modify it
|
|
7
|
+
under the terms of the GNU General Public License.
|
|
8
|
+
This library is distributed in the hope that it will be useful, but
|
|
9
|
+
WITHOUT ANY WARRANTY.
|
|
10
|
+
*/
|
|
11
|
+
#include "rb_gsl_config.h"
|
|
12
|
+
|
|
13
|
+
#include <gsl/gsl_blas.h>
|
|
14
|
+
#include "rb_gsl_common.h"
|
|
15
|
+
#include "rb_gsl_complex.h"
|
|
16
|
+
#include "rb_gsl_array.h"
|
|
17
|
+
|
|
18
|
+
static VALUE rb_gsl_blas_dgemm(int argc, VALUE *argv, VALUE obj)
|
|
19
|
+
{
|
|
20
|
+
gsl_matrix *A = NULL, *B = NULL, *C = NULL;
|
|
21
|
+
double alpha, beta;
|
|
22
|
+
CBLAS_TRANSPOSE_t TransA, TransB;
|
|
23
|
+
int flag = 0;
|
|
24
|
+
switch (argc) {
|
|
25
|
+
case 2:
|
|
26
|
+
CHECK_MATRIX(argv[0]);
|
|
27
|
+
CHECK_MATRIX(argv[1]);
|
|
28
|
+
Data_Get_Struct(argv[0], gsl_matrix, A);
|
|
29
|
+
Data_Get_Struct(argv[1], gsl_matrix, B);
|
|
30
|
+
C = gsl_matrix_calloc(A->size1, B->size2);
|
|
31
|
+
alpha = 1.0;
|
|
32
|
+
beta = 0.0;
|
|
33
|
+
TransA = CblasNoTrans; TransB = CblasNoTrans;
|
|
34
|
+
flag = 1;
|
|
35
|
+
break;
|
|
36
|
+
case 5:
|
|
37
|
+
CHECK_FIXNUM(argv[0]);
|
|
38
|
+
CHECK_FIXNUM(argv[1]);
|
|
39
|
+
Need_Float(argv[2]);
|
|
40
|
+
CHECK_MATRIX(argv[3]);
|
|
41
|
+
CHECK_MATRIX(argv[4]);
|
|
42
|
+
TransA = FIX2INT(argv[0]);
|
|
43
|
+
TransB = FIX2INT(argv[1]);
|
|
44
|
+
alpha = NUM2DBL(argv[2]);
|
|
45
|
+
Data_Get_Struct(argv[3], gsl_matrix, A);
|
|
46
|
+
Data_Get_Struct(argv[4], gsl_matrix, B);
|
|
47
|
+
C = gsl_matrix_calloc(A->size1, B->size2);
|
|
48
|
+
beta = 0.0;
|
|
49
|
+
flag = 1;
|
|
50
|
+
break;
|
|
51
|
+
case 6:
|
|
52
|
+
CHECK_FIXNUM(argv[0]);
|
|
53
|
+
CHECK_FIXNUM(argv[1]);
|
|
54
|
+
Need_Float(argv[2]);
|
|
55
|
+
CHECK_MATRIX(argv[3]);
|
|
56
|
+
CHECK_MATRIX(argv[4]);
|
|
57
|
+
Need_Float(argv[5]);
|
|
58
|
+
TransA = FIX2INT(argv[0]);
|
|
59
|
+
TransB = FIX2INT(argv[1]);
|
|
60
|
+
alpha = NUM2DBL(argv[2]);
|
|
61
|
+
Data_Get_Struct(argv[3], gsl_matrix, A);
|
|
62
|
+
Data_Get_Struct(argv[4], gsl_matrix, B);
|
|
63
|
+
beta = NUM2DBL(argv[5]);
|
|
64
|
+
C = gsl_matrix_calloc(A->size1, B->size2);
|
|
65
|
+
flag = 1;
|
|
66
|
+
break;
|
|
67
|
+
case 7:
|
|
68
|
+
CHECK_FIXNUM(argv[0]);
|
|
69
|
+
CHECK_FIXNUM(argv[1]);
|
|
70
|
+
Need_Float(argv[2]);
|
|
71
|
+
CHECK_MATRIX(argv[3]);
|
|
72
|
+
CHECK_MATRIX(argv[4]);
|
|
73
|
+
Need_Float(argv[5]);
|
|
74
|
+
CHECK_MATRIX(argv[6]);
|
|
75
|
+
TransA = FIX2INT(argv[0]);
|
|
76
|
+
TransB = FIX2INT(argv[1]);
|
|
77
|
+
alpha = NUM2DBL(argv[2]);
|
|
78
|
+
Data_Get_Struct(argv[3], gsl_matrix, A);
|
|
79
|
+
Data_Get_Struct(argv[4], gsl_matrix, B);
|
|
80
|
+
beta = NUM2DBL(argv[5]);
|
|
81
|
+
Data_Get_Struct(argv[6], gsl_matrix, C);
|
|
82
|
+
break;
|
|
83
|
+
default:
|
|
84
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2, 5, 6, or 7)", argc);
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
gsl_blas_dgemm(TransA, TransB, alpha, A, B, beta, C);
|
|
88
|
+
if (flag == 1) return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, C);
|
|
89
|
+
else return argv[6];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
static VALUE rb_gsl_blas_zgemm(int argc, VALUE *argv, VALUE obj)
|
|
93
|
+
{
|
|
94
|
+
gsl_matrix_complex *A = NULL, *B = NULL, *C = NULL;
|
|
95
|
+
gsl_complex alpha, beta, *pa = &alpha, *pb = β
|
|
96
|
+
CBLAS_TRANSPOSE_t TransA, TransB;
|
|
97
|
+
int flag = 0;
|
|
98
|
+
alpha.dat[0] = 1.0; alpha.dat[1] = 0.0;
|
|
99
|
+
beta.dat[0] = 0.0; beta.dat[1] = 0.0;
|
|
100
|
+
switch (argc) {
|
|
101
|
+
case 2:
|
|
102
|
+
CHECK_MATRIX_COMPLEX(argv[0]);
|
|
103
|
+
CHECK_MATRIX_COMPLEX(argv[1]);
|
|
104
|
+
Data_Get_Struct(argv[0], gsl_matrix_complex, A);
|
|
105
|
+
Data_Get_Struct(argv[1], gsl_matrix_complex, B);
|
|
106
|
+
C = gsl_matrix_complex_calloc(A->size1, B->size2);
|
|
107
|
+
TransA = CblasNoTrans; TransB = CblasNoTrans;
|
|
108
|
+
flag = 1;
|
|
109
|
+
break;
|
|
110
|
+
case 5:
|
|
111
|
+
CHECK_FIXNUM(argv[0]);
|
|
112
|
+
CHECK_FIXNUM(argv[1]);
|
|
113
|
+
CHECK_COMPLEX(argv[2]);
|
|
114
|
+
CHECK_MATRIX_COMPLEX(argv[3]);
|
|
115
|
+
CHECK_MATRIX_COMPLEX(argv[4]);
|
|
116
|
+
TransA = FIX2INT(argv[0]);
|
|
117
|
+
TransB = FIX2INT(argv[1]);
|
|
118
|
+
Data_Get_Struct(argv[2], gsl_complex, pa);
|
|
119
|
+
Data_Get_Struct(argv[3], gsl_matrix_complex, A);
|
|
120
|
+
Data_Get_Struct(argv[4], gsl_matrix_complex, B);
|
|
121
|
+
C = gsl_matrix_complex_calloc(A->size1, B->size2);
|
|
122
|
+
flag = 1;
|
|
123
|
+
break;
|
|
124
|
+
case 6:
|
|
125
|
+
CHECK_FIXNUM(argv[0]);
|
|
126
|
+
CHECK_FIXNUM(argv[1]);
|
|
127
|
+
CHECK_COMPLEX(argv[2]);
|
|
128
|
+
CHECK_MATRIX_COMPLEX(argv[3]);
|
|
129
|
+
CHECK_MATRIX_COMPLEX(argv[4]);
|
|
130
|
+
CHECK_COMPLEX(argv[5]);
|
|
131
|
+
TransA = FIX2INT(argv[0]);
|
|
132
|
+
TransB = FIX2INT(argv[1]);
|
|
133
|
+
Data_Get_Struct(argv[2], gsl_complex, pa);
|
|
134
|
+
Data_Get_Struct(argv[3], gsl_matrix_complex, A);
|
|
135
|
+
Data_Get_Struct(argv[4], gsl_matrix_complex, B);
|
|
136
|
+
Data_Get_Struct(argv[5], gsl_complex, pb);
|
|
137
|
+
C = gsl_matrix_complex_calloc(A->size1, B->size2);
|
|
138
|
+
flag = 1;
|
|
139
|
+
break;
|
|
140
|
+
case 7:
|
|
141
|
+
CHECK_FIXNUM(argv[0]);
|
|
142
|
+
CHECK_FIXNUM(argv[1]);
|
|
143
|
+
CHECK_COMPLEX(argv[2]);
|
|
144
|
+
CHECK_MATRIX_COMPLEX(argv[3]);
|
|
145
|
+
CHECK_MATRIX_COMPLEX(argv[4]);
|
|
146
|
+
CHECK_COMPLEX(argv[5]);
|
|
147
|
+
CHECK_MATRIX_COMPLEX(argv[6]);
|
|
148
|
+
TransA = FIX2INT(argv[0]);
|
|
149
|
+
TransB = FIX2INT(argv[1]);
|
|
150
|
+
Data_Get_Struct(argv[2], gsl_complex, pa);
|
|
151
|
+
Data_Get_Struct(argv[3], gsl_matrix_complex, A);
|
|
152
|
+
Data_Get_Struct(argv[4], gsl_matrix_complex, B);
|
|
153
|
+
Data_Get_Struct(argv[5], gsl_complex, pb);
|
|
154
|
+
Data_Get_Struct(argv[6], gsl_matrix_complex, C);
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 7)", argc);
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
gsl_blas_zgemm(TransA, TransB, alpha, A, B, beta, C);
|
|
161
|
+
if (flag == 1) return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, C);
|
|
162
|
+
else return argv[6];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
static VALUE rb_gsl_blas_dsymm(int argc, VALUE *argv, VALUE obj)
|
|
166
|
+
{
|
|
167
|
+
gsl_matrix *A = NULL, *B = NULL, *C = NULL;
|
|
168
|
+
double alpha, beta;
|
|
169
|
+
CBLAS_SIDE_t Side;
|
|
170
|
+
CBLAS_UPLO_t Uplo;
|
|
171
|
+
int flag = 0;
|
|
172
|
+
switch (argc) {
|
|
173
|
+
case 2:
|
|
174
|
+
CHECK_MATRIX(argv[0]);
|
|
175
|
+
CHECK_MATRIX(argv[1]);
|
|
176
|
+
Data_Get_Struct(argv[0], gsl_matrix, A);
|
|
177
|
+
Data_Get_Struct(argv[1], gsl_matrix, B);
|
|
178
|
+
C = gsl_matrix_calloc(A->size1, B->size2);
|
|
179
|
+
alpha = 1.0;
|
|
180
|
+
beta = 0.0;
|
|
181
|
+
Side = CblasLeft; Uplo = CblasUpper;
|
|
182
|
+
flag = 1;
|
|
183
|
+
break;
|
|
184
|
+
case 5:
|
|
185
|
+
CHECK_FIXNUM(argv[0]);
|
|
186
|
+
CHECK_FIXNUM(argv[1]);
|
|
187
|
+
Need_Float(argv[2]);
|
|
188
|
+
CHECK_MATRIX(argv[3]);
|
|
189
|
+
CHECK_MATRIX(argv[4]);
|
|
190
|
+
Side = FIX2INT(argv[0]);
|
|
191
|
+
Uplo = FIX2INT(argv[1]);
|
|
192
|
+
alpha = NUM2DBL(argv[2]);
|
|
193
|
+
Data_Get_Struct(argv[3], gsl_matrix, A);
|
|
194
|
+
Data_Get_Struct(argv[4], gsl_matrix, B);
|
|
195
|
+
C = gsl_matrix_calloc(A->size1, B->size2);
|
|
196
|
+
beta = 0.0;
|
|
197
|
+
flag = 1;
|
|
198
|
+
break;
|
|
199
|
+
case 6:
|
|
200
|
+
CHECK_FIXNUM(argv[0]);
|
|
201
|
+
CHECK_FIXNUM(argv[1]);
|
|
202
|
+
Need_Float(argv[2]);
|
|
203
|
+
CHECK_MATRIX(argv[3]);
|
|
204
|
+
CHECK_MATRIX(argv[4]);
|
|
205
|
+
Need_Float(argv[5]);
|
|
206
|
+
CHECK_MATRIX(argv[6]);
|
|
207
|
+
Side = FIX2INT(argv[0]);
|
|
208
|
+
Uplo = FIX2INT(argv[1]);
|
|
209
|
+
alpha = NUM2DBL(argv[2]);
|
|
210
|
+
Data_Get_Struct(argv[3], gsl_matrix, A);
|
|
211
|
+
Data_Get_Struct(argv[4], gsl_matrix, B);
|
|
212
|
+
beta = NUM2DBL(argv[5]);
|
|
213
|
+
C = gsl_matrix_calloc(A->size1, B->size2);
|
|
214
|
+
flag = 1;
|
|
215
|
+
break;
|
|
216
|
+
case 7:
|
|
217
|
+
CHECK_FIXNUM(argv[0]);
|
|
218
|
+
CHECK_FIXNUM(argv[1]);
|
|
219
|
+
Need_Float(argv[2]);
|
|
220
|
+
CHECK_MATRIX(argv[3]);
|
|
221
|
+
CHECK_MATRIX(argv[4]);
|
|
222
|
+
Need_Float(argv[5]);
|
|
223
|
+
CHECK_MATRIX(argv[6]);
|
|
224
|
+
Side = FIX2INT(argv[0]);
|
|
225
|
+
Uplo = FIX2INT(argv[1]);
|
|
226
|
+
alpha = NUM2DBL(argv[2]);
|
|
227
|
+
Data_Get_Struct(argv[3], gsl_matrix, A);
|
|
228
|
+
Data_Get_Struct(argv[4], gsl_matrix, B);
|
|
229
|
+
beta = NUM2DBL(argv[5]);
|
|
230
|
+
Data_Get_Struct(argv[6], gsl_matrix, C);
|
|
231
|
+
break;
|
|
232
|
+
default:
|
|
233
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 7)", argc);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
gsl_blas_dsymm(Side, Uplo, alpha, A, B, beta, C);
|
|
237
|
+
if (flag == 1) return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, C);
|
|
238
|
+
else return argv[6];
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
static VALUE rb_gsl_blas_zsymm(int argc, VALUE *argv, VALUE obj)
|
|
242
|
+
{
|
|
243
|
+
gsl_matrix_complex *A = NULL, *B = NULL, *C = NULL;
|
|
244
|
+
gsl_complex alpha, beta, *pa = &alpha, *pb = β
|
|
245
|
+
CBLAS_SIDE_t Side;
|
|
246
|
+
CBLAS_UPLO_t Uplo;
|
|
247
|
+
int flag = 0;
|
|
248
|
+
alpha = gsl_complex_rect(1.0, 0.0);
|
|
249
|
+
beta = gsl_complex_rect(0.0, 0.0);
|
|
250
|
+
switch (argc) {
|
|
251
|
+
case 2:
|
|
252
|
+
CHECK_MATRIX_COMPLEX(argv[0]);
|
|
253
|
+
CHECK_MATRIX_COMPLEX(argv[1]);
|
|
254
|
+
Data_Get_Struct(argv[0], gsl_matrix_complex, A);
|
|
255
|
+
Data_Get_Struct(argv[1], gsl_matrix_complex, B);
|
|
256
|
+
C = gsl_matrix_complex_calloc(A->size1, B->size2);
|
|
257
|
+
Side = CblasLeft; Uplo = CblasUpper;
|
|
258
|
+
flag = 1;
|
|
259
|
+
break;
|
|
260
|
+
case 5:
|
|
261
|
+
CHECK_FIXNUM(argv[0]);
|
|
262
|
+
CHECK_FIXNUM(argv[1]);
|
|
263
|
+
CHECK_COMPLEX(argv[2]);
|
|
264
|
+
CHECK_MATRIX_COMPLEX(argv[3]);
|
|
265
|
+
CHECK_MATRIX_COMPLEX(argv[4]);
|
|
266
|
+
Side = FIX2INT(argv[0]);
|
|
267
|
+
Uplo = FIX2INT(argv[1]);
|
|
268
|
+
Data_Get_Struct(argv[2], gsl_complex, pa);
|
|
269
|
+
Data_Get_Struct(argv[3], gsl_matrix_complex, A);
|
|
270
|
+
Data_Get_Struct(argv[4], gsl_matrix_complex, B);
|
|
271
|
+
C = gsl_matrix_complex_calloc(A->size1, B->size2);
|
|
272
|
+
flag = 1;
|
|
273
|
+
break;
|
|
274
|
+
case 6:
|
|
275
|
+
CHECK_FIXNUM(argv[0]);
|
|
276
|
+
CHECK_FIXNUM(argv[1]);
|
|
277
|
+
CHECK_COMPLEX(argv[2]);
|
|
278
|
+
CHECK_MATRIX_COMPLEX(argv[3]);
|
|
279
|
+
CHECK_MATRIX_COMPLEX(argv[4]);
|
|
280
|
+
CHECK_COMPLEX(argv[5]);
|
|
281
|
+
CHECK_MATRIX_COMPLEX(argv[6]);
|
|
282
|
+
Side = FIX2INT(argv[0]);
|
|
283
|
+
Uplo = FIX2INT(argv[1]);
|
|
284
|
+
Data_Get_Struct(argv[2], gsl_complex, pa);
|
|
285
|
+
Data_Get_Struct(argv[3], gsl_matrix_complex, A);
|
|
286
|
+
Data_Get_Struct(argv[4], gsl_matrix_complex, B);
|
|
287
|
+
Data_Get_Struct(argv[5], gsl_complex, pb);
|
|
288
|
+
C = gsl_matrix_complex_calloc(A->size1, B->size2);
|
|
289
|
+
flag = 1;
|
|
290
|
+
break;
|
|
291
|
+
case 7:
|
|
292
|
+
CHECK_FIXNUM(argv[0]);
|
|
293
|
+
CHECK_FIXNUM(argv[1]);
|
|
294
|
+
CHECK_COMPLEX(argv[2]);
|
|
295
|
+
CHECK_MATRIX_COMPLEX(argv[3]);
|
|
296
|
+
CHECK_MATRIX_COMPLEX(argv[4]);
|
|
297
|
+
CHECK_COMPLEX(argv[5]);
|
|
298
|
+
CHECK_MATRIX_COMPLEX(argv[6]);
|
|
299
|
+
Side = FIX2INT(argv[0]);
|
|
300
|
+
Uplo = FIX2INT(argv[1]);
|
|
301
|
+
Data_Get_Struct(argv[2], gsl_complex, pa);
|
|
302
|
+
Data_Get_Struct(argv[3], gsl_matrix_complex, A);
|
|
303
|
+
Data_Get_Struct(argv[4], gsl_matrix_complex, B);
|
|
304
|
+
Data_Get_Struct(argv[5], gsl_complex, pb);
|
|
305
|
+
Data_Get_Struct(argv[6], gsl_matrix_complex, C);
|
|
306
|
+
break;
|
|
307
|
+
default:
|
|
308
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 7)", argc);
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
gsl_blas_zsymm(Side, Uplo, alpha, A, B, beta, C);
|
|
312
|
+
if (flag == 1) return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, C);
|
|
313
|
+
else return argv[6];
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
static VALUE rb_gsl_blas_zhemm(int argc, VALUE *argv, VALUE obj)
|
|
317
|
+
{
|
|
318
|
+
gsl_matrix_complex *A = NULL, *B = NULL, *C = NULL;
|
|
319
|
+
gsl_complex alpha, beta, *pa = &alpha, *pb = β
|
|
320
|
+
CBLAS_SIDE_t Side;
|
|
321
|
+
CBLAS_UPLO_t Uplo;
|
|
322
|
+
int flag = 0;
|
|
323
|
+
alpha = gsl_complex_rect(1.0, 0.0);
|
|
324
|
+
beta = gsl_complex_rect(0.0, 0.0);
|
|
325
|
+
switch (argc) {
|
|
326
|
+
case 2:
|
|
327
|
+
CHECK_MATRIX_COMPLEX(argv[0]);
|
|
328
|
+
CHECK_MATRIX_COMPLEX(argv[1]);
|
|
329
|
+
Data_Get_Struct(argv[0], gsl_matrix_complex, A);
|
|
330
|
+
Data_Get_Struct(argv[1], gsl_matrix_complex, B);
|
|
331
|
+
C = gsl_matrix_complex_calloc(A->size1, B->size2);
|
|
332
|
+
Side = CblasLeft; Uplo = CblasUpper;
|
|
333
|
+
flag = 1;
|
|
334
|
+
break;
|
|
335
|
+
case 5:
|
|
336
|
+
CHECK_FIXNUM(argv[0]);
|
|
337
|
+
CHECK_FIXNUM(argv[1]);
|
|
338
|
+
CHECK_COMPLEX(argv[2]);
|
|
339
|
+
CHECK_MATRIX_COMPLEX(argv[3]);
|
|
340
|
+
CHECK_MATRIX_COMPLEX(argv[4]);
|
|
341
|
+
Side = FIX2INT(argv[0]);
|
|
342
|
+
Uplo = FIX2INT(argv[1]);
|
|
343
|
+
Data_Get_Struct(argv[2], gsl_complex, pa);
|
|
344
|
+
Data_Get_Struct(argv[3], gsl_matrix_complex, A);
|
|
345
|
+
Data_Get_Struct(argv[4], gsl_matrix_complex, B);
|
|
346
|
+
C = gsl_matrix_complex_calloc(A->size1, B->size2);
|
|
347
|
+
flag = 1;
|
|
348
|
+
break;
|
|
349
|
+
case 6:
|
|
350
|
+
CHECK_FIXNUM(argv[0]);
|
|
351
|
+
CHECK_FIXNUM(argv[1]);
|
|
352
|
+
CHECK_COMPLEX(argv[2]);
|
|
353
|
+
CHECK_MATRIX_COMPLEX(argv[3]);
|
|
354
|
+
CHECK_MATRIX_COMPLEX(argv[4]);
|
|
355
|
+
CHECK_COMPLEX(argv[5]);
|
|
356
|
+
CHECK_MATRIX_COMPLEX(argv[6]);
|
|
357
|
+
Side = FIX2INT(argv[0]);
|
|
358
|
+
Uplo = FIX2INT(argv[1]);
|
|
359
|
+
Data_Get_Struct(argv[2], gsl_complex, pa);
|
|
360
|
+
Data_Get_Struct(argv[3], gsl_matrix_complex, A);
|
|
361
|
+
Data_Get_Struct(argv[4], gsl_matrix_complex, B);
|
|
362
|
+
Data_Get_Struct(argv[5], gsl_complex, pb);
|
|
363
|
+
C = gsl_matrix_complex_calloc(A->size1, B->size2);
|
|
364
|
+
flag = 1;
|
|
365
|
+
break;
|
|
366
|
+
case 7:
|
|
367
|
+
CHECK_FIXNUM(argv[0]);
|
|
368
|
+
CHECK_FIXNUM(argv[1]);
|
|
369
|
+
CHECK_COMPLEX(argv[2]);
|
|
370
|
+
CHECK_MATRIX_COMPLEX(argv[3]);
|
|
371
|
+
CHECK_MATRIX_COMPLEX(argv[4]);
|
|
372
|
+
CHECK_COMPLEX(argv[5]);
|
|
373
|
+
CHECK_MATRIX_COMPLEX(argv[6]);
|
|
374
|
+
Side = FIX2INT(argv[0]);
|
|
375
|
+
Uplo = FIX2INT(argv[1]);
|
|
376
|
+
Data_Get_Struct(argv[2], gsl_complex, pa);
|
|
377
|
+
Data_Get_Struct(argv[3], gsl_matrix_complex, A);
|
|
378
|
+
Data_Get_Struct(argv[4], gsl_matrix_complex, B);
|
|
379
|
+
Data_Get_Struct(argv[5], gsl_complex, pb);
|
|
380
|
+
Data_Get_Struct(argv[6], gsl_matrix_complex, C);
|
|
381
|
+
break;
|
|
382
|
+
default:
|
|
383
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 7)", argc);
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
gsl_blas_zhemm(Side, Uplo, alpha, A, B, beta, C);
|
|
387
|
+
if (flag == 1) return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, C);
|
|
388
|
+
else return argv[6];
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
static VALUE rb_gsl_blas_dtrmm(VALUE obj, VALUE s, VALUE u, VALUE ta,
|
|
392
|
+
VALUE d, VALUE a, VALUE aa, VALUE bb)
|
|
393
|
+
{
|
|
394
|
+
gsl_matrix *A = NULL, *B = NULL;
|
|
395
|
+
double alpha;
|
|
396
|
+
CBLAS_SIDE_t Side;
|
|
397
|
+
CBLAS_UPLO_t Uplo;
|
|
398
|
+
CBLAS_TRANSPOSE_t TransA;
|
|
399
|
+
CBLAS_DIAG_t Diag;
|
|
400
|
+
CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d);
|
|
401
|
+
Need_Float(a);
|
|
402
|
+
CHECK_MATRIX(aa); CHECK_MATRIX(bb);
|
|
403
|
+
Side = FIX2INT(s);
|
|
404
|
+
Uplo = FIX2INT(u);
|
|
405
|
+
TransA = FIX2INT(ta);
|
|
406
|
+
Diag = FIX2INT(d);
|
|
407
|
+
alpha = NUM2DBL(a);
|
|
408
|
+
Data_Get_Struct(aa, gsl_matrix, A);
|
|
409
|
+
Data_Get_Struct(bb, gsl_matrix, B);
|
|
410
|
+
gsl_blas_dtrmm(Side, Uplo, TransA, Diag, alpha, A, B);
|
|
411
|
+
return bb;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
static VALUE rb_gsl_blas_dtrmm2(VALUE obj, VALUE s, VALUE u, VALUE ta,
|
|
415
|
+
VALUE d, VALUE a, VALUE aa, VALUE bb)
|
|
416
|
+
{
|
|
417
|
+
gsl_matrix *A = NULL, *B = NULL, *Bnew = NULL;
|
|
418
|
+
double alpha;
|
|
419
|
+
CBLAS_SIDE_t Side;
|
|
420
|
+
CBLAS_UPLO_t Uplo;
|
|
421
|
+
CBLAS_TRANSPOSE_t TransA;
|
|
422
|
+
CBLAS_DIAG_t Diag;
|
|
423
|
+
CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d);
|
|
424
|
+
Need_Float(a);
|
|
425
|
+
CHECK_MATRIX(aa); CHECK_MATRIX(bb);
|
|
426
|
+
Side = FIX2INT(s);
|
|
427
|
+
Uplo = FIX2INT(u);
|
|
428
|
+
TransA = FIX2INT(ta);
|
|
429
|
+
Diag = FIX2INT(d);
|
|
430
|
+
alpha = NUM2DBL(a);
|
|
431
|
+
Data_Get_Struct(aa, gsl_matrix, A);
|
|
432
|
+
Data_Get_Struct(bb, gsl_matrix, B);
|
|
433
|
+
Bnew = gsl_matrix_alloc(B->size1, B->size2);
|
|
434
|
+
gsl_matrix_memcpy(Bnew, B);
|
|
435
|
+
gsl_blas_dtrmm(Side, Uplo, TransA, Diag, alpha, A, Bnew);
|
|
436
|
+
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Bnew);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
static VALUE rb_gsl_blas_ztrmm(VALUE obj, VALUE s, VALUE u, VALUE ta,
|
|
440
|
+
VALUE d, VALUE a, VALUE aa, VALUE bb)
|
|
441
|
+
{
|
|
442
|
+
gsl_matrix_complex *A = NULL, *B = NULL;
|
|
443
|
+
gsl_complex alpha, *pa = α
|
|
444
|
+
CBLAS_SIDE_t Side;
|
|
445
|
+
CBLAS_UPLO_t Uplo;
|
|
446
|
+
CBLAS_TRANSPOSE_t TransA;
|
|
447
|
+
CBLAS_DIAG_t Diag;
|
|
448
|
+
CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d);
|
|
449
|
+
CHECK_COMPLEX(a);
|
|
450
|
+
CHECK_MATRIX_COMPLEX(aa);
|
|
451
|
+
CHECK_MATRIX_COMPLEX(bb);
|
|
452
|
+
Side = FIX2INT(s);
|
|
453
|
+
Uplo = FIX2INT(u);
|
|
454
|
+
TransA = FIX2INT(ta);
|
|
455
|
+
Diag = FIX2INT(d);
|
|
456
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
457
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
458
|
+
Data_Get_Struct(bb, gsl_matrix_complex, B);
|
|
459
|
+
gsl_blas_ztrmm(Side, Uplo, TransA, Diag, alpha, A, B);
|
|
460
|
+
return bb;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
static VALUE rb_gsl_blas_ztrmm2(VALUE obj, VALUE s, VALUE u, VALUE ta,
|
|
464
|
+
VALUE d, VALUE a, VALUE aa, VALUE bb)
|
|
465
|
+
{
|
|
466
|
+
gsl_matrix_complex *A = NULL, *B = NULL, *Bnew = NULL;
|
|
467
|
+
gsl_complex alpha, *pa = α
|
|
468
|
+
CBLAS_SIDE_t Side;
|
|
469
|
+
CBLAS_UPLO_t Uplo;
|
|
470
|
+
CBLAS_TRANSPOSE_t TransA;
|
|
471
|
+
CBLAS_DIAG_t Diag;
|
|
472
|
+
CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d);
|
|
473
|
+
CHECK_COMPLEX(a);
|
|
474
|
+
CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(bb);
|
|
475
|
+
Side = FIX2INT(s);
|
|
476
|
+
Uplo = FIX2INT(u);
|
|
477
|
+
TransA = FIX2INT(ta);
|
|
478
|
+
Diag = FIX2INT(d);
|
|
479
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
480
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
481
|
+
Data_Get_Struct(bb, gsl_matrix_complex, B);
|
|
482
|
+
Bnew = gsl_matrix_complex_alloc(B->size1, B->size2);
|
|
483
|
+
gsl_matrix_complex_memcpy(Bnew, B);
|
|
484
|
+
gsl_blas_ztrmm(Side, Uplo, TransA, Diag, alpha, A, Bnew);
|
|
485
|
+
return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Bnew);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
static VALUE rb_gsl_blas_dtrsm(VALUE obj, VALUE s, VALUE u, VALUE ta,
|
|
489
|
+
VALUE d, VALUE a, VALUE aa, VALUE bb)
|
|
490
|
+
{
|
|
491
|
+
gsl_matrix *A = NULL, *B = NULL;
|
|
492
|
+
double alpha;
|
|
493
|
+
CBLAS_SIDE_t Side;
|
|
494
|
+
CBLAS_UPLO_t Uplo;
|
|
495
|
+
CBLAS_TRANSPOSE_t TransA;
|
|
496
|
+
CBLAS_DIAG_t Diag;
|
|
497
|
+
CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d);
|
|
498
|
+
Need_Float(a);
|
|
499
|
+
CHECK_MATRIX(aa); CHECK_MATRIX(bb);
|
|
500
|
+
Side = FIX2INT(s);
|
|
501
|
+
Uplo = FIX2INT(u);
|
|
502
|
+
TransA = FIX2INT(ta);
|
|
503
|
+
Diag = FIX2INT(d);
|
|
504
|
+
alpha = NUM2DBL(a);
|
|
505
|
+
Data_Get_Struct(aa, gsl_matrix, A);
|
|
506
|
+
Data_Get_Struct(bb, gsl_matrix, B);
|
|
507
|
+
gsl_blas_dtrsm(Side, Uplo, TransA, Diag, alpha, A, B);
|
|
508
|
+
return bb;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
static VALUE rb_gsl_blas_dtrsm2(VALUE obj, VALUE s, VALUE u, VALUE ta,
|
|
512
|
+
VALUE d, VALUE a, VALUE aa, VALUE bb)
|
|
513
|
+
{
|
|
514
|
+
gsl_matrix *A = NULL, *B = NULL, *Bnew = NULL;
|
|
515
|
+
double alpha;
|
|
516
|
+
CBLAS_SIDE_t Side;
|
|
517
|
+
CBLAS_UPLO_t Uplo;
|
|
518
|
+
CBLAS_TRANSPOSE_t TransA;
|
|
519
|
+
CBLAS_DIAG_t Diag;
|
|
520
|
+
CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d);
|
|
521
|
+
Need_Float(a);
|
|
522
|
+
CHECK_MATRIX(aa); CHECK_MATRIX(bb);
|
|
523
|
+
Side = FIX2INT(s);
|
|
524
|
+
Uplo = FIX2INT(u);
|
|
525
|
+
TransA = FIX2INT(ta);
|
|
526
|
+
Diag = FIX2INT(d);
|
|
527
|
+
alpha = NUM2DBL(a);
|
|
528
|
+
Data_Get_Struct(aa, gsl_matrix, A);
|
|
529
|
+
Data_Get_Struct(bb, gsl_matrix, B);
|
|
530
|
+
Bnew = gsl_matrix_alloc(B->size1, B->size2);
|
|
531
|
+
gsl_matrix_memcpy(Bnew, B);
|
|
532
|
+
gsl_blas_dtrsm(Side, Uplo, TransA, Diag, alpha, A, Bnew);
|
|
533
|
+
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Bnew);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
static VALUE rb_gsl_blas_ztrsm(VALUE obj, VALUE s, VALUE u, VALUE ta,
|
|
537
|
+
VALUE d, VALUE a, VALUE aa, VALUE bb)
|
|
538
|
+
{
|
|
539
|
+
gsl_matrix_complex *A = NULL, *B = NULL;
|
|
540
|
+
gsl_complex alpha, *pa = α
|
|
541
|
+
CBLAS_SIDE_t Side;
|
|
542
|
+
CBLAS_UPLO_t Uplo;
|
|
543
|
+
CBLAS_TRANSPOSE_t TransA;
|
|
544
|
+
CBLAS_DIAG_t Diag;
|
|
545
|
+
CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d);
|
|
546
|
+
CHECK_COMPLEX(a);
|
|
547
|
+
CHECK_MATRIX_COMPLEX(aa);
|
|
548
|
+
CHECK_MATRIX_COMPLEX(bb);
|
|
549
|
+
Side = FIX2INT(s);
|
|
550
|
+
Uplo = FIX2INT(u);
|
|
551
|
+
TransA = FIX2INT(ta);
|
|
552
|
+
Diag = FIX2INT(d);
|
|
553
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
554
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
555
|
+
Data_Get_Struct(bb, gsl_matrix_complex, B);
|
|
556
|
+
gsl_blas_ztrsm(Side, Uplo, TransA, Diag, alpha, A, B);
|
|
557
|
+
return bb;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
static VALUE rb_gsl_blas_ztrsm2(VALUE obj, VALUE s, VALUE u, VALUE ta,
|
|
561
|
+
VALUE d, VALUE a, VALUE aa, VALUE bb)
|
|
562
|
+
{
|
|
563
|
+
gsl_matrix_complex *A = NULL, *B = NULL, *Bnew = NULL;
|
|
564
|
+
gsl_complex alpha, *pa = α
|
|
565
|
+
CBLAS_SIDE_t Side;
|
|
566
|
+
CBLAS_UPLO_t Uplo;
|
|
567
|
+
CBLAS_TRANSPOSE_t TransA;
|
|
568
|
+
CBLAS_DIAG_t Diag;
|
|
569
|
+
CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d);
|
|
570
|
+
CHECK_COMPLEX(a);
|
|
571
|
+
CHECK_MATRIX_COMPLEX(aa);
|
|
572
|
+
CHECK_MATRIX_COMPLEX(bb);
|
|
573
|
+
Side = FIX2INT(s);
|
|
574
|
+
Uplo = FIX2INT(u);
|
|
575
|
+
TransA = FIX2INT(ta);
|
|
576
|
+
Diag = FIX2INT(d);
|
|
577
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
578
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
579
|
+
Data_Get_Struct(bb, gsl_matrix_complex, B);
|
|
580
|
+
Bnew = gsl_matrix_complex_alloc(B->size1, B->size2);
|
|
581
|
+
gsl_matrix_complex_memcpy(Bnew, B);
|
|
582
|
+
gsl_blas_ztrsm(Side, Uplo, TransA, Diag, alpha, A, Bnew);
|
|
583
|
+
return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Bnew);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
static VALUE rb_gsl_blas_dsyrk(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
587
|
+
VALUE b, VALUE cc)
|
|
588
|
+
{
|
|
589
|
+
gsl_matrix *A = NULL, *C = NULL;
|
|
590
|
+
double alpha, beta;
|
|
591
|
+
CBLAS_UPLO_t Uplo;
|
|
592
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
593
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
594
|
+
Need_Float(a); Need_Float(b);
|
|
595
|
+
CHECK_MATRIX(aa); CHECK_MATRIX(cc);
|
|
596
|
+
Uplo = FIX2INT(u);
|
|
597
|
+
Trans = FIX2INT(t);
|
|
598
|
+
alpha = NUM2DBL(a);
|
|
599
|
+
beta = NUM2DBL(b);
|
|
600
|
+
Data_Get_Struct(aa, gsl_matrix, A);
|
|
601
|
+
Data_Get_Struct(cc, gsl_matrix, C);
|
|
602
|
+
gsl_blas_dsyrk(Uplo, Trans, alpha, A, beta, C);
|
|
603
|
+
return cc;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
static VALUE rb_gsl_blas_dsyrk2(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
607
|
+
VALUE b, VALUE cc)
|
|
608
|
+
{
|
|
609
|
+
gsl_matrix *A = NULL, *C = NULL, *Cnew = NULL;
|
|
610
|
+
double alpha, beta;
|
|
611
|
+
CBLAS_UPLO_t Uplo;
|
|
612
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
613
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
614
|
+
Need_Float(a); Need_Float(b);
|
|
615
|
+
CHECK_MATRIX(aa); CHECK_MATRIX(cc);
|
|
616
|
+
Uplo = FIX2INT(u);
|
|
617
|
+
Trans = FIX2INT(t);
|
|
618
|
+
alpha = NUM2DBL(a);
|
|
619
|
+
beta = NUM2DBL(b);
|
|
620
|
+
Data_Get_Struct(aa, gsl_matrix, A);
|
|
621
|
+
Data_Get_Struct(cc, gsl_matrix, C);
|
|
622
|
+
Cnew = gsl_matrix_alloc(C->size1, C->size2);
|
|
623
|
+
gsl_matrix_memcpy(Cnew, C);
|
|
624
|
+
gsl_blas_dsyrk(Uplo, Trans, alpha, A, beta, Cnew);
|
|
625
|
+
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Cnew);
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
static VALUE rb_gsl_blas_zsyrk(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
629
|
+
VALUE b, VALUE cc)
|
|
630
|
+
{
|
|
631
|
+
gsl_matrix_complex *A = NULL, *C = NULL;
|
|
632
|
+
gsl_complex alpha, beta, *pa = &alpha, *pb = β
|
|
633
|
+
CBLAS_UPLO_t Uplo;
|
|
634
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
635
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
636
|
+
CHECK_COMPLEX(a); CHECK_COMPLEX(b);
|
|
637
|
+
CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(cc);
|
|
638
|
+
Uplo = FIX2INT(u);
|
|
639
|
+
Trans = FIX2INT(t);
|
|
640
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
641
|
+
Data_Get_Struct(b, gsl_complex, pb);
|
|
642
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
643
|
+
Data_Get_Struct(cc, gsl_matrix_complex, C);
|
|
644
|
+
gsl_blas_zsyrk(Uplo, Trans, alpha, A, beta, C);
|
|
645
|
+
return cc;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
static VALUE rb_gsl_blas_zsyrk2(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
649
|
+
VALUE b, VALUE cc)
|
|
650
|
+
{
|
|
651
|
+
gsl_matrix_complex *A = NULL, *C = NULL, *Cnew = NULL;
|
|
652
|
+
gsl_complex alpha, beta, *pa = &alpha, *pb = β
|
|
653
|
+
CBLAS_UPLO_t Uplo;
|
|
654
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
655
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
656
|
+
CHECK_COMPLEX(a); CHECK_COMPLEX(b);
|
|
657
|
+
CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(cc);
|
|
658
|
+
Uplo = FIX2INT(u);
|
|
659
|
+
Trans = FIX2INT(t);
|
|
660
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
661
|
+
Data_Get_Struct(b, gsl_complex, pb);
|
|
662
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
663
|
+
Data_Get_Struct(cc, gsl_matrix_complex, C);
|
|
664
|
+
Cnew = gsl_matrix_complex_alloc(C->size1, C->size2);
|
|
665
|
+
gsl_matrix_complex_memcpy(Cnew, C);
|
|
666
|
+
gsl_blas_zsyrk(Uplo, Trans, alpha, A, beta, Cnew);
|
|
667
|
+
return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Cnew);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
static VALUE rb_gsl_blas_zherk(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
671
|
+
VALUE b, VALUE cc)
|
|
672
|
+
{
|
|
673
|
+
gsl_matrix_complex *A = NULL, *C = NULL;
|
|
674
|
+
double alpha, beta;
|
|
675
|
+
CBLAS_UPLO_t Uplo;
|
|
676
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
677
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
678
|
+
Need_Float(a); Need_Float(b);
|
|
679
|
+
CHECK_MATRIX_COMPLEX(aa);
|
|
680
|
+
CHECK_MATRIX_COMPLEX(cc);
|
|
681
|
+
Uplo = FIX2INT(u);
|
|
682
|
+
Trans = FIX2INT(t);
|
|
683
|
+
alpha = NUM2DBL(a);
|
|
684
|
+
beta = NUM2DBL(b);
|
|
685
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
686
|
+
Data_Get_Struct(cc, gsl_matrix_complex, C);
|
|
687
|
+
gsl_blas_zherk(Uplo, Trans, alpha, A, beta, C);
|
|
688
|
+
return cc;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
static VALUE rb_gsl_blas_zherk2(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
692
|
+
VALUE b, VALUE cc)
|
|
693
|
+
{
|
|
694
|
+
gsl_matrix_complex *A = NULL, *C = NULL, *Cnew = NULL;
|
|
695
|
+
double alpha, beta;
|
|
696
|
+
CBLAS_UPLO_t Uplo;
|
|
697
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
698
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
699
|
+
Need_Float(a); Need_Float(b);
|
|
700
|
+
CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(cc);
|
|
701
|
+
Uplo = FIX2INT(u);
|
|
702
|
+
Trans = FIX2INT(t);
|
|
703
|
+
alpha = NUM2DBL(a);
|
|
704
|
+
beta = NUM2DBL(b);
|
|
705
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
706
|
+
Data_Get_Struct(cc, gsl_matrix_complex, C);
|
|
707
|
+
Cnew = gsl_matrix_complex_alloc(C->size1, C->size2);
|
|
708
|
+
gsl_matrix_complex_memcpy(Cnew, C);
|
|
709
|
+
gsl_blas_zherk(Uplo, Trans, alpha, A, beta, Cnew);
|
|
710
|
+
return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Cnew);
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
static VALUE rb_gsl_blas_dsyr2k(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
714
|
+
VALUE bb, VALUE b, VALUE cc)
|
|
715
|
+
{
|
|
716
|
+
gsl_matrix *A = NULL, *B = NULL, *C = NULL;
|
|
717
|
+
double alpha, beta;
|
|
718
|
+
CBLAS_UPLO_t Uplo;
|
|
719
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
720
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
721
|
+
Need_Float(a); Need_Float(b);
|
|
722
|
+
CHECK_MATRIX(aa); CHECK_MATRIX(bb); CHECK_MATRIX(cc);
|
|
723
|
+
Uplo = FIX2INT(u);
|
|
724
|
+
Trans = FIX2INT(t);
|
|
725
|
+
alpha = NUM2DBL(a);
|
|
726
|
+
Data_Get_Struct(aa, gsl_matrix, A);
|
|
727
|
+
Data_Get_Struct(bb, gsl_matrix, B);
|
|
728
|
+
beta = NUM2DBL(b);
|
|
729
|
+
Data_Get_Struct(cc, gsl_matrix, C);
|
|
730
|
+
gsl_blas_dsyr2k(Uplo, Trans, alpha, A, B, beta, C);
|
|
731
|
+
return cc;
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
static VALUE rb_gsl_blas_dsyr2k2(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
735
|
+
VALUE bb, VALUE b, VALUE cc)
|
|
736
|
+
{
|
|
737
|
+
gsl_matrix *A = NULL, *B = NULL, *C = NULL, *Cnew = NULL;
|
|
738
|
+
double alpha, beta;
|
|
739
|
+
CBLAS_UPLO_t Uplo;
|
|
740
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
741
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
742
|
+
Need_Float(a); Need_Float(b);
|
|
743
|
+
CHECK_MATRIX(aa); CHECK_MATRIX(bb); CHECK_MATRIX(cc);
|
|
744
|
+
Uplo = FIX2INT(u);
|
|
745
|
+
Trans = FIX2INT(t);
|
|
746
|
+
alpha = NUM2DBL(a);
|
|
747
|
+
Data_Get_Struct(aa, gsl_matrix, A);
|
|
748
|
+
Data_Get_Struct(bb, gsl_matrix, B);
|
|
749
|
+
beta = NUM2DBL(b);
|
|
750
|
+
Data_Get_Struct(cc, gsl_matrix, C);
|
|
751
|
+
Cnew = gsl_matrix_alloc(C->size1, C->size2);
|
|
752
|
+
gsl_matrix_memcpy(Cnew, C);
|
|
753
|
+
gsl_blas_dsyr2k(Uplo, Trans, alpha, A, B, beta, Cnew);
|
|
754
|
+
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Cnew);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
static VALUE rb_gsl_blas_zsyr2k(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
758
|
+
VALUE bb, VALUE b, VALUE cc)
|
|
759
|
+
{
|
|
760
|
+
gsl_matrix_complex *A = NULL, *B = NULL, *C = NULL;
|
|
761
|
+
gsl_complex alpha, beta, *pa = &alpha, *pb = β
|
|
762
|
+
CBLAS_UPLO_t Uplo;
|
|
763
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
764
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
765
|
+
CHECK_COMPLEX(a); CHECK_COMPLEX(b);
|
|
766
|
+
CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(bb); CHECK_MATRIX_COMPLEX(cc);
|
|
767
|
+
Uplo = FIX2INT(u);
|
|
768
|
+
Trans = FIX2INT(t);
|
|
769
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
770
|
+
Data_Get_Struct(b, gsl_complex, pb);
|
|
771
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
772
|
+
Data_Get_Struct(bb, gsl_matrix_complex, B);
|
|
773
|
+
Data_Get_Struct(cc, gsl_matrix_complex, C);
|
|
774
|
+
gsl_blas_zsyr2k(Uplo, Trans, alpha, A, B, beta, C);
|
|
775
|
+
return cc;
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
static VALUE rb_gsl_blas_zsyr2k2(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
779
|
+
VALUE bb, VALUE b, VALUE cc)
|
|
780
|
+
{
|
|
781
|
+
gsl_matrix_complex *A = NULL, *B = NULL, *C = NULL, *Cnew = NULL;
|
|
782
|
+
gsl_complex alpha, beta, *pa = &alpha, *pb = β
|
|
783
|
+
CBLAS_UPLO_t Uplo;
|
|
784
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
785
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
786
|
+
CHECK_COMPLEX(a); CHECK_COMPLEX(b);
|
|
787
|
+
CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(bb); CHECK_MATRIX_COMPLEX(cc);
|
|
788
|
+
Uplo = FIX2INT(u);
|
|
789
|
+
Trans = FIX2INT(t);
|
|
790
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
791
|
+
Data_Get_Struct(b, gsl_complex, pb);
|
|
792
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
793
|
+
Data_Get_Struct(bb, gsl_matrix_complex, B);
|
|
794
|
+
Data_Get_Struct(cc, gsl_matrix_complex, C);
|
|
795
|
+
Cnew = gsl_matrix_complex_alloc(C->size1, C->size2);
|
|
796
|
+
gsl_matrix_complex_memcpy(Cnew, C);
|
|
797
|
+
gsl_blas_zsyr2k(Uplo, Trans, alpha, A, B, beta, Cnew);
|
|
798
|
+
return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Cnew);
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
static VALUE rb_gsl_blas_zher2k(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
802
|
+
VALUE bb, VALUE b, VALUE cc)
|
|
803
|
+
{
|
|
804
|
+
gsl_matrix_complex *A = NULL, *B = NULL, *C = NULL;
|
|
805
|
+
gsl_complex alpha, *pa = α
|
|
806
|
+
double beta;
|
|
807
|
+
CBLAS_UPLO_t Uplo;
|
|
808
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
809
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
810
|
+
CHECK_COMPLEX(a);
|
|
811
|
+
Need_Float(b);
|
|
812
|
+
CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(bb); CHECK_MATRIX_COMPLEX(cc);
|
|
813
|
+
Uplo = FIX2INT(u);
|
|
814
|
+
Trans = FIX2INT(t);
|
|
815
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
816
|
+
beta = NUM2DBL(b);
|
|
817
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
818
|
+
Data_Get_Struct(bb, gsl_matrix_complex, B);
|
|
819
|
+
Data_Get_Struct(cc, gsl_matrix_complex, C);
|
|
820
|
+
gsl_blas_zher2k(Uplo, Trans, alpha, A, B, beta, C);
|
|
821
|
+
return cc;
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
static VALUE rb_gsl_blas_zher2k2(VALUE obj, VALUE u, VALUE t, VALUE a, VALUE aa,
|
|
825
|
+
VALUE bb, VALUE b, VALUE cc)
|
|
826
|
+
{
|
|
827
|
+
gsl_matrix_complex *A = NULL, *B = NULL, *C = NULL, *Cnew = NULL;
|
|
828
|
+
gsl_complex alpha, *pa = α
|
|
829
|
+
double beta;
|
|
830
|
+
CBLAS_UPLO_t Uplo;
|
|
831
|
+
CBLAS_TRANSPOSE_t Trans;
|
|
832
|
+
CHECK_FIXNUM(u); CHECK_FIXNUM(t);
|
|
833
|
+
CHECK_COMPLEX(a);
|
|
834
|
+
Need_Float(b);
|
|
835
|
+
CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(bb); CHECK_MATRIX_COMPLEX(cc);
|
|
836
|
+
Uplo = FIX2INT(u);
|
|
837
|
+
Trans = FIX2INT(t);
|
|
838
|
+
Data_Get_Struct(a, gsl_complex, pa);
|
|
839
|
+
beta = NUM2DBL(b);
|
|
840
|
+
Data_Get_Struct(aa, gsl_matrix_complex, A);
|
|
841
|
+
Data_Get_Struct(bb, gsl_matrix_complex, B);
|
|
842
|
+
Data_Get_Struct(cc, gsl_matrix_complex, C);
|
|
843
|
+
Cnew = gsl_matrix_complex_alloc(C->size1, C->size2);
|
|
844
|
+
gsl_matrix_complex_memcpy(Cnew, C);
|
|
845
|
+
gsl_blas_zher2k(Uplo, Trans, alpha, A, B, beta, Cnew);
|
|
846
|
+
return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Cnew);
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
void Init_gsl_blas3(VALUE module)
|
|
850
|
+
{
|
|
851
|
+
rb_define_module_function(module, "dgemm", rb_gsl_blas_dgemm, -1);
|
|
852
|
+
rb_define_module_function(module, "zgemm", rb_gsl_blas_zgemm, -1);
|
|
853
|
+
|
|
854
|
+
rb_define_module_function(module, "dsymm", rb_gsl_blas_dsymm, -1);
|
|
855
|
+
rb_define_module_function(module, "zsymm", rb_gsl_blas_zsymm, -1);
|
|
856
|
+
rb_define_module_function(module, "zhemm", rb_gsl_blas_zhemm, -1);
|
|
857
|
+
|
|
858
|
+
rb_define_module_function(module, "dtrmm!", rb_gsl_blas_dtrmm, 7);
|
|
859
|
+
rb_define_module_function(module, "dtrmm", rb_gsl_blas_dtrmm2, 7);
|
|
860
|
+
rb_define_module_function(module, "ztrmm!", rb_gsl_blas_ztrmm, 7);
|
|
861
|
+
rb_define_module_function(module, "ztrmm", rb_gsl_blas_ztrmm2, 7);
|
|
862
|
+
|
|
863
|
+
rb_define_module_function(module, "dtrsm!", rb_gsl_blas_dtrsm, 7);
|
|
864
|
+
rb_define_module_function(module, "dtrsm", rb_gsl_blas_dtrsm2, 7);
|
|
865
|
+
rb_define_module_function(module, "ztrsm!", rb_gsl_blas_ztrsm, 7);
|
|
866
|
+
rb_define_module_function(module, "ztrsm", rb_gsl_blas_ztrsm2, 7);
|
|
867
|
+
|
|
868
|
+
rb_define_module_function(module, "dsyrk!", rb_gsl_blas_dsyrk, 6);
|
|
869
|
+
rb_define_module_function(module, "dsyrk", rb_gsl_blas_dsyrk2, 6);
|
|
870
|
+
rb_define_module_function(module, "zsyrk!", rb_gsl_blas_zsyrk, 6);
|
|
871
|
+
rb_define_module_function(module, "zsyrk", rb_gsl_blas_zsyrk2, 6);
|
|
872
|
+
rb_define_module_function(module, "zherk!", rb_gsl_blas_zherk, 6);
|
|
873
|
+
rb_define_module_function(module, "zherk", rb_gsl_blas_zherk2, 6);
|
|
874
|
+
|
|
875
|
+
rb_define_module_function(module, "dsyr2k!", rb_gsl_blas_dsyr2k, 7);
|
|
876
|
+
rb_define_module_function(module, "dsyr2k", rb_gsl_blas_dsyr2k2, 7);
|
|
877
|
+
rb_define_module_function(module, "zsyr2k!", rb_gsl_blas_zsyr2k, 7);
|
|
878
|
+
rb_define_module_function(module, "zsyr2k", rb_gsl_blas_zsyr2k2, 7);
|
|
879
|
+
rb_define_module_function(module, "zher2k!", rb_gsl_blas_zher2k, 7);
|
|
880
|
+
rb_define_module_function(module, "zher2k", rb_gsl_blas_zher2k2, 7);
|
|
881
|
+
}
|