OpenFPM_pdata  4.1.0
Project that contain the implementation of distributed structures
 
Loading...
Searching...
No Matches
Gaussian.hpp
1//
2// Created by jstark on 14.06.21.
3//
4
5#ifndef OPENFPM_NUMERICS_GAUSSIAN_HPP
6#define OPENFPM_NUMERICS_GAUSSIAN_HPP
7
8#include "cmath"
9
10
11static double hermite_polynomial(double x, double sigma, int order)
12{
13 double h;
14 switch(order)
15 {
16 case 0:
17 h = 1;
18 break;
19 case 1:
20 h = -x / (sigma * sigma);
21 break;
22 case 2:
23 h = (x*x - sigma*sigma) / (sigma*sigma*sigma*sigma);
24 break;
25 default:
26 std::cout << "Only gaussian derivatives of order 0, 1, and 2 implemented. Aborting..." << std::endl;
27 abort();
28 }
29 return h;
30}
31
32template <typename point_type>
33double gaussian_1D(const point_type & x, const double mu, const double sigma)
34{
35 const double pi = 3.14159265358979323846;
36 const double sqrt2pi = sqrt(2*pi);
37
38 double sum = (x - mu) * (x - mu) / (sigma*sigma);;
39 double normalization_factor = 1 / (sqrt2pi * sigma);
40
41 return normalization_factor * exp(-0.5 * sum);
42}
43
44template <typename point_type>
45double gaussian(const point_type & x, const double mu, const double sigma)
46{
47 double g = 1;
48 for(int d=0; d<point_type::dims; d++)
49 {
50 g *= gaussian_1D(x.get(d), mu, sigma);
51 }
52 return g;
53}
54
55
56#endif //OPENFPM_NUMERICS_GAUSSIAN_HPP
It model an expression expr1 + ... exprn.
Definition sum.hpp:93