1#ifndef GM_TO_DIRAC_OPTIMIZATION_PARAMS_H
2#define GM_TO_DIRAC_OPTIMIZATION_PARAMS_H
4#include <gsl/gsl_integration.h>
5#include <gsl/gsl_sf_pow_int.h>
6#include <gsl/gsl_vector.h>
10#include "floating_bucket_cache.h"
11#include "gsl_minimizer.h"
12#include "gsl_quadrature_adaptive_gauss_kronrod.h"
13#include "math_util_defs.h"
14#include "squared_euclidean_distance_utils.h"
23 cacheManagerInnerSum =
31 if (cacheManagerPrefactor)
delete cacheManagerPrefactor;
32 if (cacheManagerInnerSum)
delete cacheManagerInnerSum;
34 if (eta)
delete[] eta;
45 cacheManagerInnerSum->clear();
74 size_t bMax,
double cB)
77 covDiagSqrd(createCovDiagSqrd(covDiag)),
82 D1(calculateD1(bMax, covDiag, N)),
84 assert(covDiag !=
nullptr);
85 assert(covDiag->size == N);
87 squaredEuclideanDistanceUtilLL =
99 if (squaredEuclideanDistanceUtilLL)
delete squaredEuclideanDistanceUtilLL;
100 if (integrationParams)
delete integrationParams;
107 const double twoPiNHalf;
117 for (
size_t i = 0;
i < covDiag->size; ++
i) {
118 covDiagSqrd->data[
i] = covDiag->data[
i] * covDiag->data[
i];
122 struct P1IntegrationParams {
126 static double calculateP1(
double b,
void* params) {
127 P1IntegrationParams*
p1Params =
static_cast<P1IntegrationParams*
>(params);
131 for (
size_t k = 0;
k < N;
k++) {
133 1.00 / std::sqrt(covDiag->data[
k] * covDiag->data[
k] + 2.00 *
b *
b);
137 static double calculateD1(
size_t bMax,
const gsl_vector* covDiag,
size_t N) {
142 P1IntegrationParams
p1Params = P1IntegrationParams{N, covDiag};
144 F.function = calculateP1;
154 friend class benchmark_gm_to_dirac_short;
179 size_t L,
size_t bMax,
double cB)
183 assert(covDiag !=
nullptr);
184 assert(covDiag->size == N);
199 size_t L,
size_t bMax,
double cB)
201 wX(getConstWeight(L)),
203 assert(covDiag !=
nullptr);
204 assert(covDiag->size == N);
218 const bool freeWeight;
helper class to use GSL adaptive Gauss-Kronrod quadrature
Definition gsl_quadrature_adaptive_gauss_kronrod.h:13
base class for implementations calculating squared euclidean distances with just one set of vectors
Definition squared_euclidean_distance_utils.h:64
implements a vectorized version of calculating squared euclidean distances store in a vector
Definition squared_euclidean_distance_utils.h:202
Definition dirac_to_dirac_approx_short.h:9
Definition floating_bucket_cache.h:44
Definition floating_bucket_cache.h:11
base struct for the GMToDirac optimization parameters
Definition gm_to_dirac_optimization_params.h:62
GMToDiracBaseOptimizationParams(const gsl_vector *covDiag, size_t N, size_t L, size_t bMax, double cB)
Construct a new GMToDiracBaseOptimizationParams object.
Definition gm_to_dirac_optimization_params.h:73
~GMToDiracBaseOptimizationParams()
Destroy the GMToDiracBaseOptimizationParams object.
Definition gm_to_dirac_optimization_params.h:97
optimization parameters for the GMToDirac approximation with constant weights
Definition gm_to_dirac_optimization_params.h:163
GMToDiracConstWeightOptimizationParams(const gsl_vector *covDiag, const gsl_vector *wX, size_t N, size_t L, size_t bMax, double cB)
Construct a new GMToDiracConstWeightOptimizationParams object.
Definition gm_to_dirac_optimization_params.h:177
GMToDiracConstWeightOptimizationParams(const gsl_vector *covDiag, size_t N, size_t L, size_t bMax, double cB)
Construct a new GMToDiracConstWeightOptimizationParams object.
Definition gm_to_dirac_optimization_params.h:198
~GMToDiracConstWeightOptimizationParams()
Destroy the GMToDiracConstWeightOptimizationParams object.
Definition gm_to_dirac_optimization_params.h:211
additional parameters for the GMToDiracIntegration function
Definition gm_to_dirac_optimization_params.h:20
void reset(const gsl_vector *x)
resets cacheManager and x to the new x
Definition gm_to_dirac_optimization_params.h:44
base struct minimizer needs to be setup with
Definition gsl_minimizer.h:18