c++ - 将数学表达式传递给函数

标签 c++ function math

我需要用 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/

相关文章:

c++ - 如何在 C++ 中检查整数单链表的对称性?

python - 我可以将函数引用添加到列表中,并迭代该列表,连续调用每个函数吗?

r - 寻找合理范围

javascript - 为什么 javascript ln 被称为日志?

c++ - 为什么 VS2012 无法识别 C++ 项目中的某些 C++11 关键字?

c++ - 在运行时更改网络接口(interface)

c++ - WinAPI 双缓冲

检查list2是否包含list1

c# - 当函数结果未分配给变量时显示警告

c - 我的算法有什么问题?