【问题标题】:Haskell: Numerically integrating using recursionHaskell:使用递归进行数值积分
【发布时间】:2012-04-11 02:53:44
【问题描述】:

我目前正在尝试 Haskell,并努力根据递归重写循环。

我正在尝试编写一个基本的积分器,它采用一些函数 f(x) 并通过中点方法在 [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

【问题讨论】:

    标签: haskell recursion numerical-methods


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

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

    【讨论】:

    • 现在工作。感谢您的帮助。
    猜你喜欢
    • 2013-05-05
    • 2019-08-28
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2022-01-06
    • 2016-05-03
    • 2010-10-13
    • 2013-07-15
    相关资源
    最近更新 更多