Haskell:使用递归进行数值积分

时间:2012-04-10 16:34:44

标签: haskell recursion numerical-methods

我现在正在给Haskell一个忙,并努力在递归方面重写循环。

我正在尝试编写一个基本积分器,它取一些函数f(x)并通过Midpoint方法在[a,b]范围内对其进行积分。积分函数采用三个参数N,a和b,其中N是用于近似积分的矩形的数量。

Wolfram Alpha link

当我尝试使用GHCI编译它时,我收到了很多抽象的错误消息,我真的不知道从哪里开始。大量“超出范围”和几个“Main.a [或b]的多重声明”。

由于

MPInt 1 a b = DELTA 1 -- Base case
MPInt N a b = (MPInt (N-1) a b) + DELTA
     where 
     dX = (b - a) / N
     DELTA = dX * f (a + dX * (N+0.5))

f :: (Num a) => a -> a
f x = x^2

1 个答案:

答案 0 :(得分:10)

  • 您已将功能命名为MPInt。只有模块,类,类型和构造函数的名称才能以大写字母开头;值(包括函数)必须以小写字母(或下划线或某些标点符号)开头。同样的问题也适用于NDELTA

  • 您在DELTA的第一个案例的定义中使用MPInt,但它被定义为第二个案例的一部分。 where子句仅适用于它之前的表达式(在本例中为MPInt N a b = ...定义)。 (此外,DELTA的第一次使用将其视为一个函数,但第二次使用及其定义将其视为数值。