2016-12-24 58 views
-1

數值積分我想寫可以計算出我inetegral e^(cos x)的範圍(A,B)計算C++

double integral(double(*f)(double x), double a, double b, int n) { 
    double step = (b - a)/n; // width of each small rectangle 
    double area = 0.0; // signed area 
    for (int i = 0; i < n; i ++) { 
     area += f(a + (i + 0.5) * step) * step; // sum up each small rectangle 
    } 
    return area; 
} 

這是我發現的,但我真的在C新++可以和我的函數如果還有其他方式請幫助我,請不要使用指針 。

+4

A)我把它這是不是你的代碼? B)你是什麼意思「我不能使用指針」? – Borgleader

+2

是什麼問題? – Galik

+0

我必須做到這一點沒有指針 – Amir5204

回答

0

您找到的函數允許您集成任何您想要的函數,並且該函數是積分方法的第一個參數。你可以刪除第一個參數('double(* f)(double x)'),這是因爲你想要整合的函數是已知的(e^cos(x)),所以你不需要給它作爲論據。然後,在for循環中,您只需替換e^cos(x)的de f函數。該方法是這樣的:

double integral(double a, double b, int n){ 
    double step = (b - a)/n; // width of each small rectangle 
    double area = 0.0; // signed area 
    for (int i = 0; i < n; i ++) { 
     area += exp(cos(a + (i + 0.5) * step)) * step; // sum up each small rectangle 
    } 
    return area; 
} 
+0

感謝您的幫助 – Amir5204

1
#include <functional> 

template<typename T> 
T integral(const std::function<T(T)>& f, T a, T b, int n) { 
    auto step = (b - a)/n; // width of each small rectangle 
    auto area = static_cast<T>(0); // signed area 
    for (auto i = 0; i < n; i++) 
    { 
     // sum up each small rectangle 
     area += f(a + (i + static_cast<T>(0.5)) * step) * step; 
    } 
    return area; 
} 

int main() 
{ 
    std::function<float(float)> f_sine = [](float in) { return sin(in); }; 
    auto two = integral(f_sine, 0.0f, 3.14f, 20); 
    return 0; 
} 

這將是$ 3.50

+0

'不。我也不能用模板寫它 - Amir5204 15分鐘前'沒有錢給你。 – Borgleader

+0

@Borgleader我爲它做了 – Mikhail