Boost中的分位数函数(C++)

12

从文档上看,Boost似乎提供了正态分布和伽马分布的分位数函数(反向累积分布函数),但我不清楚如何实际使用它们。请问有人能够提供一个示例吗?


此页面包含一个计算正态分布分位数的示例。看起来非常简单。这个对你有用吗? - Björn Pollex
2个回答

10

分位数计算是实现为一个自由函数。以下是一个示例:

#include <boost/math/distributions/normal.hpp>

boost::math::normal dist(0.0, 1.0);

// 95% of distribution is below q:
double q = quantile(dist, 0.95);

您还可以使用以下方法获取补集(从右侧获取分位数):

// 95% of distribution is above qc:
double qc = quantile(complement(dist, 0.05));

这里有一些类似的工作示例:

http://www.boost.org/doc/libs/1_46_1/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg.html

编辑: 由于ADL,自由函数不需要名称空间。


有什么想法为什么会有normalnormal_distribution两个类?这让我感到困惑。 - Grzenio
1
我认为normal只是normal_distribution<double>的一个typedef。 - Inverse

3
QuantCorner上有一个可行的例子,涉及到使用BOOS进行正态分布回报的VAR计算。
// Édouard Tallent @ TaGoMa.Tech
// September 2012

#include<boost/math/distributions.hpp>
#include<iostream>
using std::cout;
using std::endl;

double inverseNormal(double prob, double mean, double sd){
        boost::math::normal_distribution<>myNormal (mean, sd);
        return quantile(myNormal, prob);
}

int main (int, char*[])
{
        try
        {                
                double myProb = 0.1;    // the 10% quantile
                double myMean = 0.07;   // a 7% mean 
                double myVol = 0.14;    // a 14% volatility 

        cout << inverseNormal(myProb, myMean, myVol)  << endl;
        }

                catch(std::exception& e)
        {
                cout << "Error message: " << e.what() << endl;
        }
return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接