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

发布于 2024-10-30 20:49:36 字数 76 浏览 5 评论 0原文

从文档来看,boost 似乎为正态分布和伽马分布提供了分位数函数(逆 cdf 函数),但我不清楚如何实际使用它们。有人可以粘贴一个例子吗?

Judging from the documentation boost seems to offer quantile functions (inverse cdf functions) for both normal and gamma distributions, but its not clear for me how can I actually use them. Could someone paste an example please?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岁月无声 2024-11-06 20:49:37

QuantCorner

// É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;
}

There is a workable example on QuantCorner.

// É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;
}
作妖 2024-11-06 20:49:36

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

#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,免费函数不需要命名空间

The quantile calculation is implemented as a free function. Here's an example:

#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);

You can also get the complement (quantile from the right) using:

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

There are some similar worked examples here:

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

Edit: don't need namespaces on the free functions thanks to ADL

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文