我需要用 C++
编写函数来计算积分。我正在使用 simpsone 规则
来计算给定积分的值。我知道如何计算。我的数学没有任何问题。我需要知道如何传递整个表达式以使我的程序灵活。
我应该对 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
的想法几乎相同。我可能是错的。
使我的代码灵活且易于用户(而不是程序员)使用的最佳方法是什么?
最佳答案
假设您有一个函数接受两个表达式并返回它们结果的总和。您可以使用自 C++11
以来支持的 lambda 表达式
将表达式传递给函数,如下所示:
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
}
关于c++ - 将数学表达式传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50706293/