Комментарий mtrw , вероятно, уже частично отвечает на вопрос: s
следует повторно инициализировать внутри цикла for.Отправленный код приводит к необратимому увеличению s
каждый раз, когда ошибка слишком велика, поэтому для больших значений D
наибольшее значение s
будет .
Кроме того, поскольку код переоценивает всю интеграцию вместо повторного использования предыдущей интеграции из [0, D-1], вы тратите много ресурсов, если не хотите явно показать устойчивость к ошибкам вашей функции Simpson
- s
для большого значения D
придется многократно увеличить, чтобы сохранить ту же самую низкую ошибку (поскольку вы интегрируете в больший диапазон, вам нужно суммировать больше точек).
Наконец, ваша реализация Simpson
может, конечно, делать забавные вещи, которые никто не может сказать, не видя этого ...