public void FunctionTest5()
{
var f1 = new QuadraticObjectiveFunction("x² + 1");
var f2 = new QuadraticObjectiveFunction("-x*y + y*z");
var f3 = new QuadraticObjectiveFunction("-2x² + xy - y² - 10xz + z²");
var f4 = new QuadraticObjectiveFunction("-2x² + xy - y² + 5y");
var f5 = new QuadraticObjectiveFunction("2x² -5");
double x = 0, y = 0, z = 0;
var g1 = new QuadraticObjectiveFunction(() => x * x + 1);
var g2 = new QuadraticObjectiveFunction(() => -x * y + y * z);
var g3 = new QuadraticObjectiveFunction(() => -2 * x * x + x * y - y * y - 10 * x * z + z * z);
var g4 = new QuadraticObjectiveFunction(() => -2 * x * x + x * y - y * y + 5 * y);
var g5 = new QuadraticObjectiveFunction(() => 2 * x * x - 5);
QuadraticObjectiveFunction[] f = { f1, f2, f3, f4, f5 };
QuadraticObjectiveFunction[] g = { g1, g2, g3, g4, g5 };
for (int l = 0; l < f.Length; l++)
{
var fl = f[l];
var gl = g[l];
Assert.AreEqual(fl.NumberOfVariables, gl.NumberOfVariables);
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < 10; k++)
{
x = (i - 5) / 10.0;
y = (j - 5) / 10.0;
z = (k - 5) / 10.0;
double a = fl.Function(new[] { x, y, z }.First(fl.NumberOfVariables));
double e = gl.Function(new[] { x, y, z }.First(fl.NumberOfVariables));
Assert.AreEqual(e, a, 1e-10);
Assert.IsFalse(Double.IsNaN(a));
Assert.IsFalse(Double.IsNaN(e));
}
}
}
}
}