File indexing completed on 2025-01-30 09:32:50
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef BOOST_ACCUMULATORS_STATISTICS_KURTOSIS_HPP_EAN_28_10_2005
0009 #define BOOST_ACCUMULATORS_STATISTICS_KURTOSIS_HPP_EAN_28_10_2005
0010
0011 #include <limits>
0012 #include <boost/mpl/placeholders.hpp>
0013 #include <boost/accumulators/framework/accumulator_base.hpp>
0014 #include <boost/accumulators/framework/extractor.hpp>
0015 #include <boost/accumulators/framework/parameters/sample.hpp>
0016 #include <boost/accumulators/numeric/functional.hpp>
0017 #include <boost/accumulators/framework/depends_on.hpp>
0018 #include <boost/accumulators/statistics/mean.hpp>
0019 #include <boost/accumulators/statistics/moment.hpp>
0020
0021 namespace boost { namespace accumulators
0022 {
0023
0024 namespace impl
0025 {
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 template<typename Sample>
0046 struct kurtosis_impl
0047 : accumulator_base
0048 {
0049
0050 typedef typename numeric::functional::fdiv<Sample, Sample>::result_type result_type;
0051
0052 kurtosis_impl(dont_care) {}
0053
0054 template<typename Args>
0055 result_type result(Args const &args) const
0056 {
0057 return numeric::fdiv(
0058 accumulators::moment<4>(args)
0059 - 4. * accumulators::moment<3>(args) * mean(args)
0060 + 6. * accumulators::moment<2>(args) * mean(args) * mean(args)
0061 - 3. * mean(args) * mean(args) * mean(args) * mean(args)
0062 , ( accumulators::moment<2>(args) - mean(args) * mean(args) )
0063 * ( accumulators::moment<2>(args) - mean(args) * mean(args) )
0064 ) - 3.;
0065 }
0066
0067
0068 template<class Archive>
0069 void serialize(Archive & ar, const unsigned int file_version) {}
0070 };
0071
0072 }
0073
0074
0075
0076
0077 namespace tag
0078 {
0079 struct kurtosis
0080 : depends_on<mean, moment<2>, moment<3>, moment<4> >
0081 {
0082
0083
0084 typedef accumulators::impl::kurtosis_impl<mpl::_1> impl;
0085 };
0086 }
0087
0088
0089
0090
0091 namespace extract
0092 {
0093 extractor<tag::kurtosis> const kurtosis = {};
0094
0095 BOOST_ACCUMULATORS_IGNORE_GLOBAL(kurtosis)
0096 }
0097
0098 using extract::kurtosis;
0099
0100
0101
0102 template<>
0103 struct as_weighted_feature<tag::kurtosis>
0104 {
0105 typedef tag::weighted_kurtosis type;
0106 };
0107
0108 template<>
0109 struct feature_of<tag::weighted_kurtosis>
0110 : feature_of<tag::kurtosis>
0111 {
0112 };
0113
0114 }}
0115
0116 #endif