rb-gsl 1.16.0.5 → 1.16.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (612) hide show
  1. checksums.yaml +4 -4
  2. data/rb-gsl.gemspec +5 -10
  3. metadata +10 -713
  4. data/.gitignore +0 -12
  5. data/.travis.yml +0 -24
  6. data/AUTHORS +0 -12
  7. data/COPYING +0 -341
  8. data/ChangeLog +0 -621
  9. data/Gemfile +0 -4
  10. data/README.md +0 -77
  11. data/Rakefile +0 -20
  12. data/THANKS +0 -17
  13. data/examples/alf/alf.gp +0 -15
  14. data/examples/alf/alf.rb +0 -32
  15. data/examples/blas/blas.rb +0 -13
  16. data/examples/blas/dnrm2.rb +0 -16
  17. data/examples/blas/level1.rb +0 -81
  18. data/examples/blas/level2.rb +0 -11
  19. data/examples/blas/level3.rb +0 -12
  20. data/examples/bspline.rb +0 -57
  21. data/examples/cdf.rb +0 -16
  22. data/examples/cheb.rb +0 -21
  23. data/examples/combination.rb +0 -23
  24. data/examples/complex/RC-lpf.rb +0 -47
  25. data/examples/complex/add.rb +0 -36
  26. data/examples/complex/coerce.rb +0 -14
  27. data/examples/complex/complex.rb +0 -25
  28. data/examples/complex/fpmi.rb +0 -70
  29. data/examples/complex/functions.rb +0 -77
  30. data/examples/complex/michelson.rb +0 -36
  31. data/examples/complex/mul.rb +0 -28
  32. data/examples/complex/oscillator.rb +0 -17
  33. data/examples/complex/set.rb +0 -37
  34. data/examples/const/physconst.rb +0 -151
  35. data/examples/const/travel.rb +0 -45
  36. data/examples/deriv/demo.rb +0 -13
  37. data/examples/deriv/deriv.rb +0 -36
  38. data/examples/deriv/diff.rb +0 -35
  39. data/examples/dht.rb +0 -42
  40. data/examples/dirac.rb +0 -56
  41. data/examples/eigen/eigen.rb +0 -34
  42. data/examples/eigen/herm.rb +0 -22
  43. data/examples/eigen/narray.rb +0 -9
  44. data/examples/eigen/nonsymm.rb +0 -37
  45. data/examples/eigen/nonsymmv.rb +0 -43
  46. data/examples/eigen/qhoscillator.gp +0 -35
  47. data/examples/eigen/qhoscillator.rb +0 -90
  48. data/examples/eigen/vander.rb +0 -41
  49. data/examples/fft/fft.rb +0 -17
  50. data/examples/fft/fft2.rb +0 -17
  51. data/examples/fft/forward.rb +0 -25
  52. data/examples/fft/forward2.rb +0 -26
  53. data/examples/fft/radix2.rb +0 -18
  54. data/examples/fft/real-halfcomplex.rb +0 -33
  55. data/examples/fft/real-halfcomplex2.rb +0 -30
  56. data/examples/fft/realradix2.rb +0 -19
  57. data/examples/fft/sunspot.dat +0 -256
  58. data/examples/fft/sunspot.rb +0 -16
  59. data/examples/fit/expdata.dat +0 -20
  60. data/examples/fit/expfit.rb +0 -31
  61. data/examples/fit/gaussfit.rb +0 -29
  62. data/examples/fit/gaussian_2peaks.rb +0 -34
  63. data/examples/fit/hillfit.rb +0 -40
  64. data/examples/fit/lognormal.rb +0 -26
  65. data/examples/fit/lorentzfit.rb +0 -22
  66. data/examples/fit/multifit.rb +0 -72
  67. data/examples/fit/ndlinear.rb +0 -133
  68. data/examples/fit/nonlinearfit.rb +0 -89
  69. data/examples/fit/plot.gp +0 -36
  70. data/examples/fit/polyfit.rb +0 -9
  71. data/examples/fit/powerfit.rb +0 -21
  72. data/examples/fit/sigmoidfit.rb +0 -40
  73. data/examples/fit/sinfit.rb +0 -22
  74. data/examples/fit/wlinear.rb +0 -46
  75. data/examples/fresnel.rb +0 -11
  76. data/examples/function/function.rb +0 -36
  77. data/examples/function/log.rb +0 -7
  78. data/examples/function/min.rb +0 -33
  79. data/examples/function/sin.rb +0 -10
  80. data/examples/function/synchrotron.rb +0 -18
  81. data/examples/gallery/butterfly.rb +0 -7
  82. data/examples/gallery/cayley.rb +0 -12
  83. data/examples/gallery/cornu.rb +0 -23
  84. data/examples/gallery/eight.rb +0 -11
  85. data/examples/gallery/koch.rb +0 -40
  86. data/examples/gallery/lemniscate.rb +0 -11
  87. data/examples/gallery/polar.rb +0 -11
  88. data/examples/gallery/rgplot/cossin.rb +0 -35
  89. data/examples/gallery/rgplot/rgplot.replaced +0 -0
  90. data/examples/gallery/rgplot/roesller.rb +0 -55
  91. data/examples/gallery/roesller.rb +0 -39
  92. data/examples/gallery/scarabaeus.rb +0 -14
  93. data/examples/histogram/cauchy.rb +0 -27
  94. data/examples/histogram/cauchy.sh +0 -2
  95. data/examples/histogram/exponential.rb +0 -19
  96. data/examples/histogram/gauss.rb +0 -16
  97. data/examples/histogram/gsl-histogram.rb +0 -40
  98. data/examples/histogram/histo2d.rb +0 -31
  99. data/examples/histogram/histo3d.rb +0 -34
  100. data/examples/histogram/histogram-pdf.rb +0 -27
  101. data/examples/histogram/histogram.rb +0 -26
  102. data/examples/histogram/integral.rb +0 -28
  103. data/examples/histogram/poisson.rb +0 -27
  104. data/examples/histogram/power.rb +0 -25
  105. data/examples/histogram/rebin.rb +0 -17
  106. data/examples/histogram/smp.dat +0 -5
  107. data/examples/histogram/xexp.rb +0 -21
  108. data/examples/integration/ahmed.rb +0 -21
  109. data/examples/integration/cosmology.rb +0 -75
  110. data/examples/integration/friedmann.gp +0 -16
  111. data/examples/integration/friedmann.rb +0 -35
  112. data/examples/integration/gamma-zeta.rb +0 -35
  113. data/examples/integration/integration.rb +0 -22
  114. data/examples/integration/qag.rb +0 -8
  115. data/examples/integration/qag2.rb +0 -14
  116. data/examples/integration/qag3.rb +0 -8
  117. data/examples/integration/qagi.rb +0 -28
  118. data/examples/integration/qagi2.rb +0 -49
  119. data/examples/integration/qagiu.rb +0 -29
  120. data/examples/integration/qagp.rb +0 -20
  121. data/examples/integration/qags.rb +0 -14
  122. data/examples/integration/qawc.rb +0 -18
  123. data/examples/integration/qawf.rb +0 -41
  124. data/examples/integration/qawo.rb +0 -29
  125. data/examples/integration/qaws.rb +0 -30
  126. data/examples/integration/qng.rb +0 -17
  127. data/examples/interp/demo.gp +0 -20
  128. data/examples/interp/demo.rb +0 -45
  129. data/examples/interp/interp.rb +0 -37
  130. data/examples/interp/points +0 -10
  131. data/examples/interp/spline.rb +0 -20
  132. data/examples/jacobi/deriv.rb +0 -40
  133. data/examples/jacobi/integrate.rb +0 -34
  134. data/examples/jacobi/interp.rb +0 -43
  135. data/examples/jacobi/jacobi.rb +0 -11
  136. data/examples/linalg/HH.rb +0 -15
  137. data/examples/linalg/HH_narray.rb +0 -13
  138. data/examples/linalg/LQ_solve.rb +0 -73
  139. data/examples/linalg/LU.rb +0 -84
  140. data/examples/linalg/LU2.rb +0 -31
  141. data/examples/linalg/LU_narray.rb +0 -24
  142. data/examples/linalg/PTLQ.rb +0 -47
  143. data/examples/linalg/QR.rb +0 -18
  144. data/examples/linalg/QRPT.rb +0 -47
  145. data/examples/linalg/QR_solve.rb +0 -78
  146. data/examples/linalg/QR_solve_narray.rb +0 -13
  147. data/examples/linalg/SV.rb +0 -16
  148. data/examples/linalg/SV_narray.rb +0 -12
  149. data/examples/linalg/SV_solve.rb +0 -49
  150. data/examples/linalg/chol.rb +0 -29
  151. data/examples/linalg/chol_narray.rb +0 -15
  152. data/examples/linalg/complex.rb +0 -57
  153. data/examples/linalg/invert_narray.rb +0 -10
  154. data/examples/math/const.rb +0 -67
  155. data/examples/math/elementary.rb +0 -35
  156. data/examples/math/functions.rb +0 -41
  157. data/examples/math/inf_nan.rb +0 -34
  158. data/examples/math/minmax.rb +0 -22
  159. data/examples/math/power.rb +0 -18
  160. data/examples/math/test.rb +0 -31
  161. data/examples/matrix/a.dat +0 -0
  162. data/examples/matrix/add.rb +0 -45
  163. data/examples/matrix/b.dat +0 -4
  164. data/examples/matrix/cat.rb +0 -31
  165. data/examples/matrix/colvectors.rb +0 -24
  166. data/examples/matrix/complex.rb +0 -41
  167. data/examples/matrix/det.rb +0 -29
  168. data/examples/matrix/diagonal.rb +0 -23
  169. data/examples/matrix/get_all.rb +0 -159
  170. data/examples/matrix/hilbert.rb +0 -31
  171. data/examples/matrix/iterator.rb +0 -19
  172. data/examples/matrix/matrix.rb +0 -57
  173. data/examples/matrix/minmax.rb +0 -53
  174. data/examples/matrix/mul.rb +0 -39
  175. data/examples/matrix/rand.rb +0 -20
  176. data/examples/matrix/read.rb +0 -29
  177. data/examples/matrix/rowcol.rb +0 -47
  178. data/examples/matrix/set.rb +0 -41
  179. data/examples/matrix/set_all.rb +0 -100
  180. data/examples/matrix/view.rb +0 -32
  181. data/examples/matrix/view_all.rb +0 -148
  182. data/examples/matrix/write.rb +0 -23
  183. data/examples/min.rb +0 -29
  184. data/examples/monte/miser.rb +0 -47
  185. data/examples/monte/monte.rb +0 -47
  186. data/examples/monte/plain.rb +0 -47
  187. data/examples/monte/vegas.rb +0 -46
  188. data/examples/multimin/bundle.rb +0 -66
  189. data/examples/multimin/cqp.rb +0 -109
  190. data/examples/multimin/fdfminimizer.rb +0 -40
  191. data/examples/multimin/fminimizer.rb +0 -41
  192. data/examples/multiroot/demo.rb +0 -36
  193. data/examples/multiroot/fdfsolver.rb +0 -50
  194. data/examples/multiroot/fsolver.rb +0 -33
  195. data/examples/multiroot/fsolver2.rb +0 -32
  196. data/examples/multiroot/fsolver3.rb +0 -26
  197. data/examples/narray/histogram.rb +0 -14
  198. data/examples/narray/mandel.rb +0 -27
  199. data/examples/narray/narray.rb +0 -28
  200. data/examples/narray/narray2.rb +0 -44
  201. data/examples/narray/sf.rb +0 -26
  202. data/examples/ntuple/create.rb +0 -17
  203. data/examples/ntuple/project.rb +0 -31
  204. data/examples/odeiv/binarysystem.gp +0 -23
  205. data/examples/odeiv/binarysystem.rb +0 -104
  206. data/examples/odeiv/demo.gp +0 -24
  207. data/examples/odeiv/demo.rb +0 -69
  208. data/examples/odeiv/demo2.gp +0 -26
  209. data/examples/odeiv/duffing.rb +0 -45
  210. data/examples/odeiv/frei1.rb +0 -109
  211. data/examples/odeiv/frei2.rb +0 -76
  212. data/examples/odeiv/legendre.rb +0 -52
  213. data/examples/odeiv/odeiv.rb +0 -32
  214. data/examples/odeiv/odeiv2.rb +0 -45
  215. data/examples/odeiv/oscillator.rb +0 -42
  216. data/examples/odeiv/sedov.rb +0 -97
  217. data/examples/odeiv/whitedwarf.gp +0 -40
  218. data/examples/odeiv/whitedwarf.rb +0 -158
  219. data/examples/ool/conmin.rb +0 -100
  220. data/examples/ool/gencan.rb +0 -99
  221. data/examples/ool/pgrad.rb +0 -100
  222. data/examples/ool/spg.rb +0 -100
  223. data/examples/pdf/bernoulli.rb +0 -5
  224. data/examples/pdf/beta.rb +0 -7
  225. data/examples/pdf/binomiral.rb +0 -10
  226. data/examples/pdf/cauchy.rb +0 -6
  227. data/examples/pdf/chisq.rb +0 -8
  228. data/examples/pdf/exponential.rb +0 -7
  229. data/examples/pdf/exppow.rb +0 -6
  230. data/examples/pdf/fdist.rb +0 -7
  231. data/examples/pdf/flat.rb +0 -7
  232. data/examples/pdf/gamma.rb +0 -8
  233. data/examples/pdf/gauss-tail.rb +0 -5
  234. data/examples/pdf/gauss.rb +0 -6
  235. data/examples/pdf/geometric.rb +0 -5
  236. data/examples/pdf/gumbel.rb +0 -6
  237. data/examples/pdf/hypergeometric.rb +0 -11
  238. data/examples/pdf/landau.rb +0 -5
  239. data/examples/pdf/laplace.rb +0 -7
  240. data/examples/pdf/logarithmic.rb +0 -5
  241. data/examples/pdf/logistic.rb +0 -6
  242. data/examples/pdf/lognormal.rb +0 -6
  243. data/examples/pdf/neg-binomiral.rb +0 -10
  244. data/examples/pdf/pareto.rb +0 -7
  245. data/examples/pdf/pascal.rb +0 -10
  246. data/examples/pdf/poisson.rb +0 -5
  247. data/examples/pdf/rayleigh-tail.rb +0 -6
  248. data/examples/pdf/rayleigh.rb +0 -6
  249. data/examples/pdf/tdist.rb +0 -6
  250. data/examples/pdf/weibull.rb +0 -8
  251. data/examples/permutation/ex1.rb +0 -22
  252. data/examples/permutation/permutation.rb +0 -16
  253. data/examples/poly/bell.rb +0 -6
  254. data/examples/poly/bessel.rb +0 -6
  255. data/examples/poly/cheb.rb +0 -6
  256. data/examples/poly/cheb_II.rb +0 -6
  257. data/examples/poly/cubic.rb +0 -9
  258. data/examples/poly/demo.rb +0 -20
  259. data/examples/poly/eval.rb +0 -28
  260. data/examples/poly/eval_derivs.rb +0 -14
  261. data/examples/poly/fit.rb +0 -21
  262. data/examples/poly/hermite.rb +0 -6
  263. data/examples/poly/poly.rb +0 -13
  264. data/examples/poly/quadratic.rb +0 -25
  265. data/examples/random/diffusion.rb +0 -34
  266. data/examples/random/gaussian.rb +0 -9
  267. data/examples/random/generator.rb +0 -27
  268. data/examples/random/hdsobol.rb +0 -21
  269. data/examples/random/poisson.rb +0 -9
  270. data/examples/random/qrng.rb +0 -19
  271. data/examples/random/randomwalk.rb +0 -37
  272. data/examples/random/randomwalk2d.rb +0 -19
  273. data/examples/random/rayleigh.rb +0 -36
  274. data/examples/random/rng.rb +0 -33
  275. data/examples/random/rngextra.rb +0 -14
  276. data/examples/roots/bisection.rb +0 -25
  277. data/examples/roots/brent.rb +0 -43
  278. data/examples/roots/demo.rb +0 -30
  279. data/examples/roots/newton.rb +0 -46
  280. data/examples/roots/recombination.gp +0 -11
  281. data/examples/roots/recombination.rb +0 -61
  282. data/examples/roots/steffenson.rb +0 -48
  283. data/examples/sf/ShiChi.rb +0 -6
  284. data/examples/sf/SiCi.rb +0 -6
  285. data/examples/sf/airy_Ai.rb +0 -8
  286. data/examples/sf/airy_Bi.rb +0 -8
  287. data/examples/sf/bessel_IK.rb +0 -12
  288. data/examples/sf/bessel_JY.rb +0 -13
  289. data/examples/sf/beta_inc.rb +0 -9
  290. data/examples/sf/clausen.rb +0 -6
  291. data/examples/sf/dawson.rb +0 -5
  292. data/examples/sf/debye.rb +0 -9
  293. data/examples/sf/dilog.rb +0 -6
  294. data/examples/sf/ellint.rb +0 -6
  295. data/examples/sf/expint.rb +0 -8
  296. data/examples/sf/fermi.rb +0 -10
  297. data/examples/sf/gamma_inc_P.rb +0 -9
  298. data/examples/sf/gegenbauer.rb +0 -8
  299. data/examples/sf/hyperg.rb +0 -7
  300. data/examples/sf/laguerre.rb +0 -19
  301. data/examples/sf/lambertW.rb +0 -5
  302. data/examples/sf/legendre_P.rb +0 -10
  303. data/examples/sf/lngamma.rb +0 -5
  304. data/examples/sf/psi.rb +0 -54
  305. data/examples/sf/sphbessel.gp +0 -27
  306. data/examples/sf/sphbessel.rb +0 -30
  307. data/examples/sf/synchrotron.rb +0 -5
  308. data/examples/sf/transport.rb +0 -10
  309. data/examples/sf/zetam1.rb +0 -5
  310. data/examples/siman.rb +0 -44
  311. data/examples/sort/heapsort.rb +0 -23
  312. data/examples/sort/heapsort_vector_complex.rb +0 -21
  313. data/examples/sort/sort.rb +0 -23
  314. data/examples/sort/sort2.rb +0 -16
  315. data/examples/stats/mean.rb +0 -17
  316. data/examples/stats/statistics.rb +0 -18
  317. data/examples/stats/test.rb +0 -9
  318. data/examples/sum.rb +0 -34
  319. data/examples/tamu_anova.rb +0 -18
  320. data/examples/vector/a.dat +0 -0
  321. data/examples/vector/add.rb +0 -56
  322. data/examples/vector/b.dat +0 -4
  323. data/examples/vector/c.dat +0 -3
  324. data/examples/vector/collect.rb +0 -26
  325. data/examples/vector/compare.rb +0 -28
  326. data/examples/vector/complex.rb +0 -51
  327. data/examples/vector/complex_get_all.rb +0 -85
  328. data/examples/vector/complex_set_all.rb +0 -131
  329. data/examples/vector/complex_view_all.rb +0 -77
  330. data/examples/vector/connect.rb +0 -22
  331. data/examples/vector/decimate.rb +0 -38
  332. data/examples/vector/diff.rb +0 -31
  333. data/examples/vector/filescan.rb +0 -17
  334. data/examples/vector/floor.rb +0 -23
  335. data/examples/vector/get_all.rb +0 -82
  336. data/examples/vector/gnuplot.rb +0 -38
  337. data/examples/vector/graph.rb +0 -28
  338. data/examples/vector/histogram.rb +0 -22
  339. data/examples/vector/linspace.rb +0 -24
  340. data/examples/vector/log.rb +0 -17
  341. data/examples/vector/logic.rb +0 -33
  342. data/examples/vector/logspace.rb +0 -25
  343. data/examples/vector/minmax.rb +0 -47
  344. data/examples/vector/mul.rb +0 -49
  345. data/examples/vector/narray.rb +0 -46
  346. data/examples/vector/read.rb +0 -29
  347. data/examples/vector/set.rb +0 -35
  348. data/examples/vector/set_all.rb +0 -121
  349. data/examples/vector/smpv.dat +0 -15
  350. data/examples/vector/test.rb +0 -43
  351. data/examples/vector/test_gslblock.rb +0 -58
  352. data/examples/vector/vector.rb +0 -110
  353. data/examples/vector/view.rb +0 -35
  354. data/examples/vector/view_all.rb +0 -73
  355. data/examples/vector/where.rb +0 -29
  356. data/examples/vector/write.rb +0 -24
  357. data/examples/vector/zip.rb +0 -34
  358. data/examples/wavelet/ecg.dat +0 -256
  359. data/examples/wavelet/wavelet1.rb +0 -50
  360. data/ext/gsl_native/alf.c +0 -206
  361. data/ext/gsl_native/array.c +0 -553
  362. data/ext/gsl_native/array_complex.c +0 -245
  363. data/ext/gsl_native/blas.c +0 -28
  364. data/ext/gsl_native/blas1.c +0 -733
  365. data/ext/gsl_native/blas2.c +0 -1088
  366. data/ext/gsl_native/blas3.c +0 -880
  367. data/ext/gsl_native/block.c +0 -40
  368. data/ext/gsl_native/block_source.h +0 -885
  369. data/ext/gsl_native/bspline.c +0 -122
  370. data/ext/gsl_native/bundle.c +0 -3
  371. data/ext/gsl_native/cdf.c +0 -740
  372. data/ext/gsl_native/cheb.c +0 -531
  373. data/ext/gsl_native/combination.c +0 -275
  374. data/ext/gsl_native/common.c +0 -293
  375. data/ext/gsl_native/complex.c +0 -1002
  376. data/ext/gsl_native/const.c +0 -331
  377. data/ext/gsl_native/const_additional.c +0 -99
  378. data/ext/gsl_native/cqp.c +0 -283
  379. data/ext/gsl_native/deriv.c +0 -187
  380. data/ext/gsl_native/dht.c +0 -353
  381. data/ext/gsl_native/diff.c +0 -164
  382. data/ext/gsl_native/dirac.c +0 -388
  383. data/ext/gsl_native/eigen.c +0 -2322
  384. data/ext/gsl_native/error.c +0 -193
  385. data/ext/gsl_native/extconf.rb +0 -118
  386. data/ext/gsl_native/fft.c +0 -1095
  387. data/ext/gsl_native/fit.c +0 -204
  388. data/ext/gsl_native/fresnel.c +0 -312
  389. data/ext/gsl_native/function.c +0 -518
  390. data/ext/gsl_native/geometry.c +0 -139
  391. data/ext/gsl_native/graph.c +0 -1590
  392. data/ext/gsl_native/gsl.c +0 -259
  393. data/ext/gsl_native/gsl_narray.c +0 -794
  394. data/ext/gsl_native/histogram.c +0 -1964
  395. data/ext/gsl_native/histogram2d.c +0 -1042
  396. data/ext/gsl_native/histogram3d.c +0 -884
  397. data/ext/gsl_native/histogram3d_source.c +0 -749
  398. data/ext/gsl_native/histogram_find.c +0 -99
  399. data/ext/gsl_native/histogram_oper.c +0 -150
  400. data/ext/gsl_native/ieee.c +0 -88
  401. data/ext/gsl_native/include/rb_gsl.h +0 -136
  402. data/ext/gsl_native/include/rb_gsl_array.h +0 -214
  403. data/ext/gsl_native/include/rb_gsl_cheb.h +0 -19
  404. data/ext/gsl_native/include/rb_gsl_common.h +0 -348
  405. data/ext/gsl_native/include/rb_gsl_complex.h +0 -25
  406. data/ext/gsl_native/include/rb_gsl_const.h +0 -23
  407. data/ext/gsl_native/include/rb_gsl_dirac.h +0 -6
  408. data/ext/gsl_native/include/rb_gsl_eigen.h +0 -17
  409. data/ext/gsl_native/include/rb_gsl_fft.h +0 -49
  410. data/ext/gsl_native/include/rb_gsl_fit.h +0 -23
  411. data/ext/gsl_native/include/rb_gsl_function.h +0 -23
  412. data/ext/gsl_native/include/rb_gsl_graph.h +0 -68
  413. data/ext/gsl_native/include/rb_gsl_histogram.h +0 -63
  414. data/ext/gsl_native/include/rb_gsl_histogram3d.h +0 -97
  415. data/ext/gsl_native/include/rb_gsl_integration.h +0 -17
  416. data/ext/gsl_native/include/rb_gsl_interp.h +0 -41
  417. data/ext/gsl_native/include/rb_gsl_linalg.h +0 -21
  418. data/ext/gsl_native/include/rb_gsl_math.h +0 -20
  419. data/ext/gsl_native/include/rb_gsl_odeiv.h +0 -18
  420. data/ext/gsl_native/include/rb_gsl_poly.h +0 -67
  421. data/ext/gsl_native/include/rb_gsl_rational.h +0 -30
  422. data/ext/gsl_native/include/rb_gsl_rng.h +0 -20
  423. data/ext/gsl_native/include/rb_gsl_root.h +0 -22
  424. data/ext/gsl_native/include/rb_gsl_sf.h +0 -110
  425. data/ext/gsl_native/include/rb_gsl_statistics.h +0 -17
  426. data/ext/gsl_native/include/rb_gsl_tensor.h +0 -43
  427. data/ext/gsl_native/include/rb_gsl_with_narray.h +0 -31
  428. data/ext/gsl_native/include/templates_off.h +0 -87
  429. data/ext/gsl_native/include/templates_on.h +0 -241
  430. data/ext/gsl_native/integration.c +0 -1154
  431. data/ext/gsl_native/interp.c +0 -499
  432. data/ext/gsl_native/jacobi.c +0 -733
  433. data/ext/gsl_native/linalg.c +0 -3915
  434. data/ext/gsl_native/linalg_complex.c +0 -726
  435. data/ext/gsl_native/math.c +0 -706
  436. data/ext/gsl_native/matrix.c +0 -36
  437. data/ext/gsl_native/matrix_complex.c +0 -1733
  438. data/ext/gsl_native/matrix_double.c +0 -557
  439. data/ext/gsl_native/matrix_int.c +0 -255
  440. data/ext/gsl_native/matrix_source.h +0 -2708
  441. data/ext/gsl_native/min.c +0 -219
  442. data/ext/gsl_native/monte.c +0 -978
  443. data/ext/gsl_native/multifit.c +0 -1862
  444. data/ext/gsl_native/multimin.c +0 -778
  445. data/ext/gsl_native/multimin_fsdf.c +0 -156
  446. data/ext/gsl_native/multiroots.c +0 -952
  447. data/ext/gsl_native/multiset.c +0 -210
  448. data/ext/gsl_native/ndlinear.c +0 -320
  449. data/ext/gsl_native/nmf.c +0 -171
  450. data/ext/gsl_native/nmf_wrap.c +0 -75
  451. data/ext/gsl_native/ntuple.c +0 -469
  452. data/ext/gsl_native/odeiv.c +0 -947
  453. data/ext/gsl_native/ool.c +0 -879
  454. data/ext/gsl_native/permutation.c +0 -598
  455. data/ext/gsl_native/poly.c +0 -39
  456. data/ext/gsl_native/poly2.c +0 -265
  457. data/ext/gsl_native/poly_source.h +0 -1871
  458. data/ext/gsl_native/qrng.c +0 -160
  459. data/ext/gsl_native/randist.c +0 -1848
  460. data/ext/gsl_native/rational.c +0 -480
  461. data/ext/gsl_native/rng.c +0 -595
  462. data/ext/gsl_native/root.c +0 -407
  463. data/ext/gsl_native/sf.c +0 -1446
  464. data/ext/gsl_native/sf_airy.c +0 -200
  465. data/ext/gsl_native/sf_bessel.c +0 -871
  466. data/ext/gsl_native/sf_clausen.c +0 -28
  467. data/ext/gsl_native/sf_coulomb.c +0 -206
  468. data/ext/gsl_native/sf_coupling.c +0 -121
  469. data/ext/gsl_native/sf_dawson.c +0 -29
  470. data/ext/gsl_native/sf_debye.c +0 -148
  471. data/ext/gsl_native/sf_dilog.c +0 -43
  472. data/ext/gsl_native/sf_elementary.c +0 -46
  473. data/ext/gsl_native/sf_ellint.c +0 -206
  474. data/ext/gsl_native/sf_elljac.c +0 -30
  475. data/ext/gsl_native/sf_erfc.c +0 -89
  476. data/ext/gsl_native/sf_exp.c +0 -169
  477. data/ext/gsl_native/sf_expint.c +0 -201
  478. data/ext/gsl_native/sf_fermi_dirac.c +0 -148
  479. data/ext/gsl_native/sf_gamma.c +0 -343
  480. data/ext/gsl_native/sf_gegenbauer.c +0 -97
  481. data/ext/gsl_native/sf_hyperg.c +0 -203
  482. data/ext/gsl_native/sf_laguerre.c +0 -113
  483. data/ext/gsl_native/sf_lambert.c +0 -47
  484. data/ext/gsl_native/sf_legendre.c +0 -368
  485. data/ext/gsl_native/sf_log.c +0 -105
  486. data/ext/gsl_native/sf_mathieu.c +0 -235
  487. data/ext/gsl_native/sf_power.c +0 -47
  488. data/ext/gsl_native/sf_psi.c +0 -89
  489. data/ext/gsl_native/sf_synchrotron.c +0 -48
  490. data/ext/gsl_native/sf_transport.c +0 -76
  491. data/ext/gsl_native/sf_trigonometric.c +0 -210
  492. data/ext/gsl_native/sf_zeta.c +0 -115
  493. data/ext/gsl_native/signal.c +0 -303
  494. data/ext/gsl_native/siman.c +0 -713
  495. data/ext/gsl_native/sort.c +0 -207
  496. data/ext/gsl_native/spline.c +0 -377
  497. data/ext/gsl_native/stats.c +0 -787
  498. data/ext/gsl_native/sum.c +0 -168
  499. data/ext/gsl_native/tamu_anova.c +0 -56
  500. data/ext/gsl_native/tensor.c +0 -35
  501. data/ext/gsl_native/tensor_source.h +0 -1122
  502. data/ext/gsl_native/vector.c +0 -35
  503. data/ext/gsl_native/vector_complex.c +0 -2241
  504. data/ext/gsl_native/vector_double.c +0 -1433
  505. data/ext/gsl_native/vector_int.c +0 -202
  506. data/ext/gsl_native/vector_source.h +0 -3321
  507. data/ext/gsl_native/wavelet.c +0 -923
  508. data/lib/gsl.rb +0 -8
  509. data/lib/gsl/gnuplot.rb +0 -41
  510. data/lib/gsl/oper.rb +0 -43
  511. data/lib/gsl/version.rb +0 -3
  512. data/lib/ool.rb +0 -22
  513. data/lib/ool/conmin.rb +0 -30
  514. data/lib/rbgsl.rb +0 -1
  515. data/rdoc/alf.rdoc +0 -77
  516. data/rdoc/blas.rdoc +0 -269
  517. data/rdoc/bspline.rdoc +0 -42
  518. data/rdoc/changes.rdoc +0 -159
  519. data/rdoc/cheb.rdoc +0 -99
  520. data/rdoc/cholesky_complex.rdoc +0 -46
  521. data/rdoc/combi.rdoc +0 -125
  522. data/rdoc/complex.rdoc +0 -210
  523. data/rdoc/const.rdoc +0 -546
  524. data/rdoc/dht.rdoc +0 -122
  525. data/rdoc/diff.rdoc +0 -133
  526. data/rdoc/ehandling.rdoc +0 -50
  527. data/rdoc/eigen.rdoc +0 -401
  528. data/rdoc/fft.rdoc +0 -535
  529. data/rdoc/fit.rdoc +0 -284
  530. data/rdoc/function.rdoc +0 -94
  531. data/rdoc/graph.rdoc +0 -137
  532. data/rdoc/hist.rdoc +0 -409
  533. data/rdoc/hist2d.rdoc +0 -279
  534. data/rdoc/hist3d.rdoc +0 -112
  535. data/rdoc/integration.rdoc +0 -398
  536. data/rdoc/interp.rdoc +0 -231
  537. data/rdoc/intro.rdoc +0 -27
  538. data/rdoc/linalg.rdoc +0 -681
  539. data/rdoc/linalg_complex.rdoc +0 -88
  540. data/rdoc/math.rdoc +0 -276
  541. data/rdoc/matrix.rdoc +0 -1093
  542. data/rdoc/min.rdoc +0 -189
  543. data/rdoc/monte.rdoc +0 -234
  544. data/rdoc/multimin.rdoc +0 -312
  545. data/rdoc/multiroot.rdoc +0 -293
  546. data/rdoc/narray.rdoc +0 -177
  547. data/rdoc/ndlinear.rdoc +0 -250
  548. data/rdoc/nonlinearfit.rdoc +0 -348
  549. data/rdoc/ntuple.rdoc +0 -88
  550. data/rdoc/odeiv.rdoc +0 -378
  551. data/rdoc/perm.rdoc +0 -221
  552. data/rdoc/poly.rdoc +0 -335
  553. data/rdoc/qrng.rdoc +0 -90
  554. data/rdoc/randist.rdoc +0 -233
  555. data/rdoc/ref.rdoc +0 -93
  556. data/rdoc/rng.rdoc +0 -203
  557. data/rdoc/roots.rdoc +0 -305
  558. data/rdoc/sf.rdoc +0 -1622
  559. data/rdoc/siman.rdoc +0 -89
  560. data/rdoc/sort.rdoc +0 -94
  561. data/rdoc/start.rdoc +0 -16
  562. data/rdoc/stats.rdoc +0 -219
  563. data/rdoc/sum.rdoc +0 -65
  564. data/rdoc/tensor.rdoc +0 -251
  565. data/rdoc/tut.rdoc +0 -5
  566. data/rdoc/use.rdoc +0 -177
  567. data/rdoc/vector.rdoc +0 -1243
  568. data/rdoc/vector_complex.rdoc +0 -347
  569. data/rdoc/wavelet.rdoc +0 -218
  570. data/test/gsl/blas_test.rb +0 -79
  571. data/test/gsl/bspline_test.rb +0 -63
  572. data/test/gsl/cdf_test.rb +0 -1512
  573. data/test/gsl/cheb_test.rb +0 -80
  574. data/test/gsl/combination_test.rb +0 -100
  575. data/test/gsl/complex_test.rb +0 -20
  576. data/test/gsl/const_test.rb +0 -29
  577. data/test/gsl/deriv_test.rb +0 -62
  578. data/test/gsl/dht_test.rb +0 -79
  579. data/test/gsl/diff_test.rb +0 -53
  580. data/test/gsl/eigen_test.rb +0 -563
  581. data/test/gsl/err_test.rb +0 -23
  582. data/test/gsl/fit_test.rb +0 -101
  583. data/test/gsl/histo_test.rb +0 -14
  584. data/test/gsl/index_test.rb +0 -61
  585. data/test/gsl/integration_test.rb +0 -274
  586. data/test/gsl/interp_test.rb +0 -27
  587. data/test/gsl/linalg_test.rb +0 -463
  588. data/test/gsl/matrix_nmf_test.rb +0 -37
  589. data/test/gsl/matrix_test.rb +0 -98
  590. data/test/gsl/min_test.rb +0 -89
  591. data/test/gsl/monte_test.rb +0 -77
  592. data/test/gsl/multifit_test.rb +0 -753
  593. data/test/gsl/multimin_test.rb +0 -157
  594. data/test/gsl/multiroot_test.rb +0 -135
  595. data/test/gsl/multiset_test.rb +0 -52
  596. data/test/gsl/odeiv_test.rb +0 -275
  597. data/test/gsl/oper_test.rb +0 -98
  598. data/test/gsl/poly_test.rb +0 -338
  599. data/test/gsl/qrng_test.rb +0 -94
  600. data/test/gsl/quartic_test.rb +0 -28
  601. data/test/gsl/randist_test.rb +0 -122
  602. data/test/gsl/rng_test.rb +0 -303
  603. data/test/gsl/roots_test.rb +0 -78
  604. data/test/gsl/sf_test.rb +0 -2079
  605. data/test/gsl/stats_test.rb +0 -122
  606. data/test/gsl/sum_test.rb +0 -69
  607. data/test/gsl/tensor_test.rb +0 -396
  608. data/test/gsl/vector_test.rb +0 -223
  609. data/test/gsl/wavelet_test.rb +0 -130
  610. data/test/gsl_test.rb +0 -321
  611. data/test/test_helper.rb +0 -42
  612. data/uncrustify.cfg +0 -1693
@@ -1,255 +0,0 @@
1
- /*
2
- matrix_int.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
-
12
- #include "include/rb_gsl_array.h"
13
- #include "include/rb_gsl_complex.h"
14
- #ifdef HAVE_NARRAY_H
15
- #include "include/rb_gsl_with_narray.h"
16
- #endif
17
-
18
- int gsl_linalg_matmult_int(const gsl_matrix_int *A,
19
- const gsl_matrix_int *B, gsl_matrix_int *C);
20
-
21
-
22
- VALUE rb_gsl_matrix_to_i(VALUE obj);
23
-
24
- static VALUE rb_gsl_matrix_int_to_i(VALUE obj)
25
- {
26
- return obj;
27
- }
28
-
29
- VALUE rb_gsl_matrix_int_to_f(VALUE obj)
30
- {
31
- gsl_matrix_int *m;
32
- gsl_matrix *mnew;
33
- size_t i, j;
34
- Data_Get_Struct(obj, gsl_matrix_int, m);
35
- mnew = gsl_matrix_alloc(m->size1, m->size2);
36
- for (i = 0; i < m->size1; i++) {
37
- for (j = 0; j < m->size2; j++) {
38
- gsl_matrix_set(mnew, i, j, (double) gsl_matrix_int_get(m, i, j));
39
- }
40
- }
41
- return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
42
- }
43
-
44
- static VALUE rb_gsl_matrix_int_to_complex(VALUE obj)
45
- {
46
- gsl_matrix_int *m;
47
- gsl_matrix_complex *mnew;
48
- gsl_complex z;
49
- size_t i, j;
50
- Data_Get_Struct(obj, gsl_matrix_int, m);
51
- mnew = gsl_matrix_complex_alloc(m->size1, m->size2);
52
- for (i = 0; i < m->size1; i++) {
53
- for (j = 0; j < m->size2; j++) {
54
- GSL_SET_REAL(&z, (double) gsl_matrix_int_get(m, i, j));
55
- GSL_SET_IMAG(&z, 0.0);
56
- gsl_matrix_complex_set(mnew, i, j, z);
57
- }
58
- }
59
- return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, mnew);
60
- }
61
-
62
- static VALUE rb_gsl_matrix_int_coerce(VALUE obj, VALUE other)
63
- {
64
- return rb_ary_new3(2, other, rb_gsl_matrix_int_to_f(obj));
65
- }
66
-
67
- enum {
68
- GSL_MATRIX_INT_ADD,
69
- GSL_MATRIX_INT_SUB,
70
- GSL_MATRIX_INT_MUL,
71
- GSL_MATRIX_INT_DIV,
72
- };
73
-
74
- static VALUE rb_gsl_matrix_int_operation1(VALUE obj, VALUE other, int flag)
75
- {
76
- gsl_matrix_int *a, *anew, *b;
77
- gsl_vector_int *vi, *vinew;
78
- double bval;
79
- // local variable "result" declared and set, but never used
80
- //int result;
81
- Data_Get_Struct(obj, gsl_matrix_int, a);
82
- switch (TYPE(other)) {
83
- case T_FIXNUM:
84
- case T_FLOAT:
85
- bval = NUM2INT(other);
86
- anew = make_matrix_int_clone(a);
87
- switch (flag) {
88
- case GSL_MATRIX_INT_ADD:
89
- /*result =*/ gsl_matrix_int_add_constant(anew, bval);
90
- break;
91
- case GSL_MATRIX_INT_SUB:
92
- /*result =*/ gsl_matrix_int_add_constant(anew, -bval);
93
- break;
94
- case GSL_MATRIX_INT_MUL:
95
- /*result =*/ gsl_matrix_int_scale(anew, bval);
96
- break;
97
- case GSL_MATRIX_INT_DIV:
98
- /*result =*/ gsl_matrix_int_scale(anew, 1.0/bval);
99
- break;
100
- default:
101
- break;
102
- }
103
- break;
104
- default:
105
- if (MATRIX_P(other)) other = rb_gsl_matrix_to_i(other);
106
- if (VECTOR_P(other)) other = rb_gsl_vector_to_i(other);
107
- if (MATRIX_INT_P(other)) {
108
- anew = make_matrix_int_clone(a);
109
- Data_Get_Struct(other, gsl_matrix_int, b);
110
- switch (flag) {
111
- case GSL_MATRIX_INT_ADD:
112
- /*result =*/ gsl_matrix_int_add(anew, b);
113
- break;
114
- case GSL_MATRIX_INT_SUB:
115
- /*result =*/ gsl_matrix_int_sub(anew, b);
116
- break;
117
- case GSL_MATRIX_INT_MUL:
118
- /*result =*/ gsl_matrix_int_mul_elements(anew, b);
119
- break;
120
- case GSL_MATRIX_INT_DIV:
121
- /*result =*/ gsl_matrix_int_div_elements(anew, b);
122
- break;
123
- default:
124
- break;
125
- }
126
- } else if (VECTOR_INT_COL_P(other)) {
127
- switch (flag) {
128
- case GSL_MATRIX_INT_MUL:
129
- Data_Get_Struct(other, gsl_vector_int, vi);
130
- vinew = gsl_vector_int_alloc(vi->size);
131
- gsl_matrix_int_mul_vector(vinew, a, vi);
132
- return Data_Wrap_Struct(cgsl_vector_int_col, 0, gsl_vector_int_free, vinew);
133
- break;
134
- default:
135
- rb_raise(rb_eRuntimeError, "Operation not defined");
136
- }
137
- } else {
138
- rb_raise(rb_eTypeError, "Operation not defined with %s",
139
- rb_class2name(CLASS_OF(other)));
140
- }
141
- break;
142
- }
143
- return Data_Wrap_Struct(cgsl_matrix_int, 0, gsl_matrix_int_free, anew);
144
- }
145
-
146
- static VALUE rb_gsl_matrix_int_add(VALUE obj, VALUE other)
147
- {
148
- return rb_gsl_matrix_int_operation1(obj, other, GSL_MATRIX_INT_ADD);
149
- }
150
-
151
- static VALUE rb_gsl_matrix_int_sub(VALUE obj, VALUE other)
152
- {
153
- return rb_gsl_matrix_int_operation1(obj, other, GSL_MATRIX_INT_SUB);
154
- }
155
-
156
- static VALUE rb_gsl_matrix_int_mul(VALUE obj, VALUE other)
157
- {
158
- return rb_gsl_matrix_int_operation1(obj, other, GSL_MATRIX_INT_MUL);
159
- }
160
-
161
- static VALUE rb_gsl_matrix_int_div(VALUE obj, VALUE other)
162
- {
163
- return rb_gsl_matrix_int_operation1(obj, other, GSL_MATRIX_INT_DIV);
164
- }
165
-
166
- static VALUE rb_gsl_matrix_int_matrix_mul(VALUE obj, VALUE bb)
167
- {
168
- gsl_matrix_int *m = NULL, *b = NULL, *mnew = NULL;
169
- gsl_vector_int *vi, *vinew;
170
- Data_Get_Struct(obj, gsl_matrix_int, m);
171
- if (MATRIX_INT_P(bb)) {
172
- Data_Get_Struct(bb, gsl_matrix_int, b);
173
- mnew = gsl_matrix_int_alloc(m->size1, b->size2);
174
- gsl_linalg_matmult_int(m, b, mnew);
175
- return Data_Wrap_Struct(cgsl_matrix_int, 0, gsl_matrix_int_free, mnew);
176
- } else {
177
- if (VECTOR_INT_COL_P(bb)) {
178
- Data_Get_Struct(bb, gsl_vector_int, vi);
179
- vinew = gsl_vector_int_alloc(vi->size);
180
- gsl_matrix_int_mul_vector(vinew, m, vi);
181
- return Data_Wrap_Struct(cgsl_vector_int_col, 0, gsl_vector_int_free, vinew);
182
- }
183
- switch (TYPE(bb)) {
184
- case T_FIXNUM:
185
- return rb_gsl_matrix_int_mul(obj, bb);
186
- /* return rb_gsl_matrix_int_power(obj, bb);*/
187
- break;
188
- default:
189
- rb_raise(rb_eTypeError, "wrong argument type %s (Matrix::Int, Vector::Int::Col or Fixnum expected)",
190
- rb_class2name(CLASS_OF(bb)));
191
- break;
192
- }
193
- }
194
- }
195
-
196
- int gsl_linalg_matmult_int(const gsl_matrix_int *A,
197
- const gsl_matrix_int *B, gsl_matrix_int *C)
198
- {
199
- if (A->size2 != B->size1 || A->size1 != C->size1 || B->size2 != C->size2)
200
- {
201
- GSL_ERROR ("matrix sizes are not conformant", GSL_EBADLEN);
202
- }
203
- else
204
- {
205
- int a, b;
206
- int temp;
207
- size_t i, j, k;
208
-
209
- for (i = 0; i < C->size1; i++)
210
- {
211
- for (j = 0; j < C->size2; j++)
212
- {
213
- a = gsl_matrix_int_get(A, i, 0);
214
- b = gsl_matrix_int_get(B, 0, j);
215
- temp = a * b;
216
- for (k = 1; k < A->size2; k++)
217
- {
218
- a = gsl_matrix_int_get(A, i, k);
219
- b = gsl_matrix_int_get(B, k, j);
220
- temp += a * b;
221
- }
222
- gsl_matrix_int_set(C, i, j, temp);
223
- }
224
- }
225
- return GSL_SUCCESS;
226
- }
227
- }
228
-
229
- void Init_gsl_matrix_int_init(VALUE module);
230
- void Init_gsl_matrix_int(VALUE module)
231
- {
232
- Init_gsl_matrix_int_init(module);
233
- /*****/
234
-
235
- rb_define_method(cgsl_matrix_int, "to_f", rb_gsl_matrix_int_to_f, 0);
236
- rb_define_method(cgsl_matrix_int, "to_i", rb_gsl_matrix_int_to_i, 0);
237
- rb_define_method(cgsl_matrix_int, "to_complex", rb_gsl_matrix_int_to_complex, 0);
238
-
239
- /*****/
240
- rb_define_method(cgsl_matrix_int, "coerce", rb_gsl_matrix_int_coerce, 1);
241
- /*****/
242
- rb_define_method(cgsl_matrix_int, "add", rb_gsl_matrix_int_add, 1);
243
- rb_define_alias(cgsl_matrix_int, "+", "add");
244
- rb_define_method(cgsl_matrix_int, "sub", rb_gsl_matrix_int_sub, 1);
245
- rb_define_alias(cgsl_matrix_int, "-", "sub");
246
- rb_define_method(cgsl_matrix_int, "mul", rb_gsl_matrix_int_mul, 1);
247
- /* rb_define_alias(cgsl_matrix_int, "*", "mul");*/
248
- rb_define_method(cgsl_matrix_int, "div", rb_gsl_matrix_int_div, 1);
249
- rb_define_alias(cgsl_matrix_int, "/", "div");
250
-
251
- rb_define_method(cgsl_matrix_int, "matrix_mul", rb_gsl_matrix_int_matrix_mul, 1);
252
- rb_define_alias(cgsl_matrix_int, "*", "matrix_mul");
253
- /*****/
254
-
255
- }
@@ -1,2708 +0,0 @@
1
- /*
2
- matrix_source.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
-
12
- #ifdef BASE_DOUBLE
13
- #define NUMCONV(x) NUM2DBL(x)
14
- #define NUMCONV2(x) NUM2DBL(x)
15
- #define PRINTF_FORMAT "%4.3e "
16
- #define MAT_ROW_COL MATRIX_ROW_COL
17
- #define MAT_P MATRIX_P
18
- #define MAT_ROW_P MATRIX_ROW_P
19
- #define MAT_COL_P MATRIX_COL_P
20
- #define C_TO_VALUE rb_float_new
21
- #define C_TO_VALUE2 rb_float_new
22
- #define CHECK_MAT CHECK_MATRIX
23
- #define MAT_VIEW_P MATRIX_VIEW_P
24
- #define VEC_ROW_COL VECTOR_ROW_COL
25
- #define VEC_P VECTOR_P
26
- #define VEC_ROW_P VECTOR_ROW_P
27
- #define VEC_COL_P VECTOR_COL_P
28
- #define CHECK_VEC CHECK_VECTOR
29
- #define VEC_VIEW_P VECTOR_VIEW_P
30
- #elif defined(BASE_INT)
31
- #define NUMCONV(x) FIX2INT(x)
32
- #define NUMCONV2(x) NUM2INT(x)
33
- #define PRINTF_FORMAT "%d "
34
- #define MAT_ROW_COL MATRIX_INT_ROW_COL
35
- #define MAT_P MATRIX_INT_P
36
- #define C_TO_VALUE INT2FIX
37
- #define C_TO_VALUE2 INT2NUM
38
- #define MAT_ROW_P MATRIX_INT_ROW_P
39
- #define MAT_COL_P MATRIX_INT_COL_P
40
- #define CHECK_MAT CHECK_MATRIX_INT
41
- #define MAT_VIEW_P MATRIX_INT_VIEW_P
42
- #define VEC_ROW_COL VECTOR_INT_ROW_COL
43
- #define VEC_P VECTOR_INT_P
44
- #define VEC_ROW_P VECTOR_INT_ROW_P
45
- #define VEC_COL_P VECTOR_INT_COL_P
46
- #define CHECK_VEC CHECK_VECTOR_INT
47
- #define VEC_VIEW_P VECTOR_INT_VIEW_P
48
- #endif
49
-
50
- // From ext/vector_source.c
51
- void FUNCTION(get_range,beg_en_n)(VALUE range, BASE *beg, BASE *en, size_t *n, int *step);
52
-
53
- // From ext/vector_source.c
54
- void get_range_beg_en_n_for_size(VALUE range,
55
- int *beg, int *en, size_t *n, int *step, size_t size);
56
-
57
- void parse_submatrix_args(int argc, VALUE *argv, size_t size1, size_t size2,
58
- size_t *i, size_t *j, size_t *n1, size_t *n2);
59
-
60
- #ifdef BASE_DOUBLE
61
- void parse_submatrix_args(int argc, VALUE *argv, size_t size1, size_t size2,
62
- size_t *i, size_t *j, size_t *n1, size_t *n2)
63
- {
64
- int ii, ij, in1, in2, end, step;
65
-
66
- switch (argc) {
67
- // no args -> same as submatrix(0, 0, size1, size2)
68
- case 0:
69
- *i = 0; *j = 0;
70
- *n1 = size1; *n2 = size2;
71
- break;
72
-
73
- // Fixnum -> Same as submatrix(i/size2, i%size2, 1, 1)
74
- case 1:
75
- CHECK_FIXNUM(argv[0]);
76
- ii = FIX2INT(argv[0]);
77
- *n1 = size1 * size2;
78
- if(ii < 0) ii += *n1;
79
- // TODO Bounds check?
80
- *i = ii / size2; *j = ii % size2;
81
- *n1 = 1; *n2 = 1;
82
- break;
83
-
84
-
85
- // nil, nil -> all rows, all cols (Matrix::View)
86
- // nil, Range -> all rows, Range cols (Matrix::View)
87
- // nil, Fixnum -> all rows, single col (Vector::Col::View)
88
- // Range, nil -> Range rows, all cols (Matrix::View)
89
- // Range, Range -> Range rows, Range cols (Matrix::View)
90
- // Range, Fixnum -> Range rows, single col (Vector::Col::View)
91
- // Fixnum, nil -> single row, all cols (Vector::View)
92
- // Fixnum, Range -> single row, Range cols (Vector::View)
93
- // Fixnum, Fixnum -> single row, single col (Matrix::View)
94
- case 2:
95
- // nil, ...
96
- if(NIL_P(argv[0])) {
97
- // Parse second arg
98
- if(NIL_P(argv[1])) {
99
- // nil, nil -> all rows, all cols (Matrix::View)
100
- *i = 0; *j = 0;
101
- *n1 = size1; *n2 = size2;
102
- } else if(rb_obj_is_kind_of(argv[1], rb_cRange)) {
103
- // nil, Range -> all rows, Range cols (Matrix::View)
104
- *i = 0; *n1 = size1;
105
- get_range_beg_en_n_for_size(argv[1], &ij, &end, n2, &step, size2);
106
- if(step < 0 || *n2 <=0) {
107
- rb_raise(rb_eRangeError, "begin > end");
108
- }
109
- *j = (size_t)ij;
110
- } else {
111
- // nil, Fixnum -> all rows, single col (Vector::Col::View)
112
- ij = NUM2INT(argv[1]);
113
- if(ij < 0) ij += size2;
114
- *i = 0; *j = (size_t)ij;
115
- *n1 = size1; *n2 = 0; // *n2 == 0 tells #submatrix to return Vector::Col::View
116
- }
117
- // Range, ...
118
- } else if(rb_obj_is_kind_of(argv[0], rb_cRange)) {
119
- get_range_beg_en_n_for_size(argv[0], &ii, &end, n1, &step, size1);
120
- if(step < 0 || *n1 <= 0) {
121
- rb_raise(rb_eRangeError, "arg0: begin > end");
122
- }
123
- *i = (size_t)ii;
124
- // Parse second arg
125
- if(NIL_P(argv[1])) {
126
- // Range, nil -> Range rows, all cols (Matrix::View)
127
- *j = 0; *n2 = size2;
128
- } else if(rb_obj_is_kind_of(argv[1], rb_cRange)) {
129
- // Range, Range -> Range rows, Range cols (Matrix::View)
130
- get_range_beg_en_n_for_size(argv[1], &ij, &end, n2, &step, size2);
131
- if(step < 0 || *n2 <= 0) {
132
- rb_raise(rb_eRangeError, "arg1: begin > end");
133
- }
134
- *j = (size_t)ij;
135
- } else {
136
- // Range, Fixnum -> Range rows, single col (Vector::Col::View)
137
- ij = NUM2INT(argv[1]);
138
- if(ij < 0) ij += size2;
139
- *j = (size_t) ij;
140
- *n2 = 0; // *n2 == 0 tells #submatrix to return Vector::Col::View
141
- }
142
- // Fixnum, ...
143
- } else {
144
- ii = NUM2INT(argv[0]);
145
- if(ii < 0) ii += size1;
146
- if(NIL_P(argv[1])) {
147
- // Fixnum, nil -> single row, all cols (Vector::View)
148
- *i = (size_t)ii; *j = 0;
149
- *n1 = 0; *n2 = size2; // *n1 == 0 tells #submatrix to return Vector::View
150
- } else if(rb_obj_is_kind_of(argv[1], rb_cRange)) {
151
- // Fixnum, Range -> single row, Range cols (Vector::View)
152
- get_range_beg_en_n_for_size(argv[1], &ij, &end, n2, &step, size2);
153
- if(step < 0 || *n2 <= 0) {
154
- rb_raise(rb_eRangeError, "arg1: begin > end");
155
- }
156
- *i = (size_t)ii;
157
- *j = (size_t)ij;
158
- *n1 = 0; // *n1 == 0 tells #submatrix to return Vector::View
159
- } else {
160
- // Fixnum, Fixnum -> single row, single col (Matrix::View)
161
- ij = NUM2INT(argv[1]);
162
- if(ij < 0) ij += size2;
163
- *i = (size_t)ii; *j = (size_t)ij;
164
- *n1 = 1; *n2 = 1;
165
- }
166
- }
167
- break;
168
-
169
- // nil, Fixnum, Fixnum -> All rows, some cols
170
- // Range, Fixnum, Fixnum -> Range rows, some cols
171
- // Fixnum, Fixnum, nil -> Some rows, all cols
172
- // Fixnum, Fixnum, Range -> Some rows, Range cols
173
- case 3:
174
- // nil, Fixnum, Fixnum
175
- if(NIL_P(argv[0])) {
176
- // nil, Fixnum, Fixnum -> All rows, some cols
177
- CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
178
- *i = 0;
179
- ij = FIX2INT(argv[1]);
180
- *n1 = size1;
181
- in2 = FIX2INT(argv[2]);
182
- if(ij < 0) ij += size2;
183
- *j = (size_t) ij;
184
- *n2 = (size_t) in2;
185
- // Range, Fixnum, Fixnum
186
- } else if(rb_obj_is_kind_of(argv[0], rb_cRange)) {
187
- // Range, Fixnum, Fixnum -> Range rows, some cols
188
- CHECK_FIXNUM(argv[1]); CHECK_FIXNUM(argv[2]);
189
- get_range_beg_en_n_for_size(argv[0], &ii, &end, n1, &step, size1);
190
- if(step < 0 || *n1 <= 0) {
191
- rb_raise(rb_eRangeError, "arg0: begin > end");
192
- }
193
- ij = FIX2INT(argv[1]);
194
- in2 = FIX2INT(argv[2]);
195
- if(ij < 0) ij += size2;
196
- *i = (size_t)ii;
197
- *j = (size_t) ij;
198
- *n2 = (size_t) in2;
199
- // Fixnum, Fixnum, ...
200
- } else {
201
- CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]);
202
- ii = FIX2INT(argv[0]);
203
- if(ii < 0) ii += size1;
204
- in1 = FIX2INT(argv[1]);
205
- *i = (size_t)ii;
206
- *n1 = (size_t)in1;
207
- // Parse arg2
208
- if(NIL_P(argv[2])) {
209
- // Fixnum, Fixnum, nil -> Some rows, all cols
210
- *j = 0;
211
- *n2 = size2;
212
- } else if(rb_obj_is_kind_of(argv[2], rb_cRange)) {
213
- // Fixnum, Fixnum, Range -> Some rows, Range cols
214
- get_range_beg_en_n_for_size(argv[2], &ij, &end, n2, &step, size2);
215
- if(step < 0 || *n2 <= 0) {
216
- rb_raise(rb_eRangeError, "arg2: begin > end");
217
- }
218
- *j = (size_t)ij;
219
- } else {
220
- rb_raise(rb_eArgError, "expected third argument to be nil or Range, not %s",
221
- rb_class2name(CLASS_OF(argv[2])));
222
- }
223
- }
224
- break;
225
-
226
- case 4:
227
- CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]);
228
- CHECK_FIXNUM(argv[2]); CHECK_FIXNUM(argv[3]);
229
- ii = FIX2INT(argv[0]); ij = FIX2INT(argv[1]);
230
- in1 = FIX2INT(argv[2]); in2 = FIX2INT(argv[3]);
231
- if(ii < 0) ii += size1;
232
- if(ij < 0) ij += size2;
233
- // TODO Bounds check?
234
- *i = (size_t)ii; *j = (size_t)ij;
235
- *n1 = (size_t)in1; *n2 = (size_t)in2;
236
- break;
237
- default:
238
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 to 4)", argc);
239
- break;
240
- }
241
- }
242
- #endif
243
-
244
- VALUE FUNCTION(rb_gsl_matrix,do_something)(VALUE obj, void (*f)(GSL_TYPE (gsl_matrix) *))
245
- {
246
- GSL_TYPE(gsl_matrix) *m = NULL;
247
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
248
- (*f)(m);
249
- return obj;
250
- }
251
-
252
- static VALUE FUNCTION(create_matrix,from_range_shape)(VALUE range, VALUE nn1, VALUE nn2);
253
- static VALUE FUNCTION(create_matrix,from_ranges)(int argc, VALUE *argv);
254
- GSL_TYPE(gsl_matrix)* FUNCTION(gsl_matrix,alloc_from_colvectors)(int argc, VALUE *argv);
255
-
256
- static VALUE FUNCTION(rb_gsl_matrix,alloc)(int argc, VALUE *argv, VALUE klass)
257
- {
258
- GSL_TYPE(gsl_matrix) *m = NULL;
259
- size_t n1, n2;
260
- if (argc < 1) rb_raise(rb_eArgError,
261
- "wrong number of arguments (%d for >= 1)", argc);
262
- #ifdef HAVE_NARRAY_H
263
- if (NA_IsNArray(argv[0])) {
264
- size_t n;
265
- VALUE ary;
266
- struct NARRAY *na;
267
- GetNArray(argv[0], na);
268
- n = na->shape[0]*na->shape[1];
269
- m = FUNCTION(gsl_matrix,alloc)(na->shape[1], na->shape[0]);
270
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_alloc failed");
271
- #ifdef BASE_DOUBLE
272
- ary = na_change_type(argv[0], NA_DFLOAT);
273
- #else
274
- ary = na_change_type(argv[0], NA_LINT);
275
- #endif
276
- memcpy(m->data, NA_PTR_TYPE(ary,BASE*), n*sizeof(BASE));
277
- return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_matrix,free), m);
278
- }
279
- #endif
280
- switch (TYPE(argv[0])) {
281
- case T_FIXNUM:
282
- if (argc != 2) rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
283
- argc);
284
- CHECK_FIXNUM(argv[1]);
285
- n1 = FIX2INT(argv[0]); n2 = FIX2INT(argv[1]);
286
- m = FUNCTION(gsl_matrix,calloc)(n1, n2);
287
- break;
288
- case T_ARRAY:
289
- if (argc == 1) {
290
- m = FUNCTION(gsl_matrix,alloc_from_arrays)(argc, argv);
291
- break;
292
- }
293
- if (CLASS_OF(argv[1]) == rb_cRange) argv[1] = rb_gsl_range2ary(argv[1]);
294
- switch (TYPE(argv[1])) {
295
- case T_ARRAY:
296
- m = FUNCTION(gsl_matrix,alloc_from_arrays)(argc, argv);
297
- break;
298
- case T_FIXNUM:
299
- if (argc != 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for 3)",
300
- argc);
301
- CHECK_FIXNUM(argv[2]);
302
- m = FUNCTION(gsl_matrix,alloc_from_array_sizes)(argv[0], argv[1], argv[2]);
303
- break;
304
- default:
305
- rb_raise(rb_eTypeError,
306
- "wrong argument type %s\nUsage: new(n1, n2), "
307
- "new([], [], [], ...), new([], n1, n2)",
308
- rb_class2name(CLASS_OF(argv[1])));
309
- break;
310
- }
311
- break;
312
- default:
313
- if (CLASS_OF(argv[0]) == rb_cRange) {
314
- if (argc==3 && TYPE(argv[1]) == T_FIXNUM && TYPE(argv[2]) == T_FIXNUM)
315
- return FUNCTION(create_matrix,from_range_shape)(argv[0], argv[1], argv[2]);
316
- else
317
- return FUNCTION(create_matrix,from_ranges)(argc, argv);
318
- } else if (VEC_P(argv[0])) {
319
- if (argc == 3 && FIXNUM_P(argv[1]) && FIXNUM_P(argv[2])) {
320
- m = FUNCTION(gsl_matrix,alloc_from_vector_sizes)(argv[0], argv[1], argv[2]);
321
- } else {
322
- if (VEC_COL_P(argv[0])) {
323
- m = FUNCTION(gsl_matrix,alloc_from_colvectors)(argc, argv);
324
- } else {
325
- m = FUNCTION(gsl_matrix,alloc_from_vectors)(argc, argv);
326
- }
327
- }
328
- } else {
329
- rb_raise(rb_eTypeError, "wrong argument type %s\n"
330
- "Usage: new(n1, n2), new([], [], [], ...), new([], n1, n2)",
331
- rb_class2name(CLASS_OF(argv[0])));
332
- }
333
- break;
334
- }
335
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
336
- }
337
-
338
- void FUNCTION(set_ptr_data,by_range)(BASE *ptr, size_t n, VALUE range);
339
-
340
- static GSL_TYPE(gsl_matrix)* FUNCTION(cr_matrix,from_ranges)(int argc, VALUE *argv)
341
- {
342
- GSL_TYPE(gsl_matrix) *m;
343
- BASE beg, en;
344
- size_t i, n;
345
- int step;
346
- FUNCTION(get_range,beg_en_n)(argv[0], &beg, &en, &n, &step);
347
- m = FUNCTION(gsl_matrix,calloc)(argc, n);
348
- FUNCTION(set_ptr_data,by_range)(m->data, n, argv[0]);
349
- for (i = 1; (int) i < argc; i++) {
350
- if (CLASS_OF(argv[i]) != rb_cRange)
351
- rb_raise(rb_eTypeError, "wrong argument type %s (Range expected)",
352
- rb_class2name(CLASS_OF(argv[i])));
353
- FUNCTION(set_ptr_data,by_range)(m->data+i*n, n, argv[i]);
354
- }
355
- return m;
356
- }
357
-
358
- static VALUE FUNCTION(create_matrix,from_ranges)(int argc, VALUE *argv)
359
- {
360
- GSL_TYPE(gsl_matrix) *m;
361
- m = FUNCTION(cr_matrix,from_ranges)(argc, argv);
362
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
363
- }
364
-
365
- static GSL_TYPE(gsl_matrix)* FUNCTION(cr_matrix,from_range_shape)(VALUE range, VALUE nn1, VALUE nn2)
366
- {
367
- size_t n1, n2;
368
- GSL_TYPE(gsl_matrix) *m;
369
- n1 = FIX2INT(nn1); n2 = FIX2INT(nn2);
370
- m = FUNCTION(gsl_matrix,alloc)(n1, n2);
371
- FUNCTION(set_ptr_data,by_range)(m->data, n1*n2, range);
372
- return m;
373
- }
374
-
375
- static VALUE FUNCTION(create_matrix,from_range_shape)(VALUE range, VALUE nn1, VALUE nn2)
376
- {
377
- GSL_TYPE(gsl_matrix) *m;
378
- m = FUNCTION(cr_matrix,from_range_shape)(range, nn1, nn2);
379
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
380
- }
381
-
382
- /* create a matrix from arrays */
383
- GSL_TYPE(gsl_matrix)* FUNCTION(gsl_matrix,alloc_from_arrays)(int argc, VALUE *argv)
384
- {
385
- size_t n, i, j;
386
- GSL_TYPE(gsl_matrix) *m = NULL;
387
- if (CLASS_OF(argv[0]) == rb_cRange) argv[0] = rb_gsl_range2ary(argv[0]);
388
- else Check_Type(argv[0], T_ARRAY);
389
- n = RARRAY_LEN(argv[0]);
390
- m = FUNCTION(gsl_matrix,alloc)(argc, n);
391
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_alloc failed");
392
- for (i = 0; (int) i < argc; i++) {
393
- if (CLASS_OF(argv[i]) == rb_cRange) argv[i] = rb_gsl_range2ary(argv[i]);
394
- else Check_Type(argv[i], T_ARRAY);
395
- for (j = 0; j < n; j++) {
396
- if ((int) j >= RARRAY_LEN(argv[i])) FUNCTION(gsl_matrix,set)(m, i, j, 0);
397
- else FUNCTION(gsl_matrix,set)(m, i, j, NUMCONV2(rb_ary_entry(argv[i], j)));
398
- }
399
- }
400
- return m;
401
- }
402
-
403
- GSL_TYPE(gsl_matrix)* FUNCTION(gsl_matrix,alloc_from_vectors)(int argc, VALUE *argv)
404
- {
405
- size_t i;
406
- GSL_TYPE(gsl_matrix) *m = NULL;
407
- GSL_TYPE(gsl_vector) *v = NULL;
408
- if (argc < 1) rb_raise(rb_eArgError, "too few arguments");
409
- CHECK_VEC(argv[0]);
410
- Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v);
411
- m = FUNCTION(gsl_matrix,alloc)(argc, v->size);
412
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_alloc failed");
413
- for (i = 0; (int) i < argc; i++) {
414
- CHECK_VEC(argv[i]);
415
- Data_Get_Struct(argv[i], GSL_TYPE(gsl_vector), v);
416
- FUNCTION(gsl_matrix,set_row)(m, i, v);
417
- }
418
- return m;
419
- }
420
-
421
- GSL_TYPE(gsl_matrix)* FUNCTION(gsl_matrix,alloc_from_colvectors)(int argc, VALUE *argv)
422
- {
423
- size_t i;
424
- GSL_TYPE(gsl_matrix) *m = NULL;
425
- GSL_TYPE(gsl_vector) *v = NULL;
426
- if (argc < 1) rb_raise(rb_eArgError, "too few arguments");
427
- CHECK_VEC(argv[0]);
428
- Data_Get_Struct(argv[0], GSL_TYPE(gsl_vector), v);
429
- // m = FUNCTION(gsl_matrix,alloc)(argc, v->size);
430
- m = FUNCTION(gsl_matrix,alloc)(v->size, argc);
431
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_alloc failed");
432
- for (i = 0; (int) i < argc; i++) {
433
- CHECK_VEC(argv[i]);
434
- Data_Get_Struct(argv[i], GSL_TYPE(gsl_vector), v);
435
- FUNCTION(gsl_matrix,set_col)(m, i, v);
436
- }
437
- return m;
438
- }
439
-
440
- /* create a matrix from two sizes and an array */
441
- GSL_TYPE(gsl_matrix)* FUNCTION(gsl_matrix,alloc_from_array_sizes)(VALUE ary,
442
- VALUE nn1, VALUE nn2)
443
- {
444
- size_t n1, n2, len;
445
- GSL_TYPE(gsl_matrix) *m = NULL;
446
- size_t i, j, k;
447
- CHECK_FIXNUM(nn1); CHECK_FIXNUM(nn2);
448
- Check_Type(ary, T_ARRAY);
449
- n1 = FIX2INT(nn1);
450
- n2 = FIX2INT(nn2);
451
- m = FUNCTION(gsl_matrix,alloc)(n1, n2);
452
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_alloc failed");
453
- k = 0;
454
- len = RARRAY_LEN(ary);
455
- for (i = 0; i < n1; i++) {
456
- for (j = 0; j < n2; j++, k++) {
457
- if (k >= len)
458
- FUNCTION(gsl_matrix,set)(m, i, j, (BASE) 0);
459
- else
460
- FUNCTION(gsl_matrix,set)(m, i, j, (BASE) NUMCONV2(rb_ary_entry(ary, k)));
461
- }
462
- }
463
- return m;
464
- }
465
-
466
- GSL_TYPE(gsl_matrix)* FUNCTION(gsl_matrix,alloc_from_vector_sizes)(VALUE ary,
467
- VALUE nn1, VALUE nn2)
468
- {
469
- size_t n1, n2;
470
- GSL_TYPE(gsl_matrix) *m = NULL;
471
- GSL_TYPE(gsl_vector) *v = NULL;
472
- size_t i, j, k;
473
- CHECK_VEC(ary);
474
- CHECK_FIXNUM(nn1); CHECK_FIXNUM(nn2);
475
- Data_Get_Struct(ary, GSL_TYPE(gsl_vector), v);
476
- n1 = FIX2INT(nn1); n2 = FIX2INT(nn2);
477
- m = FUNCTION(gsl_matrix,alloc)(n1, n2);
478
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_alloc failed");
479
- k = 0;
480
- for (i = 0; i < n1; i++) {
481
- for (j = 0; j < n2; j++, k++) {
482
- if (k >= v->size)
483
- FUNCTION(gsl_matrix,set)(m, i, j, (BASE) 0);
484
- else
485
- FUNCTION(gsl_matrix,set)(m, i, j, FUNCTION(gsl_vector,get)(v, k));
486
- }
487
- }
488
- return m;
489
- }
490
-
491
- static VALUE FUNCTION(rb_gsl_matrix,calloc)(VALUE klass, VALUE nn1, VALUE nn2)
492
- {
493
- GSL_TYPE(gsl_matrix) *m = NULL;
494
- CHECK_FIXNUM(nn1); CHECK_FIXNUM(nn2);
495
- m = FUNCTION(gsl_matrix,calloc)(FIX2INT(nn1), FIX2INT(nn2));
496
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_calloc failed");
497
- return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_matrix,free), m);
498
- }
499
-
500
- static VALUE FUNCTION(rb_gsl_matrix,diagonal_singleton)(int argc, VALUE *argv, VALUE klass)
501
- {
502
- GSL_TYPE(gsl_matrix) *m = NULL;
503
- GSL_TYPE(gsl_vector) *v = NULL;
504
- VALUE ary, tmp;
505
- size_t len, i;
506
- switch (argc) {
507
- case 1:
508
- switch (TYPE(argv[0])) {
509
- case T_FIXNUM:
510
- case T_FLOAT:
511
- len = FIX2INT(argv[0]);
512
- m = FUNCTION(gsl_matrix,alloc)(len, len);
513
- for (i = 0; i < len; i++)
514
- FUNCTION(gsl_matrix,set)(m, i, i, 1);
515
- return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_matrix,free), m);
516
- break;
517
- default:
518
- /* do next */
519
- break;
520
- }
521
- if (rb_obj_is_kind_of(argv[0], rb_cRange))
522
- ary = rb_gsl_range2ary(argv[0]);
523
- else ary = argv[0];
524
- switch (TYPE(ary)) {
525
- case T_ARRAY:
526
- len = RARRAY_LEN(ary);
527
- m = FUNCTION(gsl_matrix,calloc)(len, len);
528
- for (i = 0; i < len; i++) {
529
- tmp = rb_ary_entry(ary, i);
530
- FUNCTION(gsl_matrix,set)(m, i, i, NUMCONV2(tmp));
531
- }
532
- break;
533
- default:
534
- CHECK_VEC(ary);
535
- Data_Get_Struct(ary, GSL_TYPE(gsl_vector), v);
536
- len = v->size;
537
- m = FUNCTION(gsl_matrix,calloc)(len, len);
538
- for (i = 0; i < len; i++) {
539
- FUNCTION(gsl_matrix,set)(m, i, i, FUNCTION(gsl_vector,get)(v, i));
540
- }
541
- break;
542
- }
543
- break;
544
- default:
545
- m = FUNCTION(gsl_matrix,calloc)(argc, argc);
546
- for (i = 0; (int) i < argc; i++) {
547
- FUNCTION(gsl_matrix,set)(m, i, i, NUMCONV2(argv[i]));
548
- }
549
- break;
550
- }
551
- return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_matrix,free), m);
552
- }
553
-
554
- static VALUE FUNCTION(rb_gsl_matrix,eye)(int argc, VALUE *argv, VALUE klass)
555
- {
556
- GSL_TYPE(gsl_matrix) *m = NULL;
557
- size_t n1, n2, n, i;
558
- switch (argc) {
559
- case 1:
560
- CHECK_FIXNUM(argv[0]);
561
- n = FIX2INT(argv[0]);
562
- n1 = n2 = n;
563
- break;
564
- case 2:
565
- CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]);
566
- n1 = FIX2INT(argv[0]); n2 = FIX2INT(argv[1]);
567
- n = GSL_MIN_INT(n1, n2);
568
- break;
569
- default:
570
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc);
571
- break;
572
- }
573
- m = FUNCTION(gsl_matrix,calloc)(n1, n2);
574
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_calloc failed");
575
- for (i = 0; i < n; i++) {
576
- FUNCTION(gsl_matrix,set)(m, i, i, 1);
577
- }
578
- return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_matrix,free), m);
579
- }
580
-
581
- static VALUE FUNCTION(rb_gsl_matrix,ones)(int argc, VALUE *argv, VALUE klass)
582
- {
583
- GSL_TYPE(gsl_matrix) *m = NULL;
584
- size_t n1, n2, n, i, j;
585
- switch (argc) {
586
- case 1:
587
- CHECK_FIXNUM(argv[0]);
588
- n = FIX2INT(argv[0]);
589
- n1 = n2 = n;
590
- break;
591
- case 2:
592
- CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]);
593
- n1 = FIX2INT(argv[0]); n2 = FIX2INT(argv[1]);
594
- n = GSL_MIN_INT(n1, n2);
595
- break;
596
- default:
597
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc);
598
- break;
599
- }
600
- m = FUNCTION(gsl_matrix,calloc)(n1, n2);
601
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_calloc failed");
602
- for (i = 0; i < n1; i++) {
603
- for (j = 0; j < n2; j++) {
604
- FUNCTION(gsl_matrix,set)(m, i, j, (BASE) 1);
605
- }
606
- }
607
- return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_matrix,free), m);
608
- }
609
-
610
- static VALUE FUNCTION(rb_gsl_matrix,zeros)(int argc, VALUE *argv, VALUE klass)
611
- {
612
- GSL_TYPE(gsl_matrix) *m = NULL;
613
- size_t n1, n2, n, i, j;
614
- switch (argc) {
615
- case 1:
616
- CHECK_FIXNUM(argv[0]);
617
- n = FIX2INT(argv[0]);
618
- n1 = n2 = n;
619
- break;
620
- case 2:
621
- CHECK_FIXNUM(argv[0]); CHECK_FIXNUM(argv[1]);
622
- n1 = FIX2INT(argv[0]); n2 = FIX2INT(argv[1]);
623
- n = GSL_MIN_INT(n1, n2);
624
- break;
625
- default:
626
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc);
627
- break;
628
- }
629
- m = FUNCTION(gsl_matrix,calloc)(n1, n2);
630
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_calloc failed");
631
- for (i = 0; i < n1; i++) {
632
- for (j = 0; j < n2; j++) {
633
- FUNCTION(gsl_matrix,set)(m, i, j, (BASE) 0);
634
- }
635
- }
636
- return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_matrix,free), m);
637
- }
638
-
639
- static VALUE FUNCTION(rb_gsl_matrix,identity)(VALUE klass, VALUE nn)
640
- {
641
- GSL_TYPE(gsl_matrix) *m = NULL;
642
- size_t n, i;
643
- CHECK_FIXNUM(nn);
644
- n = FIX2INT(nn);
645
- m = FUNCTION(gsl_matrix,calloc)(n, n);
646
- if (m == NULL) rb_raise(rb_eNoMemError, "gsl_matrix_calloc failed");
647
- for (i = 0; i < n; i++) {
648
- FUNCTION(gsl_matrix,set)(m, i, i, 1);
649
- }
650
- return Data_Wrap_Struct(klass, 0, FUNCTION(gsl_matrix,free), m);
651
- }
652
-
653
- static VALUE FUNCTION(rb_gsl_matrix,size1)(VALUE obj)
654
- {
655
- GSL_TYPE(gsl_matrix) *m = NULL;
656
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
657
- return INT2FIX(m->size1);
658
- }
659
-
660
- static VALUE FUNCTION(rb_gsl_matrix,size2)(VALUE obj)
661
- {
662
- GSL_TYPE(gsl_matrix) *m = NULL;
663
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
664
- return INT2FIX(m->size2);
665
- }
666
-
667
- static VALUE FUNCTION(rb_gsl_matrix,shape)(VALUE obj)
668
- {
669
- GSL_TYPE(gsl_matrix) *m = NULL;
670
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
671
- return rb_ary_new3(2, INT2FIX(m->size1), INT2FIX(m->size2));
672
- }
673
-
674
- static VALUE FUNCTION(rb_gsl_matrix,submatrix)(int argc, VALUE *argv, VALUE obj);
675
- static VALUE FUNCTION(rb_gsl_matrix,get)(int argc, VALUE *argv, VALUE obj)
676
- {
677
- GSL_TYPE(gsl_matrix) *m = NULL;
678
- VALUE retval;
679
- int ii, ij;
680
-
681
- if(argc == 2 && TYPE(argv[0]) == T_FIXNUM && TYPE(argv[1]) == T_FIXNUM) {
682
- // m[i,j]
683
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
684
- ii = FIX2INT(argv[0]);
685
- ij = FIX2INT(argv[1]);
686
- if(ii < 0) ii += m->size1;
687
- if(ij < 0) ij += m->size2;
688
- retval = C_TO_VALUE2(FUNCTION(gsl_matrix,get)(m, (size_t)ii, (size_t)ij));
689
- } else if(argc == 1 && TYPE(argv[0]) == T_FIXNUM) {
690
- // m[i]
691
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
692
- ii = FIX2INT(argv[0]);
693
- if(ii < 0) ii += m->size1 * m->size2;
694
- retval = C_TO_VALUE2(FUNCTION(gsl_matrix,get)(m, (size_t)(ii / m->size2), (size_t)(ii % m->size2)));
695
- } else if(argc == 1 && TYPE(argv[0]) == T_ARRAY) {
696
- // m[[i,j]], to support m[m.max_index]
697
- if(RARRAY_LEN(argv[0]) == 2) {
698
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
699
- ii = FIX2INT(RARRAY_PTR(argv[0])[0]);
700
- ij = FIX2INT(RARRAY_PTR(argv[0])[1]);
701
- if(ii < 0) ii += m->size1;
702
- if(ij < 0) ij += m->size2;
703
- retval = C_TO_VALUE2(FUNCTION(gsl_matrix,get)(m, (size_t)ii, (size_t)ij));
704
- } else {
705
- rb_raise(rb_eArgError, "Array index must have length 2, not %d", (int) RARRAY_LEN(argv[0]));
706
- }
707
- } else {
708
- retval = FUNCTION(rb_gsl_matrix,submatrix)(argc, argv, obj);
709
- }
710
- return retval;
711
- }
712
-
713
- void FUNCTION(rb_gsl_vector,set_subvector)(int argc, VALUE *argv, GSL_TYPE(gsl_vector) *v, VALUE other);
714
- static VALUE FUNCTION(rb_gsl_matrix,set)(int argc, VALUE *argv, VALUE obj)
715
- {
716
- GSL_TYPE(gsl_matrix) *m, *mother;
717
- QUALIFIED_VIEW(gsl_matrix,view) mv;
718
- QUALIFIED_VIEW(gsl_vector,view) vv;
719
- VALUE other, row, row_set_argv[2];
720
- int ii, ij, step;
721
- size_t i, j, k, n1, n2, nother;
722
- BASE beg, end;
723
-
724
- if(argc < 1 || argc > 5) {
725
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 1-5)", argc);
726
- }
727
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
728
- other = argv[argc-1];
729
-
730
- if(argc == 1 && TYPE(argv[0]) == T_ARRAY) {
731
- // m.set([row0,row1,...])
732
- n1 = RARRAY_LEN(argv[0]);
733
- if(n1 > m->size1) n1 = m->size1;
734
- row_set_argv[0] = INT2FIX(0);
735
- // Each given row must have as manay elements as m has columns.
736
- // The bounds check happens inside rb_gsl_vector*set_subvector().
737
- row_set_argv[1] = INT2FIX(m->size2);
738
- for(k = 0; k < n1 && k < m->size1; k++) {
739
- vv = FUNCTION(gsl_matrix,row)(m, k);
740
- FUNCTION(rb_gsl_vector,set_subvector)(2, row_set_argv, &vv.vector, rb_ary_entry(argv[0], k));
741
- }
742
- } else if(argc == 1) {
743
- // m[] = x
744
- FUNCTION(gsl_matrix,set_all)(m, NUMCONV2(other));
745
- } else if(argc==2 && TYPE(argv[0]) == T_ARRAY && TYPE(argv[1]) != T_ARRAY) {
746
- // m.set([i, j], x) or m[[i,j]] = x
747
- ii = FIX2INT(rb_ary_entry(argv[0], 0));
748
- ij = FIX2INT(rb_ary_entry(argv[0], 1));
749
- if(ii < 0) ii += m->size1;
750
- if(ij < 0) ij += m->size2;
751
- FUNCTION(gsl_matrix,set)(m, (size_t)ii, (size_t)ij, NUMCONV2(argv[1]));
752
- } else if(argc == 3 && TYPE(argv[0]) == T_FIXNUM && TYPE(argv[1]) == T_FIXNUM) {
753
- // m[i,j] = x
754
- ii = FIX2INT(argv[0]);
755
- ij = FIX2INT(argv[1]);
756
- if(ii < 0) ii += m->size1;
757
- if(ij < 0) ij += m->size2;
758
- FUNCTION(gsl_matrix,set)(m, (size_t)ii, (size_t)ij, NUMCONV2(other));
759
- } else if(TYPE(argv[0]) == T_ARRAY) {
760
- // m.set(row0,row1,...)
761
- n1 = argc;
762
- if(n1 > m->size1) n1 = m->size1;
763
- row_set_argv[0] = INT2FIX(0);
764
- row_set_argv[1] = INT2FIX(m->size2);
765
- for(k = 0; k < n1 && k < m->size1; k++) {
766
- vv = FUNCTION(gsl_matrix,row)(m, k);
767
- FUNCTION(rb_gsl_vector,set_subvector)(2, row_set_argv, &vv.vector, argv[k]);
768
- }
769
- } else {
770
- // x -> assignment to m.submatrix(i...)
771
- parse_submatrix_args(argc-1, argv, m->size1, m->size2, &i, &j, &n1, &n2);
772
- if(n1 == 0) n1 = 1;
773
- if(n2 == 0) n2 = 1;
774
- mv = FUNCTION(gsl_matrix,submatrix)(m, i, j, n1, n2);
775
- if(rb_obj_is_kind_of(other, GSL_TYPE(cgsl_matrix))) {
776
- // m[...] = m_other
777
- Data_Get_Struct(other, GSL_TYPE(gsl_matrix), mother);
778
- if(n1 * n2 != mother->size1 * mother->size2) {
779
- rb_raise(rb_eRangeError, "sizes do not match (%d x %d != %d x %d)",
780
- (int) n1, (int) n2, (int) mother->size1, (int) mother->size2);
781
- }
782
- // TODO Change to gsl_matrix_memmove if/when GSL has such a function
783
- // because gsl_matrix_memcpy does not handle overlapping regions (e.g.
784
- // Views) well.
785
- FUNCTION(gsl_matrix,memcpy)(&mv.matrix, mother);
786
- } else if(rb_obj_is_kind_of(other, rb_cArray)) {
787
- row_set_argv[0] = INT2FIX(0);
788
- row_set_argv[1] = INT2FIX(n2);
789
-
790
- if(n1 == 1) {
791
- // m[...] = [col0, ...] # single row
792
- vv = FUNCTION(gsl_matrix,row)(&mv.matrix, 0);
793
- FUNCTION(rb_gsl_vector,set_subvector)(2, row_set_argv, &vv.vector, other);
794
- } else {
795
- // m[...] = [[row0], [row1], ...] # multiple rows
796
- if((int) n1 != RARRAY_LEN(other)) {
797
- rb_raise(rb_eRangeError, "row counts do not match (%d != %d)",
798
- (int) n1, (int) RARRAY_LEN(other));
799
- }
800
- for(k = 0; k < n1; k++) {
801
- vv = FUNCTION(gsl_matrix,row)(&mv.matrix, k);
802
- row = rb_ary_entry(other, k);
803
- FUNCTION(rb_gsl_vector,set_subvector)(2, row_set_argv, &vv.vector, row);
804
- }
805
- }
806
- } else if(rb_obj_is_kind_of(other, rb_cRange)) {
807
- // m[...] = beg..end
808
- FUNCTION(get_range,beg_en_n)(other, &beg, &end, &nother, &step);
809
- if(n1 * n2 != nother) {
810
- rb_raise(rb_eRangeError, "sizes do not match (%d x %d != %d)", (int) n1, (int) n2, (int) nother);
811
- }
812
- for(k = 0; k < nother; k++) {
813
- FUNCTION(gsl_matrix,set)(&mv.matrix, k / n2, k % n2, beg);
814
- beg += step;
815
- }
816
- } else {
817
- // m[...] = x
818
- FUNCTION(gsl_matrix,set_all)(&mv.matrix, NUMCONV2(other));
819
- }
820
- }
821
- return obj;
822
- }
823
-
824
- static VALUE FUNCTION(rb_gsl_matrix,set_all)(VALUE obj, VALUE x)
825
- {
826
- GSL_TYPE(gsl_matrix) *m = NULL;
827
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
828
- FUNCTION(gsl_matrix,set_all)(m, NUMCONV2(x));
829
- return obj;
830
- }
831
-
832
- static VALUE FUNCTION(rb_gsl_matrix,set_zero)(VALUE obj)
833
- {
834
- return FUNCTION(rb_gsl_matrix,do_something)(obj, FUNCTION(gsl_matrix,set_zero));
835
- }
836
-
837
- static VALUE FUNCTION(rb_gsl_matrix,set_identity)(VALUE obj)
838
- {
839
- return FUNCTION(rb_gsl_matrix,do_something)(obj, FUNCTION(gsl_matrix,set_identity));
840
- }
841
-
842
- static VALUE FUNCTION(rb_gsl_matrix,print)(VALUE obj)
843
- {
844
- GSL_TYPE(gsl_matrix) *m = NULL;
845
- size_t i, j;
846
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
847
- printf("[ ");
848
- for (i = 0; i < m->size1; i++) {
849
- if (i != 0) printf(" ");
850
- for (j = 0; j < m->size2; j++) {
851
- printf(PRINTF_FORMAT, FUNCTION(gsl_matrix,get)(m, i, j));
852
- }
853
- if (i == m->size1 - 1) printf("]\n");
854
- else printf("\n");
855
- }
856
- return Qnil;
857
- }
858
-
859
- #ifdef BASE_DOUBLE
860
- #define SHOW_ELM 6
861
- #else
862
- #define SHOW_ELM 12
863
- #endif
864
-
865
- static VALUE FUNCTION(rb_gsl_matrix,to_s)(VALUE obj)
866
- {
867
- GSL_TYPE(gsl_matrix) *m = NULL;
868
- char buf[32], format[32], format2[32];
869
- size_t i, j;
870
- VALUE str;
871
- BASE x;
872
- int dig = 8;
873
- #ifdef BASE_INT
874
- BASE min;
875
- BASE max;
876
- #endif
877
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
878
- #ifdef BASE_INT
879
- min = FUNCTION(gsl_matrix,min)(m);
880
- max = gsl_matrix_int_max(m);
881
- dig = (int) GSL_MAX(fabs(max),fabs(min));
882
- if (dig > 0) dig = ceil(log10(dig+1e-10));
883
- else dig = 1;
884
- if (min < 0) dig += 1;
885
- sprintf(format, "%%%dd ", (int) dig);
886
- strcpy(format2, format);
887
- #else
888
- strcpy(format, PRINTF_FORMAT);
889
- strcpy(format2, " " PRINTF_FORMAT);
890
- #endif
891
- str = rb_str_new2("[ ");
892
- for (i = 0; i < m->size1; i++) {
893
- if (i != 0) {
894
- strcpy(buf, " ");
895
- rb_str_cat(str, buf, strlen(buf));
896
- }
897
- for (j = 0; j < m->size2; j++) {
898
- x = FUNCTION(gsl_matrix,get)(m, i, j);
899
- if (x < 0)
900
- sprintf(buf, format, x);
901
- else
902
- sprintf(buf, format2, x);
903
- rb_str_cat(str, buf, strlen(buf));
904
- if ((int) j >= (55/dig)) {
905
- strcpy(buf, "... ");
906
- rb_str_cat(str, buf, strlen(buf));
907
- break;
908
- }
909
- }
910
- if (i >= 20) {
911
- strcpy(buf, "\n ... ]");
912
- rb_str_cat(str, buf, strlen(buf));
913
- break;
914
- }
915
- if (i == m->size1 - 1) {
916
- strcpy(buf, "]");
917
- rb_str_cat(str, buf, strlen(buf));
918
- } else {
919
- strcpy(buf, "\n");
920
- rb_str_cat(str, buf, strlen(buf));
921
- }
922
- }
923
- return str;
924
- }
925
- #undef SHOW_ELM
926
-
927
- static VALUE FUNCTION(rb_gsl_matrix,inspect)(VALUE obj)
928
- {
929
- VALUE str;
930
- char buf[64];
931
- sprintf(buf, "%s\n", rb_class2name(CLASS_OF(obj)));
932
- str = rb_str_new2(buf);
933
- return rb_str_concat(str, FUNCTION(rb_gsl_matrix,to_s)(obj));
934
- }
935
-
936
- #ifdef BASE_DOUBLE
937
- #define PRINTF_FORMAT2 "%g"
938
- #elif defined(BASE_INT)
939
- #define PRINTF_FORMAT2 "%d"
940
- #endif
941
- static VALUE FUNCTION(rb_gsl_matrix,fprintf)(int argc, VALUE *argv, VALUE obj)
942
- {
943
- GSL_TYPE(gsl_matrix) *h = NULL;
944
- FILE *fp = NULL;
945
- int status, flag = 0;
946
- if (argc != 1 && argc != 2) {
947
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc);
948
- }
949
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), h);
950
- fp = rb_gsl_open_writefile(argv[0], &flag);
951
- if (argc == 2) {
952
- Check_Type(argv[1], T_STRING);
953
- status = FUNCTION(gsl_matrix,fprintf)(fp, h, STR2CSTR(argv[1]));
954
- } else {
955
- status = FUNCTION(gsl_matrix,fprintf)(fp, h, PRINTF_FORMAT2);
956
- }
957
- if (flag == 1) fclose(fp);
958
- return INT2FIX(status);
959
- }
960
-
961
- static VALUE FUNCTION(rb_gsl_matrix,printf)(int argc, VALUE *argv, VALUE obj)
962
- {
963
- GSL_TYPE(gsl_matrix) *h = NULL;
964
- int status;
965
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), h);
966
- if (argc == 1) {
967
- Check_Type(argv[0], T_STRING);
968
- status = FUNCTION(gsl_matrix,fprintf)(stdout, h, STR2CSTR(argv[0]));
969
- } else {
970
- status = FUNCTION(gsl_matrix,fprintf)(stdout, h, PRINTF_FORMAT2);
971
- }
972
- return INT2FIX(status);
973
- }
974
-
975
- #undef PRINTF_FORMAT2
976
- static VALUE FUNCTION(rb_gsl_matrix,fscanf)(VALUE obj, VALUE io)
977
- {
978
- GSL_TYPE(gsl_matrix) *h = NULL;
979
- FILE *fp = NULL;
980
- int status, flag = 0;
981
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), h);
982
- fp = rb_gsl_open_readfile(io, &flag);
983
- status = FUNCTION(gsl_matrix,fscanf)(fp, h);
984
- if (flag == 1) fclose(fp);
985
- return INT2FIX(status);
986
- }
987
-
988
- static VALUE FUNCTION(rb_gsl_matrix,set_diagonal)(VALUE obj, VALUE diag)
989
- {
990
- GSL_TYPE(gsl_matrix) *m = NULL;
991
- GSL_TYPE(gsl_vector) *v;
992
- size_t i, len;
993
- BASE x;
994
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
995
- switch (TYPE(diag)) {
996
- case T_FIXNUM: case T_BIGNUM: case T_FLOAT:
997
- x = (BASE) NUMCONV2(diag);
998
- for (i = 0; i < m->size1; i++) FUNCTION(gsl_matrix,set)(m, i, i, x);
999
- break;
1000
- case T_ARRAY:
1001
- len = GSL_MIN_INT((int) m->size1, RARRAY_LEN(diag));
1002
- for (i = 0; i < len; i++) {
1003
- FUNCTION(gsl_matrix,set)(m, i, i, NUMCONV2(rb_ary_entry(diag, i)));
1004
- }
1005
- break;
1006
- default:
1007
- if (VEC_P(diag)) {
1008
- Data_Get_Struct(diag, GSL_TYPE(gsl_vector), v);
1009
- len = GSL_MIN_INT(m->size1, v->size);
1010
- for (i = 0; i < len; i++) {
1011
- FUNCTION(gsl_matrix,set)(m, i, i, FUNCTION(gsl_vector,get)(v, i));
1012
- }
1013
- } else {
1014
- rb_raise(rb_eTypeError, "wrong argument type %s (GSL::Vector or Array expected)",
1015
- rb_class2name(CLASS_OF(diag)));
1016
- }
1017
- break;
1018
- }
1019
- return obj;
1020
- }
1021
-
1022
- static VALUE FUNCTION(rb_gsl_matrix,get_row)(VALUE obj, VALUE i)
1023
- {
1024
- GSL_TYPE(gsl_matrix) *m = NULL;
1025
- GSL_TYPE(gsl_vector) *v = NULL;
1026
- CHECK_FIXNUM(i);
1027
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1028
- v = FUNCTION(gsl_vector,alloc)(m->size1);
1029
- if (v == NULL) rb_raise(rb_eNoMemError, "gsl_vector_alloc failed");
1030
- FUNCTION(gsl_matrix,get_row)(v, m, FIX2INT(i));
1031
- return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), v);
1032
- }
1033
-
1034
- static VALUE FUNCTION(rb_gsl_matrix,get_col)(VALUE obj, VALUE i)
1035
- {
1036
- GSL_TYPE(gsl_matrix) *m = NULL;
1037
- GSL_TYPE(gsl_vector) *v = NULL;
1038
- CHECK_FIXNUM(i);
1039
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1040
- v = FUNCTION(gsl_vector,alloc)(m->size2);
1041
- if (v == NULL) rb_raise(rb_eNoMemError, "gsl_vector_alloc failed");
1042
- FUNCTION(gsl_matrix,get_col)(v, m, FIX2INT(i));
1043
- // TODO This is NOT returning a view! Is there a macro more appropriate than
1044
- // QUALIFIED_VIEW?
1045
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,col), 0, FUNCTION(gsl_vector,free), v);
1046
- }
1047
-
1048
- static VALUE FUNCTION(rb_gsl_matrix,set_row)(VALUE obj, VALUE i, VALUE vv)
1049
- {
1050
- GSL_TYPE(gsl_matrix) *m = NULL;
1051
- GSL_TYPE(gsl_vector) *v = NULL;
1052
- int flag = 0;
1053
- size_t j;
1054
- CHECK_FIXNUM(i);
1055
- if (CLASS_OF(vv) == rb_cRange) vv = rb_gsl_range2ary(vv);
1056
- if (TYPE(vv) == T_ARRAY) {
1057
- v = FUNCTION(gsl_vector,alloc)(RARRAY_LEN(vv));
1058
- for (j = 0; (int) j < RARRAY_LEN(vv); j++) {
1059
- FUNCTION(gsl_vector,set)(v, j, NUMCONV2(rb_ary_entry(vv, j)));
1060
- }
1061
- flag = 1;
1062
- } else {
1063
- CHECK_VEC(vv);
1064
- Data_Get_Struct(vv, GSL_TYPE(gsl_vector), v);
1065
- }
1066
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1067
- FUNCTION(gsl_matrix,set_row)(m, FIX2INT(i), v);
1068
- if (flag == 1) FUNCTION(gsl_vector,free)(v);
1069
- return obj;
1070
- }
1071
-
1072
- static VALUE FUNCTION(rb_gsl_matrix,set_col)(VALUE obj, VALUE j, VALUE vv)
1073
- {
1074
- GSL_TYPE(gsl_matrix) *m = NULL;
1075
- GSL_TYPE(gsl_vector) *v = NULL;
1076
- int flag = 0;
1077
- size_t i;
1078
- CHECK_FIXNUM(j);
1079
- if (CLASS_OF(vv) == rb_cRange) vv = rb_gsl_range2ary(vv);
1080
- if (TYPE(vv) == T_ARRAY) {
1081
- v = FUNCTION(gsl_vector,alloc)(RARRAY_LEN(vv));
1082
- for (i = 0; (int) i < RARRAY_LEN(vv); i++) {
1083
- FUNCTION(gsl_vector,set)(v, i, NUMCONV2(rb_ary_entry(vv, i)));
1084
- }
1085
- flag = 1;
1086
- } else {
1087
- CHECK_VECTOR(vv);
1088
- Data_Get_Struct(vv, GSL_TYPE(gsl_vector), v);
1089
- }
1090
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1091
- FUNCTION(gsl_matrix,set_col)(m, FIX2INT(j), v);
1092
- if (flag == 1) FUNCTION(gsl_vector,free)(v);
1093
- return obj;
1094
- }
1095
-
1096
- static VALUE FUNCTION(rb_gsl_matrix,clone)(VALUE obj)
1097
- {
1098
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew = NULL;
1099
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1100
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
1101
- FUNCTION(gsl_matrix,memcpy)(mnew, m);
1102
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1103
- }
1104
-
1105
- static VALUE FUNCTION(rb_gsl_matrix,memcpy)(VALUE obj, VALUE mm1, VALUE mm2)
1106
- {
1107
- GSL_TYPE(gsl_matrix) *m1 = NULL, *m2 = NULL;
1108
- CHECK_MAT(mm1); CHECK_MAT(mm2);
1109
- Data_Get_Struct(mm1, GSL_TYPE(gsl_matrix), m1);
1110
- Data_Get_Struct(mm2, GSL_TYPE(gsl_matrix), m2);
1111
- FUNCTION(gsl_matrix,memcpy)(m1, m2);
1112
- return mm1;
1113
- }
1114
-
1115
- static VALUE FUNCTION(rb_gsl_matrix,isnull)(VALUE obj)
1116
- {
1117
- GSL_TYPE(gsl_matrix) *m = NULL;
1118
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1119
- return INT2FIX(FUNCTION(gsl_matrix,isnull)(m));
1120
- }
1121
-
1122
- static VALUE FUNCTION(rb_gsl_matrix,isnull2)(VALUE obj)
1123
- {
1124
- GSL_TYPE(gsl_matrix) *m = NULL;
1125
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1126
- if (FUNCTION(gsl_matrix,isnull)(m)) return Qtrue;
1127
- else return Qfalse;
1128
- }
1129
-
1130
-
1131
- /* singleton */
1132
- static VALUE FUNCTION(rb_gsl_matrix,swap)(VALUE obj, VALUE mm1, VALUE mm2)
1133
- {
1134
- GSL_TYPE(gsl_matrix) *m1 = NULL, *m2 = NULL;
1135
- CHECK_MAT(mm1); CHECK_MAT(mm2);
1136
- Data_Get_Struct(mm1, GSL_TYPE(gsl_matrix), m1);
1137
- Data_Get_Struct(mm2, GSL_TYPE(gsl_matrix), m2);
1138
- FUNCTION(gsl_matrix,swap)(m1, m2);
1139
- return mm1;
1140
- }
1141
-
1142
- static VALUE FUNCTION(rb_gsl_matrix,swap_rows_bang)(VALUE obj, VALUE i, VALUE j)
1143
- {
1144
- GSL_TYPE(gsl_matrix) *m = NULL;
1145
- CHECK_FIXNUM(i); CHECK_FIXNUM(j);
1146
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1147
- FUNCTION(gsl_matrix,swap_rows)(m, FIX2INT(i), FIX2INT(j));
1148
- return obj;
1149
- }
1150
-
1151
- static VALUE FUNCTION(rb_gsl_matrix,swap_rows)(VALUE obj, VALUE i, VALUE j)
1152
- {
1153
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew;
1154
- CHECK_FIXNUM(i); CHECK_FIXNUM(j);
1155
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1156
- mnew = FUNCTION(make_matrix,clone)(m);
1157
- FUNCTION(gsl_matrix,swap_rows)(mnew, FIX2INT(i), FIX2INT(j));
1158
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1159
- }
1160
-
1161
- static VALUE FUNCTION(rb_gsl_matrix,swap_columns_bang)(VALUE obj, VALUE i, VALUE j)
1162
- {
1163
- GSL_TYPE(gsl_matrix) *m = NULL;
1164
- CHECK_FIXNUM(i); CHECK_FIXNUM(j);
1165
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1166
- FUNCTION(gsl_matrix,swap_columns)(m, FIX2INT(i), FIX2INT(j));
1167
- return obj;
1168
- }
1169
-
1170
- static VALUE FUNCTION(rb_gsl_matrix,swap_columns)(VALUE obj, VALUE i, VALUE j)
1171
- {
1172
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew;
1173
- CHECK_FIXNUM(i); CHECK_FIXNUM(j);
1174
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1175
- mnew = FUNCTION(make_matrix,clone)(m);
1176
- FUNCTION(gsl_matrix,swap_columns)(mnew, FIX2INT(i), FIX2INT(j));
1177
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1178
- }
1179
-
1180
- static VALUE FUNCTION(rb_gsl_matrix,swap_rowcol_bang)(VALUE obj, VALUE i, VALUE j)
1181
- {
1182
- GSL_TYPE(gsl_matrix) *m = NULL;
1183
- CHECK_FIXNUM(i); CHECK_FIXNUM(j);
1184
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1185
- FUNCTION(gsl_matrix,swap_rowcol)(m, FIX2INT(i), FIX2INT(j));
1186
- return obj;
1187
- }
1188
-
1189
- static VALUE FUNCTION(rb_gsl_matrix,swap_rowcol)(VALUE obj, VALUE i, VALUE j)
1190
- {
1191
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew = NULL;
1192
- CHECK_FIXNUM(i); CHECK_FIXNUM(j);
1193
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1194
- mnew = FUNCTION(make_matrix,clone)(m);
1195
- FUNCTION(gsl_matrix,swap_rowcol)(mnew, FIX2INT(i), FIX2INT(j));
1196
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1197
- }
1198
-
1199
- static VALUE FUNCTION(rb_gsl_matrix,transpose_memcpy)(VALUE obj)
1200
- {
1201
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew = NULL;
1202
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1203
- mnew = FUNCTION(gsl_matrix,alloc)(m->size2, m->size1);
1204
- FUNCTION(gsl_matrix,transpose_memcpy)(mnew, m);
1205
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1206
- }
1207
-
1208
- static VALUE FUNCTION(rb_gsl_matrix,transpose_bang)(VALUE obj)
1209
- {
1210
- GSL_TYPE(gsl_matrix) *m = NULL;
1211
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1212
- FUNCTION(gsl_matrix,transpose)(m);
1213
- return obj;
1214
- }
1215
-
1216
- static VALUE FUNCTION(rb_gsl_matrix,max)(VALUE obj)
1217
- {
1218
- GSL_TYPE(gsl_matrix) *m = NULL;
1219
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1220
- return C_TO_VALUE2(FUNCTION(gsl_matrix,max)(m));
1221
- }
1222
-
1223
- static VALUE FUNCTION(rb_gsl_matrix,min)(VALUE obj)
1224
- {
1225
- GSL_TYPE(gsl_matrix) *m = NULL;
1226
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1227
- return C_TO_VALUE2(FUNCTION(gsl_matrix,min)(m));
1228
- }
1229
-
1230
- static VALUE FUNCTION(rb_gsl_matrix,minmax)(VALUE obj)
1231
- {
1232
- GSL_TYPE(gsl_matrix) *m = NULL;
1233
- BASE min, max;
1234
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1235
- FUNCTION(gsl_matrix,minmax)(m, &min, &max);
1236
- return rb_ary_new3(2, C_TO_VALUE2(min), C_TO_VALUE2(max));
1237
- }
1238
-
1239
- static VALUE FUNCTION(rb_gsl_matrix,max_index)(VALUE obj)
1240
- {
1241
- GSL_TYPE(gsl_matrix) *m = NULL;
1242
- size_t imax, jmax;
1243
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1244
- FUNCTION(gsl_matrix,max_index)(m, &imax, &jmax);
1245
- return rb_ary_new3(2, INT2FIX(imax), INT2FIX(jmax));
1246
- }
1247
-
1248
- static VALUE FUNCTION(rb_gsl_matrix,min_index)(VALUE obj)
1249
- {
1250
- GSL_TYPE(gsl_matrix) *m = NULL;
1251
- size_t imin, jmin;
1252
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1253
- FUNCTION(gsl_matrix,min_index)(m, &imin, &jmin);
1254
- return rb_ary_new3(2, INT2FIX(imin), INT2FIX(jmin));
1255
- }
1256
-
1257
- static VALUE FUNCTION(rb_gsl_matrix,minmax_index)(VALUE obj)
1258
- {
1259
- GSL_TYPE(gsl_matrix) *m = NULL;
1260
- size_t imin, jmin, imax, jmax;
1261
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1262
- FUNCTION(gsl_matrix,minmax_index)(m, &imin, &jmin, &imax, &jmax);
1263
- return rb_ary_new3(2, rb_ary_new3(2, INT2FIX(imin), INT2FIX(jmin)),
1264
- rb_ary_new3(2, INT2FIX(imax), INT2FIX(jmax)));
1265
- }
1266
-
1267
- static VALUE FUNCTION(rb_gsl_matrix,fwrite)(VALUE obj, VALUE io)
1268
- {
1269
- GSL_TYPE(gsl_matrix) *h = NULL;
1270
- FILE *f = NULL;
1271
- int status, flag = 0;
1272
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), h);
1273
- f = rb_gsl_open_writefile(io, &flag);
1274
- status = FUNCTION(gsl_matrix,fwrite)(f, h);
1275
- if (flag == 1) fclose(f);
1276
- return INT2FIX(status);
1277
- }
1278
-
1279
- static VALUE FUNCTION(rb_gsl_matrix,fread)(VALUE obj, VALUE io)
1280
- {
1281
- GSL_TYPE(gsl_matrix) *h = NULL;
1282
- FILE *f = NULL;
1283
- int status, flag = 0;
1284
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), h);
1285
- f = rb_gsl_open_readfile(io, &flag);
1286
- status = FUNCTION(gsl_matrix,fread)(f, h);
1287
- if (flag == 1) fclose(f);
1288
- return INT2FIX(status);
1289
- }
1290
-
1291
- static VALUE FUNCTION(rb_gsl_matrix,trace)(VALUE obj)
1292
- {
1293
- GSL_TYPE(gsl_matrix) *m = NULL;
1294
- size_t i;
1295
- BASE trace = 0;
1296
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1297
- for (i = 0; i < m->size1; i++) {
1298
- trace += FUNCTION(gsl_matrix,get)(m, i, i);
1299
- }
1300
- return C_TO_VALUE2(trace);
1301
- }
1302
-
1303
-
1304
- static VALUE FUNCTION(rb_gsl_matrix,uplus)(VALUE obj)
1305
- {
1306
- return obj;
1307
- }
1308
-
1309
- static VALUE FUNCTION(rb_gsl_matrix,uminus)(VALUE obj)
1310
- {
1311
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew = NULL;
1312
- size_t i, j;
1313
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1314
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
1315
- for (i = 0; i < m->size1; i++) {
1316
- for (j = 0; j < m->size2; j++) {
1317
- FUNCTION(gsl_matrix,set)(mnew, i, j, -FUNCTION(gsl_matrix,get)(m, i, j));
1318
- }
1319
- }
1320
- return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
1321
- }
1322
-
1323
- VALUE FUNCTION(rb_gsl_matrix,power)(VALUE obj, VALUE bb)
1324
- {
1325
- GSL_TYPE(gsl_matrix) *m = NULL, *mtmp = NULL, *mnew = NULL;
1326
- size_t i, b;
1327
- CHECK_FIXNUM(bb);
1328
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1329
- b = FIX2INT(bb);
1330
- mtmp = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
1331
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
1332
- FUNCTION(gsl_matrix,memcpy)(mnew, m);
1333
- for (i = 1; i < b; i++) {
1334
- FUNCTION(gsl_matrix,memcpy)(mtmp, mnew);
1335
- #ifdef BASE_DOUBLE
1336
- gsl_linalg_matmult(mtmp, m, mnew);
1337
- #else
1338
- gsl_linalg_matmult_int(mtmp, m, mnew);
1339
- #endif
1340
- }
1341
- FUNCTION(gsl_matrix,free)(mtmp);
1342
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1343
- }
1344
-
1345
- static VALUE FUNCTION(rb_gsl_matrix,submatrix)(int argc, VALUE *argv, VALUE obj)
1346
- {
1347
- GSL_TYPE(gsl_matrix) *m = NULL;
1348
- QUALIFIED_VIEW(gsl_matrix,view) *mv = NULL;
1349
- QUALIFIED_VIEW(gsl_vector,view) *vv = NULL;
1350
- size_t i, j, n1, n2;
1351
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1352
- parse_submatrix_args(argc, argv, m->size1, m->size2, &i, &j, &n1, &n2);
1353
- if(n1 == 0) {
1354
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1355
- *vv = FUNCTION(gsl_matrix,subrow)(m, i, j, n2);
1356
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,view), 0, free, vv);
1357
- }
1358
- else if(n2 == 0) {
1359
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1360
- *vv = FUNCTION(gsl_matrix,subcolumn)(m, j, i, n1);
1361
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,col_view), 0, free, vv);
1362
- } else {
1363
- mv = ALLOC(QUALIFIED_VIEW(gsl_matrix,view));
1364
- *mv = FUNCTION(gsl_matrix,submatrix)(m, i, j, n1, n2);
1365
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_matrix,view), 0, free, mv);
1366
- }
1367
- }
1368
-
1369
- static VALUE FUNCTION(rb_gsl_matrix,return_vector_view)(VALUE obj, VALUE index,
1370
- QUALIFIED_VIEW(gsl_vector,view) (*f)(GSL_TYPE(gsl_matrix)*,
1371
- size_t))
1372
- {
1373
- GSL_TYPE(gsl_matrix) *m = NULL;
1374
- QUALIFIED_VIEW(gsl_vector,view) *vv = NULL;
1375
- CHECK_FIXNUM(index);
1376
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1377
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1378
- *vv = (*f)(m, FIX2INT(index));
1379
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,view), 0, free, vv);
1380
- }
1381
-
1382
- static VALUE FUNCTION(rb_gsl_matrix,row)(VALUE obj, VALUE i)
1383
- {
1384
- return FUNCTION(rb_gsl_matrix,return_vector_view)(obj, i, FUNCTION(gsl_matrix,row));
1385
- }
1386
-
1387
- static VALUE FUNCTION(rb_gsl_matrix,column)(VALUE obj, VALUE j)
1388
- {
1389
- GSL_TYPE(gsl_matrix) *m = NULL;
1390
- QUALIFIED_VIEW(gsl_vector,view) *vv = NULL;
1391
- CHECK_FIXNUM(j);
1392
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1393
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1394
- *vv = FUNCTION(gsl_matrix,column)(m, FIX2INT(j));
1395
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,col_view), 0, free, vv);
1396
- }
1397
-
1398
- static VALUE FUNCTION(rb_gsl_matrix,subrow)(VALUE obj, VALUE i, VALUE offset,
1399
- VALUE n)
1400
- {
1401
- GSL_TYPE(gsl_matrix) *m = NULL;
1402
- QUALIFIED_VIEW(gsl_vector,view) *vv = NULL;
1403
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1404
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1405
- *vv = FUNCTION(gsl_matrix,subrow)(m, FIX2INT(i), FIX2INT(offset), FIX2INT(n));
1406
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,view), 0, free, vv);
1407
- }
1408
- static VALUE FUNCTION(rb_gsl_matrix,subcolumn)(VALUE obj, VALUE j, VALUE offset,
1409
- VALUE n)
1410
- {
1411
- GSL_TYPE(gsl_matrix) *m = NULL;
1412
- QUALIFIED_VIEW(gsl_vector,view) *vv = NULL;
1413
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1414
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1415
- *vv = FUNCTION(gsl_matrix,subcolumn)(m, FIX2INT(j), FIX2INT(offset), FIX2INT(n));
1416
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,col_view), 0, free, vv);
1417
- }
1418
-
1419
- static VALUE FUNCTION(rb_gsl_matrix,diagonal)(VALUE obj)
1420
- {
1421
- GSL_TYPE(gsl_matrix) *m = NULL;
1422
- QUALIFIED_VIEW(gsl_vector,view) *vv = NULL;
1423
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1424
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1425
- *vv = FUNCTION(gsl_matrix,diagonal)(m);
1426
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,view), 0, free, vv);
1427
- }
1428
-
1429
- static VALUE FUNCTION(rb_gsl_matrix,subdiagonal)(VALUE obj, VALUE k)
1430
- {
1431
- return rb_gsl_matrix_return_vector_view(obj, k, gsl_matrix_subdiagonal);
1432
- }
1433
-
1434
- static VALUE FUNCTION(rb_gsl_matrix,superdiagonal)(VALUE obj, VALUE k)
1435
- {
1436
- return rb_gsl_matrix_return_vector_view(obj, k, gsl_matrix_superdiagonal);
1437
- }
1438
-
1439
- static VALUE FUNCTION(rb_gsl_matrix,vector_view)(VALUE obj)
1440
- {
1441
- GSL_TYPE(gsl_matrix) *m = NULL;
1442
- QUALIFIED_VIEW(gsl_vector,view) *vv;
1443
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1444
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1445
- vv->vector.size = m->size1*m->size2;
1446
- vv->vector.owner = 0;
1447
- vv->vector.stride = 1;
1448
- vv->vector.data = m->data;
1449
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,view), 0, free, vv);
1450
- }
1451
-
1452
-
1453
- static VALUE FUNCTION(rb_gsl_matrix,each_row)(VALUE obj)
1454
- {
1455
- GSL_TYPE(gsl_matrix) *m = NULL;
1456
- QUALIFIED_VIEW(gsl_vector,view) *vv;
1457
- size_t i;
1458
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1459
- for (i = 0; i < m->size1; i++) {
1460
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1461
- *vv = FUNCTION(gsl_matrix,row)(m, i);
1462
- #ifdef BASE_DOUBLE
1463
- rb_yield(Data_Wrap_Struct(cgsl_vector_view, 0, free, vv));
1464
- #else
1465
- rb_yield(Data_Wrap_Struct(cgsl_vector_int_view, 0, free, vv));
1466
- #endif
1467
- }
1468
- return obj;
1469
- }
1470
-
1471
- static VALUE FUNCTION(rb_gsl_matrix,each_col)(VALUE obj)
1472
- {
1473
- GSL_TYPE(gsl_matrix) *m = NULL;
1474
- QUALIFIED_VIEW(gsl_vector,view) *vv;
1475
- size_t i;
1476
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1477
- for (i = 0; i < m->size2; i++) {
1478
- vv = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1479
- *vv = FUNCTION(gsl_matrix,column)(m, i);
1480
- #ifdef BASE_DOUBLE
1481
- rb_yield(Data_Wrap_Struct(cgsl_vector_col_view, 0, free, vv));
1482
- #else
1483
- rb_yield(Data_Wrap_Struct(cgsl_vector_int_col_view, 0, free, vv));
1484
- #endif
1485
- }
1486
- return obj;
1487
- }
1488
-
1489
- static VALUE FUNCTION(rb_gsl_matrix,scale_bang)(VALUE obj, VALUE x)
1490
- {
1491
- GSL_TYPE(gsl_matrix) *m;
1492
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1493
- FUNCTION(gsl_matrix,scale)(m, NUMCONV2(x));
1494
- return obj;
1495
- }
1496
-
1497
- static VALUE FUNCTION(rb_gsl_matrix,scale)(VALUE obj, VALUE b)
1498
- {
1499
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew;
1500
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1501
- mnew = FUNCTION(make_matrix,clone)(m);
1502
- FUNCTION(gsl_matrix,scale)(mnew, NUMCONV2(b));
1503
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1504
- }
1505
-
1506
- static VALUE FUNCTION(rb_gsl_matrix,add_constant_bang)(VALUE obj, VALUE x)
1507
- {
1508
- GSL_TYPE(gsl_matrix) *m;
1509
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1510
- FUNCTION(gsl_matrix,add_constant)(m, NUMCONV2(x));
1511
- return obj;
1512
- }
1513
-
1514
- static VALUE FUNCTION(rb_gsl_matrix,add_constant)(VALUE obj, VALUE b)
1515
- {
1516
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew;
1517
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1518
- mnew = FUNCTION(make_matrix,clone)(m);
1519
- FUNCTION(gsl_matrix,add_constant)(mnew, NUMCONV2(b));
1520
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1521
- }
1522
-
1523
- static int FUNCTION(mygsl_matrix,equal)(GSL_TYPE(gsl_matrix) *a, GSL_TYPE(gsl_matrix) *b, double eps)
1524
- {
1525
- size_t i, j;
1526
- BASE x, y;
1527
- if (a->size1 != b->size1 || a->size2 != b->size2) return 0;
1528
- for (i = 0; i < a->size1; i++) {
1529
- for (j = 0; j < a->size2; j++) {
1530
- x = FUNCTION(gsl_matrix,get)(a, i, j);
1531
- y = FUNCTION(gsl_matrix,get)(b, i, j);
1532
- if (fabs(x-y) > eps) return 0;
1533
- }
1534
- }
1535
- return 1;
1536
- }
1537
-
1538
- #ifdef HAVE_TENSOR_TENSOR_H
1539
- EXTERN VALUE cgsl_tensor, cgsl_tensor_int;
1540
- VALUE rb_gsl_tensor_equal(int argc, VALUE *argv, VALUE obj);
1541
- VALUE rb_gsl_tensor_int_equal(int argc, VALUE *argv, VALUE obj);
1542
- #ifdef BASE_DOUBLE
1543
- #define TEN_P(x) TENSOR_P(x)
1544
- #else
1545
- #define TEN_P(x) TENSOR_INT_P(x)
1546
- #endif
1547
- #endif
1548
-
1549
- static VALUE FUNCTION(rb_gsl_matrix,equal)(int argc, VALUE *argv, VALUE obj)
1550
- {
1551
- GSL_TYPE(gsl_matrix) *a, *b;
1552
- double eps = 1e-10;
1553
- VALUE bb;
1554
- switch (argc) {
1555
- case 2:
1556
- bb = argv[0];
1557
- eps = NUM2DBL(argv[1]);
1558
- break;
1559
- case 1:
1560
- bb = argv[0];
1561
- break;
1562
- default:
1563
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or 2)", argc);
1564
- break;
1565
- }
1566
- #ifdef HAVE_TENSOR_TENSOR_H
1567
- if (TEN_P(bb)) {
1568
- return FUNCTION(rb_gsl_tensor,equal)(argc, argv, obj);
1569
- }
1570
- #endif
1571
- CHECK_MAT(bb);
1572
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), a);
1573
- Data_Get_Struct(bb, GSL_TYPE(gsl_matrix), b);
1574
- if (FUNCTION(mygsl_matrix,equal)(a, b, eps) == 1) return Qtrue;
1575
- else return Qfalse;
1576
- }
1577
-
1578
- #ifdef HAVE_TENSOR_TENSOR_H
1579
- #ifdef TEN_P
1580
- #undef TEN_P
1581
- #endif
1582
- #endif
1583
-
1584
- static VALUE FUNCTION(rb_gsl_matrix,equal_singleton)(int argc, VALUE *argv, VALUE obj)
1585
- {
1586
- GSL_TYPE(gsl_matrix) *a, *b;
1587
- VALUE aa, bb;
1588
- double eps = 1e-10;
1589
- BASE x, y;
1590
- size_t i, j;
1591
- switch (argc) {
1592
- case 3:
1593
- aa = argv[0];
1594
- bb = argv[1];
1595
- eps = NUM2DBL(argv[2]);
1596
- break;
1597
- case 2:
1598
- aa = argv[0];
1599
- bb = argv[1];
1600
- break;
1601
- default:
1602
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 3)", argc);
1603
- break;
1604
- }
1605
- CHECK_MAT(aa); CHECK_MAT(bb);
1606
- Data_Get_Struct(aa, GSL_TYPE(gsl_matrix), a);
1607
- Data_Get_Struct(bb, GSL_TYPE(gsl_matrix), b);
1608
- if (a->size1 != b->size1 || a->size2 != b->size2) return Qfalse;
1609
- for (i = 0; i < a->size1; i++) {
1610
- for (j = 0; j < a->size2; j++) {
1611
- x = FUNCTION(gsl_matrix,get)(a, i, j);
1612
- y = FUNCTION(gsl_matrix,get)(b, i, j);
1613
- if (fabs(x-y) > eps) return Qfalse;
1614
- }
1615
- }
1616
- return Qtrue;
1617
- }
1618
-
1619
- #ifdef HAVE_TENSOR_TENSOR_H
1620
- #include "include/rb_gsl_tensor.h"
1621
- static VALUE FUNCTION(rb_gsl_matrix,to_tensor)(VALUE obj)
1622
- {
1623
- GSL_TYPE(gsl_matrix) *m;
1624
- GSL_TYPE(rbgsl_tensor) *t;
1625
- unsigned int rank;
1626
- size_t dim;
1627
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1628
- if (m->size1 != m->size2) rb_raise(rb_eRuntimeError, "matrix must have equal dimensions");
1629
- rank = 2;
1630
- dim = m->size1;
1631
- t = FUNCTION(rbgsl_tensor,alloc)(rank, dim);
1632
- memcpy(t->tensor->data, m->data, sizeof(BASE)*t->tensor->size);
1633
- return Data_Wrap_Struct(GSL_TYPE(cgsl_tensor), 0, FUNCTION(rbgsl_tensor,free), t);
1634
- }
1635
- #endif
1636
-
1637
- static VALUE FUNCTION(rb_gsl_matrix,collect)(VALUE obj)
1638
- {
1639
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew;
1640
- size_t i, j;
1641
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1642
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
1643
- for (i = 0; i < m->size1; i++) {
1644
- for (j = 0; j < m->size2; j++) {
1645
- FUNCTION(gsl_matrix,set)(mnew, i, j, NUMCONV(rb_yield(C_TO_VALUE(FUNCTION(gsl_matrix,get)(m, i, j)))));
1646
- }
1647
- }
1648
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1649
- }
1650
-
1651
- static VALUE FUNCTION(rb_gsl_matrix,collect_bang)(VALUE obj)
1652
- {
1653
- GSL_TYPE(gsl_matrix) *m = NULL;
1654
- size_t i, j;
1655
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1656
- for (i = 0; i < m->size1; i++) {
1657
- for (j = 0; j < m->size2; j++) {
1658
- FUNCTION(gsl_matrix,set)(m, i, j, NUMCONV(rb_yield(C_TO_VALUE(FUNCTION(gsl_matrix,get)(m, i, j)))));
1659
- }
1660
- }
1661
- return obj;
1662
- }
1663
-
1664
- static VALUE FUNCTION(rb_gsl_matrix,upper)(VALUE obj)
1665
- {
1666
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew;
1667
- size_t i, j;
1668
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1669
- mnew = FUNCTION(make_matrix,clone)(m);
1670
- for (i = 0; i < m->size1; i++) {
1671
- for (j = 0; j < i; j++) {
1672
- FUNCTION(gsl_matrix,set)(mnew, i, j, 0);
1673
- }
1674
- }
1675
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1676
- }
1677
-
1678
- static VALUE FUNCTION(rb_gsl_matrix,lower)(VALUE obj)
1679
- {
1680
- GSL_TYPE(gsl_matrix) *m = NULL, *mnew;
1681
- size_t i, j;
1682
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1683
- mnew = FUNCTION(make_matrix,clone)(m);
1684
- for (i = 0; i < m->size1; i++) {
1685
- for (j = i+1; j < m->size2; j++) {
1686
- FUNCTION(gsl_matrix,set)(mnew, i, j, 0);
1687
- }
1688
- }
1689
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1690
- }
1691
-
1692
- /* singleton method, creates Pascal matrix of dimension n */
1693
- static VALUE FUNCTION(rb_gsl_matrix,pascal1)(VALUE obj, VALUE n)
1694
- {
1695
- GSL_TYPE(gsl_matrix) *m;
1696
- BASE x;
1697
- size_t i, j, dim;
1698
- CHECK_FIXNUM(n);
1699
- dim = (size_t) FIX2INT(n);
1700
- m = FUNCTION(gsl_matrix,alloc)(dim, dim);
1701
- for (j = 0; j < dim; j++) FUNCTION(gsl_matrix,set)(m, 0, j, (BASE) 1);
1702
- for (i = 1; i < dim; i++) {
1703
- FUNCTION(gsl_matrix,set)(m, i, 0, (BASE) 1);
1704
- for (j = 1; j < dim; j++) {
1705
- x = FUNCTION(gsl_matrix,get)(m,i-1,j)+FUNCTION(gsl_matrix,get)(m,i,j-1);
1706
- FUNCTION(gsl_matrix,set)(m, i, j, x);
1707
- }
1708
- }
1709
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
1710
- }
1711
-
1712
- #ifdef BASE_DOUBLE
1713
- static VALUE FUNCTION(rb_gsl_matrix,hilbert)(VALUE obj, VALUE n)
1714
- {
1715
- GSL_TYPE(gsl_matrix) *m;
1716
- double x;
1717
- size_t i, j, dim;
1718
- CHECK_FIXNUM(n);
1719
- dim = (size_t) FIX2INT(n);
1720
- m = FUNCTION(gsl_matrix,alloc)(dim, dim);
1721
- for (i = 0; i < dim; i++) {
1722
- for (j = 0; j < dim; j++) {
1723
- x = 1.0/(i + j + 1);
1724
- FUNCTION(gsl_matrix,set)(m, i, j, (BASE) x);
1725
- }
1726
- }
1727
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
1728
- }
1729
-
1730
- double mygsl_binomial_coef(unsigned int n, unsigned int k);
1731
- static VALUE FUNCTION(rb_gsl_matrix,invhilbert)(VALUE obj, VALUE n)
1732
- {
1733
- GSL_TYPE(gsl_matrix) *m;
1734
- double x, y;
1735
- size_t i, j, dim;
1736
- CHECK_FIXNUM(n);
1737
- dim = (size_t) FIX2INT(n);
1738
- m = FUNCTION(gsl_matrix,alloc)(dim, dim);
1739
- for (i = 0; i < dim; i++) {
1740
- for (j = 0; j < dim; j++) {
1741
- if ((i+j)%2 == 0) x = 1;
1742
- else x = -1;
1743
- x *= (i + j + 1);
1744
- x *= mygsl_binomial_coef(dim + i, dim - j - 1);
1745
- x *= mygsl_binomial_coef(dim + j, dim - i - 1);
1746
- y = mygsl_binomial_coef(i + j, i);
1747
- x *= y*y;
1748
- FUNCTION(gsl_matrix,set)(m, i, j, (BASE) x);
1749
- }
1750
- }
1751
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
1752
- }
1753
- #endif
1754
-
1755
- static void FUNCTION(mygsl_matrix,vandermonde)(GSL_TYPE(gsl_matrix) *m, GSL_TYPE(gsl_vector) *v)
1756
- {
1757
- size_t i, j;
1758
-
1759
- for (i = 0; i < v->size; i++) {
1760
- for (j = 0; j < v->size; j++) {
1761
- FUNCTION(gsl_matrix,set)(m, i, j, (BASE) gsl_pow_int(FUNCTION(gsl_vector,get)(v, i), v->size-j-1));
1762
- }
1763
- }
1764
- }
1765
-
1766
- /* singleton */
1767
- static VALUE FUNCTION(rb_gsl_matrix,vandermonde)(VALUE obj, VALUE vv)
1768
- {
1769
- GSL_TYPE(gsl_vector) *v;
1770
- GSL_TYPE(gsl_matrix) *m;
1771
- int flag = 0;
1772
- if (TYPE(vv) == T_ARRAY) {
1773
- v = FUNCTION(make_cvector,from_rarray)(vv);
1774
- flag = 1;
1775
- } else if (VEC_P(vv)) {
1776
- Data_Get_Struct(vv, GSL_TYPE(gsl_vector), v);
1777
- } else {
1778
- rb_raise(rb_eTypeError, "wrong argument type %s (Array or Vector expected)",
1779
- rb_class2name(CLASS_OF(vv)));
1780
- }
1781
- m = FUNCTION(gsl_matrix,alloc)(v->size, v->size);
1782
- FUNCTION(mygsl_matrix,vandermonde)(m, v);
1783
- if (flag == 1) FUNCTION(gsl_vector,free)(v);
1784
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
1785
- }
1786
-
1787
- static void FUNCTION(mygsl_matrix,toeplitz)(GSL_TYPE(gsl_matrix) *m, GSL_TYPE(gsl_vector) *v)
1788
- {
1789
- size_t i, j;
1790
- for (i = 0; i < v->size; i++) {
1791
- for (j = 0; j < v->size; j++) {
1792
- if (j >= i)
1793
- FUNCTION(gsl_matrix,set)(m, i, j, FUNCTION(gsl_vector,get)(v, j-i));
1794
- else
1795
- FUNCTION(gsl_matrix,set)(m, i, j, FUNCTION(gsl_vector,get)(v, i-j));
1796
- }
1797
- }
1798
- }
1799
-
1800
- static VALUE FUNCTION(rb_gsl_matrix,toeplitz)(VALUE obj, VALUE vv)
1801
- {
1802
- GSL_TYPE(gsl_vector) *v;
1803
- GSL_TYPE(gsl_matrix) *m;
1804
- int flag = 0;
1805
- if (TYPE(vv) == T_ARRAY) {
1806
- v = FUNCTION(make_cvector,from_rarray)(vv);
1807
- flag = 1;
1808
- } else if (VEC_P(vv)) {
1809
- Data_Get_Struct(vv, GSL_TYPE(gsl_vector), v);
1810
- } else {
1811
- rb_raise(rb_eTypeError, "wrong argument type %s (Array or Vector expected)",
1812
- rb_class2name(CLASS_OF(vv)));
1813
- }
1814
- m = FUNCTION(gsl_matrix,alloc)(v->size, v->size);
1815
- FUNCTION(mygsl_matrix,toeplitz)(m, v);
1816
- if (flag == 1) FUNCTION(gsl_vector,free)(v);
1817
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
1818
- }
1819
-
1820
- void FUNCTION(mygsl_vector,to_m_circulant)(GSL_TYPE(gsl_matrix) *m, GSL_TYPE(gsl_vector) *v);
1821
- static VALUE FUNCTION(rb_gsl_matrix,circulant)(VALUE obj, VALUE vv)
1822
- {
1823
- GSL_TYPE(gsl_vector) *v;
1824
- GSL_TYPE(gsl_matrix) *m;
1825
- int flag = 0;
1826
- if (TYPE(vv) == T_ARRAY) {
1827
- v = FUNCTION(make_cvector,from_rarray)(vv);
1828
- flag = 1;
1829
- } else if (VEC_P(vv)) {
1830
- Data_Get_Struct(vv, GSL_TYPE(gsl_vector), v);
1831
- } else {
1832
- rb_raise(rb_eTypeError, "wrong argument type %s (Array or Vector expected)",
1833
- rb_class2name(CLASS_OF(vv)));
1834
- }
1835
- m = FUNCTION(gsl_matrix,alloc)(v->size, v->size);
1836
- FUNCTION(mygsl_vector,to_m_circulant)(m, v);
1837
- if (flag == 1) FUNCTION(gsl_vector,free)(v);
1838
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
1839
- }
1840
-
1841
- static void FUNCTION(mygsl_matrix,indgen)(GSL_TYPE(gsl_matrix) *m,
1842
- BASE start, BASE step)
1843
- {
1844
- size_t i, j;
1845
- BASE n;
1846
- n = start;
1847
- for (i = 0; i < m->size1; i++) {
1848
- for (j = 0; j < m->size2; j++) {
1849
- FUNCTION(gsl_matrix,set)(m, i, j, n);
1850
- n += step;
1851
- }
1852
- }
1853
- }
1854
-
1855
- static VALUE FUNCTION(rb_gsl_matrix,indgen_singleton)(int argc, VALUE *argv, VALUE obj)
1856
- {
1857
- GSL_TYPE(gsl_matrix) *m;
1858
- size_t n1, n2;
1859
- BASE start = 0, step = 1;
1860
- switch (argc) {
1861
- case 4:
1862
- step = NUMCONV2(argv[3]);
1863
- /* no break */
1864
- case 3:
1865
- start = NUMCONV2(argv[2]);
1866
- /* no break */
1867
- case 2:
1868
- n1 = NUM2INT(argv[0]);
1869
- n2 = NUM2INT(argv[1]);
1870
- break;
1871
- default:
1872
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 2-4)", argc);
1873
- break;
1874
- }
1875
- m = FUNCTION(gsl_matrix,alloc)(n1, n2);
1876
- FUNCTION(mygsl_matrix,indgen)(m, start, step);
1877
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), m);
1878
- }
1879
-
1880
- static VALUE FUNCTION(rb_gsl_matrix,indgen)(int argc, VALUE *argv, VALUE obj)
1881
- {
1882
- GSL_TYPE(gsl_matrix) *m, *mnew;
1883
- BASE start = 0, step = 1;
1884
- switch (argc) {
1885
- case 2:
1886
- step = NUMCONV2(argv[1]);
1887
- /* no break */
1888
- case 1:
1889
- start = NUMCONV2(argv[0]);
1890
- break;
1891
- case 0:
1892
- break;
1893
- default:
1894
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 0-2)", argc);
1895
- break;
1896
- }
1897
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1898
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
1899
- FUNCTION(mygsl_matrix,indgen)(mnew, start, step);
1900
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
1901
- }
1902
-
1903
- static VALUE FUNCTION(rb_gsl_matrix,indgen_bang)(int argc, VALUE *argv, VALUE obj)
1904
- {
1905
- GSL_TYPE(gsl_matrix) *m;
1906
- BASE start = 0, step = 1;
1907
- switch (argc) {
1908
- case 2:
1909
- step = NUMCONV2(argv[1]);
1910
- /* no break */
1911
- case 1:
1912
- start = NUMCONV2(argv[0]);
1913
- break;
1914
- case 0:
1915
- break;
1916
- default:
1917
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 0-2)", argc);
1918
- break;
1919
- }
1920
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1921
- FUNCTION(mygsl_matrix,indgen)(m, start, step);
1922
- return obj;
1923
- }
1924
-
1925
- static VALUE FUNCTION(rb_gsl_matrix,to_a)(VALUE obj)
1926
- {
1927
- GSL_TYPE(gsl_matrix) *m;
1928
- VALUE ma, ra;
1929
- size_t i, j;
1930
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1931
- ma = rb_ary_new2(m->size1);
1932
- for(i = 0; i < m->size1; i++) {
1933
- ra = rb_ary_new2(m->size2);
1934
- rb_ary_store(ma, i, ra);
1935
- for(j = 0; j < m->size2; j++) {
1936
- rb_ary_store(ra, j, C_TO_VALUE(FUNCTION(gsl_matrix,get)(m, i, j)));
1937
- }
1938
- }
1939
- return ma;
1940
- }
1941
-
1942
- static VALUE FUNCTION(rb_gsl_matrix,to_v)(VALUE obj)
1943
- {
1944
- GSL_TYPE(gsl_matrix) *m;
1945
- GSL_TYPE(gsl_vector) *v;
1946
- size_t i, j, k;
1947
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1948
- v = FUNCTION(gsl_vector,alloc)(m->size1*m->size2);
1949
- // memcpy(v->data, m->data, sizeof(BASE)*v->size);
1950
- for (i = 0, k = 0; i < m->size1; i++) {
1951
- for (j = 0; j < m->size2; j++, k++) {
1952
- FUNCTION(gsl_vector,set)(v, k, FUNCTION(gsl_matrix,get)(m, i, j));
1953
- }
1954
- }
1955
- if(m->size1 > 1 && m->size2 == 1) {
1956
- return Data_Wrap_Struct(CONCAT2(GSL_TYPE(cgsl_vector),col), 0, FUNCTION(gsl_vector,free), v);
1957
- } else {
1958
- return Data_Wrap_Struct(GSL_TYPE(cgsl_vector), 0, FUNCTION(gsl_vector,free), v);
1959
- }
1960
- }
1961
-
1962
- static VALUE FUNCTION(rb_gsl_matrix,to_vview)(VALUE obj)
1963
- {
1964
- GSL_TYPE(gsl_matrix) *m;
1965
- QUALIFIED_VIEW(gsl_vector,view) *v;
1966
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1967
- v = ALLOC(QUALIFIED_VIEW(gsl_vector,view));
1968
- v->vector.size = m->size1*m->size2;
1969
- v->vector.stride = 1;
1970
- v->vector.owner = 0;
1971
- v->vector.data = m->data;
1972
- return Data_Wrap_Struct(QUALIFIED_VIEW(cgsl_vector,view), 0, FUNCTION(gsl_vector,free), v);
1973
- }
1974
-
1975
- static VALUE FUNCTION(rb_gsl_matrix,norm)(VALUE obj)
1976
- {
1977
- GSL_TYPE(gsl_matrix) *m;
1978
- size_t i, n;
1979
- BASE x = 0;
1980
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
1981
- n = m->size1*m->size2;
1982
- for (i = 0; i < n; i++) x += m->data[i]*m->data[i];
1983
- return rb_float_new(sqrt(x));
1984
- }
1985
-
1986
- static int FUNCTION(mygsl_matrix,reverse_columns)(GSL_TYPE(gsl_matrix) *dst,
1987
- GSL_TYPE(gsl_matrix) *src)
1988
- {
1989
- size_t j;
1990
- QUALIFIED_VIEW(gsl_vector,view) col;
1991
- if (dst->size1 != src->size1 || dst->size2 != src->size2)
1992
- rb_raise(rb_eRuntimeError, "matrix sizes are different.");
1993
- for (j = 0; j < src->size2; j++) {
1994
- col = FUNCTION(gsl_matrix,column)(src, j);
1995
- FUNCTION(gsl_matrix,set_col)(dst, dst->size2-1-j, &col.vector);
1996
- }
1997
- return 0;
1998
- }
1999
-
2000
- static int FUNCTION(mygsl_matrix,reverse_rows)(GSL_TYPE(gsl_matrix) *dst,
2001
- GSL_TYPE(gsl_matrix) *src)
2002
- {
2003
- size_t i;
2004
- QUALIFIED_VIEW(gsl_vector,view) row;
2005
- if (dst->size1 != src->size1 || dst->size2 != src->size2)
2006
- rb_raise(rb_eRuntimeError, "matrix sizes are different.");
2007
- for (i = 0; i < src->size1; i++) {
2008
- row = FUNCTION(gsl_matrix,row)(src, i);
2009
- FUNCTION(gsl_matrix,set_row)(dst, dst->size1-1-i, &row.vector);
2010
- }
2011
- return 0;
2012
- }
2013
-
2014
- static VALUE FUNCTION(rb_gsl_matrix,reverse_columns)(VALUE obj)
2015
- {
2016
- GSL_TYPE(gsl_matrix) *m, *mnew;
2017
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2018
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2019
- FUNCTION(mygsl_matrix,reverse_columns)(mnew, m);
2020
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
2021
- }
2022
-
2023
- static VALUE FUNCTION(rb_gsl_matrix,reverse_columns_bang)(VALUE obj)
2024
- {
2025
- GSL_TYPE(gsl_matrix) *m, *mnew;
2026
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2027
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2028
- FUNCTION(mygsl_matrix,reverse_columns)(mnew, m);
2029
- FUNCTION(gsl_matrix,memcpy)(m, mnew);
2030
- FUNCTION(gsl_matrix,free)(mnew);
2031
- return obj;
2032
- }
2033
-
2034
- static VALUE FUNCTION(rb_gsl_matrix,reverse_rows)(VALUE obj)
2035
- {
2036
- GSL_TYPE(gsl_matrix) *m, *mnew;
2037
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2038
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2039
- FUNCTION(mygsl_matrix,reverse_rows)(mnew, m);
2040
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
2041
- }
2042
-
2043
- static VALUE FUNCTION(rb_gsl_matrix,reverse_rows_bang)(VALUE obj)
2044
- {
2045
- GSL_TYPE(gsl_matrix) *m, *mnew;
2046
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2047
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2048
- FUNCTION(mygsl_matrix,reverse_rows)(mnew, m);
2049
- FUNCTION(gsl_matrix,memcpy)(m, mnew);
2050
- FUNCTION(gsl_matrix,free)(mnew);
2051
- return obj;
2052
- }
2053
-
2054
- static VALUE FUNCTION(rb_gsl_matrix,block)(VALUE obj)
2055
- {
2056
- GSL_TYPE(gsl_matrix) *m;
2057
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2058
- return Data_Wrap_Struct(GSL_TYPE(cgsl_block), 0, NULL, m->block);
2059
- }
2060
-
2061
- static VALUE FUNCTION(rb_gsl_matrix,info)(VALUE obj)
2062
- {
2063
- GSL_TYPE(gsl_matrix) *m;
2064
- char buf[256];
2065
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2066
- sprintf(buf, "Class: %s\n", rb_class2name(CLASS_OF(obj)));
2067
- sprintf(buf, "%sSuperClass: %s\n", buf, rb_class2name(RCLASS_SUPER(CLASS_OF(obj))));
2068
- sprintf(buf, "%sDimension: %dx%d\n", buf, (int) m->size1, (int) m->size2);
2069
- sprintf(buf, "%sSize: %d\n", buf, (int) (m->size1*m->size2));
2070
- return rb_str_new2(buf);
2071
- }
2072
-
2073
- static VALUE FUNCTION(rb_gsl_matrix,any)(VALUE obj)
2074
- {
2075
- GSL_TYPE(gsl_matrix) *m;
2076
- QUALIFIED_VIEW(gsl_vector,view) vv;
2077
- GSL_TYPE(gsl_vector) *v;
2078
- gsl_vector_int *vnew;
2079
- size_t j;
2080
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2081
- vnew = gsl_vector_int_alloc(m->size2);
2082
- for (j = 0; j < m->size2; j++) {
2083
- vv = FUNCTION(gsl_matrix,column)(m, j);
2084
- v = &vv.vector;
2085
- if (FUNCTION(gsl_vector,isnull(v))) gsl_vector_int_set(vnew, j, 0);
2086
- else gsl_vector_int_set(vnew, j, 1);
2087
- }
2088
- return Data_Wrap_Struct(cgsl_vector_int, 0, gsl_vector_int_free, vnew);
2089
- }
2090
-
2091
- static VALUE FUNCTION(rb_gsl_matrix,all)(VALUE obj)
2092
- {
2093
- GSL_TYPE(gsl_matrix) *m;
2094
- QUALIFIED_VIEW(gsl_vector,view) vv;
2095
- GSL_TYPE(gsl_vector) *v;
2096
- gsl_vector_int *vnew;
2097
- size_t i, j;
2098
- int flag = 0;
2099
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2100
- vnew = gsl_vector_int_alloc(m->size2);
2101
- for (j = 0; j < m->size2; j++) {
2102
- vv = FUNCTION(gsl_matrix,column)(m, j);
2103
- v = &vv.vector;
2104
- /* if (FUNCTION(gsl_vector,isnull(v))) gsl_vector_int_set(vnew, j, 0);
2105
- else gsl_vector_int_set(vnew, j, 1);*/
2106
- for (i = 0; i < v->size; i++) {
2107
- if (FUNCTION(gsl_vector,get)(v, i) == (BASE) 0) {
2108
- gsl_vector_int_set(vnew, j, 0);
2109
- flag = 0;
2110
- break;
2111
- } else {
2112
- flag = 1;
2113
- }
2114
- }
2115
- if (flag == 1) gsl_vector_int_set(vnew, j, 1);
2116
- }
2117
- return Data_Wrap_Struct(cgsl_vector_int, 0, gsl_vector_int_free, vnew);
2118
- }
2119
-
2120
- static VALUE FUNCTION(rb_gsl_matrix,rot90)(int argc, VALUE *argv, VALUE obj)
2121
- {
2122
- GSL_TYPE(gsl_matrix) *m, *mnew, *mtmp;
2123
- int p;
2124
- switch (argc) {
2125
- case 0:
2126
- p = 1;
2127
- break;
2128
- case 1:
2129
- p = FIX2INT(argv[0])%4;
2130
- break;
2131
- default:
2132
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc);
2133
- break;
2134
- }
2135
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2136
- switch (p) {
2137
- case 0:
2138
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2139
- // FUNCTION(gsl_matrix,memcpy(mnew, m));
2140
- FUNCTION(gsl_matrix,memcpy)(mnew, m);
2141
- break;
2142
- case 1:
2143
- case -3:
2144
- mtmp = FUNCTION(gsl_matrix,alloc)(m->size2, m->size1);
2145
- FUNCTION(gsl_matrix,transpose_memcpy(mtmp, m));
2146
- mnew = FUNCTION(gsl_matrix,alloc)(m->size2, m->size1);
2147
- FUNCTION(mygsl_matrix,reverse_rows)(mnew, mtmp);
2148
- FUNCTION(gsl_matrix,free)(mtmp);
2149
- break;
2150
- case 2:
2151
- case -2:
2152
- mtmp = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2153
- FUNCTION(mygsl_matrix,reverse_rows)(mtmp,m);
2154
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2155
- FUNCTION(mygsl_matrix,reverse_columns)(mnew, mtmp);
2156
- FUNCTION(gsl_matrix,free)(mtmp);
2157
- break;
2158
- case 3:
2159
- case -1:
2160
- mtmp = FUNCTION(gsl_matrix,alloc)(m->size2, m->size1);
2161
- FUNCTION(gsl_matrix,transpose_memcpy(mtmp, m));
2162
- mnew = FUNCTION(gsl_matrix,alloc)(m->size2, m->size1);
2163
- FUNCTION(mygsl_matrix,reverse_columns)(mnew, mtmp);
2164
- FUNCTION(gsl_matrix,free)(mtmp);
2165
- break;
2166
- default:
2167
- return Qnil;
2168
- break;
2169
- }
2170
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
2171
- }
2172
-
2173
- void FUNCTION(mygsl_vector,diff)(GSL_TYPE(gsl_vector) *vdst,
2174
- GSL_TYPE(gsl_vector) *vsrc, size_t n);
2175
-
2176
- static VALUE FUNCTION(rb_gsl_matrix,diff)(int argc, VALUE *argv, VALUE obj)
2177
- {
2178
- GSL_TYPE(gsl_matrix) *m, *mnew;
2179
- QUALIFIED_VIEW(gsl_vector,view) v1, v2;
2180
- size_t n, j;
2181
- switch (argc) {
2182
- case 0:
2183
- n = 1;
2184
- break;
2185
- case 1:
2186
- n = FIX2INT(argv[0]);
2187
- break;
2188
- default:
2189
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc);
2190
- break;
2191
- }
2192
- if (n <= 0) return obj;
2193
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2194
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1-n, m->size2);
2195
- if (m->size1 <= n) return obj;
2196
- for (j = 0; j < m->size2; j++) {
2197
- v1 = FUNCTION(gsl_matrix,column)(m, j);
2198
- v2 = FUNCTION(gsl_matrix,column)(mnew, j);
2199
- FUNCTION(mygsl_vector,diff)(&v2.vector, &v1.vector, n);
2200
- }
2201
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
2202
- }
2203
-
2204
- static VALUE FUNCTION(rb_gsl_matrix,test)(VALUE obj, int (*f)(const double))
2205
- {
2206
- GSL_TYPE(gsl_matrix) *m;
2207
- gsl_matrix_int *mi;
2208
- size_t i, j;
2209
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2210
- mi = gsl_matrix_int_alloc(m->size1, m->size2);
2211
- for (i = 0; i < m->size1; i++) {
2212
- for (j = 0; j < m->size2; j++) {
2213
- gsl_matrix_int_set(mi, i, j, (*f)(FUNCTION(gsl_matrix,get)(m, i, j)));
2214
- }
2215
- }
2216
- return Data_Wrap_Struct(cgsl_matrix_int, 0, gsl_matrix_int_free, mi);
2217
- }
2218
-
2219
- static VALUE FUNCTION(rb_gsl_matrix,isnan)(VALUE obj)
2220
- {
2221
- return FUNCTION(rb_gsl_matrix,test)(obj, gsl_isnan);
2222
- }
2223
-
2224
- static VALUE FUNCTION(rb_gsl_matrix,isinf)(VALUE obj)
2225
- {
2226
- return FUNCTION(rb_gsl_matrix,test)(obj, gsl_isinf);
2227
- }
2228
-
2229
- static VALUE FUNCTION(rb_gsl_matrix,finite)(VALUE obj)
2230
- {
2231
- return FUNCTION(rb_gsl_matrix,test)(obj, gsl_finite);
2232
- }
2233
-
2234
- static VALUE FUNCTION(rb_gsl_matrix,sgn)(VALUE obj)
2235
- {
2236
- GSL_TYPE(gsl_matrix) *m, *mnew;
2237
- BASE x;
2238
- size_t i, j;
2239
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2240
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2241
- for (i = 0; i < m->size1; i++) {
2242
- for (j = 0; j < m->size2; j++) {
2243
- x = FUNCTION(gsl_matrix,get)(m, i, j);
2244
- FUNCTION(gsl_matrix,set)(mnew, i, j, (BASE)(x>0 ? 1 : (x<0 ? -1 : 0)));
2245
- }
2246
- }
2247
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
2248
- }
2249
-
2250
- static VALUE FUNCTION(rb_gsl_matrix,abs)(VALUE obj)
2251
- {
2252
- GSL_TYPE(gsl_matrix) *m, *mnew;
2253
- size_t i, j;
2254
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2255
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2256
- for (i = 0; i < m->size1; i++) {
2257
- for (j = 0; j < m->size2; j++) {
2258
- FUNCTION(gsl_matrix,set)(mnew, i, j, (BASE) fabs(FUNCTION(gsl_matrix,get)(m, i, j)));
2259
- }
2260
- }
2261
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
2262
- }
2263
-
2264
- static VALUE FUNCTION(rb_gsl_matrix,horzcat)(VALUE obj, VALUE mm2)
2265
- {
2266
- GSL_TYPE(gsl_matrix) *m, *m2, *mnew;
2267
- QUALIFIED_VIEW(gsl_vector,view) v;
2268
- size_t j, k;
2269
- CHECK_MAT(mm2);
2270
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2271
- Data_Get_Struct(mm2, GSL_TYPE(gsl_matrix), m2);
2272
- if (m->size1 != m2->size1)
2273
- rb_raise(rb_eRuntimeError, "Different number of rows (%d and %d).",
2274
- (int) m->size1, (int) m2->size1);
2275
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2 + m2->size2);
2276
- for (j = 0, k = 0; j < m->size2; j++, k++) {
2277
- v = FUNCTION(gsl_matrix,column)(m, j);
2278
- FUNCTION(gsl_matrix,set_col)(mnew, k, &v.vector);
2279
- }
2280
- for (j = 0; j < m2->size2; j++, k++) {
2281
- v = FUNCTION(gsl_matrix,column)(m2, j);
2282
- FUNCTION(gsl_matrix,set_col)(mnew, k, &v.vector);
2283
- }
2284
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
2285
- }
2286
-
2287
- static VALUE FUNCTION(rb_gsl_matrix,horzcat_singleton)(VALUE klass, VALUE mm, VALUE mm2)
2288
- {
2289
- CHECK_MAT(mm);
2290
- return FUNCTION(rb_gsl_matrix,horzcat)(mm, mm2);
2291
- }
2292
-
2293
-
2294
- static VALUE FUNCTION(rb_gsl_matrix,vertcat)(VALUE obj, VALUE mm2)
2295
- {
2296
- GSL_TYPE(gsl_matrix) *m, *m2, *mnew;
2297
- QUALIFIED_VIEW(gsl_vector,view) v;
2298
- size_t i, k;
2299
- CHECK_MAT(mm2);
2300
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2301
- Data_Get_Struct(mm2, GSL_TYPE(gsl_matrix), m2);
2302
- if (m->size2 != m2->size2)
2303
- rb_raise(rb_eRuntimeError, "Different number of columns (%d and %d).",
2304
- (int) m->size2, (int) m2->size2);
2305
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1 + m2->size1, m->size2);
2306
- for (i = 0, k = 0; i < m->size1; i++, k++) {
2307
- v = FUNCTION(gsl_matrix,row)(m, i);
2308
- FUNCTION(gsl_matrix,set_row)(mnew, k, &v.vector);
2309
- }
2310
- for (i = 0; i < m2->size1; i++, k++) {
2311
- v = FUNCTION(gsl_matrix,row)(m2, i);
2312
- FUNCTION(gsl_matrix,set_row)(mnew, k, &v.vector);
2313
- }
2314
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
2315
- }
2316
-
2317
- static VALUE FUNCTION(rb_gsl_matrix,vertcat_singleton)(VALUE klass, VALUE mm, VALUE mm2)
2318
- {
2319
- CHECK_MAT(mm);
2320
- return FUNCTION(rb_gsl_matrix,vertcat)(mm, mm2);
2321
- }
2322
-
2323
- static VALUE FUNCTION(rb_gsl_matrix,property)(VALUE obj,
2324
- int (*f)(const GSL_TYPE (gsl_matrix)*)) {
2325
- GSL_TYPE(gsl_matrix) *m;
2326
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2327
- return INT2FIX((*f)(m));
2328
- }
2329
-
2330
- static VALUE FUNCTION(rb_gsl_matrix,property2)(VALUE obj,
2331
- int (*f)(const GSL_TYPE (gsl_matrix) *)) {
2332
- GSL_TYPE(gsl_matrix) *m;
2333
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2334
- if ((*f)(m)) return Qtrue;
2335
- else return Qfalse;
2336
- }
2337
- static VALUE FUNCTION(rb_gsl_matrix,ispos)(VALUE obj)
2338
- {
2339
- return FUNCTION(rb_gsl_matrix,property)(obj, FUNCTION(gsl_matrix,ispos));
2340
- }
2341
- static VALUE FUNCTION(rb_gsl_matrix,ispos2)(VALUE obj)
2342
- {
2343
- return FUNCTION(rb_gsl_matrix,property2)(obj, FUNCTION(gsl_matrix,ispos));
2344
- }
2345
- static VALUE FUNCTION(rb_gsl_matrix,isneg)(VALUE obj)
2346
- {
2347
- return FUNCTION(rb_gsl_matrix,property)(obj, FUNCTION(gsl_matrix,isneg));
2348
- }
2349
- static VALUE FUNCTION(rb_gsl_matrix,isneg2)(VALUE obj)
2350
- {
2351
- return FUNCTION(rb_gsl_matrix,property2)(obj, FUNCTION(gsl_matrix,isneg));
2352
- }
2353
-
2354
- static VALUE FUNCTION(rb_gsl_matrix,isnonneg)(VALUE obj)
2355
- {
2356
- return FUNCTION(rb_gsl_matrix,property)(obj, FUNCTION(gsl_matrix,isnonneg));
2357
- }
2358
- static VALUE FUNCTION(rb_gsl_matrix,isnonneg2)(VALUE obj)
2359
- {
2360
- return FUNCTION(rb_gsl_matrix,property2)(obj, FUNCTION(gsl_matrix,isnonneg));
2361
- }
2362
-
2363
- static VALUE FUNCTION(rb_gsl_matrix,symmetrize)(VALUE obj)
2364
- {
2365
- GSL_TYPE(gsl_matrix) *m, *mnew;
2366
- size_t i, j;
2367
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2368
- if (m->size1 != m->size2)
2369
- rb_raise(rb_eRuntimeError, "symmetrize: not a square matrix.\n");
2370
- mnew = FUNCTION(gsl_matrix,alloc)(m->size1, m->size2);
2371
- for (i = 0; i < m->size1; i++) {
2372
- for (j = i; j < m->size2; j++) {
2373
- FUNCTION(gsl_matrix,set)(mnew, i, j, FUNCTION(gsl_matrix,get)(m, i, j));
2374
- }
2375
- for (j = 0; j < i; j++) {
2376
- FUNCTION(gsl_matrix,set)(mnew, i, j, FUNCTION(gsl_matrix,get)(m, j, i));
2377
- }
2378
- }
2379
- return Data_Wrap_Struct(GSL_TYPE(cgsl_matrix), 0, FUNCTION(gsl_matrix,free), mnew);
2380
- }
2381
-
2382
- static VALUE FUNCTION(rb_gsl_matrix,symmetrize_bang)(VALUE obj)
2383
- {
2384
- GSL_TYPE(gsl_matrix) *m;
2385
- size_t i, j;
2386
- Data_Get_Struct(obj, GSL_TYPE(gsl_matrix), m);
2387
- if (m->size1 != m->size2)
2388
- rb_raise(rb_eRuntimeError, "symmetrize: not a square matrix.\n");
2389
- for (i = 0; i < m->size1; i++) {
2390
- for (j = 0; j < i; j++) {
2391
- FUNCTION(gsl_matrix,set)(m, i, j, FUNCTION(gsl_matrix,get)(m, j, i));
2392
- }
2393
- }
2394
- return obj;
2395
- }
2396
-
2397
- void FUNCTION(Init_gsl_matrix,init)(VALUE module)
2398
- {
2399
- /* rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "new", FUNCTION(rb_gsl_matrix,alloc), -1);*/
2400
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "[]", FUNCTION(rb_gsl_matrix,alloc), -1);
2401
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "alloc", FUNCTION(rb_gsl_matrix,alloc), -1);
2402
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "calloc", FUNCTION(rb_gsl_matrix,calloc), 2);
2403
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "eye", FUNCTION(rb_gsl_matrix,eye), -1);
2404
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "ones", FUNCTION(rb_gsl_matrix,ones), -1);
2405
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "zeros", FUNCTION(rb_gsl_matrix,zeros), -1);
2406
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "diagonal",
2407
- FUNCTION(rb_gsl_matrix,diagonal_singleton), -1);
2408
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "diag",
2409
- FUNCTION(rb_gsl_matrix,diagonal_singleton), -1);
2410
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "identity",
2411
- FUNCTION(rb_gsl_matrix,identity), 1);
2412
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "scalar",
2413
- FUNCTION(rb_gsl_matrix,identity), 1);
2414
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "unit",
2415
- FUNCTION(rb_gsl_matrix,identity), 1);
2416
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "I",
2417
- FUNCTION(rb_gsl_matrix,identity), 1);
2418
-
2419
- /*****/
2420
- rb_define_method(GSL_TYPE(cgsl_matrix), "size1",
2421
- FUNCTION(rb_gsl_matrix,size1), 0);
2422
- rb_define_method(GSL_TYPE(cgsl_matrix), "size2",
2423
- FUNCTION(rb_gsl_matrix,size2), 0);
2424
- rb_define_method(GSL_TYPE(cgsl_matrix), "shape",
2425
- FUNCTION(rb_gsl_matrix,shape), 0);
2426
- rb_define_alias(GSL_TYPE(cgsl_matrix), "size", "shape");
2427
-
2428
- rb_define_method(GSL_TYPE(cgsl_matrix), "get", FUNCTION(rb_gsl_matrix,get), -1);
2429
- rb_define_alias(GSL_TYPE(cgsl_matrix), "[]", "get");
2430
- rb_define_method(GSL_TYPE(cgsl_matrix), "set", FUNCTION(rb_gsl_matrix,set), -1);
2431
- rb_define_alias(GSL_TYPE(cgsl_matrix), "[]=", "set");
2432
-
2433
- rb_define_method(GSL_TYPE(cgsl_matrix), "set_all",
2434
- FUNCTION(rb_gsl_matrix,set_all), 1);
2435
- rb_define_method(GSL_TYPE(cgsl_matrix), "set_zero",
2436
- FUNCTION(rb_gsl_matrix,set_zero), 0);
2437
- rb_define_method(GSL_TYPE(cgsl_matrix), "set_identity",
2438
- FUNCTION(rb_gsl_matrix,set_identity), 0);
2439
-
2440
- rb_define_method(GSL_TYPE(cgsl_matrix), "print",
2441
- FUNCTION(rb_gsl_matrix,print), 0);
2442
- rb_define_method(GSL_TYPE(cgsl_matrix), "inspect",
2443
- FUNCTION(rb_gsl_matrix,inspect), 0);
2444
- rb_define_method(GSL_TYPE(cgsl_matrix), "to_s",
2445
- FUNCTION(rb_gsl_matrix,to_s), 0);
2446
-
2447
- rb_define_method(GSL_TYPE(cgsl_matrix), "set_diagonal",
2448
- FUNCTION(rb_gsl_matrix,set_diagonal), 1);
2449
-
2450
- rb_define_method(GSL_TYPE(cgsl_matrix), "get_row",
2451
- FUNCTION(rb_gsl_matrix,get_row), 1);
2452
- rb_define_method(GSL_TYPE(cgsl_matrix), "get_column",
2453
- FUNCTION(rb_gsl_matrix,get_col), 1);
2454
- rb_define_alias(GSL_TYPE(cgsl_matrix), "get_col", "get_column");
2455
- rb_define_method(GSL_TYPE(cgsl_matrix), "set_column",
2456
- FUNCTION(rb_gsl_matrix,set_col), 2);
2457
- rb_define_alias(GSL_TYPE(cgsl_matrix), "set_col", "set_column");
2458
- rb_define_method(GSL_TYPE(cgsl_matrix), "set_row",
2459
- FUNCTION(rb_gsl_matrix,set_row), 2);
2460
-
2461
- rb_define_method(GSL_TYPE(cgsl_matrix), "clone",
2462
- FUNCTION(rb_gsl_matrix,clone), 0);
2463
- rb_define_alias(GSL_TYPE(cgsl_matrix), "duplicate", "clone");
2464
- rb_define_alias(GSL_TYPE(cgsl_matrix), "dup", "clone");
2465
- rb_define_method(GSL_TYPE(cgsl_matrix), "isnull",
2466
- FUNCTION(rb_gsl_matrix,isnull), 0);
2467
- rb_define_method(GSL_TYPE(cgsl_matrix), "isnull?",
2468
- FUNCTION(rb_gsl_matrix,isnull2), 0);
2469
-
2470
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "memcpy",
2471
- FUNCTION(rb_gsl_matrix,memcpy), 2);
2472
-
2473
- rb_define_method(GSL_TYPE(cgsl_matrix), "swap_rows",
2474
- FUNCTION(rb_gsl_matrix,swap_rows), 2);
2475
- rb_define_method(GSL_TYPE(cgsl_matrix), "swap_rows!",
2476
- FUNCTION(rb_gsl_matrix,swap_rows_bang), 2);
2477
- rb_define_method(GSL_TYPE(cgsl_matrix), "swap_columns",
2478
- FUNCTION(rb_gsl_matrix,swap_columns), 2);
2479
- rb_define_alias(GSL_TYPE(cgsl_matrix), "swap_cols", "swap_columns");
2480
- rb_define_method(GSL_TYPE(cgsl_matrix), "swap_columns!",
2481
- FUNCTION(rb_gsl_matrix,swap_columns_bang), 2);
2482
- rb_define_alias(GSL_TYPE(cgsl_matrix), "swap_cols!", "swap_columns!");
2483
- rb_define_method(GSL_TYPE(cgsl_matrix), "swap_rowcol",
2484
- FUNCTION(rb_gsl_matrix,swap_rowcol), 2);
2485
- rb_define_method(GSL_TYPE(cgsl_matrix), "swap_rowcol!",
2486
- FUNCTION(rb_gsl_matrix,swap_rowcol_bang), 2);
2487
- rb_define_method(GSL_TYPE(cgsl_matrix), "transpose_memcpy",
2488
- FUNCTION(rb_gsl_matrix,transpose_memcpy), 0);
2489
- rb_define_alias(GSL_TYPE(cgsl_matrix), "transpose", "transpose_memcpy");
2490
- rb_define_alias(GSL_TYPE(cgsl_matrix), "trans", "transpose_memcpy");
2491
- rb_define_method(GSL_TYPE(cgsl_matrix), "transpose!",
2492
- FUNCTION(rb_gsl_matrix,transpose_bang), 0);
2493
- rb_define_alias(GSL_TYPE(cgsl_matrix), "trans!", "transpose!");
2494
- rb_define_method(GSL_TYPE(cgsl_matrix), "reverse_columns",
2495
- FUNCTION(rb_gsl_matrix,reverse_columns), 0);
2496
- rb_define_alias(GSL_TYPE(cgsl_matrix), "fliplr", "reverse_columns");
2497
- rb_define_method(GSL_TYPE(cgsl_matrix), "reverse_columns!",
2498
- FUNCTION(rb_gsl_matrix,reverse_columns_bang), 0);
2499
- rb_define_method(GSL_TYPE(cgsl_matrix), "reverse_rows",
2500
- FUNCTION(rb_gsl_matrix,reverse_rows), 0);
2501
- rb_define_alias(GSL_TYPE(cgsl_matrix), "flipud", "reverse_rows");
2502
- rb_define_method(GSL_TYPE(cgsl_matrix), "reverse_rows!",
2503
- FUNCTION(rb_gsl_matrix,reverse_rows_bang), 0);
2504
- /*****/
2505
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "swap",
2506
- FUNCTION(rb_gsl_matrix,swap), 2);
2507
-
2508
- rb_define_method(GSL_TYPE(cgsl_matrix), "max", FUNCTION(rb_gsl_matrix,max), 0);
2509
- rb_define_method(GSL_TYPE(cgsl_matrix), "min", FUNCTION(rb_gsl_matrix,min), 0);
2510
- rb_define_method(GSL_TYPE(cgsl_matrix), "minmax",
2511
- FUNCTION(rb_gsl_matrix,minmax), 0);
2512
- rb_define_method(GSL_TYPE(cgsl_matrix), "max_index",
2513
- FUNCTION(rb_gsl_matrix,max_index), 0);
2514
- rb_define_method(GSL_TYPE(cgsl_matrix), "min_index",
2515
- FUNCTION(rb_gsl_matrix,min_index), 0);
2516
- rb_define_method(GSL_TYPE(cgsl_matrix), "minmax_index",
2517
- FUNCTION(rb_gsl_matrix,minmax_index), 0);
2518
-
2519
- rb_define_method(GSL_TYPE(cgsl_matrix), "fwrite",
2520
- FUNCTION(rb_gsl_matrix,fwrite), 1);
2521
- rb_define_method(GSL_TYPE(cgsl_matrix), "fread",
2522
- FUNCTION(rb_gsl_matrix,fread), 1);
2523
- rb_define_method(GSL_TYPE(cgsl_matrix), "fprintf",
2524
- FUNCTION(rb_gsl_matrix,fprintf), -1);
2525
- rb_define_method(GSL_TYPE(cgsl_matrix), "printf",
2526
- FUNCTION(rb_gsl_matrix,printf), -1);
2527
- rb_define_method(GSL_TYPE(cgsl_matrix), "fscanf",
2528
- FUNCTION(rb_gsl_matrix,fscanf), 1);
2529
-
2530
- rb_define_method(GSL_TYPE(cgsl_matrix), "trace",
2531
- FUNCTION(rb_gsl_matrix,trace), 0);
2532
-
2533
- rb_define_method(GSL_TYPE(cgsl_matrix), "-@",
2534
- FUNCTION(rb_gsl_matrix,uminus), 0);
2535
- rb_define_method(GSL_TYPE(cgsl_matrix), "+@",
2536
- FUNCTION(rb_gsl_matrix,uplus), 0);
2537
-
2538
-
2539
- /*****/
2540
- rb_define_method(GSL_TYPE(cgsl_matrix), "submatrix",
2541
- FUNCTION(rb_gsl_matrix,submatrix), -1);
2542
- rb_define_alias(GSL_TYPE(cgsl_matrix), "view", "submatrix");
2543
-
2544
- rb_define_method(GSL_TYPE(cgsl_matrix), "row", FUNCTION(rb_gsl_matrix,row), 1);
2545
- /* rb_define_alias(GSL_TYPE(cgsl_matrix), "[]", "row");*/
2546
- rb_define_method(GSL_TYPE(cgsl_matrix), "column",
2547
- FUNCTION(rb_gsl_matrix,column), 1);
2548
- rb_define_alias(GSL_TYPE(cgsl_matrix), "col", "column");
2549
-
2550
- rb_define_method(GSL_TYPE(cgsl_matrix), "subrow",
2551
- FUNCTION(rb_gsl_matrix,subrow), 3);
2552
- rb_define_method(GSL_TYPE(cgsl_matrix), "subcolumn",
2553
- FUNCTION(rb_gsl_matrix,subcolumn), 3);
2554
- rb_define_alias(GSL_TYPE(cgsl_matrix), "subcol", "subcolumn");
2555
-
2556
- rb_define_method(GSL_TYPE(cgsl_matrix), "diagonal",
2557
- FUNCTION(rb_gsl_matrix,diagonal), 0);
2558
- rb_define_alias(GSL_TYPE(cgsl_matrix), "diag", "diagonal");
2559
-
2560
- rb_define_method(GSL_TYPE(cgsl_matrix), "subdiagonal",
2561
- FUNCTION(rb_gsl_matrix,subdiagonal), 1);
2562
- rb_define_method(GSL_TYPE(cgsl_matrix), "superdiagonal",
2563
- FUNCTION(rb_gsl_matrix,superdiagonal), 1);
2564
- rb_define_method(GSL_TYPE(cgsl_matrix), "vector_view",
2565
- FUNCTION(rb_gsl_matrix,vector_view), 0);
2566
-
2567
- rb_define_method(GSL_TYPE(cgsl_matrix), "each_row",
2568
- FUNCTION(rb_gsl_matrix,each_row), 0);
2569
- rb_define_method(GSL_TYPE(cgsl_matrix), "each_col",
2570
- FUNCTION(rb_gsl_matrix,each_col), 0);
2571
- rb_define_alias(GSL_TYPE(cgsl_matrix), "each_column", "each_col");
2572
-
2573
- rb_define_method(GSL_TYPE(cgsl_matrix), "scale",
2574
- FUNCTION(rb_gsl_matrix,scale), 1);
2575
- rb_define_method(GSL_TYPE(cgsl_matrix), "scale!",
2576
- FUNCTION(rb_gsl_matrix,scale_bang), 1);
2577
- rb_define_method(GSL_TYPE(cgsl_matrix), "add_constant",
2578
- FUNCTION(rb_gsl_matrix,add_constant), 1);
2579
- rb_define_method(GSL_TYPE(cgsl_matrix), "add_constant!",
2580
- FUNCTION(rb_gsl_matrix,add_constant_bang), 1);
2581
-
2582
- rb_define_method(GSL_TYPE(cgsl_matrix), "equal?",
2583
- FUNCTION(rb_gsl_matrix,equal), -1);
2584
- rb_define_alias(GSL_TYPE(cgsl_matrix), "==", "equal?");
2585
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "equal?",
2586
- FUNCTION(rb_gsl_matrix,equal_singleton), -1);
2587
-
2588
- rb_define_method(GSL_TYPE(cgsl_matrix), "power",
2589
- FUNCTION(rb_gsl_matrix,power), 1);
2590
- rb_define_alias(GSL_TYPE(cgsl_matrix), "**", "power");
2591
- rb_define_alias(GSL_TYPE(cgsl_matrix), "^", "power");
2592
-
2593
- rb_define_method(GSL_TYPE(cgsl_matrix), "collect",
2594
- FUNCTION(rb_gsl_matrix,collect), 0);
2595
- rb_define_method(GSL_TYPE(cgsl_matrix), "collect!",
2596
- FUNCTION(rb_gsl_matrix,collect_bang), 0);
2597
- rb_define_alias(GSL_TYPE(cgsl_matrix), "map", "collect");
2598
- rb_define_alias(GSL_TYPE(cgsl_matrix), "map!", "collect!");
2599
- #ifdef HAVE_TENSOR_TENSOR_H
2600
- rb_define_method(GSL_TYPE(cgsl_matrix), "to_tensor",
2601
- FUNCTION(rb_gsl_matrix,to_tensor), 0);
2602
- #endif
2603
-
2604
- /*****/
2605
-
2606
- rb_define_method(GSL_TYPE(cgsl_matrix), "to_a",
2607
- FUNCTION(rb_gsl_matrix,to_a), 0);
2608
- rb_define_method(GSL_TYPE(cgsl_matrix), "to_v",
2609
- FUNCTION(rb_gsl_matrix,to_v), 0);
2610
- rb_define_method(GSL_TYPE(cgsl_matrix), "to_vview",
2611
- FUNCTION(rb_gsl_matrix,to_vview), 0);
2612
- rb_define_alias(GSL_TYPE(cgsl_matrix), "data", "to_vview");
2613
- rb_define_method(GSL_TYPE(cgsl_matrix), "norm",
2614
- FUNCTION(rb_gsl_matrix,norm), 0);
2615
-
2616
- rb_define_method(GSL_TYPE(cgsl_matrix), "upper",
2617
- FUNCTION(rb_gsl_matrix,upper), 0);
2618
- rb_define_method(GSL_TYPE(cgsl_matrix), "lower",
2619
- FUNCTION(rb_gsl_matrix,lower), 0);
2620
- rb_define_method(GSL_TYPE(cgsl_matrix), "block",
2621
- FUNCTION(rb_gsl_matrix,block), 0);
2622
-
2623
- /***** Special matrices *****/
2624
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "pascal",
2625
- FUNCTION(rb_gsl_matrix,pascal1), 1);
2626
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "vandermonde",
2627
- FUNCTION(rb_gsl_matrix,vandermonde), 1);
2628
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "vander",
2629
- FUNCTION(rb_gsl_matrix,vandermonde), 1);
2630
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "toeplitz",
2631
- FUNCTION(rb_gsl_matrix,toeplitz), 1);
2632
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "circulant",
2633
- FUNCTION(rb_gsl_matrix,circulant), 1);
2634
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "indgen",
2635
- FUNCTION(rb_gsl_matrix,indgen_singleton), -1);
2636
- rb_define_method(GSL_TYPE(cgsl_matrix), "indgen",
2637
- FUNCTION(rb_gsl_matrix,indgen), -1);
2638
- rb_define_method(GSL_TYPE(cgsl_matrix), "indgen!",
2639
- FUNCTION(rb_gsl_matrix,indgen_bang), -1);
2640
-
2641
- rb_define_method(GSL_TYPE(cgsl_matrix), "info",
2642
- FUNCTION(rb_gsl_matrix,info), 0);
2643
- #ifdef BASE_DOUBLE
2644
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "hilbert",
2645
- FUNCTION(rb_gsl_matrix,hilbert), 1);
2646
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "hilb",
2647
- FUNCTION(rb_gsl_matrix,hilbert), 1);
2648
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "invhilbert",
2649
- FUNCTION(rb_gsl_matrix,invhilbert), 1);
2650
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "invhilb",
2651
- FUNCTION(rb_gsl_matrix,invhilbert), 1);
2652
- #endif
2653
-
2654
- rb_define_method(GSL_TYPE(cgsl_matrix), "any",
2655
- FUNCTION(rb_gsl_matrix,any), 0);
2656
- rb_define_method(GSL_TYPE(cgsl_matrix), "all",
2657
- FUNCTION(rb_gsl_matrix,all), 0);
2658
- rb_define_method(GSL_TYPE(cgsl_matrix), "rot90",
2659
- FUNCTION(rb_gsl_matrix,rot90), -1);
2660
-
2661
- rb_define_method(GSL_TYPE(cgsl_matrix), "diff",
2662
- FUNCTION(rb_gsl_matrix,diff), -1);
2663
- rb_define_method(GSL_TYPE(cgsl_matrix), "isnan", FUNCTION(rb_gsl_matrix,isnan), 0);
2664
- rb_define_method(GSL_TYPE(cgsl_matrix), "isinf", FUNCTION(rb_gsl_matrix,isinf), 0);
2665
- rb_define_method(GSL_TYPE(cgsl_matrix), "finite", FUNCTION(rb_gsl_matrix,finite), 0);
2666
-
2667
- rb_define_method(GSL_TYPE(cgsl_matrix), "sgn", FUNCTION(rb_gsl_matrix,sgn), 0);
2668
- rb_define_alias(GSL_TYPE(cgsl_matrix), "signum", "sgn");
2669
- rb_define_method(GSL_TYPE(cgsl_matrix), "abs", FUNCTION(rb_gsl_matrix,abs), 0);
2670
- rb_define_alias(GSL_TYPE(cgsl_matrix), "fabs", "abs");
2671
-
2672
- rb_define_method(GSL_TYPE(cgsl_matrix), "horzcat", FUNCTION(rb_gsl_matrix,horzcat), 1);
2673
- rb_define_alias(GSL_TYPE(cgsl_matrix), "cat", "horzcat");
2674
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "horzcat", FUNCTION(rb_gsl_matrix,horzcat_singleton), 2);
2675
-
2676
- rb_define_method(GSL_TYPE(cgsl_matrix), "vertcat", FUNCTION(rb_gsl_matrix,vertcat), 1);
2677
- rb_define_singleton_method(GSL_TYPE(cgsl_matrix), "vertcat", FUNCTION(rb_gsl_matrix,vertcat_singleton), 2);
2678
-
2679
- rb_define_method(GSL_TYPE(cgsl_matrix), "ispos", FUNCTION(rb_gsl_matrix,ispos), 0);
2680
- rb_define_method(GSL_TYPE(cgsl_matrix), "ispos?", FUNCTION(rb_gsl_matrix,ispos2), 0);
2681
- rb_define_method(GSL_TYPE(cgsl_matrix), "isneg", FUNCTION(rb_gsl_matrix,isneg), 0);
2682
- rb_define_method(GSL_TYPE(cgsl_matrix), "isneg?", FUNCTION(rb_gsl_matrix,isneg2), 0);
2683
-
2684
- rb_define_method(GSL_TYPE(cgsl_matrix), "isnonneg", FUNCTION(rb_gsl_matrix,isnonneg), 0);
2685
- rb_define_method(GSL_TYPE(cgsl_matrix), "isnonneg?", FUNCTION(rb_gsl_matrix,isnonneg2), 0);
2686
-
2687
- rb_define_method(GSL_TYPE(cgsl_matrix), "symmetrize", FUNCTION(rb_gsl_matrix,symmetrize), 0);
2688
- rb_define_method(GSL_TYPE(cgsl_matrix), "symmetrize!", FUNCTION(rb_gsl_matrix,symmetrize_bang), 0);
2689
- }
2690
-
2691
- #undef NUMCONV
2692
- #undef NUMCONV2
2693
- #undef PRINTF_FORMAT
2694
- #undef VEC_ROW_COL
2695
- #undef VEC_P
2696
- #undef C_TO_VALUE
2697
- #undef C_TO_VALUE2
2698
- #undef VEC_COL_P
2699
- #undef VEC_ROW_P
2700
- #undef CHECK_VEC
2701
- #undef VEC_VIEW_P
2702
-
2703
- #undef MAT_ROW_COL
2704
- #undef MAT_P
2705
- #undef MAT_COL_P
2706
- #undef MAT_ROW_P
2707
- #undef CHECK_MAT
2708
- #undef MAT_VIEW_P