5

我正在寻找一个提供“有错误的值”(例如 x ± y)的库。但是搜索“Haskell xyz Error”只会提供错误处理库。

我希望这样的库将在适当的情况下提供常见的数学运算(Num, Floating)。用例是从基于噪声传感器读数的计算中获得错误估计。

更新

我做了一些研究,然后出现了“不确定性的传播”这个词。我发现uncertainly-haskell了我很快就会尝试的。还有其他类似的包吗?

4

3 回答 3

5

看看间隔包。

于 2013-10-25T20:48:15.193 回答
2

Data.Eq.Approximate模块似乎适合获得近似相等

Data.Eq.Approximate

内容 类型包装器 公差类型注释类 绝对公差 相对公差 零公差 使用数字的公差注释 此模块的目的是提供新类型包装器,它允许有效地覆盖值的相等运算符,使其 > 是近似的而不是精确的。例如,类型

type ApproximateDouble = AbsolutelyApproximateValue (Digits Five) Double 为包含 Doubles 的包装器定义了一个别名,这样如果两个 doubles 的精度在小数点后五位以内,则它们是相等的;例如,我们有

1 == (1+10^^(-6) :: ApproximateDouble) 计算结果为真。请注意,我们不需要包装值 1+10^^(-6),因为 AbsolutelyApproximateValue 是 Num 的一个实例。为方便起见,Num 以及许多其他数值类(如 Real 和 Floating)都为在此包中定义的包装器派生,以便人们可以像使用值一样方便地使用包装的值他们自己。

这个包提供了两种包装器。

于 2013-10-25T20:51:24.867 回答
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

 

比较

请注意,这与其他具有相似数据类型的库(如区间舍入)非常不同;这些并不试图保持间隔或简单的数字精度;相反,它们旨在对具有不确定性的实际实验和测量数据进行建模,并将函数应用于具有不确定性的数据,并以合理的统计原理适当地传播误差。

举一个明显的例子,采取

> (52 +/- 6) + (39 +/- 4)
91.0 +/- 7.0

在像区间这样的库中,这将导致91 +/- 10 (即,下限为 46 + 35,上限为 58 + 43)。但是,对于实验数据,两个独立样本中的误差往往会“抵消”,并导致总体不确定性总和约为 7。

于 2017-01-01T14:07:51.247 回答