Changeset 8477 for branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovariancePeriodic.cs
- Timestamp:
- 08/13/12 16:18:37 (12 years ago)
- Location:
- branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Algorithms.DataAnalysis merged: 8419,8421,8439,8448,8452,8455,8463-8465,8467,8471,8473,8475
- Property svn:mergeinfo changed
-
branches/HeuristicLab.TimeSeries/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovariancePeriodic.cs
r8417 r8477 35 35 [Storable] 36 36 private double sf2; 37 public double Scale { get { return sf2; } } 37 38 [Storable] 38 39 private double l; 40 public double Length { get { return l; } } 39 41 [Storable] 40 42 private double p; 43 public double Period { get { return p; } } 41 44 42 45 private bool symmetric; … … 74 77 this.p = Math.Exp(hyp[1]); 75 78 this.sf2 = Math.Exp(2 * hyp[2]); 76 77 sf2 = Math.Min(10E6, sf2); // upper limit for the scale 79 // sf2 = Math.Min(10E6, sf2); // upper limit for the scale 78 80 79 81 sd = null; … … 102 104 } 103 105 106 public double GetGradient(int i, int j, int k) { 107 double v = Math.PI * sd[i, j] / p; 108 switch (k) { 109 case 0: { 110 double newK = Math.Sin(v) / l; 111 newK = newK * newK; 112 return 4 * sf2 * Math.Exp(-2 * newK) * newK; 113 } 114 case 1: { 115 double r = Math.Sin(v) / l; 116 return 4 * sf2 / l * Math.Exp(-2 * r * r) * r * Math.Cos(v) * v; 117 } 118 case 2: { 119 double newK = Math.Sin(v) / l; 120 newK = newK * newK; 121 return 2 * sf2 * Math.Exp(-2 * newK); 104 122 105 public double[] GetDiagonalCovariances() { 106 if (x != xt) throw new InvalidOperationException(); 107 int rows = x.GetLength(0); 108 var cov = new double[rows]; 109 for (int i = 0; i < rows; i++) { 110 double k = Math.Sqrt(Util.SqrDist(Util.GetRow(x, i), Util.GetRow(xt, i))); 111 k = Math.PI * k / p; 112 k = Math.Sin(k) / l; 113 k = k * k; 114 cov[i] = sf2 * Math.Exp(-2.0 * k); 123 } 124 default: { 125 throw new ArgumentException("CovariancePeriodic only has three hyperparameters.", "k"); 126 } 115 127 } 116 return cov;117 }118 119 public double[] GetGradient(int i, int j) {120 121 var res = new double[3];122 double k = sd[i, j];123 k = Math.PI * k / p;124 {125 double newK = Math.Sin(k) / l;126 newK = newK * newK;127 res[0] = 4 * sf2 * Math.Exp(-2 * newK) * newK;128 }129 {130 double r = Math.Sin(k) / l;131 res[1] = 4 * sf2 / l * Math.Exp(-2 * r * r) * r * Math.Cos(k) * k;132 }133 {134 double newK = Math.Sin(k) / l;135 newK = newK * newK;136 res[2] = 2 * sf2 * Math.Exp(-2 * newK);137 }138 139 return res;140 128 } 141 129
Note: See TracChangeset
for help on using the changeset viewer.