gsl 1.15.3 → 1.16.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.travis.yml +24 -0
- data/AUTHORS +10 -2
- data/COPYING +341 -339
- data/ChangeLog +612 -554
- data/Gemfile +4 -0
- data/README.md +77 -0
- data/Rakefile +14 -93
- data/THANKS +1 -1
- data/examples/blas/blas.rb +1 -1
- data/examples/bspline.rb +3 -3
- data/examples/complex/functions.rb +4 -4
- data/examples/complex/mul.rb +1 -1
- data/examples/const/physconst.rb +4 -4
- data/examples/const/travel.rb +4 -4
- data/examples/eigen/nonsymmv.rb +1 -1
- data/examples/eigen/qhoscillator.rb +3 -3
- data/examples/fft/radix2.rb +1 -1
- data/examples/fft/real-halfcomplex.rb +3 -3
- data/examples/fft/real-halfcomplex2.rb +3 -3
- data/examples/fit/expfit.rb +1 -1
- data/examples/fit/multifit.rb +1 -1
- data/examples/fit/ndlinear.rb +44 -44
- data/examples/fit/nonlinearfit.rb +1 -1
- data/examples/fit/wlinear.rb +3 -3
- data/examples/function/function.rb +1 -1
- data/examples/function/min.rb +1 -1
- data/examples/function/synchrotron.rb +2 -2
- data/examples/gallery/koch.rb +1 -1
- data/examples/histogram/cauchy.rb +2 -2
- data/examples/histogram/exponential.rb +1 -1
- data/examples/histogram/histo3d.rb +1 -1
- data/examples/histogram/histogram-pdf.rb +2 -2
- data/examples/histogram/xexp.rb +1 -1
- data/examples/integration/ahmed.rb +2 -2
- data/examples/integration/cosmology.rb +7 -7
- data/examples/integration/friedmann.rb +4 -4
- data/examples/integration/qng.rb +1 -1
- data/examples/interp/demo.rb +2 -2
- data/examples/linalg/LQ_solve.rb +1 -1
- data/examples/linalg/LU.rb +1 -1
- data/examples/linalg/LU2.rb +1 -1
- data/examples/linalg/LU_narray.rb +1 -1
- data/examples/linalg/PTLQ.rb +1 -1
- data/examples/linalg/QRPT.rb +1 -1
- data/examples/linalg/chol.rb +1 -1
- data/examples/linalg/chol_narray.rb +1 -1
- data/examples/linalg/complex.rb +1 -1
- data/examples/math/elementary.rb +1 -1
- data/examples/math/functions.rb +1 -1
- data/examples/math/inf_nan.rb +1 -1
- data/examples/math/minmax.rb +1 -1
- data/examples/math/power.rb +1 -1
- data/examples/math/test.rb +1 -1
- data/examples/min.rb +1 -1
- data/examples/multimin/bundle.rb +1 -1
- data/examples/multimin/cqp.rb +17 -17
- data/examples/multiroot/fsolver3.rb +1 -1
- data/examples/odeiv/binarysystem.rb +12 -12
- data/examples/odeiv/demo.rb +3 -3
- data/examples/odeiv/frei1.rb +7 -7
- data/examples/odeiv/frei2.rb +4 -4
- data/examples/odeiv/oscillator.rb +1 -1
- data/examples/odeiv/sedov.rb +3 -3
- data/examples/odeiv/whitedwarf.rb +11 -11
- data/examples/permutation/ex1.rb +2 -2
- data/examples/permutation/permutation.rb +1 -1
- data/examples/poly/demo.rb +1 -1
- data/examples/random/diffusion.rb +1 -1
- data/examples/random/generator.rb +2 -2
- data/examples/random/randomwalk.rb +3 -3
- data/examples/random/rng.rb +1 -1
- data/examples/roots/bisection.rb +1 -1
- data/examples/roots/brent.rb +1 -1
- data/examples/roots/demo.rb +1 -1
- data/examples/roots/newton.rb +2 -2
- data/examples/roots/recombination.gp +0 -1
- data/examples/sf/hyperg.rb +1 -1
- data/examples/sf/sphbessel.rb +1 -1
- data/examples/sort/sort.rb +1 -1
- data/examples/tamu_anova.rb +4 -4
- data/examples/vector/add.rb +1 -1
- data/examples/vector/decimate.rb +1 -1
- data/examples/vector/gnuplot.rb +8 -8
- data/examples/vector/vector.rb +2 -2
- data/examples/wavelet/wavelet1.rb +1 -1
- data/ext/{alf.c → gsl_native/alf.c} +10 -10
- data/ext/{array.c → gsl_native/array.c} +70 -159
- data/ext/{array_complex.c → gsl_native/array_complex.c} +63 -66
- data/ext/{blas.c → gsl_native/blas.c} +2 -3
- data/ext/{blas1.c → gsl_native/blas1.c} +35 -36
- data/ext/{blas2.c → gsl_native/blas2.c} +57 -62
- data/ext/{blas3.c → gsl_native/blas3.c} +57 -58
- data/ext/{block.c → gsl_native/block.c} +14 -18
- data/ext/{block_source.c → gsl_native/block_source.h} +110 -112
- data/ext/gsl_native/bspline.c +122 -0
- data/ext/{bundle.c → gsl_native/bundle.c} +0 -0
- data/ext/{cdf.c → gsl_native/cdf.c} +79 -93
- data/ext/{cheb.c → gsl_native/cheb.c} +78 -89
- data/ext/{combination.c → gsl_native/combination.c} +11 -19
- data/ext/{common.c → gsl_native/common.c} +9 -41
- data/ext/{complex.c → gsl_native/complex.c} +116 -118
- data/ext/gsl_native/const.c +331 -0
- data/ext/{const_additional.c → gsl_native/const_additional.c} +13 -34
- data/ext/gsl_native/cqp.c +283 -0
- data/ext/{deriv.c → gsl_native/deriv.c} +25 -33
- data/ext/{dht.c → gsl_native/dht.c} +23 -31
- data/ext/{diff.c → gsl_native/diff.c} +26 -28
- data/ext/{dirac.c → gsl_native/dirac.c} +45 -46
- data/ext/{eigen.c → gsl_native/eigen.c} +1044 -1095
- data/ext/{error.c → gsl_native/error.c} +18 -18
- data/ext/gsl_native/extconf.rb +118 -0
- data/ext/{fft.c → gsl_native/fft.c} +197 -204
- data/ext/{fit.c → gsl_native/fit.c} +17 -18
- data/ext/gsl_native/fresnel.c +312 -0
- data/ext/{function.c → gsl_native/function.c} +37 -43
- data/ext/{geometry.c → gsl_native/geometry.c} +16 -16
- data/ext/{graph.c → gsl_native/graph.c} +39 -89
- data/ext/{gsl.c → gsl_native/gsl.c} +12 -33
- data/ext/{gsl_narray.c → gsl_native/gsl_narray.c} +20 -30
- data/ext/{histogram.c → gsl_native/histogram.c} +133 -160
- data/ext/{histogram2d.c → gsl_native/histogram2d.c} +78 -104
- data/ext/{histogram3d.c → gsl_native/histogram3d.c} +76 -76
- data/ext/{histogram3d_source.c → gsl_native/histogram3d_source.c} +196 -197
- data/ext/{histogram_find.c → gsl_native/histogram_find.c} +32 -34
- data/ext/{histogram_oper.c → gsl_native/histogram_oper.c} +43 -52
- data/ext/{ieee.c → gsl_native/ieee.c} +9 -21
- data/{include → ext/gsl_native/include}/rb_gsl.h +4 -26
- data/{include → ext/gsl_native/include}/rb_gsl_array.h +15 -39
- data/{include → ext/gsl_native/include}/rb_gsl_cheb.h +0 -2
- data/{include → ext/gsl_native/include}/rb_gsl_common.h +61 -61
- data/{include → ext/gsl_native/include}/rb_gsl_complex.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_const.h +0 -6
- data/ext/gsl_native/include/rb_gsl_dirac.h +6 -0
- data/{include → ext/gsl_native/include}/rb_gsl_eigen.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_fft.h +0 -13
- data/{include → ext/gsl_native/include}/rb_gsl_fit.h +0 -2
- data/{include → ext/gsl_native/include}/rb_gsl_function.h +0 -4
- data/{include → ext/gsl_native/include}/rb_gsl_graph.h +2 -4
- data/{include → ext/gsl_native/include}/rb_gsl_histogram.h +8 -8
- data/{include → ext/gsl_native/include}/rb_gsl_histogram3d.h +50 -50
- data/{include → ext/gsl_native/include}/rb_gsl_integration.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_interp.h +0 -5
- data/{include → ext/gsl_native/include}/rb_gsl_linalg.h +2 -6
- data/{include → ext/gsl_native/include}/rb_gsl_math.h +0 -6
- data/{include → ext/gsl_native/include}/rb_gsl_odeiv.h +0 -3
- data/{include → ext/gsl_native/include}/rb_gsl_poly.h +3 -7
- data/{include → ext/gsl_native/include}/rb_gsl_rational.h +1 -8
- data/{include → ext/gsl_native/include}/rb_gsl_rng.h +0 -1
- data/{include → ext/gsl_native/include}/rb_gsl_root.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_sf.h +39 -48
- data/{include → ext/gsl_native/include}/rb_gsl_statistics.h +1 -1
- data/{include → ext/gsl_native/include}/rb_gsl_tensor.h +0 -2
- data/{include → ext/gsl_native/include}/rb_gsl_with_narray.h +3 -1
- data/{include → ext/gsl_native/include}/templates_off.h +0 -0
- data/{include → ext/gsl_native/include}/templates_on.h +1 -1
- data/ext/{integration.c → gsl_native/integration.c} +164 -189
- data/ext/{interp.c → gsl_native/interp.c} +25 -38
- data/ext/gsl_native/jacobi.c +733 -0
- data/ext/{linalg.c → gsl_native/linalg.c} +462 -589
- data/ext/{linalg_complex.c → gsl_native/linalg_complex.c} +93 -106
- data/ext/{math.c → gsl_native/math.c} +48 -67
- data/ext/{matrix.c → gsl_native/matrix.c} +13 -16
- data/ext/{matrix_complex.c → gsl_native/matrix_complex.c} +119 -123
- data/ext/{matrix_double.c → gsl_native/matrix_double.c} +79 -82
- data/ext/{matrix_int.c → gsl_native/matrix_int.c} +53 -54
- data/ext/{matrix_source.c → gsl_native/matrix_source.h} +292 -318
- data/ext/{min.c → gsl_native/min.c} +45 -76
- data/ext/{monte.c → gsl_native/monte.c} +50 -64
- data/ext/{multifit.c → gsl_native/multifit.c} +142 -151
- data/ext/{multimin.c → gsl_native/multimin.c} +64 -92
- data/ext/{multimin_fsdf.c → gsl_native/multimin_fsdf.c} +16 -16
- data/ext/{multiroots.c → gsl_native/multiroots.c} +73 -76
- data/ext/{multiset.c → gsl_native/multiset.c} +4 -8
- data/ext/{ndlinear.c → gsl_native/ndlinear.c} +320 -321
- data/ext/{nmf.c → gsl_native/nmf.c} +11 -11
- data/ext/{nmf_wrap.c → gsl_native/nmf_wrap.c} +1 -1
- data/ext/{ntuple.c → gsl_native/ntuple.c} +23 -23
- data/ext/{odeiv.c → gsl_native/odeiv.c} +101 -116
- data/ext/gsl_native/ool.c +879 -0
- data/ext/{permutation.c → gsl_native/permutation.c} +39 -37
- data/ext/{poly.c → gsl_native/poly.c} +10 -13
- data/ext/{poly2.c → gsl_native/poly2.c} +16 -16
- data/ext/{poly_source.c → gsl_native/poly_source.h} +249 -293
- data/ext/{qrng.c → gsl_native/qrng.c} +9 -20
- data/ext/{randist.c → gsl_native/randist.c} +222 -247
- data/ext/{rational.c → gsl_native/rational.c} +12 -12
- data/ext/{rng.c → gsl_native/rng.c} +30 -47
- data/ext/{root.c → gsl_native/root.c} +47 -48
- data/ext/{sf.c → gsl_native/sf.c} +196 -244
- data/ext/{sf_airy.c → gsl_native/sf_airy.c} +2 -2
- data/ext/{sf_bessel.c → gsl_native/sf_bessel.c} +7 -7
- data/ext/{sf_clausen.c → gsl_native/sf_clausen.c} +1 -1
- data/ext/{sf_coulomb.c → gsl_native/sf_coulomb.c} +40 -40
- data/ext/{sf_coupling.c → gsl_native/sf_coupling.c} +30 -30
- data/ext/{sf_dawson.c → gsl_native/sf_dawson.c} +1 -1
- data/ext/{sf_debye.c → gsl_native/sf_debye.c} +1 -10
- data/ext/{sf_dilog.c → gsl_native/sf_dilog.c} +1 -1
- data/ext/{sf_elementary.c → gsl_native/sf_elementary.c} +3 -3
- data/ext/{sf_ellint.c → gsl_native/sf_ellint.c} +43 -43
- data/ext/{sf_elljac.c → gsl_native/sf_elljac.c} +3 -3
- data/ext/{sf_erfc.c → gsl_native/sf_erfc.c} +1 -5
- data/ext/{sf_exp.c → gsl_native/sf_exp.c} +3 -3
- data/ext/{sf_expint.c → gsl_native/sf_expint.c} +2 -12
- data/ext/{sf_fermi_dirac.c → gsl_native/sf_fermi_dirac.c} +1 -1
- data/ext/{sf_gamma.c → gsl_native/sf_gamma.c} +2 -6
- data/ext/{sf_gegenbauer.c → gsl_native/sf_gegenbauer.c} +1 -1
- data/ext/{sf_hyperg.c → gsl_native/sf_hyperg.c} +1 -1
- data/ext/{sf_laguerre.c → gsl_native/sf_laguerre.c} +4 -4
- data/ext/{sf_lambert.c → gsl_native/sf_lambert.c} +1 -1
- data/ext/{sf_legendre.c → gsl_native/sf_legendre.c} +1 -1
- data/ext/{sf_log.c → gsl_native/sf_log.c} +4 -4
- data/ext/gsl_native/sf_mathieu.c +235 -0
- data/ext/{sf_power.c → gsl_native/sf_power.c} +1 -1
- data/ext/{sf_psi.c → gsl_native/sf_psi.c} +3 -12
- data/ext/{sf_synchrotron.c → gsl_native/sf_synchrotron.c} +1 -1
- data/ext/{sf_transport.c → gsl_native/sf_transport.c} +1 -1
- data/ext/{sf_trigonometric.c → gsl_native/sf_trigonometric.c} +4 -4
- data/ext/{sf_zeta.c → gsl_native/sf_zeta.c} +1 -5
- data/ext/{signal.c → gsl_native/signal.c} +63 -68
- data/ext/{siman.c → gsl_native/siman.c} +45 -49
- data/ext/{sort.c → gsl_native/sort.c} +6 -7
- data/ext/{spline.c → gsl_native/spline.c} +28 -46
- data/ext/{stats.c → gsl_native/stats.c} +105 -118
- data/ext/{sum.c → gsl_native/sum.c} +34 -34
- data/ext/{tamu_anova.c → gsl_native/tamu_anova.c} +1 -1
- data/ext/{tensor.c → gsl_native/tensor.c} +8 -11
- data/ext/{tensor_source.c → gsl_native/tensor_source.h} +147 -148
- data/ext/{vector.c → gsl_native/vector.c} +11 -14
- data/ext/{vector_complex.c → gsl_native/vector_complex.c} +179 -184
- data/ext/{vector_double.c → gsl_native/vector_double.c} +178 -183
- data/ext/{vector_int.c → gsl_native/vector_int.c} +27 -29
- data/ext/{vector_source.c → gsl_native/vector_source.h} +428 -443
- data/ext/{wavelet.c → gsl_native/wavelet.c} +224 -246
- data/gsl.gemspec +29 -0
- data/lib/gsl.rb +8 -3
- data/lib/gsl/gnuplot.rb +3 -3
- data/lib/gsl/oper.rb +35 -60
- data/lib/gsl/version.rb +3 -0
- data/lib/rbgsl.rb +1 -3
- data/rdoc/alf.rdoc +5 -5
- data/rdoc/blas.rdoc +9 -9
- data/rdoc/bspline.rdoc +17 -17
- data/rdoc/changes.rdoc +4 -9
- data/rdoc/cheb.rdoc +25 -25
- data/rdoc/cholesky_complex.rdoc +21 -21
- data/rdoc/combi.rdoc +37 -37
- data/rdoc/complex.rdoc +22 -22
- data/rdoc/const.rdoc +47 -47
- data/rdoc/dht.rdoc +49 -49
- data/rdoc/diff.rdoc +42 -42
- data/rdoc/ehandling.rdoc +6 -6
- data/rdoc/eigen.rdoc +153 -153
- data/rdoc/fft.rdoc +146 -146
- data/rdoc/fit.rdoc +109 -109
- data/rdoc/function.rdoc +11 -11
- data/rdoc/graph.rdoc +17 -17
- data/rdoc/hist.rdoc +103 -103
- data/rdoc/hist2d.rdoc +42 -42
- data/rdoc/hist3d.rdoc +9 -9
- data/rdoc/integration.rdoc +110 -110
- data/rdoc/interp.rdoc +71 -71
- data/rdoc/intro.rdoc +8 -8
- data/rdoc/linalg.rdoc +188 -188
- data/rdoc/linalg_complex.rdoc +1 -1
- data/rdoc/math.rdoc +58 -58
- data/rdoc/matrix.rdoc +275 -275
- data/rdoc/min.rdoc +57 -57
- data/rdoc/monte.rdoc +22 -22
- data/rdoc/multimin.rdoc +95 -95
- data/rdoc/multiroot.rdoc +80 -80
- data/rdoc/narray.rdoc +32 -32
- data/rdoc/ndlinear.rdoc +54 -54
- data/rdoc/nonlinearfit.rdoc +100 -100
- data/rdoc/ntuple.rdoc +31 -31
- data/rdoc/odeiv.rdoc +88 -88
- data/rdoc/perm.rdoc +90 -90
- data/rdoc/poly.rdoc +66 -66
- data/rdoc/qrng.rdoc +21 -21
- data/rdoc/randist.rdoc +82 -82
- data/rdoc/ref.rdoc +57 -57
- data/rdoc/rng.rdoc +85 -85
- data/rdoc/roots.rdoc +57 -57
- data/rdoc/sf.rdoc +428 -428
- data/rdoc/siman.rdoc +19 -19
- data/rdoc/sort.rdoc +30 -30
- data/rdoc/start.rdoc +8 -8
- data/rdoc/stats.rdoc +52 -52
- data/rdoc/sum.rdoc +12 -12
- data/rdoc/tensor.rdoc +31 -31
- data/rdoc/tut.rdoc +1 -1
- data/rdoc/use.rdoc +39 -39
- data/rdoc/vector.rdoc +188 -188
- data/rdoc/vector_complex.rdoc +24 -24
- data/rdoc/wavelet.rdoc +46 -46
- data/test/gsl/blas_test.rb +79 -0
- data/test/gsl/bspline_test.rb +63 -0
- data/test/gsl/cdf_test.rb +1512 -0
- data/test/gsl/cheb_test.rb +80 -0
- data/test/gsl/combination_test.rb +100 -0
- data/test/gsl/complex_test.rb +20 -0
- data/test/gsl/const_test.rb +29 -0
- data/test/gsl/deriv_test.rb +62 -0
- data/test/gsl/dht_test.rb +79 -0
- data/test/gsl/diff_test.rb +53 -0
- data/test/gsl/eigen_test.rb +563 -0
- data/test/gsl/err_test.rb +23 -0
- data/test/gsl/fit_test.rb +101 -0
- data/test/gsl/histo_test.rb +14 -0
- data/test/gsl/index_test.rb +61 -0
- data/test/gsl/integration_test.rb +274 -0
- data/test/gsl/interp_test.rb +27 -0
- data/test/gsl/linalg_test.rb +463 -0
- data/test/gsl/matrix_nmf_test.rb +37 -0
- data/test/gsl/matrix_test.rb +98 -0
- data/test/gsl/min_test.rb +89 -0
- data/test/gsl/monte_test.rb +77 -0
- data/test/gsl/multifit_test.rb +753 -0
- data/test/gsl/multimin_test.rb +157 -0
- data/test/gsl/multiroot_test.rb +135 -0
- data/test/gsl/multiset_test.rb +52 -0
- data/test/gsl/odeiv_test.rb +275 -0
- data/test/gsl/oper_test.rb +98 -0
- data/test/gsl/poly_test.rb +338 -0
- data/test/gsl/qrng_test.rb +94 -0
- data/test/gsl/quartic_test.rb +28 -0
- data/test/gsl/randist_test.rb +122 -0
- data/test/gsl/rng_test.rb +303 -0
- data/test/gsl/roots_test.rb +78 -0
- data/test/gsl/sf_test.rb +2079 -0
- data/test/gsl/stats_test.rb +122 -0
- data/test/gsl/sum_test.rb +69 -0
- data/test/gsl/tensor_test.rb +396 -0
- data/test/gsl/vector_test.rb +223 -0
- data/test/gsl/wavelet_test.rb +130 -0
- data/test/gsl_test.rb +321 -0
- data/test/test_helper.rb +42 -0
- data/uncrustify.cfg +1693 -0
- metadata +337 -378
- data/README +0 -32
- data/VERSION +0 -1
- data/ext/bspline.c +0 -130
- data/ext/const.c +0 -673
- data/ext/cqp.c +0 -283
- data/ext/extconf.rb +0 -295
- data/ext/fcmp.c +0 -66
- data/ext/fresnel.c +0 -312
- data/ext/jacobi.c +0 -739
- data/ext/ool.c +0 -879
- data/ext/oper_complex_source.c +0 -253
- data/ext/sf_mathieu.c +0 -238
- data/include/rb_gsl_config.h +0 -62
- data/include/rb_gsl_dirac.h +0 -13
- data/rdoc/index.rdoc +0 -62
- data/rdoc/rngextra.rdoc +0 -11
- data/rdoc/screenshot.rdoc +0 -40
- data/setup.rb +0 -1585
- data/tests/blas/amax.rb +0 -14
- data/tests/blas/asum.rb +0 -16
- data/tests/blas/axpy.rb +0 -25
- data/tests/blas/copy.rb +0 -23
- data/tests/blas/dot.rb +0 -23
- data/tests/bspline.rb +0 -53
- data/tests/cdf.rb +0 -1388
- data/tests/cheb.rb +0 -112
- data/tests/combination.rb +0 -123
- data/tests/complex.rb +0 -17
- data/tests/const.rb +0 -24
- data/tests/deriv.rb +0 -85
- data/tests/dht/dht1.rb +0 -17
- data/tests/dht/dht2.rb +0 -23
- data/tests/dht/dht3.rb +0 -23
- data/tests/dht/dht4.rb +0 -23
- data/tests/diff.rb +0 -78
- data/tests/eigen/eigen.rb +0 -220
- data/tests/eigen/gen.rb +0 -105
- data/tests/eigen/genherm.rb +0 -66
- data/tests/eigen/gensymm.rb +0 -68
- data/tests/eigen/nonsymm.rb +0 -53
- data/tests/eigen/nonsymmv.rb +0 -53
- data/tests/eigen/symm-herm.rb +0 -74
- data/tests/err.rb +0 -58
- data/tests/fit.rb +0 -124
- data/tests/gsl_test.rb +0 -118
- data/tests/gsl_test2.rb +0 -110
- data/tests/histo.rb +0 -12
- data/tests/integration/integration1.rb +0 -72
- data/tests/integration/integration2.rb +0 -71
- data/tests/integration/integration3.rb +0 -71
- data/tests/integration/integration4.rb +0 -71
- data/tests/interp.rb +0 -45
- data/tests/linalg/HH.rb +0 -64
- data/tests/linalg/LU.rb +0 -47
- data/tests/linalg/QR.rb +0 -77
- data/tests/linalg/SV.rb +0 -24
- data/tests/linalg/TDN.rb +0 -116
- data/tests/linalg/TDS.rb +0 -122
- data/tests/linalg/bidiag.rb +0 -73
- data/tests/linalg/cholesky.rb +0 -20
- data/tests/linalg/linalg.rb +0 -158
- data/tests/matrix/matrix_complex_test.rb +0 -36
- data/tests/matrix/matrix_nmf_test.rb +0 -39
- data/tests/matrix/matrix_test.rb +0 -48
- data/tests/min.rb +0 -99
- data/tests/monte/miser.rb +0 -31
- data/tests/monte/vegas.rb +0 -45
- data/tests/multifit/test_2dgauss.rb +0 -112
- data/tests/multifit/test_brown.rb +0 -90
- data/tests/multifit/test_enso.rb +0 -246
- data/tests/multifit/test_filip.rb +0 -155
- data/tests/multifit/test_gauss.rb +0 -97
- data/tests/multifit/test_longley.rb +0 -110
- data/tests/multifit/test_multifit.rb +0 -52
- data/tests/multimin.rb +0 -139
- data/tests/multiroot.rb +0 -131
- data/tests/multiset.rb +0 -52
- data/tests/narray/blas_dnrm2.rb +0 -20
- data/tests/odeiv.rb +0 -353
- data/tests/poly/poly.rb +0 -290
- data/tests/poly/special.rb +0 -65
- data/tests/qrng.rb +0 -131
- data/tests/quartic.rb +0 -29
- data/tests/randist.rb +0 -134
- data/tests/rng.rb +0 -305
- data/tests/roots.rb +0 -76
- data/tests/run-test.sh +0 -17
- data/tests/sf/gsl_test_sf.rb +0 -249
- data/tests/sf/test_airy.rb +0 -83
- data/tests/sf/test_bessel.rb +0 -306
- data/tests/sf/test_coulomb.rb +0 -17
- data/tests/sf/test_dilog.rb +0 -25
- data/tests/sf/test_gamma.rb +0 -209
- data/tests/sf/test_hyperg.rb +0 -356
- data/tests/sf/test_legendre.rb +0 -227
- data/tests/sf/test_mathieu.rb +0 -59
- data/tests/sf/test_mode.rb +0 -19
- data/tests/sf/test_sf.rb +0 -839
- data/tests/stats.rb +0 -174
- data/tests/stats_mt.rb +0 -16
- data/tests/sum.rb +0 -98
- data/tests/sys.rb +0 -323
- data/tests/tensor.rb +0 -419
- data/tests/vector/vector_complex_test.rb +0 -101
- data/tests/vector/vector_test.rb +0 -141
- data/tests/wavelet.rb +0 -142
@@ -9,11 +9,10 @@
|
|
9
9
|
WITHOUT ANY WARRANTY.
|
10
10
|
*/
|
11
11
|
|
12
|
-
#include "rb_gsl_config.h"
|
13
12
|
#include <gsl/gsl_math.h>
|
14
|
-
#include "rb_gsl_array.h"
|
15
|
-
#include "rb_gsl_common.h"
|
16
|
-
#include "rb_gsl_linalg.h"
|
13
|
+
#include "include/rb_gsl_array.h"
|
14
|
+
#include "include/rb_gsl_common.h"
|
15
|
+
#include "include/rb_gsl_linalg.h"
|
17
16
|
|
18
17
|
static VALUE cgsl_matrix_LU;
|
19
18
|
static VALUE cgsl_matrix_QR;
|
@@ -39,7 +38,40 @@ enum {
|
|
39
38
|
|
40
39
|
#ifdef HAVE_NARRAY_H
|
41
40
|
static VALUE rb_gsl_linalg_LU_decomp_narray(int argc, VALUE *argv, VALUE obj,
|
42
|
-
|
41
|
+
int flag)
|
42
|
+
{
|
43
|
+
struct NARRAY *na, *na2;
|
44
|
+
VALUE m;
|
45
|
+
gsl_matrix_view mv;
|
46
|
+
gsl_permutation *p;
|
47
|
+
int signum;
|
48
|
+
|
49
|
+
if (argc != 1)
|
50
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
|
51
|
+
GetNArray(argv[0], na);
|
52
|
+
if (na->rank < 2) rb_raise(rb_eRuntimeError, "rank >= 2 required");
|
53
|
+
if (na->shape[0] != na->shape[1])
|
54
|
+
rb_raise(rb_eRuntimeError, "square matrix required");
|
55
|
+
if (flag == LINALG_DECOMP) {
|
56
|
+
m = na_make_object(NA_DFLOAT, 2, na->shape, CLASS_OF(argv[0]));
|
57
|
+
GetNArray(m, na2);
|
58
|
+
memcpy((double*)na2->ptr, (double*)na->ptr, sizeof(double)*na2->total);
|
59
|
+
mv = gsl_matrix_view_array((double*)na2->ptr, na->shape[1], na->shape[0]);
|
60
|
+
} else {
|
61
|
+
mv = gsl_matrix_view_array((double*)na->ptr, na->shape[1], na->shape[0]);
|
62
|
+
}
|
63
|
+
p = gsl_permutation_alloc(mv.matrix.size1);
|
64
|
+
gsl_linalg_LU_decomp(&mv.matrix, p, &signum);
|
65
|
+
if (flag == LINALG_DECOMP) {
|
66
|
+
return rb_ary_new3(3, m,
|
67
|
+
Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p),
|
68
|
+
INT2FIX(signum));
|
69
|
+
} else {
|
70
|
+
return rb_ary_new3(3, argv[0],
|
71
|
+
Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p),
|
72
|
+
INT2FIX(signum));
|
73
|
+
}
|
74
|
+
}
|
43
75
|
#endif
|
44
76
|
|
45
77
|
static VALUE rb_gsl_linalg_LU_decomposition(int argc, VALUE *argv, VALUE obj, int flag)
|
@@ -52,7 +84,7 @@ static VALUE rb_gsl_linalg_LU_decomposition(int argc, VALUE *argv, VALUE obj, in
|
|
52
84
|
switch (TYPE(obj)) {
|
53
85
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
54
86
|
#ifdef HAVE_NARRAY_H
|
55
|
-
if (NA_IsNArray(argv[0]))
|
87
|
+
if (NA_IsNArray(argv[0]))
|
56
88
|
return rb_gsl_linalg_LU_decomp_narray(argc, argv, obj, flag);
|
57
89
|
#endif
|
58
90
|
if (MATRIX_COMPLEX_P(argv[0]))
|
@@ -71,7 +103,7 @@ static VALUE rb_gsl_linalg_LU_decomposition(int argc, VALUE *argv, VALUE obj, in
|
|
71
103
|
Data_Get_Struct(omatrix, gsl_matrix, mtmp);
|
72
104
|
if (flag == LINALG_DECOMP_BANG) {
|
73
105
|
m = mtmp;
|
74
|
-
|
106
|
+
RBGSL_SET_CLASS(omatrix, cgsl_matrix_LU);
|
75
107
|
objm = omatrix;
|
76
108
|
} else {
|
77
109
|
m = make_matrix_clone(mtmp);
|
@@ -110,45 +142,6 @@ static VALUE rb_gsl_linalg_LU_decomp_bang(int argc, VALUE *argv, VALUE obj)
|
|
110
142
|
return rb_gsl_linalg_LU_decomposition(argc, argv, obj, LINALG_DECOMP_BANG);
|
111
143
|
}
|
112
144
|
|
113
|
-
#ifdef HAVE_NARRAY_H
|
114
|
-
static VALUE rb_gsl_linalg_LU_decomp_narray(int argc, VALUE *argv, VALUE obj,
|
115
|
-
int flag)
|
116
|
-
{
|
117
|
-
struct NARRAY *na, *na2;
|
118
|
-
VALUE m;
|
119
|
-
gsl_matrix_view mv;
|
120
|
-
gsl_permutation *p;
|
121
|
-
int signum;
|
122
|
-
|
123
|
-
if (argc != 1)
|
124
|
-
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
|
125
|
-
GetNArray(argv[0], na);
|
126
|
-
if (na->rank < 2) rb_raise(rb_eRuntimeError, "rank >= 2 required");
|
127
|
-
if (na->shape[0] != na->shape[1])
|
128
|
-
rb_raise(rb_eRuntimeError, "square matrix required");
|
129
|
-
if (flag == LINALG_DECOMP) {
|
130
|
-
m = na_make_object(NA_DFLOAT, 2, na->shape, CLASS_OF(argv[0]));
|
131
|
-
GetNArray(m, na2);
|
132
|
-
memcpy((double*)na2->ptr, (double*)na->ptr, sizeof(double)*na2->total);
|
133
|
-
mv = gsl_matrix_view_array((double*)na2->ptr, na->shape[1], na->shape[0]);
|
134
|
-
} else {
|
135
|
-
mv = gsl_matrix_view_array((double*)na->ptr, na->shape[1], na->shape[0]);
|
136
|
-
}
|
137
|
-
p = gsl_permutation_alloc(mv.matrix.size1);
|
138
|
-
gsl_linalg_LU_decomp(&mv.matrix, p, &signum);
|
139
|
-
if (flag == LINALG_DECOMP) {
|
140
|
-
return rb_ary_new3(3, m,
|
141
|
-
Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p),
|
142
|
-
INT2FIX(signum));
|
143
|
-
} else {
|
144
|
-
return rb_ary_new3(3, argv[0],
|
145
|
-
Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p),
|
146
|
-
INT2FIX(signum));
|
147
|
-
}
|
148
|
-
|
149
|
-
}
|
150
|
-
#endif
|
151
|
-
|
152
145
|
static gsl_matrix* get_matrix(VALUE obj, VALUE klass,int *flagm);
|
153
146
|
static gsl_permutation* get_permutation(VALUE obj, size_t size, int *flagp);
|
154
147
|
static gsl_vector* get_vector2(VALUE obj, int *flagv);
|
@@ -156,15 +149,13 @@ static gsl_vector* get_vector2(VALUE obj, int *flagv);
|
|
156
149
|
static gsl_matrix* get_matrix(VALUE obj, VALUE klass, int *flagm)
|
157
150
|
{
|
158
151
|
gsl_matrix *mtmp = NULL, *m = NULL;
|
159
|
-
#ifdef HAVE_NARRAY_H
|
160
|
-
gsl_matrix_view mv;
|
161
|
-
struct NARRAY *na;
|
162
|
-
#endif
|
163
152
|
if (CLASS_OF(obj) == klass) {
|
164
153
|
Data_Get_Struct(obj, gsl_matrix, m);
|
165
154
|
*flagm = 0;
|
166
155
|
#ifdef HAVE_NARRAY_H
|
167
156
|
} else if (NA_IsNArray(obj)) {
|
157
|
+
gsl_matrix_view mv;
|
158
|
+
struct NARRAY *na;
|
168
159
|
GetNArray(obj, na);
|
169
160
|
mv = gsl_matrix_view_array((double*)na->ptr, na->shape[1], na->shape[0]);
|
170
161
|
m = &mv.matrix;
|
@@ -195,15 +186,13 @@ static gsl_permutation* get_permutation(VALUE obj, size_t size, int *flagp)
|
|
195
186
|
static gsl_vector* get_vector2(VALUE obj, int *flagv)
|
196
187
|
{
|
197
188
|
gsl_vector *v = NULL;
|
198
|
-
#ifdef HAVE_NARRAY_H
|
199
|
-
gsl_vector_view vv;
|
200
|
-
struct NARRAY *na;
|
201
|
-
#endif
|
202
189
|
if (TYPE(obj) == T_ARRAY) {
|
203
190
|
v = make_cvector_from_rarray(obj);
|
204
191
|
*flagv = 1;
|
205
192
|
#ifdef HAVE_NARRAY_H
|
206
193
|
} else if (NA_IsNArray(obj)) {
|
194
|
+
gsl_vector_view vv;
|
195
|
+
struct NARRAY *na;
|
207
196
|
GetNArray(obj, na);
|
208
197
|
vv = gsl_vector_view_array((double*) na->ptr, na->total);
|
209
198
|
v = &vv.vector;
|
@@ -218,7 +207,36 @@ static gsl_vector* get_vector2(VALUE obj, int *flagv)
|
|
218
207
|
}
|
219
208
|
|
220
209
|
#ifdef HAVE_NARRAY_H
|
221
|
-
static VALUE rb_gsl_linalg_LU_solve_narray(int argc, VALUE *argv, VALUE obj)
|
210
|
+
static VALUE rb_gsl_linalg_LU_solve_narray(int argc, VALUE *argv, VALUE obj)
|
211
|
+
{
|
212
|
+
struct NARRAY *na, *b;
|
213
|
+
VALUE ret;
|
214
|
+
gsl_permutation *p;
|
215
|
+
gsl_matrix_view mv;
|
216
|
+
gsl_vector_view bv, xv;
|
217
|
+
double *x;
|
218
|
+
int shape[1];
|
219
|
+
if (argc < 3)
|
220
|
+
rb_raise(rb_eArgError,
|
221
|
+
"wrong number of arguments %d(NArray, GSL::Permutation and NArray expected",
|
222
|
+
argc);
|
223
|
+
GetNArray(argv[0], na);
|
224
|
+
mv = gsl_matrix_view_array((double*) na->ptr, na->shape[1], na->shape[0]);
|
225
|
+
CHECK_PERMUTATION(argv[1]);
|
226
|
+
Data_Get_Struct(argv[1], gsl_permutation, p);
|
227
|
+
GetNArray(argv[2], b);
|
228
|
+
bv = gsl_vector_view_array((double*) b->ptr, b->total);
|
229
|
+
if (argc == 3) {
|
230
|
+
shape[0] = b->total;
|
231
|
+
ret = na_make_object(NA_DFLOAT, 1, shape, CLASS_OF(argv[0]));
|
232
|
+
} else {
|
233
|
+
ret = argv[3];
|
234
|
+
}
|
235
|
+
x = NA_PTR_TYPE(ret,double*);
|
236
|
+
xv = gsl_vector_view_array(x, b->total);
|
237
|
+
gsl_linalg_LU_solve(&mv.matrix, p, &bv.vector, &xv.vector);
|
238
|
+
return ret;
|
239
|
+
}
|
222
240
|
#endif
|
223
241
|
|
224
242
|
VALUE rb_gsl_linalg_LU_solve(int argc, VALUE *argv, VALUE obj)
|
@@ -231,19 +249,18 @@ VALUE rb_gsl_linalg_LU_solve(int argc, VALUE *argv, VALUE obj)
|
|
231
249
|
VALUE bb;
|
232
250
|
switch (TYPE(obj)) {
|
233
251
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
234
|
-
if (argc < 2 || argc > 4)
|
252
|
+
if (argc < 2 || argc > 4)
|
235
253
|
rb_raise(rb_eArgError, "Usage: solve(m, b), solve(m, b, x), solve(lu, p, b), solve(lu, p, b, x)");
|
236
254
|
#ifdef HAVE_NARRAY_H
|
237
|
-
if (NA_IsNArray(argv[0]))
|
255
|
+
if (NA_IsNArray(argv[0]))
|
238
256
|
return rb_gsl_linalg_LU_solve_narray(argc, argv, obj);
|
239
257
|
#endif
|
240
258
|
m = get_matrix(argv[0], cgsl_matrix_LU, &flagm);
|
241
259
|
itmp = 1;
|
242
260
|
break;
|
243
261
|
default:
|
244
|
-
if (argc < 1 || argc > 3)
|
262
|
+
if (argc < 1 || argc > 3)
|
245
263
|
rb_raise(rb_eArgError, "Usage: LU_solve(b), LU_solve(p, b), LU_solve(b, x), solve(p, b, x)");
|
246
|
-
|
247
264
|
m = get_matrix(obj, cgsl_matrix_LU, &flagm);
|
248
265
|
itmp = 0;
|
249
266
|
break;
|
@@ -253,7 +270,6 @@ VALUE rb_gsl_linalg_LU_solve(int argc, VALUE *argv, VALUE obj)
|
|
253
270
|
p = get_permutation(argv[itmp], size, &flagp);
|
254
271
|
if (flagp == 1 && flagm == 0) rb_raise(rb_eArgError, "permutation must be given");
|
255
272
|
if (flagp == 0) itmp++;
|
256
|
-
|
257
273
|
bb = argv[itmp];
|
258
274
|
b = get_vector2(argv[itmp], &flagb);
|
259
275
|
itmp++;
|
@@ -275,42 +291,27 @@ VALUE rb_gsl_linalg_LU_solve(int argc, VALUE *argv, VALUE obj)
|
|
275
291
|
}
|
276
292
|
|
277
293
|
#ifdef HAVE_NARRAY_H
|
278
|
-
static VALUE
|
294
|
+
static VALUE rb_gsl_linalg_LU_svx_narray(int argc, VALUE *argv, VALUE obj)
|
279
295
|
{
|
280
296
|
struct NARRAY *na, *b;
|
281
|
-
VALUE ret;
|
282
297
|
gsl_permutation *p;
|
283
298
|
gsl_matrix_view mv;
|
284
|
-
gsl_vector_view bv
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
"wrong number of arguments %d(NArray, GSL::Permutation and NArray expected",
|
290
|
-
argc);
|
299
|
+
gsl_vector_view bv;
|
300
|
+
if (argc != 3)
|
301
|
+
rb_raise(rb_eArgError,
|
302
|
+
"wrong number of arguments %d(NArray, GSL::Permutation and NArray expected",
|
303
|
+
argc);
|
291
304
|
GetNArray(argv[0], na);
|
292
305
|
mv = gsl_matrix_view_array((double*) na->ptr, na->shape[1], na->shape[0]);
|
293
306
|
CHECK_PERMUTATION(argv[1]);
|
294
307
|
Data_Get_Struct(argv[1], gsl_permutation, p);
|
295
308
|
GetNArray(argv[2], b);
|
296
309
|
bv = gsl_vector_view_array((double*) b->ptr, b->total);
|
297
|
-
|
298
|
-
|
299
|
-
ret = na_make_object(NA_DFLOAT, 1, shape, CLASS_OF(argv[0]));
|
300
|
-
} else {
|
301
|
-
ret = argv[3];
|
302
|
-
}
|
303
|
-
x = NA_PTR_TYPE(ret,double*);
|
304
|
-
xv = gsl_vector_view_array(x, b->total);
|
305
|
-
gsl_linalg_LU_solve(&mv.matrix, p, &bv.vector, &xv.vector);
|
306
|
-
return ret;
|
310
|
+
gsl_linalg_LU_svx(&mv.matrix, p, &bv.vector);
|
311
|
+
return argv[2];
|
307
312
|
}
|
308
313
|
#endif
|
309
314
|
|
310
|
-
#ifdef HAVE_NARRAY_H
|
311
|
-
static VALUE rb_gsl_linalg_LU_svx_narray(int argc, VALUE *argv, VALUE obj);
|
312
|
-
#endif
|
313
|
-
|
314
315
|
/* bb must be Vector, it is replaced by the root of the system */
|
315
316
|
static VALUE rb_gsl_linalg_LU_svx(int argc, VALUE *argv, VALUE obj)
|
316
317
|
{
|
@@ -322,18 +323,18 @@ static VALUE rb_gsl_linalg_LU_svx(int argc, VALUE *argv, VALUE obj)
|
|
322
323
|
|
323
324
|
switch (TYPE(obj)) {
|
324
325
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
325
|
-
if (argc < 2 || argc > 3)
|
326
|
+
if (argc < 2 || argc > 3)
|
326
327
|
rb_raise(rb_eArgError, "Usage: svx(m, b), svx(lu, p, b)");
|
327
328
|
#ifdef HAVE_NARRAY_H
|
328
|
-
|
329
|
-
|
329
|
+
if (NA_IsNArray(argv[0]))
|
330
|
+
return rb_gsl_linalg_LU_svx_narray(argc, argv, obj);
|
330
331
|
#endif
|
331
332
|
m = get_matrix(argv[0], cgsl_matrix_LU, &flagm);
|
332
333
|
itmp = 1;
|
333
334
|
break;
|
334
335
|
default:
|
335
|
-
|
336
|
-
|
336
|
+
if (argc < 1 || argc > 2)
|
337
|
+
rb_raise(rb_eArgError, "Usage: LU_svx(b), LU_svx(p, b)");
|
337
338
|
m = get_matrix(obj, cgsl_matrix_LU, &flagm);
|
338
339
|
itmp = 0;
|
339
340
|
break;
|
@@ -351,32 +352,10 @@ static VALUE rb_gsl_linalg_LU_svx(int argc, VALUE *argv, VALUE obj)
|
|
351
352
|
return argv[itmp];
|
352
353
|
}
|
353
354
|
|
354
|
-
#ifdef HAVE_NARRAY_H
|
355
|
-
static VALUE rb_gsl_linalg_LU_svx_narray(int argc, VALUE *argv, VALUE obj)
|
356
|
-
{
|
357
|
-
struct NARRAY *na, *b;
|
358
|
-
gsl_permutation *p;
|
359
|
-
gsl_matrix_view mv;
|
360
|
-
gsl_vector_view bv;
|
361
|
-
if (argc != 3)
|
362
|
-
rb_raise(rb_eArgError,
|
363
|
-
"wrong number of arguments %d(NArray, GSL::Permutation and NArray expected",
|
364
|
-
argc);
|
365
|
-
GetNArray(argv[0], na);
|
366
|
-
mv = gsl_matrix_view_array((double*) na->ptr, na->shape[1], na->shape[0]);
|
367
|
-
CHECK_PERMUTATION(argv[1]);
|
368
|
-
Data_Get_Struct(argv[1], gsl_permutation, p);
|
369
|
-
GetNArray(argv[2], b);
|
370
|
-
bv = gsl_vector_view_array((double*) b->ptr, b->total);
|
371
|
-
gsl_linalg_LU_svx(&mv.matrix, p, &bv.vector);
|
372
|
-
return argv[2];
|
373
|
-
}
|
374
|
-
#endif
|
375
|
-
|
376
355
|
/* singleton */
|
377
356
|
static VALUE rb_gsl_linalg_LU_refine(VALUE obj, VALUE vm,
|
378
|
-
|
379
|
-
|
357
|
+
VALUE lu, VALUE pp, VALUE bb,
|
358
|
+
VALUE xx)
|
380
359
|
{
|
381
360
|
gsl_matrix *m = NULL, *mlu = NULL;
|
382
361
|
gsl_permutation *p = NULL;
|
@@ -403,59 +382,6 @@ static VALUE rb_gsl_linalg_LU_refine(VALUE obj, VALUE vm,
|
|
403
382
|
return rb_ary_new3(2, xx, vr);
|
404
383
|
}
|
405
384
|
|
406
|
-
#ifdef HAVE_NARRAY_H
|
407
|
-
static VALUE rb_gsl_linalg_LU_invert_narray(int argc, VALUE *argv, VALUE obj);
|
408
|
-
#endif
|
409
|
-
|
410
|
-
static VALUE rb_gsl_linalg_LU_invert(int argc, VALUE *argv, VALUE obj)
|
411
|
-
{
|
412
|
-
gsl_matrix *m = NULL, *inverse = NULL;
|
413
|
-
gsl_permutation *p = NULL;
|
414
|
-
int signum, flagm = 0, flagp = 0, itmp;
|
415
|
-
size_t size;
|
416
|
-
switch (TYPE(obj)) {
|
417
|
-
case T_MODULE: case T_CLASS: case T_OBJECT:
|
418
|
-
#ifdef HAVE_NARRAY_H
|
419
|
-
if (NA_IsNArray(argv[0]))
|
420
|
-
return rb_gsl_linalg_LU_invert_narray(argc, argv, obj);
|
421
|
-
#endif
|
422
|
-
m = get_matrix(argv[0], cgsl_matrix_LU, &flagm);
|
423
|
-
itmp = 1;
|
424
|
-
break;
|
425
|
-
default:
|
426
|
-
m = get_matrix(obj, cgsl_matrix_LU, &flagm);
|
427
|
-
itmp = 0;
|
428
|
-
}
|
429
|
-
size = m->size1;
|
430
|
-
|
431
|
-
if (argc == itmp) {
|
432
|
-
p = gsl_permutation_alloc(size);
|
433
|
-
flagp = 1;
|
434
|
-
} else {
|
435
|
-
CHECK_PERMUTATION(argv[itmp]);
|
436
|
-
p = get_permutation(argv[itmp], size, &flagp);
|
437
|
-
}
|
438
|
-
if (flagp == 1 && flagm == 0) rb_raise(rb_eArgError, "permutation must be given");
|
439
|
-
if (flagp == 0) itmp++;
|
440
|
-
|
441
|
-
if (flagm == 1 || flagp == 1) {
|
442
|
-
gsl_linalg_LU_decomp(m, p, &signum);
|
443
|
-
}
|
444
|
-
|
445
|
-
if (argc-1 == itmp) {
|
446
|
-
CHECK_MATRIX(argv[itmp]);
|
447
|
-
Data_Get_Struct(argv[itmp], gsl_matrix, inverse);
|
448
|
-
} else {
|
449
|
-
inverse = gsl_matrix_alloc(size, size);
|
450
|
-
}
|
451
|
-
gsl_linalg_LU_invert(m, p, inverse);
|
452
|
-
if (flagm == 1) gsl_matrix_free(m);
|
453
|
-
if (flagp == 1) gsl_permutation_free(p);
|
454
|
-
if (argc-1 == itmp) return argv[itmp];
|
455
|
-
else return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, inverse);
|
456
|
-
|
457
|
-
}
|
458
|
-
|
459
385
|
#ifdef HAVE_NARRAY_H
|
460
386
|
static VALUE rb_gsl_linalg_LU_invert_narray(int argc, VALUE *argv, VALUE obj)
|
461
387
|
{
|
@@ -484,7 +410,7 @@ static VALUE rb_gsl_linalg_LU_det_narray(int argc, VALUE *argv, VALUE obj)
|
|
484
410
|
switch (argc) {
|
485
411
|
case 2:
|
486
412
|
signum = FIX2INT(argv[1]);
|
487
|
-
|
413
|
+
/* no break */
|
488
414
|
case 1:
|
489
415
|
GetNArray(argv[0], na);
|
490
416
|
mv = gsl_matrix_view_array((double*)na->ptr, na->shape[1], na->shape[0]);
|
@@ -513,6 +439,51 @@ static VALUE rb_gsl_linalg_LU_lndet_narray(int argc, VALUE *argv, VALUE obj)
|
|
513
439
|
|
514
440
|
#endif
|
515
441
|
|
442
|
+
static VALUE rb_gsl_linalg_LU_invert(int argc, VALUE *argv, VALUE obj)
|
443
|
+
{
|
444
|
+
gsl_matrix *m = NULL, *inverse = NULL;
|
445
|
+
gsl_permutation *p = NULL;
|
446
|
+
int signum, flagm = 0, flagp = 0, itmp;
|
447
|
+
size_t size;
|
448
|
+
switch (TYPE(obj)) {
|
449
|
+
case T_MODULE: case T_CLASS: case T_OBJECT:
|
450
|
+
#ifdef HAVE_NARRAY_H
|
451
|
+
if (NA_IsNArray(argv[0]))
|
452
|
+
return rb_gsl_linalg_LU_invert_narray(argc, argv, obj);
|
453
|
+
#endif
|
454
|
+
m = get_matrix(argv[0], cgsl_matrix_LU, &flagm);
|
455
|
+
itmp = 1;
|
456
|
+
break;
|
457
|
+
default:
|
458
|
+
m = get_matrix(obj, cgsl_matrix_LU, &flagm);
|
459
|
+
itmp = 0;
|
460
|
+
}
|
461
|
+
size = m->size1;
|
462
|
+
|
463
|
+
if (argc == itmp) {
|
464
|
+
p = gsl_permutation_alloc(size);
|
465
|
+
flagp = 1;
|
466
|
+
} else {
|
467
|
+
CHECK_PERMUTATION(argv[itmp]);
|
468
|
+
p = get_permutation(argv[itmp], size, &flagp);
|
469
|
+
}
|
470
|
+
if (flagp == 1 && flagm == 0) rb_raise(rb_eArgError, "permutation must be given");
|
471
|
+
if (flagp == 0) itmp++;
|
472
|
+
if (flagm == 1 || flagp == 1) {
|
473
|
+
gsl_linalg_LU_decomp(m, p, &signum);
|
474
|
+
}
|
475
|
+
if (argc-1 == itmp) {
|
476
|
+
CHECK_MATRIX(argv[itmp]);
|
477
|
+
Data_Get_Struct(argv[itmp], gsl_matrix, inverse);
|
478
|
+
} else {
|
479
|
+
inverse = gsl_matrix_alloc(size, size);
|
480
|
+
}
|
481
|
+
gsl_linalg_LU_invert(m, p, inverse);
|
482
|
+
if (flagm == 1) gsl_matrix_free(m);
|
483
|
+
if (flagp == 1) gsl_permutation_free(p);
|
484
|
+
if (argc-1 == itmp) return argv[itmp];
|
485
|
+
else return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, inverse);
|
486
|
+
}
|
516
487
|
static VALUE rb_gsl_linalg_LU_det(int argc, VALUE *argv, VALUE obj)
|
517
488
|
{
|
518
489
|
gsl_matrix *m = NULL;
|
@@ -523,7 +494,7 @@ static VALUE rb_gsl_linalg_LU_det(int argc, VALUE *argv, VALUE obj)
|
|
523
494
|
switch (TYPE(obj)) {
|
524
495
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
525
496
|
if (argc < 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
|
526
|
-
|
497
|
+
argc);
|
527
498
|
#ifdef HAVE_NARRAY_H
|
528
499
|
if (NA_IsNArray(argv[0]))
|
529
500
|
return rb_gsl_linalg_LU_det_narray(argc, argv, obj);
|
@@ -548,8 +519,8 @@ static VALUE rb_gsl_linalg_LU_det(int argc, VALUE *argv, VALUE obj)
|
|
548
519
|
p = gsl_permutation_alloc(size);
|
549
520
|
flagp = 1;
|
550
521
|
}
|
551
|
-
}
|
552
|
-
if (flagm == 1) gsl_linalg_LU_decomp(m, p, &sign);
|
522
|
+
}
|
523
|
+
if (flagm == 1) gsl_linalg_LU_decomp(m, p, &sign);
|
553
524
|
det = gsl_linalg_LU_det(m, sign);
|
554
525
|
if (flagm == 1) gsl_matrix_free(m);
|
555
526
|
if (flagp == 1) gsl_permutation_free(p);
|
@@ -566,7 +537,7 @@ static VALUE rb_gsl_linalg_LU_lndet(int argc, VALUE *argv, VALUE obj)
|
|
566
537
|
switch (TYPE(obj)) {
|
567
538
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
568
539
|
if (argc < 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
569
|
-
|
540
|
+
argc);
|
570
541
|
#ifdef HAVE_NARRAY_H
|
571
542
|
if (NA_IsNArray(argv[0]))
|
572
543
|
return rb_gsl_linalg_LU_lndet_narray(argc, argv, obj);
|
@@ -580,7 +551,7 @@ static VALUE rb_gsl_linalg_LU_lndet(int argc, VALUE *argv, VALUE obj)
|
|
580
551
|
}
|
581
552
|
if (flagm == 1) {
|
582
553
|
p = gsl_permutation_alloc(m->size1);
|
583
|
-
gsl_linalg_LU_decomp(m, p, &sign);
|
554
|
+
gsl_linalg_LU_decomp(m, p, &sign);
|
584
555
|
}
|
585
556
|
lndet = gsl_linalg_LU_lndet(m);
|
586
557
|
if (flagm == 1) {
|
@@ -607,7 +578,7 @@ static VALUE rb_gsl_linalg_LU_sgndet(int argc, VALUE *argv, VALUE obj)
|
|
607
578
|
}
|
608
579
|
if (flagm == 1) {
|
609
580
|
p = gsl_permutation_alloc(m->size1);
|
610
|
-
gsl_linalg_LU_decomp(m, p, &sign);
|
581
|
+
gsl_linalg_LU_decomp(m, p, &sign);
|
611
582
|
} else {
|
612
583
|
if (argc-itmp != 1) rb_raise(rb_eArgError, "sign must be given");
|
613
584
|
sign = FIX2INT(argv[itmp]);
|
@@ -620,12 +591,11 @@ static VALUE rb_gsl_linalg_LU_sgndet(int argc, VALUE *argv, VALUE obj)
|
|
620
591
|
return INT2FIX(signdet);
|
621
592
|
}
|
622
593
|
|
623
|
-
#ifdef GSL_1_6_LATER
|
624
594
|
int gsl_linalg_LQ_solve_T(const gsl_matrix*, const gsl_vector*, const gsl_vector*, gsl_vector*);
|
625
595
|
int gsl_linalg_LQ_svx_T (const gsl_matrix*, const gsl_vector*, gsl_vector*);
|
626
|
-
int gsl_linalg_LQ_lssolve_T(const gsl_matrix * LQ, const gsl_vector * tau,
|
627
|
-
|
628
|
-
|
596
|
+
int gsl_linalg_LQ_lssolve_T(const gsl_matrix * LQ, const gsl_vector * tau,
|
597
|
+
const gsl_vector * b, gsl_vector * x,
|
598
|
+
gsl_vector * residual);
|
629
599
|
int
|
630
600
|
gsl_linalg_LQ_Lsolve_T (const gsl_matrix * LQ, const gsl_vector * b, gsl_vector* x);
|
631
601
|
int
|
@@ -633,9 +603,6 @@ gsl_linalg_LQ_Lsvx_T (const gsl_matrix * LQ, gsl_vector * x);
|
|
633
603
|
int
|
634
604
|
gsl_linalg_L_solve_T (const gsl_matrix * L, const gsl_vector * b, gsl_vector * x);
|
635
605
|
|
636
|
-
|
637
|
-
#endif
|
638
|
-
|
639
606
|
enum {
|
640
607
|
LINALG_QR_DECOMP,
|
641
608
|
LINALG_QR_DECOMP_BANG,
|
@@ -660,7 +627,7 @@ enum {
|
|
660
627
|
};
|
661
628
|
|
662
629
|
static VALUE rb_gsl_linalg_QR_LQ_decomposition(int argc, VALUE *argv, VALUE obj,
|
663
|
-
|
630
|
+
int flag)
|
664
631
|
{
|
665
632
|
gsl_matrix *m = NULL, *mtmp = NULL;
|
666
633
|
gsl_vector *tau = NULL;
|
@@ -680,7 +647,7 @@ static VALUE rb_gsl_linalg_QR_LQ_decomposition(int argc, VALUE *argv, VALUE obj,
|
|
680
647
|
break;
|
681
648
|
}
|
682
649
|
CHECK_MATRIX(omatrix);
|
683
|
-
Data_Get_Struct(omatrix, gsl_matrix, mtmp);
|
650
|
+
Data_Get_Struct(omatrix, gsl_matrix, mtmp);
|
684
651
|
|
685
652
|
switch (flag) {
|
686
653
|
case LINALG_QR_DECOMP:
|
@@ -692,9 +659,8 @@ static VALUE rb_gsl_linalg_QR_LQ_decomposition(int argc, VALUE *argv, VALUE obj,
|
|
692
659
|
fdecomp = &gsl_linalg_QR_decomp;
|
693
660
|
m = mtmp;
|
694
661
|
mdecomp = omatrix;
|
695
|
-
|
662
|
+
RBGSL_SET_CLASS(mdecomp, cgsl_matrix_QR);
|
696
663
|
break;
|
697
|
-
#ifdef GSL_1_6_LATER
|
698
664
|
case LINALG_LQ_DECOMP:
|
699
665
|
fdecomp = &gsl_linalg_LQ_decomp;
|
700
666
|
m = make_matrix_clone(mtmp);
|
@@ -704,9 +670,8 @@ static VALUE rb_gsl_linalg_QR_LQ_decomposition(int argc, VALUE *argv, VALUE obj,
|
|
704
670
|
fdecomp = &gsl_linalg_LQ_decomp;
|
705
671
|
m = mtmp;
|
706
672
|
mdecomp = omatrix;
|
707
|
-
|
673
|
+
RBGSL_SET_CLASS(mdecomp, cgsl_matrix_LQ);
|
708
674
|
break;
|
709
|
-
#endif
|
710
675
|
default:
|
711
676
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
712
677
|
break;
|
@@ -731,16 +696,16 @@ static VALUE rb_gsl_linalg_QR_LQ_decomposition(int argc, VALUE *argv, VALUE obj,
|
|
731
696
|
vtau = Data_Wrap_Struct(cgsl_vector_tau, 0, gsl_vector_free, tau);
|
732
697
|
return rb_ary_new3(2, mdecomp, vtau);
|
733
698
|
} else {
|
734
|
-
|
699
|
+
RBGSL_SET_CLASS(argv[itmp], cgsl_vector_tau);
|
735
700
|
return mdecomp;
|
736
701
|
}
|
737
702
|
break;
|
738
703
|
case LINALG_QR_DECOMP_BANG:
|
739
704
|
case LINALG_LQ_DECOMP_BANG:
|
740
|
-
|
705
|
+
if (argc == itmp) {
|
741
706
|
return Data_Wrap_Struct(cgsl_vector_tau, 0, gsl_vector_free, tau);
|
742
707
|
} else {
|
743
|
-
|
708
|
+
RBGSL_SET_CLASS(argv[itmp], cgsl_vector_tau);
|
744
709
|
return INT2FIX(status);
|
745
710
|
}
|
746
711
|
break;
|
@@ -752,7 +717,88 @@ static VALUE rb_gsl_linalg_QR_LQ_decomposition(int argc, VALUE *argv, VALUE obj,
|
|
752
717
|
}
|
753
718
|
|
754
719
|
#ifdef HAVE_NARRAY_H
|
755
|
-
static VALUE rb_gsl_linalg_QR_decomp_narray(int argc, VALUE *argv, VALUE obj)
|
720
|
+
static VALUE rb_gsl_linalg_QR_decomp_narray(int argc, VALUE *argv, VALUE obj)
|
721
|
+
{
|
722
|
+
struct NARRAY *na;
|
723
|
+
gsl_matrix_view mv;
|
724
|
+
gsl_vector_view vv;
|
725
|
+
int shapem[2], shapev[1];
|
726
|
+
VALUE qr, tau;
|
727
|
+
if (argc < 1) rb_raise(rb_eArgError, "too few arguments.");
|
728
|
+
GetNArray(argv[0], na);
|
729
|
+
shapem[0] = na->shape[1];
|
730
|
+
shapem[1] = na->shape[1];
|
731
|
+
shapev[0] = shapem[0];
|
732
|
+
qr = na_make_object(NA_DFLOAT, 2, shapem, CLASS_OF(argv[0]));
|
733
|
+
tau = na_make_object(NA_DFLOAT, 1, shapev, cNVector);
|
734
|
+
memcpy(NA_PTR_TYPE(qr,double*),na->ptr,sizeof(double)*shapem[0]*shapem[1]);
|
735
|
+
mv = gsl_matrix_view_array(NA_PTR_TYPE(qr,double*), shapem[0], shapem[1]);
|
736
|
+
vv = gsl_vector_view_array(NA_PTR_TYPE(tau,double*), shapev[0]);
|
737
|
+
gsl_linalg_QR_decomp(&mv.matrix, &vv.vector);
|
738
|
+
return rb_ary_new3(2, qr, tau);
|
739
|
+
}
|
740
|
+
|
741
|
+
static VALUE rb_gsl_linalg_QR_unpack_narray(int argc, VALUE *argv, VALUE obj)
|
742
|
+
{
|
743
|
+
struct NARRAY *m, *tau;
|
744
|
+
gsl_matrix_view mv, mq, mr;
|
745
|
+
gsl_vector_view vv;
|
746
|
+
int shape[2];
|
747
|
+
VALUE q, r;
|
748
|
+
if (argc != 2) rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
749
|
+
argc);
|
750
|
+
GetNArray(argv[0], m);
|
751
|
+
GetNArray(argv[1], tau);
|
752
|
+
mv = gsl_matrix_view_array((double*)m->ptr, m->shape[1], m->shape[0]);
|
753
|
+
vv = gsl_vector_view_array((double*)tau->ptr, tau->shape[0]);
|
754
|
+
shape[0] = m->shape[1];
|
755
|
+
shape[1] = m->shape[1];
|
756
|
+
q = na_make_object(NA_DFLOAT, 2, shape, CLASS_OF(argv[0]));
|
757
|
+
shape[0] = m->shape[1];
|
758
|
+
shape[1] = m->shape[0];
|
759
|
+
r = na_make_object(NA_DFLOAT, 2, shape, CLASS_OF(argv[0]));
|
760
|
+
mq = gsl_matrix_view_array(NA_PTR_TYPE(q,double*), m->shape[1], m->shape[1]);
|
761
|
+
mr = gsl_matrix_view_array(NA_PTR_TYPE(r,double*), m->shape[1], m->shape[0]);
|
762
|
+
// printf("OK 4 %d %d\n", mq.matrix.size1, mr.matrix.size2);
|
763
|
+
gsl_linalg_QR_unpack(&mv.matrix, &vv.vector, &mq.matrix, &mr.matrix);
|
764
|
+
// printf("OK 5\n");
|
765
|
+
return rb_ary_new3(2, q, r);
|
766
|
+
}
|
767
|
+
|
768
|
+
static VALUE rb_gsl_linalg_QR_solve_narray(int argc, VALUE *argv, VALUE obj)
|
769
|
+
{
|
770
|
+
struct NARRAY *qr, *tau, *b;
|
771
|
+
VALUE x;
|
772
|
+
gsl_matrix_view mv;
|
773
|
+
gsl_vector_view tv, bv, xv;
|
774
|
+
if (argc != 3) rb_raise(rb_eArgError, "Usage: QR.solve(qr, tau, b)");
|
775
|
+
GetNArray(argv[0], qr);
|
776
|
+
GetNArray(argv[1], tau);
|
777
|
+
GetNArray(argv[2], b);
|
778
|
+
x = na_make_object(NA_DFLOAT, 1, b->shape, CLASS_OF(argv[2]));
|
779
|
+
mv = gsl_matrix_view_array((double*)qr->ptr, qr->shape[1], qr->shape[0]);
|
780
|
+
tv = gsl_vector_view_array((double*)tau->ptr, tau->shape[0]);
|
781
|
+
bv = gsl_vector_view_array((double*)b->ptr, b->shape[0]);
|
782
|
+
xv = gsl_vector_view_array(NA_PTR_TYPE(x,double*), b->shape[0]);
|
783
|
+
gsl_linalg_QR_solve(&mv.matrix, &tv.vector, &bv.vector, &xv.vector);
|
784
|
+
return x;
|
785
|
+
}
|
786
|
+
static VALUE rb_gsl_linalg_QR_svx_narray(int argc, VALUE *argv, VALUE obj)
|
787
|
+
{
|
788
|
+
struct NARRAY *qr, *tau, *b;
|
789
|
+
gsl_matrix_view mv;
|
790
|
+
gsl_vector_view tv, bv;
|
791
|
+
if (argc != 3) rb_raise(rb_eArgError, "Usage: QR.solve(qr, tau, b)");
|
792
|
+
GetNArray(argv[0], qr);
|
793
|
+
GetNArray(argv[1], tau);
|
794
|
+
GetNArray(argv[2], b);
|
795
|
+
mv = gsl_matrix_view_array((double*)qr->ptr, qr->shape[1], qr->shape[0]);
|
796
|
+
tv = gsl_vector_view_array((double*)tau->ptr, tau->shape[0]);
|
797
|
+
bv = gsl_vector_view_array((double*)b->ptr, b->shape[0]);
|
798
|
+
gsl_linalg_QR_svx(&mv.matrix, &tv.vector, &bv.vector);
|
799
|
+
return argv[2];
|
800
|
+
}
|
801
|
+
|
756
802
|
#endif
|
757
803
|
|
758
804
|
static VALUE rb_gsl_linalg_QR_decomp(int argc, VALUE *argv, VALUE obj)
|
@@ -769,7 +815,6 @@ static VALUE rb_gsl_linalg_QR_decomp_bang(int argc, VALUE *argv, VALUE obj)
|
|
769
815
|
return rb_gsl_linalg_QR_LQ_decomposition(argc, argv, obj, LINALG_QR_DECOMP_BANG);
|
770
816
|
}
|
771
817
|
|
772
|
-
#ifdef GSL_1_6_LATER
|
773
818
|
static VALUE rb_gsl_linalg_LQ_decomp(int argc, VALUE *argv, VALUE obj)
|
774
819
|
{
|
775
820
|
return rb_gsl_linalg_QR_LQ_decomposition(argc, argv, obj, LINALG_LQ_DECOMP);
|
@@ -779,7 +824,6 @@ static VALUE rb_gsl_linalg_LQ_decomp_bang(int argc, VALUE *argv, VALUE obj)
|
|
779
824
|
{
|
780
825
|
return rb_gsl_linalg_QR_LQ_decomposition(argc, argv, obj, LINALG_LQ_DECOMP_BANG);
|
781
826
|
}
|
782
|
-
#endif
|
783
827
|
|
784
828
|
static VALUE rb_gsl_linalg_QR_LQ_solve(int argc, VALUE *argv, VALUE obj, int flag)
|
785
829
|
{
|
@@ -811,13 +855,11 @@ static VALUE rb_gsl_linalg_QR_LQ_solve(int argc, VALUE *argv, VALUE obj, int fla
|
|
811
855
|
fdecomp = &gsl_linalg_QR_decomp;
|
812
856
|
fsolve = &gsl_linalg_QR_solve;
|
813
857
|
break;
|
814
|
-
#ifdef GSL_1_6_LATER
|
815
858
|
case LINALG_LQ_SOLVE:
|
816
859
|
m = get_matrix(omatrix, cgsl_matrix_LQ, &flagm);
|
817
860
|
fdecomp = &gsl_linalg_LQ_decomp;
|
818
861
|
fsolve = &gsl_linalg_LQ_solve_T;
|
819
862
|
break;
|
820
|
-
#endif
|
821
863
|
default:
|
822
864
|
rb_raise(rb_eRuntimeError, "unknown operatioin");
|
823
865
|
break;
|
@@ -879,7 +921,7 @@ static VALUE rb_gsl_linalg_QR_LQ_svx(int argc, VALUE *argv, VALUE obj, int flag)
|
|
879
921
|
itmp = 0;
|
880
922
|
break;
|
881
923
|
}
|
882
|
-
if (argc-itmp < 1 || argc-itmp > 2)
|
924
|
+
if (argc-itmp < 1 || argc-itmp > 2)
|
883
925
|
rb_raise(rb_eArgError, "wrong number of arguments");
|
884
926
|
CHECK_MATRIX(omatrix);
|
885
927
|
switch (flag) {
|
@@ -888,13 +930,11 @@ static VALUE rb_gsl_linalg_QR_LQ_svx(int argc, VALUE *argv, VALUE obj, int flag)
|
|
888
930
|
fdecomp = &gsl_linalg_QR_decomp;
|
889
931
|
fsvx = &gsl_linalg_QR_svx;
|
890
932
|
break;
|
891
|
-
#ifdef GSL_1_6_LATER
|
892
933
|
case LINALG_LQ_SOLVE:
|
893
934
|
m = get_matrix(omatrix, cgsl_matrix_LQ, &flagm);
|
894
935
|
fdecomp = &gsl_linalg_LQ_decomp;
|
895
936
|
fsvx = &gsl_linalg_LQ_svx_T;
|
896
937
|
break;
|
897
|
-
#endif
|
898
938
|
default:
|
899
939
|
rb_raise(rb_eRuntimeError, "unknown operatioin");
|
900
940
|
break;
|
@@ -933,7 +973,7 @@ static VALUE rb_gsl_linalg_QR_LQ_lssolve(int argc, VALUE *argv, VALUE obj, int f
|
|
933
973
|
size_t size;
|
934
974
|
int (*fdecomp)(gsl_matrix*, gsl_vector*);
|
935
975
|
int (*flssolve)(const gsl_matrix*, const gsl_vector*, const gsl_vector*, gsl_vector*,
|
936
|
-
|
976
|
+
gsl_vector*);
|
937
977
|
|
938
978
|
switch (TYPE(obj)) {
|
939
979
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
@@ -955,13 +995,11 @@ static VALUE rb_gsl_linalg_QR_LQ_lssolve(int argc, VALUE *argv, VALUE obj, int f
|
|
955
995
|
fdecomp = &gsl_linalg_QR_decomp;
|
956
996
|
flssolve = &gsl_linalg_QR_lssolve;
|
957
997
|
break;
|
958
|
-
#ifdef GSL_1_6_LATER
|
959
998
|
case LINALG_LQ_SOLVE:
|
960
999
|
m = get_matrix(omatrix, cgsl_matrix_LQ, &flagm);
|
961
1000
|
fdecomp = &gsl_linalg_LQ_decomp;
|
962
1001
|
flssolve = &gsl_linalg_LQ_lssolve_T;
|
963
1002
|
break;
|
964
|
-
#endif
|
965
1003
|
default:
|
966
1004
|
rb_raise(rb_eRuntimeError, "unknown operatioin");
|
967
1005
|
break;
|
@@ -1010,7 +1048,6 @@ static VALUE rb_gsl_linalg_QR_LQ_lssolve(int argc, VALUE *argv, VALUE obj, int f
|
|
1010
1048
|
if (flagm == 1) gsl_matrix_free(m);
|
1011
1049
|
if (flagt == 1) gsl_vector_free(tau);
|
1012
1050
|
if (flagb == 1) gsl_vector_free(b);
|
1013
|
-
|
1014
1051
|
switch (argc - itmp) {
|
1015
1052
|
case 2:
|
1016
1053
|
return INT2FIX(status);
|
@@ -1020,16 +1057,11 @@ static VALUE rb_gsl_linalg_QR_LQ_lssolve(int argc, VALUE *argv, VALUE obj, int f
|
|
1020
1057
|
break;
|
1021
1058
|
default:
|
1022
1059
|
return rb_ary_new3(2, Data_Wrap_Struct(cgsl_vector_col, 0, gsl_vector_free, x),
|
1023
|
-
|
1060
|
+
Data_Wrap_Struct(cgsl_vector_col, 0, gsl_vector_free, r));
|
1024
1061
|
}
|
1025
1062
|
return Qnil;
|
1026
1063
|
}
|
1027
1064
|
|
1028
|
-
#ifdef HAVE_NARRAY_H
|
1029
|
-
static VALUE rb_gsl_linalg_QR_solve_narray(int argc, VALUE *argv, VALUE obj);
|
1030
|
-
static VALUE rb_gsl_linalg_QR_svx_narray(int argc, VALUE *argv, VALUE obj);
|
1031
|
-
#endif
|
1032
|
-
|
1033
1065
|
static VALUE rb_gsl_linalg_QR_solve(int argc, VALUE *argv, VALUE obj)
|
1034
1066
|
{
|
1035
1067
|
#ifdef HAVE_NARRAY_H
|
@@ -1053,7 +1085,6 @@ static VALUE rb_gsl_linalg_QR_lssolve(int argc, VALUE *argv, VALUE obj)
|
|
1053
1085
|
return rb_gsl_linalg_QR_LQ_lssolve(argc, argv, obj, LINALG_QR_SOLVE);
|
1054
1086
|
}
|
1055
1087
|
|
1056
|
-
#ifdef GSL_1_6_LATER
|
1057
1088
|
static VALUE rb_gsl_linalg_LQ_solve(int argc, VALUE *argv, VALUE obj)
|
1058
1089
|
{
|
1059
1090
|
return rb_gsl_linalg_QR_LQ_solve(argc, argv, obj, LINALG_LQ_SOLVE);
|
@@ -1068,18 +1099,17 @@ static VALUE rb_gsl_linalg_LQ_lssolve(int argc, VALUE *argv, VALUE obj)
|
|
1068
1099
|
{
|
1069
1100
|
return rb_gsl_linalg_QR_LQ_lssolve(argc, argv, obj, LINALG_LQ_SOLVE);
|
1070
1101
|
}
|
1071
|
-
#endif
|
1072
1102
|
|
1073
1103
|
static VALUE rb_gsl_linalg_QRLQ_QTvec(int argc, VALUE *argv, VALUE obj,
|
1074
|
-
|
1104
|
+
int flag)
|
1075
1105
|
{
|
1076
1106
|
gsl_matrix *QR = NULL;
|
1077
1107
|
gsl_vector *tau = NULL, *v = NULL;
|
1078
1108
|
VALUE ret;
|
1079
1109
|
switch (TYPE(obj)) {
|
1080
1110
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
1081
|
-
if (argc != 3) rb_raise(rb_eArgError,
|
1082
|
-
|
1111
|
+
if (argc != 3) rb_raise(rb_eArgError,
|
1112
|
+
"wrong number of arguments (%d for 3)", argc);
|
1083
1113
|
CHECK_MATRIX(argv[0]); CHECK_VECTOR(argv[1]); CHECK_VECTOR(argv[2]);
|
1084
1114
|
Data_Get_Struct(argv[0], gsl_matrix, QR);
|
1085
1115
|
Data_Get_Struct(argv[1], gsl_vector, tau);
|
@@ -1087,8 +1117,8 @@ static VALUE rb_gsl_linalg_QRLQ_QTvec(int argc, VALUE *argv, VALUE obj,
|
|
1087
1117
|
ret = argv[2];
|
1088
1118
|
break;
|
1089
1119
|
default:
|
1090
|
-
if (argc != 2) rb_raise(rb_eArgError,
|
1091
|
-
|
1120
|
+
if (argc != 2) rb_raise(rb_eArgError,
|
1121
|
+
"wrong number of arguments (%d for 2)", argc);
|
1092
1122
|
CHECK_VECTOR(argv[2]); CHECK_VECTOR(argv[1]);
|
1093
1123
|
Data_Get_Struct(obj, gsl_matrix, QR);
|
1094
1124
|
Data_Get_Struct(argv[0], gsl_vector, tau);
|
@@ -1103,14 +1133,12 @@ static VALUE rb_gsl_linalg_QRLQ_QTvec(int argc, VALUE *argv, VALUE obj,
|
|
1103
1133
|
case LINALG_QR_Qvec:
|
1104
1134
|
gsl_linalg_QR_Qvec(QR, tau, v);
|
1105
1135
|
break;
|
1106
|
-
#ifdef GSL_1_6_LATER
|
1107
1136
|
case LINALG_LQ_vecQ:
|
1108
1137
|
gsl_linalg_LQ_vecQ(QR, tau, v);
|
1109
1138
|
break;
|
1110
1139
|
case LINALG_LQ_vecQT:
|
1111
1140
|
gsl_linalg_LQ_vecQT(QR, tau, v);
|
1112
1141
|
break;
|
1113
|
-
#endif
|
1114
1142
|
default:
|
1115
1143
|
break;
|
1116
1144
|
}
|
@@ -1127,7 +1155,6 @@ static VALUE rb_gsl_linalg_QR_Qvec(int argc, VALUE *argv, VALUE obj)
|
|
1127
1155
|
return rb_gsl_linalg_QRLQ_QTvec(argc, argv, obj, LINALG_QR_Qvec);
|
1128
1156
|
}
|
1129
1157
|
|
1130
|
-
#ifdef GSL_1_6_LATER
|
1131
1158
|
static VALUE rb_gsl_linalg_LQ_vecQT(int argc, VALUE *argv, VALUE obj)
|
1132
1159
|
{
|
1133
1160
|
return rb_gsl_linalg_QRLQ_QTvec(argc, argv, obj, LINALG_LQ_vecQT);
|
@@ -1137,10 +1164,9 @@ static VALUE rb_gsl_linalg_LQ_vecQ(int argc, VALUE *argv, VALUE obj)
|
|
1137
1164
|
{
|
1138
1165
|
return rb_gsl_linalg_QRLQ_QTvec(argc, argv, obj, LINALG_LQ_vecQ);
|
1139
1166
|
}
|
1140
|
-
#endif
|
1141
1167
|
|
1142
1168
|
static VALUE rb_gsl_linalg_QRLQ_unpack(int argc, VALUE *argv, VALUE obj,
|
1143
|
-
|
1169
|
+
int flag)
|
1144
1170
|
{
|
1145
1171
|
gsl_matrix *QR = NULL, *Q = NULL, *R = NULL;
|
1146
1172
|
gsl_vector *tau = NULL;
|
@@ -1159,14 +1185,14 @@ static VALUE rb_gsl_linalg_QRLQ_unpack(int argc, VALUE *argv, VALUE obj,
|
|
1159
1185
|
}
|
1160
1186
|
switch (TYPE(obj)) {
|
1161
1187
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
1162
|
-
if (argc != 2) rb_raise(rb_eArgError,
|
1163
|
-
|
1188
|
+
if (argc != 2) rb_raise(rb_eArgError,
|
1189
|
+
"wrong number of arguments (%d for 2)", argc);
|
1164
1190
|
vtmp = argv[0];
|
1165
1191
|
itmp = 1;
|
1166
1192
|
break;
|
1167
1193
|
default:
|
1168
|
-
if (argc != 1) rb_raise(rb_eArgError,
|
1169
|
-
|
1194
|
+
if (argc != 1) rb_raise(rb_eArgError,
|
1195
|
+
"wrong number of arguments (%d for 1)", argc);
|
1170
1196
|
vtmp = obj;
|
1171
1197
|
itmp = 0;
|
1172
1198
|
break;
|
@@ -1187,13 +1213,11 @@ static VALUE rb_gsl_linalg_QRLQ_unpack(int argc, VALUE *argv, VALUE obj,
|
|
1187
1213
|
vQ = Data_Wrap_Struct(cgsl_matrix_Q, 0, gsl_matrix_free, Q);
|
1188
1214
|
vR = Data_Wrap_Struct(cgsl_matrix_R, 0, gsl_matrix_free, R);
|
1189
1215
|
break;
|
1190
|
-
#ifdef GSL_1_6_LATER
|
1191
1216
|
case LINALG_LQ_UNPACK:
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1217
|
+
gsl_linalg_LQ_unpack(QR, tau, Q, R);
|
1218
|
+
vQ = Data_Wrap_Struct(cgsl_matrix_L, 0, gsl_matrix_free, Q);
|
1219
|
+
vR = Data_Wrap_Struct(cgsl_matrix_Q, 0, gsl_matrix_free, R);
|
1195
1220
|
break;
|
1196
|
-
#endif
|
1197
1221
|
default:
|
1198
1222
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1199
1223
|
break;
|
@@ -1201,10 +1225,6 @@ static VALUE rb_gsl_linalg_QRLQ_unpack(int argc, VALUE *argv, VALUE obj,
|
|
1201
1225
|
return rb_ary_new3(2, vQ, vR);
|
1202
1226
|
}
|
1203
1227
|
|
1204
|
-
#ifdef HAVE_NARRAY_H
|
1205
|
-
static VALUE rb_gsl_linalg_QR_unpack_narray(int argc, VALUE *argv, VALUE obj);
|
1206
|
-
#endif
|
1207
|
-
|
1208
1228
|
static VALUE rb_gsl_linalg_QR_unpack(int argc, VALUE *argv, VALUE obj)
|
1209
1229
|
{
|
1210
1230
|
#ifdef HAVE_NARRAY_H
|
@@ -1214,16 +1234,14 @@ static VALUE rb_gsl_linalg_QR_unpack(int argc, VALUE *argv, VALUE obj)
|
|
1214
1234
|
return rb_gsl_linalg_QRLQ_unpack(argc, argv, obj, LINALG_QR_UNPACK);
|
1215
1235
|
}
|
1216
1236
|
|
1217
|
-
#ifdef GSL_1_6_LATER
|
1218
1237
|
static VALUE rb_gsl_linalg_LQ_unpack(int argc, VALUE *argv, VALUE obj)
|
1219
1238
|
{
|
1220
1239
|
return rb_gsl_linalg_QRLQ_unpack(argc, argv, obj, LINALG_LQ_UNPACK);
|
1221
1240
|
}
|
1222
|
-
#endif
|
1223
1241
|
|
1224
1242
|
/* singleton */
|
1225
1243
|
static VALUE rb_gsl_linalg_QRLQ_QRLQsolve(int argc, VALUE *argv, VALUE obj,
|
1226
|
-
|
1244
|
+
int flag)
|
1227
1245
|
{
|
1228
1246
|
gsl_matrix *Q = NULL, *R = NULL;
|
1229
1247
|
gsl_vector *b = NULL, *x = NULL;
|
@@ -1252,21 +1270,19 @@ static VALUE rb_gsl_linalg_QRLQ_QRLQsolve(int argc, VALUE *argv, VALUE obj,
|
|
1252
1270
|
}
|
1253
1271
|
switch (flag) {
|
1254
1272
|
case LINALG_QR_DECOMP:
|
1255
|
-
if (CLASS_OF(argv[0]) != cgsl_matrix_Q)
|
1273
|
+
if (CLASS_OF(argv[0]) != cgsl_matrix_Q)
|
1256
1274
|
rb_raise(rb_eTypeError, "not a Q matrix");
|
1257
|
-
if (CLASS_OF(argv[1]) != cgsl_matrix_R)
|
1275
|
+
if (CLASS_OF(argv[1]) != cgsl_matrix_R)
|
1258
1276
|
rb_raise(rb_eTypeError, "not a R matrix");
|
1259
1277
|
fsolve = &gsl_linalg_QR_QRsolve;
|
1260
1278
|
break;
|
1261
|
-
#ifdef GSL_1_6_LATER
|
1262
1279
|
case LINALG_LQ_DECOMP:
|
1263
|
-
/* if (CLASS_OF(argv[0]) != cgsl_matrix_L)
|
1280
|
+
/* if (CLASS_OF(argv[0]) != cgsl_matrix_L)
|
1264
1281
|
rb_raise(rb_eTypeError, "not a L matrix");
|
1265
|
-
if (CLASS_OF(argv[1]) != cgsl_matrix_Q)
|
1282
|
+
if (CLASS_OF(argv[1]) != cgsl_matrix_Q)
|
1266
1283
|
rb_raise(rb_eTypeError, "not a Q matrix");*/
|
1267
1284
|
fsolve = &gsl_linalg_LQ_LQsolve;
|
1268
1285
|
break;
|
1269
|
-
#endif
|
1270
1286
|
default:
|
1271
1287
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1272
1288
|
break;
|
@@ -1285,7 +1301,7 @@ static VALUE rb_gsl_linalg_QRLQ_QRLQsolve(int argc, VALUE *argv, VALUE obj,
|
|
1285
1301
|
|
1286
1302
|
/*****/
|
1287
1303
|
static VALUE rb_gsl_linalg_QRLQ_RLsolve(int argc, VALUE *argv, VALUE obj,
|
1288
|
-
|
1304
|
+
int flag)
|
1289
1305
|
{
|
1290
1306
|
gsl_matrix *QR = NULL, *mtmp;
|
1291
1307
|
gsl_vector *b = NULL, *x = NULL, *tau = NULL;
|
@@ -1339,7 +1355,6 @@ static VALUE rb_gsl_linalg_QRLQ_RLsolve(int argc, VALUE *argv, VALUE obj,
|
|
1339
1355
|
}
|
1340
1356
|
fsolve = &gsl_linalg_R_solve;
|
1341
1357
|
break;
|
1342
|
-
#ifdef GSL_1_6_LATER
|
1343
1358
|
case LINALG_LQ_LSOLVE:
|
1344
1359
|
if (CLASS_OF(omatrix) != cgsl_matrix_LQ) {
|
1345
1360
|
QR = make_matrix_clone(mtmp);
|
@@ -1358,7 +1373,6 @@ static VALUE rb_gsl_linalg_QRLQ_RLsolve(int argc, VALUE *argv, VALUE obj,
|
|
1358
1373
|
}
|
1359
1374
|
fsolve = &gsl_linalg_L_solve_T;
|
1360
1375
|
break;
|
1361
|
-
#endif
|
1362
1376
|
default:
|
1363
1377
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1364
1378
|
break;
|
@@ -1380,7 +1394,7 @@ static VALUE rb_gsl_linalg_QRLQ_RLsolve(int argc, VALUE *argv, VALUE obj,
|
|
1380
1394
|
}
|
1381
1395
|
|
1382
1396
|
static VALUE rb_gsl_linalg_QRLQ_RLsvx(int argc, VALUE *argv, VALUE obj,
|
1383
|
-
|
1397
|
+
int flag)
|
1384
1398
|
{
|
1385
1399
|
gsl_matrix *QR = NULL, *mtmp;
|
1386
1400
|
gsl_vector *x = NULL, *tau = NULL;
|
@@ -1425,18 +1439,17 @@ static VALUE rb_gsl_linalg_QRLQ_RLsvx(int argc, VALUE *argv, VALUE obj,
|
|
1425
1439
|
}
|
1426
1440
|
fsolve = &gsl_linalg_QR_Rsvx;
|
1427
1441
|
break;
|
1428
|
-
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
#ifdef GSL_1_6_LATER
|
1442
|
+
/*
|
1443
|
+
case LINALG_R_SVX:
|
1444
|
+
if (CLASS_OF(omatrix) != cgsl_matrix_QR) {
|
1445
|
+
QR = make_matrix_clone(mtmp);
|
1446
|
+
tau = gsl_vector_alloc(QR->size1);
|
1447
|
+
gsl_linalg_QR_decomp(QR, tau);
|
1448
|
+
flagq = 1;
|
1449
|
+
}
|
1450
|
+
fsolve = &gsl_linalg_R_svx;
|
1451
|
+
break;
|
1452
|
+
*/
|
1440
1453
|
case LINALG_LQ_LSVX:
|
1441
1454
|
if (CLASS_OF(omatrix) != cgsl_matrix_LQ) {
|
1442
1455
|
QR = make_matrix_clone(mtmp);
|
@@ -1446,7 +1459,6 @@ static VALUE rb_gsl_linalg_QRLQ_RLsvx(int argc, VALUE *argv, VALUE obj,
|
|
1446
1459
|
}
|
1447
1460
|
fsolve = &gsl_linalg_LQ_Lsvx_T;
|
1448
1461
|
break;
|
1449
|
-
#endif
|
1450
1462
|
default:
|
1451
1463
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1452
1464
|
break;
|
@@ -1476,12 +1488,11 @@ static VALUE rb_gsl_linalg_R_solve(int argc, VALUE *argv, VALUE obj)
|
|
1476
1488
|
|
1477
1489
|
/* singleton */
|
1478
1490
|
static VALUE rb_gsl_linalg_QR_QRsolve(int argc, VALUE *argv, VALUE obj,
|
1479
|
-
|
1491
|
+
int flag)
|
1480
1492
|
{
|
1481
1493
|
return rb_gsl_linalg_QRLQ_QRLQsolve(argc, argv, obj, LINALG_QR_DECOMP);
|
1482
1494
|
}
|
1483
1495
|
|
1484
|
-
#ifdef GSL_1_6_LATER
|
1485
1496
|
static VALUE rb_gsl_linalg_LQ_Lsolve(int argc, VALUE *argv, VALUE obj)
|
1486
1497
|
{
|
1487
1498
|
return rb_gsl_linalg_QRLQ_RLsolve(argc, argv, obj, LINALG_LQ_LSOLVE);
|
@@ -1499,14 +1510,13 @@ static VALUE rb_gsl_linalg_L_solve(int argc, VALUE *argv, VALUE obj)
|
|
1499
1510
|
|
1500
1511
|
/* singleton */
|
1501
1512
|
static VALUE rb_gsl_linalg_LQ_LQsolve(int argc, VALUE *argv, VALUE obj,
|
1502
|
-
|
1513
|
+
int flag)
|
1503
1514
|
{
|
1504
1515
|
return rb_gsl_linalg_QRLQ_QRLQsolve(argc, argv, obj, LINALG_LQ_DECOMP);
|
1505
1516
|
}
|
1506
|
-
#endif
|
1507
1517
|
|
1508
1518
|
static VALUE rb_gsl_linalg_QRLQ_update(VALUE obj, VALUE qq, VALUE rr, VALUE ww,
|
1509
|
-
|
1519
|
+
VALUE vv, int flag)
|
1510
1520
|
{
|
1511
1521
|
gsl_matrix *Q = NULL, *R = NULL;
|
1512
1522
|
gsl_vector *w = NULL, *v = NULL;
|
@@ -1521,11 +1531,9 @@ static VALUE rb_gsl_linalg_QRLQ_update(VALUE obj, VALUE qq, VALUE rr, VALUE ww,
|
|
1521
1531
|
case LINALG_QR_DECOMP:
|
1522
1532
|
status = gsl_linalg_QR_update(Q, R, w, v);
|
1523
1533
|
break;
|
1524
|
-
#ifdef GSL_1_6_LATER
|
1525
1534
|
case LINALG_LQ_DECOMP:
|
1526
1535
|
status = gsl_linalg_LQ_update(Q, R, w, v);
|
1527
1536
|
break;
|
1528
|
-
#endif
|
1529
1537
|
default:
|
1530
1538
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1531
1539
|
break;
|
@@ -1535,18 +1543,16 @@ static VALUE rb_gsl_linalg_QRLQ_update(VALUE obj, VALUE qq, VALUE rr, VALUE ww,
|
|
1535
1543
|
|
1536
1544
|
/* singleton */
|
1537
1545
|
static VALUE rb_gsl_linalg_QR_update(VALUE obj, VALUE qq, VALUE rr, VALUE ww,
|
1538
|
-
|
1546
|
+
VALUE vv)
|
1539
1547
|
{
|
1540
1548
|
return rb_gsl_linalg_QRLQ_update(obj, qq, rr, ww, vv, LINALG_QR_DECOMP);
|
1541
1549
|
}
|
1542
1550
|
|
1543
|
-
#ifdef GSL_1_6_LATER
|
1544
1551
|
static VALUE rb_gsl_linalg_LQ_update(VALUE obj, VALUE qq, VALUE rr, VALUE ww,
|
1545
|
-
|
1552
|
+
VALUE vv)
|
1546
1553
|
{
|
1547
1554
|
return rb_gsl_linalg_QRLQ_update(obj, qq, rr, ww, vv, LINALG_LQ_DECOMP);
|
1548
1555
|
}
|
1549
|
-
#endif
|
1550
1556
|
|
1551
1557
|
/******/
|
1552
1558
|
enum {
|
@@ -1565,7 +1571,7 @@ static VALUE rb_gsl_linalg_QRLQPT_decomp(int argc, VALUE *argv, VALUE obj, int f
|
|
1565
1571
|
switch (TYPE(obj)) {
|
1566
1572
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
1567
1573
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
|
1568
|
-
|
1574
|
+
argc);
|
1569
1575
|
vA = argv[0];
|
1570
1576
|
break;
|
1571
1577
|
default:
|
@@ -1586,14 +1592,12 @@ static VALUE rb_gsl_linalg_QRLQPT_decomp(int argc, VALUE *argv, VALUE obj, int f
|
|
1586
1592
|
vp = Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p);
|
1587
1593
|
gsl_linalg_QRPT_decomp(QR, tau, p, &signum, norm);
|
1588
1594
|
break;
|
1589
|
-
#ifdef GSL_1_6_LATER
|
1590
1595
|
case LINALG_PTLQ:
|
1591
1596
|
vQR = Data_Wrap_Struct(cgsl_matrix_PTLQ, 0, gsl_matrix_free, QR);
|
1592
1597
|
vtau = Data_Wrap_Struct(cgsl_vector_tau, 0, gsl_vector_free, tau);
|
1593
1598
|
vp = Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p);
|
1594
1599
|
gsl_linalg_PTLQ_decomp(QR, tau, p, &signum, norm);
|
1595
1600
|
break;
|
1596
|
-
#endif
|
1597
1601
|
default:
|
1598
1602
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1599
1603
|
break;
|
@@ -1613,7 +1617,7 @@ static VALUE rb_gsl_linalg_QRLQPT_decomp_bang(int argc, VALUE *argv, VALUE obj,
|
|
1613
1617
|
switch (TYPE(obj)) {
|
1614
1618
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
1615
1619
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
|
1616
|
-
|
1620
|
+
argc);
|
1617
1621
|
vA = argv[0];
|
1618
1622
|
break;
|
1619
1623
|
default:
|
@@ -1628,19 +1632,17 @@ static VALUE rb_gsl_linalg_QRLQPT_decomp_bang(int argc, VALUE *argv, VALUE obj,
|
|
1628
1632
|
norm = gsl_vector_alloc(size0);
|
1629
1633
|
switch (flag) {
|
1630
1634
|
case LINALG_QRPT:
|
1631
|
-
|
1635
|
+
RBGSL_SET_CLASS(vA, cgsl_matrix_QRPT);
|
1632
1636
|
vtau = Data_Wrap_Struct(cgsl_vector_tau, 0, gsl_vector_free, tau);
|
1633
1637
|
vp = Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p);
|
1634
1638
|
gsl_linalg_QRPT_decomp(A, tau, p, &signum, norm);
|
1635
1639
|
break;
|
1636
|
-
#ifdef GSL_1_6_LATER
|
1637
1640
|
case LINALG_PTLQ:
|
1638
|
-
|
1641
|
+
RBGSL_SET_CLASS(vA, cgsl_matrix_PTLQ);
|
1639
1642
|
vtau = Data_Wrap_Struct(cgsl_vector_tau, 0, gsl_vector_free, tau);
|
1640
1643
|
vp = Data_Wrap_Struct(cgsl_permutation, 0, gsl_permutation_free, p);
|
1641
1644
|
gsl_linalg_PTLQ_decomp(A, tau, p, &signum, norm);
|
1642
1645
|
break;
|
1643
|
-
#endif
|
1644
1646
|
default:
|
1645
1647
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1646
1648
|
break;
|
@@ -1659,7 +1661,6 @@ static VALUE rb_gsl_linalg_QRPT_decomp_bang(int argc, VALUE *argv, VALUE obj)
|
|
1659
1661
|
return rb_gsl_linalg_QRLQPT_decomp_bang(argc, argv, obj, LINALG_QRPT);
|
1660
1662
|
}
|
1661
1663
|
|
1662
|
-
#ifdef GSL_1_6_LATER
|
1663
1664
|
static VALUE rb_gsl_linalg_PTLQ_decomp(int argc, VALUE *argv, VALUE obj)
|
1664
1665
|
{
|
1665
1666
|
return rb_gsl_linalg_QRLQPT_decomp(argc, argv, obj, LINALG_PTLQ);
|
@@ -1669,7 +1670,6 @@ static VALUE rb_gsl_linalg_PTLQ_decomp_bang(int argc, VALUE *argv, VALUE obj)
|
|
1669
1670
|
{
|
1670
1671
|
return rb_gsl_linalg_QRLQPT_decomp_bang(argc, argv, obj, LINALG_PTLQ);
|
1671
1672
|
}
|
1672
|
-
#endif
|
1673
1673
|
|
1674
1674
|
static VALUE rb_gsl_linalg_QRLQPT_decomp2(int argc, VALUE *argv, VALUE obj,int flag)
|
1675
1675
|
{
|
@@ -1707,13 +1707,11 @@ static VALUE rb_gsl_linalg_QRLQPT_decomp2(int argc, VALUE *argv, VALUE obj,int f
|
|
1707
1707
|
vR = Data_Wrap_Struct(cgsl_matrix_R, 0, gsl_matrix_free, R);
|
1708
1708
|
gsl_linalg_QRPT_decomp2(A, Q, R, tau, p, &signum, norm);
|
1709
1709
|
break;
|
1710
|
-
#ifdef GSL_1_6_LATER
|
1711
1710
|
case LINALG_PTLQ:
|
1712
1711
|
vR = Data_Wrap_Struct(cgsl_matrix_L, 0, gsl_matrix_free, R);
|
1713
1712
|
vQ = Data_Wrap_Struct(cgsl_matrix_Q, 0, gsl_matrix_free, Q);
|
1714
1713
|
gsl_linalg_PTLQ_decomp2(A, Q, R, tau, p, &signum, norm);
|
1715
1714
|
break;
|
1716
|
-
#endif
|
1717
1715
|
default:
|
1718
1716
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1719
1717
|
}
|
@@ -1726,33 +1724,29 @@ static VALUE rb_gsl_linalg_QRPT_decomp2(int argc, VALUE *argv, VALUE obj)
|
|
1726
1724
|
return rb_gsl_linalg_QRLQPT_decomp2(argc, argv, obj, LINALG_QRPT);
|
1727
1725
|
}
|
1728
1726
|
|
1729
|
-
#ifdef GSL_1_6_LATER
|
1730
1727
|
static VALUE rb_gsl_linalg_PTLQ_decomp2(int argc, VALUE *argv, VALUE obj)
|
1731
1728
|
{
|
1732
1729
|
return rb_gsl_linalg_QRLQPT_decomp2(argc, argv, obj, LINALG_PTLQ);
|
1733
1730
|
}
|
1734
|
-
#endif
|
1735
1731
|
|
1736
|
-
#ifdef GSL_1_6_LATER
|
1737
1732
|
int gsl_linalg_PTLQ_solve_T(const gsl_matrix * QR, const gsl_vector * tau,
|
1738
|
-
|
1739
|
-
|
1733
|
+
const gsl_permutation * p, const gsl_vector * b,
|
1734
|
+
gsl_vector * x);
|
1740
1735
|
int gsl_linalg_PTLQ_svx_T(const gsl_matrix * LQ,
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1736
|
+
const gsl_vector * tau,
|
1737
|
+
const gsl_permutation * p,
|
1738
|
+
gsl_vector * x);
|
1744
1739
|
int gsl_linalg_PTLQ_LQsolve_T (const gsl_matrix * Q, const gsl_matrix * L,
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1740
|
+
const gsl_permutation * p,
|
1741
|
+
const gsl_vector * b,
|
1742
|
+
gsl_vector * x);
|
1748
1743
|
int gsl_linalg_PTLQ_Lsolve_T (const gsl_matrix * LQ,
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1744
|
+
const gsl_permutation * p,
|
1745
|
+
const gsl_vector * b,
|
1746
|
+
gsl_vector * x);
|
1752
1747
|
int gsl_linalg_PTLQ_Lsvx_T (const gsl_matrix * LQ,
|
1753
|
-
|
1754
|
-
|
1755
|
-
#endif
|
1748
|
+
const gsl_permutation * p,
|
1749
|
+
gsl_vector * x);
|
1756
1750
|
|
1757
1751
|
static VALUE rb_gsl_linalg_QRLQPT_solve(int argc, VALUE *argv, VALUE obj, int flag)
|
1758
1752
|
{
|
@@ -1763,21 +1757,19 @@ static VALUE rb_gsl_linalg_QRLQPT_solve(int argc, VALUE *argv, VALUE obj, int fl
|
|
1763
1757
|
VALUE vtmp, klass;
|
1764
1758
|
size_t size0;
|
1765
1759
|
int (*fdecomp)(gsl_matrix*, gsl_vector*, gsl_permutation*, int *, gsl_vector*);
|
1766
|
-
int (*fsolve)(const gsl_matrix*, const gsl_vector*, const gsl_permutation*,
|
1767
|
-
|
1760
|
+
int (*fsolve)(const gsl_matrix*, const gsl_vector*, const gsl_permutation*,
|
1761
|
+
const gsl_vector*, gsl_vector *);
|
1768
1762
|
switch (flag) {
|
1769
1763
|
case LINALG_QRPT:
|
1770
1764
|
klass = cgsl_matrix_QRPT;
|
1771
1765
|
fdecomp = &gsl_linalg_QRPT_decomp;
|
1772
1766
|
fsolve = &gsl_linalg_QRPT_solve;
|
1773
1767
|
break;
|
1774
|
-
#ifdef GSL_1_6_LATER
|
1775
1768
|
case LINALG_PTLQ:
|
1776
1769
|
klass = cgsl_matrix_PTLQ;
|
1777
1770
|
fdecomp = &gsl_linalg_PTLQ_decomp;
|
1778
1771
|
fsolve = &gsl_linalg_PTLQ_solve_T;
|
1779
1772
|
break;
|
1780
|
-
#endif
|
1781
1773
|
default:
|
1782
1774
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1783
1775
|
break;
|
@@ -1795,11 +1787,11 @@ static VALUE rb_gsl_linalg_QRLQPT_solve(int argc, VALUE *argv, VALUE obj, int fl
|
|
1795
1787
|
}
|
1796
1788
|
CHECK_MATRIX(vtmp);
|
1797
1789
|
if (CLASS_OF(vtmp) == klass) {
|
1798
|
-
if (argc-itmp != 3) rb_raise(rb_eArgError,
|
1799
|
-
|
1800
|
-
|
1790
|
+
if (argc-itmp != 3) rb_raise(rb_eArgError,
|
1791
|
+
"wrong number of arguments (%d for %d)",
|
1792
|
+
argc, 4-itmp);
|
1801
1793
|
CHECK_VECTOR(argv[itmp]);
|
1802
|
-
if (CLASS_OF(argv[itmp]) != cgsl_vector_tau)
|
1794
|
+
if (CLASS_OF(argv[itmp]) != cgsl_vector_tau)
|
1803
1795
|
rb_raise(rb_eTypeError, "not a tau vector");
|
1804
1796
|
CHECK_PERMUTATION(argv[itmp+1]);
|
1805
1797
|
Data_Get_Struct(argv[itmp], gsl_vector, tau);
|
@@ -1808,8 +1800,8 @@ static VALUE rb_gsl_linalg_QRLQPT_solve(int argc, VALUE *argv, VALUE obj, int fl
|
|
1808
1800
|
size0 = GSL_MIN(QR->size1, QR->size2);
|
1809
1801
|
itmp += 2;
|
1810
1802
|
} else {
|
1811
|
-
if (argc-itmp != 1) rb_raise(rb_eArgError,
|
1812
|
-
|
1803
|
+
if (argc-itmp != 1) rb_raise(rb_eArgError,
|
1804
|
+
"wrong number of arguments (%d for %d)", argc, 2-itmp);
|
1813
1805
|
Data_Get_Struct(vtmp, gsl_matrix, A);
|
1814
1806
|
QR = make_matrix_clone(A);
|
1815
1807
|
size0 = GSL_MIN(QR->size1, QR->size2);
|
@@ -1843,12 +1835,10 @@ static VALUE rb_gsl_linalg_QRPT_solve(int argc, VALUE *argv, VALUE obj)
|
|
1843
1835
|
return rb_gsl_linalg_QRLQPT_solve(argc, argv, obj, LINALG_QRPT);
|
1844
1836
|
}
|
1845
1837
|
|
1846
|
-
#ifdef GSL_1_6_LATER
|
1847
1838
|
static VALUE rb_gsl_linalg_PTLQ_solve(int argc, VALUE *argv, VALUE obj)
|
1848
1839
|
{
|
1849
1840
|
return rb_gsl_linalg_QRLQPT_solve(argc, argv, obj, LINALG_PTLQ);
|
1850
1841
|
}
|
1851
|
-
#endif
|
1852
1842
|
|
1853
1843
|
static VALUE rb_gsl_linalg_QRLQPT_svx(int argc, VALUE *argv, VALUE obj, int flag)
|
1854
1844
|
{
|
@@ -1859,21 +1849,19 @@ static VALUE rb_gsl_linalg_QRLQPT_svx(int argc, VALUE *argv, VALUE obj, int flag
|
|
1859
1849
|
VALUE vtmp, klass;
|
1860
1850
|
size_t size0;
|
1861
1851
|
int (*fdecomp)(gsl_matrix*, gsl_vector*, gsl_permutation*, int *, gsl_vector*);
|
1862
|
-
int (*fsvx)(const gsl_matrix*, const gsl_vector*, const gsl_permutation*,
|
1863
|
-
|
1852
|
+
int (*fsvx)(const gsl_matrix*, const gsl_vector*, const gsl_permutation*,
|
1853
|
+
gsl_vector *);
|
1864
1854
|
switch (flag) {
|
1865
1855
|
case LINALG_QRPT:
|
1866
1856
|
klass = cgsl_matrix_QRPT;
|
1867
1857
|
fdecomp = &gsl_linalg_QRPT_decomp;
|
1868
1858
|
fsvx = &gsl_linalg_QRPT_svx;
|
1869
1859
|
break;
|
1870
|
-
#ifdef GSL_1_6_LATER
|
1871
1860
|
case LINALG_PTLQ:
|
1872
1861
|
klass = cgsl_matrix_PTLQ;
|
1873
1862
|
fdecomp = &gsl_linalg_PTLQ_decomp;
|
1874
1863
|
fsvx = &gsl_linalg_PTLQ_svx_T;
|
1875
1864
|
break;
|
1876
|
-
#endif
|
1877
1865
|
default:
|
1878
1866
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1879
1867
|
break;
|
@@ -1882,7 +1870,7 @@ static VALUE rb_gsl_linalg_QRLQPT_svx(int argc, VALUE *argv, VALUE obj, int flag
|
|
1882
1870
|
switch (TYPE(obj)) {
|
1883
1871
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
1884
1872
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
|
1885
|
-
|
1873
|
+
argc);
|
1886
1874
|
vtmp = argv[0];
|
1887
1875
|
itmp = 1;
|
1888
1876
|
break;
|
@@ -1893,11 +1881,11 @@ static VALUE rb_gsl_linalg_QRLQPT_svx(int argc, VALUE *argv, VALUE obj, int flag
|
|
1893
1881
|
}
|
1894
1882
|
CHECK_MATRIX(vtmp);
|
1895
1883
|
if (CLASS_OF(vtmp) == klass) {
|
1896
|
-
if (argc-itmp != 3) rb_raise(rb_eArgError,
|
1897
|
-
|
1898
|
-
|
1884
|
+
if (argc-itmp != 3) rb_raise(rb_eArgError,
|
1885
|
+
"wrong number of arguments (%d for %d)",
|
1886
|
+
argc, 3+itmp);
|
1899
1887
|
CHECK_VECTOR(argv[itmp]);
|
1900
|
-
if (CLASS_OF(argv[itmp]) != cgsl_vector_tau)
|
1888
|
+
if (CLASS_OF(argv[itmp]) != cgsl_vector_tau)
|
1901
1889
|
rb_raise(rb_eTypeError, "not a tau vector");
|
1902
1890
|
CHECK_PERMUTATION(argv[itmp+1]);
|
1903
1891
|
Data_Get_Struct(argv[itmp], gsl_vector, tau);
|
@@ -1906,8 +1894,8 @@ static VALUE rb_gsl_linalg_QRLQPT_svx(int argc, VALUE *argv, VALUE obj, int flag
|
|
1906
1894
|
size0 = GSL_MIN(QR->size1, QR->size2);
|
1907
1895
|
itmp += 2;
|
1908
1896
|
} else {
|
1909
|
-
if (argc-itmp != 1) rb_raise(rb_eArgError,
|
1910
|
-
|
1897
|
+
if (argc-itmp != 1) rb_raise(rb_eArgError,
|
1898
|
+
"wrong number of arguments (%d for %d)", argc, 2+itmp);
|
1911
1899
|
Data_Get_Struct(vtmp, gsl_matrix, A);
|
1912
1900
|
QR = make_matrix_clone(A);
|
1913
1901
|
size0 = GSL_MIN(QR->size1, QR->size2);
|
@@ -1934,36 +1922,32 @@ static VALUE rb_gsl_linalg_QRPT_svx(int argc, VALUE *argv, VALUE obj)
|
|
1934
1922
|
return rb_gsl_linalg_QRLQPT_svx(argc, argv, obj, LINALG_QRPT);
|
1935
1923
|
}
|
1936
1924
|
|
1937
|
-
#ifdef GSL_1_6_LATER
|
1938
1925
|
static VALUE rb_gsl_linalg_PTLQ_svx(int argc, VALUE *argv, VALUE obj)
|
1939
1926
|
{
|
1940
1927
|
return rb_gsl_linalg_QRLQPT_svx(argc, argv, obj, LINALG_PTLQ);
|
1941
1928
|
}
|
1942
|
-
#endif
|
1943
1929
|
|
1944
1930
|
/* singleton */
|
1945
|
-
static VALUE rb_gsl_linalg_QRLQPT_QRLQsolve(VALUE obj, VALUE qq, VALUE rr,
|
1946
|
-
|
1931
|
+
static VALUE rb_gsl_linalg_QRLQPT_QRLQsolve(VALUE obj, VALUE qq, VALUE rr,
|
1932
|
+
VALUE pp, VALUE bb, int flag)
|
1947
1933
|
{
|
1948
1934
|
gsl_matrix *Q = NULL, *R = NULL;
|
1949
1935
|
gsl_vector *b = NULL, *x = NULL;
|
1950
1936
|
gsl_permutation *p = NULL;
|
1951
1937
|
int flagb = 0;
|
1952
|
-
int (*fsolve)(const gsl_matrix*, const gsl_matrix*, const gsl_permutation*,
|
1953
|
-
|
1938
|
+
int (*fsolve)(const gsl_matrix*, const gsl_matrix*, const gsl_permutation*,
|
1939
|
+
const gsl_vector*, gsl_vector*);
|
1954
1940
|
switch (flag) {
|
1955
1941
|
case LINALG_QRPT:
|
1956
1942
|
if (CLASS_OF(qq) != cgsl_matrix_Q) rb_raise(rb_eTypeError, "not a Q matrix");
|
1957
1943
|
if (CLASS_OF(rr) != cgsl_matrix_R) rb_raise(rb_eTypeError, "not a R matrix");
|
1958
1944
|
fsolve = &gsl_linalg_QRPT_QRsolve;
|
1959
1945
|
break;
|
1960
|
-
#ifdef GSL_1_6_LATER
|
1961
1946
|
case LINALG_PTLQ:
|
1962
1947
|
if (CLASS_OF(qq) != cgsl_matrix_Q) rb_raise(rb_eTypeError, "not a Q matrix");
|
1963
1948
|
if (CLASS_OF(rr) != cgsl_matrix_L) rb_raise(rb_eTypeError, "not a L matrix");
|
1964
1949
|
fsolve = &gsl_linalg_PTLQ_LQsolve_T;
|
1965
1950
|
break;
|
1966
|
-
#endif
|
1967
1951
|
default:
|
1968
1952
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
1969
1953
|
break;
|
@@ -1985,23 +1969,21 @@ static VALUE rb_gsl_linalg_QRLQPT_QRLQsolve(VALUE obj, VALUE qq, VALUE rr,
|
|
1985
1969
|
return Data_Wrap_Struct(cgsl_vector_col, 0, gsl_vector_free, x);
|
1986
1970
|
}
|
1987
1971
|
|
1988
|
-
static VALUE rb_gsl_linalg_QRPT_QRsolve(VALUE obj, VALUE qq, VALUE rr,
|
1989
|
-
|
1972
|
+
static VALUE rb_gsl_linalg_QRPT_QRsolve(VALUE obj, VALUE qq, VALUE rr,
|
1973
|
+
VALUE pp, VALUE bb)
|
1990
1974
|
{
|
1991
1975
|
return rb_gsl_linalg_QRLQPT_QRLQsolve(obj, qq, rr, pp, bb, LINALG_QRPT);
|
1992
1976
|
}
|
1993
1977
|
|
1994
|
-
|
1995
|
-
|
1996
|
-
VALUE pp, VALUE bb)
|
1978
|
+
static VALUE rb_gsl_linalg_PTLQ_LQsolve(VALUE obj, VALUE qq, VALUE rr,
|
1979
|
+
VALUE pp, VALUE bb)
|
1997
1980
|
{
|
1998
1981
|
return rb_gsl_linalg_QRLQPT_QRLQsolve(obj, qq, rr, pp, bb, LINALG_PTLQ);
|
1999
1982
|
}
|
2000
|
-
#endif
|
2001
1983
|
|
2002
1984
|
/* singleton */
|
2003
|
-
static VALUE rb_gsl_linalg_QRLQPT_update(VALUE obj, VALUE qq, VALUE rr,
|
2004
|
-
|
1985
|
+
static VALUE rb_gsl_linalg_QRLQPT_update(VALUE obj, VALUE qq, VALUE rr,
|
1986
|
+
VALUE pp, VALUE ww, VALUE vv, int flag)
|
2005
1987
|
{
|
2006
1988
|
gsl_matrix *Q = NULL, *R = NULL;
|
2007
1989
|
gsl_vector *w = NULL, *v = NULL;
|
@@ -2011,12 +1993,10 @@ static VALUE rb_gsl_linalg_QRLQPT_update(VALUE obj, VALUE qq, VALUE rr,
|
|
2011
1993
|
if (CLASS_OF(qq) != cgsl_matrix_Q) rb_raise(rb_eTypeError, "not a Q matrix");
|
2012
1994
|
if (CLASS_OF(rr) != cgsl_matrix_R) rb_raise(rb_eTypeError, "not a R matrix");
|
2013
1995
|
break;
|
2014
|
-
#ifdef GSL_1_6_LATER
|
2015
1996
|
case LINALG_PTLQ:
|
2016
1997
|
if (CLASS_OF(qq) != cgsl_matrix_Q) rb_raise(rb_eTypeError, "not a Q matrix");
|
2017
1998
|
if (CLASS_OF(rr) != cgsl_matrix_L) rb_raise(rb_eTypeError, "not a L matrix");
|
2018
1999
|
break;
|
2019
|
-
#endif
|
2020
2000
|
}
|
2021
2001
|
CHECK_PERMUTATION(pp);
|
2022
2002
|
Data_Get_Struct(qq, gsl_matrix, Q);
|
@@ -2028,28 +2008,24 @@ static VALUE rb_gsl_linalg_QRLQPT_update(VALUE obj, VALUE qq, VALUE rr,
|
|
2028
2008
|
case LINALG_QRPT:
|
2029
2009
|
gsl_linalg_QRPT_update(Q, R, p, w, v);
|
2030
2010
|
break;
|
2031
|
-
#ifdef GSL_1_6_LATER
|
2032
2011
|
case LINALG_PTLQ:
|
2033
2012
|
gsl_linalg_PTLQ_update(Q, R, p, w, v);
|
2034
2013
|
break;
|
2035
|
-
#endif
|
2036
2014
|
}
|
2037
2015
|
return obj;
|
2038
2016
|
}
|
2039
2017
|
|
2040
|
-
static VALUE rb_gsl_linalg_QRPT_update(VALUE obj, VALUE qq, VALUE rr,
|
2041
|
-
|
2018
|
+
static VALUE rb_gsl_linalg_QRPT_update(VALUE obj, VALUE qq, VALUE rr,
|
2019
|
+
VALUE pp, VALUE ww, VALUE vv)
|
2042
2020
|
{
|
2043
2021
|
return rb_gsl_linalg_QRLQPT_update(obj, qq, rr, pp, ww, vv, LINALG_QRPT);
|
2044
2022
|
}
|
2045
2023
|
|
2046
|
-
|
2047
|
-
|
2048
|
-
VALUE pp, VALUE ww, VALUE vv)
|
2024
|
+
static VALUE rb_gsl_linalg_PTLQ_update(VALUE obj, VALUE qq, VALUE rr,
|
2025
|
+
VALUE pp, VALUE ww, VALUE vv)
|
2049
2026
|
{
|
2050
2027
|
return rb_gsl_linalg_QRLQPT_update(obj, qq, rr, pp, ww, vv, LINALG_PTLQ);
|
2051
2028
|
}
|
2052
|
-
#endif
|
2053
2029
|
|
2054
2030
|
static VALUE rb_gsl_linalg_QRLQPT_RLsolve(int argc, VALUE *argv, VALUE obj, int flag)
|
2055
2031
|
{
|
@@ -2058,19 +2034,17 @@ static VALUE rb_gsl_linalg_QRLQPT_RLsolve(int argc, VALUE *argv, VALUE obj, int
|
|
2058
2034
|
gsl_permutation *p = NULL;
|
2059
2035
|
int itmp, flagb = 0;
|
2060
2036
|
VALUE vtmp, klass;
|
2061
|
-
int (*fsolve)(const gsl_matrix*, const gsl_permutation*, const gsl_vector*,
|
2062
|
-
|
2037
|
+
int (*fsolve)(const gsl_matrix*, const gsl_permutation*, const gsl_vector*,
|
2038
|
+
gsl_vector*);
|
2063
2039
|
switch (flag) {
|
2064
2040
|
case LINALG_QRPT:
|
2065
2041
|
klass = cgsl_matrix_QRPT;
|
2066
2042
|
fsolve = &gsl_linalg_QRPT_Rsolve;
|
2067
2043
|
break;
|
2068
|
-
#ifdef GSL_1_6_LATER
|
2069
2044
|
case LINALG_PTLQ:
|
2070
2045
|
klass = cgsl_matrix_PTLQ;
|
2071
2046
|
fsolve = &gsl_linalg_PTLQ_Lsolve_T;
|
2072
2047
|
break;
|
2073
|
-
#endif
|
2074
2048
|
default:
|
2075
2049
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
2076
2050
|
break;
|
@@ -2078,7 +2052,7 @@ static VALUE rb_gsl_linalg_QRLQPT_RLsolve(int argc, VALUE *argv, VALUE obj, int
|
|
2078
2052
|
switch (TYPE(obj)) {
|
2079
2053
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2080
2054
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
|
2081
|
-
|
2055
|
+
argc);
|
2082
2056
|
vtmp = argv[0];
|
2083
2057
|
itmp = 1;
|
2084
2058
|
break;
|
@@ -2114,12 +2088,11 @@ static VALUE rb_gsl_linalg_QRPT_Rsolve(int argc, VALUE *argv, VALUE obj)
|
|
2114
2088
|
{
|
2115
2089
|
return rb_gsl_linalg_QRLQPT_RLsolve(argc, argv, obj, LINALG_QRPT);
|
2116
2090
|
}
|
2117
|
-
|
2091
|
+
|
2118
2092
|
static VALUE rb_gsl_linalg_PTLQ_Lsolve(int argc, VALUE *argv, VALUE obj)
|
2119
2093
|
{
|
2120
2094
|
return rb_gsl_linalg_QRLQPT_RLsolve(argc, argv, obj, LINALG_PTLQ);
|
2121
2095
|
}
|
2122
|
-
#endif
|
2123
2096
|
|
2124
2097
|
static VALUE rb_gsl_linalg_QRLQPT_RLsvx(int argc, VALUE *argv, VALUE obj, int flag)
|
2125
2098
|
{
|
@@ -2134,11 +2107,9 @@ static VALUE rb_gsl_linalg_QRLQPT_RLsvx(int argc, VALUE *argv, VALUE obj, int fl
|
|
2134
2107
|
klass = cgsl_matrix_QRPT;
|
2135
2108
|
fsvx = &gsl_linalg_QRPT_Rsvx;
|
2136
2109
|
break;
|
2137
|
-
#ifdef GSL_1_6_LATER
|
2138
2110
|
case LINALG_PTLQ:
|
2139
2111
|
klass = cgsl_matrix_PTLQ;
|
2140
2112
|
fsvx = &gsl_linalg_PTLQ_Lsvx_T;
|
2141
|
-
#endif
|
2142
2113
|
default:
|
2143
2114
|
rb_raise(rb_eRuntimeError, "unknown operation");
|
2144
2115
|
break;
|
@@ -2146,7 +2117,7 @@ static VALUE rb_gsl_linalg_QRLQPT_RLsvx(int argc, VALUE *argv, VALUE obj, int fl
|
|
2146
2117
|
switch (TYPE(obj)) {
|
2147
2118
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2148
2119
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
|
2149
|
-
|
2120
|
+
argc);
|
2150
2121
|
vtmp = argv[0];
|
2151
2122
|
itmp = 1;
|
2152
2123
|
break;
|
@@ -2179,12 +2150,11 @@ static VALUE rb_gsl_linalg_QRPT_Rsvx(int argc, VALUE *argv, VALUE obj)
|
|
2179
2150
|
{
|
2180
2151
|
return rb_gsl_linalg_QRLQPT_RLsvx(argc, argv, obj, LINALG_QRPT);
|
2181
2152
|
}
|
2182
|
-
|
2153
|
+
|
2183
2154
|
static VALUE rb_gsl_linalg_PTLQ_Lsvx(int argc, VALUE *argv, VALUE obj)
|
2184
2155
|
{
|
2185
2156
|
return rb_gsl_linalg_QRLQPT_RLsvx(argc, argv, obj, LINALG_PTLQ);
|
2186
2157
|
}
|
2187
|
-
#endif
|
2188
2158
|
|
2189
2159
|
/*******/
|
2190
2160
|
#ifdef HAVE_NARRAY_H
|
@@ -2267,11 +2237,11 @@ static VALUE rb_gsl_linalg_SV_decomp(int argc, VALUE *argv, VALUE obj)
|
|
2267
2237
|
CHECK_VECTOR(argv[1]);
|
2268
2238
|
Data_Get_Struct(argv[1], gsl_vector, w);
|
2269
2239
|
flag = 0;
|
2270
|
-
|
2240
|
+
/* no break, do next */
|
2271
2241
|
case 1:
|
2272
2242
|
#ifdef HAVE_NARRAY_H
|
2273
2243
|
if (NA_IsNArray(argv[0]))
|
2274
|
-
|
2244
|
+
return rb_gsl_linalg_SV_decomp_narray(argc, argv, obj);
|
2275
2245
|
#endif
|
2276
2246
|
CHECK_MATRIX(argv[0]);
|
2277
2247
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
@@ -2318,7 +2288,7 @@ static VALUE rb_gsl_linalg_SV_decomp_mod(int argc, VALUE *argv, VALUE obj)
|
|
2318
2288
|
switch (TYPE(obj)) {
|
2319
2289
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2320
2290
|
if (argc != 1) rb_raise(rb_eArgError,
|
2321
|
-
|
2291
|
+
"wrong number of argument (%d for 1)", argc);
|
2322
2292
|
CHECK_MATRIX(argv[0]);
|
2323
2293
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
2324
2294
|
break;
|
@@ -2348,10 +2318,10 @@ static VALUE rb_gsl_linalg_SV_decomp_jacobi(int argc, VALUE *argv, VALUE obj)
|
|
2348
2318
|
switch (TYPE(obj)) {
|
2349
2319
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2350
2320
|
if (argc != 1) rb_raise(rb_eArgError,
|
2351
|
-
|
2321
|
+
"wrong number of argument (%d for 1)", argc);
|
2352
2322
|
#ifdef HAVE_NARRAY_H
|
2353
|
-
|
2354
|
-
|
2323
|
+
if (NA_IsNArray(argv[0]))
|
2324
|
+
return rb_gsl_linalg_SV_decomp_jacobi_narray(argc, argv, obj);
|
2355
2325
|
#endif
|
2356
2326
|
CHECK_MATRIX(argv[0]);
|
2357
2327
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
@@ -2375,7 +2345,7 @@ static VALUE rb_gsl_linalg_SV_solve(int argc, VALUE *argv, VALUE obj)
|
|
2375
2345
|
gsl_matrix *A = NULL, *U = NULL, *V = NULL;
|
2376
2346
|
gsl_vector *S = NULL, *b = NULL, *x = NULL;
|
2377
2347
|
int flagb = 0, flagv = 0;
|
2378
|
-
|
2348
|
+
|
2379
2349
|
switch (TYPE(obj)) {
|
2380
2350
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2381
2351
|
if (argc < 1) rb_raise(rb_eArgError, "too few arguments.");
|
@@ -2386,35 +2356,35 @@ static VALUE rb_gsl_linalg_SV_solve(int argc, VALUE *argv, VALUE obj)
|
|
2386
2356
|
|
2387
2357
|
CHECK_MATRIX(argv[0]);
|
2388
2358
|
if (CLASS_OF(argv[0]) == cgsl_matrix_U) {
|
2389
|
-
if (argc != 4) rb_raise(rb_eArgError,
|
2390
|
-
|
2359
|
+
if (argc != 4) rb_raise(rb_eArgError,
|
2360
|
+
"wrong number of arguments (%d for 4)", argc);
|
2391
2361
|
Data_Get_Struct(argv[0], gsl_matrix, U);
|
2392
2362
|
CHECK_MATRIX(argv[1]);
|
2393
|
-
if (CLASS_OF(argv[1]) != cgsl_matrix_V)
|
2394
|
-
|
2363
|
+
if (CLASS_OF(argv[1]) != cgsl_matrix_V)
|
2364
|
+
rb_raise(rb_eTypeError, "not a V matrix");
|
2395
2365
|
Data_Get_Struct(argv[1], gsl_matrix, V);
|
2396
2366
|
CHECK_VECTOR(argv[2]);
|
2397
|
-
if (CLASS_OF(argv[2]) != cgsl_vector_S)
|
2398
|
-
|
2367
|
+
if (CLASS_OF(argv[2]) != cgsl_vector_S)
|
2368
|
+
rb_raise(rb_eTypeError, "not a S vector");
|
2399
2369
|
Data_Get_Struct(argv[2], gsl_vector, S);
|
2400
2370
|
if (TYPE(argv[3]) == T_ARRAY) {
|
2401
|
-
|
2402
|
-
|
2371
|
+
b = make_cvector_from_rarray(argv[3]);
|
2372
|
+
flagb = 1;
|
2403
2373
|
} else {
|
2404
|
-
|
2405
|
-
|
2374
|
+
CHECK_VECTOR(argv[3]);
|
2375
|
+
Data_Get_Struct(argv[3], gsl_vector, b);
|
2406
2376
|
}
|
2407
2377
|
} else {
|
2408
|
-
if (argc != 2) rb_raise(rb_eArgError,
|
2409
|
-
|
2378
|
+
if (argc != 2) rb_raise(rb_eArgError,
|
2379
|
+
"wrong number of arguments (%d for 2)", argc);
|
2410
2380
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
2411
2381
|
U = make_matrix_clone(A);
|
2412
2382
|
if (TYPE(argv[1]) == T_ARRAY) {
|
2413
|
-
|
2414
|
-
|
2383
|
+
b = make_cvector_from_rarray(argv[1]);
|
2384
|
+
flagb = 1;
|
2415
2385
|
} else {
|
2416
|
-
|
2417
|
-
|
2386
|
+
CHECK_VECTOR(argv[1]);
|
2387
|
+
Data_Get_Struct(argv[1], gsl_vector, b);
|
2418
2388
|
}
|
2419
2389
|
S = gsl_vector_alloc(A->size2); /* see manual p 123 */
|
2420
2390
|
V = gsl_matrix_alloc(A->size2, A->size2);
|
@@ -2423,8 +2393,8 @@ static VALUE rb_gsl_linalg_SV_solve(int argc, VALUE *argv, VALUE obj)
|
|
2423
2393
|
}
|
2424
2394
|
break;
|
2425
2395
|
default:
|
2426
|
-
if (argc != 1) rb_raise(rb_eArgError,
|
2427
|
-
|
2396
|
+
if (argc != 1) rb_raise(rb_eArgError,
|
2397
|
+
"wrong number of arguments (%d for 1)", argc);
|
2428
2398
|
Data_Get_Struct(obj, gsl_matrix, A);
|
2429
2399
|
U = make_matrix_clone(A);
|
2430
2400
|
if (TYPE(argv[0]) == T_ARRAY) {
|
@@ -2440,7 +2410,7 @@ static VALUE rb_gsl_linalg_SV_solve(int argc, VALUE *argv, VALUE obj)
|
|
2440
2410
|
flagv = 1;
|
2441
2411
|
break;
|
2442
2412
|
}
|
2443
|
-
// x = gsl_vector_alloc(b->size);
|
2413
|
+
// x = gsl_vector_alloc(b->size);
|
2444
2414
|
// Bug report #25842
|
2445
2415
|
x = gsl_vector_alloc(S->size);
|
2446
2416
|
gsl_linalg_SV_solve(U, V, S, b, x);
|
@@ -2487,8 +2457,8 @@ static VALUE rb_gsl_linalg_cholesky_solve_narray(int argc, VALUE *argv, VALUE ob
|
|
2487
2457
|
x = argv[2];
|
2488
2458
|
break;
|
2489
2459
|
default:
|
2490
|
-
rb_raise(rb_eArgError,
|
2491
|
-
|
2460
|
+
rb_raise(rb_eArgError,
|
2461
|
+
"Usage: Cholesky.solve(chol, b) or Cholesky.solve(chol, b, x)");
|
2492
2462
|
break;
|
2493
2463
|
}
|
2494
2464
|
mv = gsl_matrix_view_array((double*)nm->ptr, nm->shape[1], nm->shape[0]);
|
@@ -2518,7 +2488,7 @@ static VALUE rb_gsl_linalg_cholesky_decomp(int argc, VALUE *argv, VALUE obj)
|
|
2518
2488
|
switch(TYPE(obj)) {
|
2519
2489
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2520
2490
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2521
|
-
|
2491
|
+
argc);
|
2522
2492
|
#ifdef HAVE_NARRAY_H
|
2523
2493
|
if (NA_IsNArray(argv[0]))
|
2524
2494
|
return rb_gsl_linalg_cholesky_decomp_narray(argc, argv, obj);
|
@@ -2545,7 +2515,7 @@ static VALUE rb_gsl_linalg_cholesky_solve(int argc, VALUE *argv, VALUE obj)
|
|
2545
2515
|
switch(TYPE(obj)) {
|
2546
2516
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2547
2517
|
if (argc != 2) rb_raise(rb_eArgError, "wrong number of argument (%d for 2)",
|
2548
|
-
|
2518
|
+
argc);
|
2549
2519
|
#ifdef HAVE_NARRAY_H
|
2550
2520
|
if (NA_IsNArray(argv[0]))
|
2551
2521
|
return rb_gsl_linalg_cholesky_solve_narray(argc, argv, obj);
|
@@ -2555,7 +2525,7 @@ static VALUE rb_gsl_linalg_cholesky_solve(int argc, VALUE *argv, VALUE obj)
|
|
2555
2525
|
break;
|
2556
2526
|
default:
|
2557
2527
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2558
|
-
|
2528
|
+
argc);
|
2559
2529
|
vA = obj;
|
2560
2530
|
vb = argv[0];
|
2561
2531
|
break;
|
@@ -2593,7 +2563,7 @@ static VALUE rb_gsl_linalg_cholesky_svx(int argc, VALUE *argv, VALUE obj)
|
|
2593
2563
|
switch(TYPE(obj)) {
|
2594
2564
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2595
2565
|
if (argc != 2) rb_raise(rb_eArgError, "wrong number of argument (%d for 2)",
|
2596
|
-
|
2566
|
+
argc);
|
2597
2567
|
#ifdef HAVE_NARRAY_H
|
2598
2568
|
if (NA_IsNArray(argv[0]))
|
2599
2569
|
return rb_gsl_linalg_cholesky_svx_narray(argc, argv, obj);
|
@@ -2603,7 +2573,7 @@ static VALUE rb_gsl_linalg_cholesky_svx(int argc, VALUE *argv, VALUE obj)
|
|
2603
2573
|
break;
|
2604
2574
|
default:
|
2605
2575
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2606
|
-
|
2576
|
+
argc);
|
2607
2577
|
vA = obj;
|
2608
2578
|
vb = argv[0];
|
2609
2579
|
break;
|
@@ -2632,7 +2602,7 @@ static VALUE rb_gsl_linalg_symmtd_decomp(int argc, VALUE *argv, VALUE obj)
|
|
2632
2602
|
switch (TYPE(obj)) {
|
2633
2603
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2634
2604
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2635
|
-
|
2605
|
+
argc);
|
2636
2606
|
CHECK_MATRIX(argv[0]);
|
2637
2607
|
Data_Get_Struct(argv[0], gsl_matrix, Atmp);
|
2638
2608
|
break;
|
@@ -2657,7 +2627,7 @@ static VALUE rb_gsl_linalg_symmtd_decomp2(int argc, VALUE *argv, VALUE obj)
|
|
2657
2627
|
switch (TYPE(obj)) {
|
2658
2628
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2659
2629
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2660
|
-
|
2630
|
+
argc);
|
2661
2631
|
CHECK_MATRIX(argv[0]);
|
2662
2632
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
2663
2633
|
break;
|
@@ -2679,14 +2649,14 @@ static VALUE rb_gsl_linalg_symmtd_unpack(int argc, VALUE *argv, VALUE obj)
|
|
2679
2649
|
switch (TYPE(obj)) {
|
2680
2650
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2681
2651
|
if (argc != 2) rb_raise(rb_eArgError, "wrong number of argument (%d for 2)",
|
2682
|
-
|
2652
|
+
argc);
|
2683
2653
|
CHECK_MATRIX(argv[0]);
|
2684
2654
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
2685
2655
|
Data_Get_Struct(argv[1], gsl_vector, tau);
|
2686
2656
|
break;
|
2687
2657
|
default:
|
2688
2658
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2689
|
-
|
2659
|
+
argc);
|
2690
2660
|
CHECK_MATRIX(obj);
|
2691
2661
|
Data_Get_Struct(obj, gsl_matrix, A);
|
2692
2662
|
Data_Get_Struct(argv[0], gsl_vector, tau);
|
@@ -2712,7 +2682,7 @@ static VALUE rb_gsl_linalg_symmtd_unpack_T(int argc, VALUE *argv, VALUE obj)
|
|
2712
2682
|
switch (TYPE(obj)) {
|
2713
2683
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2714
2684
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 2)",
|
2715
|
-
|
2685
|
+
argc);
|
2716
2686
|
CHECK_MATRIX(argv[0]);
|
2717
2687
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
2718
2688
|
break;
|
@@ -2740,7 +2710,7 @@ static VALUE rb_gsl_linalg_hermtd_decomp(int argc, VALUE *argv, VALUE obj)
|
|
2740
2710
|
switch (TYPE(obj)) {
|
2741
2711
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2742
2712
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2743
|
-
|
2713
|
+
argc);
|
2744
2714
|
CHECK_MATRIX_COMPLEX(argv[0]);
|
2745
2715
|
Data_Get_Struct(argv[0], gsl_matrix_complex, Atmp);
|
2746
2716
|
break;
|
@@ -2764,7 +2734,7 @@ static VALUE rb_gsl_linalg_hermtd_decomp2(int argc, VALUE *argv, VALUE obj)
|
|
2764
2734
|
switch (TYPE(obj)) {
|
2765
2735
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2766
2736
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2767
|
-
|
2737
|
+
argc);
|
2768
2738
|
CHECK_MATRIX_COMPLEX(argv[0]);
|
2769
2739
|
Data_Get_Struct(argv[0], gsl_matrix_complex, A);
|
2770
2740
|
break;
|
@@ -2787,14 +2757,14 @@ static VALUE rb_gsl_linalg_hermtd_unpack(int argc, VALUE *argv, VALUE obj)
|
|
2787
2757
|
switch (TYPE(obj)) {
|
2788
2758
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2789
2759
|
if (argc != 2) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2790
|
-
|
2760
|
+
argc);
|
2791
2761
|
CHECK_MATRIX_COMPLEX(argv[0]);
|
2792
2762
|
Data_Get_Struct(argv[0], gsl_matrix_complex, A);
|
2793
2763
|
Data_Get_Struct(argv[1], gsl_vector_complex, tau);
|
2794
2764
|
break;
|
2795
2765
|
default:
|
2796
2766
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2797
|
-
|
2767
|
+
argc);
|
2798
2768
|
CHECK_MATRIX_COMPLEX(obj);
|
2799
2769
|
Data_Get_Struct(obj, gsl_matrix_complex, A);
|
2800
2770
|
Data_Get_Struct(argv[0], gsl_vector_complex, tau);
|
@@ -2820,7 +2790,7 @@ static VALUE rb_gsl_linalg_hermtd_unpack_T(int argc, VALUE *argv, VALUE obj)
|
|
2820
2790
|
switch (TYPE(obj)) {
|
2821
2791
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2822
2792
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
2823
|
-
|
2793
|
+
argc);
|
2824
2794
|
CHECK_MATRIX_COMPLEX(argv[0]);
|
2825
2795
|
Data_Get_Struct(argv[0], gsl_matrix_complex, A);
|
2826
2796
|
break;
|
@@ -2852,7 +2822,7 @@ static VALUE rb_gsl_linalg_bidiag_decomp(int argc, VALUE *argv, VALUE obj)
|
|
2852
2822
|
switch (TYPE(obj)) {
|
2853
2823
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2854
2824
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
|
2855
|
-
|
2825
|
+
argc);
|
2856
2826
|
Data_Get_Struct(argv[0], gsl_matrix, Atmp);
|
2857
2827
|
break;
|
2858
2828
|
default:
|
@@ -2880,7 +2850,7 @@ static VALUE rb_gsl_linalg_bidiag_decomp2(int argc, VALUE *argv, VALUE obj)
|
|
2880
2850
|
switch (TYPE(obj)) {
|
2881
2851
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2882
2852
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
|
2883
|
-
|
2853
|
+
argc);
|
2884
2854
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
2885
2855
|
break;
|
2886
2856
|
default:
|
@@ -2906,7 +2876,7 @@ static VALUE rb_gsl_linalg_bidiag_unpack(int argc, VALUE *argv, VALUE obj)
|
|
2906
2876
|
switch (TYPE(obj)) {
|
2907
2877
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2908
2878
|
if (argc != 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for 3)",
|
2909
|
-
|
2879
|
+
argc);
|
2910
2880
|
CHECK_MATRIX(argv[0]);
|
2911
2881
|
CHECK_VECTOR(argv[1]);
|
2912
2882
|
CHECK_VECTOR(argv[2]);
|
@@ -2916,7 +2886,7 @@ static VALUE rb_gsl_linalg_bidiag_unpack(int argc, VALUE *argv, VALUE obj)
|
|
2916
2886
|
break;
|
2917
2887
|
default:
|
2918
2888
|
if (argc != 2) rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
2919
|
-
|
2889
|
+
argc);
|
2920
2890
|
CHECK_MATRIX(obj);
|
2921
2891
|
CHECK_VECTOR(argv[0]);
|
2922
2892
|
CHECK_VECTOR(argv[1]);
|
@@ -2947,8 +2917,8 @@ static VALUE rb_gsl_linalg_bidiag_unpack2(int argc, VALUE *argv, VALUE obj)
|
|
2947
2917
|
|
2948
2918
|
switch (TYPE(obj)) {
|
2949
2919
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2950
|
-
|
2951
|
-
|
2920
|
+
if (argc != 3) rb_raise(rb_eArgError, "wrong number of arguments (%d for 3)",
|
2921
|
+
argc);
|
2952
2922
|
CHECK_MATRIX(argv[0]);
|
2953
2923
|
CHECK_VECTOR(argv[1]);
|
2954
2924
|
CHECK_VECTOR(argv[2]);
|
@@ -2958,7 +2928,7 @@ static VALUE rb_gsl_linalg_bidiag_unpack2(int argc, VALUE *argv, VALUE obj)
|
|
2958
2928
|
break;
|
2959
2929
|
default:
|
2960
2930
|
if (argc != 2) rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
2961
|
-
|
2931
|
+
argc);
|
2962
2932
|
CHECK_MATRIX(obj);
|
2963
2933
|
CHECK_VECTOR(argv[0]);
|
2964
2934
|
CHECK_VECTOR(argv[1]);
|
@@ -2966,7 +2936,7 @@ static VALUE rb_gsl_linalg_bidiag_unpack2(int argc, VALUE *argv, VALUE obj)
|
|
2966
2936
|
Data_Get_Struct(argv[0], gsl_vector, tau_U);
|
2967
2937
|
Data_Get_Struct(argv[1], gsl_vector, tau_V);
|
2968
2938
|
break;
|
2969
|
-
}
|
2939
|
+
}
|
2970
2940
|
V = gsl_matrix_alloc(A->size2, A->size2);
|
2971
2941
|
gsl_linalg_bidiag_unpack2(A, tau_U, tau_V, V);
|
2972
2942
|
vv = Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, V);
|
@@ -2983,7 +2953,7 @@ static VALUE rb_gsl_linalg_bidiag_unpack_B(int argc, VALUE *argv, VALUE obj)
|
|
2983
2953
|
switch (TYPE(obj)) {
|
2984
2954
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
2985
2955
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of arguments (%d for 3)",
|
2986
|
-
|
2956
|
+
argc);
|
2987
2957
|
CHECK_MATRIX(argv[0]);
|
2988
2958
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
2989
2959
|
break;
|
@@ -2991,7 +2961,7 @@ static VALUE rb_gsl_linalg_bidiag_unpack_B(int argc, VALUE *argv, VALUE obj)
|
|
2991
2961
|
CHECK_MATRIX(obj);
|
2992
2962
|
Data_Get_Struct(obj, gsl_matrix, A);
|
2993
2963
|
break;
|
2994
|
-
}
|
2964
|
+
}
|
2995
2965
|
size0 = GSL_MIN(A->size1, A->size2);
|
2996
2966
|
d = gsl_vector_alloc(size0);
|
2997
2967
|
s = gsl_vector_alloc(size0);
|
@@ -3102,7 +3072,7 @@ static VALUE rb_gsl_linalg_HH_solve(int argc, VALUE *argv, VALUE obj)
|
|
3102
3072
|
switch (TYPE(obj)) {
|
3103
3073
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
3104
3074
|
if (argc != 2) rb_raise(rb_eArgError, "wrong number of argument (%d for 2)",
|
3105
|
-
|
3075
|
+
argc);
|
3106
3076
|
#ifdef HAVE_NARRAY_H
|
3107
3077
|
if (NA_IsNArray(argv[0]))
|
3108
3078
|
return rb_gsl_linalg_HH_solve_narray(argc, argv, obj);
|
@@ -3112,7 +3082,7 @@ static VALUE rb_gsl_linalg_HH_solve(int argc, VALUE *argv, VALUE obj)
|
|
3112
3082
|
break;
|
3113
3083
|
default:
|
3114
3084
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
3115
|
-
|
3085
|
+
argc);
|
3116
3086
|
vA = obj;
|
3117
3087
|
vb = argv[0];
|
3118
3088
|
break;
|
@@ -3143,13 +3113,13 @@ static VALUE rb_gsl_linalg_HH_solve_bang(int argc, VALUE *argv, VALUE obj)
|
|
3143
3113
|
switch (TYPE(obj)) {
|
3144
3114
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
3145
3115
|
if (argc != 2) rb_raise(rb_eArgError, "wrong number of argument (%d for 2)",
|
3146
|
-
|
3116
|
+
argc);
|
3147
3117
|
vA = argv[0];
|
3148
3118
|
vb = argv[1];
|
3149
3119
|
break;
|
3150
3120
|
default:
|
3151
3121
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
3152
|
-
|
3122
|
+
argc);
|
3153
3123
|
vA = obj;
|
3154
3124
|
vb = argv[0];
|
3155
3125
|
break;
|
@@ -3177,7 +3147,7 @@ static VALUE rb_gsl_linalg_HH_svx(int argc, VALUE *argv, VALUE obj)
|
|
3177
3147
|
switch (TYPE(obj)) {
|
3178
3148
|
case T_MODULE: case T_CLASS: case T_OBJECT:
|
3179
3149
|
if (argc != 2) rb_raise(rb_eArgError, "wrong number of argument (%d for 2)",
|
3180
|
-
|
3150
|
+
argc);
|
3181
3151
|
#ifdef HAVE_NARRAY_H
|
3182
3152
|
if (NA_IsNArray(argv[0]))
|
3183
3153
|
return rb_gsl_linalg_HH_svx_narray(argc, argv, obj);
|
@@ -3187,7 +3157,7 @@ static VALUE rb_gsl_linalg_HH_svx(int argc, VALUE *argv, VALUE obj)
|
|
3187
3157
|
break;
|
3188
3158
|
default:
|
3189
3159
|
if (argc != 1) rb_raise(rb_eArgError, "wrong number of argument (%d for 1)",
|
3190
|
-
|
3160
|
+
argc);
|
3191
3161
|
vA = obj;
|
3192
3162
|
vb = argv[0];
|
3193
3163
|
break;
|
@@ -3215,9 +3185,8 @@ static VALUE rb_gsl_linalg_solve_symm_tridiag(VALUE obj, VALUE dd, VALUE ee, VAL
|
|
3215
3185
|
return Data_Wrap_Struct(cgsl_vector_col, 0, gsl_vector_free, x);
|
3216
3186
|
}
|
3217
3187
|
|
3218
|
-
#ifdef GSL_1_2_LATER
|
3219
3188
|
static VALUE rb_gsl_linalg_solve_tridiag(VALUE obj, VALUE dd, VALUE ee, VALUE ff,
|
3220
|
-
|
3189
|
+
VALUE bb)
|
3221
3190
|
{
|
3222
3191
|
gsl_vector *b = NULL, *x = NULL, *d = NULL, *e = NULL, *f = NULL;
|
3223
3192
|
|
@@ -3244,8 +3213,8 @@ static VALUE rb_gsl_linalg_solve_symm_cyc_tridiag(VALUE obj, VALUE dd, VALUE ee,
|
|
3244
3213
|
return Data_Wrap_Struct(cgsl_vector_col, 0, gsl_vector_free, x);
|
3245
3214
|
}
|
3246
3215
|
|
3247
|
-
static VALUE rb_gsl_linalg_solve_cyc_tridiag(VALUE obj, VALUE dd, VALUE ee,
|
3248
|
-
|
3216
|
+
static VALUE rb_gsl_linalg_solve_cyc_tridiag(VALUE obj, VALUE dd, VALUE ee,
|
3217
|
+
VALUE ff, VALUE bb)
|
3249
3218
|
{
|
3250
3219
|
gsl_vector *b = NULL, *x = NULL, *d = NULL, *e = NULL, *f = NULL;
|
3251
3220
|
Data_Get_Struct(dd, gsl_vector, d);
|
@@ -3256,11 +3225,10 @@ static VALUE rb_gsl_linalg_solve_cyc_tridiag(VALUE obj, VALUE dd, VALUE ee,
|
|
3256
3225
|
gsl_linalg_solve_cyc_tridiag(d, e, f, b, x);
|
3257
3226
|
return Data_Wrap_Struct(cgsl_vector_col, 0, gsl_vector_free, x);
|
3258
3227
|
}
|
3259
|
-
#endif
|
3260
3228
|
|
3261
3229
|
static void rb_gsl_linalg_balance_columns_init(int argc, VALUE *argv, VALUE obj,
|
3262
|
-
|
3263
|
-
|
3230
|
+
VALUE *mat, VALUE *vec,
|
3231
|
+
gsl_matrix **M, gsl_vector **V)
|
3264
3232
|
{
|
3265
3233
|
gsl_matrix *A = NULL;
|
3266
3234
|
gsl_vector *D = NULL;
|
@@ -3334,92 +3302,6 @@ static VALUE rb_gsl_linalg_balance_columns(int argc, VALUE *argv, VALUE obj)
|
|
3334
3302
|
return rb_ary_new3(2, mat, vec);
|
3335
3303
|
}
|
3336
3304
|
|
3337
|
-
#ifdef HAVE_NARRAY_H
|
3338
|
-
static VALUE rb_gsl_linalg_QR_decomp_narray(int argc, VALUE *argv, VALUE obj)
|
3339
|
-
{
|
3340
|
-
struct NARRAY *na;
|
3341
|
-
gsl_matrix_view mv;
|
3342
|
-
gsl_vector_view vv;
|
3343
|
-
int shapem[2], shapev[1];
|
3344
|
-
VALUE qr, tau;
|
3345
|
-
if (argc < 1) rb_raise(rb_eArgError, "too few arguments.");
|
3346
|
-
GetNArray(argv[0], na);
|
3347
|
-
shapem[0] = na->shape[1];
|
3348
|
-
shapem[1] = na->shape[1];
|
3349
|
-
shapev[0] = shapem[0];
|
3350
|
-
qr = na_make_object(NA_DFLOAT, 2, shapem, CLASS_OF(argv[0]));
|
3351
|
-
tau = na_make_object(NA_DFLOAT, 1, shapev, cNVector);
|
3352
|
-
memcpy(NA_PTR_TYPE(qr,double*),na->ptr,sizeof(double)*shapem[0]*shapem[1]);
|
3353
|
-
mv = gsl_matrix_view_array(NA_PTR_TYPE(qr,double*), shapem[0], shapem[1]);
|
3354
|
-
vv = gsl_vector_view_array(NA_PTR_TYPE(tau,double*), shapev[0]);
|
3355
|
-
gsl_linalg_QR_decomp(&mv.matrix, &vv.vector);
|
3356
|
-
return rb_ary_new3(2, qr, tau);
|
3357
|
-
}
|
3358
|
-
|
3359
|
-
static VALUE rb_gsl_linalg_QR_unpack_narray(int argc, VALUE *argv, VALUE obj)
|
3360
|
-
{
|
3361
|
-
struct NARRAY *m, *tau;
|
3362
|
-
gsl_matrix_view mv, mq, mr;
|
3363
|
-
gsl_vector_view vv;
|
3364
|
-
int shape[2];
|
3365
|
-
VALUE q, r;
|
3366
|
-
if (argc != 2) rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
3367
|
-
argc);
|
3368
|
-
GetNArray(argv[0], m);
|
3369
|
-
GetNArray(argv[1], tau);
|
3370
|
-
mv = gsl_matrix_view_array((double*)m->ptr, m->shape[1], m->shape[0]);
|
3371
|
-
vv = gsl_vector_view_array((double*)tau->ptr, tau->shape[0]);
|
3372
|
-
shape[0] = m->shape[1];
|
3373
|
-
shape[1] = m->shape[1];
|
3374
|
-
q = na_make_object(NA_DFLOAT, 2, shape, CLASS_OF(argv[0]));
|
3375
|
-
shape[0] = m->shape[1];
|
3376
|
-
shape[1] = m->shape[0];
|
3377
|
-
r = na_make_object(NA_DFLOAT, 2, shape, CLASS_OF(argv[0]));
|
3378
|
-
mq = gsl_matrix_view_array(NA_PTR_TYPE(q,double*), m->shape[1], m->shape[1]);
|
3379
|
-
mr = gsl_matrix_view_array(NA_PTR_TYPE(r,double*), m->shape[1], m->shape[0]);
|
3380
|
-
// printf("OK 4 %d %d\n", mq.matrix.size1, mr.matrix.size2);
|
3381
|
-
gsl_linalg_QR_unpack(&mv.matrix, &vv.vector, &mq.matrix, &mr.matrix);
|
3382
|
-
// printf("OK 5\n");
|
3383
|
-
return rb_ary_new3(2, q, r);
|
3384
|
-
}
|
3385
|
-
|
3386
|
-
static VALUE rb_gsl_linalg_QR_solve_narray(int argc, VALUE *argv, VALUE obj)
|
3387
|
-
{
|
3388
|
-
struct NARRAY *qr, *tau, *b;
|
3389
|
-
VALUE x;
|
3390
|
-
gsl_matrix_view mv;
|
3391
|
-
gsl_vector_view tv, bv, xv;
|
3392
|
-
if (argc != 3) rb_raise(rb_eArgError, "Usage: QR.solve(qr, tau, b)");
|
3393
|
-
GetNArray(argv[0], qr);
|
3394
|
-
GetNArray(argv[1], tau);
|
3395
|
-
GetNArray(argv[2], b);
|
3396
|
-
x = na_make_object(NA_DFLOAT, 1, b->shape, CLASS_OF(argv[2]));
|
3397
|
-
mv = gsl_matrix_view_array((double*)qr->ptr, qr->shape[1], qr->shape[0]);
|
3398
|
-
tv = gsl_vector_view_array((double*)tau->ptr, tau->shape[0]);
|
3399
|
-
bv = gsl_vector_view_array((double*)b->ptr, b->shape[0]);
|
3400
|
-
xv = gsl_vector_view_array(NA_PTR_TYPE(x,double*), b->shape[0]);
|
3401
|
-
gsl_linalg_QR_solve(&mv.matrix, &tv.vector, &bv.vector, &xv.vector);
|
3402
|
-
return x;
|
3403
|
-
}
|
3404
|
-
static VALUE rb_gsl_linalg_QR_svx_narray(int argc, VALUE *argv, VALUE obj)
|
3405
|
-
{
|
3406
|
-
struct NARRAY *qr, *tau, *b;
|
3407
|
-
gsl_matrix_view mv;
|
3408
|
-
gsl_vector_view tv, bv;
|
3409
|
-
if (argc != 3) rb_raise(rb_eArgError, "Usage: QR.solve(qr, tau, b)");
|
3410
|
-
GetNArray(argv[0], qr);
|
3411
|
-
GetNArray(argv[1], tau);
|
3412
|
-
GetNArray(argv[2], b);
|
3413
|
-
mv = gsl_matrix_view_array((double*)qr->ptr, qr->shape[1], qr->shape[0]);
|
3414
|
-
tv = gsl_vector_view_array((double*)tau->ptr, tau->shape[0]);
|
3415
|
-
bv = gsl_vector_view_array((double*)b->ptr, b->shape[0]);
|
3416
|
-
gsl_linalg_QR_svx(&mv.matrix, &tv.vector, &bv.vector);
|
3417
|
-
return argv[2];
|
3418
|
-
}
|
3419
|
-
|
3420
|
-
#endif
|
3421
|
-
|
3422
|
-
#ifdef GSL_1_9_LATER
|
3423
3305
|
static VALUE rb_gsl_linalg_hessenberg_decomp(VALUE module, VALUE AA)
|
3424
3306
|
{
|
3425
3307
|
gsl_matrix *A = NULL, *Atmp = NULL;
|
@@ -3454,7 +3336,7 @@ static VALUE rb_gsl_linalg_hessenberg_unpack_accum(int argc, VALUE *argv, VALUE
|
|
3454
3336
|
gsl_matrix *H = NULL, *V = NULL;
|
3455
3337
|
gsl_vector *tau = NULL;
|
3456
3338
|
size_t i;
|
3457
|
-
VALUE val;
|
3339
|
+
VALUE val = Qnil;
|
3458
3340
|
switch (argc) {
|
3459
3341
|
case 2:
|
3460
3342
|
/* nothing to do */
|
@@ -3493,7 +3375,7 @@ static VALUE rb_gsl_linalg_hesstri_decomp(int argc, VALUE *argv, VALUE module)
|
|
3493
3375
|
gsl_matrix *A = NULL, *B = NULL, *Anew, *Bnew;
|
3494
3376
|
gsl_matrix *U = NULL, *V = NULL;
|
3495
3377
|
gsl_vector *work = NULL;
|
3496
|
-
VALUE vH, vR, vU, vV, ary;
|
3378
|
+
VALUE vH, vR, vU = Qnil, vV = Qnil, ary;
|
3497
3379
|
int flag = 0;
|
3498
3380
|
switch (argc) {
|
3499
3381
|
case 2:
|
@@ -3501,7 +3383,7 @@ static VALUE rb_gsl_linalg_hesstri_decomp(int argc, VALUE *argv, VALUE module)
|
|
3501
3383
|
break;
|
3502
3384
|
case 3:
|
3503
3385
|
CHECK_VECTOR(argv[2]);
|
3504
|
-
Data_Get_Struct(argv[2], gsl_vector, work);
|
3386
|
+
Data_Get_Struct(argv[2], gsl_vector, work);
|
3505
3387
|
break;
|
3506
3388
|
case 4:
|
3507
3389
|
CHECK_MATRIX(argv[2]);
|
@@ -3509,7 +3391,7 @@ static VALUE rb_gsl_linalg_hesstri_decomp(int argc, VALUE *argv, VALUE module)
|
|
3509
3391
|
Data_Get_Struct(argv[2], gsl_matrix, U);
|
3510
3392
|
Data_Get_Struct(argv[3], gsl_matrix, V);
|
3511
3393
|
flag = 1;
|
3512
|
-
break;
|
3394
|
+
break;
|
3513
3395
|
case 5:
|
3514
3396
|
CHECK_MATRIX(argv[2]);
|
3515
3397
|
CHECK_MATRIX(argv[3]);
|
@@ -3524,17 +3406,17 @@ static VALUE rb_gsl_linalg_hesstri_decomp(int argc, VALUE *argv, VALUE module)
|
|
3524
3406
|
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 2-55)", argc);
|
3525
3407
|
}
|
3526
3408
|
CHECK_MATRIX(argv[0]);
|
3527
|
-
CHECK_MATRIX(argv[1]);
|
3409
|
+
CHECK_MATRIX(argv[1]);
|
3528
3410
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
3529
3411
|
Data_Get_Struct(argv[1], gsl_matrix, B);
|
3530
3412
|
Anew = make_matrix_clone(A);
|
3531
|
-
Bnew = make_matrix_clone(B);
|
3413
|
+
Bnew = make_matrix_clone(B);
|
3532
3414
|
if (flag == 1) work = gsl_vector_alloc(A->size1);
|
3533
3415
|
gsl_linalg_hesstri_decomp(Anew, Bnew, U, V, work);
|
3534
3416
|
if (flag == 1) gsl_vector_free(work);
|
3535
3417
|
vH = Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Anew);
|
3536
|
-
vR = Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Bnew);
|
3537
|
-
if (argc == 2 || argc == 3) {
|
3418
|
+
vR = Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, Bnew);
|
3419
|
+
if (argc == 2 || argc == 3) {
|
3538
3420
|
ary = rb_ary_new3(2, vH, vR);
|
3539
3421
|
} else {
|
3540
3422
|
ary = rb_ary_new3(4, vH, vR, vU, vV);
|
@@ -3546,7 +3428,7 @@ static VALUE rb_gsl_linalg_hesstri_decomp_bang(int argc, VALUE *argv, VALUE modu
|
|
3546
3428
|
gsl_matrix *A = NULL, *B = NULL;
|
3547
3429
|
gsl_matrix *U = NULL, *V = NULL;
|
3548
3430
|
gsl_vector *work = NULL;
|
3549
|
-
VALUE vH, vR, vU, vV, ary;
|
3431
|
+
VALUE vH, vR, vU = Qnil, vV = Qnil, ary;
|
3550
3432
|
int flag = 0;
|
3551
3433
|
switch (argc) {
|
3552
3434
|
case 2:
|
@@ -3554,7 +3436,7 @@ static VALUE rb_gsl_linalg_hesstri_decomp_bang(int argc, VALUE *argv, VALUE modu
|
|
3554
3436
|
break;
|
3555
3437
|
case 3:
|
3556
3438
|
CHECK_VECTOR(argv[2]);
|
3557
|
-
Data_Get_Struct(argv[2], gsl_vector, work);
|
3439
|
+
Data_Get_Struct(argv[2], gsl_vector, work);
|
3558
3440
|
break;
|
3559
3441
|
case 4:
|
3560
3442
|
CHECK_MATRIX(argv[2]);
|
@@ -3562,7 +3444,7 @@ static VALUE rb_gsl_linalg_hesstri_decomp_bang(int argc, VALUE *argv, VALUE modu
|
|
3562
3444
|
Data_Get_Struct(argv[2], gsl_matrix, U);
|
3563
3445
|
Data_Get_Struct(argv[3], gsl_matrix, V);
|
3564
3446
|
flag = 1;
|
3565
|
-
break;
|
3447
|
+
break;
|
3566
3448
|
case 5:
|
3567
3449
|
CHECK_MATRIX(argv[2]);
|
3568
3450
|
CHECK_MATRIX(argv[3]);
|
@@ -3577,7 +3459,7 @@ static VALUE rb_gsl_linalg_hesstri_decomp_bang(int argc, VALUE *argv, VALUE modu
|
|
3577
3459
|
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 2-55)", argc);
|
3578
3460
|
}
|
3579
3461
|
CHECK_MATRIX(argv[0]);
|
3580
|
-
CHECK_MATRIX(argv[1]);
|
3462
|
+
CHECK_MATRIX(argv[1]);
|
3581
3463
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
3582
3464
|
Data_Get_Struct(argv[1], gsl_matrix, B);
|
3583
3465
|
if (flag == 1) work = gsl_vector_alloc(A->size1);
|
@@ -3585,7 +3467,7 @@ static VALUE rb_gsl_linalg_hesstri_decomp_bang(int argc, VALUE *argv, VALUE modu
|
|
3585
3467
|
if (flag == 1) gsl_vector_free(work);
|
3586
3468
|
vH = argv[0];
|
3587
3469
|
vR = argv[1];
|
3588
|
-
if (argc == 2 || argc == 3) {
|
3470
|
+
if (argc == 2 || argc == 3) {
|
3589
3471
|
ary = rb_ary_new3(2, vH, vR);
|
3590
3472
|
} else {
|
3591
3473
|
ary = rb_ary_new3(4, vH, vR, vU, vV);
|
@@ -3611,7 +3493,7 @@ static VALUE rb_gsl_linalg_balance_matrix(int argc, VALUE *argv, VALUE module)
|
|
3611
3493
|
CHECK_VECTOR(argv[1]);
|
3612
3494
|
Data_Get_Struct(argv[0], gsl_matrix, A);
|
3613
3495
|
Data_Get_Struct(argv[1], gsl_vector, D);
|
3614
|
-
Anew = make_matrix_clone(A);
|
3496
|
+
Anew = make_matrix_clone(A);
|
3615
3497
|
vD = argv[1];
|
3616
3498
|
break;
|
3617
3499
|
default:
|
@@ -3646,7 +3528,6 @@ static VALUE rb_gsl_linalg_balance_matrix2(int argc, VALUE *argv, VALUE module)
|
|
3646
3528
|
}
|
3647
3529
|
return Qtrue;
|
3648
3530
|
}
|
3649
|
-
#endif
|
3650
3531
|
|
3651
3532
|
void Init_gsl_linalg_complex(VALUE module);
|
3652
3533
|
void Init_gsl_linalg(VALUE module)
|
@@ -3665,6 +3546,7 @@ void Init_gsl_linalg(VALUE module)
|
|
3665
3546
|
VALUE mgsl_linalg_tridiag;
|
3666
3547
|
VALUE mgsl_linalg_HH;
|
3667
3548
|
VALUE mgsl_linalg_Householder;
|
3549
|
+
VALUE mhessen;
|
3668
3550
|
|
3669
3551
|
mgsl_linalg = rb_define_module_under(module, "Linalg");
|
3670
3552
|
mgsl_linalg_LU = rb_define_module_under(mgsl_linalg, "LU");
|
@@ -3767,7 +3649,7 @@ void Init_gsl_linalg(VALUE module)
|
|
3767
3649
|
|
3768
3650
|
rb_define_module_function(mgsl_linalg_QR, "QTvec", rb_gsl_linalg_QR_QTvec, -1);
|
3769
3651
|
rb_define_method(cgsl_matrix_QR, "QTvec", rb_gsl_linalg_QR_QTvec, -1);
|
3770
|
-
|
3652
|
+
rb_define_module_function(mgsl_linalg_QR, "Qvec", rb_gsl_linalg_QR_Qvec, -1);
|
3771
3653
|
rb_define_method(cgsl_matrix_QR, "Qvec", rb_gsl_linalg_QR_Qvec, -1);
|
3772
3654
|
|
3773
3655
|
rb_define_module_function(mgsl_linalg_QR, "Rsolve", rb_gsl_linalg_QR_Rsolve, -1);
|
@@ -3793,7 +3675,7 @@ void Init_gsl_linalg(VALUE module)
|
|
3793
3675
|
rb_define_module_function(mgsl_linalg_QRPT, "decomp!", rb_gsl_linalg_QRPT_decomp_bang, -1);
|
3794
3676
|
rb_define_method(cgsl_matrix, "QRPT_decomp!", rb_gsl_linalg_QRPT_decomp_bang, -1);
|
3795
3677
|
|
3796
|
-
|
3678
|
+
rb_define_module_function(mgsl_linalg_QRPT, "decomp2", rb_gsl_linalg_QRPT_decomp2, -1);
|
3797
3679
|
rb_define_method(cgsl_matrix, "QRPT_decomp2", rb_gsl_linalg_QRPT_decomp2, -1);
|
3798
3680
|
|
3799
3681
|
rb_define_module_function(mgsl_linalg_QRPT, "solve", rb_gsl_linalg_QRPT_solve, -1);
|
@@ -3852,9 +3734,9 @@ void Init_gsl_linalg(VALUE module)
|
|
3852
3734
|
/*****/
|
3853
3735
|
rb_define_module_function(mgsl_linalg_hermtd, "decomp", rb_gsl_linalg_hermtd_decomp, -1);
|
3854
3736
|
rb_define_method(cgsl_matrix, "hermtd_decomp", rb_gsl_linalg_hermtd_decomp, -1);
|
3855
|
-
|
3737
|
+
rb_define_module_function(mgsl_linalg_hermtd, "decomp!", rb_gsl_linalg_hermtd_decomp2, -1);
|
3856
3738
|
rb_define_method(cgsl_matrix, "hermtd_decomp!", rb_gsl_linalg_hermtd_decomp2, -1);
|
3857
|
-
|
3739
|
+
|
3858
3740
|
rb_define_method(cgsl_matrix_complex, "hermtd_unpack", rb_gsl_linalg_hermtd_unpack, -1);
|
3859
3741
|
rb_define_module_function(mgsl_linalg_hermtd, "unpack", rb_gsl_linalg_hermtd_unpack, -1);
|
3860
3742
|
rb_define_method(cgsl_matrix_complex, "hermtd_unpack_T", rb_gsl_linalg_hermtd_unpack_T, -1);
|
@@ -3880,35 +3762,35 @@ void Init_gsl_linalg(VALUE module)
|
|
3880
3762
|
rb_define_module_function(mgsl_linalg, "bidiag_unpack_B", rb_gsl_linalg_bidiag_unpack_B, -1);
|
3881
3763
|
rb_define_module_function(mgsl_linalg_bidiag, "unpack_B", rb_gsl_linalg_bidiag_unpack_B, -1);
|
3882
3764
|
/*****/
|
3883
|
-
rb_define_module_function(mgsl_linalg, "householder_transform",
|
3884
|
-
|
3885
|
-
rb_define_module_function(mgsl_linalg_Householder, "transform",
|
3886
|
-
|
3887
|
-
rb_define_module_function(mgsl_linalg_HH, "transform",
|
3888
|
-
|
3889
|
-
rb_define_method(cgsl_vector, "householder_transform",
|
3890
|
-
|
3891
|
-
|
3892
|
-
rb_define_module_function(mgsl_linalg, "householder_hm",
|
3893
|
-
|
3894
|
-
rb_define_module_function(mgsl_linalg_Householder, "hm",
|
3895
|
-
|
3896
|
-
rb_define_module_function(mgsl_linalg_HH, "hm",
|
3897
|
-
|
3898
|
-
|
3899
|
-
rb_define_module_function(mgsl_linalg, "householder_mh",
|
3900
|
-
|
3901
|
-
rb_define_module_function(mgsl_linalg_Householder, "mh",
|
3902
|
-
|
3903
|
-
rb_define_module_function(mgsl_linalg_HH, "mh",
|
3904
|
-
|
3905
|
-
|
3906
|
-
rb_define_module_function(mgsl_linalg, "householder_hv",
|
3907
|
-
|
3908
|
-
rb_define_module_function(mgsl_linalg_Householder, "hv",
|
3909
|
-
|
3910
|
-
rb_define_module_function(mgsl_linalg_HH, "hv",
|
3911
|
-
|
3765
|
+
rb_define_module_function(mgsl_linalg, "householder_transform",
|
3766
|
+
rb_gsl_linalg_householder_transform, -1);
|
3767
|
+
rb_define_module_function(mgsl_linalg_Householder, "transform",
|
3768
|
+
rb_gsl_linalg_householder_transform, -1);
|
3769
|
+
rb_define_module_function(mgsl_linalg_HH, "transform",
|
3770
|
+
rb_gsl_linalg_householder_transform, -1);
|
3771
|
+
rb_define_method(cgsl_vector, "householder_transform",
|
3772
|
+
rb_gsl_linalg_householder_transform, -1);
|
3773
|
+
|
3774
|
+
rb_define_module_function(mgsl_linalg, "householder_hm",
|
3775
|
+
rb_gsl_linalg_householder_hm, 3);
|
3776
|
+
rb_define_module_function(mgsl_linalg_Householder, "hm",
|
3777
|
+
rb_gsl_linalg_householder_hm, 3);
|
3778
|
+
rb_define_module_function(mgsl_linalg_HH, "hm",
|
3779
|
+
rb_gsl_linalg_householder_hm, 3);
|
3780
|
+
|
3781
|
+
rb_define_module_function(mgsl_linalg, "householder_mh",
|
3782
|
+
rb_gsl_linalg_householder_mh, 3);
|
3783
|
+
rb_define_module_function(mgsl_linalg_Householder, "mh",
|
3784
|
+
rb_gsl_linalg_householder_mh, 3);
|
3785
|
+
rb_define_module_function(mgsl_linalg_HH, "mh",
|
3786
|
+
rb_gsl_linalg_householder_mh, 3);
|
3787
|
+
|
3788
|
+
rb_define_module_function(mgsl_linalg, "householder_hv",
|
3789
|
+
rb_gsl_linalg_householder_hv, 3);
|
3790
|
+
rb_define_module_function(mgsl_linalg_Householder, "hv",
|
3791
|
+
rb_gsl_linalg_householder_hv, 3);
|
3792
|
+
rb_define_module_function(mgsl_linalg_HH, "hv",
|
3793
|
+
rb_gsl_linalg_householder_hv, 3);
|
3912
3794
|
|
3913
3795
|
rb_define_module_function(mgsl_linalg_HH, "solve", rb_gsl_linalg_HH_solve, -1);
|
3914
3796
|
rb_define_module_function(mgsl_linalg_HH, "solve!", rb_gsl_linalg_HH_solve_bang, -1);
|
@@ -3923,32 +3805,29 @@ void Init_gsl_linalg(VALUE module)
|
|
3923
3805
|
|
3924
3806
|
rb_define_module_function(mgsl_linalg_tridiag, "solve_symm", rb_gsl_linalg_solve_symm_tridiag, 3);
|
3925
3807
|
|
3926
|
-
#ifdef GSL_1_2_LATER
|
3927
3808
|
rb_define_module_function(mgsl_linalg, "solve_tridiag", rb_gsl_linalg_solve_tridiag, 4);
|
3928
3809
|
rb_define_module_function(mgsl_linalg_tridiag, "solve", rb_gsl_linalg_solve_tridiag, 4);
|
3929
3810
|
rb_define_module_function(mgsl_linalg, "solve_symm_cyc_tridiag", rb_gsl_linalg_solve_symm_cyc_tridiag, 3);
|
3930
3811
|
rb_define_module_function(mgsl_linalg, "solve_cyc_tridiag", rb_gsl_linalg_solve_cyc_tridiag, 4);
|
3931
3812
|
rb_define_module_function(mgsl_linalg_tridiag, "solve_symm_cyc", rb_gsl_linalg_solve_symm_cyc_tridiag, 3);
|
3932
3813
|
rb_define_module_function(mgsl_linalg_tridiag, "solve_cyc", rb_gsl_linalg_solve_cyc_tridiag, 4);
|
3933
|
-
#endif
|
3934
3814
|
|
3935
3815
|
/*****/
|
3936
|
-
rb_define_module_function(mgsl_linalg, "balance_columns!",
|
3937
|
-
|
3938
|
-
rb_define_method(cgsl_matrix, "balance_columns!",
|
3939
|
-
|
3940
|
-
rb_define_module_function(mgsl_linalg, "balance_columns",
|
3941
|
-
|
3942
|
-
rb_define_method(cgsl_matrix, "balance_columns",
|
3943
|
-
|
3816
|
+
rb_define_module_function(mgsl_linalg, "balance_columns!",
|
3817
|
+
rb_gsl_linalg_balance_columns_bang, -1);
|
3818
|
+
rb_define_method(cgsl_matrix, "balance_columns!",
|
3819
|
+
rb_gsl_linalg_balance_columns_bang, -1);
|
3820
|
+
rb_define_module_function(mgsl_linalg, "balance_columns",
|
3821
|
+
rb_gsl_linalg_balance_columns, -1);
|
3822
|
+
rb_define_method(cgsl_matrix, "balance_columns",
|
3823
|
+
rb_gsl_linalg_balance_columns, -1);
|
3944
3824
|
rb_define_alias(cgsl_matrix, "balance", "balance_columns");
|
3945
3825
|
rb_define_alias(cgsl_matrix, "balanc", "balance_columns");
|
3946
3826
|
/*****/
|
3947
3827
|
|
3948
|
-
Init_gsl_linalg_complex(mgsl_linalg);
|
3828
|
+
Init_gsl_linalg_complex(mgsl_linalg);
|
3949
3829
|
|
3950
3830
|
/** GSL-1.6 **/
|
3951
|
-
#ifdef GSL_1_6_LATER
|
3952
3831
|
rb_define_module_function(mgsl_linalg, "LQ_decomp", rb_gsl_linalg_LQ_decomp, -1);
|
3953
3832
|
rb_define_module_function(mgsl_linalg_LQ, "decomp", rb_gsl_linalg_LQ_decomp, -1);
|
3954
3833
|
rb_define_method(cgsl_matrix, "LQ_decomp", rb_gsl_linalg_LQ_decomp, -1);
|
@@ -3997,7 +3876,7 @@ void Init_gsl_linalg(VALUE module)
|
|
3997
3876
|
rb_define_module_function(mgsl_linalg_PTLQ, "decomp!", rb_gsl_linalg_PTLQ_decomp_bang, -1);
|
3998
3877
|
rb_define_method(cgsl_matrix, "PTLQ_decomp!", rb_gsl_linalg_PTLQ_decomp_bang, -1);
|
3999
3878
|
|
4000
|
-
|
3879
|
+
rb_define_module_function(mgsl_linalg_PTLQ, "decomp2", rb_gsl_linalg_PTLQ_decomp2, -1);
|
4001
3880
|
rb_define_method(cgsl_matrix, "PTLQ_decomp2", rb_gsl_linalg_PTLQ_decomp2, -1);
|
4002
3881
|
|
4003
3882
|
rb_define_module_function(mgsl_linalg_PTLQ, "solve_T", rb_gsl_linalg_PTLQ_solve, -1);
|
@@ -4016,27 +3895,21 @@ void Init_gsl_linalg(VALUE module)
|
|
4016
3895
|
rb_define_module_function(mgsl_linalg_PTLQ, "Lsvx_T", rb_gsl_linalg_PTLQ_Lsvx, -1);
|
4017
3896
|
rb_define_method(cgsl_matrix_PTLQ, "Lsvx_T", rb_gsl_linalg_PTLQ_Lsvx, -1);
|
4018
3897
|
|
4019
|
-
#endif
|
4020
|
-
|
4021
|
-
#ifdef GSL_1_9_LATER
|
4022
|
-
VALUE mhessen;
|
4023
3898
|
mhessen = rb_define_module_under(mgsl_linalg, "Hessenberg");
|
4024
3899
|
rb_define_module_function(mhessen, "decomp", rb_gsl_linalg_hessenberg_decomp, 1);
|
4025
|
-
rb_define_module_function(mgsl_linalg, "heesenberg_decomp", rb_gsl_linalg_hessenberg_decomp, 1);
|
4026
|
-
rb_define_module_function(mhessen, "unpack", rb_gsl_linalg_hessenberg_unpack, 2);
|
4027
|
-
rb_define_module_function(mgsl_linalg, "hessenberg_unpack", rb_gsl_linalg_hessenberg_unpack, 2);
|
4028
|
-
rb_define_module_function(mhessen, "unpack_accum", rb_gsl_linalg_hessenberg_unpack_accum, -1);
|
4029
|
-
rb_define_module_function(mgsl_linalg, "hessenberg_unpack_accum", rb_gsl_linalg_hessenberg_unpack_accum, -1);
|
4030
|
-
rb_define_module_function(mhessen, "set_zero", rb_gsl_linalg_hessenberg_set_zero, 1);
|
4031
|
-
rb_define_module_function(mgsl_linalg, "hessenberg_set_zero", rb_gsl_linalg_hessenberg_set_zero, 1);
|
4032
|
-
|
3900
|
+
rb_define_module_function(mgsl_linalg, "heesenberg_decomp", rb_gsl_linalg_hessenberg_decomp, 1);
|
3901
|
+
rb_define_module_function(mhessen, "unpack", rb_gsl_linalg_hessenberg_unpack, 2);
|
3902
|
+
rb_define_module_function(mgsl_linalg, "hessenberg_unpack", rb_gsl_linalg_hessenberg_unpack, 2);
|
3903
|
+
rb_define_module_function(mhessen, "unpack_accum", rb_gsl_linalg_hessenberg_unpack_accum, -1);
|
3904
|
+
rb_define_module_function(mgsl_linalg, "hessenberg_unpack_accum", rb_gsl_linalg_hessenberg_unpack_accum, -1);
|
3905
|
+
rb_define_module_function(mhessen, "set_zero", rb_gsl_linalg_hessenberg_set_zero, 1);
|
3906
|
+
rb_define_module_function(mgsl_linalg, "hessenberg_set_zero", rb_gsl_linalg_hessenberg_set_zero, 1);
|
3907
|
+
|
4033
3908
|
rb_define_module_function(mgsl_linalg, "hesstri_decomp", rb_gsl_linalg_hesstri_decomp, -1);
|
4034
3909
|
rb_define_module_function(mgsl_linalg, "hesstri_decomp!", rb_gsl_linalg_hesstri_decomp_bang, -1);
|
4035
|
-
|
4036
|
-
rb_define_module_function(mgsl_linalg, "balance_matrix", rb_gsl_linalg_balance_matrix, -1);
|
4037
|
-
rb_define_module_function(mgsl_linalg, "balance_matrix!", rb_gsl_linalg_balance_matrix2, -1);
|
4038
|
-
rb_define_module_function(mgsl_linalg, "balance", rb_gsl_linalg_balance_matrix, -1);
|
4039
|
-
rb_define_module_function(mgsl_linalg, "balance!", rb_gsl_linalg_balance_matrix2, -1);
|
4040
|
-
#endif
|
4041
3910
|
|
3911
|
+
rb_define_module_function(mgsl_linalg, "balance_matrix", rb_gsl_linalg_balance_matrix, -1);
|
3912
|
+
rb_define_module_function(mgsl_linalg, "balance_matrix!", rb_gsl_linalg_balance_matrix2, -1);
|
3913
|
+
rb_define_module_function(mgsl_linalg, "balance", rb_gsl_linalg_balance_matrix, -1);
|
3914
|
+
rb_define_module_function(mgsl_linalg, "balance!", rb_gsl_linalg_balance_matrix2, -1);
|
4042
3915
|
}
|