public LibBFGSComparisonTest()
{
var list = new List<Specification>();
list.Add(new Specification(2,
(x) =>
{
double a = x[1] - x[0] * x[0];
double b = 1 - x[0];
return b * b + 100 * a * a;
},
(x) =>
{
double a = x[1] - x[0] * x[0];
double b = 1 - x[0];
double f0 = -2 * b - 400 * x[0] * a;
double f1 = 200 * a;
return new[] { f0, f1 };
}, new[] { 0.0, 0 }));
list.Add(new Specification(2,
(x) => -Math.Exp(-Math.Pow(x[0] - 1, 2)) - Math.Exp(-0.5 * Math.Pow(x[1] - 2, 2)),
(x) => new double[]
{
// df/dx = {-2 e^(- (x-1)^2) (x-1)}
2 * Math.Exp(-Math.Pow(x[0] - 1, 2)) * (x[0] - 1),
// df/dy = {- e^(-1/2 (y-2)^2) (y-2)}
Math.Exp(-0.5 * Math.Pow(x[1] - 2, 2)) * (x[1] - 2)
}, null));
list.Add(new Specification(2,
x => 10.0 * Math.Pow(x[0] + 1.0, 2.0) + Math.Pow(x[1], 2.0),
x => new[] { 20 * (x[0] + 1), 2 * x[1] },
new double[2]));
list.Add(new Specification(3, // uses a constant value
x => 10.0 * Math.Pow(x[0] + 1.0, 2.0) + Math.Pow(x[1], 2.0),
x => new[] { 20 * (x[0] + 1), 2 * x[1], 0 },
new double[3]));
problems = list;
}