/// <summary> /// A = A + B*s <=> A[row,col] = A[row,col] + B[row,col]*s /// </summary> /// <param name="A">the matrix to modify.</param> /// <param name="B">the matrix to stay unaffected.</param> /// <param name="s">the scalar; can have any value.</param> /// <returns><i>A</i> (for convenience only).</returns> public static DoubleMatrix2D PlusMult(DoubleMatrix2D A, DoubleMatrix2D B, double s) { return A.Assign(B, F2.PlusMult(s)); }
/// <summary> /// A = A - B*s <=> A[i] = A[i] - B[i]*s /// </summary> /// <param name="A">the matrix to modify.</param> /// <param name="B">the matrix to stay unaffected.</param> /// <param name="s">the scalar; can have any value.</param> /// <returns><i>A</i> (for convenience only).</returns> public static DoubleMatrix1D MinusMult(DoubleMatrix1D A, DoubleMatrix1D B, double s) { return A.Assign(B, F2.MinusMult(s)); }
/// <summary> /// Manhattan distance function; <i>Sum( abs(x[i]-y[i]) )</i>. /// </summary> /// <returns></returns> public static VectorVectorFunction MANHATTAN() { return((a, b) => a.Aggregate(b, F2.Plus, F2.Chain(F1.Abs, F2.Minus))); }
/// <summary> /// Maximum distance function; <i>Max( abs(x[i]-y[i]) )</i>. /// </summary> /// <returns></returns> public static VectorVectorFunction MAXIMUM() { return((a, b) => a.Aggregate(b, F2.Max, F2.Chain(F1.Abs, F2.Minus))); }
/// <summary> /// Bray-Curtis distance function; <i>Sum( abs(x[i]-y[i]) ) / Sum( x[i]+y[i] )</i>. /// </summary> /// <returns></returns> public static VectorVectorFunction BRAY_CURTIS() { return((a, b) => a.Aggregate(b, F2.Plus, F2.Chain(F1.Abs, F2.Minus)) / a.Aggregate(b, F2.Plus, F2.Plus)); }
//private static Cern.Jet.Math.Functions.DoubleDoubleFunctions F; /// <summary> /// Euclidean distance function; <i>Sqrt(Sum( (x[i]-y[i])^2 ))</i>. /// </summary> /// <returns></returns> public static VectorVectorFunction EUCLID() { return((a, b) => System.Math.Sqrt(a.Aggregate(b, F2.Plus, F2.Chain(F1.Square, F2.Minus)))); }