public void InverseWithNearSingularMatrix() { Matrix22D m = new Matrix22D(0.0001, 0, 0, 0.0001); Vector2D v = Vector2D.One; Vector2D w = m * v; Assert.IsTrue(Vector2D.AreNumericallyEqual(v, m.Inverse * w)); Assert.IsTrue(Matrix22D.AreNumericallyEqual(Matrix22D.Identity, m * m.Inverse)); }
public void Inverse() { Assert.AreEqual(Matrix22D.Identity, Matrix22D.Identity.Inverse); Matrix22D m = new Matrix22D(1, 2, 3, 4); Vector2D v = Vector2D.One; Vector2D w = m * v; Assert.IsTrue(Vector2D.AreNumericallyEqual(v, m.Inverse * w)); Assert.IsTrue(Matrix22D.AreNumericallyEqual(Matrix22D.Identity, m * m.Inverse)); }
public void AreEqualWithEpsilon() { double epsilon = 0.001; Matrix22D m0 = new Matrix22D(columnMajor, MatrixOrder.ColumnMajor); Matrix22D m1 = new Matrix22D(columnMajor, MatrixOrder.ColumnMajor); m1 += new Matrix22D(0.002); Matrix22D m2 = new Matrix22D(columnMajor, MatrixOrder.ColumnMajor); m2 += new Matrix22D(0.0001); Assert.IsTrue(Matrix22D.AreNumericallyEqual(m0, m0, epsilon)); Assert.IsFalse(Matrix22D.AreNumericallyEqual(m0, m1, epsilon)); Assert.IsTrue(Matrix22D.AreNumericallyEqual(m0, m2, epsilon)); }
public void AreEqual() { double originalEpsilon = Numeric.EpsilonD; Numeric.EpsilonD = 1e-8; Matrix22D m0 = new Matrix22D(columnMajor, MatrixOrder.ColumnMajor); Matrix22D m1 = new Matrix22D(columnMajor, MatrixOrder.ColumnMajor); m1 += new Matrix22D(0.000001); Matrix22D m2 = new Matrix22D(columnMajor, MatrixOrder.ColumnMajor); m2 += new Matrix22D(0.00000001); Assert.IsTrue(Matrix22D.AreNumericallyEqual(m0, m0)); Assert.IsFalse(Matrix22D.AreNumericallyEqual(m0, m1)); Assert.IsTrue(Matrix22D.AreNumericallyEqual(m0, m2)); Numeric.EpsilonD = originalEpsilon; }
public void MultiplyMatrix() { Matrix22D m = new Matrix22D(12, 23, 45, 67); Assert.AreEqual(Matrix22D.Zero, Matrix22D.Multiply(m, Matrix22D.Zero)); Assert.AreEqual(Matrix22D.Zero, Matrix22D.Multiply(Matrix22D.Zero, m)); Assert.AreEqual(m, Matrix22D.Multiply(m, Matrix22D.Identity)); Assert.AreEqual(m, Matrix22D.Multiply(Matrix22D.Identity, m)); Assert.IsTrue(Matrix22D.AreNumericallyEqual(Matrix22D.Identity, Matrix22D.Multiply(m, m.Inverse))); Assert.IsTrue(Matrix22D.AreNumericallyEqual(Matrix22D.Identity, Matrix22D.Multiply(m.Inverse, m))); Matrix22D m1 = new Matrix22D(columnMajor, MatrixOrder.ColumnMajor); Matrix22D m2 = new Matrix22D(12, 23, 45, 67); Matrix22D result = Matrix22D.Multiply(m1, m2); for (int column = 0; column < 2; column++) { for (int row = 0; row < 2; row++) { Assert.AreEqual(Vector2D.Dot(m1.GetRow(row), m2.GetColumn(column)), result[row, column]); } } }