在Haskell中计算左手黎曼求和

问题描述 投票:1回答:1

我创建了该函数,该函数应该计算左手黎曼和,但每次调用该函数时,我都会得到无穷大的答案。我困惑为什么即使我将有限列表的总和乘以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]])
haskell calculus
1个回答
0
投票

此错误仅在Reimann和的左间隔由于行而从0开始时发生:

in dx * (sum [f x | x <- [a,a+dx..b-dx]])

给定f x功能的[theFunc变为theFunc 01/0^2infinity

如果我们添加零保护,那么一切正常:

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

称为:

leftSum 0 2 theFunc 1000
© www.soinside.com 2019 - 2024. All rights reserved.