методом трапеций не работает?
integration :: (Double -> Double) -> Double -> Double -> Double
integration f a b =
let n = 1000
ith i = a + i * (b - a) / n
helper i s | i < n = helper (i + 1) (s + (f (ith i)) + (f (ith (i + 1))))
| otherwise = s
in (helper 0 0) / (2 * n)
а что говорит?
Просто неправильно вычисляет. Например, integral sin 0 pi ~= 0.63, а должно быть -2
можно начать с самого прямого решения без вот этих хелперов integration :: (Double -> Double) -> Double -> Double -> Double integration f a b = sum [f x + f (x + h) | x <- [a, a + h .. b - h]] * h / 2 where n = 1000 h = (b - a) / n
Обсуждают сегодня