JuliaMath / FastChebInterp.jl

fast multidimensional Chebyshev interpolation and regression in Julia
MIT License
58 stars 6 forks source link

Support for custom types? #23

Open juliohm opened 2 days ago

juliohm commented 2 days ago

Can this package handle custom types in a Hilbert space?

import Base: +, *

struct Foo
  x::Float64
  y::Float64
end

+(f1::Foo, f2::Foo) = Foo(f1.x + f2.x, f1.y + f2.y)
*(a::Real, f::Foo) = Foo(a * f.x, a * f.y)

g(x) = Foo(x[1], x[2])
lb, ub = [1,3], [2, 4]
x = chebpoints((10,20), lb, ub)
c = chebinterp(g.(x), lb, ub)
ERROR: MethodError: no method matching zero(::Type{Any})
stevengj commented 2 days ago

No, not currently. For example, it currently uses FFTs to compute the coefficients quickly, but I don't have an FFT method for arbitrary vector spaces.

Right now you'll need to first define a mapping/isomorphism of your vector space to/from ℝⁿ or ℂⁿ (ideally to SVector{n} so it is allocation-free), and then use this mapping before calling chebinterp, and use the inverse mapping on the result of interpolation.