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
|
// -*- C++ -*-
/**
* @brief The test file of class UniformOrderStatistics 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;
int main(int, char *[])
{
TESTPREAMBLE;
OStream fullprint(std::cout);
try
{
// Instantiate one distribution object
MarginalUniformOrderStatistics distribution(4, {1, 3});
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;
// Define a point
Point point( {0.15, 0.25} );
fullprint << "Point= " << point << std::endl;
// Show PDF and CDF of point
Point DDF = distribution.computeDDF( point );
fullprint << "ddf =" << DDF << std::endl;
Scalar LPDF = distribution.computeLogPDF( point );
fullprint << "log pdf =" << LPDF << std::endl;
Scalar PDF = distribution.computePDF( point );
fullprint << "pdf =" << PDF << std::endl;
Scalar CDF = distribution.computeCDF( point );
fullprint << "cdf =" << CDF << std::endl;
// Too expensive for a test
Scalar CCDF = distribution.computeComplementaryCDF( point );
fullprint << "ccdf =" << CCDF << std::endl;
Scalar Survival = distribution.computeSurvivalFunction( point );
fullprint << "survival=" << Survival << std::endl;
Point InverseSurvival = distribution.computeInverseSurvivalFunction(0.95);
fullprint << "Inverse survival=" << InverseSurvival << std::endl;
fullprint << "Survival(inverse survival)=" << distribution.computeSurvivalFunction(InverseSurvival) << std::endl;
Point quantile = distribution.computeQuantile( 0.95 );
fullprint << "quantile=" << quantile << std::endl;
fullprint << "cdf(quantile)=" << distribution.computeCDF(quantile) << 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;
//
Point standardDeviation = distribution.getStandardDeviation();
fullprint << "standard deviation=" << standardDeviation << std::endl;
Point skewness = distribution.getSkewness();
fullprint << "skewness=" << skewness << std::endl;
Point kurtosis = distribution.getKurtosis();
fullprint << "kurtosis=" << kurtosis << std::endl;
CovarianceMatrix covariance = distribution.getCovariance();
fullprint << "covariance=" << covariance << std::endl;
CovarianceMatrix correlation = distribution.getCorrelation();
fullprint << "correlation=" << correlation << std::endl;
/* Too slow for a test
CovarianceMatrix spearman = distribution.getSpearmanCorrelation();
fullprint << "spearman=" << spearman << std::endl;
CovarianceMatrix kendall = distribution.getKendallTau();
fullprint << "kendall=" << kendall << std::endl;
*/
UniformOrderStatistics::PointWithDescriptionCollection parameters = distribution.getParametersCollection();
fullprint << "parameters=" << parameters << std::endl;
fullprint << "Standard representative=" << distribution.getStandardRepresentative().__str__() << std::endl;
//
Study study("test");
study.add("distribution", distribution);
MarginalUniformOrderStatistics anotherDistribution;
study.fillObject("distribution", anotherDistribution);
fullprint << "Equal? " << (distribution == anotherDistribution ? "true" : "false") << std::endl;
}
catch (TestFailed & ex)
{
std::cerr << ex << std::endl;
return ExitCode::Error;
}
return ExitCode::Success;
}
|