aboutsummaryrefslogtreecommitdiffstats
path: root/src/integral.c
diff options
context:
space:
mode:
authorjustanothercatgirl <sotov2070@gmail.com>2024-10-04 17:37:14 +0300
committerjustanothercatgirl <sotov2070@gmail.com>2024-10-04 18:07:56 +0300
commitaa0d37540f5bc4bb6327b43c7213b46d0e261cf0 (patch)
treefa9d43d364f3a6d72d7a84c911aabc43658a2998 /src/integral.c
parenta9bd52226fbcac98bddec9cffcef1ded8b75b5df (diff)
Пока не закончил логику выбора программы, но готовы все алгоритмы
Diffstat (limited to 'src/integral.c')
-rw-r--r--src/integral.c38
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;
+}