aboutsummaryrefslogtreecommitdiffstats
path: root/src/integral.c
blob: f7918036f09317af9ad2b9e0130053f040ce5dad (plain)
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
32
33
34
35
36
#include "integral.h"

// эта переменная позволяет контролировать точность интегрирования
// и может быть установлена в файле main
double accrc = 10000.0;

// интеграл прямоугольниками
double int_rect(func_t f, double a, double b) {
	const double dx = (b-a) / accrc;
	const double dx_2 = dx / 2.0;
	double sum = 0.0;
	for (double i = a + dx; i < b; i += dx)
		sum += f(i - dx_2) * dx;
	return sum;
}

// интеграл трапециями
double int_trap(func_t f, double a, double b) {
	const double dx = (b-a) / accrc;
	double sum = 0.0;
	for (double i = a; i < b; i += dx)
		sum += dx * (f(i) + f(i+dx))/2 ;
	return sum;
}

// интегрирование параболами
double int_simp(func_t f, double a, double b) {
	const double dx = (b-a) / accrc;
	const double dx_2 = dx / 2;
	const double dx_6 = dx / 6;
	double sum = 0.0;
	for(double i = a; i < b; i += dx) {
		sum += dx_6 * (f(i) + 4 * f(i + dx_2) + f(i + dx));
	}
	return sum;
}