我想写一个代表马尔可夫链的类(让我们命名它MC
)。它有一个构造函数,它采用状态转换矩阵(即vector<vector<double>>
. 我想,检查它是否真的是一个矩阵(具有相同的行数和列数)并且真的是一个转换矩阵是个好主意:所有其中的数字是概率,即不小于0.0
和不大于1.0
,并且对于每一行,其元素之和为1.0
. 但是,存在浮点限制引起的问题:例如,和0.3 + 0.3 + 0.3 + 0.1
将不相等到1.0
,所以检查不会那么容易。所以我看到了这个问题的两种可能的解决方案:
- 选择一些 epsilon 并与 epsilon error 进行比较。当然它现在会接受一些违反转移矩阵属性的矩阵,但一般来说,如果有人偶尔将一些坏数据传递给构造函数,他会得到一个异常。
- 什么都不检查,靠班级的用户,如果他通过了不好的东西,那完全是他的错,班级的行为会出乎意料。
哪种方法更好,更“真实”?我喜欢第一个,但同样,我不确定我应该如何选择 epsilon。