1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
// -*- C++ -*-
/**
* @brief The test file of class Multinomial for standard methods
*
* Copyright 2005-2025 Airbus-EDF-IMACS-ONERA-Phimeca
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "openturns/OT.hxx"
#include "openturns/OTtestcode.hxx"
using namespace OT;
using namespace OT::Test;
class TestObject : public Multinomial
{
public:
TestObject() : Multinomial(5, Point(3, 0.25)) {}
virtual ~TestObject() {}
};
int main(int, char *[])
{
TESTPREAMBLE;
OStream fullprint(std::cout);
try
{
// Test basic functionnalities
checkClassWithClassName<TestObject>();
{
// Instantiate one distribution object
Multinomial distribution;
}
// Instantiate one distribution object
Multinomial distribution(5, Point(3, 0.25));
fullprint << "Distribution " << distribution << std::endl;
std::cout << "Distribution " << distribution << std::endl;
// Is this distribution elliptical ?
fullprint << "Elliptical = " << (distribution.isElliptical() ? "true" : "false") << std::endl;
// Is this distribution continuous ?
fullprint << "Continuous = " << (distribution.isContinuous() ? "true" : "false") << std::endl;
// Test for realization of distribution
Point oneRealization = distribution.getRealization();
fullprint << "oneRealization=" << oneRealization << std::endl;
// Test for sampling
UnsignedInteger size = 10000;
Sample oneSample = distribution.getSample( size );
fullprint << "oneSample first=" << oneSample[0] << " last=" << oneSample[size - 1] << std::endl;
fullprint << "mean=" << oneSample.computeMean() << std::endl;
fullprint << "covariance=" << oneSample.computeCovariance() << std::endl;
// Support
Sample support(distribution.getSupport());
fullprint << "support=" << support << std::endl;
Interval interval(Point(distribution.getDimension(), 1.0), Point(distribution.getDimension(), 3.0));
Sample restrictedSupport(distribution.getSupport(interval));
fullprint << "support restricted to the interval=" << interval << " gives=" << restrictedSupport << std::endl;
// Define a point
Point point( distribution.getDimension(), 1.0 );
fullprint << "Point= " << point << std::endl;
// Show PDF and CDF of point
Scalar LPDF = distribution.computeLogPDF( point );
fullprint << "log pdf(" << point.__str__() << ")=" << LPDF << std::endl;
Scalar PDF = distribution.computePDF( point );
fullprint << "pdf (" << point.__str__() << ")=" << PDF << std::endl;
Scalar CDF = distribution.computeCDF( point );
fullprint << "cdf (" << point.__str__() << ")=" << std::setprecision(5) << CDF << std::setprecision(6) << std::endl;
Scalar CCDF = distribution.computeComplementaryCDF( point );
fullprint << "ccdf (" << point.__str__() << ")=" << std::setprecision(5) << CCDF << std::setprecision(6) << std::endl;
Scalar Survival = distribution.computeSurvivalFunction( point );
fullprint << "survival(" << point.__str__() << ")=" << Survival << std::endl;
Point quantile = distribution.computeQuantile( 0.95 );
fullprint << "quantile(0.95)=" << quantile << std::endl;
fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << std::endl;
Point lower(distribution.getDimension());
Point upper(distribution.getDimension());
for (UnsignedInteger i = 0; i < distribution.getDimension(); ++i)
{
lower[i] = i;
upper[i] = i + 1.0;
}
interval = Interval(lower, upper);
fullprint << "probability(" << interval.__str__() << ")=" << distribution.computeProbability(interval) << std::endl;
fullprint << "entropy=" << distribution.computeEntropy() << std::endl;
fullprint << "entropy (MC)=" << -distribution.computeLogPDF(distribution.getSample(1000000)).computeMean()[0] << std::endl;
Point mean = distribution.getMean();
fullprint << "mean=" << mean << std::endl;
CovarianceMatrix covariance = distribution.getCovariance();
fullprint << "covariance=" << covariance << std::endl;
CovarianceMatrix correlation = distribution.getCorrelation();
fullprint << "correlation=" << correlation << std::endl;
// CovarianceMatrix spearman = distribution.getSpearmanCorrelation();
// fullprint << "spearman=" << spearman << std::endl;
// CovarianceMatrix kendall = distribution.getKendallTau();
// fullprint << "kendall=" << kendall << std::endl;
Multinomial::PointWithDescriptionCollection parameters = distribution.getParametersCollection();
fullprint << "parameters=" << parameters << std::endl;
}
catch (TestFailed & ex)
{
std::cerr << ex << std::endl;
return ExitCode::Error;
}
return ExitCode::Success;
}
|