/// <summary> /// Maps a binary operation on two fuzzy numbers /// (Performs the operation over each pair of corresponding alpha-cuts) /// </summary> public static FuzzyNumber Map(FuzzyNumber X, FuzzyNumber Y, Func <Interval, Interval, Interval> operation) { if (X.AlphaCuts.Count == Y.AlphaCuts.Count) { return(new FuzzyNumber(X.AlphaCuts.Zip(Y.AlphaCuts, operation))); } throw new NotImplementedException(); }
/// <summary> /// How much is greater than other fuzzy number? /// </summary> /// <param name="other"></param> /// <returns>A Presumption (0 - 1) that the fuzzy number is greater</returns> public double GreaterThan(FuzzyNumber other) { if (other.AlphaCuts.Count == AlphaCuts.Count) { var sum = 0d; for (var i = 0; i < AlphaCuts.Count; i++) { sum += AlphaCuts[i].GreaterThan(other.AlphaCuts[i]); } return(sum / AlphaCuts.Count); } throw new NotImplementedException(); }
/// <summary> /// Calculates a cosine of the fuzzy angle. /// </summary> /// <param name="X">A fuzzy number represents the angle in radians.</param> public static FuzzyNumber Cos(FuzzyNumber X) { return FuzzyNumber.Map(X, x => Cos(x)); }
/// <summary> /// Calculates a value of the fuzzy number raised to the specified power. /// </summary> /// <param name="X">Base</param> /// <param name="y">Exponent</param> public static FuzzyNumber Pow(FuzzyNumber X, double y) { return(FuzzyNumber.Map(X, x => Pow(x, y))); }
/// <summary> /// Returns the smaller of two fuzzy numbers. /// </summary> public static FuzzyNumber Min(FuzzyNumber X, FuzzyNumber Y) { return(FuzzyNumber.Map(X, Y, (x, y) => Min(x, y))); }
public static FuzzyNumber Atan2(FuzzyNumber Y, FuzzyNumber X) { var rotated = Y.Support.Contains(0) && !X.Support.Contains(0); return(FuzzyNumber.Map(Y, X, (y, x) => Atan2(y, x, rotated))); }
/// <summary> /// Returns the smaller of two fuzzy numbers. /// </summary> public static FuzzyNumber Min(FuzzyNumber X, FuzzyNumber Y) { return FuzzyNumber.Map(X, Y, (x, y) => Min(x, y)); }
/// <summary> /// Calculates a sine of the fuzzy angle. /// </summary> /// <param name="X">A fuzzy number represents the angle in radians.</param> public static FuzzyNumber Sin(FuzzyNumber X) { return(FuzzyNumber.Map(X, x => Sin(x))); }
/// <summary> /// How much is greater than other fuzzy number? /// </summary> /// <param name="other"></param> /// <returns>A Presumption (0 - 1) that the fuzzy number is greater</returns> public double GreaterThan(FuzzyNumber other) { if (other.AlphaCuts.Count == AlphaCuts.Count) { var sum = 0d; for (var i = 0; i < AlphaCuts.Count; i++) { sum += AlphaCuts[i].GreaterThan(other.AlphaCuts[i]); } return sum / AlphaCuts.Count; } throw new NotImplementedException(); }
/// <summary> /// Calculates e raised to the specified fuzzy number. /// </summary> /// <param name="X">Exponent</param> public static FuzzyNumber Exp(FuzzyNumber X) { return FuzzyNumber.Map(X, x => Exp(x)); }
/// <summary> /// Maps an unary operation on a fuzzy number /// </summary> public static FuzzyNumber Map(FuzzyNumber X, Func <Interval, Interval> operation) { return(new FuzzyNumber(X.AlphaCuts.Select(operation))); }
/// <summary> /// Calculates a value of the fuzzy number raised to the specified power. /// </summary> /// <param name="X">Base</param> /// <param name="y">Exponent</param> public static FuzzyNumber Pow(FuzzyNumber X, double y) { return FuzzyNumber.Map(X, x => Pow(x, y)); }
/// <summary> /// Maps a binary operation on two fuzzy numbers /// (Performs the operation over each pair of corresponding alpha-cuts) /// </summary> public static FuzzyNumber Map(FuzzyNumber X, FuzzyNumber Y, Func<Interval, Interval, Interval> operation) { if (X.AlphaCuts.Count == Y.AlphaCuts.Count) { return new FuzzyNumber(X.AlphaCuts.Zip(Y.AlphaCuts, operation)); } throw new NotImplementedException(); }
/// <summary> /// Maps an unary operation on a fuzzy number /// </summary> public static FuzzyNumber Map(FuzzyNumber X, Func<Interval, Interval> operation) { return new FuzzyNumber(X.AlphaCuts.Select(operation)); }
/// <summary> /// Calculates a cosine of the fuzzy angle. /// </summary> /// <param name="X">A fuzzy number represents the angle in radians.</param> public static FuzzyNumber Cos(FuzzyNumber X) { return(FuzzyNumber.Map(X, x => Cos(x))); }
/// <summary> /// Calculates e raised to the specified fuzzy number. /// </summary> /// <param name="X">Exponent</param> public static FuzzyNumber Exp(FuzzyNumber X) { return(FuzzyNumber.Map(X, x => Exp(x))); }
/// <summary> /// Calculates a sine of the fuzzy angle. /// </summary> /// <param name="X">A fuzzy number represents the angle in radians.</param> public static FuzzyNumber Sin(FuzzyNumber X) { return FuzzyNumber.Map(X, x => Sin(x)); }
public static FuzzyNumber Atan2(FuzzyNumber Y, FuzzyNumber X) { var rotated = Y.Support.Contains(0) && !X.Support.Contains(0); return FuzzyNumber.Map(Y, X, (y, x) => Atan2(y, x, rotated)); }