Skip to content

Commit c4f44ae

Browse files
Merge branch 'master' into feat-libfasttransforms
2 parents b59f86e + 8e71bff commit c4f44ae

File tree

7 files changed

+84
-11
lines changed

7 files changed

+84
-11
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ julia:
1414
- 1.0
1515
- 1.1
1616
- 1.2
17+
- 1.3
1718
- nightly
1819
matrix:
1920
allow_failures:

Project.toml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
name = "FastTransforms"
22
uuid = "057dd010-8810-581a-b7be-e3fc3b93f78c"
3-
version = "0.5.0"
3+
version = "0.6.0"
44

55
[deps]
66
AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c"
77
BinaryProvider = "b99e7846-7c00-51b0-8f62-c81ae34c0232"
88
DSP = "717857b8-e6f2-59f4-9121-6e50c889abd2"
9+
FastGaussQuadrature = "442a2c76-b920-505d-bb47-c5924d526838"
910
FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
1011
Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
1112
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
@@ -14,9 +15,10 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1415
ToeplitzMatrices = "c751599d-da0a-543b-9d20-d0a503d91d24"
1516

1617
[compat]
17-
AbstractFFTs = "≥ 0.3.1"
18-
DSP = "≥ 0.4.0"
19-
FFTW = "≥ 0.0.4"
20-
SpecialFunctions = "≥ 0.3.4"
21-
ToeplitzMatrices = "≥ 0.4.0"
18+
AbstractFFTs = "≥ 0.4"
19+
DSP = "≥ 0.6"
20+
FastGaussQuadrature = "≥ 0.4"
21+
FFTW = "≥ 0.3"
22+
SpecialFunctions = "≥ 0.8"
23+
ToeplitzMatrices = "≥ 0.6"
2224
julia = "≥ 1.0"

appveyor.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
environment:
22
matrix:
3-
- julia_version: 0.7
43
- julia_version: 1.0
54
- julia_version: 1.1
6-
- julia_version: 1.2
5+
- julia_version: 1.2
6+
- julia_version: 1.3
77
- julia_version: nightly
88

99
platform:

src/FastTransforms.jl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
__precompile__()
21
module FastTransforms
32

4-
using AbstractFFTs, DSP, FFTW, Libdl, LinearAlgebra, SpecialFunctions, ToeplitzMatrices
3+
using AbstractFFTs, DSP, FastGaussQuadrature, FFTW, Libdl, LinearAlgebra, SpecialFunctions, ToeplitzMatrices
54

65
import Base: unsafe_convert, eltype, ndims, adjoint, transpose, show, *, \,
76
inv, size, view
@@ -13,6 +12,8 @@ import AbstractFFTs: Plan
1312

1413
import DSP: conv
1514

15+
import FastGaussQuadrature: unweightedgausshermite
16+
1617
import FFTW: dct, dct!, idct, idct!,
1718
plan_fft!, plan_ifft!, plan_dct!, plan_idct!,
1819
plan_fft, plan_ifft, plan_rfft, plan_irfft, plan_dct, plan_idct,
@@ -61,6 +62,10 @@ export plan_fejer1, fejernodes1, fejerweights1,
6162
include("clenshawcurtis.jl")
6263
include("fejer.jl")
6364

65+
export hermitepoints, weightedhermitetransform, iweightedhermitetransform
66+
67+
include("hermite.jl")
68+
6469
include("fftBigFloat.jl")
6570

6671
export gaunt
@@ -72,6 +77,8 @@ export sphones, sphzeros, sphrand, sphrandn, sphevaluate,
7277
diskones, diskzeros, diskrand, diskrandn,
7378
triones, trizeros, trirand, trirandn, trievaluate
7479

80+
lgamma(x) = logabsgamma(x)[1]
81+
7582
include("specialfunctions.jl")
7683

7784
end # module

src/hermite.jl

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
2+
3+
hermitepoints(n) = unweightedgausshermite( n )[1]
4+
5+
6+
# exp(-x^2/2) H_n(x) / sqrt(π*prod(1:n))
7+
struct ForwardWeightedHermitePlan <: FastTransformPlan{FORWARD,Float64}
8+
Vtw::Matrix{Float64} # vandermonde
9+
end
10+
11+
struct BackwardWeightedHermitePlan <: FastTransformPlan{BACKWARD,Float64}
12+
V::Matrix{Float64} # vandermonde
13+
end
14+
15+
16+
function _weightedhermite_vandermonde(n)
17+
V = Array{Float64}(undef,n,n)
18+
x,w = unweightedgausshermite( n )
19+
for k=1:n
20+
V[k,:] = FastGaussQuadrature.hermpoly_rec(0:n-1, sqrt(2)*x[k])
21+
end
22+
V,w
23+
end
24+
function ForwardWeightedHermitePlan(n::Integer)
25+
V,w = _weightedhermite_vandermonde(n)
26+
ForwardWeightedHermitePlan(V' * Diagonal(w / sqrt(π)))
27+
end
28+
BackwardWeightedHermitePlan(n::Integer) = BackwardWeightedHermitePlan(_weightedhermite_vandermonde(n)[1])
29+
30+
31+
*(P::ForwardWeightedHermitePlan, v::AbstractVector) = P.Vtw*v
32+
*(P::ForwardWeightedHermitePlan, v::AbstractVector{Float64}) = P.Vtw*v
33+
*(P::BackwardWeightedHermitePlan, v::AbstractVector) = P.V*v
34+
*(P::BackwardWeightedHermitePlan, v::AbstractVector{Float64}) = P.V*v
35+
36+
weightedhermitetransform(v) = ForwardWeightedHermitePlan(length(v))*v
37+
iweightedhermitetransform(v) = BackwardWeightedHermitePlan(length(v))*v
38+

test/hermitetests.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using FastTransforms
2+
3+
@testset "Hermite" begin
4+
@test hermitepoints(1) == [0.0]
5+
@test hermitepoints(100_000)[end] 446.9720305443094
6+
7+
@test weightedhermitetransform([1.0]) == [1.0]
8+
@test weightedhermitetransform(exp.(-hermitepoints(2).^2/2)) == [1.0,0.0]
9+
@test weightedhermitetransform(exp.(-hermitepoints(3).^2/2)) [1.0,0.0,0.0]
10+
@test weightedhermitetransform(exp.(-hermitepoints(1000).^2/2)) [1.0; zeros(999)]
11+
@test weightedhermitetransform(exp.(-hermitepoints(3000).^2/2)) [1.0; zeros(2999)]
12+
13+
for n in (1, 5,100)
14+
x = randn(n)
15+
@test iweightedhermitetransform(weightedhermitetransform(x)) x
16+
@test weightedhermitetransform(iweightedhermitetransform(x)) x
17+
end
18+
19+
x = hermitepoints(100)
20+
@test iweightedhermitetransform([0.0; 1.0; zeros(98)]) (exp.(-x.^2 ./ 2) .* 2x/sqrt(2))
21+
@test iweightedhermitetransform([0.0; 0; 1.0; zeros(97)]) (exp.(-x.^2 ./ 2) .* (4x.^2 .- 2)/(sqrt(2)*2^(2/2)))
22+
@test iweightedhermitetransform([0.0; 0; 0; 1.0; zeros(96)]) (exp.(-x.^2 ./ 2) .* (-12x + 8x.^3) / (sqrt(2*3)*2^(3/2)))
23+
@test iweightedhermitetransform([0.0; 0; 0; 0; 1.0; zeros(95)]) (exp.(-x.^2 ./ 2) .* (12 .- 48x.^2 .+ 16x.^4) / (sqrt(2*3*4)*2^(4/2)))
24+
end

test/runtests.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ end
1616
include("nuffttests.jl")
1717

1818
include("fftBigFloattests.jl")
19-
2019
include("paduatests.jl")
2120

2221
include("gaunttests.jl")
2322

23+
include("hermitetests.jl")
24+
2425
include("toeplitztests.jl")

0 commit comments

Comments
 (0)