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/rdoc/fft.rdoc
DELETED
@@ -1,535 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# = Fast Fourier Transforms
|
3
|
-
# Contents:
|
4
|
-
# 1. {Mathematical Definitions}[link:rdoc/fft_rdoc.html#label-Mathematical+Definitions]
|
5
|
-
# 1. {Complex data FFTs}[link:rdoc/fft_rdoc.html#label-Complex+data+FFTs]
|
6
|
-
# 1. {Overview of complex data FFTs}[link:rdoc/fft_rdoc.html#label-Overview+of+complex+data+FFTs]
|
7
|
-
# 1. {Radix-2 FFT routines for complex data}[link:rdoc/fft_rdoc.html#label-Radix-2+FFT+routines+for+complex+data]
|
8
|
-
# 1. {Example of the complex Radix-2 FFT}[link:rdoc/fft_rdoc.html#label-Example+of+complex+Radix-2+FFT]
|
9
|
-
# 1. {Mixed-radix FFT routines for complex data}[link:rdoc/fft_rdoc.html#label-Mixed-radix+FFT+routines+for+complex+data]
|
10
|
-
# 1. {GSL::FFT::ComplexWavetable class}[link:rdoc/fft_rdoc.html#label-ComplexWavetable+class]
|
11
|
-
# 1. {GSL::FFT::ComplexWorkspace class}[link:rdoc/fft_rdoc.html#label-ComplexWorkspace+class]
|
12
|
-
# 1. {Methods to compute the transform}[link:rdoc/fft_rdoc.html#label-Methods+to+compute+transform]
|
13
|
-
# 1. {Example of the mixed-radix FFT}[link:rdoc/fft_rdoc.html#label-Example+to+use+the+mixed-radix+FFT+algorithm]
|
14
|
-
# 1. {Real data FFTs}[link:rdoc/fft_rdoc.html#label-Real+data+FFTs]
|
15
|
-
# 1. {Overview of real data FFTs}[link:rdoc/fft_rdoc.html#label-Overview+of+real+data+FFTs]
|
16
|
-
# 1. {Radix-2 FFT routines for real data}[link:rdoc/fft_rdoc.html#label-Radix-2+FFT+routines+for+real+data]
|
17
|
-
# 1. {Mixed-radix FFT routines for real data}[link:rdoc/fft_rdoc.html#label-Mixed-radix+FFT+routines+for+real+data]
|
18
|
-
# 1. {Data storage scheme}[link:rdoc/fft_rdoc.html#label-Data+storage+scheme]
|
19
|
-
# 1. {Wavetable and Workspace classes}[link:rdoc/fft_rdoc.html#label-Wavetable+and+Workspace+classes]
|
20
|
-
# 1. {Methods for real FFTs}[link:rdoc/fft_rdoc.html#label-Methods+for+mixed-radix+real+FFTs]
|
21
|
-
# 1. {Examples}[link:rdoc/fft_rdoc.html#label-Examples]
|
22
|
-
#
|
23
|
-
# == Mathematical Definitions
|
24
|
-
# Fast Fourier Transforms are efficient algorithms for calculating the discrete
|
25
|
-
# fourier transform (DFT),
|
26
|
-
#
|
27
|
-
# The DFT usually arises as an approximation to the continuous fourier transform
|
28
|
-
# when functions are sampled at discrete intervals in space or time.
|
29
|
-
# The naive evaluation of the discrete fourier transform is a matrix-vector
|
30
|
-
# multiplication W\vec{z}. A general matrix-vector multiplication takes O(N^2)
|
31
|
-
# operations for N data-points. Fast fourier transform algorithms use a
|
32
|
-
# divide-and-conquer strategy to factorize the matrix W into smaller
|
33
|
-
# sub-matrices, corresponding to the integer factors of the length N.
|
34
|
-
# If N can be factorized into a product of integers f_1 f_2 ... f_n then the
|
35
|
-
# DFT can be computed in O(N \sum f_i) operations. For a radix-2 FFT this
|
36
|
-
# gives an operation count of O(N \log_2 N).
|
37
|
-
#
|
38
|
-
# All the FFT functions offer three types of transform: forwards, inverse and
|
39
|
-
# backwards, based on the same mathematical definitions. The definition of the
|
40
|
-
# forward fourier transform, x = FFT(z), is, and the definition of the inverse
|
41
|
-
# fourier transform, x = IFFT(z), is, The factor of 1/N makes this a true
|
42
|
-
# inverse. For example, a call to gsl_fft_complex_forward followed by a call
|
43
|
-
# to gsl_fft_complex_inverse should return the original data (within numerical
|
44
|
-
# errors).
|
45
|
-
#
|
46
|
-
# In general there are two possible choices for the sign of the exponential
|
47
|
-
# in the transform/ inverse-transform pair. GSL follows the same convention as
|
48
|
-
# FFTPACK, using a negative exponential for the forward transform.
|
49
|
-
# The advantage of this convention is that the inverse transform recreates
|
50
|
-
# the original function with simple fourier synthesis. Numerical Recipes uses
|
51
|
-
# the opposite convention, a positive exponential in the forward transform.
|
52
|
-
#
|
53
|
-
# The backwards FFT is simply our terminology for an unscaled version of the
|
54
|
-
# inverse FFT, When the overall scale of the result is unimportant it is often
|
55
|
-
# convenient to use the backwards FFT instead of the inverse to save unnecessary
|
56
|
-
# divisions.
|
57
|
-
#
|
58
|
-
#
|
59
|
-
# == Complex data FFTs
|
60
|
-
# === Overview of complex data FFTs
|
61
|
-
# The complex data FFT routines are provided as instance methods of
|
62
|
-
# {GSL::Vector::Complex}[link:rdoc/vector_complex_rdoc.html].
|
63
|
-
#
|
64
|
-
# Here is a table which shows the layout of the array data, and the correspondence
|
65
|
-
# between the time-domain complex data z, and the frequency-domain complex data x.
|
66
|
-
#
|
67
|
-
# index z x = FFT(z)
|
68
|
-
#
|
69
|
-
# 0 z(t = 0) x(f = 0)
|
70
|
-
# 1 z(t = 1) x(f = 1/(N Delta))
|
71
|
-
# 2 z(t = 2) x(f = 2/(N Delta))
|
72
|
-
# . ........ ..................
|
73
|
-
# N/2 z(t = N/2) x(f = +1/(2 Delta),
|
74
|
-
# -1/(2 Delta))
|
75
|
-
# . ........ ..................
|
76
|
-
# N-3 z(t = N-3) x(f = -3/(N Delta))
|
77
|
-
# N-2 z(t = N-2) x(f = -2/(N Delta))
|
78
|
-
# N-1 z(t = N-1) x(f = -1/(N Delta))
|
79
|
-
#
|
80
|
-
#
|
81
|
-
# When N is even the location N/2 contains the most positive and negative
|
82
|
-
# frequencies +1/(2 Delta), -1/(2 Delta) which are equivalent. If N is odd then
|
83
|
-
# general structure of the table above still applies, but N/2 does not appear.
|
84
|
-
#
|
85
|
-
# {GSL::Vector::Complex}[link:rdoc/vector_complex_rdoc.html] provides four methods for
|
86
|
-
# shifting the frequency domain data between <b>FFT order</b>, shown in the table
|
87
|
-
# above, and <b>natural order</b>, which has the most negative freqeuncy component
|
88
|
-
# first, the zero frequency component in the middle, and the most positive
|
89
|
-
# frequency component last.
|
90
|
-
#
|
91
|
-
# ---
|
92
|
-
# * GSL::Vector::Complex#fftshift
|
93
|
-
# * GSL::Vector::Complex#fftshift!
|
94
|
-
#
|
95
|
-
# Shifts the data of <tt>self</tt> from FFT order to natural order. The
|
96
|
-
# <tt>#fftshift</tt> method leaves <tt>self</tt> unmodified and returns a new
|
97
|
-
# <tt>GSL::Vector::Complex</tt> object containing the shifted data. The
|
98
|
-
# <tt>#fftshift!</tt> method modifies <tt>self</tt> in-place and returns
|
99
|
-
# <tt>self</tt>. Note that <tt>#fftshift</tt> and <tt>#ifftshift</tt> are equivalent
|
100
|
-
# for even lengths, but not for odd lengths.
|
101
|
-
#
|
102
|
-
# ---
|
103
|
-
# * GSL::Vector::Complex#ifftshift
|
104
|
-
# * GSL::Vector::Complex#ifftshift!
|
105
|
-
#
|
106
|
-
# Shifts the data of <tt>self</tt> from natural order to FFT order. The
|
107
|
-
# <tt>#ifftshift</tt> method leaves <tt>self</tt> unmodified and returns a new
|
108
|
-
# <tt>GSL::Vector::Complex</tt> object containing the shifted data. The
|
109
|
-
# <tt>#ifftshift!</tt> method modifies <tt>self</tt> in-place and returns
|
110
|
-
# <tt>self</tt>. Note that <tt>#fftshift</tt> and <tt>#ifftshift</tt> are equivalent
|
111
|
-
# for even lengths, but not for odd lengths.
|
112
|
-
#
|
113
|
-
# === Radix-2 FFT routines for complex data
|
114
|
-
# The radix-2 algorithms are simple and compact, although not necessarily the
|
115
|
-
# most efficient. They use the Cooley-Tukey algorithm to compute complex
|
116
|
-
# FFTs for lengths which are a power of 2 -- no additional storage is required.
|
117
|
-
# The corresponding self-sorting mixed-radix routines offer better performance
|
118
|
-
# at the expense of requiring additional working space.
|
119
|
-
#
|
120
|
-
# <b>The FFT methods described below return FFTed data, and the input vector is
|
121
|
-
# not changed. Use methods with '!' as <tt>tranform!</tt> for in-place transform.</b>
|
122
|
-
#
|
123
|
-
# ---
|
124
|
-
# * GSL::Vector::Complex#radix2_forward
|
125
|
-
# * GSL::Vector::Complex#radix2_backward
|
126
|
-
# * GSL::Vector::Complex#radix2_inverse
|
127
|
-
#
|
128
|
-
#
|
129
|
-
# These functions compute forward, backward and inverse FFTs of the complex
|
130
|
-
# vector using a radix-2 decimation-in-time algorithm. The length of the
|
131
|
-
# transform is restricted to powers of two. These methods return the FFTed
|
132
|
-
# data, and the input data is not changed.
|
133
|
-
#
|
134
|
-
# ---
|
135
|
-
# * GSL::Vector::Complex#radix2_transform(sign)
|
136
|
-
#
|
137
|
-
#
|
138
|
-
# The sign argument can be either <tt>GSL::FFT::FORWARD</tt> or <tt>GSL::FFT::BACKWARD</tt>.
|
139
|
-
#
|
140
|
-
# ---
|
141
|
-
# * GSL::Vector::Complex#radix2_dif_forward
|
142
|
-
# * GSL::Vector::Complex#radix2_dif_backward
|
143
|
-
# * GSL::Vector::Complex#radix2_dif_inverse
|
144
|
-
# * GSL::Vector::Complex#radix2_dif_transform
|
145
|
-
#
|
146
|
-
#
|
147
|
-
# These are decimation-in-frequency versions of the radix-2 FFT functions.
|
148
|
-
#
|
149
|
-
# ==== Example of complex Radix-2 FFT
|
150
|
-
# Here is an example program which computes the FFT of a short pulse in a
|
151
|
-
# sample of length 128. To make the resulting Fourier transform real the pulse
|
152
|
-
# is defined for equal positive and negative times (-10 ... 10), where the
|
153
|
-
# negative times wrap around the end of the array.
|
154
|
-
#
|
155
|
-
# require("gsl")
|
156
|
-
# include GSL
|
157
|
-
#
|
158
|
-
# n = 128
|
159
|
-
# data = Vector::Complex[n]
|
160
|
-
#
|
161
|
-
# data[0] = 1.0
|
162
|
-
# for i in 1..10 do
|
163
|
-
# data[i] = 1.0
|
164
|
-
# data[n-i] = 1.0
|
165
|
-
# end
|
166
|
-
#
|
167
|
-
# #for i in 0...n do
|
168
|
-
# # printf("%d %e %e\n", i, data[i].re, data[i].im)
|
169
|
-
# #end
|
170
|
-
#
|
171
|
-
# # You can choose whichever you like
|
172
|
-
# #ffted = data.radix2_forward()
|
173
|
-
# ffted = data.radix2_transform(FFT::FORWARD)
|
174
|
-
# ffted /= Math::sqrt(n)
|
175
|
-
# for i in 0...n do
|
176
|
-
# printf("%d %e %e\n", i, ffted[i].re, ffted[i].im)
|
177
|
-
# end
|
178
|
-
#
|
179
|
-
# === Mixed-radix FFT routines for complex data
|
180
|
-
#
|
181
|
-
# ==== ComplexWavetable class
|
182
|
-
# ---
|
183
|
-
# * GSL::FFT::ComplexWavetable.alloc(n)
|
184
|
-
#
|
185
|
-
#
|
186
|
-
# This method prepares a trigonometric lookup table for a complex FFT of length <tt>n</tt>.
|
187
|
-
# The length <tt>n</tt> is factorized into a product of subtransforms, and the factors and their
|
188
|
-
# trigonometric coefficients are stored in the wavetable. The trigonometric coefficients are
|
189
|
-
# computed using direct calls to sin and cos, for accuracy. Recursion relations could be used
|
190
|
-
# to compute the lookup table faster, but if an application performs many FFTs of the same
|
191
|
-
# length then this computation is a one-off overhead which does not affect the final
|
192
|
-
# throughput.
|
193
|
-
#
|
194
|
-
# The <tt>Wavetable</tt> object can be used repeatedly for any transform of the same length.
|
195
|
-
# The table is not modified by calls to any of the other FFT functions. The same wavetable
|
196
|
-
# can be used for both forward and backward (or inverse) transforms of a given length.
|
197
|
-
#
|
198
|
-
# ---
|
199
|
-
# * GSL::FFT::ComplexWavetable#n
|
200
|
-
# * GSL::FFT::ComplexWavetable#nf
|
201
|
-
# * GSL::FFT::ComplexWavetable#factor
|
202
|
-
#
|
203
|
-
#
|
204
|
-
# ==== ComplexWorkspace class
|
205
|
-
# ---
|
206
|
-
# * GSL::FFT::ComplexWorkspace.alloc(n)
|
207
|
-
#
|
208
|
-
#
|
209
|
-
# Creates a workspace for a complex transform of length <tt>n</tt>.
|
210
|
-
#
|
211
|
-
# ==== Methods to compute transform
|
212
|
-
# <b>The FFT methods described below return FFTed data, and the input vector is not changed. Use methods with '!' as <tt>tranform!</tt> for in-place transform.</b>
|
213
|
-
#
|
214
|
-
# ---
|
215
|
-
# * GSL::Vector::Complex#forward(table, work)
|
216
|
-
# * GSL::Vector::Complex#forward(table)
|
217
|
-
# * GSL::Vector::Complex#forward(work)
|
218
|
-
# * GSL::Vector::Complex#forward()
|
219
|
-
# * GSL::Vector::Complex#backward(arguments same as forward)
|
220
|
-
# * GSL::Vector::Complex#inverse(arguments same as forward)
|
221
|
-
# * GSL::Vector::Complex#transform(arguments same as forward, sign)
|
222
|
-
#
|
223
|
-
#
|
224
|
-
# These methods compute forward, backward and inverse FFTs of the complex
|
225
|
-
# vector <tt>self</tt>, using a mixed radix decimation-in-frequency algorithm.
|
226
|
-
# There is no restriction on the length. Efficient modules are provided for
|
227
|
-
# subtransforms of length 2, 3, 4, 5, 6 and 7. Any remaining factors are
|
228
|
-
# computed with a slow, O(n^2), general-n module.
|
229
|
-
#
|
230
|
-
# The caller can supply a <tt>table</tt> containing the trigonometric lookup
|
231
|
-
# tables and a workspace <tt>work</tt> (they are optional).
|
232
|
-
#
|
233
|
-
# The sign argument for the method <tt>transform</tt> can be either
|
234
|
-
# <tt>GSL::FFT::FORWARD</tt> or <tt>GSL::FFT::BACKWARD</tt>.
|
235
|
-
#
|
236
|
-
# These methods return the FFTed data, and the input data is not changed.
|
237
|
-
#
|
238
|
-
# ==== Example to use the mixed-radix FFT algorithm
|
239
|
-
# require 'gsl'
|
240
|
-
# include GSL
|
241
|
-
#
|
242
|
-
# n = 630
|
243
|
-
# data = FFT::Vector::Complex[n]
|
244
|
-
#
|
245
|
-
# table = FFT::ComplexWavetable.alloc(n)
|
246
|
-
# space = FFT::ComplexWorkspace.alloc(n)
|
247
|
-
#
|
248
|
-
# data[0] = 1.0
|
249
|
-
# for i in 1..10 do
|
250
|
-
# data[i] = 1.0
|
251
|
-
# end
|
252
|
-
#
|
253
|
-
# ffted = data.forward(table, space)
|
254
|
-
# #ffted = data.forward()
|
255
|
-
# #ffted = data.transform(FFT:Forward)
|
256
|
-
#
|
257
|
-
# ffted /= Math::sqrt(n)
|
258
|
-
# for i in 0...n do
|
259
|
-
# printf("%d %e %e\n", i, data[i].re, data[i].im)
|
260
|
-
# end
|
261
|
-
#
|
262
|
-
# == Real data FFTs
|
263
|
-
# === Overview of real data FFTs
|
264
|
-
#
|
265
|
-
# The functions for real data FFTs are provided as instance methods of
|
266
|
-
# {GSL::Vector}[link:rdoc/vector_rdoc.html]. While they are similar to those for
|
267
|
-
# complex data, there is an important difference in the data storage layout
|
268
|
-
# between forward and inverse transforms. The Fourier transform of a real
|
269
|
-
# sequence is not real. It is a complex sequence with a special symmetry. A
|
270
|
-
# sequence with this symmetry is called <tt>conjugate-complex</tt> or
|
271
|
-
# <tt>half-complex</tt> and requires only as much storage as the original real
|
272
|
-
# sequence instead of twice as much.
|
273
|
-
#
|
274
|
-
# Forward transforms of real sequences produce half complex sequences of the same
|
275
|
-
# length. Backward and inverse transforms of half complex sequences produce real
|
276
|
-
# sequences of the same length. In both cases, the input and output sequences
|
277
|
-
# are instances of {GSL::Vector}[link:rdoc/vector_rdoc.html].
|
278
|
-
#
|
279
|
-
# The precise storage arrangements of half complex seqeunces depend on the
|
280
|
-
# algorithm, and are different for radix-2 and mixed-radix routines. The radix-2
|
281
|
-
# functions operate in-place, which constrains the locations where each element
|
282
|
-
# can be stored. The restriction forces real and imaginary parts to be stored far
|
283
|
-
# apart. The mixed-radix algorithm does not have this restriction, and it stores
|
284
|
-
# the real and imaginary parts of a given term in neighboring locations (which is
|
285
|
-
# desirable for better locality of memory accesses). This means that a half
|
286
|
-
# complex sequence produces by a radix-2 forward transform <b>cannot</b> be
|
287
|
-
# recovered by a mixed-radix inverse transform (and vice versa).
|
288
|
-
#
|
289
|
-
# === Radix-2 FFT routines for real data
|
290
|
-
# The routines for readix-2 real FFTs are provided as instance methods of
|
291
|
-
# {GSL::Vector}[link:rdoc/vector_rdoc.html].
|
292
|
-
#
|
293
|
-
# <b>The FFT methods described below return FFTed data, and the input vector is
|
294
|
-
# not changed. Use methods with '!' as <tt>radix2_tranform!</tt> for in-place
|
295
|
-
# transform.</b>
|
296
|
-
#
|
297
|
-
# ---
|
298
|
-
# * GSL::Vector#real_radix2_transform
|
299
|
-
# * GSL::Vector#radix2_transform
|
300
|
-
# * GSL::Vector#real_radix2_forward
|
301
|
-
# * GSL::Vector#radix2_forward
|
302
|
-
#
|
303
|
-
#
|
304
|
-
# These methods compute a radix-2 FFT of the real vector <tt>self</tt>. The
|
305
|
-
# output is a half-complex sequence. The arrangement of the half-complex
|
306
|
-
# terms uses the following scheme: for k < N/2 the real part of the k-th term
|
307
|
-
# is stored in location k, and the corresponding imaginary part is stored in
|
308
|
-
# location N-k. Terms with k > N/2 can be reconstructed using the symmetry
|
309
|
-
# z_k = z^*_{N-k}. The terms for k=0 and k=N/2 are both purely real, and
|
310
|
-
# count as a special case. Their real parts are stored in locations 0 and N/2
|
311
|
-
# respectively, while their imaginary parts which are zero are not stored.
|
312
|
-
#
|
313
|
-
# These methods return the FFTed data, and the input data is not changed.
|
314
|
-
#
|
315
|
-
# The following table shows the correspondence between the output <tt>self</tt>
|
316
|
-
# and the equivalent results obtained by considering the input data as a
|
317
|
-
# complex sequence with zero imaginary part,
|
318
|
-
#
|
319
|
-
# complex[0].real = self[0]
|
320
|
-
# complex[0].imag = 0
|
321
|
-
# complex[1].real = self[1]
|
322
|
-
# complex[1].imag = self[N-1]
|
323
|
-
# ............... ................
|
324
|
-
# complex[k].real = self[k]
|
325
|
-
# complex[k].imag = self[N-k]
|
326
|
-
# ............... ................
|
327
|
-
# complex[N/2].real = self[N/2]
|
328
|
-
# complex[N/2].real = 0
|
329
|
-
# ............... ................
|
330
|
-
# complex[k'].real = self[k] k' = N - k
|
331
|
-
# complex[k'].imag = -self[N-k]
|
332
|
-
# ............... ................
|
333
|
-
# complex[N-1].real = self[1]
|
334
|
-
# complex[N-1].imag = -self[N-1]
|
335
|
-
#
|
336
|
-
# ---
|
337
|
-
# * GSL::Vector#halfcomplex_radix2_inverse
|
338
|
-
# * GSL::Vector#radix2_inverse
|
339
|
-
# * GSL::Vector#halfcomplex_radix2_backward
|
340
|
-
# * GSL::Vector#radix2_backward
|
341
|
-
#
|
342
|
-
#
|
343
|
-
# These methods compute the inverse or backwards radix-2 FFT of the
|
344
|
-
# half-complex sequence data stored according the output scheme used by
|
345
|
-
# gsl_fft_real_radix2. The result is a real array stored in natural order.
|
346
|
-
#
|
347
|
-
# == Mixed-radix FFT routines for real data
|
348
|
-
#
|
349
|
-
# This section describes mixed-radix FFT algorithms for real data.
|
350
|
-
# The mixed-radix functions work for FFTs of any length. They are a
|
351
|
-
# reimplementation of the real-FFT routines in the Fortran FFTPACK library
|
352
|
-
# by Paul Swarztrauber.
|
353
|
-
# The theory behind the algorithm is explained in the article
|
354
|
-
# <tt>Fast Mixed-Radix Real Fourier Transforms</tt> by Clive Temperton.
|
355
|
-
# The routines here use the same indexing scheme and basic algorithms as
|
356
|
-
# FFTPACK.
|
357
|
-
#
|
358
|
-
# The functions use the FFTPACK storage convention for half-complex sequences.
|
359
|
-
# In this convention the half-complex transform of a real sequence is stored with
|
360
|
-
# frequencies in increasing order, starting at zero, with the real and imaginary
|
361
|
-
# parts of each frequency in neighboring locations. When a value is known to be
|
362
|
-
# real the imaginary part is not stored. The imaginary part of the zero-frequency
|
363
|
-
# component is never stored. It is known to be zero since the zero frequency
|
364
|
-
# component is simply the sum of the input data (all real). For a sequence of
|
365
|
-
# even length the imaginary part of the frequency n/2 is not stored either, since
|
366
|
-
# the symmetry z_k = z_{N-k}^* implies that this is purely real too.
|
367
|
-
#
|
368
|
-
#
|
369
|
-
# === Data storage scheme
|
370
|
-
#
|
371
|
-
# The storage scheme is best shown by some examples.
|
372
|
-
# The table below shows the output for an odd-length sequence, n=5.
|
373
|
-
# The two columns give the correspondence between the 5 values in the
|
374
|
-
# half-complex sequence computed <tt>real_transform</tt>, <tt>halfcomplex[]</tt>
|
375
|
-
# and the values <tt>complex[]</tt> that would be returned if the same real input
|
376
|
-
# sequence were passed to <tt>complex_backward</tt> as a complex sequence
|
377
|
-
# (with imaginary parts set to 0),
|
378
|
-
#
|
379
|
-
# complex[0].real = halfcomplex[0]
|
380
|
-
# complex[0].imag = 0
|
381
|
-
# complex[1].real = halfcomplex[1]
|
382
|
-
# complex[1].imag = halfcomplex[2]
|
383
|
-
# complex[2].real = halfcomplex[3]
|
384
|
-
# complex[2].imag = halfcomplex[4]
|
385
|
-
# complex[3].real = halfcomplex[3]
|
386
|
-
# complex[3].imag = -halfcomplex[4]
|
387
|
-
# complex[4].real = halfcomplex[1]
|
388
|
-
# complex[4].imag = -halfcomplex[2]
|
389
|
-
#
|
390
|
-
# The upper elements of the <tt>complex</tt> array, <tt>complex[3]</tt> and <tt>complex[4]</tt>
|
391
|
-
# are filled in using the symmetry condition. The imaginary part of
|
392
|
-
# the zero-frequency term <tt>complex[0].imag</tt> is known to be zero by the symmetry.
|
393
|
-
#
|
394
|
-
# The next table shows the output for an even-length sequence,
|
395
|
-
# n=5 In the even case there are two values which are purely real,
|
396
|
-
#
|
397
|
-
# complex[0].real = halfcomplex[0]
|
398
|
-
# complex[0].imag = 0
|
399
|
-
# complex[1].real = halfcomplex[1]
|
400
|
-
# complex[1].imag = halfcomplex[2]
|
401
|
-
# complex[2].real = halfcomplex[3]
|
402
|
-
# complex[2].imag = halfcomplex[4]
|
403
|
-
# complex[3].real = halfcomplex[5]
|
404
|
-
# complex[3].imag = 0
|
405
|
-
# complex[4].real = halfcomplex[3]
|
406
|
-
# complex[4].imag = -halfcomplex[4]
|
407
|
-
# complex[5].real = halfcomplex[1]
|
408
|
-
# complex[5].imag = -halfcomplex[2]
|
409
|
-
#
|
410
|
-
# The upper elements of the <tt>complex</tt> array, <tt>complex[4]</tt>
|
411
|
-
# and <tt>complex[5]</tt> are filled in using the symmetry condition.
|
412
|
-
# Both <tt>complex[0].imag</tt> and <tt>complex[3].imag</tt> are known to be zero.
|
413
|
-
#
|
414
|
-
# ==== Wavetable and Workspace classes
|
415
|
-
# ---
|
416
|
-
# * GSL::FFT::RealWavetable.alloc(n)
|
417
|
-
# * GSL::FFT::HalfComplexWavetable.alloc(n)
|
418
|
-
#
|
419
|
-
#
|
420
|
-
# These methods create trigonometric lookup tables for an FFT of size <tt>n</tt>
|
421
|
-
# real elements. The length <tt>n</tt> is factorized into a product of subtransforms,
|
422
|
-
# and the factors and their trigonometric coefficients are stored in the wavetable.
|
423
|
-
# The trigonometric coefficients are computed using direct calls to sin and cos,
|
424
|
-
# for accuracy. Recursion relations could be used to compute the lookup table
|
425
|
-
# faster, but if an application performs many FFTs of the same length then
|
426
|
-
# computing the wavetable is a one-off overhead which does not affect the final
|
427
|
-
# throughput.
|
428
|
-
#
|
429
|
-
# The wavetable structure can be used repeatedly for any transform of the same
|
430
|
-
# length. The table is not modified by calls to any of the other FFT functions.
|
431
|
-
# The appropriate type of wavetable must be used for forward real or inverse
|
432
|
-
# half-complex transforms.
|
433
|
-
#
|
434
|
-
# ---
|
435
|
-
# * GSL::FFT::RealWorkspace.alloc(n)
|
436
|
-
#
|
437
|
-
#
|
438
|
-
# This method creates a workspace object for a real transform of length
|
439
|
-
# <tt>n</tt>. The same workspace can be used for both forward real and inverse
|
440
|
-
# halfcomplex transforms.
|
441
|
-
#
|
442
|
-
# ==== Methods for mixed-radix real FFTs
|
443
|
-
#
|
444
|
-
# <b>The FFT methods described below return FFTed data, and the input vector is not changed. Use methods with '!' as <tt>real_tranform!</tt> for in-place transform.</b>
|
445
|
-
#
|
446
|
-
# ---
|
447
|
-
# * GSL::Vector#real_transform(table, work)
|
448
|
-
# * GSL::Vector#halfcomplex_transform(table, work)
|
449
|
-
# * GSL::Vector#fft
|
450
|
-
#
|
451
|
-
#
|
452
|
-
# These methods compute the FFT of <tt>self</tt>, a real or half-complex array,
|
453
|
-
# using a mixed radix decimation-in-frequency algorithm. For
|
454
|
-
# <tt>real_transform</tt> <tt>self</tt> is an array of time-ordered real data. For
|
455
|
-
# <tt>halfcomplex_transform</tt> <tt>self</tt> contains Fourier coefficients in the
|
456
|
-
# half-complex ordering described above. There is no restriction on the
|
457
|
-
# length <tt>n</tt>.
|
458
|
-
#
|
459
|
-
# Efficient modules are provided for subtransforms of length 2, 3, 4 and 5.
|
460
|
-
# Any remaining factors are computed with a slow, O(n^2), general-n module.
|
461
|
-
#
|
462
|
-
# The caller can supply a <tt>table</tt> containing trigonometric lookup tables
|
463
|
-
# and a workspace <tt>work</tt> (optional).
|
464
|
-
#
|
465
|
-
# These methods return the FFTed data, and the input data is not changed.
|
466
|
-
#
|
467
|
-
# ---
|
468
|
-
# * GSL::Vector#halfcomplex_inverse(table, work)
|
469
|
-
# * GSL::Vector#halfcomplex_backward(table, work)
|
470
|
-
# * GSL::Vector#ifft
|
471
|
-
#
|
472
|
-
#
|
473
|
-
# == Examples
|
474
|
-
#
|
475
|
-
# === Example 1
|
476
|
-
#
|
477
|
-
# #!/usr/bin/env ruby
|
478
|
-
# require("gsl")
|
479
|
-
# include GSL
|
480
|
-
#
|
481
|
-
# N = 2048
|
482
|
-
# SAMPLING = 1000 # 1 kHz
|
483
|
-
# TMAX = 1.0/SAMPLING*N
|
484
|
-
# FREQ1 = 50
|
485
|
-
# FREQ2 = 120
|
486
|
-
# t = Vector.linspace(0, TMAX, N)
|
487
|
-
# x = Sf::sin(2*M_PI*FREQ1*t) + Sf::sin(2*M_PI*FREQ2*t)
|
488
|
-
# y = x.fft
|
489
|
-
#
|
490
|
-
# y2 = y.subvector(1, N-2).to_complex2
|
491
|
-
# mag = y2.abs
|
492
|
-
# phase = y2.arg
|
493
|
-
# f = Vector.linspace(0, SAMPLING/2, mag.size)
|
494
|
-
# graph(f, mag, "-C -g 3 -x 0 200 -X 'Frequency [Hz]'")
|
495
|
-
#
|
496
|
-
# === Example 2
|
497
|
-
# #!/usr/bin/env ruby
|
498
|
-
# require("gsl")
|
499
|
-
# include GSL
|
500
|
-
#
|
501
|
-
# n = 100
|
502
|
-
# data = Vector.alloc(n)
|
503
|
-
#
|
504
|
-
# for i in (n/3)...(2*n/3) do
|
505
|
-
# data[i] = 1.0
|
506
|
-
# end
|
507
|
-
#
|
508
|
-
# rtable = FFT::RealWavetable.alloc(n)
|
509
|
-
# rwork = FFT::RealWorkspace.alloc(n)
|
510
|
-
#
|
511
|
-
# #ffted = data.real_transform(rtable, rwork)
|
512
|
-
# #ffted = data.real_transform(rtable)
|
513
|
-
# #ffted = data.real_transform(rwork)
|
514
|
-
# #ffted = data.real_transform()
|
515
|
-
# ffted = data.fft
|
516
|
-
#
|
517
|
-
# for i in 11...n do
|
518
|
-
# ffted[i] = 0.0
|
519
|
-
# end
|
520
|
-
#
|
521
|
-
# hctable = FFT::HalfComplexWavetable.alloc(n)
|
522
|
-
#
|
523
|
-
# #data2 = ffted.halfcomplex_inverse(hctable, rwork)
|
524
|
-
# #data2 = ffted.halfcomplex_inverse()
|
525
|
-
# data2 = ffted.ifft
|
526
|
-
#
|
527
|
-
# graph(nil, data, data2, "-T X -C -g 3 -L 'Real-halfcomplex' -x 0 #{data.size}")
|
528
|
-
#
|
529
|
-
# {prev}[link:rdoc/eigen_rdoc.html]
|
530
|
-
# {next}[link:rdoc/wavelet_rdoc.html]
|
531
|
-
#
|
532
|
-
# {Reference index}[link:rdoc/ref_rdoc.html]
|
533
|
-
# {top}[link:index.html]
|
534
|
-
#
|
535
|
-
#
|