Нужна помощь с передачей функции в качестве параметра
Есть функция f(x) представляющая собой многочлен второй степени. Необходимо посчитать определенный интеграл по методу Симпсона(но это не суть проблемы, т.к. функции для них я написал). Единственное, мне надо передать функцию F в качестве параметра в функцию integral, а как это сделать я не совсем понимаю.
double f(double cofA, double cofB, double c, double x)
{
double f = cofA * x * x + cofB * x + c;
return f;
}
double Integral(double cofA,double cofB,double c, double a, double b)
{
double h = (b - a) / 2;
double Integral = h / 3 * (f(cofA, cofB, c, a)+4* f(cofA, cofB, c, (a+b)/2)+ f(cofA, cofB, c, b));
return Integral;
}
Я думал сделать так :
double Integral(double cofA,double cofB,double c, double a, double b,
double f1= f(cofA, cofB, c, a),double f2= f(cofA, cofB, c, (a+b)/2),double f3= f(cofA, cofB, c, b))
Но вижуалка ругается и говорит, что cofA, cofB, c, a,b не инициализированы
Ответы (2 шт):
Автор решения: dIm0n
→ Ссылка
Попробуйте так:
double f(double cofA, double cofB, double c, double x)
{
double f = cofA * x * x + cofB * x + c;
return f;
}
double Integral(double cofA,double cofB,double c, double a, double b,
double (*f) (double, double, double, double))
{
double h = (b - a) / 2;
double Integral = h / 3 * (f(cofA, cofB, c, a)+4* f(cofA, cofB, c, (a+b)/2)+ f(cofA, cofB, c, b));
return Integral;
}
Автор решения: EzikBro
→ Ссылка
В принципе я не вижу особой причины передавать функцию f в Integral как аргумент вместе с ее коэффициентами, но тогда посмотрите в сторону решения с помощью структуры:
struct Function
{
vector<double> coef;
Function()
{
coef = { 0 };
}
Function(vector<double> koef)
{
coef = koef;
}
double calc(double x)
{
double res = coef[0];
for (int i = 1; i < coef.size(); i++)
{
res = res * x + coef[i];
}
return res;
}
};
double integral(Function& f, double a, double b)
{
double h = (b - a) / 2;
double res = h / 3 * (f.calc(a) + 4 * f.calc((a + b) / 2) + f.calc(b));
return res;
}