将数学表达式传递给函数

时间:2018-06-05 18:00:44

标签: c++ function math

我需要在C++中创建函数来计算积分。我使用simpsone rule来计算给定积分的值。我知道如何计算。我对数学没有任何问题。我需要知道如何传递整个表达式以使我的程序灵活。

我有4个f(x)函数,我应该对其进行计算。例如:

f(x)=2e^x
f(x)=x^3e
etc.

我有两种方法可以做到。

1)我可以为每个f(x)函数执行单独的功能。

double function1() {
...
calculations 2e^x
...
return resault;
}

double function2() {
...
calculations x^3e
...
return resault;
}

这种方式编写简单快捷,但代码根本不灵活。在这种情况下,我需要为每个新的给定f(x)函数创建新函数。

我想有一个函数,我可以传递选定的f(x)函数。

2)我更喜欢的第二种情况是做一些表达式的解释。我考虑将表达式的部分放入std::vector,然后对vector的每个单元格进行计算。

我已经看到了将字符串解析为表达式的想法,但我认为最后它与vector的想法几乎相同。我错了。

使我的代码灵活易用的最佳方法是什么,而不是程序员?

1 个答案:

答案 0 :(得分:1)

假设您有一个函数,它接受两个表达式并返回它们的结果之和。您可以使用自lambda expression以来支持的C++11将表达式传递给函数,如下所示:

template<typename Func, typename Func2>
int calculate(Func &lambda_expr1, int param1, Func2 &lambda_expr2, int param2)
{
    return lambda_expr1(param1) + lambda_expr2(param2);
}

void main()
{
    // case 1
    auto f1 = [](int p) {return p*p; }; // expression 1
    auto f2 = [](int p) {return p*p*p; }; // expression 2
    int result = calculate(f1, 3, f2, 4);
    // result = 73

    // case 2
    result = calculate([](int p) {return p*p/2; }, 4, [](int p) {return p*p*p/3; }, 3);
    // result = 17
}