Интеграл методом трапеций - C (СИ)
Формулировка задачи:
Программа считает интеграл методом трапеций. Почему то, если задать, например, функцию y = x , и посчитать на отрезке -0,1234 до 0,1234 и наоборот: от 0,1234 до -0,1234 то погрешность разная и интеграл не равен 0. Можно конечно для второго случая поменять значения друг на друга, но надо понять почему так.
#include "function.h" double Integral (double (*f)(double), double, double, int); int main(){ double a,b; int n; double (*f)(double); printf ("Vvedite a\n"); scanf ("%lf", &a); printf ("Vvedite b\n"); scanf ("%lf", &b); printf ("Vvedite n - koli4estvo razbienii otrezka\n"); scanf ("%d", &n); f = fun; printf ("Integral raven %.15lf\n", Integral (f, a, b, n)); return 0; } double Integral (double (*f)(double), double a, double b, int n){ double result = 0.0; double delta; delta = (b - a) / (double) n; int i; result += (f(a) + f(b)) * delta / 2; for (i = 1; i < n; ++i){ result += f(a + i * delta) * delta; } return result; }
#include "function.h" double fun(double x){ return x; }
Решение задачи: «Интеграл методом трапеций»
textual
Листинг программы
double Integral (double (*f)(double), double a, double b, int n) { double result, left, right, delta; for (result=0.0, left=a, delta=(b-a)/(double)n, right=left+delta; right<=b; left=right; right+=delta) { result+=(f(left)+f(right))*delta/2.0; } return r; }
Объяснение кода листинга программы
В данном коде реализован алгоритм вычисления интеграла методом трапеций.
- Передаются входные параметры функции:
- f: адрес функции, которую необходимо интегрировать (тип double (*f)(double)).
- a: нижняя граница интегрирования (тип double).
- b: верхняя граница интегрирования (тип double).
- n: количество трапеций, на которые разбивается интервал интегрирования (тип int).
- Создаются следующие переменные:
- result: переменная для хранения результата интегрирования (тип double).
- left, right: переменные для хранения левой и правой границ текущей трапеции (тип double).
- delta: шаг сетки, равный (b-a)/n (тип double).
- Задается начальное значение result=0.0.
- Запускается цикл, выполняющийся до тех пор, пока правая граница текущей трапеции не станет больше b.
- Внутри цикла к result прибавляется произведение f(left)+f(right))*delta/2.0.
- После каждой итерации значения left и right инкрементируются на delta.
- По завершении цикла возвращается значение result.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д