-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIntegralUtilities.h
31 lines (30 loc) · 1.1 KB
/
IntegralUtilities.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#pragma once
#include <functional>
/**
Klasa (choć równie dobrze mogłaby być to przestrzeń nazw, w praktyce nią właśnie jest)
zawierająca metody całkowania. Aktualny projekt wymaga tylko jakiejkolwiek całki,
ale niewykluczone jest, że w przyszłości zostanie rozszerzona o pełen wachlarz
możliwości całkowania, np. funkcję liczącą sumę górną/dolną dla zadanego podziału,
czy po prostu funkcję realizującą np. metodę Simpsona z zadanymi parametrami.
*/
class IntegralUtilities
{
public:
/**
Jako, że obecny projekt nie skupia się na całkowaniu i potrzebuje jakiegokolwiek całkowania, to
funkcja całkująca po prostu ma całkować.
*/
template<typename FunctionValueType, typename FunctionArgumentType>
static double just_integrate(const FunctionArgumentType& a, const FunctionArgumentType& b, int accuracy_level, const std::function<FunctionValueType(FunctionArgumentType)>& f)
{
double sum{ 0.0 };
double dx{ (b - a) / static_cast<double>(accuracy_level) };
FunctionArgumentType x{ a };
for (int i{ 0 }; i < accuracy_level; i++)
{
sum += dx * static_cast<double>(f(x));
x += dx;
}
return sum;
}
};