rb-gsl 1.16.0.5 → 1.16.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/rb-gsl.gemspec +5 -10
- metadata +10 -713
- data/.gitignore +0 -12
- data/.travis.yml +0 -24
- data/AUTHORS +0 -12
- data/COPYING +0 -341
- data/ChangeLog +0 -621
- data/Gemfile +0 -4
- data/README.md +0 -77
- data/Rakefile +0 -20
- data/THANKS +0 -17
- data/examples/alf/alf.gp +0 -15
- data/examples/alf/alf.rb +0 -32
- data/examples/blas/blas.rb +0 -13
- data/examples/blas/dnrm2.rb +0 -16
- data/examples/blas/level1.rb +0 -81
- data/examples/blas/level2.rb +0 -11
- data/examples/blas/level3.rb +0 -12
- data/examples/bspline.rb +0 -57
- data/examples/cdf.rb +0 -16
- data/examples/cheb.rb +0 -21
- data/examples/combination.rb +0 -23
- data/examples/complex/RC-lpf.rb +0 -47
- data/examples/complex/add.rb +0 -36
- data/examples/complex/coerce.rb +0 -14
- data/examples/complex/complex.rb +0 -25
- data/examples/complex/fpmi.rb +0 -70
- data/examples/complex/functions.rb +0 -77
- data/examples/complex/michelson.rb +0 -36
- data/examples/complex/mul.rb +0 -28
- data/examples/complex/oscillator.rb +0 -17
- data/examples/complex/set.rb +0 -37
- data/examples/const/physconst.rb +0 -151
- data/examples/const/travel.rb +0 -45
- data/examples/deriv/demo.rb +0 -13
- data/examples/deriv/deriv.rb +0 -36
- data/examples/deriv/diff.rb +0 -35
- data/examples/dht.rb +0 -42
- data/examples/dirac.rb +0 -56
- data/examples/eigen/eigen.rb +0 -34
- data/examples/eigen/herm.rb +0 -22
- data/examples/eigen/narray.rb +0 -9
- data/examples/eigen/nonsymm.rb +0 -37
- data/examples/eigen/nonsymmv.rb +0 -43
- data/examples/eigen/qhoscillator.gp +0 -35
- data/examples/eigen/qhoscillator.rb +0 -90
- data/examples/eigen/vander.rb +0 -41
- data/examples/fft/fft.rb +0 -17
- data/examples/fft/fft2.rb +0 -17
- data/examples/fft/forward.rb +0 -25
- data/examples/fft/forward2.rb +0 -26
- data/examples/fft/radix2.rb +0 -18
- data/examples/fft/real-halfcomplex.rb +0 -33
- data/examples/fft/real-halfcomplex2.rb +0 -30
- data/examples/fft/realradix2.rb +0 -19
- data/examples/fft/sunspot.dat +0 -256
- data/examples/fft/sunspot.rb +0 -16
- data/examples/fit/expdata.dat +0 -20
- data/examples/fit/expfit.rb +0 -31
- data/examples/fit/gaussfit.rb +0 -29
- data/examples/fit/gaussian_2peaks.rb +0 -34
- data/examples/fit/hillfit.rb +0 -40
- data/examples/fit/lognormal.rb +0 -26
- data/examples/fit/lorentzfit.rb +0 -22
- data/examples/fit/multifit.rb +0 -72
- data/examples/fit/ndlinear.rb +0 -133
- data/examples/fit/nonlinearfit.rb +0 -89
- data/examples/fit/plot.gp +0 -36
- data/examples/fit/polyfit.rb +0 -9
- data/examples/fit/powerfit.rb +0 -21
- data/examples/fit/sigmoidfit.rb +0 -40
- data/examples/fit/sinfit.rb +0 -22
- data/examples/fit/wlinear.rb +0 -46
- data/examples/fresnel.rb +0 -11
- data/examples/function/function.rb +0 -36
- data/examples/function/log.rb +0 -7
- data/examples/function/min.rb +0 -33
- data/examples/function/sin.rb +0 -10
- data/examples/function/synchrotron.rb +0 -18
- data/examples/gallery/butterfly.rb +0 -7
- data/examples/gallery/cayley.rb +0 -12
- data/examples/gallery/cornu.rb +0 -23
- data/examples/gallery/eight.rb +0 -11
- data/examples/gallery/koch.rb +0 -40
- data/examples/gallery/lemniscate.rb +0 -11
- data/examples/gallery/polar.rb +0 -11
- data/examples/gallery/rgplot/cossin.rb +0 -35
- data/examples/gallery/rgplot/rgplot.replaced +0 -0
- data/examples/gallery/rgplot/roesller.rb +0 -55
- data/examples/gallery/roesller.rb +0 -39
- data/examples/gallery/scarabaeus.rb +0 -14
- data/examples/histogram/cauchy.rb +0 -27
- data/examples/histogram/cauchy.sh +0 -2
- data/examples/histogram/exponential.rb +0 -19
- data/examples/histogram/gauss.rb +0 -16
- data/examples/histogram/gsl-histogram.rb +0 -40
- data/examples/histogram/histo2d.rb +0 -31
- data/examples/histogram/histo3d.rb +0 -34
- data/examples/histogram/histogram-pdf.rb +0 -27
- data/examples/histogram/histogram.rb +0 -26
- data/examples/histogram/integral.rb +0 -28
- data/examples/histogram/poisson.rb +0 -27
- data/examples/histogram/power.rb +0 -25
- data/examples/histogram/rebin.rb +0 -17
- data/examples/histogram/smp.dat +0 -5
- data/examples/histogram/xexp.rb +0 -21
- data/examples/integration/ahmed.rb +0 -21
- data/examples/integration/cosmology.rb +0 -75
- data/examples/integration/friedmann.gp +0 -16
- data/examples/integration/friedmann.rb +0 -35
- data/examples/integration/gamma-zeta.rb +0 -35
- data/examples/integration/integration.rb +0 -22
- data/examples/integration/qag.rb +0 -8
- data/examples/integration/qag2.rb +0 -14
- data/examples/integration/qag3.rb +0 -8
- data/examples/integration/qagi.rb +0 -28
- data/examples/integration/qagi2.rb +0 -49
- data/examples/integration/qagiu.rb +0 -29
- data/examples/integration/qagp.rb +0 -20
- data/examples/integration/qags.rb +0 -14
- data/examples/integration/qawc.rb +0 -18
- data/examples/integration/qawf.rb +0 -41
- data/examples/integration/qawo.rb +0 -29
- data/examples/integration/qaws.rb +0 -30
- data/examples/integration/qng.rb +0 -17
- data/examples/interp/demo.gp +0 -20
- data/examples/interp/demo.rb +0 -45
- data/examples/interp/interp.rb +0 -37
- data/examples/interp/points +0 -10
- data/examples/interp/spline.rb +0 -20
- data/examples/jacobi/deriv.rb +0 -40
- data/examples/jacobi/integrate.rb +0 -34
- data/examples/jacobi/interp.rb +0 -43
- data/examples/jacobi/jacobi.rb +0 -11
- data/examples/linalg/HH.rb +0 -15
- data/examples/linalg/HH_narray.rb +0 -13
- data/examples/linalg/LQ_solve.rb +0 -73
- data/examples/linalg/LU.rb +0 -84
- data/examples/linalg/LU2.rb +0 -31
- data/examples/linalg/LU_narray.rb +0 -24
- data/examples/linalg/PTLQ.rb +0 -47
- data/examples/linalg/QR.rb +0 -18
- data/examples/linalg/QRPT.rb +0 -47
- data/examples/linalg/QR_solve.rb +0 -78
- data/examples/linalg/QR_solve_narray.rb +0 -13
- data/examples/linalg/SV.rb +0 -16
- data/examples/linalg/SV_narray.rb +0 -12
- data/examples/linalg/SV_solve.rb +0 -49
- data/examples/linalg/chol.rb +0 -29
- data/examples/linalg/chol_narray.rb +0 -15
- data/examples/linalg/complex.rb +0 -57
- data/examples/linalg/invert_narray.rb +0 -10
- data/examples/math/const.rb +0 -67
- data/examples/math/elementary.rb +0 -35
- data/examples/math/functions.rb +0 -41
- data/examples/math/inf_nan.rb +0 -34
- data/examples/math/minmax.rb +0 -22
- data/examples/math/power.rb +0 -18
- data/examples/math/test.rb +0 -31
- data/examples/matrix/a.dat +0 -0
- data/examples/matrix/add.rb +0 -45
- data/examples/matrix/b.dat +0 -4
- data/examples/matrix/cat.rb +0 -31
- data/examples/matrix/colvectors.rb +0 -24
- data/examples/matrix/complex.rb +0 -41
- data/examples/matrix/det.rb +0 -29
- data/examples/matrix/diagonal.rb +0 -23
- data/examples/matrix/get_all.rb +0 -159
- data/examples/matrix/hilbert.rb +0 -31
- data/examples/matrix/iterator.rb +0 -19
- data/examples/matrix/matrix.rb +0 -57
- data/examples/matrix/minmax.rb +0 -53
- data/examples/matrix/mul.rb +0 -39
- data/examples/matrix/rand.rb +0 -20
- data/examples/matrix/read.rb +0 -29
- data/examples/matrix/rowcol.rb +0 -47
- data/examples/matrix/set.rb +0 -41
- data/examples/matrix/set_all.rb +0 -100
- data/examples/matrix/view.rb +0 -32
- data/examples/matrix/view_all.rb +0 -148
- data/examples/matrix/write.rb +0 -23
- data/examples/min.rb +0 -29
- data/examples/monte/miser.rb +0 -47
- data/examples/monte/monte.rb +0 -47
- data/examples/monte/plain.rb +0 -47
- data/examples/monte/vegas.rb +0 -46
- data/examples/multimin/bundle.rb +0 -66
- data/examples/multimin/cqp.rb +0 -109
- data/examples/multimin/fdfminimizer.rb +0 -40
- data/examples/multimin/fminimizer.rb +0 -41
- data/examples/multiroot/demo.rb +0 -36
- data/examples/multiroot/fdfsolver.rb +0 -50
- data/examples/multiroot/fsolver.rb +0 -33
- data/examples/multiroot/fsolver2.rb +0 -32
- data/examples/multiroot/fsolver3.rb +0 -26
- data/examples/narray/histogram.rb +0 -14
- data/examples/narray/mandel.rb +0 -27
- data/examples/narray/narray.rb +0 -28
- data/examples/narray/narray2.rb +0 -44
- data/examples/narray/sf.rb +0 -26
- data/examples/ntuple/create.rb +0 -17
- data/examples/ntuple/project.rb +0 -31
- data/examples/odeiv/binarysystem.gp +0 -23
- data/examples/odeiv/binarysystem.rb +0 -104
- data/examples/odeiv/demo.gp +0 -24
- data/examples/odeiv/demo.rb +0 -69
- data/examples/odeiv/demo2.gp +0 -26
- data/examples/odeiv/duffing.rb +0 -45
- data/examples/odeiv/frei1.rb +0 -109
- data/examples/odeiv/frei2.rb +0 -76
- data/examples/odeiv/legendre.rb +0 -52
- data/examples/odeiv/odeiv.rb +0 -32
- data/examples/odeiv/odeiv2.rb +0 -45
- data/examples/odeiv/oscillator.rb +0 -42
- data/examples/odeiv/sedov.rb +0 -97
- data/examples/odeiv/whitedwarf.gp +0 -40
- data/examples/odeiv/whitedwarf.rb +0 -158
- data/examples/ool/conmin.rb +0 -100
- data/examples/ool/gencan.rb +0 -99
- data/examples/ool/pgrad.rb +0 -100
- data/examples/ool/spg.rb +0 -100
- data/examples/pdf/bernoulli.rb +0 -5
- data/examples/pdf/beta.rb +0 -7
- data/examples/pdf/binomiral.rb +0 -10
- data/examples/pdf/cauchy.rb +0 -6
- data/examples/pdf/chisq.rb +0 -8
- data/examples/pdf/exponential.rb +0 -7
- data/examples/pdf/exppow.rb +0 -6
- data/examples/pdf/fdist.rb +0 -7
- data/examples/pdf/flat.rb +0 -7
- data/examples/pdf/gamma.rb +0 -8
- data/examples/pdf/gauss-tail.rb +0 -5
- data/examples/pdf/gauss.rb +0 -6
- data/examples/pdf/geometric.rb +0 -5
- data/examples/pdf/gumbel.rb +0 -6
- data/examples/pdf/hypergeometric.rb +0 -11
- data/examples/pdf/landau.rb +0 -5
- data/examples/pdf/laplace.rb +0 -7
- data/examples/pdf/logarithmic.rb +0 -5
- data/examples/pdf/logistic.rb +0 -6
- data/examples/pdf/lognormal.rb +0 -6
- data/examples/pdf/neg-binomiral.rb +0 -10
- data/examples/pdf/pareto.rb +0 -7
- data/examples/pdf/pascal.rb +0 -10
- data/examples/pdf/poisson.rb +0 -5
- data/examples/pdf/rayleigh-tail.rb +0 -6
- data/examples/pdf/rayleigh.rb +0 -6
- data/examples/pdf/tdist.rb +0 -6
- data/examples/pdf/weibull.rb +0 -8
- data/examples/permutation/ex1.rb +0 -22
- data/examples/permutation/permutation.rb +0 -16
- data/examples/poly/bell.rb +0 -6
- data/examples/poly/bessel.rb +0 -6
- data/examples/poly/cheb.rb +0 -6
- data/examples/poly/cheb_II.rb +0 -6
- data/examples/poly/cubic.rb +0 -9
- data/examples/poly/demo.rb +0 -20
- data/examples/poly/eval.rb +0 -28
- data/examples/poly/eval_derivs.rb +0 -14
- data/examples/poly/fit.rb +0 -21
- data/examples/poly/hermite.rb +0 -6
- data/examples/poly/poly.rb +0 -13
- data/examples/poly/quadratic.rb +0 -25
- data/examples/random/diffusion.rb +0 -34
- data/examples/random/gaussian.rb +0 -9
- data/examples/random/generator.rb +0 -27
- data/examples/random/hdsobol.rb +0 -21
- data/examples/random/poisson.rb +0 -9
- data/examples/random/qrng.rb +0 -19
- data/examples/random/randomwalk.rb +0 -37
- data/examples/random/randomwalk2d.rb +0 -19
- data/examples/random/rayleigh.rb +0 -36
- data/examples/random/rng.rb +0 -33
- data/examples/random/rngextra.rb +0 -14
- data/examples/roots/bisection.rb +0 -25
- data/examples/roots/brent.rb +0 -43
- data/examples/roots/demo.rb +0 -30
- data/examples/roots/newton.rb +0 -46
- data/examples/roots/recombination.gp +0 -11
- data/examples/roots/recombination.rb +0 -61
- data/examples/roots/steffenson.rb +0 -48
- data/examples/sf/ShiChi.rb +0 -6
- data/examples/sf/SiCi.rb +0 -6
- data/examples/sf/airy_Ai.rb +0 -8
- data/examples/sf/airy_Bi.rb +0 -8
- data/examples/sf/bessel_IK.rb +0 -12
- data/examples/sf/bessel_JY.rb +0 -13
- data/examples/sf/beta_inc.rb +0 -9
- data/examples/sf/clausen.rb +0 -6
- data/examples/sf/dawson.rb +0 -5
- data/examples/sf/debye.rb +0 -9
- data/examples/sf/dilog.rb +0 -6
- data/examples/sf/ellint.rb +0 -6
- data/examples/sf/expint.rb +0 -8
- data/examples/sf/fermi.rb +0 -10
- data/examples/sf/gamma_inc_P.rb +0 -9
- data/examples/sf/gegenbauer.rb +0 -8
- data/examples/sf/hyperg.rb +0 -7
- data/examples/sf/laguerre.rb +0 -19
- data/examples/sf/lambertW.rb +0 -5
- data/examples/sf/legendre_P.rb +0 -10
- data/examples/sf/lngamma.rb +0 -5
- data/examples/sf/psi.rb +0 -54
- data/examples/sf/sphbessel.gp +0 -27
- data/examples/sf/sphbessel.rb +0 -30
- data/examples/sf/synchrotron.rb +0 -5
- data/examples/sf/transport.rb +0 -10
- data/examples/sf/zetam1.rb +0 -5
- data/examples/siman.rb +0 -44
- data/examples/sort/heapsort.rb +0 -23
- data/examples/sort/heapsort_vector_complex.rb +0 -21
- data/examples/sort/sort.rb +0 -23
- data/examples/sort/sort2.rb +0 -16
- data/examples/stats/mean.rb +0 -17
- data/examples/stats/statistics.rb +0 -18
- data/examples/stats/test.rb +0 -9
- data/examples/sum.rb +0 -34
- data/examples/tamu_anova.rb +0 -18
- data/examples/vector/a.dat +0 -0
- data/examples/vector/add.rb +0 -56
- data/examples/vector/b.dat +0 -4
- data/examples/vector/c.dat +0 -3
- data/examples/vector/collect.rb +0 -26
- data/examples/vector/compare.rb +0 -28
- data/examples/vector/complex.rb +0 -51
- data/examples/vector/complex_get_all.rb +0 -85
- data/examples/vector/complex_set_all.rb +0 -131
- data/examples/vector/complex_view_all.rb +0 -77
- data/examples/vector/connect.rb +0 -22
- data/examples/vector/decimate.rb +0 -38
- data/examples/vector/diff.rb +0 -31
- data/examples/vector/filescan.rb +0 -17
- data/examples/vector/floor.rb +0 -23
- data/examples/vector/get_all.rb +0 -82
- data/examples/vector/gnuplot.rb +0 -38
- data/examples/vector/graph.rb +0 -28
- data/examples/vector/histogram.rb +0 -22
- data/examples/vector/linspace.rb +0 -24
- data/examples/vector/log.rb +0 -17
- data/examples/vector/logic.rb +0 -33
- data/examples/vector/logspace.rb +0 -25
- data/examples/vector/minmax.rb +0 -47
- data/examples/vector/mul.rb +0 -49
- data/examples/vector/narray.rb +0 -46
- data/examples/vector/read.rb +0 -29
- data/examples/vector/set.rb +0 -35
- data/examples/vector/set_all.rb +0 -121
- data/examples/vector/smpv.dat +0 -15
- data/examples/vector/test.rb +0 -43
- data/examples/vector/test_gslblock.rb +0 -58
- data/examples/vector/vector.rb +0 -110
- data/examples/vector/view.rb +0 -35
- data/examples/vector/view_all.rb +0 -73
- data/examples/vector/where.rb +0 -29
- data/examples/vector/write.rb +0 -24
- data/examples/vector/zip.rb +0 -34
- data/examples/wavelet/ecg.dat +0 -256
- data/examples/wavelet/wavelet1.rb +0 -50
- data/ext/gsl_native/alf.c +0 -206
- data/ext/gsl_native/array.c +0 -553
- data/ext/gsl_native/array_complex.c +0 -245
- data/ext/gsl_native/blas.c +0 -28
- data/ext/gsl_native/blas1.c +0 -733
- data/ext/gsl_native/blas2.c +0 -1088
- data/ext/gsl_native/blas3.c +0 -880
- data/ext/gsl_native/block.c +0 -40
- data/ext/gsl_native/block_source.h +0 -885
- data/ext/gsl_native/bspline.c +0 -122
- data/ext/gsl_native/bundle.c +0 -3
- data/ext/gsl_native/cdf.c +0 -740
- data/ext/gsl_native/cheb.c +0 -531
- data/ext/gsl_native/combination.c +0 -275
- data/ext/gsl_native/common.c +0 -293
- data/ext/gsl_native/complex.c +0 -1002
- data/ext/gsl_native/const.c +0 -331
- data/ext/gsl_native/const_additional.c +0 -99
- data/ext/gsl_native/cqp.c +0 -283
- data/ext/gsl_native/deriv.c +0 -187
- data/ext/gsl_native/dht.c +0 -353
- data/ext/gsl_native/diff.c +0 -164
- data/ext/gsl_native/dirac.c +0 -388
- data/ext/gsl_native/eigen.c +0 -2322
- data/ext/gsl_native/error.c +0 -193
- data/ext/gsl_native/extconf.rb +0 -118
- data/ext/gsl_native/fft.c +0 -1095
- data/ext/gsl_native/fit.c +0 -204
- data/ext/gsl_native/fresnel.c +0 -312
- data/ext/gsl_native/function.c +0 -518
- data/ext/gsl_native/geometry.c +0 -139
- data/ext/gsl_native/graph.c +0 -1590
- data/ext/gsl_native/gsl.c +0 -259
- data/ext/gsl_native/gsl_narray.c +0 -794
- data/ext/gsl_native/histogram.c +0 -1964
- data/ext/gsl_native/histogram2d.c +0 -1042
- data/ext/gsl_native/histogram3d.c +0 -884
- data/ext/gsl_native/histogram3d_source.c +0 -749
- data/ext/gsl_native/histogram_find.c +0 -99
- data/ext/gsl_native/histogram_oper.c +0 -150
- data/ext/gsl_native/ieee.c +0 -88
- data/ext/gsl_native/include/rb_gsl.h +0 -136
- data/ext/gsl_native/include/rb_gsl_array.h +0 -214
- data/ext/gsl_native/include/rb_gsl_cheb.h +0 -19
- data/ext/gsl_native/include/rb_gsl_common.h +0 -348
- data/ext/gsl_native/include/rb_gsl_complex.h +0 -25
- data/ext/gsl_native/include/rb_gsl_const.h +0 -23
- data/ext/gsl_native/include/rb_gsl_dirac.h +0 -6
- data/ext/gsl_native/include/rb_gsl_eigen.h +0 -17
- data/ext/gsl_native/include/rb_gsl_fft.h +0 -49
- data/ext/gsl_native/include/rb_gsl_fit.h +0 -23
- data/ext/gsl_native/include/rb_gsl_function.h +0 -23
- data/ext/gsl_native/include/rb_gsl_graph.h +0 -68
- data/ext/gsl_native/include/rb_gsl_histogram.h +0 -63
- data/ext/gsl_native/include/rb_gsl_histogram3d.h +0 -97
- data/ext/gsl_native/include/rb_gsl_integration.h +0 -17
- data/ext/gsl_native/include/rb_gsl_interp.h +0 -41
- data/ext/gsl_native/include/rb_gsl_linalg.h +0 -21
- data/ext/gsl_native/include/rb_gsl_math.h +0 -20
- data/ext/gsl_native/include/rb_gsl_odeiv.h +0 -18
- data/ext/gsl_native/include/rb_gsl_poly.h +0 -67
- data/ext/gsl_native/include/rb_gsl_rational.h +0 -30
- data/ext/gsl_native/include/rb_gsl_rng.h +0 -20
- data/ext/gsl_native/include/rb_gsl_root.h +0 -22
- data/ext/gsl_native/include/rb_gsl_sf.h +0 -110
- data/ext/gsl_native/include/rb_gsl_statistics.h +0 -17
- data/ext/gsl_native/include/rb_gsl_tensor.h +0 -43
- data/ext/gsl_native/include/rb_gsl_with_narray.h +0 -31
- data/ext/gsl_native/include/templates_off.h +0 -87
- data/ext/gsl_native/include/templates_on.h +0 -241
- data/ext/gsl_native/integration.c +0 -1154
- data/ext/gsl_native/interp.c +0 -499
- data/ext/gsl_native/jacobi.c +0 -733
- data/ext/gsl_native/linalg.c +0 -3915
- data/ext/gsl_native/linalg_complex.c +0 -726
- data/ext/gsl_native/math.c +0 -706
- data/ext/gsl_native/matrix.c +0 -36
- data/ext/gsl_native/matrix_complex.c +0 -1733
- data/ext/gsl_native/matrix_double.c +0 -557
- data/ext/gsl_native/matrix_int.c +0 -255
- data/ext/gsl_native/matrix_source.h +0 -2708
- data/ext/gsl_native/min.c +0 -219
- data/ext/gsl_native/monte.c +0 -978
- data/ext/gsl_native/multifit.c +0 -1862
- data/ext/gsl_native/multimin.c +0 -778
- data/ext/gsl_native/multimin_fsdf.c +0 -156
- data/ext/gsl_native/multiroots.c +0 -952
- data/ext/gsl_native/multiset.c +0 -210
- data/ext/gsl_native/ndlinear.c +0 -320
- data/ext/gsl_native/nmf.c +0 -171
- data/ext/gsl_native/nmf_wrap.c +0 -75
- data/ext/gsl_native/ntuple.c +0 -469
- data/ext/gsl_native/odeiv.c +0 -947
- data/ext/gsl_native/ool.c +0 -879
- data/ext/gsl_native/permutation.c +0 -598
- data/ext/gsl_native/poly.c +0 -39
- data/ext/gsl_native/poly2.c +0 -265
- data/ext/gsl_native/poly_source.h +0 -1871
- data/ext/gsl_native/qrng.c +0 -160
- data/ext/gsl_native/randist.c +0 -1848
- data/ext/gsl_native/rational.c +0 -480
- data/ext/gsl_native/rng.c +0 -595
- data/ext/gsl_native/root.c +0 -407
- data/ext/gsl_native/sf.c +0 -1446
- data/ext/gsl_native/sf_airy.c +0 -200
- data/ext/gsl_native/sf_bessel.c +0 -871
- data/ext/gsl_native/sf_clausen.c +0 -28
- data/ext/gsl_native/sf_coulomb.c +0 -206
- data/ext/gsl_native/sf_coupling.c +0 -121
- data/ext/gsl_native/sf_dawson.c +0 -29
- data/ext/gsl_native/sf_debye.c +0 -148
- data/ext/gsl_native/sf_dilog.c +0 -43
- data/ext/gsl_native/sf_elementary.c +0 -46
- data/ext/gsl_native/sf_ellint.c +0 -206
- data/ext/gsl_native/sf_elljac.c +0 -30
- data/ext/gsl_native/sf_erfc.c +0 -89
- data/ext/gsl_native/sf_exp.c +0 -169
- data/ext/gsl_native/sf_expint.c +0 -201
- data/ext/gsl_native/sf_fermi_dirac.c +0 -148
- data/ext/gsl_native/sf_gamma.c +0 -343
- data/ext/gsl_native/sf_gegenbauer.c +0 -97
- data/ext/gsl_native/sf_hyperg.c +0 -203
- data/ext/gsl_native/sf_laguerre.c +0 -113
- data/ext/gsl_native/sf_lambert.c +0 -47
- data/ext/gsl_native/sf_legendre.c +0 -368
- data/ext/gsl_native/sf_log.c +0 -105
- data/ext/gsl_native/sf_mathieu.c +0 -235
- data/ext/gsl_native/sf_power.c +0 -47
- data/ext/gsl_native/sf_psi.c +0 -89
- data/ext/gsl_native/sf_synchrotron.c +0 -48
- data/ext/gsl_native/sf_transport.c +0 -76
- data/ext/gsl_native/sf_trigonometric.c +0 -210
- data/ext/gsl_native/sf_zeta.c +0 -115
- data/ext/gsl_native/signal.c +0 -303
- data/ext/gsl_native/siman.c +0 -713
- data/ext/gsl_native/sort.c +0 -207
- data/ext/gsl_native/spline.c +0 -377
- data/ext/gsl_native/stats.c +0 -787
- data/ext/gsl_native/sum.c +0 -168
- data/ext/gsl_native/tamu_anova.c +0 -56
- data/ext/gsl_native/tensor.c +0 -35
- data/ext/gsl_native/tensor_source.h +0 -1122
- data/ext/gsl_native/vector.c +0 -35
- data/ext/gsl_native/vector_complex.c +0 -2241
- data/ext/gsl_native/vector_double.c +0 -1433
- data/ext/gsl_native/vector_int.c +0 -202
- data/ext/gsl_native/vector_source.h +0 -3321
- data/ext/gsl_native/wavelet.c +0 -923
- data/lib/gsl.rb +0 -8
- data/lib/gsl/gnuplot.rb +0 -41
- data/lib/gsl/oper.rb +0 -43
- data/lib/gsl/version.rb +0 -3
- data/lib/ool.rb +0 -22
- data/lib/ool/conmin.rb +0 -30
- data/lib/rbgsl.rb +0 -1
- data/rdoc/alf.rdoc +0 -77
- data/rdoc/blas.rdoc +0 -269
- data/rdoc/bspline.rdoc +0 -42
- data/rdoc/changes.rdoc +0 -159
- data/rdoc/cheb.rdoc +0 -99
- data/rdoc/cholesky_complex.rdoc +0 -46
- data/rdoc/combi.rdoc +0 -125
- data/rdoc/complex.rdoc +0 -210
- data/rdoc/const.rdoc +0 -546
- data/rdoc/dht.rdoc +0 -122
- data/rdoc/diff.rdoc +0 -133
- data/rdoc/ehandling.rdoc +0 -50
- data/rdoc/eigen.rdoc +0 -401
- data/rdoc/fft.rdoc +0 -535
- data/rdoc/fit.rdoc +0 -284
- data/rdoc/function.rdoc +0 -94
- data/rdoc/graph.rdoc +0 -137
- data/rdoc/hist.rdoc +0 -409
- data/rdoc/hist2d.rdoc +0 -279
- data/rdoc/hist3d.rdoc +0 -112
- data/rdoc/integration.rdoc +0 -398
- data/rdoc/interp.rdoc +0 -231
- data/rdoc/intro.rdoc +0 -27
- data/rdoc/linalg.rdoc +0 -681
- data/rdoc/linalg_complex.rdoc +0 -88
- data/rdoc/math.rdoc +0 -276
- data/rdoc/matrix.rdoc +0 -1093
- data/rdoc/min.rdoc +0 -189
- data/rdoc/monte.rdoc +0 -234
- data/rdoc/multimin.rdoc +0 -312
- data/rdoc/multiroot.rdoc +0 -293
- data/rdoc/narray.rdoc +0 -177
- data/rdoc/ndlinear.rdoc +0 -250
- data/rdoc/nonlinearfit.rdoc +0 -348
- data/rdoc/ntuple.rdoc +0 -88
- data/rdoc/odeiv.rdoc +0 -378
- data/rdoc/perm.rdoc +0 -221
- data/rdoc/poly.rdoc +0 -335
- data/rdoc/qrng.rdoc +0 -90
- data/rdoc/randist.rdoc +0 -233
- data/rdoc/ref.rdoc +0 -93
- data/rdoc/rng.rdoc +0 -203
- data/rdoc/roots.rdoc +0 -305
- data/rdoc/sf.rdoc +0 -1622
- data/rdoc/siman.rdoc +0 -89
- data/rdoc/sort.rdoc +0 -94
- data/rdoc/start.rdoc +0 -16
- data/rdoc/stats.rdoc +0 -219
- data/rdoc/sum.rdoc +0 -65
- data/rdoc/tensor.rdoc +0 -251
- data/rdoc/tut.rdoc +0 -5
- data/rdoc/use.rdoc +0 -177
- data/rdoc/vector.rdoc +0 -1243
- data/rdoc/vector_complex.rdoc +0 -347
- data/rdoc/wavelet.rdoc +0 -218
- data/test/gsl/blas_test.rb +0 -79
- data/test/gsl/bspline_test.rb +0 -63
- data/test/gsl/cdf_test.rb +0 -1512
- data/test/gsl/cheb_test.rb +0 -80
- data/test/gsl/combination_test.rb +0 -100
- data/test/gsl/complex_test.rb +0 -20
- data/test/gsl/const_test.rb +0 -29
- data/test/gsl/deriv_test.rb +0 -62
- data/test/gsl/dht_test.rb +0 -79
- data/test/gsl/diff_test.rb +0 -53
- data/test/gsl/eigen_test.rb +0 -563
- data/test/gsl/err_test.rb +0 -23
- data/test/gsl/fit_test.rb +0 -101
- data/test/gsl/histo_test.rb +0 -14
- data/test/gsl/index_test.rb +0 -61
- data/test/gsl/integration_test.rb +0 -274
- data/test/gsl/interp_test.rb +0 -27
- data/test/gsl/linalg_test.rb +0 -463
- data/test/gsl/matrix_nmf_test.rb +0 -37
- data/test/gsl/matrix_test.rb +0 -98
- data/test/gsl/min_test.rb +0 -89
- data/test/gsl/monte_test.rb +0 -77
- data/test/gsl/multifit_test.rb +0 -753
- data/test/gsl/multimin_test.rb +0 -157
- data/test/gsl/multiroot_test.rb +0 -135
- data/test/gsl/multiset_test.rb +0 -52
- data/test/gsl/odeiv_test.rb +0 -275
- data/test/gsl/oper_test.rb +0 -98
- data/test/gsl/poly_test.rb +0 -338
- data/test/gsl/qrng_test.rb +0 -94
- data/test/gsl/quartic_test.rb +0 -28
- data/test/gsl/randist_test.rb +0 -122
- data/test/gsl/rng_test.rb +0 -303
- data/test/gsl/roots_test.rb +0 -78
- data/test/gsl/sf_test.rb +0 -2079
- data/test/gsl/stats_test.rb +0 -122
- data/test/gsl/sum_test.rb +0 -69
- data/test/gsl/tensor_test.rb +0 -396
- data/test/gsl/vector_test.rb +0 -223
- data/test/gsl/wavelet_test.rb +0 -130
- data/test/gsl_test.rb +0 -321
- data/test/test_helper.rb +0 -42
- data/uncrustify.cfg +0 -1693
data/ext/gsl_native/root.c
DELETED
@@ -1,407 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
root.c
|
3
|
-
Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
|
4
|
-
(C) Copyright 2004 by Yoshiki Tsunesada
|
5
|
-
|
6
|
-
Ruby/GSL is free software: you can redistribute it and/or modify it
|
7
|
-
under the terms of the GNU General Public License.
|
8
|
-
This library is distributed in the hope that it will be useful, but
|
9
|
-
WITHOUT ANY WARRANTY.
|
10
|
-
*/
|
11
|
-
|
12
|
-
#include "include/rb_gsl_array.h"
|
13
|
-
#include "include/rb_gsl_common.h"
|
14
|
-
#include "include/rb_gsl_function.h"
|
15
|
-
#include "include/rb_gsl_root.h"
|
16
|
-
|
17
|
-
EXTERN VALUE cgsl_function_fdf;
|
18
|
-
|
19
|
-
enum {
|
20
|
-
GSL_ROOT_FSOLVER_BISECTION,
|
21
|
-
GSL_ROOT_FSOLVER_FALSEPOS,
|
22
|
-
GSL_ROOT_FSOLVER_BRENT,
|
23
|
-
GSL_ROOT_FDFSOLVER_NEWTON,
|
24
|
-
GSL_ROOT_FDFSOLVER_SECANT,
|
25
|
-
GSL_ROOT_FDFSOLVER_STEFFENSON,
|
26
|
-
};
|
27
|
-
|
28
|
-
/*****/
|
29
|
-
|
30
|
-
static VALUE rb_gsl_fsolver_new(VALUE klass, VALUE t)
|
31
|
-
{
|
32
|
-
gsl_root_fsolver *s = NULL;
|
33
|
-
const gsl_root_fsolver_type *T;
|
34
|
-
char name[32];
|
35
|
-
switch (TYPE(t)) {
|
36
|
-
case T_STRING:
|
37
|
-
strcpy(name, STR2CSTR(t));
|
38
|
-
if (!str_tail_grep(name, "bisection")) {
|
39
|
-
T = gsl_root_fsolver_bisection;
|
40
|
-
} else if (!str_tail_grep(name, "falsepos")) {
|
41
|
-
T = gsl_root_fsolver_falsepos;
|
42
|
-
} else if (!str_tail_grep(name, "brent")) {
|
43
|
-
T = gsl_root_fsolver_brent;
|
44
|
-
} else {
|
45
|
-
rb_raise(rb_eTypeError,
|
46
|
-
"type must be \"bisection\" or \"falsepos\", or \"brent\".");
|
47
|
-
}
|
48
|
-
break;
|
49
|
-
case T_FIXNUM:
|
50
|
-
switch (FIX2INT(t)) {
|
51
|
-
case GSL_ROOT_FSOLVER_BISECTION:
|
52
|
-
T = gsl_root_fsolver_bisection;
|
53
|
-
break;
|
54
|
-
case GSL_ROOT_FSOLVER_FALSEPOS:
|
55
|
-
T = gsl_root_fsolver_falsepos;
|
56
|
-
break;
|
57
|
-
case GSL_ROOT_FSOLVER_BRENT:
|
58
|
-
T = gsl_root_fsolver_brent;
|
59
|
-
break;
|
60
|
-
default:
|
61
|
-
rb_raise(rb_eTypeError, "type must be BISECTION or FALSEPOS, or BRENT.");
|
62
|
-
break;
|
63
|
-
}
|
64
|
-
break;
|
65
|
-
default:
|
66
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (String or Fixnum expected)",
|
67
|
-
rb_class2name(CLASS_OF(t)));
|
68
|
-
break;
|
69
|
-
}
|
70
|
-
s = gsl_root_fsolver_alloc(T);
|
71
|
-
return Data_Wrap_Struct(klass, 0, gsl_root_fsolver_free, s);
|
72
|
-
}
|
73
|
-
|
74
|
-
static VALUE rb_gsl_fsolver_set(VALUE obj, VALUE func, VALUE xl, VALUE xh)
|
75
|
-
{
|
76
|
-
gsl_root_fsolver *s = NULL;
|
77
|
-
gsl_function *fff = NULL;
|
78
|
-
double xlow, xup;
|
79
|
-
Need_Float(xl); Need_Float(xh);
|
80
|
-
CHECK_FUNCTION(func);
|
81
|
-
Data_Get_Struct(obj, gsl_root_fsolver, s);
|
82
|
-
Data_Get_Struct(func, gsl_function, fff);
|
83
|
-
xlow = NUM2DBL(xl);
|
84
|
-
xup = NUM2DBL(xh);
|
85
|
-
gsl_root_fsolver_set(s, fff, xlow, xup);
|
86
|
-
return obj;
|
87
|
-
}
|
88
|
-
|
89
|
-
static VALUE rb_gsl_fsolver_iterate(VALUE obj)
|
90
|
-
{
|
91
|
-
gsl_root_fsolver *s = NULL;
|
92
|
-
Data_Get_Struct(obj, gsl_root_fsolver, s);
|
93
|
-
return INT2FIX(gsl_root_fsolver_iterate(s));
|
94
|
-
}
|
95
|
-
|
96
|
-
static VALUE rb_gsl_fsolver_root(VALUE obj)
|
97
|
-
{
|
98
|
-
gsl_root_fsolver *s = NULL;
|
99
|
-
Data_Get_Struct(obj, gsl_root_fsolver, s);
|
100
|
-
return rb_float_new(gsl_root_fsolver_root(s));
|
101
|
-
}
|
102
|
-
|
103
|
-
static VALUE rb_gsl_fsolver_x_lower(VALUE obj)
|
104
|
-
{
|
105
|
-
gsl_root_fsolver *s = NULL;
|
106
|
-
Data_Get_Struct(obj, gsl_root_fsolver, s);
|
107
|
-
return rb_float_new(gsl_root_fsolver_x_lower(s));
|
108
|
-
}
|
109
|
-
|
110
|
-
static VALUE rb_gsl_fsolver_x_upper(VALUE obj)
|
111
|
-
{
|
112
|
-
gsl_root_fsolver *s = NULL;
|
113
|
-
Data_Get_Struct(obj, gsl_root_fsolver, s);
|
114
|
-
return rb_float_new(gsl_root_fsolver_x_upper(s));
|
115
|
-
}
|
116
|
-
|
117
|
-
static VALUE rb_gsl_fsolver_name(VALUE obj)
|
118
|
-
{
|
119
|
-
gsl_root_fsolver *s = NULL;
|
120
|
-
Data_Get_Struct(obj, gsl_root_fsolver, s);
|
121
|
-
return rb_str_new2(gsl_root_fsolver_name(s));
|
122
|
-
}
|
123
|
-
|
124
|
-
static VALUE rb_gsl_fsolver_test_interval(VALUE obj, VALUE eabs, VALUE erel)
|
125
|
-
{
|
126
|
-
gsl_root_fsolver *s = NULL;
|
127
|
-
Need_Float(eabs); Need_Float(erel);
|
128
|
-
Data_Get_Struct(obj, gsl_root_fsolver, s);
|
129
|
-
return INT2FIX(gsl_root_test_interval(s->x_lower, s->x_upper,
|
130
|
-
NUM2DBL(eabs), NUM2DBL(erel)));
|
131
|
-
}
|
132
|
-
|
133
|
-
static VALUE rb_gsl_root_test_interval(VALUE obj, VALUE xl, VALUE xu, VALUE eabs,
|
134
|
-
VALUE erel)
|
135
|
-
{
|
136
|
-
Need_Float(xl); Need_Float(xu);
|
137
|
-
Need_Float(eabs); Need_Float(erel);
|
138
|
-
return INT2FIX(gsl_root_test_interval(NUM2DBL(xl), NUM2DBL(xu),
|
139
|
-
NUM2DBL(eabs), NUM2DBL(erel)));
|
140
|
-
}
|
141
|
-
|
142
|
-
static VALUE rb_gsl_root_test_delta(VALUE obj, VALUE xl, VALUE xu, VALUE eabs,
|
143
|
-
VALUE erel)
|
144
|
-
{
|
145
|
-
Need_Float(xl); Need_Float(xu);
|
146
|
-
Need_Float(eabs); Need_Float(erel);
|
147
|
-
return INT2FIX(gsl_root_test_delta(NUM2DBL(xl), NUM2DBL(xu),
|
148
|
-
NUM2DBL(eabs), NUM2DBL(erel)));
|
149
|
-
}
|
150
|
-
|
151
|
-
static VALUE rb_gsl_root_test_residual(VALUE obj, VALUE xl,VALUE eabs)
|
152
|
-
{
|
153
|
-
Need_Float(xl); Need_Float(eabs);
|
154
|
-
return INT2FIX(gsl_root_test_residual(NUM2DBL(xl), NUM2DBL(eabs)));
|
155
|
-
}
|
156
|
-
|
157
|
-
static VALUE rb_gsl_fsolver_solve(int argc, VALUE *argv, VALUE obj)
|
158
|
-
{
|
159
|
-
gsl_root_fsolver *s = NULL;
|
160
|
-
gsl_function *F = NULL;
|
161
|
-
double x, xl, xh, epsabs = 0.0, epsrel = 1e-6;
|
162
|
-
int status, iter = 0, max_iter = 100;
|
163
|
-
switch (argc) {
|
164
|
-
case 3:
|
165
|
-
Check_Type(argv[2], T_ARRAY);
|
166
|
-
epsabs = NUM2DBL(rb_ary_entry(argv[2], 0));
|
167
|
-
epsrel = NUM2DBL(rb_ary_entry(argv[2], 1));
|
168
|
-
/* no break */
|
169
|
-
case 2:
|
170
|
-
Check_Type(argv[1], T_ARRAY);
|
171
|
-
xl = NUM2DBL(rb_ary_entry(argv[1], 0));
|
172
|
-
xh = NUM2DBL(rb_ary_entry(argv[1], 1));
|
173
|
-
break;
|
174
|
-
default:
|
175
|
-
rb_raise(rb_eArgError,
|
176
|
-
"Usage: solve(f = Function, range = Array, eps = Array)");
|
177
|
-
break;
|
178
|
-
}
|
179
|
-
CHECK_FUNCTION(argv[0]);
|
180
|
-
Data_Get_Struct(argv[0], gsl_function, F);
|
181
|
-
Data_Get_Struct(obj, gsl_root_fsolver, s);
|
182
|
-
gsl_root_fsolver_set(s, F, xl, xh);
|
183
|
-
do {
|
184
|
-
iter++;
|
185
|
-
status = gsl_root_fsolver_iterate (s);
|
186
|
-
x = gsl_root_fsolver_root (s);
|
187
|
-
xl = gsl_root_fsolver_x_lower (s);
|
188
|
-
xh = gsl_root_fsolver_x_upper (s);
|
189
|
-
status = gsl_root_test_interval (xl, xh, epsabs, epsrel);
|
190
|
-
if (status == GSL_SUCCESS) break;
|
191
|
-
} while (status == GSL_CONTINUE && iter < max_iter);
|
192
|
-
return rb_ary_new3(3, rb_float_new(x), INT2FIX(iter), INT2FIX(status));
|
193
|
-
}
|
194
|
-
|
195
|
-
static VALUE rb_gsl_fdfsolver_new(VALUE klass, VALUE t)
|
196
|
-
{
|
197
|
-
gsl_root_fdfsolver *s = NULL;
|
198
|
-
const gsl_root_fdfsolver_type *T;
|
199
|
-
char name[32];
|
200
|
-
switch (TYPE(t)) {
|
201
|
-
case T_STRING:
|
202
|
-
strcpy(name, STR2CSTR(t));
|
203
|
-
if (!str_tail_grep(name, "newton")) {
|
204
|
-
T = gsl_root_fdfsolver_newton;
|
205
|
-
} else if (!str_tail_grep(name, "secant")) {
|
206
|
-
T = gsl_root_fdfsolver_secant;
|
207
|
-
} else if (!str_tail_grep(name, "steffenson")) {
|
208
|
-
T = gsl_root_fdfsolver_steffenson;
|
209
|
-
} else {
|
210
|
-
rb_raise(rb_eTypeError, "type must be NEWTON or SECANT, or STEFFENSON.");
|
211
|
-
}
|
212
|
-
break;
|
213
|
-
case T_FIXNUM:
|
214
|
-
switch (FIX2INT(t)) {
|
215
|
-
case GSL_ROOT_FDFSOLVER_NEWTON:
|
216
|
-
T = gsl_root_fdfsolver_newton;
|
217
|
-
break;
|
218
|
-
case GSL_ROOT_FDFSOLVER_SECANT:
|
219
|
-
T = gsl_root_fdfsolver_secant;
|
220
|
-
break;
|
221
|
-
case GSL_ROOT_FDFSOLVER_STEFFENSON:
|
222
|
-
T = gsl_root_fdfsolver_steffenson;
|
223
|
-
break;
|
224
|
-
default:
|
225
|
-
rb_raise(rb_eTypeError, "type must be NEWTON or SECANT, or STEFFENSON.");
|
226
|
-
break;
|
227
|
-
}
|
228
|
-
break;
|
229
|
-
default:
|
230
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (String or Fixnum expected)",
|
231
|
-
rb_class2name(CLASS_OF(t)));
|
232
|
-
break;
|
233
|
-
}
|
234
|
-
s = gsl_root_fdfsolver_alloc(T);
|
235
|
-
return Data_Wrap_Struct(klass, 0, gsl_root_fdfsolver_free, s);
|
236
|
-
}
|
237
|
-
|
238
|
-
static VALUE rb_gsl_fdfsolver_set(VALUE obj, VALUE func, VALUE r)
|
239
|
-
{
|
240
|
-
gsl_root_fdfsolver *s = NULL;
|
241
|
-
gsl_function_fdf *fff = NULL;
|
242
|
-
double root;
|
243
|
-
CHECK_FUNCTION_FDF(func);
|
244
|
-
Data_Get_Struct(obj, gsl_root_fdfsolver, s);
|
245
|
-
Data_Get_Struct(func, gsl_function_fdf, fff);
|
246
|
-
root = NUM2DBL(r);
|
247
|
-
gsl_root_fdfsolver_set(s, fff, root);
|
248
|
-
return obj;
|
249
|
-
}
|
250
|
-
|
251
|
-
static VALUE rb_gsl_fdfsolver_iterate(VALUE obj)
|
252
|
-
{
|
253
|
-
gsl_root_fdfsolver *s = NULL;
|
254
|
-
Data_Get_Struct(obj, gsl_root_fdfsolver, s);
|
255
|
-
return INT2FIX(gsl_root_fdfsolver_iterate(s));
|
256
|
-
}
|
257
|
-
|
258
|
-
static VALUE rb_gsl_fdfsolver_root(VALUE obj)
|
259
|
-
{
|
260
|
-
gsl_root_fdfsolver *s = NULL;
|
261
|
-
Data_Get_Struct(obj, gsl_root_fdfsolver, s);
|
262
|
-
return rb_float_new(gsl_root_fdfsolver_root(s));
|
263
|
-
}
|
264
|
-
|
265
|
-
static VALUE rb_gsl_fdfsolver_name(VALUE obj)
|
266
|
-
{
|
267
|
-
gsl_root_fdfsolver *s = NULL;
|
268
|
-
Data_Get_Struct(obj, gsl_root_fdfsolver, s);
|
269
|
-
return rb_str_new2(gsl_root_fdfsolver_name(s));
|
270
|
-
}
|
271
|
-
|
272
|
-
static VALUE rb_gsl_fdfsolver_solve(int argc, VALUE *argv, VALUE obj)
|
273
|
-
{
|
274
|
-
gsl_root_fdfsolver *s = NULL;
|
275
|
-
double x = 0.0, x0, epsabs = 0.0, epsrel = 1e-6;
|
276
|
-
gsl_function_fdf *F = NULL;
|
277
|
-
int status, iter = 0, max_iter = 100;
|
278
|
-
switch (argc) {
|
279
|
-
case 3:
|
280
|
-
Check_Type(argv[2], T_ARRAY);
|
281
|
-
epsabs = NUM2DBL(rb_ary_entry(argv[2], 0));
|
282
|
-
epsrel = NUM2DBL(rb_ary_entry(argv[2], 1));
|
283
|
-
/* no break */
|
284
|
-
case 2:
|
285
|
-
Need_Float(argv[1]);
|
286
|
-
x0 = NUM2DBL(argv[1]);
|
287
|
-
break;
|
288
|
-
default:
|
289
|
-
rb_raise(rb_eArgError, "Usage: solve(f = Function, range = Array, eps = Array)");
|
290
|
-
break;
|
291
|
-
}
|
292
|
-
CHECK_FUNCTION_FDF(argv[0]);
|
293
|
-
Data_Get_Struct(argv[0], gsl_function_fdf, F);
|
294
|
-
Data_Get_Struct(obj, gsl_root_fdfsolver, s);
|
295
|
-
gsl_root_fdfsolver_set(s, F, x0);
|
296
|
-
do {
|
297
|
-
iter++;
|
298
|
-
status = gsl_root_fdfsolver_iterate (s);
|
299
|
-
x0 = x;
|
300
|
-
x = gsl_root_fdfsolver_root (s);
|
301
|
-
status = gsl_root_test_delta(x, x0, epsabs, epsrel);
|
302
|
-
if (status == GSL_SUCCESS) break;
|
303
|
-
} while (status == GSL_CONTINUE && iter < max_iter);
|
304
|
-
return rb_ary_new3(3, rb_float_new(x), INT2FIX(iter), INT2FIX(status));
|
305
|
-
}
|
306
|
-
|
307
|
-
static VALUE rb_gsl_function_rootfinder(int argc, VALUE *argv, VALUE obj)
|
308
|
-
{
|
309
|
-
int status, iter = 0, max_iter = 1000;
|
310
|
-
const gsl_root_fsolver_type *T;
|
311
|
-
gsl_root_fsolver *s = NULL;
|
312
|
-
gsl_function *F = NULL;
|
313
|
-
double r, a, b, epsabs = 0.0, epsrel = 1e-6;
|
314
|
-
Data_Get_Struct(obj, gsl_function, F);
|
315
|
-
switch (argc) {
|
316
|
-
case 2:
|
317
|
-
a = NUM2DBL(argv[0]);
|
318
|
-
b = NUM2DBL(argv[1]);
|
319
|
-
break;
|
320
|
-
case 1:
|
321
|
-
switch (TYPE(argv[0])) {
|
322
|
-
case T_ARRAY:
|
323
|
-
a = NUM2DBL(rb_ary_entry(argv[0], 0));
|
324
|
-
b = NUM2DBL(rb_ary_entry(argv[0], 1));
|
325
|
-
break;
|
326
|
-
default:
|
327
|
-
rb_raise(rb_eTypeError, "interval must be given by an array [a, b]");
|
328
|
-
}
|
329
|
-
break;
|
330
|
-
default:
|
331
|
-
rb_raise(rb_eArgError, "interval must be given");
|
332
|
-
break;
|
333
|
-
}
|
334
|
-
T = gsl_root_fsolver_brent;
|
335
|
-
s = gsl_root_fsolver_alloc (T);
|
336
|
-
gsl_root_fsolver_set (s, F, a, b);
|
337
|
-
do {
|
338
|
-
iter++;
|
339
|
-
status = gsl_root_fsolver_iterate (s);
|
340
|
-
r = gsl_root_fsolver_root (s);
|
341
|
-
a = gsl_root_fsolver_x_lower (s);
|
342
|
-
b = gsl_root_fsolver_x_upper (s);
|
343
|
-
status = gsl_root_test_interval (a, b, epsabs, epsrel);
|
344
|
-
if (status == GSL_SUCCESS) break;
|
345
|
-
} while (status == GSL_CONTINUE && iter < max_iter);
|
346
|
-
gsl_root_fsolver_free(s);
|
347
|
-
if (status == GSL_SUCCESS) {
|
348
|
-
return rb_ary_new3(3, rb_float_new(r), INT2FIX(iter), INT2FIX(status));
|
349
|
-
} else {
|
350
|
-
printf("not converged\n");
|
351
|
-
return Qfalse;
|
352
|
-
}
|
353
|
-
}
|
354
|
-
|
355
|
-
void Init_gsl_root(VALUE module)
|
356
|
-
{
|
357
|
-
VALUE mgsl_root;
|
358
|
-
VALUE cgsl_fsolver;
|
359
|
-
VALUE cgsl_fdfsolver;
|
360
|
-
|
361
|
-
mgsl_root = rb_define_module_under(module, "Root");
|
362
|
-
|
363
|
-
cgsl_fsolver = rb_define_class_under(mgsl_root, "FSolver", cGSL_Object);
|
364
|
-
rb_define_singleton_method(cgsl_fsolver, "alloc", rb_gsl_fsolver_new, 1);
|
365
|
-
|
366
|
-
rb_define_method(cgsl_fsolver, "set", rb_gsl_fsolver_set, 3);
|
367
|
-
rb_define_method(cgsl_fsolver, "iterate", rb_gsl_fsolver_iterate, 0);
|
368
|
-
rb_define_method(cgsl_fsolver, "root", rb_gsl_fsolver_root, 0);
|
369
|
-
rb_define_method(cgsl_fsolver, "name", rb_gsl_fsolver_name, 0);
|
370
|
-
rb_define_method(cgsl_fsolver, "x_lower", rb_gsl_fsolver_x_lower, 0);
|
371
|
-
rb_define_method(cgsl_fsolver, "x_upper", rb_gsl_fsolver_x_upper, 0);
|
372
|
-
rb_define_method(cgsl_fsolver, "test_interval", rb_gsl_fsolver_test_interval, 2);
|
373
|
-
rb_define_method(cgsl_fsolver, "solve", rb_gsl_fsolver_solve, -1);
|
374
|
-
|
375
|
-
rb_define_singleton_method(mgsl_root, "test_interval",
|
376
|
-
rb_gsl_root_test_interval, 4);
|
377
|
-
rb_define_singleton_method(mgsl_root, "test_delta",
|
378
|
-
rb_gsl_root_test_delta, 4);
|
379
|
-
rb_define_singleton_method(mgsl_root, "test_residual",
|
380
|
-
rb_gsl_root_test_residual, 2);
|
381
|
-
|
382
|
-
cgsl_fdfsolver = rb_define_class_under(mgsl_root, "FdfSolver", cGSL_Object);
|
383
|
-
rb_define_singleton_method(cgsl_fdfsolver, "alloc", rb_gsl_fdfsolver_new, 1);
|
384
|
-
|
385
|
-
rb_define_method(cgsl_fdfsolver, "set", rb_gsl_fdfsolver_set, 2);
|
386
|
-
rb_define_method(cgsl_fdfsolver, "iterate", rb_gsl_fdfsolver_iterate, 0);
|
387
|
-
rb_define_method(cgsl_fdfsolver, "root", rb_gsl_fdfsolver_root, 0);
|
388
|
-
rb_define_method(cgsl_fdfsolver, "name", rb_gsl_fdfsolver_name, 0);
|
389
|
-
rb_define_method(cgsl_fdfsolver, "solve", rb_gsl_fdfsolver_solve, -1);
|
390
|
-
|
391
|
-
rb_define_method(cgsl_function, "fsolve", rb_gsl_function_rootfinder, -1);
|
392
|
-
rb_define_alias(cgsl_function, "solve", "fsolve");
|
393
|
-
|
394
|
-
rb_define_const(cgsl_fsolver, "BISECTION", INT2FIX(GSL_ROOT_FSOLVER_BISECTION));
|
395
|
-
rb_define_const(cgsl_fsolver, "FALSEPOS", INT2FIX(GSL_ROOT_FSOLVER_FALSEPOS));
|
396
|
-
rb_define_const(cgsl_fsolver, "BRENT", INT2FIX(GSL_ROOT_FSOLVER_BRENT));
|
397
|
-
rb_define_const(cgsl_fsolver, "Bisection", INT2FIX(GSL_ROOT_FSOLVER_BISECTION));
|
398
|
-
rb_define_const(cgsl_fsolver, "Falsepos", INT2FIX(GSL_ROOT_FSOLVER_FALSEPOS));
|
399
|
-
rb_define_const(cgsl_fsolver, "Brent", INT2FIX(GSL_ROOT_FSOLVER_BRENT));
|
400
|
-
|
401
|
-
rb_define_const(cgsl_fdfsolver, "NEWTON", INT2FIX(GSL_ROOT_FDFSOLVER_NEWTON));
|
402
|
-
rb_define_const(cgsl_fdfsolver, "SECANT", INT2FIX(GSL_ROOT_FDFSOLVER_SECANT));
|
403
|
-
rb_define_const(cgsl_fdfsolver, "STEFFENSON", INT2FIX(GSL_ROOT_FDFSOLVER_STEFFENSON));
|
404
|
-
rb_define_const(cgsl_fdfsolver, "Newton", INT2FIX(GSL_ROOT_FDFSOLVER_NEWTON));
|
405
|
-
rb_define_const(cgsl_fdfsolver, "Secant", INT2FIX(GSL_ROOT_FDFSOLVER_SECANT));
|
406
|
-
rb_define_const(cgsl_fdfsolver, "Steffenson", INT2FIX(GSL_ROOT_FDFSOLVER_STEFFENSON));
|
407
|
-
}
|
data/ext/gsl_native/sf.c
DELETED
@@ -1,1446 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
sf.c
|
3
|
-
Ruby/GSL: Ruby extension library for GSL (GNU Scientific Library)
|
4
|
-
(C) Copyright 2001-2006 by Yoshiki Tsunesada
|
5
|
-
|
6
|
-
Ruby/GSL is free software: you can redistribute it and/or modify it
|
7
|
-
under the terms of the GNU General Public License.
|
8
|
-
This library is distributed in the hope that it will be useful, but
|
9
|
-
WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
11
|
-
*/
|
12
|
-
|
13
|
-
#include "include/rb_gsl_array.h"
|
14
|
-
#include "include/rb_gsl_sf.h"
|
15
|
-
|
16
|
-
VALUE cgsl_sf_result, cgsl_sf_result_e10;
|
17
|
-
|
18
|
-
VALUE rb_gsl_sf_result_new(VALUE klass)
|
19
|
-
{
|
20
|
-
gsl_sf_result *rslt = NULL;
|
21
|
-
return Data_Make_Struct(klass, gsl_sf_result, 0, free, rslt);
|
22
|
-
}
|
23
|
-
|
24
|
-
static VALUE rb_gsl_sf_result_print(VALUE obj)
|
25
|
-
{
|
26
|
-
gsl_sf_result *rslt = NULL;
|
27
|
-
Data_Get_Struct(obj, gsl_sf_result, rslt);
|
28
|
-
printf("%10.9e %10.9e\n", rslt->val, rslt->err);
|
29
|
-
return obj;
|
30
|
-
}
|
31
|
-
|
32
|
-
static VALUE rb_gsl_sf_result_to_s(VALUE obj);
|
33
|
-
|
34
|
-
static VALUE rb_gsl_sf_result_inspect(VALUE obj)
|
35
|
-
{
|
36
|
-
char buf[64];
|
37
|
-
VALUE str;
|
38
|
-
sprintf(buf, "%s\n", rb_class2name(CLASS_OF(obj)));
|
39
|
-
str = rb_str_new2(buf);
|
40
|
-
return rb_str_concat(str, rb_gsl_sf_result_to_s(obj));
|
41
|
-
}
|
42
|
-
|
43
|
-
static VALUE rb_gsl_sf_result_val(VALUE obj)
|
44
|
-
{
|
45
|
-
gsl_sf_result *rslt = NULL;
|
46
|
-
Data_Get_Struct(obj, gsl_sf_result, rslt);
|
47
|
-
return rb_float_new(rslt->val);
|
48
|
-
}
|
49
|
-
|
50
|
-
static VALUE rb_gsl_sf_result_err(VALUE obj)
|
51
|
-
{
|
52
|
-
gsl_sf_result *rslt = NULL;
|
53
|
-
Data_Get_Struct(obj, gsl_sf_result, rslt);
|
54
|
-
return rb_float_new(rslt->err);
|
55
|
-
}
|
56
|
-
|
57
|
-
static VALUE rb_gsl_sf_result_to_a(VALUE obj)
|
58
|
-
{
|
59
|
-
gsl_sf_result *rslt = NULL;
|
60
|
-
Data_Get_Struct(obj, gsl_sf_result, rslt);
|
61
|
-
return rb_ary_new3(2, rb_float_new(rslt->val), rb_float_new(rslt->err));
|
62
|
-
}
|
63
|
-
|
64
|
-
static VALUE rb_gsl_sf_result_to_s(VALUE obj)
|
65
|
-
{
|
66
|
-
gsl_sf_result *rslt = NULL;
|
67
|
-
char str[32];
|
68
|
-
Data_Get_Struct(obj, gsl_sf_result, rslt);
|
69
|
-
sprintf(str, "%10.9e %10.9e", rslt->val, rslt->err);
|
70
|
-
return rb_str_new2(str);
|
71
|
-
}
|
72
|
-
|
73
|
-
static VALUE rb_gsl_sf_result_e10_new(VALUE klass)
|
74
|
-
{
|
75
|
-
gsl_sf_result_e10 *rslt = NULL;
|
76
|
-
return Data_Make_Struct(cgsl_sf_result, gsl_sf_result_e10, 0, free, rslt);
|
77
|
-
}
|
78
|
-
|
79
|
-
static VALUE rb_gsl_sf_result_e10_val(VALUE obj)
|
80
|
-
{
|
81
|
-
gsl_sf_result_e10 *rslt = NULL;
|
82
|
-
Data_Get_Struct(obj, gsl_sf_result_e10, rslt);
|
83
|
-
return rb_float_new(rslt->val);
|
84
|
-
}
|
85
|
-
|
86
|
-
static VALUE rb_gsl_sf_result_e10_err(VALUE obj)
|
87
|
-
{
|
88
|
-
gsl_sf_result_e10 *rslt = NULL;
|
89
|
-
Data_Get_Struct(obj, gsl_sf_result_e10, rslt);
|
90
|
-
return rb_float_new(rslt->err);
|
91
|
-
}
|
92
|
-
|
93
|
-
static VALUE rb_gsl_sf_result_e10_e10(VALUE obj)
|
94
|
-
{
|
95
|
-
gsl_sf_result_e10 *rslt = NULL;
|
96
|
-
Data_Get_Struct(obj, gsl_sf_result_e10, rslt);
|
97
|
-
return INT2FIX(rslt->e10);
|
98
|
-
}
|
99
|
-
|
100
|
-
static VALUE rb_gsl_sf_result_e10_to_a(VALUE obj)
|
101
|
-
{
|
102
|
-
gsl_sf_result_e10 *rslt = NULL;
|
103
|
-
Data_Get_Struct(obj, gsl_sf_result_e10, rslt);
|
104
|
-
return rb_ary_new3(2, rb_float_new(rslt->val), rb_float_new(rslt->err));
|
105
|
-
}
|
106
|
-
|
107
|
-
static VALUE rb_gsl_sf_result_e10_to_s(VALUE obj)
|
108
|
-
{
|
109
|
-
gsl_sf_result_e10 *rslt = NULL;
|
110
|
-
char str[32];
|
111
|
-
Data_Get_Struct(obj, gsl_sf_result_e10, rslt);
|
112
|
-
sprintf(str, "%10.9e %10.9e\n", rslt->val, rslt->err);
|
113
|
-
return rb_str_new2(str);
|
114
|
-
}
|
115
|
-
|
116
|
-
VALUE rb_gsl_sf_eval1(double (*func)(double), VALUE argv)
|
117
|
-
{
|
118
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
119
|
-
switch (TYPE(argv)) {
|
120
|
-
case T_FLOAT:
|
121
|
-
case T_FIXNUM:
|
122
|
-
case T_BIGNUM:
|
123
|
-
return rb_float_new((*func)(NUM2DBL(argv)));
|
124
|
-
break;
|
125
|
-
case T_ARRAY:
|
126
|
-
return rb_gsl_ary_eval1(argv, func);
|
127
|
-
break;
|
128
|
-
default:
|
129
|
-
#ifdef HAVE_NARRAY_H
|
130
|
-
if (NA_IsNArray(argv)) {
|
131
|
-
return rb_gsl_nary_eval1(argv, func);
|
132
|
-
}
|
133
|
-
#endif
|
134
|
-
if (MATRIX_P(argv)) {
|
135
|
-
return matrix_eval_create(argv, func);
|
136
|
-
} else if (VECTOR_P(argv)) {
|
137
|
-
return vector_eval_create(argv, func);
|
138
|
-
} else if (COMPLEX_P(argv) || VECTOR_COMPLEX_P(argv) || MATRIX_COMPLEX_P(argv)) {
|
139
|
-
return rb_gsl_sf_eval_complex(func, argv);
|
140
|
-
} else {
|
141
|
-
rb_raise(rb_eTypeError, "wrong argument type %s", rb_class2name(CLASS_OF(argv)));
|
142
|
-
}
|
143
|
-
break;
|
144
|
-
}
|
145
|
-
}
|
146
|
-
|
147
|
-
VALUE rb_gsl_sf_eval_int_double(double (*func)(int, double), VALUE jj, VALUE argv)
|
148
|
-
{
|
149
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
150
|
-
gsl_matrix *m = NULL, *mnew = NULL;
|
151
|
-
VALUE ary, xx;
|
152
|
-
size_t i, j, k, n;
|
153
|
-
double val;
|
154
|
-
CHECK_FIXNUM(jj);
|
155
|
-
j = FIX2INT(jj);
|
156
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
157
|
-
switch (TYPE(argv)) {
|
158
|
-
case T_FLOAT:
|
159
|
-
case T_FIXNUM:
|
160
|
-
case T_BIGNUM:
|
161
|
-
return rb_float_new((*func)(j, NUM2DBL(argv)));
|
162
|
-
break;
|
163
|
-
case T_ARRAY:
|
164
|
-
n = RARRAY_LEN(argv);
|
165
|
-
ary = rb_ary_new2(n);
|
166
|
-
for (i = 0; i < n; i++) {
|
167
|
-
xx = rb_ary_entry(argv, i);
|
168
|
-
Need_Float(xx);
|
169
|
-
val = (*func)(j, NUM2DBL(xx));
|
170
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
171
|
-
}
|
172
|
-
return ary;
|
173
|
-
break;
|
174
|
-
default:
|
175
|
-
#ifdef HAVE_NARRAY_H
|
176
|
-
if (NA_IsNArray(argv)) {
|
177
|
-
double *ptr1, *ptr2;
|
178
|
-
struct NARRAY *na;
|
179
|
-
argv = na_change_type(argv, NA_DFLOAT);
|
180
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
181
|
-
GetNArray(argv, na);
|
182
|
-
n = na->total;
|
183
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
184
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
185
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(j, ptr1[i]);
|
186
|
-
return ary;
|
187
|
-
}
|
188
|
-
#endif
|
189
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
190
|
-
Data_Get_Struct(argv, gsl_matrix, m);
|
191
|
-
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
192
|
-
for (i = 0; i < m->size1; i++) {
|
193
|
-
for (k = 0; k < m->size2; k++) {
|
194
|
-
val = (*func)(j, gsl_matrix_get(m, i, k));
|
195
|
-
gsl_matrix_set(mnew, i, k, val);
|
196
|
-
}
|
197
|
-
}
|
198
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
199
|
-
} else {
|
200
|
-
CHECK_VECTOR(argv);
|
201
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
202
|
-
n = v->size;
|
203
|
-
vnew = gsl_vector_alloc(n);
|
204
|
-
for (i = 0; i < n; i++) {
|
205
|
-
val = (*func)(j, gsl_vector_get(v, i));
|
206
|
-
gsl_vector_set(vnew, i, val);
|
207
|
-
}
|
208
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
209
|
-
}
|
210
|
-
break;
|
211
|
-
}
|
212
|
-
}
|
213
|
-
|
214
|
-
VALUE rb_gsl_sf_eval_double_int(double (*func)(double, int), VALUE argv, VALUE jj)
|
215
|
-
{
|
216
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
217
|
-
gsl_matrix *m = NULL, *mnew = NULL;
|
218
|
-
VALUE ary, xx;
|
219
|
-
size_t i, j, k, n;
|
220
|
-
double val;
|
221
|
-
CHECK_FIXNUM(jj);
|
222
|
-
j = FIX2INT(jj);
|
223
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
224
|
-
switch (TYPE(argv)) {
|
225
|
-
case T_FLOAT:
|
226
|
-
case T_FIXNUM:
|
227
|
-
case T_BIGNUM:
|
228
|
-
return rb_float_new((*func)(NUM2DBL(argv), j));
|
229
|
-
break;
|
230
|
-
case T_ARRAY:
|
231
|
-
n = RARRAY_LEN(argv);
|
232
|
-
ary = rb_ary_new2(n);
|
233
|
-
for (i = 0; i < n; i++) {
|
234
|
-
xx = rb_ary_entry(argv, i);
|
235
|
-
Need_Float(xx);
|
236
|
-
val = (*func)(NUM2DBL(xx), j);
|
237
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
238
|
-
}
|
239
|
-
return ary;
|
240
|
-
break;
|
241
|
-
default:
|
242
|
-
#ifdef HAVE_NARRAY_H
|
243
|
-
if (NA_IsNArray(argv)) {
|
244
|
-
double *ptr1, *ptr2;
|
245
|
-
struct NARRAY *na;
|
246
|
-
argv = na_change_type(argv, NA_DFLOAT);
|
247
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
248
|
-
GetNArray(argv, na);
|
249
|
-
n = na->total;
|
250
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
251
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
252
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(ptr1[i], j);
|
253
|
-
return ary;
|
254
|
-
}
|
255
|
-
#endif
|
256
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
257
|
-
Data_Get_Struct(argv, gsl_matrix, m);
|
258
|
-
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
259
|
-
for (i = 0; i < m->size1; i++) {
|
260
|
-
for (k = 0; k < m->size2; k++) {
|
261
|
-
val = (*func)(gsl_matrix_get(m, i, k), j);
|
262
|
-
gsl_matrix_set(mnew, i, k, val);
|
263
|
-
}
|
264
|
-
}
|
265
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
266
|
-
} else {
|
267
|
-
CHECK_VECTOR(argv);
|
268
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
269
|
-
n = v->size;
|
270
|
-
vnew = gsl_vector_alloc(n);
|
271
|
-
for (i = 0; i < n; i++) {
|
272
|
-
val = (*func)(gsl_vector_get(v, i), j);
|
273
|
-
gsl_vector_set(vnew, i, val);
|
274
|
-
}
|
275
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
276
|
-
}
|
277
|
-
break;
|
278
|
-
}
|
279
|
-
return Qnil;
|
280
|
-
}
|
281
|
-
|
282
|
-
VALUE rb_gsl_sf_eval_int_int_double(double (*func)(int, int, double), VALUE jj,
|
283
|
-
VALUE jj2, VALUE argv)
|
284
|
-
{
|
285
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
286
|
-
gsl_matrix *m = NULL, *mnew = NULL;
|
287
|
-
VALUE ary, xx;
|
288
|
-
size_t i, j, k, j2, n;
|
289
|
-
double val;
|
290
|
-
CHECK_FIXNUM(jj); CHECK_FIXNUM(jj2);
|
291
|
-
j = FIX2INT(jj);
|
292
|
-
j2 = FIX2INT(jj2);
|
293
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
294
|
-
switch (TYPE(argv)) {
|
295
|
-
case T_FLOAT:
|
296
|
-
case T_FIXNUM:
|
297
|
-
case T_BIGNUM:
|
298
|
-
return rb_float_new((*func)(j, j2, NUM2DBL(argv)));
|
299
|
-
break;
|
300
|
-
case T_ARRAY:
|
301
|
-
n = RARRAY_LEN(argv);
|
302
|
-
ary = rb_ary_new2(n);
|
303
|
-
for (i = 0; i < n; i++) {
|
304
|
-
xx = rb_ary_entry(argv, i);
|
305
|
-
Need_Float(xx);
|
306
|
-
val = (*func)(j, j2, NUM2DBL(xx));
|
307
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
308
|
-
}
|
309
|
-
return ary;
|
310
|
-
break;
|
311
|
-
default:
|
312
|
-
#ifdef HAVE_NARRAY_H
|
313
|
-
if (NA_IsNArray(argv)) {
|
314
|
-
double *ptr1, *ptr2;
|
315
|
-
struct NARRAY *na;
|
316
|
-
argv = na_change_type(argv, NA_DFLOAT);
|
317
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
318
|
-
GetNArray(argv, na);
|
319
|
-
n = na->total;
|
320
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
321
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
322
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(j, j2, ptr1[i]);
|
323
|
-
return ary;
|
324
|
-
}
|
325
|
-
#endif
|
326
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
327
|
-
Data_Get_Struct(argv, gsl_matrix, m);
|
328
|
-
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
329
|
-
for (i = 0; i < m->size1; i++) {
|
330
|
-
for (k = 0; k < m->size2; k++) {
|
331
|
-
val = (*func)(j, j2, gsl_matrix_get(m, i, k));
|
332
|
-
gsl_matrix_set(mnew, i, k, val);
|
333
|
-
}
|
334
|
-
}
|
335
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
336
|
-
} else {
|
337
|
-
CHECK_VECTOR(argv);
|
338
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
339
|
-
n = v->size;
|
340
|
-
vnew = gsl_vector_alloc(n);
|
341
|
-
for (i = 0; i < n; i++) {
|
342
|
-
val = (*func)(j, j2, gsl_vector_get(v, i));
|
343
|
-
gsl_vector_set(vnew, i, val);
|
344
|
-
}
|
345
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
346
|
-
}
|
347
|
-
break;
|
348
|
-
}
|
349
|
-
}
|
350
|
-
|
351
|
-
VALUE rb_gsl_sf_eval_int_double_double(double (*func)(int, double, double), VALUE jj,
|
352
|
-
VALUE ff, VALUE argv)
|
353
|
-
{
|
354
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
355
|
-
gsl_matrix *m = NULL, *mnew = NULL;
|
356
|
-
VALUE ary, xx;
|
357
|
-
size_t i, j, k, n;
|
358
|
-
double f, val;
|
359
|
-
CHECK_FIXNUM(jj);
|
360
|
-
Need_Float(ff);
|
361
|
-
j = FIX2INT(jj);
|
362
|
-
f = NUM2DBL(ff);
|
363
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
364
|
-
switch (TYPE(argv)) {
|
365
|
-
case T_FLOAT:
|
366
|
-
case T_FIXNUM:
|
367
|
-
case T_BIGNUM:
|
368
|
-
return rb_float_new((*func)(j, f, NUM2DBL(argv)));
|
369
|
-
break;
|
370
|
-
case T_ARRAY:
|
371
|
-
n = RARRAY_LEN(argv);
|
372
|
-
ary = rb_ary_new2(n);
|
373
|
-
for (i = 0; i < n; i++) {
|
374
|
-
xx = rb_ary_entry(argv, i);
|
375
|
-
Need_Float(xx);
|
376
|
-
val = (*func)(j, f, NUM2DBL(xx));
|
377
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
378
|
-
}
|
379
|
-
return ary;
|
380
|
-
break;
|
381
|
-
default:
|
382
|
-
#ifdef HAVE_NARRAY_H
|
383
|
-
if (NA_IsNArray(argv)) {
|
384
|
-
double *ptr1, *ptr2;
|
385
|
-
struct NARRAY *na;
|
386
|
-
argv = na_change_type(argv, NA_DFLOAT);
|
387
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
388
|
-
GetNArray(argv, na);
|
389
|
-
n = na->total;
|
390
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
391
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
392
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(j, f, ptr1[i]);
|
393
|
-
return ary;
|
394
|
-
}
|
395
|
-
#endif
|
396
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
397
|
-
Data_Get_Struct(argv, gsl_matrix, m);
|
398
|
-
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
399
|
-
for (i = 0; i < m->size1; i++) {
|
400
|
-
for (k = 0; k < m->size2; k++) {
|
401
|
-
val = (*func)(j, f, gsl_matrix_get(m, i, k));
|
402
|
-
gsl_matrix_set(mnew, i, k, val);
|
403
|
-
}
|
404
|
-
}
|
405
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
406
|
-
} else {
|
407
|
-
CHECK_VECTOR(argv);
|
408
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
409
|
-
n = v->size;
|
410
|
-
vnew = gsl_vector_alloc(n);
|
411
|
-
for (i = 0; i < n; i++) {
|
412
|
-
val = (*func)(j, f, gsl_vector_get(v, i));
|
413
|
-
gsl_vector_set(vnew, i, val);
|
414
|
-
}
|
415
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
416
|
-
}
|
417
|
-
break;
|
418
|
-
}
|
419
|
-
}
|
420
|
-
|
421
|
-
VALUE rb_gsl_sf_eval_double_double(double (*func)(double, double), VALUE ff, VALUE argv)
|
422
|
-
{
|
423
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
424
|
-
gsl_matrix *m = NULL, *mnew = NULL;
|
425
|
-
VALUE ary, xx;
|
426
|
-
size_t i, k, n;
|
427
|
-
double val, f;
|
428
|
-
Need_Float(ff);
|
429
|
-
f = NUM2DBL(ff);
|
430
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
431
|
-
switch (TYPE(argv)) {
|
432
|
-
case T_FLOAT:
|
433
|
-
case T_FIXNUM:
|
434
|
-
case T_BIGNUM:
|
435
|
-
return rb_float_new((*func)(f, NUM2DBL(argv)));
|
436
|
-
break;
|
437
|
-
case T_ARRAY:
|
438
|
-
n = RARRAY_LEN(argv);
|
439
|
-
ary = rb_ary_new2(n);
|
440
|
-
for (i = 0; i < n; i++) {
|
441
|
-
xx = rb_ary_entry(argv, i);
|
442
|
-
Need_Float(xx);
|
443
|
-
val = (*func)(f, NUM2DBL(xx));
|
444
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
445
|
-
}
|
446
|
-
return ary;
|
447
|
-
break;
|
448
|
-
default:
|
449
|
-
#ifdef HAVE_NARRAY_H
|
450
|
-
if (NA_IsNArray(argv)) {
|
451
|
-
double *ptr1, *ptr2;
|
452
|
-
struct NARRAY *na;
|
453
|
-
argv = na_change_type(argv, NA_DFLOAT);
|
454
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
455
|
-
GetNArray(argv, na);
|
456
|
-
n = na->total;
|
457
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
458
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
459
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(f, ptr1[i]);
|
460
|
-
return ary;
|
461
|
-
}
|
462
|
-
#endif
|
463
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
464
|
-
Data_Get_Struct(argv, gsl_matrix, m);
|
465
|
-
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
466
|
-
for (i = 0; i < m->size1; i++) {
|
467
|
-
for (k = 0; k < m->size2; k++) {
|
468
|
-
gsl_matrix_set(mnew, i, k, (*func)(f, gsl_matrix_get(m, i, k)));
|
469
|
-
}
|
470
|
-
}
|
471
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
472
|
-
} else {
|
473
|
-
CHECK_VECTOR(argv);
|
474
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
475
|
-
vnew = gsl_vector_alloc(v->size);
|
476
|
-
for (i = 0; i < v->size; i++) {
|
477
|
-
gsl_vector_set(vnew, i, (*func)(f, gsl_vector_get(v, i)));
|
478
|
-
}
|
479
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
480
|
-
}
|
481
|
-
break;
|
482
|
-
}
|
483
|
-
}
|
484
|
-
|
485
|
-
VALUE rb_gsl_sf_eval_double3(double (*func)(double, double, double),
|
486
|
-
VALUE ff, VALUE ff2, VALUE argv)
|
487
|
-
{
|
488
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
489
|
-
gsl_matrix *m = NULL, *mnew = NULL;
|
490
|
-
VALUE ary, xx;
|
491
|
-
size_t i, k, n;
|
492
|
-
double val, f, f2;
|
493
|
-
Need_Float(ff); Need_Float(ff2);
|
494
|
-
f = NUM2DBL(ff);
|
495
|
-
f2 = NUM2DBL(ff2);
|
496
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
497
|
-
switch (TYPE(argv)) {
|
498
|
-
case T_FLOAT:
|
499
|
-
case T_FIXNUM:
|
500
|
-
case T_BIGNUM:
|
501
|
-
return rb_float_new((*func)(f, f2, NUM2DBL(argv)));
|
502
|
-
break;
|
503
|
-
case T_ARRAY:
|
504
|
-
n = RARRAY_LEN(argv);
|
505
|
-
ary = rb_ary_new2(n);
|
506
|
-
for (i = 0; i < n; i++) {
|
507
|
-
xx = rb_ary_entry(argv, i);
|
508
|
-
Need_Float(xx);
|
509
|
-
val = (*func)(f, f2, NUM2DBL(xx));
|
510
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
511
|
-
}
|
512
|
-
return ary;
|
513
|
-
break;
|
514
|
-
default:
|
515
|
-
#ifdef HAVE_NARRAY_H
|
516
|
-
if (NA_IsNArray(argv)) {
|
517
|
-
double *ptr1, *ptr2;
|
518
|
-
struct NARRAY *na;
|
519
|
-
argv = na_change_type(argv, NA_DFLOAT);
|
520
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
521
|
-
GetNArray(argv, na);
|
522
|
-
n = na->total;
|
523
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
524
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
525
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(f, f2, ptr1[i]);
|
526
|
-
return ary;
|
527
|
-
}
|
528
|
-
#endif
|
529
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
530
|
-
Data_Get_Struct(argv, gsl_matrix, m);
|
531
|
-
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
532
|
-
for (i = 0; i < m->size1; i++) {
|
533
|
-
for (k = 0; k < m->size2; k++) {
|
534
|
-
val = (*func)(f, f2, gsl_matrix_get(m, i, k));
|
535
|
-
gsl_matrix_set(mnew, i, k, val);
|
536
|
-
}
|
537
|
-
}
|
538
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
539
|
-
} else {
|
540
|
-
CHECK_VECTOR(argv);
|
541
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
542
|
-
n = v->size;
|
543
|
-
vnew = gsl_vector_alloc(n);
|
544
|
-
for (i = 0; i < n; i++) {
|
545
|
-
val = (*func)(f, f2, gsl_vector_get(v, i));
|
546
|
-
gsl_vector_set(vnew, i, val);
|
547
|
-
}
|
548
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
549
|
-
}
|
550
|
-
break;
|
551
|
-
}
|
552
|
-
}
|
553
|
-
|
554
|
-
VALUE rb_gsl_sf_eval_double4(double (*func)(double, double, double, double),
|
555
|
-
VALUE ff, VALUE ff2, VALUE ff3, VALUE argv)
|
556
|
-
{
|
557
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
558
|
-
gsl_matrix *m = NULL, *mnew = NULL;
|
559
|
-
VALUE ary, xx;
|
560
|
-
size_t i, k, n;
|
561
|
-
double val, f, f2, f3;
|
562
|
-
Need_Float(ff); Need_Float(ff2); Need_Float(ff3);
|
563
|
-
f = NUM2DBL(ff);
|
564
|
-
f2 = NUM2DBL(ff2);
|
565
|
-
f3 = NUM2DBL(ff3);
|
566
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
567
|
-
switch (TYPE(argv)) {
|
568
|
-
case T_FLOAT:
|
569
|
-
case T_FIXNUM:
|
570
|
-
case T_BIGNUM:
|
571
|
-
return rb_float_new((*func)(f, f2, f3, NUM2DBL(argv)));
|
572
|
-
break;
|
573
|
-
case T_ARRAY:
|
574
|
-
n = RARRAY_LEN(argv);
|
575
|
-
ary = rb_ary_new2(n);
|
576
|
-
for (i = 0; i < n; i++) {
|
577
|
-
xx = rb_ary_entry(argv, i);
|
578
|
-
Need_Float(xx);
|
579
|
-
val = (*func)(f, f2, f3, NUM2DBL(xx));
|
580
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
581
|
-
}
|
582
|
-
return ary;
|
583
|
-
break;
|
584
|
-
default:
|
585
|
-
#ifdef HAVE_NARRAY_H
|
586
|
-
if (NA_IsNArray(argv)) {
|
587
|
-
double *ptr1, *ptr2;
|
588
|
-
struct NARRAY *na;
|
589
|
-
argv = na_change_type(argv, NA_DFLOAT);
|
590
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
591
|
-
GetNArray(argv, na);
|
592
|
-
n = na->total;
|
593
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
594
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
595
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(f, f2, f3, ptr1[i]);
|
596
|
-
return ary;
|
597
|
-
}
|
598
|
-
#endif
|
599
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
600
|
-
Data_Get_Struct(argv, gsl_matrix, m);
|
601
|
-
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
602
|
-
for (i = 0; i < m->size1; i++) {
|
603
|
-
for (k = 0; k < m->size2; k++) {
|
604
|
-
val = (*func)(f, f2, f3, gsl_matrix_get(m, i, k));
|
605
|
-
gsl_matrix_set(mnew, i, k, val);
|
606
|
-
}
|
607
|
-
}
|
608
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
609
|
-
} else {
|
610
|
-
CHECK_VECTOR(argv);
|
611
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
612
|
-
n = v->size;
|
613
|
-
vnew = gsl_vector_alloc(n);
|
614
|
-
for (i = 0; i < n; i++) {
|
615
|
-
val = (*func)(f, f2, f3, gsl_vector_get(v, i));
|
616
|
-
gsl_vector_set(vnew, i, val);
|
617
|
-
}
|
618
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
619
|
-
}
|
620
|
-
break;
|
621
|
-
}
|
622
|
-
}
|
623
|
-
|
624
|
-
VALUE rb_gsl_sf_eval1_int(double (*func)(int), VALUE argv)
|
625
|
-
{
|
626
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
627
|
-
gsl_matrix *m = NULL, *mnew = NULL;
|
628
|
-
VALUE ary;
|
629
|
-
size_t i, k, n;
|
630
|
-
double val;
|
631
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
632
|
-
switch (TYPE(argv)) {
|
633
|
-
case T_FIXNUM:
|
634
|
-
case T_BIGNUM:
|
635
|
-
case T_FLOAT:
|
636
|
-
return rb_float_new((*func)(NUM2INT(argv)));
|
637
|
-
break;
|
638
|
-
case T_ARRAY:
|
639
|
-
n = RARRAY_LEN(argv);
|
640
|
-
ary = rb_ary_new2(n);
|
641
|
-
for (i = 0; i < n; i++) {
|
642
|
-
val = (*func)(NUM2INT(rb_ary_entry(argv, i)));
|
643
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
644
|
-
}
|
645
|
-
return ary;
|
646
|
-
break;
|
647
|
-
default:
|
648
|
-
#ifdef HAVE_NARRAY_H
|
649
|
-
if (NA_IsNArray(argv)) {
|
650
|
-
double *ptr1, *ptr2;
|
651
|
-
struct NARRAY *na;
|
652
|
-
argv = na_change_type(argv, NA_DFLOAT);
|
653
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
654
|
-
GetNArray(argv, na);
|
655
|
-
n = na->total;
|
656
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
657
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
658
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)((int) ptr1[i]);
|
659
|
-
return ary;
|
660
|
-
}
|
661
|
-
#endif
|
662
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
663
|
-
Data_Get_Struct(argv, gsl_matrix, m);
|
664
|
-
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
665
|
-
for (i = 0; i < m->size1; i++) {
|
666
|
-
for (k = 0; k < m->size2; k++) {
|
667
|
-
val = (*func)((int) gsl_matrix_get(m, i, k));
|
668
|
-
gsl_matrix_set(mnew, i, k, val);
|
669
|
-
}
|
670
|
-
}
|
671
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
672
|
-
} else {
|
673
|
-
CHECK_VECTOR(argv);
|
674
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
675
|
-
n = v->size;
|
676
|
-
vnew = gsl_vector_alloc(n);
|
677
|
-
for (i = 0; i < n; i++) {
|
678
|
-
val = (*func)((int) gsl_vector_get(v, i));
|
679
|
-
gsl_vector_set(vnew, i, val);
|
680
|
-
}
|
681
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
682
|
-
}
|
683
|
-
break;
|
684
|
-
}
|
685
|
-
}
|
686
|
-
|
687
|
-
VALUE rb_gsl_sf_eval1_uint(double (*func)(unsigned int), VALUE argv)
|
688
|
-
{
|
689
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
690
|
-
gsl_matrix *m = NULL, *mnew = NULL;
|
691
|
-
VALUE ary;
|
692
|
-
size_t i, k, n;
|
693
|
-
double val;
|
694
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
695
|
-
switch (TYPE(argv)) {
|
696
|
-
case T_FIXNUM:
|
697
|
-
case T_BIGNUM:
|
698
|
-
case T_FLOAT:
|
699
|
-
return rb_float_new((*func)(NUM2UINT(argv)));
|
700
|
-
break;
|
701
|
-
case T_ARRAY:
|
702
|
-
n = RARRAY_LEN(argv);
|
703
|
-
ary = rb_ary_new2(n);
|
704
|
-
for (i = 0; i < n; i++) {
|
705
|
-
val = (*func)(NUM2UINT(rb_ary_entry(argv, i)));
|
706
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
707
|
-
}
|
708
|
-
return ary;
|
709
|
-
break;
|
710
|
-
default:
|
711
|
-
#ifdef HAVE_NARRAY_H
|
712
|
-
if (NA_IsNArray(argv)) {
|
713
|
-
double *ptr1, *ptr2;
|
714
|
-
struct NARRAY *na;
|
715
|
-
argv = na_change_type(argv, NA_DFLOAT);
|
716
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
717
|
-
GetNArray(argv, na);
|
718
|
-
n = na->total;
|
719
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
720
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
721
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)((unsigned int) ptr1[i]);
|
722
|
-
return ary;
|
723
|
-
}
|
724
|
-
#endif
|
725
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
726
|
-
Data_Get_Struct(argv, gsl_matrix, m);
|
727
|
-
mnew = gsl_matrix_alloc(m->size1, m->size2);
|
728
|
-
for (i = 0; i < m->size1; i++) {
|
729
|
-
for (k = 0; k < m->size2; k++) {
|
730
|
-
val = (*func)((unsigned int) gsl_matrix_get(m, i, k));
|
731
|
-
gsl_matrix_set(mnew, i, k, val);
|
732
|
-
}
|
733
|
-
}
|
734
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
735
|
-
} else {
|
736
|
-
CHECK_VECTOR(argv);
|
737
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
738
|
-
n = v->size;
|
739
|
-
vnew = gsl_vector_alloc(n);
|
740
|
-
for (i = 0; i < n; i++) {
|
741
|
-
val = (*func)((unsigned int) gsl_vector_get(v, i));
|
742
|
-
gsl_vector_set(vnew, i, val);
|
743
|
-
}
|
744
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
745
|
-
}
|
746
|
-
break;
|
747
|
-
}
|
748
|
-
}
|
749
|
-
|
750
|
-
VALUE rb_gsl_sf_eval_double_m(double (*func)(double, gsl_mode_t), VALUE argv, VALUE m)
|
751
|
-
{
|
752
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
753
|
-
gsl_matrix *mm = NULL, *mnew = NULL;
|
754
|
-
VALUE ary, xx;
|
755
|
-
size_t i, k, n;
|
756
|
-
double val;
|
757
|
-
/*gsl_mode_t mode;
|
758
|
-
char c;*/
|
759
|
-
switch (TYPE(m)) {
|
760
|
-
case T_STRING:
|
761
|
-
/*c = tolower(NUM2CHR(m));
|
762
|
-
if (c == 'd') mode = GSL_PREC_DOUBLE;
|
763
|
-
else if (c == 's') mode = GSL_PREC_SINGLE;
|
764
|
-
else if (c == 'a') mode = GSL_PREC_APPROX;
|
765
|
-
else mode = GSL_PREC_DOUBLE;*/
|
766
|
-
break;
|
767
|
-
case T_FIXNUM:
|
768
|
-
/*mode = FIX2INT(m);*/
|
769
|
-
break;
|
770
|
-
default:
|
771
|
-
rb_raise(rb_eArgError, "wrong type argument %s (String or Fixnum expected)",
|
772
|
-
rb_class2name(CLASS_OF(m)));
|
773
|
-
}
|
774
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
775
|
-
switch (TYPE(argv)) {
|
776
|
-
case T_FLOAT:
|
777
|
-
case T_FIXNUM:
|
778
|
-
case T_BIGNUM:
|
779
|
-
return rb_float_new((*func)(NUM2DBL(argv), m));
|
780
|
-
break;
|
781
|
-
case T_ARRAY:
|
782
|
-
n = RARRAY_LEN(argv);
|
783
|
-
ary = rb_ary_new2(n);
|
784
|
-
for (i = 0; i < n; i++) {
|
785
|
-
xx = rb_ary_entry(argv, i);
|
786
|
-
Need_Float(xx);
|
787
|
-
val = (*func)(NUM2DBL(xx), m);
|
788
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
789
|
-
}
|
790
|
-
return ary;
|
791
|
-
break;
|
792
|
-
default:
|
793
|
-
#ifdef HAVE_NARRAY_H
|
794
|
-
if (NA_IsNArray(argv)) {
|
795
|
-
double *ptr1, *ptr2;
|
796
|
-
struct NARRAY *na;
|
797
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
798
|
-
GetNArray(argv, na);
|
799
|
-
n = na->total;
|
800
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
801
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
802
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(ptr1[i], m);
|
803
|
-
return ary;
|
804
|
-
}
|
805
|
-
#endif
|
806
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
807
|
-
Data_Get_Struct(argv, gsl_matrix, mm);
|
808
|
-
mnew = gsl_matrix_alloc(mm->size1, mm->size2);
|
809
|
-
for (i = 0; i < mm->size1; i++) {
|
810
|
-
for (k = 0; k < mm->size2; k++) {
|
811
|
-
val = (*func)(gsl_matrix_get(mm, i, k), m);
|
812
|
-
gsl_matrix_set(mnew, i, k, val);
|
813
|
-
}
|
814
|
-
}
|
815
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
816
|
-
} else {
|
817
|
-
CHECK_VECTOR(argv);
|
818
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
819
|
-
n = v->size;
|
820
|
-
vnew = gsl_vector_alloc(n);
|
821
|
-
for (i = 0; i < n; i++) {
|
822
|
-
val = (*func)(gsl_vector_get(v, i), m);
|
823
|
-
gsl_vector_set(vnew, i, val);
|
824
|
-
}
|
825
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
826
|
-
}
|
827
|
-
break;
|
828
|
-
}
|
829
|
-
}
|
830
|
-
|
831
|
-
VALUE rb_gsl_sf_eval_double2_m(double (*func)(double, double, gsl_mode_t),
|
832
|
-
VALUE argv, VALUE x2, VALUE m)
|
833
|
-
{
|
834
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
835
|
-
gsl_matrix *mm = NULL, *mnew = NULL;
|
836
|
-
VALUE ary, xx;
|
837
|
-
size_t i, k, n;
|
838
|
-
double val, xx2;
|
839
|
-
/*gsl_mode_t mode;
|
840
|
-
char c;*/
|
841
|
-
Need_Float(x2);
|
842
|
-
xx2 = NUM2DBL(x2);
|
843
|
-
/*c = tolower(NUM2CHR(m));
|
844
|
-
if (c == 'd') mode = GSL_PREC_DOUBLE;
|
845
|
-
else if (c == 's') mode = GSL_PREC_SINGLE;
|
846
|
-
else if (c == 'a') mode = GSL_PREC_APPROX;
|
847
|
-
else mode = GSL_PREC_DOUBLE;*/
|
848
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
849
|
-
switch (TYPE(argv)) {
|
850
|
-
case T_FLOAT:
|
851
|
-
case T_FIXNUM:
|
852
|
-
case T_BIGNUM:
|
853
|
-
return rb_float_new((*func)(NUM2DBL(argv), xx2, m));
|
854
|
-
break;
|
855
|
-
case T_ARRAY:
|
856
|
-
n = RARRAY_LEN(argv);
|
857
|
-
ary = rb_ary_new2(n);
|
858
|
-
for (i = 0; i < n; i++) {
|
859
|
-
xx = rb_ary_entry(argv, i);
|
860
|
-
Need_Float(xx);
|
861
|
-
val = (*func)(NUM2DBL(xx), xx2, m);
|
862
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
863
|
-
}
|
864
|
-
return ary;
|
865
|
-
break;
|
866
|
-
default:
|
867
|
-
#ifdef HAVE_NARRAY_H
|
868
|
-
if (NA_IsNArray(argv)) {
|
869
|
-
double *ptr1, *ptr2;
|
870
|
-
struct NARRAY *na;
|
871
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
872
|
-
GetNArray(argv, na);
|
873
|
-
n = na->total;
|
874
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
875
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
876
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(ptr1[i], xx2, m);
|
877
|
-
return ary;
|
878
|
-
}
|
879
|
-
#endif
|
880
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
881
|
-
Data_Get_Struct(argv, gsl_matrix, mm);
|
882
|
-
mnew = gsl_matrix_alloc(mm->size1, mm->size2);
|
883
|
-
for (i = 0; i < mm->size1; i++) {
|
884
|
-
for (k = 0; k < mm->size2; k++) {
|
885
|
-
val = (*func)(gsl_matrix_get(mm, i, k), xx2, m);
|
886
|
-
gsl_matrix_set(mnew, i, k, val);
|
887
|
-
}
|
888
|
-
}
|
889
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
890
|
-
} else {
|
891
|
-
CHECK_VECTOR(argv);
|
892
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
893
|
-
n = v->size;
|
894
|
-
vnew = gsl_vector_alloc(n);
|
895
|
-
for (i = 0; i < n; i++) {
|
896
|
-
val = (*func)(gsl_vector_get(v, i), xx2, m);
|
897
|
-
gsl_vector_set(vnew, i, val);
|
898
|
-
}
|
899
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
900
|
-
}
|
901
|
-
break;
|
902
|
-
}
|
903
|
-
}
|
904
|
-
|
905
|
-
VALUE rb_gsl_sf_eval_double3_m(double (*func)(double, double, double, gsl_mode_t),
|
906
|
-
VALUE argv, VALUE x2, VALUE x3, VALUE m)
|
907
|
-
{
|
908
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
909
|
-
gsl_matrix *mm = NULL, *mnew = NULL;
|
910
|
-
VALUE ary, xx;
|
911
|
-
size_t i, k, n;
|
912
|
-
double val, xx2, xx3;
|
913
|
-
/*gsl_mode_t mode;
|
914
|
-
char c;*/
|
915
|
-
Need_Float(x2); Need_Float(x3);
|
916
|
-
xx2 = NUM2DBL(x2);
|
917
|
-
xx3 = NUM2DBL(x3);
|
918
|
-
/*c = tolower(NUM2CHR(m));
|
919
|
-
if (c == 'd') mode = GSL_PREC_DOUBLE;
|
920
|
-
else if (c == 's') mode = GSL_PREC_SINGLE;
|
921
|
-
else if (c == 'a') mode = GSL_PREC_APPROX;
|
922
|
-
else mode = GSL_PREC_DOUBLE;*/
|
923
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
924
|
-
switch (TYPE(argv)) {
|
925
|
-
case T_FLOAT:
|
926
|
-
case T_FIXNUM:
|
927
|
-
case T_BIGNUM:
|
928
|
-
return rb_float_new((*func)(NUM2DBL(argv), xx2, xx3, m));
|
929
|
-
break;
|
930
|
-
case T_ARRAY:
|
931
|
-
n = RARRAY_LEN(argv);
|
932
|
-
ary = rb_ary_new2(n);
|
933
|
-
for (i = 0; i < n; i++) {
|
934
|
-
xx = rb_ary_entry(argv, i);
|
935
|
-
Need_Float(xx);
|
936
|
-
val = (*func)(NUM2DBL(xx), xx2, xx3, m);
|
937
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
938
|
-
}
|
939
|
-
return ary;
|
940
|
-
break;
|
941
|
-
default:
|
942
|
-
#ifdef HAVE_NARRAY_H
|
943
|
-
if (NA_IsNArray(argv)) {
|
944
|
-
double *ptr1, *ptr2;
|
945
|
-
struct NARRAY *na;
|
946
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
947
|
-
GetNArray(argv, na);
|
948
|
-
n = na->total;
|
949
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
950
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
951
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(ptr1[i], xx2, xx3, m);
|
952
|
-
return ary;
|
953
|
-
}
|
954
|
-
#endif
|
955
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
956
|
-
Data_Get_Struct(argv, gsl_matrix, mm);
|
957
|
-
mnew = gsl_matrix_alloc(mm->size1, mm->size2);
|
958
|
-
for (i = 0; i < mm->size1; i++) {
|
959
|
-
for (k = 0; k < mm->size2; k++) {
|
960
|
-
val = (*func)(gsl_matrix_get(mm, i, k), xx2, xx3, m);
|
961
|
-
gsl_matrix_set(mnew, i, k, val);
|
962
|
-
}
|
963
|
-
}
|
964
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
965
|
-
} else {
|
966
|
-
CHECK_VECTOR(argv);
|
967
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
968
|
-
n = v->size;
|
969
|
-
vnew = gsl_vector_alloc(n);
|
970
|
-
for (i = 0; i < n; i++) {
|
971
|
-
val = (*func)(gsl_vector_get(v, i), xx2, xx3, m);
|
972
|
-
gsl_vector_set(vnew, i, val);
|
973
|
-
}
|
974
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
975
|
-
}
|
976
|
-
break;
|
977
|
-
}
|
978
|
-
}
|
979
|
-
|
980
|
-
VALUE rb_gsl_sf_eval_double4_m(double (*func)(double, double, double, double,
|
981
|
-
gsl_mode_t),
|
982
|
-
VALUE argv, VALUE x2, VALUE x3, VALUE x4, VALUE m)
|
983
|
-
{
|
984
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
985
|
-
gsl_matrix *mm = NULL, *mnew = NULL;
|
986
|
-
VALUE ary, xx;
|
987
|
-
size_t i, k, n;
|
988
|
-
double val, xx2, xx3, xx4;
|
989
|
-
/*gsl_mode_t mode;
|
990
|
-
char c;*/
|
991
|
-
Need_Float(x2); Need_Float(x3); Need_Float(x4);
|
992
|
-
xx2 = NUM2DBL(x2); xx3 = NUM2DBL(x3); xx4 = NUM2DBL(x4);
|
993
|
-
/*c = tolower(NUM2CHR(m));
|
994
|
-
if (c == 'd') mode = GSL_PREC_DOUBLE;
|
995
|
-
else if (c == 's') mode = GSL_PREC_SINGLE;
|
996
|
-
else if (c == 'a') mode = GSL_PREC_APPROX;
|
997
|
-
else mode = GSL_PREC_DOUBLE;*/
|
998
|
-
if (CLASS_OF(argv) == rb_cRange) argv = rb_gsl_range2ary(argv);
|
999
|
-
switch (TYPE(argv)) {
|
1000
|
-
case T_FLOAT:
|
1001
|
-
case T_FIXNUM:
|
1002
|
-
case T_BIGNUM:
|
1003
|
-
return rb_float_new((*func)(NUM2DBL(argv), NUM2DBL(x2), NUM2DBL(x3),
|
1004
|
-
NUM2DBL(x4), m));
|
1005
|
-
break;
|
1006
|
-
case T_ARRAY:
|
1007
|
-
n = RARRAY_LEN(argv);
|
1008
|
-
ary = rb_ary_new2(n);
|
1009
|
-
for (i = 0; i < n; i++) {
|
1010
|
-
xx = rb_ary_entry(argv, i);
|
1011
|
-
Need_Float(xx);
|
1012
|
-
val = (*func)(NUM2DBL(xx), xx2, xx3, xx4, m);
|
1013
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
1014
|
-
}
|
1015
|
-
return ary;
|
1016
|
-
break;
|
1017
|
-
default:
|
1018
|
-
#ifdef HAVE_NARRAY_H
|
1019
|
-
if (NA_IsNArray(argv)) {
|
1020
|
-
double *ptr1, *ptr2;
|
1021
|
-
struct NARRAY *na;
|
1022
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
1023
|
-
GetNArray(argv, na);
|
1024
|
-
n = na->total;
|
1025
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
1026
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
1027
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(ptr1[i], xx2, xx3, xx4, m);
|
1028
|
-
return ary;
|
1029
|
-
}
|
1030
|
-
#endif
|
1031
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
1032
|
-
Data_Get_Struct(argv, gsl_matrix, mm);
|
1033
|
-
mnew = gsl_matrix_alloc(mm->size1, mm->size2);
|
1034
|
-
for (i = 0; i < mm->size1; i++) {
|
1035
|
-
for (k = 0; k < mm->size2; k++) {
|
1036
|
-
val = (*func)(gsl_matrix_get(mm, i, k), xx2, xx3, xx4, m);
|
1037
|
-
gsl_matrix_set(mnew, i, k, val);
|
1038
|
-
}
|
1039
|
-
}
|
1040
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
1041
|
-
} else {
|
1042
|
-
CHECK_VECTOR(argv);
|
1043
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
1044
|
-
n = v->size;
|
1045
|
-
vnew = gsl_vector_alloc(n);
|
1046
|
-
for (i = 0; i < n; i++) {
|
1047
|
-
val = (*func)(gsl_vector_get(v, i), xx2, xx3, xx4, m);
|
1048
|
-
gsl_vector_set(vnew, i, val);
|
1049
|
-
}
|
1050
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
1051
|
-
}
|
1052
|
-
break;
|
1053
|
-
}
|
1054
|
-
}
|
1055
|
-
|
1056
|
-
VALUE rb_gsl_sf_eval_e(int (*func)(double, gsl_sf_result*), VALUE x)
|
1057
|
-
{
|
1058
|
-
gsl_sf_result *rslt = NULL;
|
1059
|
-
VALUE v;
|
1060
|
-
Need_Float(x);
|
1061
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1062
|
-
(*func)(NUM2DBL(x), rslt);
|
1063
|
-
return v;
|
1064
|
-
}
|
1065
|
-
|
1066
|
-
VALUE rb_gsl_sf_eval_e_int(int (*func)(int, gsl_sf_result*), VALUE x)
|
1067
|
-
{
|
1068
|
-
gsl_sf_result *rslt = NULL;
|
1069
|
-
VALUE v;
|
1070
|
-
CHECK_FIXNUM(x);
|
1071
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1072
|
-
(*func)(NUM2INT(x), rslt);
|
1073
|
-
return v;
|
1074
|
-
}
|
1075
|
-
|
1076
|
-
VALUE rb_gsl_sf_eval_e_uint(int (*func)(unsigned int, gsl_sf_result*), VALUE x)
|
1077
|
-
{
|
1078
|
-
gsl_sf_result *rslt = NULL;
|
1079
|
-
VALUE v;
|
1080
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1081
|
-
(*func)(NUM2UINT(x), rslt);
|
1082
|
-
return v;
|
1083
|
-
}
|
1084
|
-
|
1085
|
-
VALUE rb_gsl_sf_eval_e_int_uint(int (*func)(int, unsigned int, gsl_sf_result*),
|
1086
|
-
VALUE n, VALUE x)
|
1087
|
-
{
|
1088
|
-
gsl_sf_result *rslt = NULL;
|
1089
|
-
VALUE v;
|
1090
|
-
CHECK_FIXNUM(n);
|
1091
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1092
|
-
(*func)(FIX2INT(n), NUM2UINT(x), rslt);
|
1093
|
-
return v;
|
1094
|
-
}
|
1095
|
-
|
1096
|
-
VALUE rb_gsl_sf_eval_e_double_uint(int (*func)(double, unsigned int, gsl_sf_result*),
|
1097
|
-
VALUE y, VALUE x)
|
1098
|
-
{
|
1099
|
-
gsl_sf_result *rslt = NULL;
|
1100
|
-
VALUE v;
|
1101
|
-
Need_Float(y);
|
1102
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1103
|
-
(*func)(NUM2DBL(y), NUM2UINT(x), rslt);
|
1104
|
-
return v;
|
1105
|
-
}
|
1106
|
-
|
1107
|
-
VALUE rb_gsl_sf_eval_e_int_double(int (*func)(int, double, gsl_sf_result*),
|
1108
|
-
VALUE n, VALUE x)
|
1109
|
-
{
|
1110
|
-
gsl_sf_result *rslt = NULL;
|
1111
|
-
VALUE v;
|
1112
|
-
CHECK_FIXNUM(n);
|
1113
|
-
Need_Float(x);
|
1114
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1115
|
-
(*func)(FIX2INT(n), NUM2DBL(x), rslt);
|
1116
|
-
return v;
|
1117
|
-
}
|
1118
|
-
|
1119
|
-
VALUE rb_gsl_sf_eval_e_int_double2(int (*func)(int, double, double, gsl_sf_result*),
|
1120
|
-
VALUE n, VALUE x1, VALUE x2)
|
1121
|
-
{
|
1122
|
-
gsl_sf_result *rslt = NULL;
|
1123
|
-
VALUE v;
|
1124
|
-
CHECK_FIXNUM(n);
|
1125
|
-
Need_Float(x1); Need_Float(x2);
|
1126
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1127
|
-
(*func)(FIX2INT(n), NUM2DBL(x1), NUM2DBL(x2), rslt);
|
1128
|
-
return v;
|
1129
|
-
}
|
1130
|
-
|
1131
|
-
|
1132
|
-
VALUE rb_gsl_sf_eval_e_int_int_double(int (*func)(int, int, double, gsl_sf_result*),
|
1133
|
-
VALUE n1, VALUE n2, VALUE x)
|
1134
|
-
{
|
1135
|
-
gsl_sf_result *rslt = NULL;
|
1136
|
-
VALUE v;
|
1137
|
-
CHECK_FIXNUM(n1); CHECK_FIXNUM(n2);
|
1138
|
-
Need_Float(x);
|
1139
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1140
|
-
(*func)(FIX2INT(n1), FIX2INT(n2), NUM2DBL(x), rslt);
|
1141
|
-
return v;
|
1142
|
-
}
|
1143
|
-
|
1144
|
-
VALUE rb_gsl_sf_eval_e_double2(int (*func)(double, double, gsl_sf_result*),
|
1145
|
-
VALUE x1, VALUE x2)
|
1146
|
-
{
|
1147
|
-
gsl_sf_result *rslt = NULL;
|
1148
|
-
VALUE v;
|
1149
|
-
Need_Float(x1); Need_Float(x2);
|
1150
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1151
|
-
(*func)(NUM2DBL(x1), NUM2DBL(x2), rslt);
|
1152
|
-
return v;
|
1153
|
-
}
|
1154
|
-
|
1155
|
-
|
1156
|
-
VALUE rb_gsl_sf_eval_e_double3(int (*func)(double, double, double, gsl_sf_result*),
|
1157
|
-
VALUE x1, VALUE x2, VALUE x3)
|
1158
|
-
{
|
1159
|
-
gsl_sf_result *rslt = NULL;
|
1160
|
-
VALUE v;
|
1161
|
-
Need_Float(x1); Need_Float(x2); Need_Float(x3);
|
1162
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1163
|
-
(*func)(NUM2DBL(x1), NUM2DBL(x2),NUM2DBL(x3), rslt);
|
1164
|
-
return v;
|
1165
|
-
}
|
1166
|
-
|
1167
|
-
VALUE rb_gsl_sf_eval_e_m(int (*func)(double, gsl_mode_t, gsl_sf_result*),
|
1168
|
-
VALUE x, VALUE m)
|
1169
|
-
{
|
1170
|
-
gsl_mode_t mode;
|
1171
|
-
char c;
|
1172
|
-
gsl_sf_result *rslt = NULL;
|
1173
|
-
VALUE v;
|
1174
|
-
Need_Float(x);
|
1175
|
-
switch (TYPE(m)) {
|
1176
|
-
case T_STRING:
|
1177
|
-
c = tolower(NUM2CHR(m));
|
1178
|
-
if (c == 'd') mode = GSL_PREC_DOUBLE;
|
1179
|
-
else if (c == 's') mode = GSL_PREC_SINGLE;
|
1180
|
-
else if (c == 'a') mode = GSL_PREC_APPROX;
|
1181
|
-
else mode = GSL_PREC_DOUBLE;
|
1182
|
-
break;
|
1183
|
-
case T_FIXNUM:
|
1184
|
-
mode = FIX2INT(m);
|
1185
|
-
break;
|
1186
|
-
default:
|
1187
|
-
rb_raise(rb_eArgError, "wrong type argument %s (String or Fixnum expected)",
|
1188
|
-
rb_class2name(CLASS_OF(m)));
|
1189
|
-
break;
|
1190
|
-
}
|
1191
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1192
|
-
(*func)(NUM2DBL(x), mode, rslt);
|
1193
|
-
return v;
|
1194
|
-
}
|
1195
|
-
|
1196
|
-
|
1197
|
-
VALUE rb_gsl_sf_eval_e_double2_m(int (*func)(double, double, gsl_mode_t, gsl_sf_result*),
|
1198
|
-
VALUE x1, VALUE x2, VALUE m)
|
1199
|
-
{
|
1200
|
-
gsl_mode_t mode;
|
1201
|
-
char c;
|
1202
|
-
gsl_sf_result *rslt = NULL;
|
1203
|
-
VALUE v;
|
1204
|
-
Need_Float(x1); Need_Float(x2);
|
1205
|
-
switch (TYPE(m)) {
|
1206
|
-
case T_STRING:
|
1207
|
-
c = tolower(NUM2CHR(m));
|
1208
|
-
if (c == 'd') mode = GSL_PREC_DOUBLE;
|
1209
|
-
else if (c == 's') mode = GSL_PREC_SINGLE;
|
1210
|
-
else if (c == 'a') mode = GSL_PREC_APPROX;
|
1211
|
-
else mode = GSL_PREC_DOUBLE;
|
1212
|
-
break;
|
1213
|
-
case T_FIXNUM:
|
1214
|
-
mode = FIX2INT(m);
|
1215
|
-
break;
|
1216
|
-
default:
|
1217
|
-
rb_raise(rb_eArgError, "wrong type argument %s (String or Fixnum expected)",
|
1218
|
-
rb_class2name(CLASS_OF(m)));
|
1219
|
-
break;
|
1220
|
-
}
|
1221
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1222
|
-
(*func)(NUM2DBL(x1), NUM2DBL(x2), mode, rslt);
|
1223
|
-
return v;
|
1224
|
-
}
|
1225
|
-
|
1226
|
-
VALUE rb_gsl_sf_eval_e_double3_m(int (*func)(double, double, double, gsl_mode_t, gsl_sf_result*),
|
1227
|
-
VALUE x1, VALUE x2, VALUE x3, VALUE m)
|
1228
|
-
{
|
1229
|
-
gsl_mode_t mode;
|
1230
|
-
char c;
|
1231
|
-
gsl_sf_result *rslt = NULL;
|
1232
|
-
VALUE v;
|
1233
|
-
Need_Float(x1); Need_Float(x2); Need_Float(x3);
|
1234
|
-
switch (TYPE(m)) {
|
1235
|
-
case T_STRING:
|
1236
|
-
c = tolower(NUM2CHR(m));
|
1237
|
-
if (c == 'd') mode = GSL_PREC_DOUBLE;
|
1238
|
-
else if (c == 's') mode = GSL_PREC_SINGLE;
|
1239
|
-
else if (c == 'a') mode = GSL_PREC_APPROX;
|
1240
|
-
else mode = GSL_PREC_DOUBLE;
|
1241
|
-
break;
|
1242
|
-
case T_FIXNUM:
|
1243
|
-
mode = FIX2INT(m);
|
1244
|
-
break;
|
1245
|
-
default:
|
1246
|
-
rb_raise(rb_eArgError, "wrong type argument %s (String or Fixnum expected)",
|
1247
|
-
rb_class2name(CLASS_OF(m)));
|
1248
|
-
break;
|
1249
|
-
}
|
1250
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1251
|
-
(*func)(NUM2DBL(x1), NUM2DBL(x2),NUM2DBL(x3), mode, rslt);
|
1252
|
-
return v;
|
1253
|
-
}
|
1254
|
-
|
1255
|
-
|
1256
|
-
VALUE rb_gsl_sf_eval_e_double4_m(int (*func)(double, double, double, double, gsl_mode_t, gsl_sf_result*),
|
1257
|
-
VALUE x1, VALUE x2, VALUE x3, VALUE x4, VALUE m)
|
1258
|
-
{
|
1259
|
-
gsl_mode_t mode;
|
1260
|
-
char c;
|
1261
|
-
gsl_sf_result *rslt = NULL;
|
1262
|
-
VALUE v;
|
1263
|
-
Need_Float(x1); Need_Float(x2); Need_Float(x3); Need_Float(x4);
|
1264
|
-
switch (TYPE(m)) {
|
1265
|
-
case T_STRING:
|
1266
|
-
c = tolower(NUM2CHR(m));
|
1267
|
-
if (c == 'd') mode = GSL_PREC_DOUBLE;
|
1268
|
-
else if (c == 's') mode = GSL_PREC_SINGLE;
|
1269
|
-
else if (c == 'a') mode = GSL_PREC_APPROX;
|
1270
|
-
else mode = GSL_PREC_DOUBLE;
|
1271
|
-
break;
|
1272
|
-
case T_FIXNUM:
|
1273
|
-
mode = FIX2INT(m);
|
1274
|
-
break;
|
1275
|
-
default:
|
1276
|
-
rb_raise(rb_eArgError, "wrong type argument %s (String or Fixnum expected)",
|
1277
|
-
rb_class2name(CLASS_OF(m)));
|
1278
|
-
break;
|
1279
|
-
}
|
1280
|
-
v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt);
|
1281
|
-
(*func)(NUM2DBL(x1), NUM2DBL(x2),NUM2DBL(x3), NUM2DBL(x4), mode, rslt);
|
1282
|
-
return v;
|
1283
|
-
}
|
1284
|
-
|
1285
|
-
|
1286
|
-
VALUE eval_sf(double (*func)(double, gsl_mode_t), VALUE argv)
|
1287
|
-
{
|
1288
|
-
VALUE ary, xx;
|
1289
|
-
size_t i, k, n;
|
1290
|
-
double val;
|
1291
|
-
gsl_vector *v = NULL, *vnew = NULL;
|
1292
|
-
gsl_matrix *mm = NULL, *mnew = NULL;
|
1293
|
-
switch (TYPE(argv)) {
|
1294
|
-
case T_FLOAT:
|
1295
|
-
case T_FIXNUM:
|
1296
|
-
case T_BIGNUM:
|
1297
|
-
return rb_float_new((*func)(NUM2DBL(argv), GSL_PREC_DOUBLE));
|
1298
|
-
break;
|
1299
|
-
case T_ARRAY:
|
1300
|
-
n = RARRAY_LEN(argv);
|
1301
|
-
ary = rb_ary_new2(n);
|
1302
|
-
for (i = 0; i < n; i++) {
|
1303
|
-
xx = rb_ary_entry(argv, i);
|
1304
|
-
Need_Float(xx);
|
1305
|
-
val = (*func)(NUM2DBL(xx), GSL_PREC_DOUBLE);
|
1306
|
-
rb_ary_store(ary, i, rb_float_new(val));
|
1307
|
-
}
|
1308
|
-
return ary;
|
1309
|
-
break;
|
1310
|
-
default:
|
1311
|
-
#ifdef HAVE_NARRAY_H
|
1312
|
-
if (NA_IsNArray(argv)) {
|
1313
|
-
double *ptr1, *ptr2;
|
1314
|
-
struct NARRAY *na;
|
1315
|
-
ptr1 = NA_PTR_TYPE(argv, double*);
|
1316
|
-
GetNArray(argv, na);
|
1317
|
-
n = na->total;
|
1318
|
-
ary = na_make_object(NA_DFLOAT, na->rank, na->shape, CLASS_OF(argv));
|
1319
|
-
ptr2 = NA_PTR_TYPE(ary, double*);
|
1320
|
-
for (i = 0; i < n; i++) ptr2[i] = (*func)(ptr1[i], GSL_PREC_DOUBLE);
|
1321
|
-
return ary;
|
1322
|
-
}
|
1323
|
-
#endif
|
1324
|
-
if (rb_obj_is_kind_of(argv, cgsl_matrix)) {
|
1325
|
-
Data_Get_Struct(argv, gsl_matrix, mm);
|
1326
|
-
mnew = gsl_matrix_alloc(mm->size1, mm->size2);
|
1327
|
-
for (i = 0; i < mm->size1; i++) {
|
1328
|
-
for (k = 0; k < mm->size2; k++) {
|
1329
|
-
val = (*func)(gsl_matrix_get(mm, i, k), GSL_PREC_DOUBLE);
|
1330
|
-
gsl_matrix_set(mnew, i, k, val);
|
1331
|
-
}
|
1332
|
-
}
|
1333
|
-
return Data_Wrap_Struct(cgsl_matrix, 0, gsl_matrix_free, mnew);
|
1334
|
-
} else {
|
1335
|
-
CHECK_VECTOR(argv);
|
1336
|
-
Data_Get_Struct(argv, gsl_vector, v);
|
1337
|
-
n = v->size;
|
1338
|
-
vnew = gsl_vector_alloc(n);
|
1339
|
-
for (i = 0; i < n; i++) {
|
1340
|
-
val = (*func)(gsl_vector_get(v, i), GSL_PREC_DOUBLE);
|
1341
|
-
gsl_vector_set(vnew, i, val);
|
1342
|
-
}
|
1343
|
-
return Data_Wrap_Struct(cgsl_vector, 0, gsl_vector_free, vnew);
|
1344
|
-
}
|
1345
|
-
break;
|
1346
|
-
}
|
1347
|
-
}
|
1348
|
-
|
1349
|
-
VALUE rb_gsl_sf_eval_complex(double (*f)(double), VALUE obj)
|
1350
|
-
{
|
1351
|
-
gsl_complex *z, *znew, c;
|
1352
|
-
gsl_vector_complex *v, *vnew;
|
1353
|
-
gsl_matrix_complex *m, *mnew;
|
1354
|
-
size_t i, j;
|
1355
|
-
if (COMPLEX_P(obj)) {
|
1356
|
-
Data_Get_Struct(obj, gsl_complex, z);
|
1357
|
-
znew = xmalloc(sizeof(gsl_complex));
|
1358
|
-
GSL_SET_REAL(znew, (*f)(GSL_REAL(*z)));
|
1359
|
-
GSL_SET_IMAG(znew, (*f)(GSL_IMAG(*z)));
|
1360
|
-
return Data_Wrap_Struct(cgsl_complex, 0, free, znew);
|
1361
|
-
} else if (VECTOR_COMPLEX_P(obj)) {
|
1362
|
-
Data_Get_Struct(obj, gsl_vector_complex, v);
|
1363
|
-
vnew = gsl_vector_complex_alloc(v->size);
|
1364
|
-
for (i = 0; i < v->size; i++) {
|
1365
|
-
z = GSL_COMPLEX_AT(v, i);
|
1366
|
-
GSL_SET_REAL(&c, (*f)(GSL_REAL(*z)));
|
1367
|
-
GSL_SET_IMAG(&c, (*f)(GSL_IMAG(*z)));
|
1368
|
-
gsl_vector_complex_set(vnew, i, c);
|
1369
|
-
}
|
1370
|
-
return Data_Wrap_Struct(cgsl_vector_complex, 0, gsl_vector_complex_free, vnew);
|
1371
|
-
} else if (MATRIX_COMPLEX_P(obj)) {
|
1372
|
-
Data_Get_Struct(obj, gsl_matrix_complex, m);
|
1373
|
-
mnew = gsl_matrix_complex_alloc(m->size1, m->size2);
|
1374
|
-
for (i = 0; i < m->size1; i++) {
|
1375
|
-
for (j = 0; j < m->size2; j++) {
|
1376
|
-
c = gsl_matrix_complex_get(m, i, j);
|
1377
|
-
GSL_SET_REAL(&c, (*f)(GSL_REAL(c)));
|
1378
|
-
GSL_SET_IMAG(&c, (*f)(GSL_IMAG(c)));
|
1379
|
-
gsl_matrix_complex_set(mnew, i, j, c);
|
1380
|
-
}
|
1381
|
-
}
|
1382
|
-
return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, mnew);
|
1383
|
-
} else {
|
1384
|
-
rb_raise(rb_eTypeError,
|
1385
|
-
"wrong argument type %s "
|
1386
|
-
" (GSL::Complex or GSL::Vector::Complex expected)",
|
1387
|
-
rb_class2name(CLASS_OF(obj)));
|
1388
|
-
}
|
1389
|
-
}
|
1390
|
-
|
1391
|
-
void Init_gsl_sf(VALUE module)
|
1392
|
-
{
|
1393
|
-
VALUE mgsl_sf;
|
1394
|
-
mgsl_sf = rb_define_module_under(module, "Sf");
|
1395
|
-
|
1396
|
-
cgsl_sf_result = rb_define_class_under(mgsl_sf, "Result",
|
1397
|
-
cGSL_Object);
|
1398
|
-
rb_define_singleton_method(cgsl_sf_result, "new", rb_gsl_sf_result_new,
|
1399
|
-
0);
|
1400
|
-
rb_define_method(cgsl_sf_result, "print", rb_gsl_sf_result_print, 0);
|
1401
|
-
rb_define_method(cgsl_sf_result, "inspect", rb_gsl_sf_result_inspect, 0);
|
1402
|
-
rb_define_method(cgsl_sf_result, "val", rb_gsl_sf_result_val, 0);
|
1403
|
-
rb_define_method(cgsl_sf_result, "err", rb_gsl_sf_result_err, 0);
|
1404
|
-
rb_define_method(cgsl_sf_result, "to_a", rb_gsl_sf_result_to_a, 0);
|
1405
|
-
rb_define_method(cgsl_sf_result, "to_s", rb_gsl_sf_result_to_s, 0);
|
1406
|
-
|
1407
|
-
cgsl_sf_result_e10 = rb_define_class_under(mgsl_sf, "Result_e10",
|
1408
|
-
cGSL_Object);
|
1409
|
-
rb_define_singleton_method(cgsl_sf_result_e10, "new",
|
1410
|
-
rb_gsl_sf_result_e10_new, 0);
|
1411
|
-
rb_define_method(cgsl_sf_result_e10, "val", rb_gsl_sf_result_e10_val, 0);
|
1412
|
-
rb_define_method(cgsl_sf_result_e10, "err", rb_gsl_sf_result_e10_err, 0);
|
1413
|
-
rb_define_method(cgsl_sf_result_e10, "e10", rb_gsl_sf_result_e10_e10, 0);
|
1414
|
-
rb_define_method(cgsl_sf_result_e10, "to_a", rb_gsl_sf_result_e10_to_a, 0);
|
1415
|
-
rb_define_method(cgsl_sf_result_e10, "to_s", rb_gsl_sf_result_e10_to_s, 0);
|
1416
|
-
|
1417
|
-
Init_gsl_sf_airy(mgsl_sf);
|
1418
|
-
Init_gsl_sf_bessel(mgsl_sf);
|
1419
|
-
Init_gsl_sf_clausen(mgsl_sf);
|
1420
|
-
Init_gsl_sf_coulomb(mgsl_sf);
|
1421
|
-
Init_gsl_sf_coupling(mgsl_sf);
|
1422
|
-
Init_gsl_sf_dawson(mgsl_sf);
|
1423
|
-
Init_gsl_sf_debye(mgsl_sf);
|
1424
|
-
Init_gsl_sf_dilog(mgsl_sf);
|
1425
|
-
Init_gsl_sf_elementary(mgsl_sf);
|
1426
|
-
Init_gsl_sf_ellint(mgsl_sf);
|
1427
|
-
Init_gsl_sf_elljac(mgsl_sf);
|
1428
|
-
Init_gsl_sf_erfc(mgsl_sf);
|
1429
|
-
Init_gsl_sf_exp(mgsl_sf);
|
1430
|
-
Init_gsl_sf_expint(mgsl_sf);
|
1431
|
-
Init_gsl_sf_fermi_dirac(mgsl_sf);
|
1432
|
-
Init_gsl_sf_gamma(mgsl_sf);
|
1433
|
-
Init_gsl_sf_gegenbauer(mgsl_sf);
|
1434
|
-
Init_gsl_sf_hyperg(mgsl_sf);
|
1435
|
-
Init_gsl_sf_laguerre(mgsl_sf);
|
1436
|
-
Init_gsl_sf_lambert(mgsl_sf);
|
1437
|
-
Init_gsl_sf_legendre(mgsl_sf);
|
1438
|
-
Init_gsl_sf_log(mgsl_sf);
|
1439
|
-
Init_gsl_sf_power(mgsl_sf);
|
1440
|
-
Init_gsl_sf_psi(mgsl_sf);
|
1441
|
-
Init_gsl_sf_synchrotron(mgsl_sf);
|
1442
|
-
Init_gsl_sf_transport(mgsl_sf);
|
1443
|
-
Init_gsl_sf_trigonometric(mgsl_sf);
|
1444
|
-
Init_gsl_sf_zeta(mgsl_sf);
|
1445
|
-
Init_sf_mathieu(mgsl_sf);
|
1446
|
-
}
|