public override double Function(double[] x, double[] y)
{
// Optimization in case x and y are
// exactly the same object reference.
double prod = 1;
for (int i = 0; i < x.Length; i++)
{
double delta = x[i] - y[i];
double num = Math.Sin((N + 0.5) * (delta));
double den = 2.0 * Math.Sin(delta / 2.0);
prod *= num / den;
}
return prod;
}