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.
Files changed (158) hide show
  1. data/README.rdoc +29 -0
  2. data/Rakefile +54 -0
  3. data/VERSION +2 -0
  4. data/ext/MANIFEST +119 -0
  5. data/ext/alf.c +206 -0
  6. data/ext/array.c +666 -0
  7. data/ext/array_complex.c +247 -0
  8. data/ext/blas.c +29 -0
  9. data/ext/blas1.c +731 -0
  10. data/ext/blas2.c +1093 -0
  11. data/ext/blas3.c +881 -0
  12. data/ext/block.c +44 -0
  13. data/ext/block_source.c +886 -0
  14. data/ext/bspline.c +130 -0
  15. data/ext/bundle.c +3 -0
  16. data/ext/cdf.c +754 -0
  17. data/ext/cheb.c +542 -0
  18. data/ext/combination.c +283 -0
  19. data/ext/common.c +325 -0
  20. data/ext/complex.c +1004 -0
  21. data/ext/const.c +673 -0
  22. data/ext/const_additional.c +120 -0
  23. data/ext/cqp.c +283 -0
  24. data/ext/deriv.c +195 -0
  25. data/ext/dht.c +361 -0
  26. data/ext/diff.c +166 -0
  27. data/ext/dirac.c +395 -0
  28. data/ext/eigen.c +2373 -0
  29. data/ext/error.c +194 -0
  30. data/ext/extconf.rb +281 -0
  31. data/ext/fcmp.c +66 -0
  32. data/ext/fft.c +1092 -0
  33. data/ext/fit.c +205 -0
  34. data/ext/fresnel.c +312 -0
  35. data/ext/function.c +524 -0
  36. data/ext/geometry.c +139 -0
  37. data/ext/graph.c +1638 -0
  38. data/ext/gsl.c +271 -0
  39. data/ext/gsl_narray.c +653 -0
  40. data/ext/histogram.c +1995 -0
  41. data/ext/histogram2d.c +1068 -0
  42. data/ext/histogram3d.c +884 -0
  43. data/ext/histogram3d_source.c +750 -0
  44. data/ext/histogram_find.c +101 -0
  45. data/ext/histogram_oper.c +159 -0
  46. data/ext/ieee.c +98 -0
  47. data/ext/integration.c +1138 -0
  48. data/ext/interp.c +512 -0
  49. data/ext/jacobi.c +739 -0
  50. data/ext/linalg.c +4047 -0
  51. data/ext/linalg_complex.c +741 -0
  52. data/ext/math.c +725 -0
  53. data/ext/matrix.c +39 -0
  54. data/ext/matrix_complex.c +1732 -0
  55. data/ext/matrix_double.c +560 -0
  56. data/ext/matrix_int.c +256 -0
  57. data/ext/matrix_source.c +2733 -0
  58. data/ext/min.c +250 -0
  59. data/ext/monte.c +992 -0
  60. data/ext/multifit.c +1879 -0
  61. data/ext/multimin.c +808 -0
  62. data/ext/multimin_fsdf.c +156 -0
  63. data/ext/multiroots.c +955 -0
  64. data/ext/ndlinear.c +321 -0
  65. data/ext/nmf.c +167 -0
  66. data/ext/nmf_wrap.c +72 -0
  67. data/ext/ntuple.c +469 -0
  68. data/ext/odeiv.c +959 -0
  69. data/ext/ool.c +879 -0
  70. data/ext/oper_complex_source.c +253 -0
  71. data/ext/permutation.c +596 -0
  72. data/ext/poly.c +42 -0
  73. data/ext/poly2.c +265 -0
  74. data/ext/poly_source.c +1885 -0
  75. data/ext/qrng.c +171 -0
  76. data/ext/randist.c +1873 -0
  77. data/ext/rational.c +480 -0
  78. data/ext/rng.c +612 -0
  79. data/ext/root.c +408 -0
  80. data/ext/sf.c +1494 -0
  81. data/ext/sf_airy.c +200 -0
  82. data/ext/sf_bessel.c +867 -0
  83. data/ext/sf_clausen.c +28 -0
  84. data/ext/sf_coulomb.c +206 -0
  85. data/ext/sf_coupling.c +118 -0
  86. data/ext/sf_dawson.c +29 -0
  87. data/ext/sf_debye.c +157 -0
  88. data/ext/sf_dilog.c +42 -0
  89. data/ext/sf_elementary.c +44 -0
  90. data/ext/sf_ellint.c +206 -0
  91. data/ext/sf_elljac.c +29 -0
  92. data/ext/sf_erfc.c +93 -0
  93. data/ext/sf_exp.c +164 -0
  94. data/ext/sf_expint.c +211 -0
  95. data/ext/sf_fermi_dirac.c +148 -0
  96. data/ext/sf_gamma.c +344 -0
  97. data/ext/sf_gegenbauer.c +96 -0
  98. data/ext/sf_hyperg.c +197 -0
  99. data/ext/sf_laguerre.c +112 -0
  100. data/ext/sf_lambert.c +47 -0
  101. data/ext/sf_legendre.c +367 -0
  102. data/ext/sf_log.c +104 -0
  103. data/ext/sf_mathieu.c +238 -0
  104. data/ext/sf_power.c +46 -0
  105. data/ext/sf_psi.c +98 -0
  106. data/ext/sf_synchrotron.c +48 -0
  107. data/ext/sf_transport.c +76 -0
  108. data/ext/sf_trigonometric.c +207 -0
  109. data/ext/sf_zeta.c +119 -0
  110. data/ext/signal.c +310 -0
  111. data/ext/siman.c +718 -0
  112. data/ext/sort.c +208 -0
  113. data/ext/spline.c +395 -0
  114. data/ext/stats.c +799 -0
  115. data/ext/sum.c +168 -0
  116. data/ext/tamu_anova.c +56 -0
  117. data/ext/tensor.c +38 -0
  118. data/ext/tensor_source.c +1123 -0
  119. data/ext/vector.c +38 -0
  120. data/ext/vector_complex.c +2236 -0
  121. data/ext/vector_double.c +1433 -0
  122. data/ext/vector_int.c +204 -0
  123. data/ext/vector_source.c +3329 -0
  124. data/ext/wavelet.c +937 -0
  125. data/include/rb_gsl.h +151 -0
  126. data/include/rb_gsl_array.h +238 -0
  127. data/include/rb_gsl_cheb.h +21 -0
  128. data/include/rb_gsl_common.h +343 -0
  129. data/include/rb_gsl_complex.h +25 -0
  130. data/include/rb_gsl_const.h +29 -0
  131. data/include/rb_gsl_dirac.h +13 -0
  132. data/include/rb_gsl_eigen.h +17 -0
  133. data/include/rb_gsl_fft.h +62 -0
  134. data/include/rb_gsl_fit.h +25 -0
  135. data/include/rb_gsl_function.h +27 -0
  136. data/include/rb_gsl_graph.h +70 -0
  137. data/include/rb_gsl_histogram.h +63 -0
  138. data/include/rb_gsl_histogram3d.h +97 -0
  139. data/include/rb_gsl_integration.h +17 -0
  140. data/include/rb_gsl_interp.h +46 -0
  141. data/include/rb_gsl_linalg.h +25 -0
  142. data/include/rb_gsl_math.h +26 -0
  143. data/include/rb_gsl_odeiv.h +21 -0
  144. data/include/rb_gsl_poly.h +71 -0
  145. data/include/rb_gsl_rational.h +37 -0
  146. data/include/rb_gsl_rng.h +21 -0
  147. data/include/rb_gsl_root.h +22 -0
  148. data/include/rb_gsl_sf.h +119 -0
  149. data/include/rb_gsl_statistics.h +17 -0
  150. data/include/rb_gsl_tensor.h +45 -0
  151. data/include/rb_gsl_with_narray.h +22 -0
  152. data/include/templates_off.h +87 -0
  153. data/include/templates_on.h +241 -0
  154. data/lib/gsl/gnuplot.rb +41 -0
  155. data/lib/gsl/oper.rb +68 -0
  156. data/lib/ool.rb +22 -0
  157. data/lib/ool/conmin.rb +30 -0
  158. metadata +224 -0
@@ -0,0 +1,1093 @@
1
+ /*
2
+ blas2.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 void define_const(VALUE module);
19
+
20
+ static void define_const(VALUE module)
21
+ {
22
+ rb_define_const(module, "CblasRowMajor", INT2FIX(CblasRowMajor));
23
+ rb_define_const(module, "CblasColMajor", INT2FIX(CblasColMajor));
24
+ rb_define_const(module, "RowMajor", INT2FIX(CblasRowMajor));
25
+ rb_define_const(module, "ColMajor", INT2FIX(CblasColMajor));
26
+
27
+ rb_define_const(module, "CblasNoTrans", INT2FIX(CblasNoTrans));
28
+ rb_define_const(module, "CblasTrans", INT2FIX(CblasTrans));
29
+ rb_define_const(module, "CblasConjTrans", INT2FIX(CblasConjTrans));
30
+ rb_define_const(module, "NoTrans", INT2FIX(CblasNoTrans));
31
+ rb_define_const(module, "Trans", INT2FIX(CblasTrans));
32
+ rb_define_const(module, "ConjTrans", INT2FIX(CblasConjTrans));
33
+
34
+ rb_define_const(module, "CblasUpper", INT2FIX(CblasUpper));
35
+ rb_define_const(module, "CblasLower", INT2FIX(CblasLower));
36
+ rb_define_const(module, "Upper", INT2FIX(CblasUpper));
37
+ rb_define_const(module, "Lower", INT2FIX(CblasLower));
38
+
39
+ rb_define_const(module, "CblasNonUnit", INT2FIX(CblasNonUnit));
40
+ rb_define_const(module, "CblasUnit", INT2FIX(CblasUnit));
41
+ rb_define_const(module, "NonUnit", INT2FIX(CblasNonUnit));
42
+ rb_define_const(module, "Unit", INT2FIX(CblasUnit));
43
+
44
+ rb_define_const(module, "CblasLeft", INT2FIX(CblasLeft));
45
+ rb_define_const(module, "CblasRight", INT2FIX(CblasRight));
46
+ rb_define_const(module, "Left", INT2FIX(CblasLeft));
47
+ rb_define_const(module, "Right", INT2FIX(CblasRight));
48
+ }
49
+
50
+ static VALUE rb_gsl_blas_dgemv(int argc, VALUE *argv, VALUE obj)
51
+ {
52
+ gsl_matrix *A = NULL;
53
+ gsl_vector *x = NULL, *y = NULL;
54
+ double a, b;
55
+ int type, istart, flag = 0;
56
+ switch (TYPE(obj)) {
57
+ case T_MODULE:
58
+ case T_CLASS:
59
+ case T_OBJECT:
60
+ if (argc < 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 4)",
61
+ argc);
62
+ CHECK_FIXNUM(argv[0]);
63
+ Need_Float(argv[1]);
64
+ CHECK_MATRIX(argv[2]);
65
+ CHECK_VECTOR(argv[3]);
66
+ type = FIX2INT(argv[0]);
67
+ a = NUM2DBL(argv[1]);
68
+ Data_Get_Struct(argv[2], gsl_matrix, A);
69
+ Data_Get_Struct(argv[3], gsl_vector, x);
70
+ istart = 4;
71
+ break;
72
+ default:
73
+ Data_Get_Struct(obj, gsl_matrix, A);
74
+ if (argc < 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 3)",
75
+ argc);
76
+ CHECK_FIXNUM(argv[0]);
77
+ Need_Float(argv[1]);
78
+ CHECK_VECTOR(argv[2]);
79
+ type = FIX2INT(argv[0]);
80
+ a = NUM2DBL(argv[1]);
81
+ Data_Get_Struct(argv[2], gsl_vector, x);
82
+ istart = 3;
83
+ break;
84
+ }
85
+ switch (argc - istart) {
86
+ case 2:
87
+ Need_Float(argv[istart]);
88
+ CHECK_VECTOR(argv[istart+1]);
89
+ b = NUM2DBL(argv[istart]);
90
+ Data_Get_Struct(argv[istart+1], gsl_vector, y);
91
+ break;
92
+ case 0:
93
+ b = 0.0;
94
+ y = gsl_vector_alloc(x->size);
95
+ flag = 1;
96
+ break;
97
+ default:
98
+ rb_raise(rb_eArgError, "wrong number of arguments");
99
+ break;
100
+ }
101
+ gsl_blas_dgemv(type, a, A, x, b, y);
102
+ if (flag == 1) return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, y);
103
+ else return argv[argc-1];
104
+
105
+ }
106
+
107
+ static VALUE rb_gsl_blas_dgemv2(int argc, VALUE *argv, VALUE obj)
108
+ {
109
+ gsl_matrix *A = NULL;
110
+ gsl_vector *x = NULL, *y, *ynew;
111
+ double a, b;
112
+ int type, istart, flag = 0;
113
+ switch (TYPE(obj)) {
114
+ case T_MODULE:
115
+ case T_CLASS:
116
+ case T_OBJECT:
117
+ if (argc < 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 4)",
118
+ argc);
119
+ CHECK_FIXNUM(argv[0]);
120
+ Need_Float(argv[1]);
121
+ CHECK_MATRIX(argv[2]);
122
+ CHECK_VECTOR(argv[3]);
123
+ type = FIX2INT(argv[0]);
124
+ a = NUM2DBL(argv[1]);
125
+ Data_Get_Struct(argv[2], gsl_matrix, A);
126
+ Data_Get_Struct(argv[3], gsl_vector, x);
127
+ istart = 4;
128
+ break;
129
+ default:
130
+ Data_Get_Struct(obj, gsl_matrix, A);
131
+ if (argc < 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 3)",
132
+ argc);
133
+ CHECK_FIXNUM(argv[0]);
134
+ Need_Float(argv[1]);
135
+ CHECK_VECTOR(argv[2]);
136
+ type = FIX2INT(argv[0]);
137
+ a = NUM2DBL(argv[1]);
138
+ Data_Get_Struct(argv[2], gsl_vector, x);
139
+ istart = 3;
140
+ break;
141
+ }
142
+ switch (argc - istart) {
143
+ case 2:
144
+ Need_Float(argv[istart]);
145
+ CHECK_VECTOR(argv[istart+1]);
146
+ b = NUM2DBL(argv[istart]);
147
+ Data_Get_Struct(argv[istart+1], gsl_vector, y);
148
+ break;
149
+ case 0:
150
+ b = 0.0;
151
+ y = gsl_vector_alloc(x->size);
152
+ flag = 1;
153
+ break;
154
+ default:
155
+ rb_raise(rb_eArgError, "wrong number of arguments");
156
+ break;
157
+ }
158
+ ynew = gsl_vector_alloc(y->size);
159
+ gsl_vector_memcpy(ynew, y);
160
+ gsl_blas_dgemv(type, a, A, x, b, ynew);
161
+ if (flag == 1) gsl_vector_free(y);
162
+ return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, ynew);
163
+ }
164
+
165
+ static VALUE rb_gsl_blas_zgemv(int argc, VALUE *argv, VALUE obj)
166
+ {
167
+ gsl_matrix_complex *A = NULL;
168
+ gsl_vector_complex *x = NULL, *y = NULL;
169
+ gsl_complex *a, *b, z;
170
+ int type, istart, flag = 0;
171
+ switch (TYPE(obj)) {
172
+ case T_MODULE:
173
+ case T_CLASS:
174
+ case T_OBJECT:
175
+ if (argc < 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 4)",
176
+ argc);
177
+ CHECK_FIXNUM(argv[0]);
178
+ CHECK_COMPLEX(argv[1]);
179
+ CHECK_MATRIX_COMPLEX(argv[2]);
180
+ CHECK_VECTOR_COMPLEX(argv[3]);
181
+ type = FIX2INT(argv[0]);
182
+ Data_Get_Struct(argv[1], gsl_complex, a);
183
+ Data_Get_Struct(argv[2], gsl_matrix_complex, A);
184
+ Data_Get_Struct(argv[3], gsl_vector_complex, x);
185
+ istart = 4;
186
+ break;
187
+ default:
188
+ Data_Get_Struct(obj, gsl_matrix_complex, A);
189
+ if (argc < 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 3)",
190
+ argc);
191
+ CHECK_FIXNUM(argv[0]);
192
+ CHECK_COMPLEX(argv[1]);
193
+ CHECK_VECTOR_COMPLEX(argv[2]);
194
+ type = FIX2INT(argv[0]);
195
+ Data_Get_Struct(argv[1], gsl_complex, a);
196
+ Data_Get_Struct(argv[2], gsl_vector_complex, x);
197
+ istart = 3;
198
+ break;
199
+ }
200
+ switch (argc - istart) {
201
+ case 2:
202
+ CHECK_COMPLEX(argv[istart]);
203
+ CHECK_VECTOR_COMPLEX(argv[istart+1]);
204
+ Data_Get_Struct(argv[istart], gsl_complex, b);
205
+ Data_Get_Struct(argv[istart+1], gsl_vector_complex, y);
206
+ break;
207
+ case 0:
208
+ z = gsl_complex_rect(0.0, 0.0);
209
+ b = &z;
210
+ y = gsl_vector_complex_alloc(x->size);
211
+ flag = 1;
212
+ break;
213
+ default:
214
+ rb_raise(rb_eArgError, "wrong number of arguments");
215
+ break;
216
+ }
217
+ gsl_blas_zgemv(type, *a, A, x, *b, y);
218
+ if (flag == 1) return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, y);
219
+ else return argv[argc-1];
220
+
221
+ }
222
+
223
+
224
+ static VALUE rb_gsl_blas_zgemv2(int argc, VALUE *argv, VALUE obj)
225
+ {
226
+ gsl_matrix_complex *A = NULL;
227
+ gsl_vector_complex *x = NULL, *y, *ynew;
228
+ gsl_complex *a, *b, z;
229
+ int type, istart, flag = 0;
230
+ switch (TYPE(obj)) {
231
+ case T_MODULE:
232
+ case T_CLASS:
233
+ case T_OBJECT:
234
+ if (argc < 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 4)",
235
+ argc);
236
+ CHECK_FIXNUM(argv[0]);
237
+ CHECK_COMPLEX(argv[1]);
238
+ CHECK_MATRIX_COMPLEX(argv[2]);
239
+ CHECK_VECTOR_COMPLEX(argv[3]);
240
+ type = FIX2INT(argv[0]);
241
+ Data_Get_Struct(argv[1], gsl_complex, a);
242
+ Data_Get_Struct(argv[2], gsl_matrix_complex, A);
243
+ Data_Get_Struct(argv[3], gsl_vector_complex, x);
244
+ istart = 4;
245
+ break;
246
+ default:
247
+ Data_Get_Struct(obj, gsl_matrix_complex, A);
248
+ if (argc < 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 3)",
249
+ argc);
250
+ CHECK_FIXNUM(argv[0]);
251
+ CHECK_COMPLEX(argv[1]);
252
+ CHECK_VECTOR_COMPLEX(argv[2]);
253
+ type = FIX2INT(argv[0]);
254
+ Data_Get_Struct(argv[1], gsl_complex, a);
255
+ Data_Get_Struct(argv[2], gsl_vector_complex, x);
256
+ istart = 3;
257
+ break;
258
+ }
259
+ switch (argc - istart) {
260
+ case 2:
261
+ CHECK_COMPLEX(argv[istart]);
262
+ CHECK_VECTOR_COMPLEX(argv[istart+1]);
263
+ Data_Get_Struct(argv[istart], gsl_complex, b);
264
+ Data_Get_Struct(argv[istart+1], gsl_vector_complex, y);
265
+ break;
266
+ case 0:
267
+ z = gsl_complex_rect(0.0, 0.0);
268
+ b = &z;
269
+ y = gsl_vector_complex_alloc(x->size);
270
+ flag = 1;
271
+ break;
272
+ default:
273
+ rb_raise(rb_eArgError, "wrong number of arguments");
274
+ break;
275
+ }
276
+ ynew = gsl_vector_complex_alloc(y->size);
277
+ gsl_vector_complex_memcpy(ynew, y);
278
+ gsl_blas_zgemv(type, *a, A, x, *b, ynew);
279
+ if (flag == 1) gsl_vector_complex_free(y);
280
+ return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, ynew);
281
+ }
282
+
283
+ static VALUE rb_gsl_blas_dtrmv(int argc, VALUE *argv, VALUE obj)
284
+ {
285
+ gsl_matrix *A = NULL;
286
+ gsl_vector *x = NULL;
287
+ switch (TYPE(obj)) {
288
+ case T_MODULE:
289
+ case T_CLASS:
290
+ case T_OBJECT:
291
+ if (argc != 5) rb_raise(rb_eArgError, "wrong number of arguments (%d for 5)",
292
+ argc);
293
+ CHECK_MATRIX(argv[3]);
294
+ CHECK_VECTOR(argv[4]);
295
+ Data_Get_Struct(argv[3], gsl_matrix, A);
296
+ Data_Get_Struct(argv[4], gsl_vector, x);
297
+ break;
298
+ default:
299
+ if (argc != 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for 4)",
300
+ argc);
301
+ CHECK_VECTOR(argv[3]);
302
+ Data_Get_Struct(obj, gsl_matrix, A);
303
+ Data_Get_Struct(argv[3], gsl_vector, x);
304
+ break;
305
+ }
306
+ CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
307
+ gsl_blas_dtrmv(FIX2INT(argv[0]), FIX2INT(argv[1]), FIX2INT(argv[2]),
308
+ A, x);
309
+ return argv[argc-1];
310
+ }
311
+
312
+
313
+ static VALUE rb_gsl_blas_dtrmv2(int argc, VALUE *argv, VALUE obj)
314
+ {
315
+ gsl_matrix *A = NULL;
316
+ gsl_vector *x = NULL, *xnew;
317
+ switch (TYPE(obj)) {
318
+ case T_MODULE:
319
+ case T_CLASS:
320
+ case T_OBJECT:
321
+ if (argc != 5) rb_raise(rb_eArgError, "wrong number of arguments (%d for 5)",
322
+ argc);
323
+ CHECK_MATRIX(argv[3]);
324
+ CHECK_VECTOR(argv[4]);
325
+ Data_Get_Struct(argv[3], gsl_matrix, A);
326
+ Data_Get_Struct(argv[4], gsl_vector, x);
327
+ break;
328
+ default:
329
+ if (argc != 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for 4)",
330
+ argc);
331
+ CHECK_VECTOR(argv[3]);
332
+ Data_Get_Struct(obj, gsl_matrix, A);
333
+ Data_Get_Struct(argv[3], gsl_vector, x);
334
+ break;
335
+ }
336
+ CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
337
+ xnew = gsl_vector_alloc(x->size);
338
+ gsl_vector_memcpy(xnew, x);
339
+ gsl_blas_dtrmv(FIX2INT(argv[0]), FIX2INT(argv[1]), FIX2INT(argv[2]),
340
+ A, xnew);
341
+ return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, xnew);
342
+ }
343
+
344
+
345
+ static VALUE rb_gsl_blas_ztrmv(int argc, VALUE *argv, VALUE obj)
346
+ {
347
+ gsl_matrix_complex *A = NULL;
348
+ gsl_vector_complex *x = NULL;
349
+ switch (TYPE(obj)) {
350
+ case T_MODULE:
351
+ case T_CLASS:
352
+ case T_OBJECT:
353
+ if (argc != 5) rb_raise(rb_eArgError, "wrong number of arguments (%d for 5)",
354
+ argc);
355
+ CHECK_MATRIX_COMPLEX(argv[3]);
356
+ CHECK_VECTOR_COMPLEX(argv[4]);
357
+ Data_Get_Struct(argv[3], gsl_matrix_complex, A);
358
+ Data_Get_Struct(argv[4], gsl_vector_complex, x);
359
+ break;
360
+ default:
361
+ if (argc != 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for 4)",
362
+ argc);
363
+ CHECK_VECTOR_COMPLEX(argv[3]);
364
+ Data_Get_Struct(obj, gsl_matrix_complex, A);
365
+ Data_Get_Struct(argv[3], gsl_vector_complex, x);
366
+ break;
367
+ }
368
+ CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
369
+ gsl_blas_ztrmv(FIX2INT(argv[0]), FIX2INT(argv[1]), FIX2INT(argv[2]),
370
+ A, x);
371
+ return argv[argc-1];
372
+ }
373
+
374
+ static VALUE rb_gsl_blas_ztrmv2(int argc, VALUE *argv, VALUE obj)
375
+ {
376
+ gsl_matrix_complex *A = NULL;
377
+ gsl_vector_complex *x = NULL, *xnew;
378
+ switch (TYPE(obj)) {
379
+ case T_MODULE:
380
+ case T_CLASS:
381
+ case T_OBJECT:
382
+ if (argc != 5) rb_raise(rb_eArgError, "wrong number of arguments (%d for 5)",
383
+ argc);
384
+ CHECK_MATRIX_COMPLEX(argv[3]);
385
+ CHECK_VECTOR_COMPLEX(argv[4]);
386
+ Data_Get_Struct(argv[3], gsl_matrix_complex, A);
387
+ Data_Get_Struct(argv[4], gsl_vector_complex, x);
388
+ break;
389
+ default:
390
+ if (argc != 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for 4)",
391
+ argc);
392
+ CHECK_VECTOR_COMPLEX(argv[3]);
393
+ Data_Get_Struct(obj, gsl_matrix_complex, A);
394
+ Data_Get_Struct(argv[3], gsl_vector_complex, x);
395
+ break;
396
+ }
397
+ CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
398
+ xnew = gsl_vector_complex_alloc(x->size);
399
+ gsl_vector_complex_memcpy(xnew, x);
400
+ gsl_blas_ztrmv(FIX2INT(argv[0]), FIX2INT(argv[1]), FIX2INT(argv[2]),
401
+ A, xnew);
402
+ return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, xnew);
403
+ }
404
+
405
+ static VALUE rb_gsl_blas_dtrsv(int argc, VALUE *argv, VALUE obj)
406
+ {
407
+ gsl_matrix *A = NULL;
408
+ gsl_vector *x = NULL;
409
+ switch (TYPE(obj)) {
410
+ case T_MODULE:
411
+ case T_CLASS:
412
+ case T_OBJECT:
413
+ if (argc != 5) rb_raise(rb_eArgError, "wrong number of arguments (%d for 5)",
414
+ argc);
415
+ CHECK_MATRIX(argv[3]);
416
+ CHECK_VECTOR(argv[4]);
417
+ Data_Get_Struct(argv[3], gsl_matrix, A);
418
+ Data_Get_Struct(argv[4], gsl_vector, x);
419
+ break;
420
+ default:
421
+ if (argc != 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for 4)",
422
+ argc);
423
+ CHECK_VECTOR(argv[3]);
424
+ Data_Get_Struct(obj, gsl_matrix, A);
425
+ Data_Get_Struct(argv[3], gsl_vector, x);
426
+ break;
427
+ }
428
+ CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
429
+ gsl_blas_dtrsv(FIX2INT(argv[0]), FIX2INT(argv[1]), FIX2INT(argv[2]),
430
+ A, x);
431
+ return argv[argc-1];
432
+ }
433
+
434
+ static VALUE rb_gsl_blas_dtrsv2(int argc, VALUE *argv, VALUE obj)
435
+ {
436
+ gsl_matrix *A = NULL;
437
+ gsl_vector *x = NULL, *xnew;
438
+ switch (TYPE(obj)) {
439
+ case T_MODULE:
440
+ case T_CLASS:
441
+ case T_OBJECT:
442
+ if (argc != 5) rb_raise(rb_eArgError, "wrong number of arguments (%d for 5)",
443
+ argc);
444
+ CHECK_MATRIX(argv[3]);
445
+ CHECK_VECTOR(argv[4]);
446
+ Data_Get_Struct(argv[3], gsl_matrix, A);
447
+ Data_Get_Struct(argv[4], gsl_vector, x);
448
+ break;
449
+ default:
450
+ if (argc != 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for 4)",
451
+ argc);
452
+ CHECK_VECTOR(argv[3]);
453
+ Data_Get_Struct(obj, gsl_matrix, A);
454
+ Data_Get_Struct(argv[3], gsl_vector, x);
455
+ break;
456
+ }
457
+ CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
458
+ xnew = gsl_vector_alloc(x->size);
459
+ gsl_vector_memcpy(xnew, x);
460
+ gsl_blas_dtrsv(FIX2INT(argv[0]), FIX2INT(argv[1]), FIX2INT(argv[2]),
461
+ A, xnew);
462
+ return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, xnew);
463
+ }
464
+
465
+ static VALUE rb_gsl_blas_ztrsv(int argc, VALUE *argv, VALUE obj)
466
+ {
467
+ gsl_matrix_complex *A = NULL;
468
+ gsl_vector_complex *x = NULL;
469
+ switch (TYPE(obj)) {
470
+ case T_MODULE:
471
+ case T_CLASS:
472
+ case T_OBJECT:
473
+ if (argc != 5) rb_raise(rb_eArgError, "wrong number of arguments (%d for 5)",
474
+ argc);
475
+ CHECK_MATRIX_COMPLEX(argv[3]);
476
+ CHECK_VECTOR_COMPLEX(argv[4]);
477
+ Data_Get_Struct(argv[3], gsl_matrix_complex, A);
478
+ Data_Get_Struct(argv[4], gsl_vector_complex, x);
479
+ break;
480
+ default:
481
+ if (argc != 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for 4)",
482
+ argc);
483
+ CHECK_VECTOR_COMPLEX(argv[3]);
484
+ Data_Get_Struct(obj, gsl_matrix_complex, A);
485
+ Data_Get_Struct(argv[3], gsl_vector_complex, x);
486
+ break;
487
+ }
488
+ CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
489
+ gsl_blas_ztrsv(FIX2INT(argv[0]), FIX2INT(argv[1]), FIX2INT(argv[2]),
490
+ A, x);
491
+ return argv[argc-1];
492
+ }
493
+
494
+ static VALUE rb_gsl_blas_ztrsv2(int argc, VALUE *argv, VALUE obj)
495
+ {
496
+ gsl_matrix_complex *A = NULL;
497
+ gsl_vector_complex *x = NULL, *xnew;
498
+ switch (TYPE(obj)) {
499
+ case T_MODULE:
500
+ case T_CLASS:
501
+ case T_OBJECT:
502
+ if (argc != 5) rb_raise(rb_eArgError, "wrong number of arguments (%d for 5)",
503
+ argc);
504
+ CHECK_MATRIX_COMPLEX(argv[3]);
505
+ CHECK_VECTOR_COMPLEX(argv[4]);
506
+ Data_Get_Struct(argv[3], gsl_matrix_complex, A);
507
+ Data_Get_Struct(argv[4], gsl_vector_complex, x);
508
+ break;
509
+ default:
510
+ if (argc != 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for 4)",
511
+ argc);
512
+ CHECK_VECTOR_COMPLEX(argv[3]);
513
+ Data_Get_Struct(obj, gsl_matrix_complex, A);
514
+ Data_Get_Struct(argv[3], gsl_vector_complex, x);
515
+ break;
516
+ }
517
+ CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
518
+ xnew = gsl_vector_complex_alloc(x->size);
519
+ gsl_vector_complex_memcpy(xnew, x);
520
+ gsl_blas_ztrsv(FIX2INT(argv[0]), FIX2INT(argv[1]), FIX2INT(argv[2]),
521
+ A, xnew);
522
+ return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, xnew);
523
+ }
524
+
525
+ static VALUE rb_gsl_blas_dsymv(int argc, VALUE *argv, VALUE obj)
526
+ {
527
+ gsl_matrix *A = NULL;
528
+ gsl_vector *x = NULL, *y = NULL;
529
+ double a, b;
530
+ int type, istart, flag = 0;
531
+ switch (TYPE(obj)) {
532
+ case T_MODULE:
533
+ case T_CLASS:
534
+ case T_OBJECT:
535
+ if (argc < 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 4)",
536
+ argc);
537
+ CHECK_FIXNUM(argv[0]);
538
+ Need_Float(argv[1]);
539
+ CHECK_MATRIX(argv[2]);
540
+ CHECK_VECTOR(argv[3]);
541
+ type = FIX2INT(argv[0]);
542
+ a = NUM2DBL(argv[1]);
543
+ Data_Get_Struct(argv[2], gsl_matrix, A);
544
+ Data_Get_Struct(argv[3], gsl_vector, x);
545
+ istart = 4;
546
+ break;
547
+ default:
548
+ Data_Get_Struct(obj, gsl_matrix, A);
549
+ if (argc < 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 3)",
550
+ argc);
551
+ CHECK_FIXNUM(argv[0]);
552
+ Need_Float(argv[1]);
553
+ CHECK_VECTOR(argv[2]);
554
+ type = FIX2INT(argv[0]);
555
+ a = NUM2DBL(argv[1]);
556
+ Data_Get_Struct(argv[2], gsl_vector, x);
557
+ istart = 3;
558
+ break;
559
+ }
560
+ switch (argc - istart) {
561
+ case 2:
562
+ Need_Float(argv[istart]);
563
+ CHECK_VECTOR(argv[istart+1]);
564
+ b = NUM2DBL(argv[istart]);
565
+ Data_Get_Struct(argv[istart+1], gsl_vector, y);
566
+ break;
567
+ case 0:
568
+ b = 0.0;
569
+ y = gsl_vector_alloc(x->size);
570
+ flag = 1;
571
+ break;
572
+ default:
573
+ rb_raise(rb_eArgError, "wrong number of arguments");
574
+ break;
575
+ }
576
+ gsl_blas_dsymv(type, a, A, x, b, y);
577
+ if (flag == 1) return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, y);
578
+ else return argv[argc-1];
579
+
580
+ }
581
+
582
+ static VALUE rb_gsl_blas_dsymv2(int argc, VALUE *argv, VALUE obj)
583
+ {
584
+ gsl_matrix *A = NULL;
585
+ gsl_vector *x = NULL, *y, *ynew;
586
+ double a, b;
587
+ int type, istart, flag = 0;
588
+ switch (TYPE(obj)) {
589
+ case T_MODULE:
590
+ case T_CLASS:
591
+ case T_OBJECT:
592
+ if (argc < 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 4)",
593
+ argc);
594
+ CHECK_FIXNUM(argv[0]);
595
+ Need_Float(argv[1]);
596
+ CHECK_MATRIX(argv[2]);
597
+ CHECK_VECTOR(argv[3]);
598
+ type = FIX2INT(argv[0]);
599
+ a = NUM2DBL(argv[1]);
600
+ Data_Get_Struct(argv[2], gsl_matrix, A);
601
+ Data_Get_Struct(argv[3], gsl_vector, x);
602
+ istart = 4;
603
+ break;
604
+ default:
605
+ Data_Get_Struct(obj, gsl_matrix, A);
606
+ if (argc < 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 3)",
607
+ argc);
608
+ CHECK_FIXNUM(argv[0]);
609
+ Need_Float(argv[1]);
610
+ CHECK_VECTOR(argv[2]);
611
+ type = FIX2INT(argv[0]);
612
+ a = NUM2DBL(argv[1]);
613
+ Data_Get_Struct(argv[2], gsl_vector, x);
614
+ istart = 3;
615
+ break;
616
+ }
617
+ switch (argc - istart) {
618
+ case 2:
619
+ Need_Float(argv[istart]);
620
+ CHECK_VECTOR(argv[istart+1]);
621
+ b = NUM2DBL(argv[istart]);
622
+ Data_Get_Struct(argv[istart+1], gsl_vector, y);
623
+ break;
624
+ case 0:
625
+ b = 0.0;
626
+ y = gsl_vector_alloc(x->size);
627
+ flag = 1;
628
+ break;
629
+ default:
630
+ rb_raise(rb_eArgError, "wrong number of arguments");
631
+ break;
632
+ }
633
+ ynew = gsl_vector_alloc(y->size);
634
+ gsl_vector_memcpy(ynew, y);
635
+ gsl_blas_dsymv(type, a, A, x, b, ynew);
636
+ if (flag == 1) gsl_vector_free(y);
637
+ return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, ynew);
638
+ }
639
+
640
+ static VALUE rb_gsl_blas_zhemv(int argc, VALUE *argv, VALUE obj)
641
+ {
642
+ gsl_matrix_complex *A = NULL;
643
+ gsl_vector_complex *x = NULL, *y = NULL;
644
+ gsl_complex *a, *b, z;
645
+ int type, istart, flag = 0;
646
+ switch (TYPE(obj)) {
647
+ case T_MODULE:
648
+ case T_CLASS:
649
+ case T_OBJECT:
650
+ if (argc < 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 4)",
651
+ argc);
652
+ CHECK_FIXNUM(argv[0]);
653
+ CHECK_COMPLEX(argv[1]);
654
+ CHECK_MATRIX_COMPLEX(argv[2]);
655
+ CHECK_VECTOR_COMPLEX(argv[3]);
656
+ type = FIX2INT(argv[0]);
657
+ Data_Get_Struct(argv[1], gsl_complex, a);
658
+ Data_Get_Struct(argv[2], gsl_matrix_complex, A);
659
+ Data_Get_Struct(argv[3], gsl_vector_complex, x);
660
+ istart = 4;
661
+ break;
662
+ default:
663
+ Data_Get_Struct(obj, gsl_matrix_complex, A);
664
+ if (argc < 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 3)",
665
+ argc);
666
+ CHECK_FIXNUM(argv[0]);
667
+ CHECK_COMPLEX(argv[1]);
668
+ CHECK_VECTOR_COMPLEX(argv[2]);
669
+ type = FIX2INT(argv[0]);
670
+ Data_Get_Struct(argv[1], gsl_complex, a);
671
+ Data_Get_Struct(argv[2], gsl_vector_complex, x);
672
+ istart = 3;
673
+ break;
674
+ }
675
+ switch (argc - istart) {
676
+ case 2:
677
+ CHECK_COMPLEX(argv[istart]);
678
+ CHECK_VECTOR_COMPLEX(argv[istart+1]);
679
+ Data_Get_Struct(argv[istart], gsl_complex, b);
680
+ Data_Get_Struct(argv[istart+1], gsl_vector_complex, y);
681
+ break;
682
+ case 0:
683
+ z = gsl_complex_rect(0.0, 0.0);
684
+ b = &z;
685
+ y = gsl_vector_complex_alloc(x->size);
686
+ flag = 1;
687
+ break;
688
+ default:
689
+ rb_raise(rb_eArgError, "wrong number of arguments");
690
+ break;
691
+ }
692
+ gsl_blas_zhemv(type, *a, A, x, *b, y);
693
+ if (flag == 1) return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, y);
694
+ else return argv[argc-1];
695
+
696
+ }
697
+
698
+ static VALUE rb_gsl_blas_zhemv2(int argc, VALUE *argv, VALUE obj)
699
+ {
700
+ gsl_matrix_complex *A = NULL;
701
+ gsl_vector_complex *x = NULL, *y, *ynew;
702
+ gsl_complex *a, *b, z;
703
+ int type, istart, flag = 0;
704
+ switch (TYPE(obj)) {
705
+ case T_MODULE:
706
+ case T_CLASS:
707
+ case T_OBJECT:
708
+ if (argc < 4) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 4)",
709
+ argc);
710
+ CHECK_FIXNUM(argv[0]);
711
+ CHECK_COMPLEX(argv[1]);
712
+ CHECK_MATRIX_COMPLEX(argv[2]);
713
+ CHECK_VECTOR_COMPLEX(argv[3]);
714
+ type = FIX2INT(argv[0]);
715
+ Data_Get_Struct(argv[1], gsl_complex, a);
716
+ Data_Get_Struct(argv[2], gsl_matrix_complex, A);
717
+ Data_Get_Struct(argv[3], gsl_vector_complex, x);
718
+ istart = 4;
719
+ break;
720
+ default:
721
+ Data_Get_Struct(obj, gsl_matrix_complex, A);
722
+ if (argc < 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for >= 3)",
723
+ argc);
724
+ CHECK_FIXNUM(argv[0]);
725
+ CHECK_COMPLEX(argv[1]);
726
+ CHECK_VECTOR_COMPLEX(argv[2]);
727
+ type = FIX2INT(argv[0]);
728
+ Data_Get_Struct(argv[1], gsl_complex, a);
729
+ Data_Get_Struct(argv[2], gsl_vector_complex, x);
730
+ istart = 3;
731
+ break;
732
+ }
733
+ switch (argc - istart) {
734
+ case 2:
735
+ CHECK_COMPLEX(argv[istart]);
736
+ CHECK_VECTOR_COMPLEX(argv[istart+1]);
737
+ Data_Get_Struct(argv[istart], gsl_complex, b);
738
+ Data_Get_Struct(argv[istart+1], gsl_vector_complex, y);
739
+ break;
740
+ case 0:
741
+ z = gsl_complex_rect(0.0, 0.0);
742
+ b = &z;
743
+ y = gsl_vector_complex_alloc(x->size);
744
+ flag = 1;
745
+ break;
746
+ default:
747
+ rb_raise(rb_eArgError, "wrong number of arguments");
748
+ break;
749
+ }
750
+ ynew = gsl_vector_complex_alloc(y->size);
751
+ gsl_vector_complex_memcpy(ynew, y);
752
+ gsl_blas_zhemv(type, *a, A, x, *b, ynew);
753
+ if (flag == 1) gsl_vector_complex_free(y);
754
+ return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, ynew);
755
+ }
756
+
757
+ static VALUE rb_gsl_blas_dger(VALUE obj, VALUE aa, VALUE xx, VALUE yy, VALUE AA)
758
+ {
759
+ gsl_matrix *A = NULL;
760
+ gsl_vector *x = NULL, *y = NULL;
761
+ double a;
762
+ Need_Float(aa);
763
+ CHECK_VECTOR(xx); CHECK_VECTOR(yy);
764
+ CHECK_MATRIX(AA);
765
+ a = NUM2DBL(aa);
766
+ Data_Get_Struct(xx, gsl_vector, x);
767
+ Data_Get_Struct(yy, gsl_vector, y);
768
+ Data_Get_Struct(AA, gsl_matrix, A);
769
+ gsl_blas_dger(a, x, y, A);
770
+ return AA;
771
+ }
772
+
773
+ static VALUE rb_gsl_blas_dger2(VALUE obj, VALUE aa, VALUE xx, VALUE yy, VALUE AA)
774
+ {
775
+ gsl_matrix *A = NULL, *Anew = NULL;
776
+ gsl_vector *x = NULL, *y = NULL;
777
+ double a;
778
+ Need_Float(aa);
779
+ CHECK_VECTOR(xx); CHECK_VECTOR(yy);
780
+ CHECK_MATRIX(AA);
781
+ a = NUM2DBL(aa);
782
+ Data_Get_Struct(xx, gsl_vector, x);
783
+ Data_Get_Struct(yy, gsl_vector, y);
784
+ Data_Get_Struct(AA, gsl_matrix, A);
785
+ Anew = gsl_matrix_alloc(A->size1, A->size2);
786
+ gsl_matrix_memcpy(Anew, A);
787
+ gsl_blas_dger(a, x, y, Anew);
788
+ return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Anew);
789
+ }
790
+
791
+ static VALUE rb_gsl_blas_zgeru(VALUE obj, VALUE aa, VALUE xx, VALUE yy, VALUE AA)
792
+ {
793
+ gsl_matrix_complex *A = NULL;
794
+ gsl_vector_complex *x = NULL, *y = NULL;
795
+ gsl_complex *a;
796
+ CHECK_COMPLEX(aa);
797
+ CHECK_VECTOR_COMPLEX(xx);CHECK_VECTOR_COMPLEX(yy);
798
+ CHECK_MATRIX_COMPLEX(AA);
799
+ Data_Get_Struct(aa, gsl_complex, a);
800
+ Data_Get_Struct(xx, gsl_vector_complex, x);
801
+ Data_Get_Struct(yy, gsl_vector_complex, y);
802
+ Data_Get_Struct(AA, gsl_matrix_complex, A);
803
+ gsl_blas_zgeru(*a, x, y, A);
804
+ return AA;
805
+ }
806
+
807
+ static VALUE rb_gsl_blas_zgeru2(VALUE obj, VALUE aa, VALUE xx, VALUE yy, VALUE AA)
808
+ {
809
+ gsl_matrix_complex *A = NULL, *Anew = NULL;
810
+ gsl_vector_complex *x = NULL, *y = NULL;
811
+ gsl_complex *a;
812
+ CHECK_COMPLEX(aa);
813
+ CHECK_VECTOR_COMPLEX(xx);CHECK_VECTOR_COMPLEX(yy);
814
+ CHECK_MATRIX_COMPLEX(AA);
815
+ Data_Get_Struct(aa, gsl_complex, a);
816
+ Data_Get_Struct(xx, gsl_vector_complex, x);
817
+ Data_Get_Struct(yy, gsl_vector_complex, y);
818
+ Data_Get_Struct(AA, gsl_matrix_complex, A);
819
+ Anew = gsl_matrix_complex_alloc(A->size1, A->size2);
820
+ gsl_matrix_complex_memcpy(Anew, A);
821
+ gsl_blas_zgeru(*a, x, y, Anew);
822
+ return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Anew);
823
+ }
824
+
825
+ static VALUE rb_gsl_blas_zgerc(VALUE obj, VALUE aa, VALUE xx, VALUE yy, VALUE AA)
826
+ {
827
+ gsl_matrix_complex *A = NULL;
828
+ gsl_vector_complex *x = NULL, *y = NULL;
829
+ gsl_complex *a;
830
+ CHECK_COMPLEX(aa);
831
+ CHECK_VECTOR_COMPLEX(xx);CHECK_VECTOR_COMPLEX(yy);
832
+ CHECK_MATRIX_COMPLEX(AA);
833
+ Data_Get_Struct(aa, gsl_complex, a);
834
+ Data_Get_Struct(xx, gsl_vector_complex, x);
835
+ Data_Get_Struct(yy, gsl_vector_complex, y);
836
+ Data_Get_Struct(AA, gsl_matrix_complex, A);
837
+ gsl_blas_zgerc(*a, x, y, A);
838
+ return AA;
839
+ }
840
+
841
+ static VALUE rb_gsl_blas_zgerc2(VALUE obj, VALUE aa, VALUE xx, VALUE yy, VALUE AA)
842
+ {
843
+ gsl_matrix_complex *A = NULL, *Anew = NULL;
844
+ gsl_vector_complex *x = NULL, *y = NULL;
845
+ gsl_complex *a;
846
+ CHECK_COMPLEX(aa);
847
+ CHECK_VECTOR_COMPLEX(xx);CHECK_VECTOR_COMPLEX(yy);
848
+ CHECK_MATRIX_COMPLEX(AA);
849
+ Data_Get_Struct(aa, gsl_complex, a);
850
+ Data_Get_Struct(xx, gsl_vector_complex, x);
851
+ Data_Get_Struct(yy, gsl_vector_complex, y);
852
+ Data_Get_Struct(AA, gsl_matrix_complex, A);
853
+ Anew = gsl_matrix_complex_alloc(A->size1, A->size2);
854
+ gsl_matrix_complex_memcpy(Anew, A);
855
+ gsl_blas_zgerc(*a, x, y, Anew);
856
+ return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Anew);
857
+ }
858
+
859
+ static VALUE rb_gsl_blas_dsyr(VALUE obj, VALUE tt, VALUE aa, VALUE xx, VALUE AA)
860
+ {
861
+ gsl_matrix *A = NULL;
862
+ gsl_vector *x = NULL;
863
+ double a;
864
+ CHECK_FIXNUM(tt);
865
+ Need_Float(aa);
866
+ CHECK_VECTOR(xx); CHECK_MATRIX(AA);
867
+ a = NUM2DBL(aa);
868
+ Data_Get_Struct(xx, gsl_vector, x);
869
+ Data_Get_Struct(AA, gsl_matrix, A);
870
+ gsl_blas_dsyr(FIX2INT(tt), a, x, A);
871
+ return AA;
872
+ }
873
+
874
+ static VALUE rb_gsl_blas_dsyr_a(VALUE obj, VALUE tt, VALUE aa, VALUE xx, VALUE AA)
875
+ {
876
+ gsl_matrix *A = NULL, *Anew = NULL;
877
+ gsl_vector *x = NULL;
878
+ double a;
879
+ CHECK_FIXNUM(tt);
880
+ Need_Float(aa);
881
+ CHECK_VECTOR(xx); CHECK_MATRIX(AA);
882
+ a = NUM2DBL(aa);
883
+ Data_Get_Struct(xx, gsl_vector, x);
884
+ Data_Get_Struct(AA, gsl_matrix, A);
885
+ Anew = gsl_matrix_alloc(A->size1, A->size2);
886
+ gsl_matrix_memcpy(Anew, A);
887
+ gsl_blas_dsyr(FIX2INT(tt), a, x, Anew);
888
+ return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Anew);
889
+ }
890
+
891
+ static VALUE rb_gsl_blas_zher(VALUE obj, VALUE tt, VALUE aa, VALUE xx, VALUE AA)
892
+ {
893
+ gsl_matrix_complex *A = NULL;
894
+ gsl_vector_complex *x = NULL;
895
+ double a;
896
+ CHECK_FIXNUM(tt);
897
+ Need_Float(aa);
898
+ CHECK_VECTOR_COMPLEX(xx); CHECK_MATRIX_COMPLEX(AA);
899
+ a = NUM2DBL(aa);
900
+ Data_Get_Struct(xx, gsl_vector_complex, x);
901
+ Data_Get_Struct(AA, gsl_matrix_complex, A);
902
+ gsl_blas_zher(FIX2INT(tt), a, x, A);
903
+ return AA;
904
+ }
905
+
906
+ static VALUE rb_gsl_blas_zher_a(VALUE obj, VALUE tt, VALUE aa, VALUE xx, VALUE AA)
907
+ {
908
+ gsl_matrix_complex *A = NULL, *Anew = NULL;
909
+ gsl_vector_complex *x = NULL;
910
+ double a;
911
+ CHECK_FIXNUM(tt);
912
+ Need_Float(aa);
913
+ CHECK_VECTOR_COMPLEX(xx); CHECK_MATRIX_COMPLEX(AA);
914
+ a = NUM2DBL(aa);
915
+ Data_Get_Struct(xx, gsl_vector_complex, x);
916
+ Data_Get_Struct(AA, gsl_matrix_complex, A);
917
+ Anew = gsl_matrix_complex_alloc(A->size1, A->size2);
918
+ gsl_matrix_complex_memcpy(Anew, A);
919
+ gsl_blas_zher(FIX2INT(tt), a, x, Anew);
920
+ return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Anew);
921
+ }
922
+
923
+ static VALUE rb_gsl_blas_dsyr2(VALUE obj, VALUE tt, VALUE aa, VALUE xx,
924
+ VALUE yy, VALUE AA)
925
+ {
926
+ gsl_matrix *A = NULL;
927
+ gsl_vector *x = NULL, *y = NULL;
928
+ double a;
929
+ CHECK_FIXNUM(tt);
930
+ Need_Float(aa);
931
+ CHECK_VECTOR(xx); CHECK_VECTOR(yy); CHECK_MATRIX(AA);
932
+ a = NUM2DBL(aa);
933
+ Data_Get_Struct(xx, gsl_vector, x);
934
+ Data_Get_Struct(yy, gsl_vector, y);
935
+ Data_Get_Struct(AA, gsl_matrix, A);
936
+ gsl_blas_dsyr2(FIX2INT(tt), a, x, y, A);
937
+ return AA;
938
+ }
939
+
940
+ static VALUE rb_gsl_blas_dsyr2_a(VALUE obj, VALUE tt, VALUE aa, VALUE xx,
941
+ VALUE yy, VALUE AA)
942
+ {
943
+ gsl_matrix *A = NULL, *Anew = NULL;
944
+ gsl_vector *x = NULL, *y = NULL;
945
+ double a;
946
+ CHECK_FIXNUM(tt);
947
+ Need_Float(aa);
948
+ CHECK_VECTOR(xx); CHECK_VECTOR(yy); CHECK_MATRIX(AA);
949
+ a = NUM2DBL(aa);
950
+ Data_Get_Struct(xx, gsl_vector, x);
951
+ Data_Get_Struct(yy, gsl_vector, y);
952
+ Data_Get_Struct(AA, gsl_matrix, A);
953
+ Anew = gsl_matrix_alloc(A->size1, A->size2);
954
+ gsl_matrix_memcpy(Anew, A);
955
+ gsl_blas_dsyr2(FIX2INT(tt), a, x, y, Anew);
956
+ return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Anew);
957
+ }
958
+
959
+ static VALUE rb_gsl_blas_zher2(VALUE obj, VALUE tt, VALUE aa, VALUE xx,
960
+ VALUE yy, VALUE AA)
961
+ {
962
+ gsl_matrix_complex *A = NULL;
963
+ gsl_vector_complex *x = NULL, *y = NULL;
964
+ gsl_complex *a;
965
+ CHECK_FIXNUM(tt);
966
+ CHECK_COMPLEX(aa);
967
+ CHECK_VECTOR_COMPLEX(xx); CHECK_VECTOR_COMPLEX(yy); CHECK_MATRIX_COMPLEX(AA);
968
+ Data_Get_Struct(aa, gsl_complex, a);
969
+ Data_Get_Struct(xx, gsl_vector_complex, x);
970
+ Data_Get_Struct(yy, gsl_vector_complex, y);
971
+ Data_Get_Struct(AA, gsl_matrix_complex, A);
972
+ gsl_blas_zher2(FIX2INT(tt), *a, x, y, A);
973
+ return AA;
974
+ }
975
+
976
+ static VALUE rb_gsl_blas_zher2_a(VALUE obj, VALUE tt, VALUE aa, VALUE xx,
977
+ VALUE yy, VALUE AA)
978
+ {
979
+ gsl_matrix_complex *A = NULL, *Anew = NULL;
980
+ gsl_vector_complex *x = NULL, *y = NULL;
981
+ gsl_complex *a;
982
+ CHECK_FIXNUM(tt);
983
+ CHECK_COMPLEX(aa);
984
+ CHECK_VECTOR_COMPLEX(xx); CHECK_VECTOR_COMPLEX(yy); CHECK_MATRIX_COMPLEX(AA);
985
+ Data_Get_Struct(aa, gsl_complex, a);
986
+ Data_Get_Struct(xx, gsl_vector_complex, x);
987
+ Data_Get_Struct(yy, gsl_vector_complex, y);
988
+ Data_Get_Struct(AA, gsl_matrix_complex, A);
989
+ Anew = gsl_matrix_complex_alloc(A->size1, A->size2);
990
+ gsl_matrix_complex_memcpy(Anew, A);
991
+ gsl_blas_zher2(FIX2INT(tt), *a, x, y, Anew);
992
+ return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Anew);
993
+ }
994
+
995
+ void Init_gsl_blas2(VALUE module)
996
+ {
997
+ define_const(module);
998
+
999
+ rb_define_module_function(module, "dgemv!", rb_gsl_blas_dgemv, -1);
1000
+ rb_define_method(cgsl_matrix, "blas_dgemv!", rb_gsl_blas_dgemv, -1);
1001
+ rb_define_alias(cgsl_matrix, "dgemv!", "blas_dgemv!");
1002
+ rb_define_alias(cgsl_matrix, "gemv!", "blas_dgemv!");
1003
+
1004
+ rb_define_module_function(module, "dgemv", rb_gsl_blas_dgemv2, -1);
1005
+ rb_define_method(cgsl_matrix, "blas_dgemv", rb_gsl_blas_dgemv2, -1);
1006
+ rb_define_alias(cgsl_matrix, "dgemv", "blas_dgemv");
1007
+ rb_define_alias(cgsl_matrix, "gemv", "blas_dgemv");
1008
+
1009
+ rb_define_module_function(module, "zgemv!", rb_gsl_blas_zgemv, -1);
1010
+ rb_define_method(cgsl_matrix_complex, "blas_zgemv!", rb_gsl_blas_zgemv, -1);
1011
+ rb_define_alias(cgsl_matrix_complex, "zgemv!", "blas_zgemv!");
1012
+ rb_define_alias(cgsl_matrix_complex, "gemv!", "blas_zgemv!");
1013
+
1014
+ rb_define_module_function(module, "zgemv", rb_gsl_blas_zgemv2, -1);
1015
+ rb_define_method(cgsl_matrix_complex, "blas_zgemv", rb_gsl_blas_zgemv2, -1);
1016
+ rb_define_alias(cgsl_matrix_complex, "zgemv", "blas_zgemv");
1017
+ rb_define_alias(cgsl_matrix_complex, "gemv", "blas_zgemv");
1018
+
1019
+ rb_define_module_function(module, "dtrmv!", rb_gsl_blas_dtrmv, -1);
1020
+ rb_define_method(cgsl_matrix, "blas_dtrmv!", rb_gsl_blas_dtrmv, -1);
1021
+ rb_define_alias(cgsl_matrix, "dtrmv!", "blas_dtrmv!");
1022
+ rb_define_alias(cgsl_matrix, "trmv!", "blas_dtrmv!");
1023
+
1024
+ rb_define_module_function(module, "dtrmv", rb_gsl_blas_dtrmv2, -1);
1025
+ rb_define_method(cgsl_matrix, "blas_dtrmv", rb_gsl_blas_dtrmv2, -1);
1026
+ rb_define_alias(cgsl_matrix, "dtrmv", "blas_dtrmv");
1027
+ rb_define_alias(cgsl_matrix, "trmv", "blas_dtrmv");
1028
+
1029
+ rb_define_module_function(module, "ztrmv!", rb_gsl_blas_ztrmv, -1);
1030
+ rb_define_method(cgsl_matrix_complex, "blas_ztrmv!", rb_gsl_blas_ztrmv, -1);
1031
+ rb_define_alias(cgsl_matrix_complex, "ztrmv!", "blas_ztrmv!");
1032
+
1033
+ rb_define_module_function(module, "ztrmv", rb_gsl_blas_ztrmv2, -1);
1034
+ rb_define_method(cgsl_matrix_complex, "blas_ztrmv", rb_gsl_blas_ztrmv2, -1);
1035
+ rb_define_alias(cgsl_matrix_complex, "ztrmv", "blas_ztrmv");
1036
+ rb_define_alias(cgsl_matrix_complex, "trmv", "blas_ztrmv");
1037
+
1038
+ rb_define_module_function(module, "dtrsv!", rb_gsl_blas_dtrsv, -1);
1039
+ rb_define_method(cgsl_matrix, "blas_dtrsv!", rb_gsl_blas_dtrsv, -1);
1040
+ rb_define_alias(cgsl_matrix, "dtrsv!", "blas_dtrsv!");
1041
+ rb_define_alias(cgsl_matrix, "trsv!", "blas_dtrsv!");
1042
+
1043
+ rb_define_module_function(module, "dtrsv", rb_gsl_blas_dtrsv2, -1);
1044
+ rb_define_method(cgsl_matrix, "blas_dtrsv", rb_gsl_blas_dtrsv2, -1);
1045
+ rb_define_alias(cgsl_matrix, "dtrsv", "blas_dtrsv");
1046
+ rb_define_alias(cgsl_matrix, "trsv", "blas_dtrsv");
1047
+
1048
+ rb_define_module_function(module, "ztrsv!", rb_gsl_blas_ztrsv, -1);
1049
+ rb_define_method(cgsl_matrix_complex, "blas_ztrsv!", rb_gsl_blas_ztrsv, -1);
1050
+ rb_define_alias(cgsl_matrix_complex, "ztrsv!", "blas_ztrsv!");
1051
+ rb_define_alias(cgsl_matrix_complex, "trsv!", "blas_ztrsv!");
1052
+
1053
+ rb_define_module_function(module, "ztrsv", rb_gsl_blas_ztrsv2, -1);
1054
+ rb_define_method(cgsl_matrix_complex, "blas_ztrsv", rb_gsl_blas_ztrsv2, -1);
1055
+ rb_define_alias(cgsl_matrix_complex, "ztrsv", "blas_ztrsv");
1056
+ rb_define_alias(cgsl_matrix_complex, "trsv", "blas_ztrsv");
1057
+
1058
+ rb_define_module_function(module, "dsymv!", rb_gsl_blas_dsymv, -1);
1059
+ rb_define_method(cgsl_matrix, "blas_dsymv!", rb_gsl_blas_dsymv, -1);
1060
+ rb_define_alias(cgsl_matrix, "dsymv!", "blas_dsymv!");
1061
+ rb_define_alias(cgsl_matrix, "symv!", "blas_dsymv!");
1062
+
1063
+ rb_define_module_function(module, "dsymv", rb_gsl_blas_dsymv2, -1);
1064
+ rb_define_method(cgsl_matrix, "blas_dsymv", rb_gsl_blas_dsymv2, -1);
1065
+ rb_define_alias(cgsl_matrix, "dsymv", "blas_dsymv");
1066
+ rb_define_alias(cgsl_matrix, "symv", "blas_dsymv");
1067
+
1068
+ rb_define_module_function(module, "zhemv!", rb_gsl_blas_zhemv, -1);
1069
+ rb_define_method(cgsl_matrix_complex, "blas_zhemv!", rb_gsl_blas_zhemv, -1);
1070
+ rb_define_alias(cgsl_matrix_complex, "zhemv!", "blas_zhemv!");
1071
+ rb_define_alias(cgsl_matrix_complex, "symv!", "blas_zhemv!");
1072
+
1073
+ rb_define_module_function(module, "zhemv", rb_gsl_blas_zhemv2, -1);
1074
+ rb_define_method(cgsl_matrix_complex, "blas_zhemv", rb_gsl_blas_zhemv2, -1);
1075
+ rb_define_alias(cgsl_matrix_complex, "zhemv", "blas_zhemv");
1076
+ rb_define_alias(cgsl_matrix_complex, "symv", "blas_zhemv");
1077
+
1078
+ rb_define_module_function(module, "dger!", rb_gsl_blas_dger, 4);
1079
+ rb_define_module_function(module, "dger", rb_gsl_blas_dger2, 4);
1080
+ rb_define_module_function(module, "zgeru!", rb_gsl_blas_zgeru, 4);
1081
+ rb_define_module_function(module, "zgeru", rb_gsl_blas_zgeru2, 4);
1082
+ rb_define_module_function(module, "zgerc!", rb_gsl_blas_zgerc, 4);
1083
+ rb_define_module_function(module, "zgerc", rb_gsl_blas_zgerc2, 4);
1084
+ rb_define_module_function(module, "dsyr!", rb_gsl_blas_dsyr, 4);
1085
+ rb_define_module_function(module, "dsyr", rb_gsl_blas_dsyr_a, 4);
1086
+ rb_define_module_function(module, "zher!", rb_gsl_blas_zher, 4);
1087
+ rb_define_module_function(module, "zher", rb_gsl_blas_zher_a, 4);
1088
+
1089
+ rb_define_module_function(module, "dsyr2!", rb_gsl_blas_dsyr2, 4);
1090
+ rb_define_module_function(module, "dsyr2", rb_gsl_blas_dsyr2_a, 4);
1091
+ rb_define_module_function(module, "zher2!", rb_gsl_blas_zher2, 4);
1092
+ rb_define_module_function(module, "zher2", rb_gsl_blas_zher2_a, 4);
1093
+ }