public void CovSumTest() { var cov = new CovarianceSum(); cov.Terms.Add(new CovarianceSquaredExponentialIso()); cov.Terms.Add(new CovarianceLinear()); TestCovarianceFunction(cov, 0, new double[,] { { 1.4860, 1.5376, 2.7382, 1.4230, 2.7566, 2.0148, 1.9261, 1.8493, 1.6069, 2.2035}, { 1.0861, 1.4463, 1.8848, 1.0165, 2.1818, 1.6036, 1.4240, 1.4965, 1.2360, 1.6526}, { 2.1463, 2.2472, 2.8854, 1.9188, 2.4455, 2.9283, 2.5049, 1.8107, 2.0157, 2.4059}, { 1.6245, 1.2089, 2.2059, 1.4630, 1.5864, 1.9084, 2.0859, 1.7825, 1.7332, 1.8574}, { 1.6804, 1.1454, 2.0031, 1.6914, 1.2725, 1.4029, 1.6810, 1.6888, 1.6437, 1.7665}, { 1.4052, 1.2437, 1.5900, 1.2941, 1.2438, 1.4882, 1.6072, 1.4970, 1.4811, 1.5135}, { 1.4913, 1.9972, 2.3544, 1.3689, 2.9275, 2.1163, 1.8043, 1.4564, 1.5325, 2.1139}, { 2.0334, 2.2303, 3.0928, 1.8439, 3.1092, 2.8169, 2.4555, 1.7771, 1.9760, 2.5789}, { 1.7324, 2.0254, 2.8414, 1.6386, 2.9270, 2.3807, 2.0510, 1.7808, 1.7231, 2.3527}, { 0.9196, 1.4220, 1.6254, 0.7696, 1.8861, 1.7579, 1.4076, 1.4163, 1.1077, 1.3988}, }, new double[][,] { new double[,] { { 0, 0.3197, 0.6358, 0.5518, 0.5207, 0.5909, 0.3361, 0.4897, 0.2447, 0.5720}, { 0.3197, 0, 0.6697, 0.6190, 0.4635, 0.4047, 0.4190, 0.6899, 0.3650, 0.1552}, { 0.6358, 0.6697, 0, 0.6031, 0.5367, 0.5927, 0.6008, 0.4084, 0.4103, 0.6843}, { 0.5518, 0.6190, 0.6031, 0, 0.4173, 0.2740, 0.6339, 0.6114, 0.6702, 0.6455}, { 0.5207, 0.4635, 0.5367, 0.4173, 0, 0.2510, 0.6610, 0.6935, 0.5180, 0.5362}, { 0.5909, 0.4047, 0.5927, 0.2740, 0.2510, 0, 0.6019, 0.6955, 0.6232, 0.3756}, { 0.3361, 0.4190, 0.6008, 0.6339, 0.6610, 0.6019, 0, 0.3205, 0.3279, 0.6165}, { 0.4897, 0.6899, 0.4084, 0.6114, 0.6935, 0.6955, 0.3205, 0, 0.4189, 0.7344}, { 0.2447, 0.3650, 0.4103, 0.6702, 0.5180, 0.6232, 0.3279, 0.4189, 0, 0.5595}, { 0.5720, 0.1552, 0.6843, 0.6455, 0.5362, 0.3756, 0.6165, 0.7344, 0.5595, 0}, }, new double[,] { { 2.0000, 1.6472, 1.1513, 1.3142, 1.3662, 1.2437, 1.6267, 1.4148, 1.7372, 1.2786}, { 1.6472, 2.0000, 1.0689, 1.1876, 1.4541, 1.5370, 1.5174, 1.0103, 1.5898, 1.8381}, { 1.1513, 1.0689, 2.0000, 1.2199, 1.3398, 1.2402, 1.2244, 1.5320, 1.5293, 1.0276}, { 1.3142, 1.1876, 1.2199, 2.0000, 1.5197, 1.7027, 1.1555, 1.2033, 1.0675, 1.1291}, { 1.3662, 1.4541, 1.3398, 1.5197, 2.0000, 1.7299, 1.0916, 0.9989, 1.3706, 1.3407}, { 1.2437, 1.5370, 1.2402, 1.7027, 1.7299, 2.0000, 1.2223, 0.9923, 1.1787, 1.5758}, { 1.6267, 1.5174, 1.2244, 1.1555, 1.0916, 1.2223, 2.0000, 1.6461, 1.6369, 1.1928}, { 1.4148, 1.0103, 1.5320, 1.2033, 0.9989, 0.9923, 1.6461, 2.0000, 1.5176, 0.7806}, { 1.7372, 1.5898, 1.5293, 1.0675, 1.3706, 1.1787, 1.6369, 1.5176, 2.0000, 1.3009}, { 1.2786, 1.8381, 1.0276, 1.1291, 1.3407, 1.5758, 1.1928, 0.7806, 1.3009, 2.0000}, }, } ); cov = new CovarianceSum(); cov.Terms.Add(new CovarianceSquaredExponentialIso()); cov.Terms.Add(new CovarianceLinear()); TestCovarianceFunction(cov, 1, new double[,] { { 7.7681, 7.7957, 9.1175, 7.6951, 9.1148, 8.2406, 8.2532, 8.2057, 7.9303, 8.5765}, { 7.3926, 7.7881, 8.2289, 7.3128, 8.5326, 7.8570, 7.7535, 7.8698, 7.5822, 8.0224}, { 8.5096, 8.6045, 9.2632, 8.2546, 8.7198, 9.2945, 8.8817, 8.1368, 8.3741, 8.7816}, { 7.9886, 7.4745, 8.5704, 7.8096, 7.7719, 8.1964, 8.4695, 8.1648, 8.1138, 8.2315}, { 8.0632, 7.4371, 8.3651, 8.0757, 7.4147, 7.6080, 8.0477, 8.0750, 8.0288, 8.1469}, { 7.7869, 7.5959, 7.9316, 7.6696, 7.4564, 7.7793, 7.9884, 7.8850, 7.8692, 7.8941}, { 7.7940, 8.3557, 8.7048, 7.6497, 9.3089, 8.3910, 8.1263, 7.7655, 7.8589, 8.4871}, { 8.3350, 8.5404, 9.4643, 8.1079, 9.4540, 9.1241, 8.7945, 8.0367, 8.2835, 8.9443}, { 8.0481, 8.3644, 9.2221, 7.9399, 9.2948, 8.6753, 8.3852, 8.1164, 8.0524, 8.7309}, { 7.2030, 7.7683, 7.9353, 7.0220, 8.1984, 8.0588, 7.7433, 7.7874, 7.4431, 7.7457}, }, new double[][,] { new double[,] { { 0, 0.3781, 1.0250, 0.7934, 0.7239, 0.8910, 0.4018, 0.6606, 0.2764, 0.8421}, { 0.3781, 0, 1.1512, 0.9715, 0.6106, 0.5082, 0.5320, 1.2453, 0.4451, 0.1669}, { 1.0250, 1.1512, 0, 0.9248, 0.7589, 0.8960, 0.9183, 0.5143, 0.5175, 1.2171}, { 0.7934, 0.9715, 0.9248, 0, 0.5292, 0.3149, 1.0188, 0.9487, 1.1534, 1.0583}, { 0.7239, 0.6106, 0.7589, 0.5292, 0, 0.2845, 1.1157, 1.2640, 0.7182, 0.7577}, { 0.8910, 0.5082, 0.8960, 0.3149, 0.2845, 0, 0.9214, 1.2749, 0.9845, 0.4616}, { 0.4018, 0.5320, 0.9183, 1.0188, 1.1157, 0.9214, 0, 0.3793, 0.3899, 0.9638}, { 0.6606, 1.2453, 0.5143, 0.9487, 1.2640, 1.2749, 0.3793, 0, 0.5318, 1.6567}, { 0.2764, 0.4451, 0.5175, 1.1534, 0.7182, 0.9845, 0.3899, 0.5318, 0, 0.8116}, { 0.8421, 0.1669, 1.2171, 1.0583, 0.7577, 0.4616, 0.9638, 1.6567, 0.8116, 0}, }, new double[,] { { 14.7781, 14.3950, 13.7138, 13.9618, 14.0352, 13.8578, 14.3707, 14.1018, 14.4990, 13.9100}, { 14.3950, 14.7781, 13.5767, 13.7715, 14.1542, 14.2607, 14.2360, 13.4735, 14.3260, 14.6102}, { 13.7138, 13.5767, 14.7781, 13.8217, 13.9982, 13.8525, 13.8286, 14.2545, 14.2511, 13.5045}, { 13.9618, 13.7715, 13.8217, 14.7781, 14.2390, 14.4598, 13.7206, 13.7960, 13.5743, 13.6778}, { 14.0352, 14.1542, 13.9982, 14.2390, 14.7781, 14.4908, 13.6154, 13.4528, 14.0413, 13.9995}, { 13.8578, 14.2607, 13.8525, 14.4598, 14.4908, 14.7781, 13.8254, 13.4407, 13.7576, 14.3090}, { 14.3707, 14.2360, 13.8286, 13.7206, 13.6154, 13.8254, 14.7781, 14.3938, 14.3828, 13.7798}, { 14.1018, 13.4735, 14.2545, 13.7960, 13.4528, 13.4407, 14.3938, 14.7781, 14.2363, 13.0113}, { 14.4990, 14.3260, 14.2511, 13.5743, 14.0413, 13.7576, 14.3828, 14.2363, 14.7781, 13.9425}, { 13.9100, 14.6102, 13.5045, 13.6778, 13.9995, 14.3090, 13.7798, 13.0113, 13.9425, 14.7781}, }, } ); }
private CovarianceSum(CovarianceSum original, Cloner cloner) : base(original, cloner) { this.terms = cloner.Clone(original.terms); this.numberOfVariables = original.numberOfVariables; }
private ICovarianceFunction TreeToCovarianceFunction(ISymbolicExpressionTreeNode node) { switch (node.Symbol.Name) { case "Sum": { var sum = new CovarianceSum(); sum.Terms.Add(TreeToCovarianceFunction(node.GetSubtree(0))); sum.Terms.Add(TreeToCovarianceFunction(node.GetSubtree(1))); return(sum); } case "Product": { var prod = new CovarianceProduct(); prod.Factors.Add(TreeToCovarianceFunction(node.GetSubtree(0))); prod.Factors.Add(TreeToCovarianceFunction(node.GetSubtree(1))); return(prod); } // covFunction is cloned by the model so we can reuse instances of terminal covariance functions case "Linear": return(linear); case "LinearArd": return(linearArd); case "MaternIso1": return(maternIso1); case "MaternIso3": return(maternIso3); case "MaternIso5": return(maternIso5); case "NeuralNetwork": return(neuralNetwork); case "Periodic": return(periodic); case "PiecewisePolynomial0": return(piecewisePoly0); case "PiecewisePolynomial1": return(piecewisePoly1); case "PiecewisePolynomial2": return(piecewisePoly2); case "PiecewisePolynomial3": return(piecewisePoly3); case "Polynomial2": return(poly2); case "Polynomial3": return(poly3); case "RationalQuadraticArd": return(ratQuadraticArd); case "RationalQuadraticIso": return(ratQuadraticIso); case "SpectralMixture1": return(spectralMixture1); case "SpectralMixture3": return(spectralMixture3); case "SpectralMixture5": return(spectralMixture5); case "SquaredExponentialArd": return(sqrExpArd); case "SquaredExponentialIso": return(sqrExpIso); default: throw new InvalidProgramException(string.Format("Found invalid symbol {0}", node.Symbol.Name)); } }