#include <stdio.h>
#include <math.h>
#include <locale.h>
double f(double x)
{
}
double rectangle_method(double xmin, double xmax, int n)
{
//Вычисляем интеграл методом прямоугольников:
double h = (xmax - xmin) / n;
double integral = 0.0;
for (int i = 0; i < n; i++) {
double x = xmin + i * h;
integral += f(x) * h;
}
return integral;
}
double trapezoidal_method(double xmin, double xmax, int n)
{
//Вычисляем интеграл методом трапеций:
double h = (xmax - xmin) / n;
double integral = (f(xmin) + f(xmax)) / 2.0;
for (int i = 1; i < n; i++) {
double x = xmin + i * h;
integral += f(x);
}
integral *= h;
return integral;
}
double calculate_error(double approx_value, double true_value)
{
//Вычисляем относительную погрешность:
if (true_value == 0.0) {
return INFINITY;
}
return fabs((true_value
- approx_value
) / true_value
) * 100; }
int main()
{
double xmin = 0.0;
double xmax = 1.0;
int iterations[] = {10, 100, 1000, 10000, 100000};
int num_iterations = sizeof(iterations) / sizeof(iterations[0]);
double true_value = trapezoidal_method(xmin, xmax, 10000000);
printf("----------------------------------------------------------------------------------\n"); printf("| Число | Метод прямоугольников | Метод трапеций |\n"); printf("| Итераций |----------------------------------|-----------------------------------|\n"); printf("| | Значение интеграла | Погрешность | Значение интеграла | Погрешность |\n"); printf("|----------|--------------------|-------------|--------------------|--------------|\n");
for (int i = 0; i < num_iterations; i++) {
double integral_rect = rectangle_method(xmin, xmax, iterations[i]);
double error_rect = calculate_error(integral_rect, true_value);
double integral_trap = trapezoidal_method(xmin, xmax, iterations[i]);
double error_trap = calculate_error(integral_trap, true_value);
printf("| %6d | %18.10f | %11.4f | %18.10f | %11.4f |\n", iterations[i], integral_rect, error_rect, integral_trap, error_trap);
}
printf("--------------------------------------------------------------------------------\n");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxsb2NhbGUuaD4KCmRvdWJsZSBmKGRvdWJsZSB4KSAKewogICAgcmV0dXJuIGFjb3MoeCkgLSBzcXJ0KDEgLSAwLjMgKiBwb3coeCwgMy4wKSk7Cn0KZG91YmxlIHJlY3RhbmdsZV9tZXRob2QoZG91YmxlIHhtaW4sIGRvdWJsZSB4bWF4LCBpbnQgbikgCnsKICAgIC8v0JLRi9GH0LjRgdC70Y/QtdC8INC40L3RgtC10LPRgNCw0Lsg0LzQtdGC0L7QtNC+0Lwg0L/RgNGP0LzQvtGD0LPQvtC70YzQvdC40LrQvtCyOgogICAgZG91YmxlIGggPSAoeG1heCAtIHhtaW4pIC8gbjsKICAgIGRvdWJsZSBpbnRlZ3JhbCA9IDAuMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgZG91YmxlIHggPSB4bWluICsgaSAqIGg7CiAgICAgICAgaW50ZWdyYWwgKz0gZih4KSAqIGg7CiAgICB9CiAgICByZXR1cm4gaW50ZWdyYWw7Cn0KZG91YmxlIHRyYXBlem9pZGFsX21ldGhvZChkb3VibGUgeG1pbiwgZG91YmxlIHhtYXgsIGludCBuKSAKewogICAgLy/QktGL0YfQuNGB0LvRj9C10Lwg0LjQvdGC0LXQs9GA0LDQuyDQvNC10YLQvtC00L7QvCDRgtGA0LDQv9C10YbQuNC5OgogICAgZG91YmxlIGggPSAoeG1heCAtIHhtaW4pIC8gbjsKICAgIGRvdWJsZSBpbnRlZ3JhbCA9IChmKHhtaW4pICsgZih4bWF4KSkgLyAyLjA7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgIGRvdWJsZSB4ID0geG1pbiArIGkgKiBoOwogICAgICAgIGludGVncmFsICs9IGYoeCk7CiAgICB9CiAgICBpbnRlZ3JhbCAqPSBoOwogICAgcmV0dXJuIGludGVncmFsOwp9CmRvdWJsZSBjYWxjdWxhdGVfZXJyb3IoZG91YmxlIGFwcHJveF92YWx1ZSwgZG91YmxlIHRydWVfdmFsdWUpIAp7CiAgICAvL9CS0YvRh9C40YHQu9GP0LXQvCDQvtGC0L3QvtGB0LjRgtC10LvRjNC90YPRjiDQv9C+0LPRgNC10YjQvdC+0YHRgtGMOgogICAgaWYgKHRydWVfdmFsdWUgPT0gMC4wKSB7CiAgICAgICAgcmV0dXJuIElORklOSVRZOyAKICAgIH0KICAgIHJldHVybiBmYWJzKCh0cnVlX3ZhbHVlIC0gYXBwcm94X3ZhbHVlKSAvIHRydWVfdmFsdWUpICogMTAwOwp9CmludCBtYWluKCkgCnsKCXNldGxvY2FsZShMQ19BTEwsICJSdXMiKTsKICAgIGRvdWJsZSB4bWluID0gMC4wOyAgCiAgICBkb3VibGUgeG1heCA9IDEuMDsgIAogICAgaW50IGl0ZXJhdGlvbnNbXSA9IHsxMCwgMTAwLCAxMDAwLCAxMDAwMCwgMTAwMDAwfTsKICAgIGludCBudW1faXRlcmF0aW9ucyA9IHNpemVvZihpdGVyYXRpb25zKSAvIHNpemVvZihpdGVyYXRpb25zWzBdKTsKCiAgICAKICAgIGRvdWJsZSB0cnVlX3ZhbHVlID0gdHJhcGV6b2lkYWxfbWV0aG9kKHhtaW4sIHhtYXgsIDEwMDAwMDAwKTsKCiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgcHJpbnRmKCJ8INCn0LjRgdC70L4gICAgfCAgICAgINCc0LXRgtC+0LQg0L/RgNGP0LzQvtGD0LPQvtC70YzQvdC40LrQvtCyICAgICAgIHwgICAgICAgICAg0JzQtdGC0L7QtCDRgtGA0LDQv9C10YbQuNC5ICAgICAgICAgICB8XG4iKTsKICAgIHByaW50ZigifCDQmNGC0LXRgNCw0YbQuNC5IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuIik7CiAgICBwcmludGYoInwgICAgICAgICAgfCDQl9C90LDRh9C10L3QuNC1INC40L3RgtC10LPRgNCw0LvQsCB8INCf0L7Qs9GA0LXRiNC90L7RgdGC0YwgfCDQl9C90LDRh9C10L3QuNC1INC40L3RgtC10LPRgNCw0LvQsCB8INCf0L7Qs9GA0LXRiNC90L7RgdGC0YwgIHxcbiIpOwogICAgcHJpbnRmKCJ8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfFxuIik7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1faXRlcmF0aW9uczsgaSsrKSB7CiAgICAgICAgZG91YmxlIGludGVncmFsX3JlY3QgPSByZWN0YW5nbGVfbWV0aG9kKHhtaW4sIHhtYXgsIGl0ZXJhdGlvbnNbaV0pOwogICAgICAgIGRvdWJsZSBlcnJvcl9yZWN0ID0gY2FsY3VsYXRlX2Vycm9yKGludGVncmFsX3JlY3QsIHRydWVfdmFsdWUpOwogICAgICAgIGRvdWJsZSBpbnRlZ3JhbF90cmFwID0gdHJhcGV6b2lkYWxfbWV0aG9kKHhtaW4sIHhtYXgsIGl0ZXJhdGlvbnNbaV0pOwogICAgICAgIGRvdWJsZSBlcnJvcl90cmFwID0gY2FsY3VsYXRlX2Vycm9yKGludGVncmFsX3RyYXAsIHRydWVfdmFsdWUpOwoKICAgICAgICBwcmludGYoInwgJTZkIHwgJTE4LjEwZiB8ICUxMS40ZiB8ICUxOC4xMGYgfCAlMTEuNGYgfFxuIiwKICAgICAgICAgICAgICAgaXRlcmF0aW9uc1tpXSwgaW50ZWdyYWxfcmVjdCwgZXJyb3JfcmVjdCwgaW50ZWdyYWxfdHJhcCwgZXJyb3JfdHJhcCk7CiAgICB9CgogICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CgogICAgcmV0dXJuIDA7Cn0=