2011-04-06 16 views
10

Dokümantasyon desteğinden bakıldığında hem normal hem de gama dağılımları için niceliksel işlevler (ters cdf işlevleri) sunuluyor gibi görünüyor, ancak benim için açık değil. Birisi bir örnek yapıştırır mısınız lütfen?Boost (C++) cinsinden fonksiyonlar

+0

[Bu sayfa] (http://www.boost.org/doc/libs/1_46_1/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/normal_example/normal_misc.html) normal dağılımın miktarlarını hesaplamak için bir örnek içerir. Oldukça basit görünüyor. Bu senin için uygun mu? –

cevap

8

Kuantil hesap, serbest bir işlev olarak uygulanır.

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

Ayrıca (sağdan quantile) tamamlayıcı alabilirsiniz kullanarak: İşte bir örnek

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

bazı benzer çalışılmış örnekler burada vardır:

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

Düzenleme:, ADL

sayesinde ücretsiz işlevlerde ad alanlarına ihtiyaç duymaz
+0

Neden hem normal hem de normal_distribution sınıfı var? Bu beni kafamda karıştırdı. – Grzenio

+0

"Normal" in normal bir "normal_distribution " yazım hatası olduğunu düşünüyorum – Inverse

3

QuantCorner üzerinde uygulanabilir bir örnek 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; 
}