public void ForwardTest3()
{
HiddenMarkovModel hmm = Accord.Tests.Statistics.Models.Markov.
ForwardBackwardAlgorithmTest.CreateModel3();
MarkovDiscreteFunction function = new MarkovDiscreteFunction(hmm);
// L L R R
int[] observations = { 0, 0, 1, 1 };
double[,] actual = Accord.Statistics.Models.Fields.
ForwardBackwardAlgorithm.Forward(function.Factors[0], observations);
// Forward matrices from R's HMM package are
// transposed in relation to the framework's:
Assert.AreEqual(4, actual.GetLength(0));
Assert.AreEqual(2, actual.GetLength(1));
Assert.AreEqual(0.675, actual[0, 0], 1e-10);
Assert.AreEqual(0.012, actual[0, 1], 1e-10);
Assert.AreEqual(0.4077, actual[1, 0], 1e-10);
Assert.AreEqual(0.017208, actual[1, 1], 1e-10);
Assert.AreEqual(0.0828306, actual[2, 0], 1e-10);
Assert.AreEqual(0.082355328, actual[2, 1], 1e-10);
Assert.AreEqual(0.0227427696, actual[3, 0], 1e-10);
Assert.AreEqual(0.065309067648, actual[3, 1], 1e-10);
foreach (double p in actual)
Assert.IsFalse(double.IsNaN(p));
}