3

マルコフ連鎖を表すクラスを書きたいと思います(名前を付けましょうMC)。これには、状態遷移行列 (つまり、 ) を取るコンストラクターがありますvector<vector<double>>。それが実際に行列 (行と列の数が同じ) であり、実際に遷移行列であることを確認することをお勧めします。その中の数値は確率であり、つまり 未満でも0.0大きくてもなく1.0、すべての行の要素の合計は です1.0. しかし、浮動小数点の制限から生じる問題があります: たとえば、合計0.3 + 0.3 + 0.3 + 0.1は等しくなりません.に1.0、チェックはそれほど簡単ではありません. したがって、私はその問題の2つの可能な解決策を見つけます:

  1. いくつかのイプシロンを選択し、イプシロン エラーと比較します。もちろん、遷移行列のプロパティに違反するいくつかの行列を受け入れるようになりましたが、一般に、誰かが時々悪いデータをコンストラクタに渡すと、例外が発生します。
  2. 何もチェックせず、クラスのユーザーに頼ってください。彼が何か悪いことをした場合、それは完全に彼のせいであり、クラスの動作は予期しないものになります。

どのアプローチがより良く、より「現実的」ですか? 私は最初のものを気に入っていますが、イプシロンをどのように選択すればよいかわかりません。

4

1 に答える 1