evaluate_by_simpson(std::int32_t N,
double h,
doublea,
68 conststd::function<
double(
double)>& func) {
69std::map<std::int32_t, double>
75 for(std::int32_t i = 0; i <= N; i++) {
78std::pair<std::int32_t, double>(i, temp));
84 doubleevaluate_integral = 0;
85 for(std::int32_t i = 0; i <= N; i++) {
86 if(i == 0 || i == N) {
87evaluate_integral += data_table.at(i);
88}
else if(i % 2 == 1) {
89evaluate_integral += 4 * data_table.at(i);
91evaluate_integral += 2 * data_table.at(i);
96evaluate_integral *=
h/ 3;
100assert(!std::isnan(evaluate_integral) &&
101 "The definite integral can't be evaluated. Check the validity of " 104 returnevaluate_integral;
113double f(
doublex) {
returnstd::sqrt(x) + std::log(x); }
115double g(
doublex) {
returnstd::exp(-x) * (4 - std::pow(x, 2)); }
117double k(
doublex) {
returnstd::sqrt(2 * std::pow(x, 3) + 3); }
119double l(
doublex) {
returnx + std::log(2 * x + 1); }
132static void test(std::int32_t N,
double h,
doublea,
doubleb,
133 boolused_argv_parameters) {
135 doubleresult_f = numerical_methods::simpson_method::evaluate_by_simpson(
137assert((used_argv_parameters || (result_f >= 4.09 && result_f <= 4.10)) &&
138 "The result of f(x) is wrong");
139std::cout <<
"The result of integral f(x) on interval ["<< a <<
", "<< b
140<<
"] is equal to: "<< result_f << std::endl;
142 doubleresult_g = numerical_methods::simpson_method::evaluate_by_simpson(
144assert((used_argv_parameters || (result_g >= 0.27 && result_g <= 0.28)) &&
145 "The result of g(x) is wrong");
146std::cout <<
"The result of integral g(x) on interval ["<< a <<
", "<< b
147<<
"] is equal to: "<< result_g << std::endl;
149 doubleresult_k = numerical_methods::simpson_method::evaluate_by_simpson(
151assert((used_argv_parameters || (result_k >= 9.06 && result_k <= 9.07)) &&
152 "The result of k(x) is wrong");
153std::cout <<
"The result of integral k(x) on interval ["<< a <<
", "<< b
154<<
"] is equal to: "<< result_k << std::endl;
156 doubleresult_l = numerical_methods::simpson_method::evaluate_by_simpson(
158assert((used_argv_parameters || (result_l >= 7.16 && result_l <= 7.17)) &&
159 "The result of l(x) is wrong");
160std::cout <<
"The result of integral l(x) on interval ["<< a <<
", "<< b
161<<
"] is equal to: "<< result_l << std::endl;
170int main(
intargc,
char** argv) {
177 boolused_argv_parameters =
184N = std::atoi(argv[1]);
185a = std::atof(argv[2]);
186b = std::atof(argv[3]);
188assert(a < b &&
"a has to be less than b");
189assert(N > 0 &&
"N has to be > 0");
190 if(N < 16 || a != 1 || b != 3) {
191used_argv_parameters =
true;
193std::cout <<
"You selected N="<< N <<
", a="<< a <<
", b="<< b
196std::cout <<
"Default N="<< N <<
", a="<< a <<
", b="<< b
203 test(N,
h, a, b, used_argv_parameters);
double k(double x)
Another test function.
double g(double x)
Another test function.
double f(double x)
A function f(x) that will be used to test the method.
double l(double x)
Another test function.
static void test()
Self-test implementations.
int main()
Main function.
Contains the Simpson's method implementation.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4