public void CanCreateMatrixNormal(int n, int p) { var matrixM = Matrix<double>.Build.Random(n, p, 1); var matrixV = Matrix<double>.Build.RandomPositiveDefinite(n, 1); var matrixK = Matrix<double>.Build.RandomPositiveDefinite(p, 1); var d = new MatrixNormal(matrixM, matrixV, matrixK); for (var i = 0; i < matrixM.RowCount; i++) { for (var j = 0; j < matrixM.ColumnCount; j++) { Assert.AreEqual(matrixM[i, j], d.Mean[i, j]); } } for (var i = 0; i < matrixV.RowCount; i++) { for (var j = 0; j < matrixV.ColumnCount; j++) { Assert.AreEqual(matrixV[i, j], d.RowCovariance[i, j]); } } for (var i = 0; i < matrixK.RowCount; i++) { for (var j = 0; j < matrixK.ColumnCount; j++) { Assert.AreEqual(matrixK[i, j], d.ColumnCovariance[i, j]); } } }
public void CanSample(int n, int p) { var d = new MatrixNormal(Matrix<double>.Build.Random(n, p, 1), Matrix<double>.Build.RandomPositiveDefinite(n, 1), Matrix<double>.Build.RandomPositiveDefinite(p, 1)); d.Sample(); }
public void ValidateDensity() { const int Rows = 2; const int Cols = 2; var m = Matrix<double>.Build.Dense(Rows, Cols); m[0, 0] = 0.156065579983862; m[0, 1] = -0.568039841576594; m[1, 0] = -0.806288628097313; m[1, 1] = -1.20004405005077; var v = Matrix<double>.Build.Dense(Rows, Rows); v[0, 0] = 0.674457817054746; v[0, 1] = 0.878930403442185; v[1, 0] = 0.878930403442185; v[1, 1] = 1.76277498368061; var k = Matrix<double>.Build.Dense(Cols, Cols); k[0, 0] = 0.674457817054746; k[0, 1] = 0.878930403442185; k[1, 0] = 0.878930403442185; k[1, 1] = 1.76277498368061; var d = new MatrixNormal(m, v, k); var x = Matrix<double>.Build.Dense(Rows, Cols); x[0, 0] = 2; x[0, 1] = 2; AssertHelpers.AlmostEqualRelative(0.00015682927366491211, d.Density(x), 16); }
public void ValidateNonsquareDensity() { const int Rows = 2; const int Cols = 1; var m = Matrix<double>.Build.Dense(Rows, Cols); m[0, 0] = 0.156065579983862; m[1, 0] = -0.806288628097313; var v = Matrix<double>.Build.Dense(Rows, Rows); v[0, 0] = 0.674457817054746; v[0, 1] = 0.878930403442185; v[1, 0] = 0.878930403442185; v[1, 1] = 1.76277498368061; var k = Matrix<double>.Build.Dense(Cols, Cols); k[0, 0] = 0.674457817054746; var d = new MatrixNormal(m, v, k); var x = Matrix<double>.Build.Dense(Rows, Cols); x[0, 0] = 2; x[1, 0] = 1.5; AssertHelpers.AlmostEqualRelative(0.008613384131384546, d.Density(x), 12); }
public void CanGetK(int n, int p) { var matrixK = Matrix<double>.Build.RandomPositiveDefinite(p, 1); var d = new MatrixNormal(Matrix<double>.Build.Random(n, p, 1), Matrix<double>.Build.RandomPositiveDefinite(n, 1), matrixK); for (var i = 0; i < matrixK.RowCount; i++) { for (var j = 0; j < matrixK.ColumnCount; j++) { Assert.AreEqual(matrixK[i, j], d.ColumnCovariance[i, j]); } } }
public void CanGetM(int n, int p) { var matrixM = Matrix<double>.Build.Random(n, p, 1); var d = new MatrixNormal(matrixM, Matrix<double>.Build.RandomPositiveDefinite(n, 1), Matrix<double>.Build.RandomPositiveDefinite(p, 1)); for (var i = 0; i < matrixM.RowCount; i++) { for (var j = 0; j < matrixM.ColumnCount; j++) { Assert.AreEqual(matrixM[i, j], d.Mean[i, j]); } } }
public void ValidateToString() { const int N = 2; const int P = 5; var d = new MatrixNormal(Matrix<double>.Build.Random(N, P, 1), Matrix<double>.Build.RandomPositiveDefinite(N, 1), Matrix<double>.Build.RandomPositiveDefinite(P, 1)); Assert.AreEqual("MatrixNormal(Rows = 2, Columns = 5)", d.ToString()); }
public void HasRandomSourceEvenAfterSetToNull() { const int N = 2; const int P = 3; var d = new MatrixNormal(Matrix<double>.Build.Random(N, P, 1), Matrix<double>.Build.RandomPositiveDefinite(N, 1), Matrix<double>.Build.RandomPositiveDefinite(P, 1)); Assert.DoesNotThrow(() => d.RandomSource = null); Assert.IsNotNull(d.RandomSource); }
public void HasRandomSource() { const int N = 2; const int P = 3; var d = new MatrixNormal(Matrix<double>.Build.Random(N, P, 1), Matrix<double>.Build.RandomPositiveDefinite(N, 1), Matrix<double>.Build.RandomPositiveDefinite(P, 1)); Assert.IsNotNull(d.RandomSource); }