public void GoldfarbIdnaniLargeSampleTest2()
{
var Q = readMatrixFile(new StringReader(Resources.dmatFull));
var AMat = readMatrixFile(new StringReader(Resources.constraintMatrix11_15_2));
var bvec = readVectorFile(new StringReader(Resources.constraints11_14_2));
var dvec = new double[Q.GetLength(0)];
double[] b = new double[bvec.Length];
bvec.CopyTo(b, 0);
bool psd = Q.IsPositiveDefinite();
Assert.IsTrue(psd);
GoldfarbIdnani gfI = new GoldfarbIdnani(Q, dvec, AMat, b, 2);
for (int i = 0; i < gfI.ConstraintTolerances.Length; i++)
Assert.AreEqual(LinearConstraint.DefaultTolerance, gfI.ConstraintTolerances[i]);
bool success = gfI.Minimize();
Assert.IsTrue(success);
double[] soln = gfI.Solution;
double value = Math.Sqrt(Matrix.Multiply(Matrix.Multiply(soln, Q), soln.Transpose())[0]);
double expectedSol = 0.048224950997808;
double actualSol = value;
double[] expected =
{
0.41144782323407, // 2
0.27310552838116, // 13
0.31544664838498, // 14
};
double[] actual =
{
soln[1], soln[12], soln[13]
};
Assert.AreEqual(expectedSol, actualSol, 1e-8);
for (int i = 0; i < expected.Length; i++)
Assert.AreEqual(expected[i], actual[i], 1e-5);
}