Интеграл методом трапеций - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа считает интеграл методом трапеций. Почему то, если задать, например, функцию y = x , и посчитать на отрезке -0,1234 до 0,1234 и наоборот: от 0,1234 до -0,1234 то погрешность разная и интеграл не равен 0. Можно конечно для второго случая поменять значения друг на друга, но надо понять почему так.
Листинг программы
  1. #include "function.h"
  2.  
  3. double Integral (double (*f)(double), double, double, int);
  4. int main(){
  5. double a,b;
  6. int n;
  7. double (*f)(double);
  8. printf ("Vvedite a\n");
  9. scanf ("%lf", &a);
  10. printf ("Vvedite b\n");
  11. scanf ("%lf", &b);
  12. printf ("Vvedite n - koli4estvo razbienii otrezka\n");
  13. scanf ("%d", &n);
  14. f = fun;
  15. printf ("Integral raven %.15lf\n", Integral (f, a, b, n));
  16. return 0;
  17. }
  18.  
  19. double Integral (double (*f)(double), double a, double b, int n){
  20. double result = 0.0;
  21. double delta;
  22. delta = (b - a) / (double) n;
  23. int i;
  24. result += (f(a) + f(b)) * delta / 2;
  25. for (i = 1; i < n; ++i){
  26. result += f(a + i * delta) * delta;
  27. }
  28. return result;
  29. }
Листинг программы
  1. #include "function.h"
  2. double fun(double x){
  3. return x;
  4. }

Решение задачи: «Интеграл методом трапеций»

textual
Листинг программы
  1. double Integral (double (*f)(double), double a, double b, int n)
  2. {
  3.  double result, left, right, delta;
  4.  for (result=0.0, left=a, delta=(b-a)/(double)n, right=left+delta; right<=b; left=right; right+=delta)
  5.  {
  6.   result+=(f(left)+f(right))*delta/2.0;
  7.  }
  8.  return r;
  9. }

Объяснение кода листинга программы

В данном коде реализован алгоритм вычисления интеграла методом трапеций.

  1. Передаются входные параметры функции:
    • f: адрес функции, которую необходимо интегрировать (тип double (*f)(double)).
    • a: нижняя граница интегрирования (тип double).
    • b: верхняя граница интегрирования (тип double).
    • n: количество трапеций, на которые разбивается интервал интегрирования (тип int).
  2. Создаются следующие переменные:
    • result: переменная для хранения результата интегрирования (тип double).
    • left, right: переменные для хранения левой и правой границ текущей трапеции (тип double).
    • delta: шаг сетки, равный (b-a)/n (тип double).
  3. Задается начальное значение result=0.0.
  4. Запускается цикл, выполняющийся до тех пор, пока правая граница текущей трапеции не станет больше b.
    • Внутри цикла к result прибавляется произведение f(left)+f(right))*delta/2.0.
    • После каждой итерации значения left и right инкрементируются на delta.
  5. По завершении цикла возвращается значение result.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы