我创建了该函数,该函数应该计算左手黎曼和,但每次调用该函数时,我都会得到无穷大的答案。我困惑为什么即使我将有限列表的总和乘以deltaX也要返回无穷大。
theFunc :: Float -> Float
theFunc x = 1 / x^2
--aBound, bBound, function, numIntervals
leftSum :: Float -> Float -> (Float -> Float) -> Float -> Float
leftSum a b f n =
let dx = (b-a) / n
in dx * (sum [f x | x <- [a,a+dx..b-dx]])
此错误仅在Reimann和的左间隔由于行而从0开始时发生:
in dx * (sum [f x | x <- [a,a+dx..b-dx]])
给定f x
功能的[theFunc
变为theFunc 0
,1/0^2
为infinity
如果我们添加零保护,那么一切正常:
theFunc :: Float -> Float
theFunc x
| x == 0.0 = 0.0
| otherwise = 1.0 / x^2
称为:
leftSum 0 2 theFunc 1000