namespace MyApp.Extensions
{
using System;
using System.Collections.Generic;
using System.Linq;
public static class MathExtensions
{
/// <summary>Calculates the Standard Deviation for the collection of integers.</summary>
/// <param name="collection">The collection.</param>
/// <returns>A double.</returns>
public static double StandardDeviation(this IEnumerable<int> collection)
{
return CalculateStandardDeviation(collection);
}
/// <summary>Calculates the Standard Deviation for the collection of double.</summary>
/// <param name="collection">The collection.</param>
/// <returns>A double.</returns>
public static double StandardDeviation(this IEnumerable<double> collection)
{
return CalculateStandardDeviation(collection);
}
/// <summary>Calculates the Standard Deviation for the collection of floats.</summary>
/// <param name="collection">The collection.</param>
/// <returns>A float.</returns>
public static float StandardDeviation(this IEnumerable<float> collection)
{
return CalculateStandardDeviation(collection);
}
/// <summary>Calculates the Standard DeviationP for the collection of integers.</summary>
/// <param name="collection">The collection.</param>
/// <returns>A double.</returns>
public static double StandardDeviationP(this IEnumerable<int> collection)
{
return CalculateStandardDeviation(collection);
}
/// <summary>Calculates the Standard DeviationP for the collection of doubles.</summary>
/// <param name="collection">The collection.</param>
/// <returns>A double.</returns>
public static double StandardDeviationP(this IEnumerable<double> collection)
{
return CalculateStandardDeviation(collection, 0);
}
/// <summary>Calculates the Standard Deviation for the collection of floats.</summary>
/// <param name="collection">The collection.</param>
/// <returns>A double.</returns>
public static double StandardDeviationP(this IEnumerable<float> collection)
{
return CalculateStandardDeviation(collection, 0);
}
/// <summary>Calculates the Standard Deviation for the collection of doubles.</summary>
/// <exception cref="ArgumentNullException">Thrown when one or more required arguments are null.</exception>
/// <param name="collection">The collection.</param>
/// <param name="buffer"> Buffer size(Optional)</param>
/// <returns>The calculated standard deviation.</returns>
///
/// ### <exception cref="System.ArgumentNullException">Indicates a null collection.</exception>
private static double CalculateStandardDeviation(this IEnumerable<double> collection, int buffer = 1)
{
if (collection == null) throw new ArgumentNullException("collection");
var data = collection.ToList();
var average = data.Average();
var differences = data.Select(u => Math.Pow(average - u, 2.0)).ToList();
return Math.Sqrt(differences.Sum() / (differences.Count() - buffer));
}
/// <summary>Standards the deviation p.</summary>
/// <param name="collection">The collection.</param>
/// <returns>The calculated standard deviation.</returns>
private static double CalculateStandardDeviation(this IEnumerable<int> collection)
{
return CalculateStandardDeviation(collection.Select(x => (double)x));
}
/// <summary>Standards the deviation p.</summary>
/// <exception cref="ArgumentNullException">Thrown when one or more required arguments are null.</exception>
/// <param name="collection">The collection.</param>
/// <param name="buffer"> Buffer size(Optional)</param>
/// <returns>The calculated standard deviation.</returns>
///
/// ### <exception cref="System.ArgumentNullException">Indicates a null collection.</exception>
private static float CalculateStandardDeviation(this IEnumerable<float> collection, int buffer = 1)
{
if (collection == null) throw new ArgumentNullException("collection");
var data = collection.ToList();
var average = data.Average();
var differences = data.Select(u => Math.Pow(average - u, 2.0)).ToList();
return (float)Math.Sqrt(differences.Sum() / (differences.Count() - buffer));
}
}
}
Comments