2014-02-12 74 views
1

我想在給定的大小範圍內集成數學函數(數字密度函數)。我想要整合的函數通常由分數,指數,歐拉數和根組成。我可以使用哪些代碼?用於數學函數基本集成的解決方案

例如我找到了類「數學」,但我無法在此類中找到任何集成函數。此外,我不知道上述元素的語法(歐拉數...)

問候streight

+3

數理論工作經常需要使用大於2^32的整數。例如,第8個歐拉數字已經超過了這個限制。你是否需要無限制的精確數字,即2^32以上整數的精確表示? –

+0

我不知道標準庫中的任何數學類,有一個'cmath'頭文件,但它不包含任何數字或符號集成的函數。您需要編寫一個數字集成例程或使用另一個庫中的一個。 – StoryTeller

+0

問題要求我們推薦或找到工具,圖書館或最喜歡的非現場資源,因爲他們傾向於吸引自以爲是的答案和垃圾郵件,所以不適合Stack Overflow。相反,請描述問題以及到目前爲止解決問題所做的工作。 http://stackoverflow.com/help/on-topic –

回答

2

你可能會尋找numerical integration
這是一種獲得'足夠接近'的積分數值的方法,對大多數應用程序來說通常是足夠的。

維基百科頁面鏈接到AlgLib作爲具有C++約束的實現庫。

1

這是我剛纔開發的代碼。它使用辛普森方法。

#include <iostream> 
#include <math.h> 

using namespace std; 

double NormSDist(double x); 
template <typename T> T SimpsonMethod(T (*pfunc)(T), float a, float b,int n=100); 

int main() 
{ 
    double area=SimpsonMethod<double>(&NormSDist,-5,1.2); 
    cout << area << endl; 
    return 0; 
} 

template <typename T> T SimpsonMethod(T (*pfunc)(T), float a, float b,int n) 
{ 
    T h,x,y,retVal; 
    h=(b-a)/n; 

    x=a; 
    y=(*pfunc)(x);retVal=y; 
    for(int i=1;i<n;i++) 
    { 
     x=a+i*h; 
     if(i%2==0) y=2*(*pfunc)(x); 
     if(i%2==1) y=4*(*pfunc)(x); 
     retVal=retVal+y; 
    } 
    x=b;y=(*pfunc)(x);retVal=retVal+y; 

    return retVal*h/3; 
} 

double NormSDist(double x) 
{ 
    return 1/sqrt(2*3.1415926536)*exp(-0.5*x*x); 
} 

希望它有幫助。