FastChebInterp.jl icon indicating copy to clipboard operation
FastChebInterp.jl copied to clipboard

Support for custom types?

Open juliohm opened this issue 1 year ago • 1 comments

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})

juliohm avatar Sep 17 '24 12:09 juliohm

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.

stevengj avatar Sep 17 '24 12:09 stevengj