private static double[,] CalculateL(double[,] x, ParameterizedCovarianceFunction cov, double sqrSigmaNoise)
        {
            int n = x.GetLength(0);
            var l = new double[n, n];

            // calculate covariances
            for (int i = 0; i < n; i++)
            {
                for (int j = i; j < n; j++)
                {
                    l[j, i] = cov.Covariance(x, i, j) / sqrSigmaNoise;
                    if (j == i)
                    {
                        l[j, i] += 1.0;
                    }
                }
            }

            // cholesky decomposition
            var res = alglib.trfac.spdmatrixcholesky(ref l, n, false);

            if (!res)
            {
                throw new ArgumentException("Matrix is not positive semidefinite");
            }
            return(l);
        }
Exemple #2
0
 private static IEnumerable <double> GetGradient(double[,] x, int i, int j, IEnumerable <int> columnIndices, double scale, ParameterizedCovarianceFunction cov,
                                                 bool fixedScale)
 {
     if (!fixedScale)
     {
         yield return(2 * scale * cov.Covariance(x, i, j));
     }
     foreach (var g in cov.CovarianceGradient(x, i, j))
     {
         yield return(scale * g);
     }
 }
Exemple #3
0
        private static IList <double> GetGradient(double[,] x, int i, int j, int[] columnIndices, double scale, ParameterizedCovarianceFunction cov,
                                                  bool fixedScale)
        {
            var gr = new List <double>((!fixedScale ? 1 : 0) + cov.CovarianceGradient(x, i, j).Count);

            if (!fixedScale)
            {
                gr.Add(2 * scale * cov.Covariance(x, i, j));
            }
            foreach (var g in cov.CovarianceGradient(x, i, j))
            {
                gr.Add(scale * g);
            }
            return(gr);
        }
    private static double[,] CalculateL(double[,] x, ParameterizedCovarianceFunction cov, double sqrSigmaNoise) {
      int n = x.GetLength(0);
      var l = new double[n, n];

      // calculate covariances
      for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
          l[j, i] = cov.Covariance(x, i, j) / sqrSigmaNoise;
          if (j == i) l[j, i] += 1.0;
        }
      }

      // cholesky decomposition
      var res = alglib.trfac.spdmatrixcholesky(ref l, n, false);
      if (!res) throw new ArgumentException("Matrix is not positive semidefinite");
      return l;
    }
 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, IEnumerable<int> columnIndices, double scale, ParameterizedCovarianceFunction cov,
   bool fixedScale) {
   if (!fixedScale) {
     yield return 2 * scale * cov.Covariance(x, i, j);
   }
   foreach (var g in cov.CovarianceGradient(x, i, j))
     yield return scale * g;
 }
 private static IList<double> GetGradient(double[,] x, int i, int j, int[] columnIndices, double scale, ParameterizedCovarianceFunction cov,
   bool fixedScale) {
   var gr = new List<double>((!fixedScale ? 1 : 0) + cov.CovarianceGradient(x, i, j).Count);
   if (!fixedScale) {
     gr.Add(2 * scale * cov.Covariance(x, i, j));
   }
   foreach (var g in cov.CovarianceGradient(x, i, j))
     gr.Add(scale * g);
   return gr;
 }