FastChebInterp.jl
FastChebInterp.jl copied to clipboard
Support for custom types?
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})
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.