public void FunctionTest2()
{
// Tested against R's kernlab
double[][] data =
{
new double[] { 5.1, 3.5, 1.4, 0.2 },
new double[] { 5.0, 3.6, 1.4, 0.2 },
new double[] { 4.9, 3.0, 1.4, 0.2 },
new double[] { 5.8, 4.0, 1.2, 0.2 },
new double[] { 4.7, 3.2, 1.3, 0.2 },
};
// rbf <- polydot(3)
Polynomial kernel = new Polynomial(degree: 3, constant: 1);
// Compute the kernel matrix
double[,] actual = new double[5, 5];
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
actual[i, j] = kernel.Function(data[i], data[j]);
double[,] expected =
{
{ 70240.51, 69426.53, 57022.17, 99252.85, 55002.06 },
{ 69426.53, 68719.48, 56181.89, 98099.75, 54353.80 },
{ 57022.17, 56181.89, 46694.89, 80286.11, 44701.08 },
{ 99252.85, 98099.75, 80286.11, 141583.69, 77635.89 },
{ 55002.06, 54353.80, 44701.08, 77635.89, 43095.88 },
};
// Assert both are equal
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
Assert.AreEqual(expected[i, j], actual[i, j], 1e-2);
}