/// <summary> /// Compute the dot product for two matrixes. Note: both matrixes must be vectors. /// </summary> /// <param name="a">The first matrix, must be a vector.</param> /// <param name="b">The second matrix, must be a vector.</param> /// <returns>The dot product of the two matrixes.</returns> public static double DotProduct(Matrix a, Matrix b) { if (!a.IsVector() || !b.IsVector()) { throw new MatrixError( "To take the dot product, both matrixes must be vectors."); } Double[] aArray = a.ToPackedArray(); Double[] bArray = b.ToPackedArray(); if (aArray.Length != bArray.Length) { throw new MatrixError( "To take the dot product, both matrixes must be of the same length."); } double result = 0; int length = aArray.Length; for (int i = 0; i < length; i++) { result += aArray[i] * bArray[i]; } return(result); }
/// <summary> /// Calculate the vector length of the matrix. /// </summary> /// <param name="input">The vector to calculate for.</param> /// <returns>The vector length.</returns> public static double VectorLength(Matrix input) { if (!input.IsVector()) { throw new MatrixError( "Can only take the vector length of a vector."); } Double[] v = input.ToPackedArray(); double rtn = 0.0; for (int i = 0; i < v.Length; i++) { rtn += Math.Pow(v[i], 2); } return(Math.Sqrt(rtn)); }
public void Randomize() { const double min = 1.0; const double max = 10.0; var matrix = new Matrix(10, 10); matrix.Ramdomize(min, max); var array = matrix.ToPackedArray(); foreach (double t in array) { if (t < min || t > max) { Assert.IsFalse(true); } } }
public void PackedArray() { double[][] matrixData = { new[] { 1.0, 2.0 }, new[] { 3.0, 4.0 } }; var matrix = new Matrix(matrixData); double[] matrixData2 = matrix.ToPackedArray(); Assert.AreEqual(4, matrixData2.Length); Assert.AreEqual(1.0, matrix[0, 0]); Assert.AreEqual(2.0, matrix[0, 1]); Assert.AreEqual(3.0, matrix[1, 0]); Assert.AreEqual(4.0, matrix[1, 1]); var matrix2 = new Matrix(2, 2); matrix2.FromPackedArray(matrixData2, 0); Assert.IsTrue(matrix.Equals(matrix2)); }
public void Randomize() { const double min = 1.0; const double max = 10.0; var matrix = new Matrix(10, 10); matrix.Ramdomize(min, max); var array = matrix.ToPackedArray(); foreach (double t in array) { if (t < min || t > max) Assert.IsFalse(true); } }
public void PackedArray() { double[][] matrixData = { new[] {1.0, 2.0}, new[] {3.0, 4.0} }; var matrix = new Matrix(matrixData); double[] matrixData2 = matrix.ToPackedArray(); Assert.AreEqual(4, matrixData2.Length); Assert.AreEqual(1.0, matrix[0, 0]); Assert.AreEqual(2.0, matrix[0, 1]); Assert.AreEqual(3.0, matrix[1, 0]); Assert.AreEqual(4.0, matrix[1, 1]); var matrix2 = new Matrix(2, 2); matrix2.FromPackedArray(matrixData2, 0); Assert.IsTrue(matrix.Equals(matrix2)); }
/// <summary> /// Calculate the vector length of the matrix. /// </summary> /// <param name="input">The vector to calculate for.</param> /// <returns>The vector length.</returns> public static double VectorLength(Matrix input) { if (!input.IsVector()) { throw new MatrixError( "Can only take the vector length of a vector."); } Double[] v = input.ToPackedArray(); double rtn = 0.0; for (int i = 0; i < v.Length; i++) { rtn += Math.Pow(v[i], 2); } return Math.Sqrt(rtn); }
/// <summary> /// Compute the dot product for two matrixes. Note: both matrixes must be vectors. /// </summary> /// <param name="a">The first matrix, must be a vector.</param> /// <param name="b">The second matrix, must be a vector.</param> /// <returns>The dot product of the two matrixes.</returns> public static double DotProduct(Matrix a, Matrix b) { if (!a.IsVector() || !b.IsVector()) { throw new MatrixError( "To take the dot product, both matrixes must be vectors."); } Double[] aArray = a.ToPackedArray(); Double[] bArray = b.ToPackedArray(); if (aArray.Length != bArray.Length) { throw new MatrixError( "To take the dot product, both matrixes must be of the same length."); } double result = 0; int length = aArray.Length; for (int i = 0; i < length; i++) { result += aArray[i]*bArray[i]; } return result; }