我想实现一个数值积分,该积分的积分值在正交点求值。因此,类似integral(domain, f)
,其中domain
确实是我要集成的域,而f
是要集成的函数。 f仅是域内Point p
(正交点)的函数,并且可以具有矢量值(标量是一种特殊情况)。
由于函数f通常可以是不同函数的组合,所以我想知道如何重载函数的算术运算符。
我已经找到了这个Implementing multiplication operator for mathematical functions C++
但这并没有涵盖我的问题,因为Function
仅返回x,而在我的情况下,我想使用其他函数可以返回x的更复杂函数。
因此,假设f_1,...f_N
是具有相同返回类型的不同函数,例如具有给定长度M的std::array<double,M>
,并且接收相同的输入Point p
,即对于I = 1,...,N:
std::array<double,M> f_i(Point p)
{ std::array<double,M> x;
\\ compute x somehow depending on i
return x;}
然后,我想创建f
作为前一个f_1,...f_N
的组合,例如f=f_1 *f_2+(f_3*f_4)*f_5...
(此处的操作应视组件而定)。
通过这种方式,我可以在integral(domain, f)
内求f(p),从而精确地获得每个正交点:
f_1(p) *f_2(p)+(f_3(p)*f_4(p))*f_5(p)...
编辑: 我知道我必须使用仿函数而不是简单的函数(我只是用来说明问题),但是我无法弄清楚该如何实现。 有提示吗?
谢谢