https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Normal.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#include "Normal.h"
11#include "math.h"
12#include "libmesh/utility.h"
13
14registerMooseObject("StochasticToolsApp", Normal);
15
16const std::array<Real, 6> Normal::_a = {
17 {-0.322232431088, -1.0, -0.342242088547, -0.0204231210245, -0.0000453642210148}};
18
19const std::array<Real, 6> Normal::_b = {
20 {0.099348462606, 0.588581570495, 0.531103462366, 0.10353775285, 0.0038560700634}};
21
24{
26 params.addClassDescription("Normal distribution");
27 params.addRequiredParam<Real>("mean", "Mean (or expectation) of the distribution.");
29 "standard_deviation", "standard_deviation > 0", "Standard deviation of the distribution ");
30 return params;
31}
32
34 : Distribution(parameters),
35 _mean(getParam<Real>("mean")),
36 _standard_deviation(getParam<Real>("standard_deviation"))
37{
38}
39
40Real
41Normal::pdf(const Real & x, const Real & mean, const Real & std_dev)
42{
43 return 1.0 / (std_dev * std::sqrt(2.0 * M_PI)) *
44 std::exp(-0.5 * Utility::pow<2>((x - mean) / std_dev));
45}
46
47Real
48Normal::cdf(const Real & x, const Real & mean, const Real & std_dev)
49{
50 return 0.5 * (1.0 + std::erf((x - mean) / (std_dev * std::sqrt(2.0))));
51}
52
53Real
54Normal::quantile(const Real & p, const Real & mean, const Real & std_dev)
55{
56 const Real x = (p < 0.5 ? p : 1.0 - p);
57 const Real y = std::sqrt(-2.0 * std::log(x));
58 const Real y2 = y * y;
59 const Real y3 = y2 * y;
60 const Real y4 = y3 * y;
61 const Real sgn = (p - 0.5 < 0.0 ? -1.0 : 1.0);
62 const Real Zp = sgn * (y + (_a[0] + _a[1] * y + _a[2] * y2 + _a[3] * y3 + _a[4] * y4) /
63 (_b[0] + _b[1] * y + _b[2] * y2 + _b[3] * y3 + _b[4] * y4));
64 return Zp * std_dev + mean;
65}
66
67Real
68Normal::pdf(const Real & x) const
69{
71}
72
73Real
74Normal::cdf(const Real & x) const
75{
77}
78
79Real
80Normal::quantile(const Real & p) const
81{
83}
const std::vector< double > y
const std::vector< double > x
const Real p
registerMooseObject("StochasticToolsApp", Normal)
static InputParameters validParams()
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
A class used to generate a normal distribution.
Definition Normal.h:18
const Real & _standard_deviation
The standard deviation of the distribution (sigma)
Definition Normal.h:43
const Real & _mean
The mean (or expectation) of the distribution (mu)
Definition Normal.h:40
static const std::array< Real, 6 > _a
Definition Normal.h:16
static InputParameters validParams()
Definition Normal.C:23
static const std::array< Real, 6 > _b
Definition Normal.h:19
virtual Real cdf(const Real &x) const override
Definition Normal.C:74
Normal(const InputParameters &parameters)
Definition Normal.C:33
virtual Real pdf(const Real &x) const override
Definition Normal.C:68
virtual Real quantile(const Real &p) const override
Definition Normal.C:80