|
| 1 | +@doc raw""" |
| 2 | + AbstractApproximationMethod |
| 3 | +
|
| 4 | +Abstract type for defining estimation methods on manifolds. |
| 5 | +""" |
| 6 | +abstract type AbstractApproximationMethod end |
| 7 | + |
| 8 | +@doc raw""" |
| 9 | + GradientDescentEstimation <: AbstractApproximationMethod |
| 10 | +
|
| 11 | +Method for estimation using [📖 gradient descent](https://en.wikipedia.org/wiki/Gradient_descent). |
| 12 | +""" |
| 13 | +struct GradientDescentEstimation <: AbstractApproximationMethod end |
| 14 | + |
| 15 | +@doc raw""" |
| 16 | + CyclicProximalPointEstimation <: AbstractApproximationMethod |
| 17 | +
|
| 18 | +Method for estimation using the cyclic proximal point technique, which is based on [📖 proximal maps](https://en.wikipedia.org/wiki/Proximal_operator). |
| 19 | +""" |
| 20 | +struct CyclicProximalPointEstimation <: AbstractApproximationMethod end |
| 21 | + |
| 22 | +@doc raw""" |
| 23 | + EfficientEstimator <: AbstractApproximationMethod |
| 24 | +
|
| 25 | +Method for estimation in the best possible sense, see [📖 Efficiency (Statictsics)](https://en.wikipedia.org/wiki/Efficiency_(statistics)) for more details. |
| 26 | +This can for example be used when computing the usual mean on an Euclidean space, which is the best estimator. |
| 27 | +""" |
| 28 | +struct EfficientEstimator <: AbstractApproximationMethod end |
| 29 | + |
| 30 | + |
| 31 | +@doc raw""" |
| 32 | + ExtrinsicEstimation{T} <: AbstractApproximationMethod |
| 33 | +
|
| 34 | +Method for estimation in the ambient space with a method of type `T` and projecting the result back |
| 35 | +to the manifold. |
| 36 | +""" |
| 37 | +struct ExtrinsicEstimation{T<:AbstractApproximationMethod} <: AbstractApproximationMethod |
| 38 | + extrinsic_estimation::T |
| 39 | +end |
| 40 | + |
| 41 | +@doc raw""" |
| 42 | + WeiszfeldEstimation <: AbstractApproximationMethod |
| 43 | +
|
| 44 | +Method for estimation using the Weiszfeld algorithm, compare for example the computation of the |
| 45 | +[📖 Geometric median](https://en.wikipedia.org/wiki/Geometric_median). |
| 46 | +""" |
| 47 | +struct WeiszfeldEstimation <: AbstractApproximationMethod end |
| 48 | + |
| 49 | +@doc raw""" |
| 50 | + GeodesicInterpolation <: AbstractApproximationMethod |
| 51 | +
|
| 52 | +Method for estimation based on geodesic interpolation. |
| 53 | +""" |
| 54 | +struct GeodesicInterpolation <: AbstractApproximationMethod end |
| 55 | + |
| 56 | +@doc raw""" |
| 57 | + GeodesicInterpolationWithinRadius{T} <: AbstractApproximationMethod |
| 58 | +
|
| 59 | +Method for estimation based on geodesic interpolation that is restricted to some `radius` |
| 60 | +
|
| 61 | +# Constructor |
| 62 | +
|
| 63 | + GeodesicInterpolationWithinRadius(radius::Real) |
| 64 | +""" |
| 65 | +struct GeodesicInterpolationWithinRadius{T<:Real} <: AbstractApproximationMethod |
| 66 | + radius::T |
| 67 | + function GeodesicInterpolationWithinRadius(radius::T) where {T<:Real} |
| 68 | + radius > 0 && return new{T}(radius) |
| 69 | + return throw( |
| 70 | + DomainError("The radius must be strictly postive, received $(radius)."), |
| 71 | + ) |
| 72 | + end |
| 73 | +end |
| 74 | + |
| 75 | +@doc raw""" |
| 76 | + default_approximation_method(M::AbstractManifold, f) |
| 77 | + default_approximation_method(M::AbtractManifold, f, T) |
| 78 | +
|
| 79 | +Specify a default estimation method for an [`AbstractManifold`](@ref) and a specific function `f` |
| 80 | +and optionally as well a type `T` to distinguish different (point or vector) representations on `M`. |
| 81 | +
|
| 82 | +By default, all functions `f` call the signature for just a manifold. |
| 83 | +The exceptional functions are: |
| 84 | +
|
| 85 | +* `retract` and `retract!` which fall back to [`default_retraction_method`](@ref) |
| 86 | +* `inverse_retract` and `inverse_retract!` which fall back to [`default_inverse_retraction_method`](@ref) |
| 87 | +* any of the vector transport mehods fall back to [`default_vector_transport_method`](@ref) |
| 88 | +""" |
| 89 | +default_approximation_method(M::AbstractManifold, f) |
| 90 | +default_approximation_method(M::AbstractManifold, f, T) = default_approximation_method(M, f) |
0 commit comments