在 Haskell 中计算左手黎曼和

Computing left handed Riemann Sums in Haskell

我创建了这个应该计算左手黎曼和的函数,但每次调用该函数时我得到的答案都是无穷大。我很困惑为什么我会返回无穷大,即使我正在计算有限列表的总和并将其乘以 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^2infinity

因为从数学上讲在 0 处有一条渐近线,所以这种行为是正确的。 如果你想假装 0 的值对积分没有贡献,那么我们可以像这样为零添加一个守卫:

theFunc :: Float -> Float
theFunc x
  | x == 0.0 = 0.0
  | otherwise = 1.0 / x^2 

被称为:

leftSum 0 2 theFunc 1000