File indexing completed on 2025-01-18 09:28:21
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_KURTOSIS_HPP_EAN_28_10_2005
0009 #define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_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_fwd.hpp>
0019 #include <boost/accumulators/statistics/weighted_moment.hpp>
0020 #include <boost/accumulators/statistics/weighted_mean.hpp>
0021
0022 namespace boost { namespace accumulators
0023 {
0024
0025 namespace impl
0026 {
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049 template<typename Sample, typename Weight>
0050 struct weighted_kurtosis_impl
0051 : accumulator_base
0052 {
0053 typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
0054
0055 typedef typename numeric::functional::fdiv<weighted_sample, weighted_sample>::result_type result_type;
0056
0057 weighted_kurtosis_impl(dont_care)
0058 {
0059 }
0060
0061 template<typename Args>
0062 result_type result(Args const &args) const
0063 {
0064 return numeric::fdiv(
0065 accumulators::weighted_moment<4>(args)
0066 - 4. * accumulators::weighted_moment<3>(args) * weighted_mean(args)
0067 + 6. * accumulators::weighted_moment<2>(args) * weighted_mean(args) * weighted_mean(args)
0068 - 3. * weighted_mean(args) * weighted_mean(args) * weighted_mean(args) * weighted_mean(args)
0069 , ( accumulators::weighted_moment<2>(args) - weighted_mean(args) * weighted_mean(args) )
0070 * ( accumulators::weighted_moment<2>(args) - weighted_mean(args) * weighted_mean(args) )
0071 ) - 3.;
0072 }
0073 };
0074
0075 }
0076
0077
0078
0079
0080 namespace tag
0081 {
0082 struct weighted_kurtosis
0083 : depends_on<weighted_mean, weighted_moment<2>, weighted_moment<3>, weighted_moment<4> >
0084 {
0085
0086
0087 typedef accumulators::impl::weighted_kurtosis_impl<mpl::_1, mpl::_2> impl;
0088 };
0089 }
0090
0091
0092
0093
0094 namespace extract
0095 {
0096 extractor<tag::weighted_kurtosis> const weighted_kurtosis = {};
0097
0098 BOOST_ACCUMULATORS_IGNORE_GLOBAL(weighted_kurtosis)
0099 }
0100
0101 using extract::weighted_kurtosis;
0102
0103 }}
0104
0105 #endif