2016-12-24 66 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