source: trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessFunctionsTest.cs @ 8615

Last change on this file since 8615 was 8615, checked in by gkronber, 7 years ago

#1902 renamed covariance functions

File size: 118.1 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System.Linq;
23using HeuristicLab.Algorithms.DataAnalysis;
24using Microsoft.VisualStudio.TestTools.UnitTesting;
25
26namespace HeuristicLab.Algorithms.DataAnalysis_34.Tests {
27  [TestClass]
28
29  // reference values calculated with Rasmussen's GPML MATLAB package
30  public class GaussianProcessFunctionsTest {
31    [TestMethod]
32    public void MeanConstTest() {
33      TestMeanFunction(new MeanConst(), 0,
34        new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
35        new double[][] { new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
36      );
37      TestMeanFunction(new MeanConst(), 1,
38        new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
39        new double[][] { new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
40      );
41    }
42
43    [TestMethod]
44    public void MeanZeroTest() {
45      TestMeanFunction(new MeanZero(), 0,
46        new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
47        new double[][] { new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
48      );
49      TestMeanFunction(new MeanZero(), 1,
50        new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
51        new double[][] { new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
52      );
53    }
54
55    [TestMethod]
56    public void MeanSumTest() {
57      var sum = new MeanSum();
58      sum.Terms.Add(new MeanConst());
59      sum.Terms.Add(new MeanConst());
60      TestMeanFunction(sum, 0,
61        new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
62        new double[][]
63          {
64            new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
65            new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
66          }
67      );
68      TestMeanFunction(sum, 1,
69        new double[] { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
70        new double[][]
71          {
72            new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
73            new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
74          }
75      );
76    }
77    [TestMethod]
78    public void MeanProdTest() {
79      var prod = new MeanProd();
80      prod.Factors.Add(new MeanConst());
81      prod.Factors.Add(new MeanConst());
82      TestMeanFunction(prod, 0,
83        new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
84        new double[][]
85          {
86            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
87            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
88          }
89      );
90      TestMeanFunction(prod, 1,
91        new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
92        new double[][]
93          {
94            new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
95            new double[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
96          }
97      );
98
99      prod.Factors.Clear();
100      prod.Factors.Add(new MeanZero());
101      prod.Factors.Add(new MeanLinear());
102      TestMeanFunction(prod, 0,
103        new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
104        new double[][]
105          {
106            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
107            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
108            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
109            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
110            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
111          }
112      );
113      TestMeanFunction(prod, 1,
114        new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
115        new double[][]
116          {
117            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
118            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
119            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
120            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
121            new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
122          }
123      );
124
125      prod.Factors.Clear();
126      prod.Factors.Add(new MeanConst());
127      prod.Factors.Add(new MeanLinear());
128      TestMeanFunction(prod, 1,
129  new double[] { 1.843574580675791, 2.127929337522181, 3.116568910281474, 1.688566127130978, 3.250517738447450, 2.961262743634280, 2.326019412613392, 1.729286976436201, 1.769654419215176, 2.398170347588917 },
130  new double[][]
131                {
132                  new double[] { 2.9088,    1.8646,    3.1971,    1.9890,    1.7640,    1.2801,    2.8059,    3.7243,    3.1899    ,1.4978 },
133                  new double[] { 0.4173,    0.0497,    0.9027,    0.9448,    0.4909,    0.4893,    0.3377,    0.9001,    0.3692    ,0.1112 },
134                  new double[] { 0.7803,    0.3897,    0.2417,    0.4039,    0.0965,    0.1320,    0.9421,    0.9561,    0.5752    ,0.0598 },
135                  new double[] { 0.2348,    0.3532,    0.8212,    0.0154,    0.0430,    0.1690,    0.6491,    0.7317,    0.6477    ,0.4509 },
136                  new double[] { 0.5470,    0.2963,    0.7447,    0.1890,    0.6868,    0.1835,    0.3685,    0.6256,    0.7802    ,0.0811 },
137                  new double[] { 0.9294,    0.7757,    0.4868,    0.4359,    0.4468,    0.3063,    0.5085,    0.5108,    0.8176    ,0.7948 }
138                }
139);
140    }
141
142    [TestMethod]
143    public void MeanLinear() {
144      TestMeanFunction(new MeanLinear(), 0,
145        new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
146        new double[][]
147          {
148            new double[] { 0.4173, 0.0497, 0.9027, 0.9448, 0.4909, 0.4893, 0.3377, 0.9001, 0.3692, 0.1112 },
149            new double[] { 0.7803, 0.3897, 0.2417, 0.4039, 0.0965, 0.1320, 0.9421, 0.9561, 0.5752, 0.0598 },
150            new double[] { 0.2348, 0.3532, 0.8212, 0.0154, 0.0430, 0.1690, 0.6491, 0.7317, 0.6477, 0.4509 },
151            new double[] { 0.5470, 0.2963, 0.7447, 0.1890, 0.6868, 0.1835, 0.3685, 0.6256, 0.7802, 0.0811 },
152            new double[] { 0.9294, 0.7757, 0.4868, 0.4359, 0.4468, 0.3063, 0.5085, 0.5108, 0.8176, 0.7948 }
153          }
154      );
155      TestMeanFunction(new MeanLinear(), 1,
156        new double[] { 1.8436, 2.1279, 3.1166, 1.6886, 3.2505, 2.9613, 2.3260, 1.7293, 1.7697, 2.3982 },
157        new double[][]
158          {
159            new double[] { 0.4173, 0.0497, 0.9027, 0.9448, 0.4909, 0.4893, 0.3377, 0.9001, 0.3692, 0.1112 },
160            new double[] { 0.7803, 0.3897, 0.2417, 0.4039, 0.0965, 0.1320, 0.9421, 0.9561, 0.5752, 0.0598 },
161            new double[] { 0.2348, 0.3532, 0.8212, 0.0154, 0.0430, 0.1690, 0.6491, 0.7317, 0.6477, 0.4509 },
162            new double[] { 0.5470, 0.2963, 0.7447, 0.1890, 0.6868, 0.1835, 0.3685, 0.6256, 0.7802, 0.0811 },
163            new double[] { 0.9294, 0.7757, 0.4868, 0.4359, 0.4468, 0.3063, 0.5085, 0.5108, 0.8176, 0.7948 }
164          }
165      );
166    }
167
168    [TestMethod]
169    public void CovSeIsoTest() {
170      TestCovarianceFunction(new CovarianceSquaredExponentialIso(), 0,
171        new double[,]
172          {
173{    0.5771,    0.5404,    0.8569,    0.5612,    0.7545,    0.4980,    0.6649,    0.7484,    0.6564,    0.8184},
174{    0.6206,    0.7027,    0.7091,    0.6015,    0.7295,    0.5338,    0.6705,    0.8202,    0.7155,    0.8029},
175{    0.7743,    0.7513,    0.8468,    0.6865,    0.5645,    0.7861,    0.8404,    0.6625,    0.7555,    0.8335},
176{    0.7773,    0.5513,    0.7792,    0.7166,    0.4534,    0.5870,    0.8913,    0.8796,    0.8656,    0.8245},
177{    0.8839,    0.5934,    0.7689,    0.8982,    0.4126,    0.4741,    0.7883,    0.9201,    0.9077,    0.8649},
178{    0.8746,    0.7341,    0.7020,    0.8323,    0.4826,    0.5922,    0.8706,    0.9508,    0.9524,    0.8660},
179{    0.6133,    0.7560,    0.7280,    0.5749,    0.8722,    0.5651,    0.6530,    0.6260,    0.6633,    0.8195},
180{    0.6113,    0.6277,    0.8110,    0.5489,    0.7110,    0.6221,    0.6948,    0.5425,    0.6227,    0.7828},
181{    0.6394,    0.6950,    0.8669,    0.6107,    0.7933,    0.5985,    0.6823,    0.6858,    0.6702,    0.8492},
182{    0.5790,    0.7156,    0.6274,    0.5324,    0.6323,    0.6100,    0.6863,    0.8091,    0.6855,    0.7173},
183          },
184        new double[][,]
185          {
186            new double[,] {
187{         0,    0.3197,    0.6358,    0.5518,    0.5207,    0.5909,    0.3361,    0.4897,    0.2447,    0.5720},
188{    0.3197,         0,    0.6697,    0.6190,    0.4635,    0.4047,    0.4190,    0.6899,    0.3650,    0.1552},
189{    0.6358,    0.6697,         0,    0.6031,    0.5367,    0.5927,    0.6008,    0.4084,    0.4103,    0.6843},
190{    0.5518,    0.6190,    0.6031,         0,    0.4173,    0.2740,    0.6339,    0.6114,    0.6702,    0.6455},
191{    0.5207,    0.4635,    0.5367,    0.4173,         0,    0.2510,    0.6610,    0.6935,    0.5180,    0.5362},
192{    0.5909,    0.4047,    0.5927,    0.2740,    0.2510,         0,    0.6019,    0.6955,    0.6232,    0.3756},
193{    0.3361,    0.4190,    0.6008,    0.6339,    0.6610,    0.6019,         0,    0.3205,    0.3279,    0.6165},
194{    0.4897,    0.6899,    0.4084,    0.6114,    0.6935,    0.6955,    0.3205,         0,    0.4189,    0.7344},
195{    0.2447,    0.3650,    0.4103,    0.6702,    0.5180,    0.6232,    0.3279,    0.4189,         0,    0.5595},
196{    0.5720,    0.1552,    0.6843,    0.6455,    0.5362,    0.3756,    0.6165,    0.7344,    0.5595,         0},
197            },
198            new double[,] {
199{    2.0000,    1.6472,    1.1513,    1.3142,    1.3662,    1.2437,    1.6267,    1.4148,    1.7372,    1.2786},
200{    1.6472,    2.0000,    1.0689,    1.1876,    1.4541,    1.5370,    1.5174,    1.0103,    1.5898,    1.8381},
201{    1.1513,    1.0689,    2.0000,    1.2199,    1.3398,    1.2402,    1.2244,    1.5320,    1.5293,    1.0276},
202{    1.3142,    1.1876,    1.2199,    2.0000,    1.5197,    1.7027,    1.1555,    1.2033,    1.0675,    1.1291},
203{    1.3662,    1.4541,    1.3398,    1.5197,    2.0000,    1.7299,    1.0916,    0.9989,    1.3706,    1.3407},
204{    1.2437,    1.5370,    1.2402,    1.7027,    1.7299,    2.0000,    1.2223,    0.9923,    1.1787,    1.5758},
205{    1.6267,    1.5174,    1.2244,    1.1555,    1.0916,    1.2223,    2.0000,    1.6461,    1.6369,    1.1928},
206{    1.4148,    1.0103,    1.5320,    1.2033,    0.9989,    0.9923,    1.6461,    2.0000,    1.5176,    0.7806},
207{    1.7372,    1.5898,    1.5293,    1.0675,    1.3706,    1.1787,    1.6369,    1.5176,    2.0000,    1.3009},
208{    1.2786,    1.8381,    1.0276,    1.1291,    1.3407,    1.5758,    1.1928,    0.7806,    1.3009,    2.0000},
209          }
210          }
211      );
212      TestCovarianceFunction(new CovarianceSquaredExponentialIso(), 1,
213         new double[,]
214           {
215{    6.8592,    6.7985,    7.2362,    6.8334,    7.1127,    6.7239,    6.9920,    7.1048,    6.9798,    7.1914},
216{    6.9271,    7.0445,    7.0531,    6.8979,    7.0803,    6.7872,    7.0000,    7.1935,    7.0617,    7.1727},
217{    7.1376,    7.1086,    7.2246,    7.0223,    6.8388,    7.1522,    7.2172,    6.9886,    7.1139,    7.2091},
218{    7.1414,    6.8169,    7.1438,    7.0632,    6.6389,    6.8750,    7.2749,    7.2619,    7.2462,    7.1986},
219{    7.2667,    6.8852,    7.1309,    7.2824,    6.5548,    6.6792,    7.1550,    7.3063,    7.2929,    7.2454},
220{    7.2563,    7.0864,    7.0436,    7.2078,    6.6953,    6.8834,    7.2517,    7.3388,    7.3405,    7.2466},
221{    6.9160,    7.1146,    7.0783,    6.8557,    7.2536,    6.8398,    6.9750,    6.9351,    6.9897,    7.1926},
222{    6.9130,    6.9378,    7.1825,    6.8129,    7.0557,    6.9294,    7.0338,    6.8021,    6.9302,    7.1482},
223{    6.9551,    7.0340,    7.2476,    6.9120,    7.1611,    6.8932,    7.0166,    7.0213,    6.9995,    7.2274},
224{    6.8624,    7.0619,    6.9373,    6.7848,    6.9446,    6.9109,    7.0221,    7.1802,    7.0209,    7.0642},
225           },
226         new double[][,]
227          {
228            new double[,] {
229{         0,    0.3781,    1.0250,    0.7934,    0.7239,    0.8910,    0.4018,    0.6606,    0.2764,    0.8421},
230{    0.3781,         0,    1.1512,    0.9715,    0.6106,    0.5082,    0.5320,    1.2453,    0.4451,    0.1669},
231{    1.0250,    1.1512,         0,    0.9248,    0.7589,    0.8960,    0.9183,    0.5143,    0.5175,    1.2171},
232{    0.7934,    0.9715,    0.9248,         0,    0.5292,    0.3149,    1.0188,    0.9487,    1.1534,    1.0583},
233{    0.7239,    0.6106,    0.7589,    0.5292,         0,    0.2845,    1.1157,    1.2640,    0.7182,    0.7577},
234{    0.8910,    0.5082,    0.8960,    0.3149,    0.2845,         0,    0.9214,    1.2749,    0.9845,    0.4616},
235{    0.4018,    0.5320,    0.9183,    1.0188,    1.1157,    0.9214,         0,    0.3793,    0.3899,    0.9638},
236{    0.6606,    1.2453,    0.5143,    0.9487,    1.2640,    1.2749,    0.3793,         0,    0.5318,    1.6567},
237{    0.2764,    0.4451,    0.5175,    1.1534,    0.7182,    0.9845,    0.3899,    0.5318,         0,    0.8116},
238{    0.8421,    0.1669,    1.2171,    1.0583,    0.7577,    0.4616,    0.9638,    1.6567,    0.8116,         0},
239            },
240            new double[,] {
241{   14.7781,   14.3950,   13.7138,   13.9618,   14.0352,   13.8578,   14.3707,   14.1018,   14.4990,   13.9100},
242{   14.3950,   14.7781,   13.5767,   13.7715,   14.1542,   14.2607,   14.2360,   13.4735,   14.3260,   14.6102},
243{   13.7138,   13.5767,   14.7781,   13.8217,   13.9982,   13.8525,   13.8286,   14.2545,   14.2511,   13.5045},
244{   13.9618,   13.7715,   13.8217,   14.7781,   14.2390,   14.4598,   13.7206,   13.7960,   13.5743,   13.6778},
245{   14.0352,   14.1542,   13.9982,   14.2390,   14.7781,   14.4908,   13.6154,   13.4528,   14.0413,   13.9995},
246{   13.8578,   14.2607,   13.8525,   14.4598,   14.4908,   14.7781,   13.8254,   13.4407,   13.7576,   14.3090},
247{   14.3707,   14.2360,   13.8286,   13.7206,   13.6154,   13.8254,   14.7781,   14.3938,   14.3828,   13.7798},
248{   14.1018,   13.4735,   14.2545,   13.7960,   13.4528,   13.4407,   14.3938,   14.7781,   14.2363,   13.0113},
249{   14.4990,   14.3260,   14.2511,   13.5743,   14.0413,   13.7576,   14.3828,   14.2363,   14.7781,   13.9425},
250{   13.9100,   14.6102,   13.5045,   13.6778,   13.9995,   14.3090,   13.7798,   13.0113,   13.9425,   14.7781},
251            },
252          }
253       );
254    }
255
256    [TestMethod]
257    public void CovRQIsoTest() {
258      TestCovarianceFunction(new CovarianceRationalQuadraticIso(), 0,
259        new double[,]
260          {
261{    0.6452,    0.6190,    0.8662,    0.6338,    0.7802,    0.5893,    0.7102,    0.7753,    0.7037,    0.8331},
262{    0.6771,    0.7392,    0.7442,    0.6630,    0.7603,    0.6144,    0.7145,    0.8346,    0.7492,    0.8200},
263{    0.7963,    0.7777,    0.8574,    0.7266,    0.6362,    0.8060,    0.8519,    0.7084,    0.7810,    0.8459},
264{    0.7988,    0.6268,    0.8004,    0.7500,    0.5583,    0.6524,    0.8968,    0.8864,    0.8739,    0.8382},
265{    0.8902,    0.6571,    0.7919,    0.9030,    0.5304,    0.5727,    0.8079,    0.9232,    0.9117,    0.8733},
266{    0.8819,    0.7639,    0.7387,    0.8449,    0.5785,    0.6563,    0.8783,    0.9519,    0.9535,    0.8742},
267{    0.6716,    0.7814,    0.7590,    0.6437,    0.8797,    0.6366,    0.7012,    0.6810,    0.7090,    0.8339},
268{    0.6702,    0.6823,    0.8268,    0.6250,    0.7456,    0.6782,    0.7331,    0.6205,    0.6786,    0.8033},
269{    0.6910,    0.7332,    0.8750,    0.6697,    0.8119,    0.6608,    0.7235,    0.7261,    0.7142,    0.8595},
270{    0.6467,    0.7493,    0.6821,    0.6133,    0.6857,    0.6692,    0.7265,    0.8252,    0.7259,    0.7506},
271          },
272        new double[][,]
273          {
274            new double[,] {
275{         0,    0.2722,    0.4584,    0.4165,    0.3996,    0.4367,    0.2838,    0.3820,    0.2165,    0.4271},
276{    0.2722,         0,    0.4736,    0.4505,    0.3666,    0.3300,    0.3391,    0.4823,    0.3037,    0.1436},
277{    0.4584,    0.4736,         0,    0.4428,    0.4084,    0.4376,    0.4416,    0.3323,    0.3336,    0.4799},
278{    0.4165,    0.4505,    0.4428,         0,    0.3381,    0.2388,    0.4575,    0.4468,    0.4739,    0.4629},
279{    0.3996,    0.3666,    0.4084,    0.3381,         0,    0.2213,    0.4698,    0.4837,    0.3981,    0.4081},
280{    0.4367,    0.3300,    0.4376,    0.2388,    0.2213,         0,    0.4422,    0.4845,    0.4525,    0.3109},
281{    0.2838,    0.3391,    0.4416,    0.4575,    0.4698,    0.4422,         0,    0.2728,    0.2781,    0.4493},
282{    0.3820,    0.4823,    0.3323,    0.4468,    0.4837,    0.4845,    0.2728,         0,    0.3390,    0.4995},
283{    0.2165,    0.3037,    0.3336,    0.4739,    0.3981,    0.4525,    0.2781,    0.3390,         0,    0.4206},
284{    0.4271,    0.1436,    0.4799,    0.4629,    0.4081,    0.3109,    0.4493,    0.4995,    0.4206,         0},
285            },
286            new double[,] {
287{    2.0000,    1.6749,    1.2884,    1.4086,    1.4481,    1.3558,    1.6576,    1.4857,    1.7530,    1.3818},
288{    1.6749,    2.0000,    1.2296,    1.3147,    1.5166,    1.5831,    1.5672,    1.1884,    1.6266,    1.8443},
289{    1.2884,    1.2296,    2.0000,    1.3383,    1.4280,    1.3533,    1.3417,    1.5791,    1.5769,    1.2005},
290{    1.4086,    1.3147,    1.3383,    2.0000,    1.5691,    1.7228,    1.2914,    1.3262,    1.2286,    1.2725},
291{    1.4481,    1.5166,    1.4280,    1.5691,    2.0000,    1.7466,    1.2457,    1.1805,    1.4515,    1.4286},
292{    1.3558,    1.5831,    1.3533,    1.7228,    1.7466,    2.0000,    1.3401,    1.1758,    1.3083,    1.6150},
293{    1.6576,    1.5672,    1.3417,    1.2914,    1.2457,    1.3401,    2.0000,    1.6740,    1.6662,    1.3186},
294{    1.4857,    1.1884,    1.5791,    1.3262,    1.1805,    1.1758,    1.6740,    2.0000,    1.5674,    1.0305},
295{    1.7530,    1.6266,    1.5769,    1.2286,    1.4515,    1.3083,    1.6662,    1.5674,    2.0000,    1.3985},
296{    1.3818,    1.8443,    1.2005,    1.2725,    1.4286,    1.6150,    1.3186,    1.0305,    1.3985,    2.0000},
297          },
298                      new double[,] {
299{         0,   -0.0124,   -0.0541,   -0.0386,   -0.0340,   -0.0452,   -0.0137,   -0.0298,   -0.0073,   -0.0419},
300{   -0.0124,         0,   -0.0623,   -0.0505,   -0.0265,   -0.0200,   -0.0215,   -0.0682,   -0.0162,   -0.0029},
301{   -0.0541,   -0.0623,         0,   -0.0474,   -0.0363,   -0.0455,   -0.0470,   -0.0204,   -0.0206,   -0.0664},
302{   -0.0386,   -0.0505,   -0.0474,         0,   -0.0213,   -0.0091,   -0.0537,   -0.0490,   -0.0624,   -0.0563},
303{   -0.0340,   -0.0265,   -0.0363,   -0.0213,         0,   -0.0077,   -0.0600,   -0.0693,   -0.0336,   -0.0362},
304{   -0.0452,   -0.0200,   -0.0455,   -0.0091,   -0.0077,         0,   -0.0472,   -0.0700,   -0.0514,   -0.0172},
305{   -0.0137,   -0.0215,   -0.0470,   -0.0537,   -0.0600,   -0.0472,         0,   -0.0125,   -0.0131,   -0.0500},
306{   -0.0298,   -0.0682,   -0.0204,   -0.0490,   -0.0693,   -0.0700,   -0.0125,         0,   -0.0215,   -0.0919},
307{   -0.0073,   -0.0162,   -0.0206,   -0.0624,   -0.0336,   -0.0514,   -0.0131,   -0.0215,         0,   -0.0399},
308{   -0.0419,   -0.0029,   -0.0664,   -0.0563,   -0.0362,   -0.0172,   -0.0500,   -0.0919,   -0.0399,         0},
309          }
310          }
311      );
312      TestCovarianceFunction(new CovarianceRationalQuadraticIso(), 1,
313         new double[,]
314           {
315{    6.8660,    6.8070,    7.2367,    6.8409,    7.1145,    6.7347,    6.9959,    7.1068,    6.9839,    7.1923},
316{    6.9324,    7.0474,    7.0559,    6.9038,    7.0827,    6.7961,    7.0038,    7.1944,    7.0644,    7.1739},
317{    7.1392,    7.1106,    7.2253,    7.0255,    6.8461,    7.1536,    7.2179,    6.9926,    7.1158,    7.2099},
318{    7.1429,    6.8249,    7.1453,    7.0658,    6.6525,    6.8816,    7.2752,    7.2623,    7.2467,    7.1995},
319{    7.2671,    6.8913,    7.1326,    7.2827,    6.5716,    6.6915,    7.1564,    7.3065,    7.2931,    7.2459},
320{    7.2567,    7.0886,    7.0466,    7.2086,    6.7069,    6.8897,    7.2522,    7.3388,    7.3405,    7.2471},
321{    6.9215,    7.1164,    7.0807,    6.8626,    7.2540,    6.8471,    6.9792,    6.9401,    6.9937,    7.1935},
322{    6.9185,    6.9428,    7.1836,    6.8210,    7.0584,    6.9346,    7.0369,    6.8105,    6.9354,    7.1496},
323{    6.9598,    7.0372,    7.2481,    6.9176,    7.1623,    6.8992,    7.0200,    7.0247,    7.0033,    7.2280},
324{    6.8692,    7.0646,    6.9424,    6.7937,    6.9495,    6.9165,    7.0254,    7.1813,    7.0242,    7.0668},
325           },
326         new double[][,]
327          {
328            new double[,] {
329{         0,    0.3746,    0.9986,    0.7776,    0.7108,    0.8711,    0.3978,    0.6497,    0.2745,    0.8243},
330{    0.3746,         0,    1.1178,    0.9478,    0.6013,    0.5017,    0.5249,    1.2062,    0.4401,    0.1662},
331{    0.9986,    1.1178,         0,    0.9033,    0.7445,    0.8758,    0.8972,    0.5076,    0.5108,    1.1798},
332{    0.7776,    0.9478,    0.9033,         0,    0.5222,    0.3124,    0.9927,    0.9261,    1.1199,    1.0301},
333{    0.7108,    0.6013,    0.7445,    0.5222,         0,    0.2825,    1.0844,    1.2237,    0.7052,    0.7433},
334{    0.8711,    0.5017,    0.8758,    0.3124,    0.2825,         0,    0.9000,    1.2339,    0.9601,    0.4563},
335{    0.3978,    0.5249,    0.8972,    0.9927,    1.0844,    0.9000,         0,    0.3757,    0.3861,    0.9404},
336{    0.6497,    1.2062,    0.5076,    0.9261,    1.2237,    1.2339,    0.3757,         0,    0.5247,    1.5872},
337{    0.2745,    0.4401,    0.5108,    1.1199,    0.7052,    0.9601,    0.3861,    0.5247,         0,    0.7950},
338{    0.8243,    0.1662,    1.1798,    1.0301,    0.7433,    0.4563,    0.9404,    1.5872,    0.7950,         0},
339            },
340            new double[,] {
341{   14.7781,   14.3968,   13.7277,   13.9699,   14.0420,   13.8682,   14.3727,   14.1074,   14.5000,   13.9192},
342{   14.3968,   14.7781,   13.5943,   13.7839,   14.1589,   14.2640,   14.2397,   13.4942,   14.3286,   14.6106},
343{   13.7277,   13.5943,   14.7781,   13.8329,   14.0057,   13.8630,   13.8396,   14.2579,   14.2545,   13.5242},
344{   13.9699,   13.7839,   13.8329,   14.7781,   14.2426,   14.4610,   13.7342,   13.8078,   13.5920,   13.6926},
345{   14.0420,   14.1589,   14.0057,   14.2426,   14.7781,   14.4918,   13.6319,   13.4742,   14.0479,   14.0069},
346{   13.8682,   14.2640,   13.8630,   14.4610,   14.4918,   14.7781,   13.8365,   13.4625,   13.7703,   14.3117},
347{   14.3727,   14.2397,   13.8396,   13.7342,   13.6319,   13.8365,   14.7781,   14.3956,   14.3848,   13.7920},
348{   14.1074,   13.4942,   14.2579,   13.8078,   13.4742,   13.4625,   14.3956,   14.7781,   14.2399,   13.0490},
349{   14.5000,   14.3286,   14.2545,   13.5920,   14.0479,   13.7703,   14.3848,   14.2399,   14.7781,   13.9510},
350{   13.9192,   14.6106,   13.5242,   13.6926,   14.0069,   14.3117,   13.7920,   13.0490,   13.9510,   14.7781},
351            },
352            new double[,] {
353{         0,   -0.0009,   -0.0068,   -0.0040,   -0.0034,   -0.0051,   -0.0010,   -0.0028,   -0.0005,   -0.0046},
354{   -0.0009,         0,   -0.0086,   -0.0061,   -0.0024,   -0.0016,   -0.0018,   -0.0101,   -0.0013,   -0.0002},
355{   -0.0068,   -0.0086,         0,   -0.0055,   -0.0037,   -0.0052,   -0.0054,   -0.0017,   -0.0017,   -0.0097},
356{   -0.0040,   -0.0061,   -0.0055,         0,   -0.0018,   -0.0006,   -0.0067,   -0.0058,   -0.0087,   -0.0073},
357{   -0.0034,   -0.0024,   -0.0037,   -0.0018,         0,   -0.0005,   -0.0081,   -0.0105,   -0.0033,   -0.0037},
358{   -0.0051,   -0.0016,   -0.0052,   -0.0006,   -0.0005,         0,   -0.0055,   -0.0106,   -0.0063,   -0.0013},
359{   -0.0010,   -0.0018,   -0.0054,   -0.0067,   -0.0081,   -0.0055,         0,   -0.0009,   -0.0010,   -0.0060},
360{   -0.0028,   -0.0101,   -0.0017,   -0.0058,   -0.0105,   -0.0106,   -0.0009,         0,   -0.0018,   -0.0183},
361{   -0.0005,   -0.0013,   -0.0017,   -0.0087,   -0.0033,   -0.0063,   -0.0010,   -0.0018,         0,   -0.0042},
362{   -0.0046,   -0.0002,   -0.0097,   -0.0073,   -0.0037,   -0.0013,   -0.0060,   -0.0183,   -0.0042,         0},
363                           }
364          }
365       );
366    }
367
368
369    [TestMethod]
370    public void CovRQArdTest() {
371      TestCovarianceFunction(new CovarianceRationalQuadraticArd(), 0,
372        new double[,]
373          {
374{    0.6452,    0.6190,    0.8662,    0.6338,    0.7802,    0.5893,    0.7102,    0.7753,    0.7037,    0.8331},
375{    0.6771,    0.7392,    0.7442,    0.6630,    0.7603,    0.6144,    0.7145,    0.8346,    0.7492,    0.8200},
376{    0.7963,    0.7777,    0.8574,    0.7266,    0.6362,    0.8060,    0.8519,    0.7084,    0.7810,    0.8459},
377{    0.7988,    0.6268,    0.8004,    0.7500,    0.5583,    0.6524,    0.8968,    0.8864,    0.8739,    0.8382},
378{    0.8902,    0.6571,    0.7919,    0.9030,    0.5304,    0.5727,    0.8079,    0.9232,    0.9117,    0.8733},
379{    0.8819,    0.7639,    0.7387,    0.8449,    0.5785,    0.6563,    0.8783,    0.9519,    0.9535,    0.8742},
380{    0.6716,    0.7814,    0.7590,    0.6437,    0.8797,    0.6366,    0.7012,    0.6810,    0.7090,    0.8339},
381{    0.6702,    0.6823,    0.8268,    0.6250,    0.7456,    0.6782,    0.7331,    0.6205,    0.6786,    0.8033},
382{    0.6910,    0.7332,    0.8750,    0.6697,    0.8119,    0.6608,    0.7235,    0.7261,    0.7142,    0.8595},
383{    0.6467,    0.7493,    0.6821,    0.6133,    0.6857,    0.6692,    0.7265,    0.8252,    0.7259,    0.7506},
384          },
385        new double[][,]
386          {           
387        new double[,]
388          {
389{         0,    0.0948,    0.0978,    0.1380,    0.0028,    0.0024,    0.0044,    0.1286,    0.0018,    0.0447},
390{    0.0948,         0,    0.2750,    0.3462,    0.1119,    0.1211,    0.0509,    0.2553,    0.0675,    0.0032},
391{    0.0978,    0.2750,         0,    0.0008,    0.0864,    0.0782,    0.1437,    0.0000,    0.1769,    0.2257},
392{    0.1380,    0.3462,    0.0008,         0,    0.1268,    0.1539,    0.1537,    0.0009,    0.1250,    0.2813},
393{    0.0028,    0.1119,    0.0864,    0.1268,         0,    0.0000,    0.0091,    0.0583,    0.0078,    0.0736},
394{    0.0024,    0.1211,    0.0782,    0.1539,    0.0000,         0,    0.0103,    0.0583,    0.0062,    0.0932},
395{    0.0044,    0.0509,    0.1437,    0.1537,    0.0091,    0.0103,         0,    0.2216,    0.0007,    0.0223},
396{    0.1286,    0.2553,    0.0000,    0.0009,    0.0583,    0.0583,    0.2216,         0,    0.1731,    0.1652},
397{    0.0018,    0.0675,    0.1769,    0.1250,    0.0078,    0.0062,    0.0007,    0.1731,         0,    0.0325},
398{    0.0447,    0.0032,    0.2257,    0.2813,    0.0736,    0.0932,    0.0223,    0.1652,    0.0325,         0},
399          },
400        new double[,]
401          {
402{         0,    0.1070,    0.1204,    0.0703,    0.2451,    0.1932,    0.0180,    0.0171,    0.0323,    0.2478},
403{    0.1070,         0,    0.0083,    0.0001,    0.0494,    0.0416,    0.1874,    0.1133,    0.0228,    0.0925},
404{    0.1204,    0.0083,         0,    0.0118,    0.0107,    0.0055,    0.2208,    0.3181,    0.0691,    0.0119},
405{    0.0703,    0.0001,    0.0118,         0,    0.0582,    0.0549,    0.1208,    0.1341,    0.0111,    0.0479},
406{    0.2451,    0.0494,    0.0107,    0.0582,         0,    0.0010,    0.2774,    0.2574,    0.1207,    0.0007},
407{    0.1932,    0.0416,    0.0055,    0.0549,    0.0010,         0,    0.2946,    0.2347,    0.0840,    0.0034},
408{    0.0180,    0.1874,    0.2208,    0.1208,    0.2774,    0.2946,         0,    0.0001,    0.0934,    0.3384},
409{    0.0171,    0.1133,    0.3181,    0.1341,    0.2574,    0.2347,    0.0001,         0,    0.0891,    0.2133},
410{    0.0323,    0.0228,    0.0691,    0.0111,    0.1207,    0.0840,    0.0934,    0.0891,         0,    0.1299},
411{    0.2478,    0.0925,    0.0119,    0.0479,    0.0007,    0.0034,    0.3384,    0.2133,    0.1299,         0},
412          },
413        new double[,]
414          {
415{         0,    0.0098,    0.1427,    0.0239,    0.0193,    0.0020,    0.1179,    0.1363,    0.1310,    0.0223},
416{    0.0098,         0,    0.0828,    0.0493,    0.0553,    0.0213,    0.0538,    0.0506,    0.0574,    0.0081},
417{    0.1427,    0.0828,         0,    0.2908,    0.3087,    0.1947,    0.0133,    0.0050,    0.0187,    0.0494},
418{    0.0239,    0.0493,    0.2908,         0,    0.0005,    0.0175,    0.1674,    0.2256,    0.1509,    0.0768},
419{    0.0193,    0.0553,    0.3087,    0.0005,         0,    0.0121,    0.1425,    0.1652,    0.1926,    0.0849},
420{    0.0020,    0.0213,    0.1947,    0.0175,    0.0121,         0,    0.1035,    0.1094,    0.0981,    0.0518},
421{    0.1179,    0.0538,    0.0133,    0.1674,    0.1425,    0.1035,         0,    0.0048,    0.0000,    0.0171},
422{    0.1363,    0.0506,    0.0050,    0.2256,    0.1652,    0.1094,    0.0048,         0,    0.0043,    0.0209},
423{    0.1310,    0.0574,    0.0187,    0.1509,    0.1926,    0.0981,    0.0000,    0.0043,         0,    0.0189},
424{    0.0223,    0.0081,    0.0494,    0.0768,    0.0849,    0.0518,    0.0171,    0.0209,    0.0189,         0},
425          },
426        new double[,]
427          {
428{         0,    0.0441,    0.0162,    0.0636,    0.0102,    0.0607,    0.0219,    0.0034,    0.0418,    0.1036},
429{    0.0441,         0,    0.0760,    0.0050,    0.0877,    0.0080,    0.0032,    0.0383,    0.1549,    0.0394},
430{    0.0162,    0.0760,         0,    0.1383,    0.0017,    0.1442,    0.0637,    0.0088,    0.0008,    0.1587},
431{    0.0636,    0.0050,    0.1383,         0,    0.1525,    0.0000,    0.0134,    0.0838,    0.1319,    0.0047},
432{    0.0102,    0.0877,    0.0017,    0.1525,         0,    0.1932,    0.0393,    0.0013,    0.0046,    0.1872},
433{    0.0607,    0.0080,    0.1442,    0.0000,    0.1932,         0,    0.0154,    0.0676,    0.1524,    0.0068},
434{    0.0219,    0.0032,    0.0637,    0.0134,    0.0393,    0.0154,         0,    0.0463,    0.1176,    0.0359},
435{    0.0034,    0.0383,    0.0088,    0.0838,    0.0013,    0.0676,    0.0463,         0,    0.0147,    0.0787},
436{    0.0418,    0.1549,    0.0008,    0.1319,    0.0046,    0.1524,    0.1176,    0.0147,         0,    0.2390},
437{    0.1036,    0.0394,    0.1587,    0.0047,    0.1872,    0.0068,    0.0359,    0.0787,    0.2390,         0},
438          },
439        new double[,]
440          {
441{         0,    0.0166,    0.0813,    0.1208,    0.1221,    0.1784,    0.1217,    0.0967,    0.0096,    0.0086},
442{    0.0166,         0,    0.0315,    0.0499,    0.0622,    0.1381,    0.0438,    0.0248,    0.0012,    0.0003},
443{    0.0813,    0.0315,         0,    0.0012,    0.0008,    0.0149,    0.0002,    0.0004,    0.0680,    0.0342},
444{    0.1208,    0.0499,    0.0012,         0,    0.0001,    0.0125,    0.0022,    0.0025,    0.0550,    0.0521},
445{    0.1221,    0.0622,    0.0008,    0.0001,         0,    0.0151,    0.0015,    0.0014,    0.0724,    0.0618},
446{    0.1784,    0.1381,    0.0149,    0.0125,    0.0151,         0,    0.0184,    0.0145,    0.1119,    0.1556},
447{    0.1217,    0.0438,    0.0002,    0.0022,    0.0015,    0.0184,         0,    0.0000,    0.0663,    0.0356},
448{    0.0967,    0.0248,    0.0004,    0.0025,    0.0014,    0.0145,    0.0000,         0,    0.0578,    0.0214},
449{    0.0096,    0.0012,    0.0680,    0.0550,    0.0724,    0.1119,    0.0663,    0.0578,         0,    0.0003},
450{    0.0086,    0.0003,    0.0342,    0.0521,    0.0618,    0.1556,    0.0356,    0.0214,    0.0003,         0},
451          },
452        new double[,]
453          {
454{    2.0000,    1.6749,    1.2884,    1.4086,    1.4481,    1.3558,    1.6576,    1.4857,    1.7530,    1.3818},
455{    1.6749,    2.0000,    1.2296,    1.3147,    1.5166,    1.5831,    1.5672,    1.1884,    1.6266,    1.8443},
456{    1.2884,    1.2296,    2.0000,    1.3383,    1.4280,    1.3533,    1.3417,    1.5791,    1.5769,    1.2005},
457{    1.4086,    1.3147,    1.3383,    2.0000,    1.5691,    1.7228,    1.2914,    1.3262,    1.2286,    1.2725},
458{    1.4481,    1.5166,    1.4280,    1.5691,    2.0000,    1.7466,    1.2457,    1.1805,    1.4515,    1.4286},
459{    1.3558,    1.5831,    1.3533,    1.7228,    1.7466,    2.0000,    1.3401,    1.1758,    1.3083,    1.6150},
460{    1.6576,    1.5672,    1.3417,    1.2914,    1.2457,    1.3401,    2.0000,    1.6740,    1.6662,    1.3186},
461{    1.4857,    1.1884,    1.5791,    1.3262,    1.1805,    1.1758,    1.6740,    2.0000,    1.5674,    1.0305},
462{    1.7530,    1.6266,    1.5769,    1.2286,    1.4515,    1.3083,    1.6662,    1.5674,    2.0000,    1.3985},
463{    1.3818,    1.8443,    1.2005,    1.2725,    1.4286,    1.6150,    1.3186,    1.0305,    1.3985,    2.0000},
464          },
465        new double[,]
466          {
467{         0,   -0.0124,   -0.0541,   -0.0386,   -0.0340,   -0.0452,   -0.0137,   -0.0298,   -0.0073,   -0.0419},
468{   -0.0124,         0,   -0.0623,   -0.0505,   -0.0265,   -0.0200,   -0.0215,   -0.0682,   -0.0162,   -0.0029},
469{   -0.0541,   -0.0623,         0,   -0.0474,   -0.0363,   -0.0455,   -0.0470,   -0.0204,   -0.0206,   -0.0664},
470{   -0.0386,   -0.0505,   -0.0474,         0,   -0.0213,   -0.0091,   -0.0537,   -0.0490,   -0.0624,   -0.0563},
471{   -0.0340,   -0.0265,   -0.0363,   -0.0213,         0,   -0.0077,   -0.0600,   -0.0693,   -0.0336,   -0.0362},
472{   -0.0452,   -0.0200,   -0.0455,   -0.0091,   -0.0077,         0,   -0.0472,   -0.0700,   -0.0514,   -0.0172},
473{   -0.0137,   -0.0215,   -0.0470,   -0.0537,   -0.0600,   -0.0472,         0,   -0.0125,   -0.0131,   -0.0500},
474{   -0.0298,   -0.0682,   -0.0204,   -0.0490,   -0.0693,   -0.0700,   -0.0125,         0,   -0.0215,   -0.0919},
475{   -0.0073,   -0.0162,   -0.0206,   -0.0624,   -0.0336,   -0.0514,   -0.0131,   -0.0215,         0,   -0.0399},
476{   -0.0419,   -0.0029,   -0.0664,   -0.0563,   -0.0362,   -0.0172,   -0.0500,   -0.0919,   -0.0399,         0},
477          },
478          }
479      );
480
481      TestCovarianceFunction(new CovarianceRationalQuadraticArd(), 1,
482       new double[,]
483          {
484{    6.8660,    6.8070,    7.2367,    6.8409,    7.1145,    6.7347,    6.9959,    7.1068,    6.9839,    7.1923},
485{    6.9324,    7.0474,    7.0559,    6.9038,    7.0827,    6.7961,    7.0038,    7.1944,    7.0644,    7.1739},
486{    7.1392,    7.1106,    7.2253,    7.0255,    6.8461,    7.1536,    7.2179,    6.9926,    7.1158,    7.2099},
487{    7.1429,    6.8249,    7.1453,    7.0658,    6.6525,    6.8816,    7.2752,    7.2623,    7.2467,    7.1995},
488{    7.2671,    6.8913,    7.1326,    7.2827,    6.5716,    6.6915,    7.1564,    7.3065,    7.2931,    7.2459},
489{    7.2567,    7.0886,    7.0466,    7.2086,    6.7069,    6.8897,    7.2522,    7.3388,    7.3405,    7.2471},
490{    6.9215,    7.1164,    7.0807,    6.8626,    7.2540,    6.8471,    6.9792,    6.9401,    6.9937,    7.1935},
491{    6.9185,    6.9428,    7.1836,    6.8210,    7.0584,    6.9346,    7.0369,    6.8105,    6.9354,    7.1496},
492{    6.9598,    7.0372,    7.2481,    6.9176,    7.1623,    6.8992,    7.0200,    7.0247,    7.0033,    7.2280},
493{    6.8692,    7.0646,    6.9424,    6.7937,    6.9495,    6.9165,    7.0254,    7.1813,    7.0242,    7.0668},
494          },
495       new double[][,]
496          {           
497        new double[,]
498          {
499{         0,    0.1304,    0.2130,    0.2577,    0.0051,    0.0048,    0.0061,    0.2187,    0.0023,    0.0863},
500{    0.1304,         0,    0.6491,    0.7284,    0.1836,    0.1841,    0.0788,    0.6386,    0.0979,    0.0037},
501{    0.2130,    0.6491,         0,    0.0016,    0.1576,    0.1566,    0.2918,    0.0000,    0.2709,    0.5549},
502{    0.2577,    0.7284,    0.0016,         0,    0.1959,    0.2014,    0.3334,    0.0018,    0.2955,    0.6260},
503{    0.0051,    0.1836,    0.1576,    0.1959,         0,    0.0000,    0.0210,    0.1476,    0.0138,    0.1340},
504{    0.0048,    0.1841,    0.1566,    0.2014,    0.0000,         0,    0.0210,    0.1485,    0.0131,    0.1368},
505{    0.0061,    0.0788,    0.2918,    0.3334,    0.0210,    0.0210,         0,    0.3051,    0.0010,    0.0467},
506{    0.2187,    0.6386,    0.0000,    0.0018,    0.1476,    0.1485,    0.3051,         0,    0.2679,    0.5250},
507{    0.0023,    0.0979,    0.2709,    0.2955,    0.0138,    0.0131,    0.0010,    0.2679,         0,    0.0615},
508{    0.0863,    0.0037,    0.5549,    0.6260,    0.1340,    0.1368,    0.0467,    0.5250,    0.0615,         0},
509          },
510        new double[,]
511          {
512{         0,    0.1472,    0.2623,    0.1312,    0.4360,    0.3853,    0.0252,    0.0290,    0.0410,    0.4783},
513{    0.1472,         0,    0.0195,    0.0002,    0.0811,    0.0633,    0.2900,    0.2833,    0.0330,    0.1071},
514{    0.2623,    0.0195,         0,    0.0240,    0.0196,    0.0110,    0.4485,    0.4860,    0.1059,    0.0293},
515{    0.1312,    0.0002,    0.0240,         0,    0.0898,    0.0718,    0.2620,    0.2779,    0.0262,    0.1067},
516{    0.4360,    0.0811,    0.0196,    0.0898,         0,    0.0012,    0.6403,    0.6512,    0.2138,    0.0013},
517{    0.3853,    0.0633,    0.0110,    0.0718,    0.0012,         0,    0.5997,    0.5978,    0.1783,    0.0050},
518{    0.0252,    0.2900,    0.4485,    0.2620,    0.6403,    0.5997,         0,    0.0002,    0.1297,    0.7083},
519{    0.0290,    0.2833,    0.4860,    0.2779,    0.6512,    0.5978,    0.0002,         0,    0.1379,    0.6776},
520{    0.0410,    0.0330,    0.1059,    0.0262,    0.2138,    0.1783,    0.1297,    0.1379,         0,    0.2455},
521{    0.4783,    0.1071,    0.0293,    0.1067,    0.0013,    0.0050,    0.7083,    0.6776,    0.2455,         0},
522          },
523        new double[,]
524          {
525{         0,    0.0135,    0.3109,    0.0446,    0.0343,    0.0040,    0.1652,    0.2317,    0.1661,    0.0430},
526{    0.0135,         0,    0.1954,    0.1037,    0.0908,    0.0323,    0.0832,    0.1265,    0.0831,    0.0094},
527{    0.3109,    0.1954,         0,    0.5932,    0.5627,    0.3898,    0.0271,    0.0076,    0.0287,    0.1215},
528{    0.0446,    0.1037,    0.5932,         0,    0.0007,    0.0229,    0.3633,    0.4676,    0.3566,    0.1709},
529{    0.0343,    0.0908,    0.5627,    0.0007,         0,    0.0155,    0.3289,    0.4180,    0.3412,    0.1546},
530{    0.0040,    0.0323,    0.3898,    0.0229,    0.0155,         0,    0.2106,    0.2787,    0.2080,    0.0761},
531{    0.1652,    0.0832,    0.0271,    0.3633,    0.3289,    0.2106,         0,    0.0066,    0.0000,    0.0357},
532{    0.2317,    0.1265,    0.0076,    0.4676,    0.4180,    0.2787,    0.0066,         0,    0.0067,    0.0665},
533{    0.1661,    0.0831,    0.0287,    0.3566,    0.3412,    0.2080,    0.0000,    0.0067,         0,    0.0358},
534{    0.0430,    0.0094,    0.1215,    0.1709,    0.1546,    0.0761,    0.0357,    0.0665,    0.0358,         0},
535          },
536        new double[,]
537          {
538{         0,    0.0606,    0.0353,    0.1187,    0.0182,    0.1211,    0.0307,    0.0058,    0.0530,    0.2000},
539{    0.0606,         0,    0.1794,    0.0105,    0.1438,    0.0121,    0.0050,    0.0958,    0.2245,    0.0456},
540{    0.0353,    0.1794,         0,    0.2821,    0.0031,    0.2886,    0.1294,    0.0135,    0.0012,    0.3901},
541{    0.1187,    0.0105,    0.2821,         0,    0.2356,    0.0000,    0.0291,    0.1737,    0.3117,    0.0105},
542{    0.0182,    0.1438,    0.0031,    0.2356,         0,    0.2466,    0.0907,    0.0033,    0.0081,    0.3409},
543{    0.1211,    0.0121,    0.2886,    0.0000,    0.2466,         0,    0.0313,    0.1720,    0.3233,    0.0100},
544{    0.0307,    0.0050,    0.1294,    0.0291,    0.0907,    0.0313,         0,    0.0638,    0.1634,    0.0752},
545{    0.0058,    0.0958,    0.0135,    0.1737,    0.0033,    0.1720,    0.0638,         0,    0.0227,    0.2501},
546{    0.0530,    0.2245,    0.0012,    0.3117,    0.0081,    0.3233,    0.1634,    0.0227,         0,    0.4517},
547{    0.2000,    0.0456,    0.3901,    0.0105,    0.3409,    0.0100,    0.0752,    0.2501,    0.4517,         0},
548          },
549        new double[,]
550          {
551{         0,    0.0228,    0.1771,    0.2255,    0.2172,    0.3559,    0.1705,    0.1644,    0.0122,    0.0167},
552{    0.0228,         0,    0.0745,    0.1050,    0.1020,    0.2099,    0.0679,    0.0620,    0.0017,    0.0004},
553{    0.1771,    0.0745,         0,    0.0024,    0.0015,    0.0299,    0.0004,    0.0005,    0.1042,    0.0840},
554{    0.2255,    0.1050,    0.0024,         0,    0.0001,    0.0163,    0.0048,    0.0051,    0.1299,    0.1160},
555{    0.2172,    0.1020,    0.0015,    0.0001,         0,    0.0192,    0.0034,    0.0036,    0.1283,    0.1125},
556{    0.3559,    0.2099,    0.0299,    0.0163,    0.0192,         0,    0.0374,    0.0368,    0.2374,    0.2284},
557{    0.1705,    0.0679,    0.0004,    0.0048,    0.0034,    0.0374,         0,    0.0000,    0.0921,    0.0746},
558{    0.1644,    0.0620,    0.0005,    0.0051,    0.0036,    0.0368,    0.0000,         0,    0.0895,    0.0680},
559{    0.0122,    0.0017,    0.1042,    0.1299,    0.1283,    0.2374,    0.0921,    0.0895,         0,    0.0005},
560{    0.0167,    0.0004,    0.0840,    0.1160,    0.1125,    0.2284,    0.0746,    0.0680,    0.0005,         0},
561          },
562        new double[,]
563          {
564{   14.7781,   14.3968,   13.7277,   13.9699,   14.0420,   13.8682,   14.3727,   14.1074,   14.5000,   13.9192},
565{   14.3968,   14.7781,   13.5943,   13.7839,   14.1589,   14.2640,   14.2397,   13.4942,   14.3286,   14.6106},
566{   13.7277,   13.5943,   14.7781,   13.8329,   14.0057,   13.8630,   13.8396,   14.2579,   14.2545,   13.5242},
567{   13.9699,   13.7839,   13.8329,   14.7781,   14.2426,   14.4610,   13.7342,   13.8078,   13.5920,   13.6926},
568{   14.0420,   14.1589,   14.0057,   14.2426,   14.7781,   14.4918,   13.6319,   13.4742,   14.0479,   14.0069},
569{   13.8682,   14.2640,   13.8630,   14.4610,   14.4918,   14.7781,   13.8365,   13.4625,   13.7703,   14.3117},
570{   14.3727,   14.2397,   13.8396,   13.7342,   13.6319,   13.8365,   14.7781,   14.3956,   14.3848,   13.7920},
571{   14.1074,   13.4942,   14.2579,   13.8078,   13.4742,   13.4625,   14.3956,   14.7781,   14.2399,   13.0490},
572{   14.5000,   14.3286,   14.2545,   13.5920,   14.0479,   13.7703,   14.3848,   14.2399,   14.7781,   13.9510},
573{   13.9192,   14.6106,   13.5242,   13.6926,   14.0069,   14.3117,   13.7920,   13.0490,   13.9510,   14.7781},
574          },
575        new double[,]
576          {
577{         0,   -0.0009,   -0.0068,   -0.0040,   -0.0034,   -0.0051,   -0.0010,   -0.0028,   -0.0005,   -0.0046},
578{   -0.0009,         0,   -0.0086,   -0.0061,   -0.0024,   -0.0016,   -0.0018,   -0.0101,   -0.0013,   -0.0002},
579{   -0.0068,   -0.0086,         0,   -0.0055,   -0.0037,   -0.0052,   -0.0054,   -0.0017,   -0.0017,   -0.0097},
580{   -0.0040,   -0.0061,   -0.0055,         0,   -0.0018,   -0.0006,   -0.0067,   -0.0058,   -0.0087,   -0.0073},
581{   -0.0034,   -0.0024,   -0.0037,   -0.0018,         0,   -0.0005,   -0.0081,   -0.0105,   -0.0033,   -0.0037},
582{   -0.0051,   -0.0016,   -0.0052,   -0.0006,   -0.0005,         0,   -0.0055,   -0.0106,   -0.0063,   -0.0013},
583{   -0.0010,   -0.0018,   -0.0054,   -0.0067,   -0.0081,   -0.0055,         0,   -0.0009,   -0.0010,   -0.0060},
584{   -0.0028,   -0.0101,   -0.0017,   -0.0058,   -0.0105,   -0.0106,   -0.0009,         0,   -0.0018,   -0.0183},
585{   -0.0005,   -0.0013,   -0.0017,   -0.0087,   -0.0033,   -0.0063,   -0.0010,   -0.0018,         0,   -0.0042},
586{   -0.0046,   -0.0002,   -0.0097,   -0.0073,   -0.0037,   -0.0013,   -0.0060,   -0.0183,   -0.0042,         0},
587          },
588          }
589     );
590    }
591
592
593    [TestMethod]
594    public void CovMaternIsoTest() {
595      var cov = new CovarianceMaternIso();
596      cov.DParameter.Value = cov.DParameter.ValidValues.Single(x => x.Value == 1);
597      TestCovarianceFunction(cov, 0,
598        new double[,]
599          {
600{    0.3504,    0.3297,    0.5736,    0.3413,    0.4721,    0.3071,    0.4052,    0.4670,    0.3995,    0.5310},
601{    0.3765,    0.4317,    0.4364,    0.3649,    0.4520,    0.3261,    0.4090,    0.5328,    0.4412,    0.5155},
602{    0.4891,    0.4695,    0.5618,    0.4200,    0.3432,    0.4996,    0.5545,    0.4036,    0.4729,    0.5468},
603{    0.4918,    0.3358,    0.4935,    0.4420,    0.2843,    0.3562,    0.6189,    0.6027,    0.5844,    0.5373},
604{    0.6085,    0.3600,    0.4844,    0.6291,    0.2643,    0.2947,    0.5017,    0.6650,    0.6440,    0.5835},
605{    0.5959,    0.4556,    0.4312,    0.5456,    0.2990,    0.3593,    0.5907,    0.7278,    0.7318,    0.5848},
606{    0.3720,    0.4733,    0.4507,    0.3492,    0.5928,    0.3435,    0.3972,    0.3798,    0.4041,    0.5320},
607{    0.3708,    0.3810,    0.5235,    0.3344,    0.4378,    0.3775,    0.4260,    0.3309,    0.3778,    0.4967},
608{    0.3884,    0.4261,    0.5860,    0.3704,    0.5063,    0.3631,    0.4172,    0.4196,    0.4088,    0.5645},
609{    0.3516,    0.4413,    0.3808,    0.3253,    0.3839,    0.3700,    0.4200,    0.5215,    0.4193,    0.4426},
610          },
611        new double[][,]
612          {
613            new double[,] {
614{         0,    0.3341,    0.3674,    0.3665,    0.3647,    0.3678,    0.3380,    0.3621,    0.3122,    0.3673},
615{    0.3341,         0,    0.3655,    0.3678,    0.3593,    0.3512,    0.3535,    0.3632,    0.3441,    0.2724},
616{    0.3674,    0.3655,         0,    0.3679,    0.3657,    0.3678,    0.3679,    0.3518,    0.3521,    0.3639},
617{    0.3665,    0.3678,    0.3679,         0,    0.3532,    0.3217,    0.3675,    0.3679,    0.3654,    0.3670},
618{    0.3647,    0.3593,    0.3657,    0.3532,         0,    0.3143,    0.3661,    0.3627,    0.3645,    0.3657},
619{    0.3678,    0.3512,    0.3678,    0.3217,    0.3143,         0,    0.3679,    0.3624,    0.3677,    0.3462},
620{    0.3380,    0.3535,    0.3679,    0.3675,    0.3661,    0.3679,         0,    0.3343,    0.3361,    0.3678},
621{    0.3621,    0.3632,    0.3518,    0.3679,    0.3627,    0.3624,    0.3343,         0,    0.3534,    0.3480},
622{    0.3122,    0.3441,    0.3521,    0.3654,    0.3645,    0.3677,    0.3361,    0.3534,         0,    0.3669},
623{    0.3673,    0.2724,    0.3639,    0.3670,    0.3657,    0.3462,    0.3678,    0.3480,    0.3669,         0},
624            },
625            new double[,] {
626{    2.0000,    1.0726,    0.6992,    0.7999,    0.8353,    0.7546,    1.0516,    0.8703,    1.1763,    0.7767},
627{    1.0726,    2.0000,    0.6529,    0.7205,    0.9001,    0.9680,    0.9512,    0.6215,    1.0157,    1.3261},
628{    0.6992,    0.6529,    2.0000,    0.7399,    0.8171,    0.7524,    0.7427,    0.9637,    0.9614,    0.6307},
629{    0.7999,    0.7205,    0.7399,    2.0000,    0.9532,    1.1341,    0.7016,    0.7298,    0.6522,    0.6865},
630{    0.8353,    0.9001,    0.8171,    0.9532,    2.0000,    1.1670,    0.6654,    0.6156,    0.8384,    0.8177},
631{    0.7546,    0.9680,    0.7524,    1.1341,    1.1670,    2.0000,    0.7414,    0.6121,    0.7152,    1.0027},
632{    1.0516,    0.9512,    0.7427,    0.7016,    0.6654,    0.7414,    2.0000,    1.0716,    1.0620,    0.7236},
633{    0.8703,    0.6215,    0.9637,    0.7298,    0.6156,    0.6121,    1.0716,    2.0000,    0.9514,    0.5073},
634{    1.1763,    1.0157,    0.9614,    0.6522,    0.8384,    0.7152,    1.0620,    0.9514,    2.0000,    0.7911},
635{    0.7767,    1.3261,    0.6307,    0.6865,    0.8177,    1.0027,    0.7236,    0.5073,    0.7911,    2.0000},
636          },
637          }
638      );
639
640      cov = new CovarianceMaternIso();
641      cov.DParameter.Value = cov.DParameter.ValidValues.Single(x => x.Value == 1);
642      TestCovarianceFunction(cov, 1,
643         new double[,]
644           {
645{    5.0240,    4.9127,    6.0225,    4.9757,    5.6062,    4.7858,    5.2996,    5.5839,    5.2720,    5.8539},
646{    5.1587,    5.4247,    5.4464,    5.0993,    5.5171,    4.8930,    5.3181,    5.8612,    5.4683,    5.7906},
647{    5.6795,    5.5947,    5.9766,    5.3703,    4.9856,    5.7244,    5.9479,    5.2920,    5.6098,    5.9177},
648{    5.6910,    4.9457,    5.6984,    5.4720,    4.6518,    5.0545,    6.1936,    6.1332,    6.0640,    5.8794},
649{    6.1550,    5.0740,    5.6595,    6.2308,    4.5290,    4.7142,    5.7333,    6.3593,    6.2847,    6.0607},
650{    6.1078,    5.5332,    5.4226,    5.9127,    4.7394,    5.0707,    6.0880,    6.5739,    6.5871,    6.0658},
651{    5.1358,    5.6116,    5.5116,    5.0174,    6.0960,    4.9875,    5.2612,    5.1753,    5.2945,    5.8581},
652{    5.1296,    5.1809,    5.8235,    4.9384,    5.4528,    5.1635,    5.3983,    4.9192,    5.1652,    5.7119},
653{    5.2179,    5.3989,    6.0701,    5.1278,    5.7524,    5.0900,    5.3568,    5.3681,    5.3171,    5.9874},
654{    5.0301,    5.4688,    5.1800,    4.8886,    5.1954,    5.1255,    5.3700,    5.8155,    5.3671,    5.4746},
655           },
656         new double[][,]
657          {
658            new double[,] {
659{         0,    1.3467,    1.9408,    1.7781,    1.7213,    1.8512,    1.3793,    1.6654,    1.1869,    1.8156},
660{    1.3467,         0,    2.0157,    1.9064,    1.6180,    1.5105,    1.5369,    2.0667,    1.4355,    0.9602},
661{    1.9408,    2.0157,         0,    1.8749,    1.7505,    1.8547,    1.8704,    1.5173,    1.5209,    2.0519},
662{    1.7781,    1.9064,    1.8749,         0,    1.5338,    1.2516,    1.9369,    1.8912,    2.0170,    1.9613},
663{    1.7213,    1.6180,    1.7505,    1.5338,         0,    1.2011,    1.9955,    2.0764,    1.7164,    1.7495},
664{    1.8512,    1.5105,    1.8547,    1.2516,    1.2011,         0,    1.8725,    2.0820,    1.9149,    1.4559},
665{    1.3793,    1.5369,    1.8704,    1.9369,    1.9955,    1.8725,         0,    1.3483,    1.3632,    1.9013},
666{    1.6654,    2.0667,    1.5173,    1.8912,    2.0764,    2.0820,    1.3483,         0,    1.5366,    2.2512},
667{    1.1869,    1.4355,    1.5209,    2.0170,    1.7164,    1.9149,    1.3632,    1.5366,         0,    1.7923},
668{    1.8156,    0.9602,    2.0519,    1.9613,    1.7495,    1.4559,    1.9013,    2.2512,    1.7923,         0},
669            },
670            new double[,] {
671{   14.7781,   11.7510,   10.0394,   10.5489,   10.7184,   10.3248,   11.6660,   10.8814,   12.1567,   10.4351},
672{   11.7510,   14.7781,    9.7898,   10.1506,   11.0167,   11.3155,   11.2432,    9.6139,   11.5176,   12.7049},
673{   10.0394,    9.7898,   14.7781,   10.2506,   10.6319,   10.3138,   10.2646,   11.2970,   11.2870,    9.6657},
674{   10.5489,   10.1506,   10.2506,   14.7781,   11.2517,   11.9945,   10.0521,   10.1990,    9.7856,    9.9719},
675{   10.7184,   11.0167,   10.6319,   11.2517,   14.7781,   12.1214,    9.8583,    9.5798,   10.7329,   10.6348},
676{   10.3248,   11.3155,   10.3138,   11.9945,   12.1214,   14.7781,   10.2581,    9.5600,   10.1233,   11.4631},
677{   11.6660,   11.2432,   10.2646,   10.0521,    9.8583,   10.2581,   14.7781,   11.7468,   11.7082,   10.1669},
678{   10.8814,    9.6139,   11.2970,   10.1990,    9.5798,    9.5600,   11.7468,   14.7781,   11.2438,    8.9219},
679{   12.1567,   11.5176,   11.2870,    9.7856,   10.7329,   10.1233,   11.7082,   11.2438,   14.7781,   10.5061},
680{   10.4351,   12.7049,    9.6657,    9.9719,   10.6348,   11.4631,   10.1669,    8.9219,   10.5061,   14.7781},
681            },
682          }
683       );
684
685      cov = new CovarianceMaternIso();
686      cov.DParameter.Value = cov.DParameter.ValidValues.Single(x => x.Value == 5);
687      TestCovarianceFunction(cov, 0,
688         new double[,]
689           {
690{    0.4963,    0.4629,    0.7958,    0.4817,    0.6753,    0.4255,    0.5810,    0.6685,    0.5725,    0.7486},
691{    0.5375,    0.6197,    0.6264,    0.5193,    0.6481,    0.4570,    0.5867,    0.7507,    0.6331,    0.7303},
692{    0.6974,    0.6718,    0.7832,    0.6029,    0.4847,    0.7108,    0.7752,    0.5786,    0.6764,    0.7668},
693{    0.7008,    0.4727,    0.7030,    0.6342,    0.3873,    0.5056,    0.8402,    0.8250,    0.8069,    0.7559},
694{    0.8305,    0.5116,    0.6914,    0.8494,    0.3535,    0.4049,    0.7134,    0.8794,    0.8623,    0.8060},
695{    0.8184,    0.6530,    0.6190,    0.7654,    0.4121,    0.5105,    0.8132,    0.9232,    0.9256,    0.8074},
696{    0.5305,    0.6769,    0.6464,    0.4943,    0.8153,    0.4853,    0.5691,    0.5426,    0.5794,    0.7499},
697{    0.5286,    0.5443,    0.7399,    0.4706,    0.6283,    0.5390,    0.6115,    0.4648,    0.5395,    0.7071},
698{    0.5557,    0.6117,    0.8085,    0.5280,    0.7191,    0.5164,    0.5987,    0.6022,    0.5864,    0.7862},
699{    0.4982,    0.6333,    0.5441,    0.4557,    0.5488,    0.5273,    0.6028,    0.7375,    0.6019,    0.6350},
700           },
701         new double[][,]
702          {
703            new double[,] {
704{         0,    0.3844,    0.5881,    0.5499,    0.5324,    0.5694,    0.3987,    0.5135,    0.3134,    0.5603},
705{    0.3844,         0,    0.5987,    0.5817,    0.4964,    0.4543,    0.4650,    0.6029,    0.4230,    0.2154},
706{    0.5881,    0.5987,         0,    0.5749,    0.5416,    0.5703,    0.5739,    0.4571,    0.4586,    0.6019},
707{    0.5499,    0.5817,    0.5749,         0,    0.4638,    0.3422,    0.5874,    0.5785,    0.5988,    0.5915},
708{    0.5324,    0.4964,    0.5416,    0.4638,         0,    0.3197,    0.5963,    0.6034,    0.5308,    0.5413},
709{    0.5694,    0.4543,    0.5703,    0.3422,    0.3197,         0,    0.5744,    0.6036,    0.5833,    0.4316},
710{    0.3987,    0.4650,    0.5739,    0.5874,    0.5963,    0.5744,         0,    0.3852,    0.3917,    0.5806},
711{    0.5135,    0.6029,    0.4571,    0.5785,    0.6034,    0.6036,    0.3852,         0,    0.4649,    0.5937},
712{    0.3134,    0.4230,    0.4586,    0.5988,    0.5308,    0.5833,    0.3917,    0.4649,         0,    0.5539},
713{    0.5603,    0.2154,    0.6019,    0.5915,    0.5413,    0.4316,    0.5806,    0.5937,    0.5539,         0},
714            },
715            new double[,] {
716{    2.0000,    1.5097,    0.9901,    1.1464,    1.1989,    1.0773,    1.4852,    1.2492,    1.6213,    1.1113},
717{    1.5097,    2.0000,    0.9152,    1.0239,    1.2908,    1.3817,    1.3599,    0.8633,    1.4419,    1.7557},
718{    0.9901,    0.9152,    2.0000,    1.0545,    1.1721,    1.0739,    1.0588,    1.3761,    1.3731,    0.8785},
719{    1.1464,    1.0239,    1.0545,    2.0000,    1.3625,    1.5777,    0.9939,    1.0387,    0.9139,    0.9697},
720{    1.1989,    1.2908,    1.1721,    1.3625,    2.0000,    1.6120,    0.9356,    0.8534,    1.2033,    1.1730},
721{    1.0773,    1.3817,    1.0739,    1.5777,    1.6120,    2.0000,    1.0568,    0.8477,    1.0156,    1.4258},
722{    1.4852,    1.3599,    1.0588,    0.9939,    0.9356,    1.0568,    2.0000,    1.5084,    1.4974,    1.0289},
723{    1.2492,    0.8633,    1.3761,    1.0387,    0.8534,    0.8477,    1.5084,    2.0000,    1.3601,    0.6706},
724{    1.6213,    1.4419,    1.3731,    0.9139,    1.2033,    1.0156,    1.4974,    1.3601,    2.0000,    1.1332},
725{    1.1113,    1.7557,    0.8785,    0.9697,    1.1730,    1.4258,    1.0289,    0.6706,    1.1332,    2.0000},
726            },
727          }
728       );
729
730      cov = new CovarianceMaternIso();
731      cov.DParameter.Value = cov.DParameter.ValidValues.Single(x => x.Value == 5);
732      TestCovarianceFunction(cov, 1,
733         new double[,]
734           {
735{    6.5823,    6.4972,    7.1422,    6.5459,    6.9521,    6.3944,    6.7729,    6.9402,    6.7551,    7.0723},
736{    6.6790,    6.8501,    6.8629,    6.6372,    6.9035,    6.4817,    6.7847,    7.0756,    6.8757,    7.0436},
737{    6.9899,    6.9460,    7.1241,    6.8172,    6.5535,    7.0122,    7.1124,    6.7680,    6.9540,    7.0999},
738{    6.9957,    6.5229,    6.9993,    6.8778,    6.2792,    6.6048,    7.2033,    7.1828,    7.1579,    7.0835},
739{    7.1904,    6.6190,    6.9797,    7.2154,    6.1675,    6.3337,    7.0164,    7.2536,    7.2321,    7.1567},
740{    7.1739,    6.9125,    6.8488,    7.0978,    6.3553,    6.6166,    7.1667,    7.3062,    7.3089,    7.1586},
741{    6.6630,    6.9549,    6.9004,    6.5773,    7.1696,    6.5549,    6.7481,    6.6904,    6.7696,    7.0742},
742{    6.6587,    6.6943,    7.0587,    6.5173,    6.8667,    6.6823,    6.8343,    6.5023,    6.6835,    7.0060},
743{    6.7194,    6.8347,    7.1602,    6.6574,    7.0257,    6.6305,    6.8089,    6.8159,    6.7840,    7.1284},
744{    6.5868,    6.8760,    6.6937,    6.4782,    6.7042,    6.6558,    6.8171,    7.0551,    6.8153,    6.8793},
745           },
746         new double[][,]
747          {
748            new double[,] {
749{         0,    0.5862,    1.4459,    1.1551,    1.0644,    1.2798,    0.6204,    0.9803,    0.4359,    1.2178},
750{    0.5862,         0,    1.5974,    1.3802,    0.9128,    0.7716,    0.8048,    1.7072,    0.6825,    0.2685},
751{    1.4459,    1.5974,         0,    1.3222,    1.1103,    1.2860,    1.3141,    0.7801,    0.7846,    1.6746},
752{    1.1551,    1.3802,    1.3222,         0,    0.8009,    0.4933,    1.4383,    1.3520,    1.5999,    1.4863},
753{    1.0644,    0.9128,    1.1103,    0.8009,         0,    0.4481,    1.5552,    1.7288,    1.0568,    1.1088},
754{    1.2798,    0.7716,    1.2860,    0.4933,    0.4481,         0,    1.3179,    1.7414,    1.3962,    0.7060},
755{    0.6204,    0.8048,    1.3141,    1.4383,    1.5552,    1.3179,         0,    0.5878,    0.6033,    1.3707},
756{    0.9803,    1.7072,    0.7801,    1.3520,    1.7288,    1.7414,    0.5878,         0,    0.8045,    2.1597},
757{    0.4359,    0.6825,    0.7846,    1.5999,    1.0568,    1.3962,    0.6033,    0.8045,         0,    1.1785},
758{    1.2178,    0.2685,    1.6746,    1.4863,    1.1088,    0.7060,    1.3707,    2.1597,    1.1785,         0},
759            },
760            new double[,] {
761{   14.7781,   14.1637,   13.1581,   13.5134,   13.6208,   13.3631,   14.1260,   13.7191,   14.3263,   13.4382},
762{   14.1637,   14.7781,   12.9663,   13.2398,   13.7972,   13.9577,   13.9203,   12.8239,   14.0574,   14.5034},
763{   13.1581,   12.9663,   14.7781,   13.3113,   13.5666,   13.3555,   13.3212,   13.9482,   13.9431,   12.8665},
764{   13.5134,   13.2398,   13.3113,   14.7781,   13.9248,   14.2646,   13.1676,   13.2747,   12.9630,   13.1074},
765{   13.6208,   13.7972,   13.5666,   13.9248,   14.7781,   14.3133,   13.0201,   12.7957,   13.6298,   13.5685},
766{   13.3631,   13.9577,   13.3555,   14.2646,   14.3133,   14.7781,   13.3166,   12.7791,   13.2200,   14.0312},
767{   14.1260,   13.9203,   13.3212,   13.1676,   13.0201,   13.3166,   14.7781,   14.1618,   14.1449,   13.2516},
768{   13.7191,   12.8239,   13.9482,   13.2747,   12.7957,   12.7791,   14.1618,   14.7781,   13.9207,   12.2062},
769{   14.3263,   14.0574,   13.9431,   12.9630,   13.6298,   13.2200,   14.1449,   13.9207,   14.7781,   13.4853},
770{   13.4382,   14.5034,   12.8665,   13.1074,   13.5685,   14.0312,   13.2516,   12.2062,   13.4853,   14.7781},
771            },
772          }
773       );
774
775    }
776
777
778    [TestMethod]
779    public void CovLinearTest() {
780      TestCovarianceFunction(new CovarianceLinear(), 0,
781        new double[,]
782          {
783{    0.9089,    0.9972,    1.8813,    0.8618,    2.0021,    1.5168,    1.2612,    1.1009,    0.9505,    1.3851},
784{    0.4654,    0.7436,    1.1758,    0.4150,    1.4523,    1.0699,    0.7535,    0.6763,    0.5205,    0.8497},
785{    1.3720,    1.4959,    2.0386,    1.2323,    1.8810,    2.1422,    1.6645,    1.1482,    1.2602,    1.5724},
786{    0.8471,    0.6576,    1.4266,    0.7465,    1.1331,    1.3214,    1.1946,    0.9028,    0.8676,    1.0329},
787{    0.7965,    0.5520,    1.2342,    0.7932,    0.8598,    0.9288,    0.8927,    0.7687,    0.7359,    0.9016},
788{    0.5306,    0.5096,    0.8879,    0.4618,    0.7612,    0.8960,    0.7367,    0.5462,    0.5287,    0.6475},
789{    0.8779,    1.2411,    1.6264,    0.7940,    2.0552,    1.5512,    1.1513,    0.8304,    0.8692,    1.2945},
790{    1.4220,    1.6026,    2.2818,    1.2951,    2.3982,    2.1948,    1.7607,    1.2346,    1.3533,    1.7961},
791{    1.0930,    1.3304,    1.9745,    1.0278,    2.1338,    1.7821,    1.3686,    1.0951,    1.0529,    1.5035},
792{    0.3406,    0.7064,    0.9980,    0.2373,    1.2538,    1.1479,    0.7212,    0.6072,    0.4222,    0.6815},
793          },
794        new double[][,]
795          {           
796          }
797      );
798    }
799
800    [TestMethod]
801    public void CovLinearArdTest() {
802      TestCovarianceFunction(new CovarianceLinearArd(), 0,
803        new double[,]
804          {
805{    0.9089,    0.9972,    1.8813,    0.8618,    2.0022,    1.5168,    1.2612,    1.1009,    0.9506,    1.3851},
806{    0.4654,    0.7437,    1.1757,    0.4150,    1.4523,    1.0699,    0.7535,    0.6763,    0.5206,    0.8497},
807{    1.3719,    1.4959,    2.0386,    1.2323,    1.8810,    2.1422,    1.6645,    1.1482,    1.2603,    1.5724},
808{    0.8471,    0.6576,    1.4267,    0.7465,    1.1331,    1.3215,    1.1946,    0.9029,    0.8677,    1.0329},
809{    0.7965,    0.5520,    1.2342,    0.7932,    0.8598,    0.9288,    0.8927,    0.7688,    0.7360,    0.9016},
810{    0.5306,    0.5096,    0.8879,    0.4618,    0.7612,    0.8960,    0.7367,    0.5462,    0.5288,    0.6475},
811{    0.8779,    1.2411,    1.6264,    0.7940,    2.0553,    1.5512,    1.1513,    0.8304,    0.8693,    1.2945},
812{    1.4220,    1.6025,    2.2818,    1.2950,    2.3982,    2.1948,    1.7607,    1.2347,    1.3535,    1.7961},
813{    1.0929,    1.3303,    1.9743,    1.0277,    2.1337,    1.7820,    1.3686,    1.0950,    1.0529,    1.5034},
814{    0.3405,    0.7064,    0.9979,    0.2372,    1.2538,    1.1478,    0.7212,    0.6071,    0.4222,    0.6815},
815          },
816        new double[][,]
817          {           
818        new double[,]
819          {
820{   -0.3483,   -0.0415,   -0.7534,   -0.7885,   -0.4097,   -0.4084,   -0.2818,   -0.7512,   -0.3081,   -0.0928},
821{   -0.0415,   -0.0049,   -0.0897,   -0.0939,   -0.0488,   -0.0486,   -0.0336,   -0.0895,   -0.0367,   -0.0111},
822{   -0.7534,   -0.0897,   -1.6297,   -1.7057,   -0.8863,   -0.8834,   -0.6097,   -1.6250,   -0.6666,   -0.2008},
823{   -0.7885,   -0.0939,   -1.7057,   -1.7853,   -0.9276,   -0.9246,   -0.6381,   -1.7008,   -0.6976,   -0.2101},
824{   -0.4097,   -0.0488,   -0.8863,   -0.9276,   -0.4820,   -0.4804,   -0.3316,   -0.8837,   -0.3625,   -0.1092},
825{   -0.4084,   -0.0486,   -0.8834,   -0.9246,   -0.4804,   -0.4788,   -0.3305,   -0.8808,   -0.3613,   -0.1088},
826{   -0.2818,   -0.0336,   -0.6097,   -0.6381,   -0.3316,   -0.3305,   -0.2281,   -0.6079,   -0.2494,   -0.0751},
827{   -0.7512,   -0.0895,   -1.6250,   -1.7008,   -0.8837,   -0.8808,   -0.6079,   -1.6204,   -0.6646,   -0.2002},
828{   -0.3081,   -0.0367,   -0.6666,   -0.6976,   -0.3625,   -0.3613,   -0.2494,   -0.6646,   -0.2726,   -0.0821},
829{   -0.0928,   -0.0111,   -0.2008,   -0.2101,   -0.1092,   -0.1088,   -0.0751,   -0.2002,   -0.0821,   -0.0247},
830          },
831        new double[,]
832          {
833{   -1.2177,   -0.6082,   -0.3772,   -0.6303,   -0.1506,   -0.2060,   -1.4702,   -1.4921,   -0.8977,   -0.0933},
834{   -0.6082,   -0.3037,   -0.1884,   -0.3148,   -0.0752,   -0.1029,   -0.7343,   -0.7452,   -0.4483,   -0.0466},
835{   -0.3772,   -0.1884,   -0.1168,   -0.1952,   -0.0466,   -0.0638,   -0.4554,   -0.4622,   -0.2781,   -0.0289},
836{   -0.6303,   -0.3148,   -0.1952,   -0.3263,   -0.0780,   -0.1066,   -0.7610,   -0.7723,   -0.4646,   -0.0483},
837{   -0.1506,   -0.0752,   -0.0466,   -0.0780,   -0.0186,   -0.0255,   -0.1818,   -0.1845,   -0.1110,   -0.0115},
838{   -0.2060,   -0.1029,   -0.0638,   -0.1066,   -0.0255,   -0.0348,   -0.2487,   -0.2524,   -0.1519,   -0.0158},
839{   -1.4702,   -0.7343,   -0.4554,   -0.7610,   -0.1818,   -0.2487,   -1.7751,   -1.8015,   -1.0838,   -0.1127},
840{   -1.4921,   -0.7452,   -0.4622,   -0.7723,   -0.1845,   -0.2524,   -1.8015,   -1.8283,   -1.0999,   -0.1143},
841{   -0.8977,   -0.4483,   -0.2781,   -0.4646,   -0.1110,   -0.1519,   -1.0838,   -1.0999,   -0.6617,   -0.0688},
842{   -0.0933,   -0.0466,   -0.0289,   -0.0483,   -0.0115,   -0.0158,   -0.1127,   -0.1143,   -0.0688,   -0.0072},
843          },
844        new double[,]
845          {
846{   -0.1103,   -0.1659,   -0.3856,   -0.0072,   -0.0202,   -0.0794,   -0.3048,   -0.3436,   -0.3042,   -0.2117},
847{   -0.1659,   -0.2495,   -0.5801,   -0.0109,   -0.0304,   -0.1194,   -0.4585,   -0.5169,   -0.4575,   -0.3185},
848{   -0.3856,   -0.5801,   -1.3487,   -0.0253,   -0.0706,   -0.2776,   -1.0661,   -1.2017,   -1.0638,   -0.7406},
849{   -0.0072,   -0.0109,   -0.0253,   -0.0005,   -0.0013,   -0.0052,   -0.0200,   -0.0225,   -0.0199,   -0.0139},
850{   -0.0202,   -0.0304,   -0.0706,   -0.0013,   -0.0037,   -0.0145,   -0.0558,   -0.0629,   -0.0557,   -0.0388},
851{   -0.0794,   -0.1194,   -0.2776,   -0.0052,   -0.0145,   -0.0571,   -0.2194,   -0.2473,   -0.2189,   -0.1524},
852{   -0.3048,   -0.4585,   -1.0661,   -0.0200,   -0.0558,   -0.2194,   -0.8427,   -0.9499,   -0.8408,   -0.5854},
853{   -0.3436,   -0.5169,   -1.2017,   -0.0225,   -0.0629,   -0.2473,   -0.9499,   -1.0708,   -0.9478,   -0.6598},
854{   -0.3042,   -0.4575,   -1.0638,   -0.0199,   -0.0557,   -0.2189,   -0.8408,   -0.9478,   -0.8390,   -0.5841},
855{   -0.2117,   -0.3185,   -0.7406,   -0.0139,   -0.0388,   -0.1524,   -0.5854,   -0.6598,   -0.5841,   -0.4066},
856          },
857        new double[,]
858          {
859{   -0.5984,   -0.3242,   -0.8147,   -0.2068,   -0.7514,   -0.2007,   -0.4031,   -0.6844,   -0.8535,   -0.0887},
860{   -0.3242,   -0.1756,   -0.4413,   -0.1120,   -0.4070,   -0.1087,   -0.2184,   -0.3707,   -0.4623,   -0.0481},
861{   -0.8147,   -0.4413,   -1.1092,   -0.2815,   -1.0229,   -0.2733,   -0.5488,   -0.9318,   -1.1620,   -0.1208},
862{   -0.2068,   -0.1120,   -0.2815,   -0.0714,   -0.2596,   -0.0694,   -0.1393,   -0.2365,   -0.2949,   -0.0307},
863{   -0.7514,   -0.4070,   -1.0229,   -0.2596,   -0.9434,   -0.2521,   -0.5062,   -0.8593,   -1.0717,   -0.1114},
864{   -0.2007,   -0.1087,   -0.2733,   -0.0694,   -0.2521,   -0.0673,   -0.1352,   -0.2296,   -0.2863,   -0.0298},
865{   -0.4031,   -0.2184,   -0.5488,   -0.1393,   -0.5062,   -0.1352,   -0.2716,   -0.4611,   -0.5750,   -0.0598},
866{   -0.6844,   -0.3707,   -0.9318,   -0.2365,   -0.8593,   -0.2296,   -0.4611,   -0.7828,   -0.9762,   -0.1015},
867{   -0.8535,   -0.4623,   -1.1620,   -0.2949,   -1.0717,   -0.2863,   -0.5750,   -0.9762,   -1.2174,   -0.1265},
868{   -0.0887,   -0.0481,   -0.1208,   -0.0307,   -0.1114,   -0.0298,   -0.0598,   -0.1015,   -0.1265,   -0.0132},
869          },
870        new double[,]
871          {
872{   -1.7276,   -1.4419,   -0.9049,   -0.8103,   -0.8305,   -0.5694,   -0.9452,   -0.9495,   -1.5198,   -1.4774},
873{   -1.4419,   -1.2034,   -0.7552,   -0.6763,   -0.6932,   -0.4752,   -0.7889,   -0.7925,   -1.2684,   -1.2331},
874{   -0.9049,   -0.7552,   -0.4739,   -0.4244,   -0.4350,   -0.2982,   -0.4951,   -0.4973,   -0.7960,   -0.7738},
875{   -0.8103,   -0.6763,   -0.4244,   -0.3800,   -0.3895,   -0.2670,   -0.4433,   -0.4453,   -0.7128,   -0.6929},
876{   -0.8305,   -0.6932,   -0.4350,   -0.3895,   -0.3993,   -0.2737,   -0.4544,   -0.4565,   -0.7306,   -0.7102},
877{   -0.5694,   -0.4752,   -0.2982,   -0.2670,   -0.2737,   -0.1876,   -0.3115,   -0.3129,   -0.5009,   -0.4869},
878{   -0.9452,   -0.7889,   -0.4951,   -0.4433,   -0.4544,   -0.3115,   -0.5171,   -0.5195,   -0.8315,   -0.8083},
879{   -0.9495,   -0.7925,   -0.4973,   -0.4453,   -0.4565,   -0.3129,   -0.5195,   -0.5218,   -0.8353,   -0.8120},
880{   -1.5198,   -1.2684,   -0.7960,   -0.7128,   -0.7306,   -0.5009,   -0.8315,   -0.8353,   -1.3369,   -1.2997},
881{   -1.4774,   -1.2331,   -0.7738,   -0.6929,   -0.7102,   -0.4869,   -0.8083,   -0.8120,   -1.2997,   -1.2634},
882          },
883          }
884      );
885
886      TestCovarianceFunction(new CovarianceLinearArd(), 1,
887       new double[,]
888          {
889{    0.1230,    0.1350,    0.2546,    0.1166,    0.2710,    0.2053,    0.1707,    0.1490,    0.1287,    0.1875},
890{    0.0630,    0.1006,    0.1591,    0.0562,    0.1965,    0.1448,    0.1020,    0.0915,    0.0705,    0.1150},
891{    0.1857,    0.2024,    0.2759,    0.1668,    0.2546,    0.2899,    0.2253,    0.1554,    0.1706,    0.2128},
892{    0.1146,    0.0890,    0.1931,    0.1010,    0.1533,    0.1788,    0.1617,    0.1222,    0.1174,    0.1398},
893{    0.1078,    0.0747,    0.1670,    0.1074,    0.1164,    0.1257,    0.1208,    0.1040,    0.0996,    0.1220},
894{    0.0718,    0.0690,    0.1202,    0.0625,    0.1030,    0.1213,    0.0997,    0.0739,    0.0716,    0.0876},
895{    0.1188,    0.1680,    0.2201,    0.1075,    0.2781,    0.2099,    0.1558,    0.1124,    0.1176,    0.1752},
896{    0.1924,    0.2169,    0.3088,    0.1753,    0.3246,    0.2970,    0.2383,    0.1671,    0.1832,    0.2431},
897{    0.1479,    0.1800,    0.2672,    0.1391,    0.2888,    0.2412,    0.1852,    0.1482,    0.1425,    0.2035},
898{    0.0461,    0.0956,    0.1351,    0.0321,    0.1697,    0.1553,    0.0976,    0.0822,    0.0571,    0.0922},
899          },
900       new double[][,]
901          {           
902        new double[,]
903          {
904{   -0.0471,   -0.0056,   -0.1020,   -0.1067,   -0.0554,   -0.0553,   -0.0381,   -0.1017,   -0.0417,   -0.0126},
905{   -0.0056,   -0.0007,   -0.0121,   -0.0127,   -0.0066,   -0.0066,   -0.0045,   -0.0121,   -0.0050,   -0.0015},
906{   -0.1020,   -0.0121,   -0.2206,   -0.2308,   -0.1199,   -0.1196,   -0.0825,   -0.2199,   -0.0902,   -0.0272},
907{   -0.1067,   -0.0127,   -0.2308,   -0.2416,   -0.1255,   -0.1251,   -0.0864,   -0.2302,   -0.0944,   -0.0284},
908{   -0.0554,   -0.0066,   -0.1199,   -0.1255,   -0.0652,   -0.0650,   -0.0449,   -0.1196,   -0.0491,   -0.0148},
909{   -0.0553,   -0.0066,   -0.1196,   -0.1251,   -0.0650,   -0.0648,   -0.0447,   -0.1192,   -0.0489,   -0.0147},
910{   -0.0381,   -0.0045,   -0.0825,   -0.0864,   -0.0449,   -0.0447,   -0.0309,   -0.0823,   -0.0337,   -0.0102},
911{   -0.1017,   -0.0121,   -0.2199,   -0.2302,   -0.1196,   -0.1192,   -0.0823,   -0.2193,   -0.0899,   -0.0271},
912{   -0.0417,   -0.0050,   -0.0902,   -0.0944,   -0.0491,   -0.0489,   -0.0337,   -0.0899,   -0.0369,   -0.0111},
913{   -0.0126,   -0.0015,   -0.0272,   -0.0284,   -0.0148,   -0.0147,   -0.0102,   -0.0271,   -0.0111,   -0.0033},
914          },
915        new double[,]
916          {
917{   -0.1648,   -0.0823,   -0.0510,   -0.0853,   -0.0204,   -0.0279,   -0.1990,   -0.2019,   -0.1215,   -0.0126},
918{   -0.0823,   -0.0411,   -0.0255,   -0.0426,   -0.0102,   -0.0139,   -0.0994,   -0.1008,   -0.0607,   -0.0063},
919{   -0.0510,   -0.0255,   -0.0158,   -0.0264,   -0.0063,   -0.0086,   -0.0616,   -0.0625,   -0.0376,   -0.0039},
920{   -0.0853,   -0.0426,   -0.0264,   -0.0442,   -0.0105,   -0.0144,   -0.1030,   -0.1045,   -0.0629,   -0.0065},
921{   -0.0204,   -0.0102,   -0.0063,   -0.0105,   -0.0025,   -0.0034,   -0.0246,   -0.0250,   -0.0150,   -0.0016},
922{   -0.0279,   -0.0139,   -0.0086,   -0.0144,   -0.0034,   -0.0047,   -0.0337,   -0.0342,   -0.0206,   -0.0021},
923{   -0.1990,   -0.0994,   -0.0616,   -0.1030,   -0.0246,   -0.0337,   -0.2402,   -0.2438,   -0.1467,   -0.0152},
924{   -0.2019,   -0.1008,   -0.0625,   -0.1045,   -0.0250,   -0.0342,   -0.2438,   -0.2474,   -0.1489,   -0.0155},
925{   -0.1215,   -0.0607,   -0.0376,   -0.0629,   -0.0150,   -0.0206,   -0.1467,   -0.1489,   -0.0896,   -0.0093},
926{   -0.0126,   -0.0063,   -0.0039,   -0.0065,   -0.0016,   -0.0021,   -0.0152,   -0.0155,   -0.0093,   -0.0010},
927          },
928        new double[,]
929          {
930{   -0.0149,   -0.0224,   -0.0522,   -0.0010,   -0.0027,   -0.0107,   -0.0413,   -0.0465,   -0.0412,   -0.0287},
931{   -0.0224,   -0.0338,   -0.0785,   -0.0015,   -0.0041,   -0.0162,   -0.0621,   -0.0700,   -0.0619,   -0.0431},
932{   -0.0522,   -0.0785,   -0.1825,   -0.0034,   -0.0096,   -0.0376,   -0.1443,   -0.1626,   -0.1440,   -0.1002},
933{   -0.0010,   -0.0015,   -0.0034,   -0.0001,   -0.0002,   -0.0007,   -0.0027,   -0.0030,   -0.0027,   -0.0019},
934{   -0.0027,   -0.0041,   -0.0096,   -0.0002,   -0.0005,   -0.0020,   -0.0076,   -0.0085,   -0.0075,   -0.0052},
935{   -0.0107,   -0.0162,   -0.0376,   -0.0007,   -0.0020,   -0.0077,   -0.0297,   -0.0335,   -0.0296,   -0.0206},
936{   -0.0413,   -0.0621,   -0.1443,   -0.0027,   -0.0076,   -0.0297,   -0.1140,   -0.1286,   -0.1138,   -0.0792},
937{   -0.0465,   -0.0700,   -0.1626,   -0.0030,   -0.0085,   -0.0335,   -0.1286,   -0.1449,   -0.1283,   -0.0893},
938{   -0.0412,   -0.0619,   -0.1440,   -0.0027,   -0.0075,   -0.0296,   -0.1138,   -0.1283,   -0.1136,   -0.0790},
939{   -0.0287,   -0.0431,   -0.1002,   -0.0019,   -0.0052,   -0.0206,   -0.0792,   -0.0893,   -0.0790,   -0.0550},
940          },
941        new double[,]
942          {
943{   -0.0810,   -0.0439,   -0.1103,   -0.0280,   -0.1017,   -0.0272,   -0.0546,   -0.0926,   -0.1155,   -0.0120},
944{   -0.0439,   -0.0238,   -0.0597,   -0.0152,   -0.0551,   -0.0147,   -0.0296,   -0.0502,   -0.0626,   -0.0065},
945{   -0.1103,   -0.0597,   -0.1501,   -0.0381,   -0.1384,   -0.0370,   -0.0743,   -0.1261,   -0.1573,   -0.0163},
946{   -0.0280,   -0.0152,   -0.0381,   -0.0097,   -0.0351,   -0.0094,   -0.0189,   -0.0320,   -0.0399,   -0.0041},
947{   -0.1017,   -0.0551,   -0.1384,   -0.0351,   -0.1277,   -0.0341,   -0.0685,   -0.1163,   -0.1450,   -0.0151},
948{   -0.0272,   -0.0147,   -0.0370,   -0.0094,   -0.0341,   -0.0091,   -0.0183,   -0.0311,   -0.0388,   -0.0040},
949{   -0.0546,   -0.0296,   -0.0743,   -0.0189,   -0.0685,   -0.0183,   -0.0368,   -0.0624,   -0.0778,   -0.0081},
950{   -0.0926,   -0.0502,   -0.1261,   -0.0320,   -0.1163,   -0.0311,   -0.0624,   -0.1059,   -0.1321,   -0.0137},
951{   -0.1155,   -0.0626,   -0.1573,   -0.0399,   -0.1450,   -0.0388,   -0.0778,   -0.1321,   -0.1648,   -0.0171},
952{   -0.0120,   -0.0065,   -0.0163,   -0.0041,   -0.0151,   -0.0040,   -0.0081,   -0.0137,   -0.0171,   -0.0018},
953          },
954        new double[,]
955          {
956{   -0.2338,   -0.1951,   -0.1225,   -0.1097,   -0.1124,   -0.0771,   -0.1279,   -0.1285,   -0.2057,   -0.1999},
957{   -0.1951,   -0.1629,   -0.1022,   -0.0915,   -0.0938,   -0.0643,   -0.1068,   -0.1072,   -0.1717,   -0.1669},
958{   -0.1225,   -0.1022,   -0.0641,   -0.0574,   -0.0589,   -0.0404,   -0.0670,   -0.0673,   -0.1077,   -0.1047},
959{   -0.1097,   -0.0915,   -0.0574,   -0.0514,   -0.0527,   -0.0361,   -0.0600,   -0.0603,   -0.0965,   -0.0938},
960{   -0.1124,   -0.0938,   -0.0589,   -0.0527,   -0.0540,   -0.0370,   -0.0615,   -0.0618,   -0.0989,   -0.0961},
961{   -0.0771,   -0.0643,   -0.0404,   -0.0361,   -0.0370,   -0.0254,   -0.0422,   -0.0423,   -0.0678,   -0.0659},
962{   -0.1279,   -0.1068,   -0.0670,   -0.0600,   -0.0615,   -0.0422,   -0.0700,   -0.0703,   -0.1125,   -0.1094},
963{   -0.1285,   -0.1072,   -0.0673,   -0.0603,   -0.0618,   -0.0423,   -0.0703,   -0.0706,   -0.1130,   -0.1099},
964{   -0.2057,   -0.1717,   -0.1077,   -0.0965,   -0.0989,   -0.0678,   -0.1125,   -0.1130,   -0.1809,   -0.1759},
965{   -0.1999,   -0.1669,   -0.1047,   -0.0938,   -0.0961,   -0.0659,   -0.1094,   -0.1099,   -0.1759,   -0.1710},
966          },
967          }
968     );
969    }
970
971
972    [TestMethod]
973    public void CovPeriodicTest() {
974      TestCovarianceFunction(new CovariancePeriodic(), 0,
975        new double[,]
976          {
977{    0.9548,    0.7965,    0.1438,    0.8971,    0.3692,    0.5608,    0.8367,    0.3951,    0.8773,    0.1881},
978{    0.9894,    0.6290,    0.5931,    0.9987,    0.4838,    0.7608,    0.8078,    0.1852,    0.5579,    0.2184},
979{    0.2962,    0.3824,    0.1517,    0.7208,    0.9105,    0.2604,    0.1580,    0.8483,    0.3653,    0.1660},
980{    0.2864,    0.8521,    0.2806,    0.5519,    0.3502,    0.9797,    0.1364,    0.1354,    0.1391,    0.1784},
981{    0.1354,    0.9908,    0.3145,    0.1389,    0.2266,    0.4391,    0.2541,    0.1592,    0.1452,    0.1394},
982{    0.1362,    0.4609,    0.6325,    0.1675,    0.4801,    0.9891,    0.1372,    0.2435,    0.2512,    0.1389},
983{    0.9975,    0.3630,    0.4916,    0.9481,    0.1367,    0.9130,    0.8921,    0.9800,    0.8445,    0.1864},
984{    0.9988,    0.9762,    0.2016,    0.8402,    0.5823,    0.9870,    0.6736,    0.8076,    0.9861,    0.2698},
985{    0.9440,    0.6724,    0.1385,    0.9991,    0.2411,    0.9966,    0.7439,    0.7247,    0.8095,    0.1496},
986{    0.9605,    0.5569,    0.9769,    0.7531,    0.9651,    0.9994,    0.7216,    0.2054,    0.7264,    0.5478},
987          },
988        new double[][,]
989          {     
990            new double[,]
991              {
992{         0,    0.6171,    0.0967,    0.2357,    0.4461,    0.0247,    0.6403,    0.6107,    0.5464,    0.1081},
993{    0.6171,         0,    0.4105,    0.0173,    0.6953,    0.7281,    0.7351,    0.6132,    0.6825,    0.5825},
994{    0.0967,    0.4105,         0,    0.0012,    0.3397,    0.0195,    0.0034,    0.7305,    0.7317,    0.5618},
995{    0.2357,    0.0173,    0.0012,         0,    0.7346,    0.5651,    0.0847,    0.0026,    0.4161,    0.1700},
996{    0.4461,    0.6953,    0.3397,    0.7346,         0,    0.5493,    0.3178,    0.6422,    0.4630,    0.3434},
997{    0.0247,    0.7281,    0.0195,    0.5651,    0.5493,         0,    0.0023,    0.6572,    0.0311,    0.6971},
998{    0.6403,    0.7351,    0.0034,    0.0847,    0.3178,    0.0023,         0,    0.6182,    0.6285,    0.0109},
999{    0.6107,    0.6132,    0.7305,    0.0026,    0.6422,    0.6572,    0.6182,         0,    0.7351,    0.6230},
1000{    0.5464,    0.6825,    0.7317,    0.4161,    0.4630,    0.0311,    0.6285,    0.7351,         0,    0.1843},
1001{    0.1081,    0.5825,    0.5618,    0.1700,    0.3434,    0.6971,    0.0109,    0.6230,    0.1843,         0},
1002              },
1003            new double[,]
1004              {
1005{         0,   -0.4917,    1.9759,   -2.5233,   -2.9038,   -0.9545,   -0.6223,   -2.7396,   -0.0884,   -1.8718},
1006{   -0.4917,         0,    3.6663,    0.8377,   -2.3760,   -1.4241,   -1.6437,    3.8424,   -0.9067,    0.2162},
1007{    1.9759,    3.6663,         0,   -0.2205,   -2.7933,   -0.8509,   -0.3646,   -1.4789,   -1.5087,    3.8738},
1008{   -2.5233,    0.8377,   -0.2205,         0,   -1.6172,   -0.2162,    1.8523,    0.3213,    3.6804,    2.5815},
1009{   -2.9038,   -2.3760,   -2.7933,   -1.6172,         0,   -0.1136,    3.3650,    3.7893,   -2.9070,   -2.7998},
1010{   -0.9545,   -1.4241,   -0.8509,   -0.2162,   -0.1136,         0,   -0.2974,    3.7478,    1.1265,   -1.0310},
1011{   -0.6223,   -1.6437,   -0.3646,    1.8523,    3.3650,   -0.2974,         0,   -0.4977,   -0.5548,    0.6640},
1012{   -2.7396,    3.8424,   -1.4789,    0.3213,    3.7893,    3.7478,   -0.4977,         0,   -1.6417,    1.1444},
1013{   -0.0884,   -0.9067,   -1.5087,    3.6804,   -2.9070,    1.1265,   -0.5548,   -1.6417,         0,   -2.3160},
1014{   -1.8718,    0.2162,    3.8738,    2.5815,   -2.7998,   -1.0310,    0.6640,    1.1444,   -2.3160,         0},
1015              },
1016            new double[,]
1017              {
1018{    2.0000,    0.3597,    1.9008,    1.7477,    1.4793,    1.9751,    0.3943,    1.2046,    0.2758,    1.8887},
1019{    0.3597,    2.0000,    1.5291,    1.9826,    0.9929,    0.6320,    0.7047,    1.1997,    0.4741,    0.3153},
1020{    1.9008,    1.5291,    2.0000,    1.9988,    1.6221,    1.9804,    1.9966,    0.6498,    0.6595,    1.2969},
1021{    1.7477,    1.9826,    1.9988,    2.0000,    0.6957,    0.2956,    1.9134,    1.9974,    1.5215,    1.8218},
1022{    1.4793,    0.9929,    1.6221,    0.6957,    2.0000,    0.2787,    1.6495,    1.1369,    1.4549,    1.6174},
1023{    1.9751,    0.6320,    1.9804,    0.2956,    0.2787,    2.0000,    1.9977,    1.1010,    1.9686,    0.5106},
1024{    0.3943,    0.7047,    1.9966,    1.9134,    1.6495,    1.9977,    2.0000,    0.3612,    0.3762,    1.9891},
1025{    1.2046,    1.1997,    0.6498,    1.9974,    1.1369,    1.1010,    0.3612,    2.0000,    0.7040,    0.3681},
1026{    0.2758,    0.4741,    0.6595,    1.5215,    1.4549,    1.9686,    0.3762,    0.7040,    2.0000,    1.8059},
1027{    1.8887,    0.3153,    1.2969,    1.8218,    1.6174,    0.5106,    1.9891,    0.3681,    1.8059,    2.0000},
1028              },
1029          }
1030      , 5e-3);
1031      TestCovarianceFunction(new CovariancePeriodic(), 1,
1032        new double[,]
1033          {
1034{    5.8283,    5.7618,    6.7049,    5.7980,    6.3126,    5.7012,    6.0358,    6.2917,    6.0128,    6.5482},
1035{    5.9230,    6.1447,    6.1643,    5.8794,    6.2291,    5.7511,    6.0513,    6.5551,    6.1842,    6.4880},
1036{    6.3822,    6.3018,    6.6628,    6.0966,    5.8040,    6.4250,    6.6362,    6.0294,    6.3159,    6.6082},
1037{    6.3932,    5.7803,    6.4000,    6.1876,    5.6577,    5.8483,    6.8550,    6.8032,    6.7423,    6.5723},
1038{    6.8221,    5.8618,    6.3630,    6.8860,    5.6385,    5.6752,    6.4334,    6.9877,    6.9298,    6.7393},
1039{    6.7811,    6.2441,    6.1428,    6.6035,    5.6837,    5.8594,    6.7636,    7.1358,    7.1438,    6.7439},
1040{    5.9060,    6.3179,    6.2241,    5.8240,    6.7709,    5.8052,    6.0040,    5.9357,    6.0315,    6.5522},
1041{    5.9014,    5.9400,    6.5193,    5.7761,    6.1703,    5.9266,    6.1211,    5.7652,    5.9278,    6.4131},
1042{    5.9689,    6.1217,    6.7479,    5.9000,    6.4518,    5.8729,    6.0847,    6.0946,    6.0504,    6.6728},
1043{    5.8322,    6.1847,    5.9393,    5.7489,    5.9512,    5.8983,    6.0962,    6.5118,    6.0937,    6.1900},
1044          },
1045        new double[][,]
1046          {           
1047            new double[,]
1048              {
1049{         0,    1.5463,    2.7702,    2.4754,    2.3601,    2.6154,    1.6170,    2.2426,    1.2120,    2.5484},
1050{    1.5463,         0,    2.8809,    2.7132,    2.1407,    1.9051,    1.9633,    2.9438,    1.7399,    0.7903},
1051{    2.7702,    2.8809,         0,    2.6583,    2.4199,    2.6219,    2.6503,    1.9201,    1.9281,    2.9266},
1052{    2.4754,    2.7132,    2.6583,         0,    1.9565,    1.3445,    2.7639,    2.6871,    2.8826,    2.8025},
1053{    2.3601,    2.1407,    2.4199,    1.9565,         0,    1.2406,    2.8530,    2.9544,    2.3499,    2.4179},
1054{    2.6154,    1.9051,    2.6219,    1.3445,    1.2406,         0,    2.6541,    2.9603,    2.7276,    1.7848},
1055{    1.6170,    1.9633,    2.6503,    2.7639,    2.8530,    2.6541,         0,    1.5498,    1.5819,    2.7045},
1056{    2.2426,    2.9438,    1.9201,    2.6871,    2.9544,    2.9603,    1.5498,         0,    1.9628,    3.0510},
1057{    1.2120,    1.7399,    1.9281,    2.8826,    2.3499,    2.7276,    1.5819,    1.9628,         0,    2.5033},
1058{    2.5484,    0.7903,    2.9266,    2.8025,    2.4179,    1.7848,    2.7045,    3.0510,    2.5033,         0},
1059              },
1060            new double[,]
1061              {
1062{         0,    1.2693,    1.2518,    1.4723,    1.4989,    1.4024,    1.3080,    1.5046,    1.0560,    1.4419},
1063{    1.2693,         0,    1.0599,    1.3190,    1.4956,    1.4360,    1.4550,    0.8895,    1.3688,    0.7299},
1064{    1.2518,    1.0599,         0,    1.3700,    1.4880,    1.3979,    1.3765,    1.4411,    1.4438,    0.9428},
1065{    1.4723,    1.3190,    1.3700,         0,    1.4529,    1.1461,    1.2600,    1.3448,    1.0562,    1.2056},
1066{    1.4989,    1.4956,    1.4880,    1.4529,         0,    1.0760,    1.1183,    0.8531,    1.5002,    1.4885},
1067{    1.4024,    1.4360,    1.3979,    1.1461,    1.0760,         0,    1.3735,    0.8314,    1.3035,    1.3888},
1068{    1.3080,    1.4550,    1.3765,    1.2600,    1.1183,    1.3735,         0,    1.2713,    1.2891,    1.3279},
1069{    1.5046,    0.8895,    1.4411,    1.3448,    0.8531,    0.8314,    1.2713,         0,    1.4549,   -0.0705},
1070{    1.0560,    1.3688,    1.4438,    1.0562,    1.5002,    1.3035,    1.2891,    1.4549,         0,    1.4621},
1071{    1.4419,    0.7299,    0.9428,    1.2056,    1.4885,    1.3888,    1.3279,   -0.0705,    1.4621,         0},
1072              },
1073            new double[,]
1074              {
1075{   14.7781,   13.1371,   11.6509,   12.0296,   12.1738,   11.8516,   13.0567,   12.3184,   13.5101,   11.9373},
1076{   13.1371,   14.7781,   11.5044,   11.7253,   12.4422,   12.7230,   12.6543,   11.4201,   12.9155,   13.9651},
1077{   11.6509,   11.5044,   14.7781,   11.7964,   12.0992,   11.8434,   11.8067,   12.7053,   12.6959,   11.4432},
1078{   12.0296,   11.7253,   11.7964,   14.7781,   12.6624,   13.3637,   11.6592,   11.7593,   11.5022,   11.6084},
1079{   12.1738,   12.4422,   12.0992,   12.6624,   14.7781,   13.4786,   11.5416,   11.4058,   12.1864,   12.1017},
1080{   11.8516,   12.7230,   11.8434,   13.3637,   13.4786,   14.7781,   11.8019,   11.3978,   11.7066,   12.8636},
1081{   13.0567,   12.6543,   11.8067,   11.6592,   11.5416,   11.8019,   14.7781,   13.1331,   13.0967,   11.7366},
1082{   12.3184,   11.4201,   12.7053,   11.7593,   11.4058,   11.3978,   13.1331,   14.7781,   12.6549,   11.2744},
1083{   13.5101,   12.9155,   12.6959,   11.5022,   12.1864,   11.7066,   13.0967,   12.6549,   14.7781,   11.9944},
1084{   11.9373,   13.9651,   11.4432,   11.6084,   12.1017,   12.8636,   11.7366,   11.2744,   11.9944,   14.7781},
1085              },
1086          }
1087      , 5e-3);
1088    }
1089
1090    [TestMethod]
1091    public void CovSEardTest() {
1092      TestCovarianceFunction(new CovarianceSquaredExponentialArd(), 0,
1093        new double[,]
1094          {
1095{    0.5771,    0.5404,    0.8569,    0.5612,    0.7545,    0.4980,    0.6649,    0.7484,    0.6564,    0.8184},
1096{    0.6206,    0.7027,    0.7091,    0.6015,    0.7295,    0.5338,    0.6705,    0.8202,    0.7155,    0.8029},
1097{    0.7743,    0.7513,    0.8468,    0.6865,    0.5645,    0.7861,    0.8404,    0.6625,    0.7555,    0.8335},
1098{    0.7773,    0.5513,    0.7792,    0.7166,    0.4534,    0.5870,    0.8913,    0.8796,    0.8656,    0.8245},
1099{    0.8839,    0.5934,    0.7689,    0.8982,    0.4126,    0.4741,    0.7883,    0.9201,    0.9077,    0.8649},
1100{    0.8746,    0.7341,    0.7020,    0.8323,    0.4826,    0.5922,    0.8706,    0.9508,    0.9524,    0.8660},
1101{    0.6133,    0.7560,    0.7280,    0.5749,    0.8722,    0.5651,    0.6530,    0.6260,    0.6633,    0.8195},
1102{    0.6113,    0.6277,    0.8110,    0.5489,    0.7110,    0.6221,    0.6948,    0.5425,    0.6227,    0.7828},
1103{    0.6394,    0.6950,    0.8669,    0.6107,    0.7933,    0.5985,    0.6823,    0.6858,    0.6702,    0.8492},
1104{    0.5790,    0.7156,    0.6274,    0.5324,    0.6323,    0.6100,    0.6863,    0.8091,    0.6855,    0.7173},
1105
1106          },
1107        new double[][,]
1108          {     
1109            new double[,]
1110              {
1111{         0,    0.1113,    0.1356,    0.1828,    0.0037,    0.0032,    0.0052,    0.1649,    0.0020,    0.0599},
1112{    0.1113,         0,    0.3889,    0.4757,    0.1415,    0.1485,    0.0629,    0.3653,    0.0811,    0.0035},
1113{    0.1356,    0.3889,         0,    0.0011,    0.1136,    0.1060,    0.1954,    0.0000,    0.2176,    0.3219},
1114{    0.1828,    0.4757,    0.0011,         0,    0.1566,    0.1766,    0.2129,    0.0012,    0.1768,    0.3923},
1115{    0.0037,    0.1415,    0.1136,    0.1566,         0,    0.0000,    0.0128,    0.0836,    0.0101,    0.0966},
1116{    0.0032,    0.1485,    0.1060,    0.1766,    0.0000,         0,    0.0140,    0.0837,    0.0085,    0.1126},
1117{    0.0052,    0.0629,    0.1954,    0.2129,    0.0128,    0.0140,         0,    0.2603,    0.0008,    0.0306},
1118{    0.1649,    0.3653,    0.0000,    0.0012,    0.0836,    0.0837,    0.2603,         0,    0.2139,    0.2429},
1119{    0.0020,    0.0811,    0.2176,    0.1768,    0.0101,    0.0085,    0.0008,    0.2139,         0,    0.0433},
1120{    0.0599,    0.0035,    0.3219,    0.3923,    0.0966,    0.1126,    0.0306,    0.2429,    0.0433,         0},
1121              },
1122            new double[,]
1123              {
1124{         0,    0.1257,    0.1670,    0.0931,    0.3194,    0.2613,    0.0213,    0.0219,    0.0365,    0.3319},
1125{    0.1257,         0,    0.0117,    0.0001,    0.0625,    0.0510,    0.2315,    0.1621,    0.0274,    0.1000},
1126{    0.1670,    0.0117,         0,    0.0160,    0.0141,    0.0075,    0.3003,    0.3909,    0.0850,    0.0170},
1127{    0.0931,    0.0001,    0.0160,         0,    0.0718,    0.0629,    0.1673,    0.1835,    0.0157,    0.0668},
1128{    0.3194,    0.0625,    0.0141,    0.0718,         0,    0.0011,    0.3903,    0.3690,    0.1570,    0.0009},
1129{    0.2613,    0.0510,    0.0075,    0.0629,    0.0011,         0,    0.4011,    0.3369,    0.1158,    0.0041},
1130{    0.0213,    0.2315,    0.3003,    0.1673,    0.3903,    0.4011,         0,    0.0002,    0.1102,    0.4643},
1131{    0.0219,    0.1621,    0.3909,    0.1835,    0.3690,    0.3369,    0.0002,         0,    0.1101,    0.3135},
1132{    0.0365,    0.0274,    0.0850,    0.0157,    0.1570,    0.1158,    0.1102,    0.1101,         0,    0.1728},
1133{    0.3319,    0.1000,    0.0170,    0.0668,    0.0009,    0.0041,    0.4643,    0.3135,    0.1728,         0},
1134              },
1135            new double[,]
1136              {
1137{         0,    0.0115,    0.1979,    0.0316,    0.0251,    0.0027,    0.1396,    0.1747,    0.1481,    0.0299},
1138{    0.0115,         0,    0.1171,    0.0678,    0.0700,    0.0261,    0.0664,    0.0724,    0.0689,    0.0088},
1139{    0.1979,    0.1171,         0,    0.3960,    0.4057,    0.2638,    0.0181,    0.0061,    0.0230,    0.0705},
1140{    0.0316,    0.0678,    0.3960,         0,    0.0006,    0.0201,    0.2320,    0.3087,    0.2134,    0.1071},
1141{    0.0251,    0.0700,    0.4057,    0.0006,         0,    0.0137,    0.2005,    0.2369,    0.2506,    0.1115},
1142{    0.0027,    0.0261,    0.2638,    0.0201,    0.0137,         0,    0.1409,    0.1571,    0.1351,    0.0626},
1143{    0.1396,    0.0664,    0.0181,    0.2320,    0.2005,    0.1409,         0,    0.0056,    0.0000,    0.0234},
1144{    0.1747,    0.0724,    0.0061,    0.3087,    0.2369,    0.1571,    0.0056,         0,    0.0054,    0.0308},
1145{    0.1481,    0.0689,    0.0230,    0.2134,    0.2506,    0.1351,    0.0000,    0.0054,         0,    0.0252},
1146{    0.0299,    0.0088,    0.0705,    0.1071,    0.1115,    0.0626,    0.0234,    0.0308,    0.0252,         0},
1147              },
1148            new double[,]
1149              {
1150{         0,    0.0518,    0.0225,    0.0842,    0.0134,    0.0822,    0.0259,    0.0044,    0.0472,    0.1388},
1151{    0.0518,         0,    0.1075,    0.0068,    0.1109,    0.0098,    0.0040,    0.0548,    0.1861,    0.0426},
1152{    0.0225,    0.1075,         0,    0.1884,    0.0022,    0.1953,    0.0866,    0.0109,    0.0010,    0.2263},
1153{    0.0842,    0.0068,    0.1884,         0,    0.1883,    0.0000,    0.0186,    0.1147,    0.1866,    0.0066},
1154{    0.0134,    0.1109,    0.0022,    0.1883,         0,    0.2191,    0.0553,    0.0019,    0.0060,    0.2459},
1155{    0.0822,    0.0098,    0.1953,    0.0000,    0.2191,         0,    0.0209,    0.0970,    0.2098,    0.0083},
1156{    0.0259,    0.0040,    0.0866,    0.0186,    0.0553,    0.0209,         0,    0.0544,    0.1387,    0.0493},
1157{    0.0044,    0.0548,    0.0109,    0.1147,    0.0019,    0.0970,    0.0544,         0,    0.0181,    0.1157},
1158{    0.0472,    0.1861,    0.0010,    0.1866,    0.0060,    0.2098,    0.1387,    0.0181,         0,    0.3179},
1159{    0.1388,    0.0426,    0.2263,    0.0066,    0.2459,    0.0083,    0.0493,    0.1157,    0.3179,         0},
1160              },
1161            new double[,]
1162              {
1163{         0,    0.0195,    0.1128,    0.1600,    0.1591,    0.2414,    0.1441,    0.1240,    0.0109,    0.0116},
1164{    0.0195,         0,    0.0446,    0.0686,    0.0786,    0.1693,    0.0542,    0.0354,    0.0014,    0.0003},
1165{    0.1128,    0.0446,         0,    0.0016,    0.0011,    0.0202,    0.0003,    0.0004,    0.0837,    0.0487},
1166{    0.1600,    0.0686,    0.0016,         0,    0.0001,    0.0143,    0.0030,    0.0034,    0.0778,    0.0727},
1167{    0.1591,    0.0786,    0.0011,    0.0001,         0,    0.0171,    0.0021,    0.0020,    0.0942,    0.0812},
1168{    0.2414,    0.1693,    0.0202,    0.0143,    0.0171,         0,    0.0250,    0.0207,    0.1541,    0.1880},
1169{    0.1441,    0.0542,    0.0003,    0.0030,    0.0021,    0.0250,         0,    0.0000,    0.0782,    0.0489},
1170{    0.1240,    0.0354,    0.0004,    0.0034,    0.0020,    0.0207,    0.0000,         0,    0.0714,    0.0315},
1171{    0.0109,    0.0014,    0.0837,    0.0778,    0.0942,    0.1541,    0.0782,    0.0714,         0,    0.0003},
1172{    0.0116,    0.0003,    0.0487,    0.0727,    0.0812,    0.1880,    0.0489,    0.0315,    0.0003,         0},
1173              },
1174            new double[,]
1175              {
1176{    2.0000,    1.6472,    1.1513,    1.3142,    1.3662,    1.2437,    1.6267,    1.4148,    1.7372,    1.2786},
1177{    1.6472,    2.0000,    1.0689,    1.1876,    1.4541,    1.5370,    1.5174,    1.0103,    1.5898,    1.8381},
1178{    1.1513,    1.0689,    2.0000,    1.2199,    1.3398,    1.2402,    1.2244,    1.5320,    1.5293,    1.0276},
1179{    1.3142,    1.1876,    1.2199,    2.0000,    1.5197,    1.7027,    1.1555,    1.2033,    1.0675,    1.1291},
1180{    1.3662,    1.4541,    1.3398,    1.5197,    2.0000,    1.7299,    1.0916,    0.9989,    1.3706,    1.3407},
1181{    1.2437,    1.5370,    1.2402,    1.7027,    1.7299,    2.0000,    1.2223,    0.9923,    1.1787,    1.5758},
1182{    1.6267,    1.5174,    1.2244,    1.1555,    1.0916,    1.2223,    2.0000,    1.6461,    1.6369,    1.1928},
1183{    1.4148,    1.0103,    1.5320,    1.2033,    0.9989,    0.9923,    1.6461,    2.0000,    1.5176,    0.7806},
1184{    1.7372,    1.5898,    1.5293,    1.0675,    1.3706,    1.1787,    1.6369,    1.5176,    2.0000,    1.3009},
1185{    1.2786,    1.8381,    1.0276,    1.1291,    1.3407,    1.5758,    1.1928,    0.7806,    1.3009,    2.0000},
1186              },
1187          }
1188      );
1189      TestCovarianceFunction(new CovarianceSquaredExponentialArd(), 1,
1190        new double[,]
1191          {
1192{    6.8592,    6.7985,    7.2362,    6.8334,    7.1127,    6.7239,    6.9920,    7.1048,    6.9798,    7.1914},
1193{    6.9271,    7.0445,    7.0531,    6.8979,    7.0803,    6.7872,    7.0000,    7.1935,    7.0617,    7.1727},
1194{    7.1376,    7.1086,    7.2246,    7.0223,    6.8388,    7.1522,    7.2172,    6.9886,    7.1139,    7.2091},
1195{    7.1414,    6.8169,    7.1438,    7.0632,    6.6389,    6.8750,    7.2749,    7.2619,    7.2462,    7.1986},
1196{    7.2667,    6.8852,    7.1309,    7.2824,    6.5548,    6.6792,    7.1550,    7.3063,    7.2929,    7.2454},
1197{    7.2563,    7.0864,    7.0436,    7.2078,    6.6953,    6.8834,    7.2517,    7.3388,    7.3405,    7.2466},
1198{    6.9160,    7.1146,    7.0783,    6.8557,    7.2536,    6.8398,    6.9750,    6.9351,    6.9897,    7.1926},
1199{    6.9130,    6.9378,    7.1825,    6.8129,    7.0557,    6.9294,    7.0338,    6.8021,    6.9302,    7.1482},
1200{    6.9551,    7.0340,    7.2476,    6.9120,    7.1611,    6.8932,    7.0166,    7.0213,    6.9995,    7.2274},
1201{    6.8624,    7.0619,    6.9373,    6.7848,    6.9446,    6.9109,    7.0221,    7.1802,    7.0209,    7.0642},
1202          },
1203        new double[][,]
1204          {           
1205            new double[,]
1206              {
1207{         0,    0.1316,    0.2186,    0.2629,    0.0051,    0.0049,    0.0062,    0.2224,    0.0023,    0.0882},
1208{    0.1316,         0,    0.6685,    0.7466,    0.1864,    0.1865,    0.0799,    0.6593,    0.0990,    0.0037},
1209{    0.2186,    0.6685,         0,    0.0017,    0.1606,    0.1602,    0.2987,    0.0000,    0.2745,    0.5725},
1210{    0.2629,    0.7466,    0.0017,         0,    0.1985,    0.2030,    0.3422,    0.0019,    0.3043,    0.6432},
1211{    0.0051,    0.1864,    0.1606,    0.1985,         0,    0.0000,    0.0216,    0.1524,    0.0141,    0.1366},
1212{    0.0049,    0.1865,    0.1602,    0.2030,    0.0000,         0,    0.0215,    0.1535,    0.0134,    0.1384},
1213{    0.0062,    0.0799,    0.2987,    0.3422,    0.0216,    0.0215,         0,    0.3081,    0.0010,    0.0478},
1214{    0.2224,    0.6593,    0.0000,    0.0019,    0.1524,    0.1535,    0.3081,         0,    0.2715,    0.5480},
1215{    0.0023,    0.0990,    0.2745,    0.3043,    0.0141,    0.0134,    0.0010,    0.2715,         0,    0.0628},
1216{    0.0882,    0.0037,    0.5725,    0.6432,    0.1366,    0.1384,    0.0478,    0.5480,    0.0628,         0},
1217              },
1218            new double[,]
1219              {
1220{         0,    0.1486,    0.2692,    0.1339,    0.4441,    0.3941,    0.0255,    0.0295,    0.0413,    0.4886},
1221{    0.1486,         0,    0.0201,    0.0002,    0.0823,    0.0641,    0.2940,    0.2925,    0.0334,    0.1076},
1222{    0.2692,    0.0201,         0,    0.0246,    0.0200,    0.0113,    0.4590,    0.4923,    0.1073,    0.0302},
1223{    0.1339,    0.0002,    0.0246,         0,    0.0910,    0.0723,    0.2689,    0.2847,    0.0270,    0.1096},
1224{    0.4441,    0.0823,    0.0200,    0.0910,         0,    0.0012,    0.6588,    0.6726,    0.2177,    0.0013},
1225{    0.3941,    0.0641,    0.0113,    0.0723,    0.0012,         0,    0.6140,    0.6177,    0.1829,    0.0050},
1226{    0.0255,    0.2940,    0.4590,    0.2689,    0.6588,    0.6140,         0,    0.0002,    0.1310,    0.7259},
1227{    0.0295,    0.2925,    0.4923,    0.2847,    0.6726,    0.6177,    0.0002,         0,    0.1398,    0.7073},
1228{    0.0413,    0.0334,    0.1073,    0.0270,    0.2177,    0.1829,    0.1310,    0.1398,         0,    0.2506},
1229{    0.4886,    0.1076,    0.0302,    0.1096,    0.0013,    0.0050,    0.7259,    0.7073,    0.2506,         0},
1230              },
1231            new double[,]
1232              {
1233{         0,    0.0137,    0.3191,    0.0455,    0.0349,    0.0041,    0.1669,    0.2356,    0.1673,    0.0440},
1234{    0.0137,         0,    0.2012,    0.1063,    0.0922,    0.0327,    0.0843,    0.1306,    0.0841,    0.0094},
1235{    0.3191,    0.2012,         0,    0.6073,    0.5736,    0.3987,    0.0277,    0.0077,    0.0290,    0.1253},
1236{    0.0455,    0.1063,    0.6073,         0,    0.0007,    0.0231,    0.3728,    0.4790,    0.3672,    0.1755},
1237{    0.0349,    0.0922,    0.5736,    0.0007,         0,    0.0156,    0.3385,    0.4318,    0.3474,    0.1576},
1238{    0.0041,    0.0327,    0.3987,    0.0231,    0.0156,         0,    0.2156,    0.2880,    0.2133,    0.0769},
1239{    0.1669,    0.0843,    0.0277,    0.3728,    0.3385,    0.2156,         0,    0.0066,    0.0000,    0.0366},
1240{    0.2356,    0.1306,    0.0077,    0.4790,    0.4318,    0.2880,    0.0066,         0,    0.0068,    0.0694},
1241{    0.1673,    0.0841,    0.0290,    0.3672,    0.3474,    0.2133,    0.0000,    0.0068,         0,    0.0365},
1242{    0.0440,    0.0094,    0.1253,    0.1755,    0.1576,    0.0769,    0.0366,    0.0694,    0.0365,         0},
1243              },
1244            new double[,]
1245              {
1246{         0,    0.0612,    0.0363,    0.1211,    0.0186,    0.1239,    0.0310,    0.0059,    0.0534,    0.2043},
1247{    0.0612,         0,    0.1847,    0.0107,    0.1461,    0.0123,    0.0050,    0.0989,    0.2270,    0.0458},
1248{    0.0363,    0.1847,         0,    0.2888,    0.0032,    0.2952,    0.1324,    0.0137,    0.0012,    0.4024},
1249{    0.1211,    0.0107,    0.2888,         0,    0.2388,    0.0000,    0.0299,    0.1780,    0.3210,    0.0108},
1250{    0.0186,    0.1461,    0.0032,    0.2388,         0,    0.2484,    0.0933,    0.0034,    0.0083,    0.3475},
1251{    0.1239,    0.0123,    0.2952,    0.0000,    0.2484,         0,    0.0320,    0.1778,    0.3315,    0.0102},
1252{    0.0310,    0.0050,    0.1324,    0.0299,    0.0933,    0.0320,         0,    0.0644,    0.1650,    0.0770},
1253{    0.0059,    0.0989,    0.0137,    0.1780,    0.0034,    0.1778,    0.0644,         0,    0.0230,    0.2610},
1254{    0.0534,    0.2270,    0.0012,    0.3210,    0.0083,    0.3315,    0.1650,    0.0230,         0,    0.4611},
1255{    0.2043,    0.0458,    0.4024,    0.0108,    0.3475,    0.0102,    0.0770,    0.2610,    0.4611,         0},
1256              },
1257            new double[,]
1258              {
1259{         0,    0.0230,    0.1818,    0.2301,    0.2212,    0.3641,    0.1723,    0.1672,    0.0123,    0.0171},
1260{    0.0230,         0,    0.0767,    0.1076,    0.1036,    0.2126,    0.0688,    0.0640,    0.0017,    0.0004},
1261{    0.1818,    0.0767,         0,    0.0024,    0.0015,    0.0305,    0.0004,    0.0006,    0.1055,    0.0867},
1262{    0.2301,    0.1076,    0.0024,         0,    0.0001,    0.0164,    0.0049,    0.0052,    0.1338,    0.1192},
1263{    0.2212,    0.1036,    0.0015,    0.0001,         0,    0.0194,    0.0035,    0.0037,    0.1306,    0.1147},
1264{    0.3641,    0.2126,    0.0305,    0.0164,    0.0194,         0,    0.0382,    0.0380,    0.2434,    0.2311},
1265{    0.1723,    0.0688,    0.0004,    0.0049,    0.0035,    0.0382,         0,    0.0000,    0.0930,    0.0764},
1266{    0.1672,    0.0640,    0.0006,    0.0052,    0.0037,    0.0380,    0.0000,         0,    0.0907,    0.0710},
1267{    0.0123,    0.0017,    0.1055,    0.1338,    0.1306,    0.2434,    0.0930,    0.0907,         0,    0.0005},
1268{    0.0171,    0.0004,    0.0867,    0.1192,    0.1147,    0.2311,    0.0764,    0.0710,    0.0005,         0},
1269              },
1270            new double[,]
1271              {
1272{   14.7781,   14.3950,   13.7138,   13.9618,   14.0352,   13.8578,   14.3707,   14.1018,   14.4990,   13.9100},
1273{   14.3950,   14.7781,   13.5767,   13.7715,   14.1542,   14.2607,   14.2360,   13.4735,   14.3260,   14.6102},
1274{   13.7138,   13.5767,   14.7781,   13.8217,   13.9982,   13.8525,   13.8286,   14.2545,   14.2511,   13.5045},
1275{   13.9618,   13.7715,   13.8217,   14.7781,   14.2390,   14.4598,   13.7206,   13.7960,   13.5743,   13.6778},
1276{   14.0352,   14.1542,   13.9982,   14.2390,   14.7781,   14.4908,   13.6154,   13.4528,   14.0413,   13.9995},
1277{   13.8578,   14.2607,   13.8525,   14.4598,   14.4908,   14.7781,   13.8254,   13.4407,   13.7576,   14.3090},
1278{   14.3707,   14.2360,   13.8286,   13.7206,   13.6154,   13.8254,   14.7781,   14.3938,   14.3828,   13.7798},
1279{   14.1018,   13.4735,   14.2545,   13.7960,   13.4528,   13.4407,   14.3938,   14.7781,   14.2363,   13.0113},
1280{   14.4990,   14.3260,   14.2511,   13.5743,   14.0413,   13.7576,   14.3828,   14.2363,   14.7781,   13.9425},
1281{   13.9100,   14.6102,   13.5045,   13.6778,   13.9995,   14.3090,   13.7798,   13.0113,   13.9425,   14.7781},
1282              },
1283          }
1284      );
1285    }
1286
1287    [TestMethod]
1288    public void CovSumTest() {
1289      var cov = new CovarianceSum();
1290      cov.Terms.Add(new CovarianceSquaredExponentialIso());
1291      cov.Terms.Add(new CovarianceLinear());
1292      TestCovarianceFunction(cov, 0,
1293        new double[,]
1294          {
1295{    1.4860,    1.5376,    2.7382,    1.4230,    2.7566,    2.0148,    1.9261,    1.8493,    1.6069,    2.2035},
1296{    1.0861,    1.4463,    1.8848,    1.0165,    2.1818,    1.6036,    1.4240,    1.4965,    1.2360,    1.6526},
1297{    2.1463,    2.2472,    2.8854,    1.9188,    2.4455,    2.9283,    2.5049,    1.8107,    2.0157,    2.4059},
1298{    1.6245,    1.2089,    2.2059,    1.4630,    1.5864,    1.9084,    2.0859,    1.7825,    1.7332,    1.8574},
1299{    1.6804,    1.1454,    2.0031,    1.6914,    1.2725,    1.4029,    1.6810,    1.6888,    1.6437,    1.7665},
1300{    1.4052,    1.2437,    1.5900,    1.2941,    1.2438,    1.4882,    1.6072,    1.4970,    1.4811,    1.5135},
1301{    1.4913,    1.9972,    2.3544,    1.3689,    2.9275,    2.1163,    1.8043,    1.4564,    1.5325,    2.1139},
1302{    2.0334,    2.2303,    3.0928,    1.8439,    3.1092,    2.8169,    2.4555,    1.7771,    1.9760,    2.5789},
1303{    1.7324,    2.0254,    2.8414,    1.6386,    2.9270,    2.3807,    2.0510,    1.7808,    1.7231,    2.3527},
1304{    0.9196,    1.4220,    1.6254,    0.7696,    1.8861,    1.7579,    1.4076,    1.4163,    1.1077,    1.3988},
1305          },
1306        new double[][,]
1307          {     
1308            new double[,]
1309              {
1310{         0,    0.3197,    0.6358,    0.5518,    0.5207,    0.5909,    0.3361,    0.4897,    0.2447,    0.5720},
1311{    0.3197,         0,    0.6697,    0.6190,    0.4635,    0.4047,    0.4190,    0.6899,    0.3650,    0.1552},
1312{    0.6358,    0.6697,         0,    0.6031,    0.5367,    0.5927,    0.6008,    0.4084,    0.4103,    0.6843},
1313{    0.5518,    0.6190,    0.6031,         0,    0.4173,    0.2740,    0.6339,    0.6114,    0.6702,    0.6455},
1314{    0.5207,    0.4635,    0.5367,    0.4173,         0,    0.2510,    0.6610,    0.6935,    0.5180,    0.5362},
1315{    0.5909,    0.4047,    0.5927,    0.2740,    0.2510,         0,    0.6019,    0.6955,    0.6232,    0.3756},
1316{    0.3361,    0.4190,    0.6008,    0.6339,    0.6610,    0.6019,         0,    0.3205,    0.3279,    0.6165},
1317{    0.4897,    0.6899,    0.4084,    0.6114,    0.6935,    0.6955,    0.3205,         0,    0.4189,    0.7344},
1318{    0.2447,    0.3650,    0.4103,    0.6702,    0.5180,    0.6232,    0.3279,    0.4189,         0,    0.5595},
1319{    0.5720,    0.1552,    0.6843,    0.6455,    0.5362,    0.3756,    0.6165,    0.7344,    0.5595,         0},
1320              },
1321            new double[,]
1322              {
1323{    2.0000,    1.6472,    1.1513,    1.3142,    1.3662,    1.2437,    1.6267,    1.4148,    1.7372,    1.2786},
1324{    1.6472,    2.0000,    1.0689,    1.1876,    1.4541,    1.5370,    1.5174,    1.0103,    1.5898,    1.8381},
1325{    1.1513,    1.0689,    2.0000,    1.2199,    1.3398,    1.2402,    1.2244,    1.5320,    1.5293,    1.0276},
1326{    1.3142,    1.1876,    1.2199,    2.0000,    1.5197,    1.7027,    1.1555,    1.2033,    1.0675,    1.1291},
1327{    1.3662,    1.4541,    1.3398,    1.5197,    2.0000,    1.7299,    1.0916,    0.9989,    1.3706,    1.3407},
1328{    1.2437,    1.5370,    1.2402,    1.7027,    1.7299,    2.0000,    1.2223,    0.9923,    1.1787,    1.5758},
1329{    1.6267,    1.5174,    1.2244,    1.1555,    1.0916,    1.2223,    2.0000,    1.6461,    1.6369,    1.1928},
1330{    1.4148,    1.0103,    1.5320,    1.2033,    0.9989,    0.9923,    1.6461,    2.0000,    1.5176,    0.7806},
1331{    1.7372,    1.5898,    1.5293,    1.0675,    1.3706,    1.1787,    1.6369,    1.5176,    2.0000,    1.3009},
1332{    1.2786,    1.8381,    1.0276,    1.1291,    1.3407,    1.5758,    1.1928,    0.7806,    1.3009,    2.0000},
1333              },
1334          }
1335      );
1336      TestCovarianceFunction(cov, 1,
1337        new double[,]
1338          {
1339{    7.7681,    7.7957,    9.1175,    7.6951,    9.1148,    8.2406,    8.2532,    8.2057,    7.9303,    8.5765},
1340{    7.3926,    7.7881,    8.2289,    7.3128,    8.5326,    7.8570,    7.7535,    7.8698,    7.5822,    8.0224},
1341{    8.5096,    8.6045,    9.2632,    8.2546,    8.7198,    9.2945,    8.8817,    8.1368,    8.3741,    8.7816},
1342{    7.9886,    7.4745,    8.5704,    7.8096,    7.7719,    8.1964,    8.4695,    8.1648,    8.1138,    8.2315},
1343{    8.0632,    7.4371,    8.3651,    8.0757,    7.4147,    7.6080,    8.0477,    8.0750,    8.0288,    8.1469},
1344{    7.7869,    7.5959,    7.9316,    7.6696,    7.4564,    7.7793,    7.9884,    7.8850,    7.8692,    7.8941},
1345{    7.7940,    8.3557,    8.7048,    7.6497,    9.3089,    8.3910,    8.1263,    7.7655,    7.8589,    8.4871},
1346{    8.3350,    8.5404,    9.4643,    8.1079,    9.4540,    9.1241,    8.7945,    8.0367,    8.2835,    8.9443},
1347{    8.0481,    8.3644,    9.2221,    7.9399,    9.2948,    8.6753,    8.3852,    8.1164,    8.0524,    8.7309},
1348{    7.2030,    7.7683,    7.9353,    7.0220,    8.1984,    8.0588,    7.7433,    7.7874,    7.4431,    7.7457},
1349          },
1350        new double[][,]
1351          {           
1352            new double[,]
1353              {
1354{         0,    0.3781,    1.0250,    0.7934,    0.7239,    0.8910,    0.4018,    0.6606,    0.2764,    0.8421},
1355{    0.3781,         0,    1.1512,    0.9715,    0.6106,    0.5082,    0.5320,    1.2453,    0.4451,    0.1669},
1356{    1.0250,    1.1512,         0,    0.9248,    0.7589,    0.8960,    0.9183,    0.5143,    0.5175,    1.2171},
1357{    0.7934,    0.9715,    0.9248,         0,    0.5292,    0.3149,    1.0188,    0.9487,    1.1534,    1.0583},
1358{    0.7239,    0.6106,    0.7589,    0.5292,         0,    0.2845,    1.1157,    1.2640,    0.7182,    0.7577},
1359{    0.8910,    0.5082,    0.8960,    0.3149,    0.2845,         0,    0.9214,    1.2749,    0.9845,    0.4616},
1360{    0.4018,    0.5320,    0.9183,    1.0188,    1.1157,    0.9214,         0,    0.3793,    0.3899,    0.9638},
1361{    0.6606,    1.2453,    0.5143,    0.9487,    1.2640,    1.2749,    0.3793,         0,    0.5318,    1.6567},
1362{    0.2764,    0.4451,    0.5175,    1.1534,    0.7182,    0.9845,    0.3899,    0.5318,         0,    0.8116},
1363{    0.8421,    0.1669,    1.2171,    1.0583,    0.7577,    0.4616,    0.9638,    1.6567,    0.8116,         0},
1364              },
1365            new double[,]
1366              {
1367{   14.7781,   14.3950,   13.7138,   13.9618,   14.0352,   13.8578,   14.3707,   14.1018,   14.4990,   13.9100},
1368{   14.3950,   14.7781,   13.5767,   13.7715,   14.1542,   14.2607,   14.2360,   13.4735,   14.3260,   14.6102},
1369{   13.7138,   13.5767,   14.7781,   13.8217,   13.9982,   13.8525,   13.8286,   14.2545,   14.2511,   13.5045},
1370{   13.9618,   13.7715,   13.8217,   14.7781,   14.2390,   14.4598,   13.7206,   13.7960,   13.5743,   13.6778},
1371{   14.0352,   14.1542,   13.9982,   14.2390,   14.7781,   14.4908,   13.6154,   13.4528,   14.0413,   13.9995},
1372{   13.8578,   14.2607,   13.8525,   14.4598,   14.4908,   14.7781,   13.8254,   13.4407,   13.7576,   14.3090},
1373{   14.3707,   14.2360,   13.8286,   13.7206,   13.6154,   13.8254,   14.7781,   14.3938,   14.3828,   13.7798},
1374{   14.1018,   13.4735,   14.2545,   13.7960,   13.4528,   13.4407,   14.3938,   14.7781,   14.2363,   13.0113},
1375{   14.4990,   14.3260,   14.2511,   13.5743,   14.0413,   13.7576,   14.3828,   14.2363,   14.7781,   13.9425},
1376{   13.9100,   14.6102,   13.5045,   13.6778,   13.9995,   14.3090,   13.7798,   13.0113,   13.9425,   14.7781},
1377              },
1378          }
1379      );
1380    }
1381    [TestMethod]
1382    public void CovProdTest() {
1383      var cov = new CovarianceProd();
1384      cov.Factors.Add(new CovarianceSquaredExponentialIso());
1385      cov.Factors.Add(new CovarianceLinear());
1386      TestCovarianceFunction(cov, 0,
1387        new double[,]
1388          {
1389{    0.5245,    0.5389,    1.6120,    0.4836,    1.5106,    0.7554,    0.8386,    0.8239,    0.6239,    1.1336},
1390{    0.2889,    0.5225,    0.8337,    0.2496,    1.0595,    0.5710,    0.5052,    0.5547,    0.3724,    0.6822},
1391{    1.0623,    1.1239,    1.7263,    0.8459,    1.0618,    1.6839,    1.3988,    0.7607,    0.9521,    1.3106},
1392{    0.6585,    0.3625,    1.1117,    0.5349,    0.5137,    0.7756,    1.0648,    0.7942,    0.7510,    0.8516},
1393{    0.7040,    0.3275,    0.9490,    0.7125,    0.3548,    0.4404,    0.7037,    0.7073,    0.6680,    0.7798},
1394{    0.4641,    0.3741,    0.6234,    0.3844,    0.3673,    0.5306,    0.6413,    0.5193,    0.5036,    0.5608},
1395{    0.5385,    0.9383,    1.1840,    0.4565,    1.7927,    0.8766,    0.7518,    0.5198,    0.5765,    1.0608},
1396{    0.8694,    1.0060,    1.8506,    0.7108,    1.7052,    1.3654,    1.2234,    0.6698,    0.8427,    1.4060},
1397{    0.6989,    0.9246,    1.7118,    0.6277,    1.6927,    1.0667,    0.9339,    0.7510,    0.7057,    1.2768},
1398{    0.1972,    0.5055,    0.6262,    0.1263,    0.7928,    0.7002,    0.4950,    0.4913,    0.2894,    0.4889},
1399
1400          },
1401        new double[][,]
1402          {     
1403            new double[,]
1404              {
1405{         0,    0.4127,    1.0287,    0.6741,    0.5630,    0.4325,    0.5722,    1.0336,    0.4752,    0.5617},
1406{    0.4127,         0,    0.6880,    0.3738,    0.2907,    0.1730,    0.4679,    0.8675,    0.4878,    0.1286},
1407{    1.0287,    0.6880,         0,    0.7937,    0.6606,    0.5323,    0.9538,    0.9634,    0.8138,    0.6381},
1408{    0.6741,    0.3738,    0.7937,         0,    0.3455,    0.1881,    0.6345,    0.9714,    0.7339,    0.3214},
1409{    0.5630,    0.2907,    0.6606,    0.3455,         0,    0.1313,    0.5056,    0.8485,    0.6038,    0.2630},
1410{    0.4325,    0.1730,    0.5323,    0.1881,    0.1313,         0,    0.3748,    0.6687,    0.4734,    0.1491},
1411{    0.5722,    0.4679,    0.9538,    0.6345,    0.5056,    0.3748,         0,    0.6955,    0.5871,    0.5059},
1412{    1.0336,    0.8675,    0.9634,    0.9714,    0.8485,    0.6687,    0.6955,         0,    0.9475,    0.6932},
1413{    0.4752,    0.4878,    0.8138,    0.7339,    0.6038,    0.4734,    0.5871,    0.9475,         0,    0.6046},
1414{    0.5617,    0.1286,    0.6381,    0.3214,    0.2630,    0.1491,    0.5059,    0.6932,    0.6046,         0},
1415              },
1416            new double[,]
1417              {
1418{    4.0023,    2.1261,    1.8626,    1.6054,    1.4771,    0.9102,    2.7697,    2.9858,    3.3730,    1.2556},
1419{    2.1261,    1.9372,    1.0981,    0.7172,    0.9121,    0.6569,    1.6947,    1.2703,    2.1250,    1.5231},
1420{    1.8626,    1.0981,    4.6784,    1.6055,    1.6490,    1.1138,    1.9438,    3.6140,    3.0330,    0.9581},
1421{    1.6054,    0.7172,    1.6055,    2.5635,    1.2584,    1.1688,    1.1565,    1.9117,    1.1689,    0.5622},
1422{    1.4771,    0.9121,    1.6490,    1.2584,    1.8469,    0.9049,    0.8350,    1.2221,    1.5977,    0.6577},
1423{    0.9102,    0.6569,    1.1138,    1.1688,    0.9049,    0.8258,    0.7611,    0.9541,    0.8954,    0.6253},
1424{    2.7697,    1.6947,    1.9438,    1.1565,    0.8350,    0.7611,    3.6346,    3.5720,    2.9305,    0.9789},
1425{    2.9858,    1.2703,    3.6140,    1.9117,    1.2221,    0.9541,    3.5720,    5.8240,    3.4327,    0.7368},
1426{    3.3730,    2.1250,    3.0330,    1.1689,    1.5977,    0.8954,    2.9305,    3.4327,    4.3277,    1.4057},
1427{    1.2556,    1.5231,    0.9581,    0.5622,    0.6577,    0.6253,    0.9789,    0.7368,    1.4057,    1.7151},
1428              },
1429          }
1430      );
1431      TestCovarianceFunction(cov, 1,
1432        new double[,]
1433          {
1434{    6.2342,    6.7795,   13.6134,    5.8887,   14.2405,   10.1987,    8.8183,    7.8217,    6.6344,    9.9609},
1435{    3.2242,    5.2384,    8.2928,    2.8624,   10.2826,    7.2613,    5.2743,    4.8651,    3.6758,    6.0948},
1436{    9.7926,   10.6338,   14.7280,    8.6537,   12.8640,   15.3218,   12.0130,    8.0240,    8.9653,   11.3359},
1437{    6.0497,    4.4825,   10.1916,    5.2725,    7.5223,    9.0848,    8.6907,    6.5563,    6.2868,    7.4352},
1438{    5.7877,    3.8005,    8.8010,    5.7766,    5.6360,    6.2037,    6.3872,    5.6164,    5.3671,    6.5321},
1439{    3.8501,    3.6110,    6.2543,    3.3286,    5.0963,    6.1672,    5.3421,    4.0085,    3.8812,    4.6925},
1440{    6.0719,    8.8301,   11.5124,    5.4433,   14.9080,   10.6099,    8.0304,    5.7589,    6.0753,    9.3107},
1441{    9.8306,   11.1183,   16.3892,    8.8231,   16.9213,   15.2084,   12.3844,    8.3980,    9.3789,   12.8390},
1442{    7.6019,    9.3580,   14.3105,    7.1044,   15.2800,   12.2846,    9.6031,    7.6887,    7.3699,   10.8667},
1443{    2.3372,    4.9884,    6.9233,    1.6100,    8.7070,    7.9328,    5.0646,    4.3597,    2.9643,    4.8145},
1444          },
1445        new double[][,]
1446          {           
1447            new double[,]
1448              {
1449{         0,    0.4881,    1.6583,    0.9692,    0.7827,    0.6522,    0.6841,    1.3942,    0.5367,    0.8270},
1450{    0.4881,         0,    1.1827,    0.5867,    0.3830,    0.2172,    0.5941,    1.5658,    0.5949,    0.1383},
1451{    1.6583,    1.1827,         0,    1.2171,    0.9340,    0.8047,    1.4579,    1.2131,    1.0263,    1.1349},
1452{    0.9692,    0.5867,    1.2171,         0,    0.4382,    0.2161,    1.0197,    1.5073,    1.2629,    0.5270},
1453{    0.7827,    0.3830,    0.9340,    0.4382,         0,    0.1488,    0.8534,    1.5465,    0.8372,    0.3717},
1454{    0.6522,    0.2172,    0.8047,    0.2161,    0.1488,         0,    0.5737,    1.2259,    0.7478,    0.1832},
1455{    0.6841,    0.5941,    1.4579,    1.0197,    0.8534,    0.5737,         0,    0.8230,    0.6981,    0.7909},
1456{    1.3942,    1.5658,    1.2131,    1.5073,    1.5465,    1.2259,    0.8230,         0,    1.2028,    1.5638},
1457{    0.5367,    0.5949,    1.0263,    1.2629,    0.8372,    0.7478,    0.6981,    1.2028,         0,    0.8770},
1458{    0.8270,    0.1383,    1.1349,    0.5270,    0.3717,    0.1832,    0.7909,    1.5638,    0.8770,         0},
1459              },
1460            new double[,]
1461              {
1462{   29.5729,   18.5805,   22.1876,   17.0550,   15.1746,   10.1428,   24.4678,   29.7604,   28.1516,   13.6594},
1463{   18.5805,   14.3139,   13.9483,    8.3170,    8.8785,    6.0953,   15.8990,   16.9410,   19.1490,   12.1067},
1464{   22.1876,   13.9483,   34.5691,   18.1905,   17.2281,   12.4415,   21.9535,   33.6266,   28.2630,   12.5918},
1465{   17.0550,    8.3170,   18.1905,   18.9418,   11.7900,    9.9253,   13.7325,   21.9184,   14.8634,    6.8107},
1466{   15.1746,    8.8785,   17.2281,   11.7900,   13.6471,    7.5799,   10.4142,   16.4592,   16.3685,    6.8676},
1467{   10.1428,    6.0953,   12.4415,    9.9253,    7.5799,    6.1018,    8.6086,   12.9238,   10.4507,    5.6783},
1468{   24.4678,   15.8990,   21.9535,   13.7325,   10.4142,    8.6086,   26.8561,   31.2335,   25.7489,   11.3079},
1469{   29.7604,   16.9410,   33.6266,   21.9184,   16.4592,   12.9238,   31.2335,   43.0336,   32.2012,   12.2815},
1470{   28.1516,   19.1490,   28.2630,   14.8634,   16.3685,   10.4507,   25.7489,   32.2012,   31.9778,   15.0663},
1471{   13.6594,   12.1067,   12.5918,    6.8107,    6.8676,    5.6783,   11.3079,   12.2815,   15.0663,   12.6728},
1472              },
1473          }
1474      , 5e-3);
1475    }
1476
1477
1478    private void TestCovarianceFunction(ICovarianceFunction cf, double hypValue, double[,] expectedCov, double[][,] expectedGradients, double delta = 1E-3) {
1479      var x = GetData();
1480      var xt = GetDataTest();
1481
1482      int nHyp = cf.GetNumberOfParameters(x.GetLength(1));
1483      var hyp = Enumerable.Repeat(hypValue, nHyp).ToArray();
1484      cf.SetParameter(hyp);
1485
1486      int rows0 = x.GetLength(0);
1487      int rows1 = xt.GetLength(0);
1488      var actualCov = new double[rows0, rows1];
1489      for (int i = 0; i < rows0; i++)
1490        for (int j = 0; j < rows1; j++)
1491          actualCov[i, j] = cf.GetCrossCovariance(x, xt, i, j);
1492
1493      AssertEqual(expectedCov, actualCov, delta);
1494
1495      for (int i = 0; i < rows0; i++)
1496        for (int j = 0; j < rows1; j++) {
1497          var g = cf.GetGradient(x, i, j).ToArray();
1498          for (int k = 0; k < nHyp; k++)
1499            Assert.AreEqual(expectedGradients[k][i, j], g[k], delta);
1500        }
1501    }
1502
1503
1504    private void TestMeanFunction(IMeanFunction mf, double hypValue, double[] expectedMean, double[][] expectedGradients) {
1505      var x = GetData();
1506      var xt = GetDataTest();
1507
1508      int nHyp = mf.GetNumberOfParameters(x.GetLength(1));
1509      var hyp = Enumerable.Repeat(hypValue, nHyp).ToArray();
1510      mf.SetParameter(hyp);
1511
1512      var m = mf.GetMean(xt);
1513
1514      AssertEqual(expectedMean, m);
1515
1516      for (int i = 0; i < nHyp; i++) {
1517        var g = mf.GetGradients(i, x);
1518        AssertEqual(expectedGradients[i], g);
1519      }
1520    }
1521
1522
1523    private void AssertEqual(double[] expected, double[] actual) {
1524      Assert.AreEqual(expected.Length, actual.Length);
1525      for (int i = 0; i < expected.Length; i++)
1526        Assert.AreEqual(expected[i], actual[i], 1E-3);
1527    }
1528    private void AssertEqual(double[,] expected, double[,] actual, double delta = 5e-3) {
1529      Assert.AreEqual(expected.Length, actual.Length);
1530      for (int i = 0; i < expected.GetLength(0); i++)
1531        for (int j = 0; j < expected.GetLength(1); j++)
1532          Assert.AreEqual(expected[i, j], actual[i, j], delta);
1533    }
1534
1535    private double[,] GetData() {
1536      return new double[,]
1537               {
1538                 {0.4173, 0.7803, 0.2348, 0.5470, 0.9294},
1539                 {0.0497, 0.3897, 0.3532, 0.2963, 0.7757},
1540                 {0.9027, 0.2417, 0.8212, 0.7447, 0.4868},
1541                 {0.9448, 0.4039, 0.0154, 0.1890, 0.4359},
1542                 {0.4909, 0.0965, 0.0430, 0.6868, 0.4468},
1543                 {0.4893, 0.1320, 0.1690, 0.1835, 0.3063},
1544                 {0.3377, 0.9421, 0.6491, 0.3685, 0.5085},
1545                 {0.9001, 0.9561, 0.7317, 0.6256, 0.5108},
1546                 {0.3692, 0.5752, 0.6477, 0.7802, 0.8176},
1547                 {0.1112, 0.0598, 0.4509, 0.0811, 0.7948}
1548               };
1549    }
1550
1551    private double[,] GetDataTest() {
1552      return new double[,]
1553               {
1554                 {0.6443, 0.2077, 0.3111, 0.5949, 0.0855},
1555                 {0.3786, 0.3012, 0.9234, 0.2622, 0.2625},
1556                 {0.8116, 0.4709, 0.4302, 0.6028, 0.8010},
1557                 {0.5328, 0.2305, 0.1848, 0.7112, 0.0292},
1558                 {0.3507, 0.8443, 0.9049, 0.2217, 0.9289},
1559                 {0.9390, 0.1948, 0.9797, 0.1174, 0.7303},
1560                 {0.8759, 0.2259, 0.4389, 0.2967, 0.4886},
1561                 {0.5502, 0.1707, 0.1111, 0.3188, 0.5785},
1562                 {0.6225, 0.2277, 0.2581, 0.4242, 0.2373},
1563                 {0.5870, 0.4357, 0.4087, 0.5079, 0.4588}
1564               };
1565    }
1566  }
1567}
Note: See TracBrowser for help on using the repository browser.