已编辑
鉴于“不确定”和“不确定性”这两个词相当普遍,很难通过谷歌搜索“不确定性算术”并立即获得任何有用的信息。因此,任何人都可以建议一个好的例程库,在几乎任何编程/脚本语言中,实现对不确定值的处理,按照这个描述:
使用不确定性算术记录近似值,对其有测量公差。这是当我们不确定一个值,但知道它可以具有的上限和下限时,表示为±值。
已编辑
鉴于“不确定”和“不确定性”这两个词相当普遍,很难通过谷歌搜索“不确定性算术”并立即获得任何有用的信息。因此,任何人都可以建议一个好的例程库,在几乎任何编程/脚本语言中,实现对不确定值的处理,按照这个描述:
使用不确定性算术记录近似值,对其有测量公差。这是当我们不确定一个值,但知道它可以具有的上限和下限时,表示为±值。
我相信“区间算术”是您正在寻找的更常见的名称。 boost::interval将是我作为支持库的首选。
如果您正在寻找错误传播模块(这与区间算术不同,但错误传播是科学家常用的),我建议您看看我的uncertainties
Python 模块。它以透明的方式处理错误/不确定性传播,并且与许多实现相反,正确处理变量之间的相关性。
看看 Thomas Flanagan 的Error Propagation Java 类。它使用的方法最适合处理不确定性而不会带来额外的麻烦。
供参考,因为对你来说可能为时已晚,我建议 BIAS/Profil:http ://www.ti3.tuhh.de/keil/profil/index_e.html
它不是图书馆,但您的问题让我想起了“Expert F#”中描述概率工作流程的示例:
我们不是编写表达式来计算整数,而是编写表达式来计算整数的分布。本案例研究基于 Ramsey 和 Pfeffer 于 2002 年发表的一篇论文。
你可以阅读谷歌书籍的摘录。
我可能会通过声明一个名为 UncertainValue 的类来解决这个问题,该类具有诸如(伪代码)之类的方法和属性:
class UncertainValue
{
private double upperbound;
private double lowerbound;
private double nominalvalue;
private double certainty;
...
UncertainValue add(UncertainValue value);
UncertainValue multiply(UncertainValue factor);
}
我意识到这并不能回答您在查找预制库方面的问题,抱歉。
INTLAB(INTerval LABoratory)是一个著名的区间算术库和经过验证的数值线性代数。它基于 MATLAB/Octave。你可以从这里下载这个库:
http://www.ti3.tu-harburg.de/rump/intlab/
kv 库是由 C++ 和 Boost C++ 库组成的区间算术库。多精度区间算术可用。它还具有经过验证的 ODE 求解器。
http://verifiedby.me/kv/index-e.html
对于其他区间算术库/软件,请查看以下网站: