Ваша функция funcintegrate()
должна делить интервал [a, b]
на n
подинтервалы, вычислять значение f()
на всех конечных точках подинтервала, а затем использовать их для вычисления значения определенного выражения для каждого из подинтервалов и наконец, сложите все значения этого выражения.
Подвыражение для расчета на каждой итерации зависит от выбранного вами метода численного интегрирования и влияет на компромисс между производительностью и точностью.
В простейшем случае выражение является произведением значения f()
в одной из конечных точек, умноженной на длину подинтервала. Это соответствует «приближению гистограммы» к полю под кривой. Это очень неточно, и как только вы успешно его внедрите, вы должны попробовать более сложные методы.
Эти две статьи в Википедии дают хорошее описание ряда различных методов, каждый из которых использует общий алгоритм, который я описал выше: Метод Эйлера , Методы Рунге-Кутты .
Я также рекомендую прочитать соответствующие главы в «Числовые рецепты в Си».
EDIT : трапециевидный метод использует для каждого подинтервала выражение, представляющее область трапеции, которая основана на подинтервале и распространяется вверх (или вниз в зависимости от знака f()
) до его вертикали стороны пересекают кривую. Эти две точки пересечения связаны между собой прямой линией (вот где приближение сделано, поскольку f()
может быть не прямой между точками).