
Добавил:
draingang
t.me
я просто люблю помогать людям
gym a.k.a regym. S 2021 NA VE4NO
♡♡♡
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЛР-0004 (Численное интегрирование) / main
.cpp#include <iostream>
#include <cmath>
static double f(const double& x)
{
return 8 * sin(2 * x) - 2;
}
static double simpson_counter(const double& a, const double& b, const double& h)
{
double n = (b - a) / h, intermediateFirst = 0, intermediateSecond = 0;
for (int i = 1; i <= h / 2; i++) {
if (i > 1)
{
intermediateSecond += f(a + n * (2 * i - 1));
intermediateFirst += f(a + n * (2 * i - 2));
}
else
{
intermediateSecond += f(a + n * (2 * i - 1));
}
}
return (n / 3) * (f(a) + f(b) + 4 * intermediateSecond + 2 * intermediateFirst);
}
int main(int args, char* argv[])
{
static double a, b, e;
std::cout << "[a] Введите нижнюю границу: ";
std::cin >> a;
std::cout << "[b] Введите верхнюю границу: ";
std::cin >> b;
static double h;
std::cout << "[h] Задайте количество отрезков: ";
std::cin >> h;
std::cout << "[e] Задайте точность: ";
std::cin >> e;
static double counted_integral, counted_integral2, uncertainty;
do
{
counted_integral = simpson_counter(a, b, h);
h = h*2;
counted_integral2 = simpson_counter(a, b, h);
uncertainty = (counted_integral-counted_integral2)/15;
}
while (fabs(uncertainty) > e);
std::cout << "\n\n\n===---------------------------------------------------===\n";
std::cout << "[∫] Расчёт завершён! Получившееся значение: " << counted_integral2 + uncertainty << "\n";
std::cout << "Используемые значения: [a = " << a << "]" << " [b = " << b << "]\n";
std::cout << "Точность: " << e << "\n";
std::cout << "Оценка погрешности по Рунге: " << uncertainty << "\n";
std::cout << "===---------------------------------------------------===\n\n\n";
return 0;
}