我正在寻找一个提供'带错误值'的库(例如x±y)。但是搜索“Haskell xyz Error”只会产生错误处理库。
我希望这样的库可以在适当的地方提供常见的数学运算(Num
,Floating
)。用例是根据噪声传感器读数从计算中获得误差估计值。
我做了一些研究,出现了“propagation of uncertainty”一词。我发现uncertainly-haskell
我很快就会尝试。还有其他这样的套餐吗?
答案 0 :(得分:5)
查看intervals包。
答案 1 :(得分:2)
Data.Eq.Approximate模块似乎适合于获得近似相等。
Data.Eq.Approximate
内容 输入包装器 容差类型注释的类 绝对宽容 相对容忍度 零容忍 使用数字的容差注释 这个模块的目的是提供newtype包装器,它允许一个人有效地覆盖一个值的等于运算符,使它>是近似的而不是精确的。例如,类型
类型ApproximateDouble = AbsolutelyApproximateValue(数字五)Double 为包含双精度的包装器定义一个别名,如果两个双精度等于精度的五位小数,则两个双精度相等;对于>例如,我们有
1 ==(1 + 10 ^^( - 6):: ApproximateDouble) 评估为True。请注意,我们不需要包装值1 + 10 ^^( - 6),因为AbsolutelyApproximateValue是Num的实例。对于>方便,Num以及许多其他数值类如Real和Floating都是为>中定义的包装器派生的。这个包可以方便地使用包装的值,就像使用值本身一样。
这个包提供了两种包装。
答案 2 :(得分:0)
uncertain
包似乎提供了您正在寻找的内容:
自述文件中的一些亮点:
提供用于操纵固有数字的工具 实验/测量不确定性,并传播它们 基于统计学原理的职能。
使用错误传播进行操作
ghci> let x = 1.52 +/- 0.07 ghci> let y = 781.4 +/- 0.3 ghci> let z = 1.53e-1 `withPrecision` 3 ghci> cosh x 2.4 +/- 0.2 ghci> exp x / z * sin (y ** z) 10.9 +/- 0.9 ghci> pi + 3 * logBase x y 52 +/- 5
创建数字
ghci> 1.52 +/- 0.07 1.52 +/- 7.0e-2 ghci> fromSamples [12.5, 12.7, 12.6, 12.6, 12.5] 12.58 +/- 7.0e-2
比较
请注意,这与其他类似的库有很大不同 数据类型(例如来自intervals和rounding);这些没有 试图保持间隔或简单的数字精度;他们改为 旨在用实际的实验和测量数据建模 他们的不确定性,并将功能应用于数据 不确定性并用声音正确传播错误 统计原则。
有一个明显的例子,请
> (52 +/- 6) + (39 +/- 4) 91.0 +/- 7.0
在像intervals这样的库中,这会产生
91 +/- 10
(即,下限为46 + 35,上限为58 + 43)。 但是,有了实验数据,两个独立样本中的错误 倾向于“抵消”,并导致总体不确定性 在大约7的总和。