Я хотел бы реализовать числовой интеграл, подынтегральное выражение которого оценивается в квадратурных точках. Поэтому что-то вроде: integral(domain, f)
, где domain
- это действительно область, в которую я хочу интегрировать, а f
- это функция для интеграции. f является только функцией Point p
(квадратурные точки) внутри области и может иметь векторные значения (скаляр является частным случаем).
Поскольку функция f, как правило, может быть комбинацией различных функций, мне интересно, как перегрузить арифметические операторы для функций.
Я уже нашел это Реализация оператора умножения для математических функций C ++
но это не охватывает мой вопрос, потому что Function
возвращает только x, в то время как в моем случае я хотел бы иметь разные функции, которые могут возвращать более сложную функцию x.
Итак, пусть f_1,...f_N
будут разными функциями, которые имеют одинаковый тип возврата, например, std::array<double,M>
с заданной длиной 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...
(здесь операции должны быть компонентными).
Таким образом, я мог бы оценить f (p) внутри integral(domain, f)
, получая точно для каждой квадратурной точки:
f_1(p) *f_2(p)+(f_3(p)*f_4(p))*f_5(p)...
Edit:
Я знаю, что должен использовать функторы, а не простые функции (которые я использовал только для постановки задачи), но я не могу понять, как это сделать.
Любой намек?
Спасибо