public static double Simpsons(Func<double, double> f, double a, double b, int n)
{
if (n % 2 != 0)
throw new ArgumentException(
String.Format(
"For Simpson's method to be used, the number of steps must be even. " +
"The number of steps received was {0}.", n
)
);
if (a == b)
{
return 0;
}
double s = (b - a) / n, alpha = s / 3.0, interval = s, m = 4.0;
double sum = f(a) + f(b);
for (int i = 0; i < n - 1; i++)
{
sum += m * f(a + interval);
m = 6 - m;
interval += s;
}
return alpha * sum;
}