diff options
author | justanothercatgirl <sotov2070@gmail.com> | 2024-10-04 17:37:14 +0300 |
---|---|---|
committer | justanothercatgirl <sotov2070@gmail.com> | 2024-10-04 18:07:56 +0300 |
commit | aa0d37540f5bc4bb6327b43c7213b46d0e261cf0 (patch) | |
tree | fa9d43d364f3a6d72d7a84c911aabc43658a2998 /src/integral.c | |
parent | a9bd52226fbcac98bddec9cffcef1ded8b75b5df (diff) |
Пока не закончил логику выбора программы, но готовы все алгоритмы
Diffstat (limited to 'src/integral.c')
-rw-r--r-- | src/integral.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/integral.c b/src/integral.c new file mode 100644 index 0000000..d2ae11f --- /dev/null +++ b/src/integral.c @@ -0,0 +1,38 @@ +#include "integral.h" + +// эта переменная позволяет контролировать точность интегрирования +// и может быть установлена в файле main +double accrc = 10000.0; + +// интеграл прямоугольниками +double int_rect(f_t f, double a, double b) { + // f(x + dx/2) * dx + 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(f_t f, double a, double b) { + // ( f(x) + f(x+dx) )/2 * dx + 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(f_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; +} |