Changeset 17325 for branches/2994-AutoDiffForIntervals/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/IntervalEvaluatorAutoDiffTest.cs
- Timestamp:
- 10/09/19 11:13:11 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2994-AutoDiffForIntervals/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/IntervalEvaluatorAutoDiffTest.cs
r17319 r17325 61 61 var eval = new IntervalEvaluator(); 62 62 var parser = new InfixExpressionParser(); 63 var intervals = new Dictionary<string, Interval>() { 64 { "x", new Interval(1, 2) }, 65 { "unit", new Interval(0, 1) }, 66 { "neg", new Interval(-1, 0) }, 67 }; 63 68 var t = parser.Parse("sqr(x)"); 64 69 var paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray(); 65 var intervals = new Dictionary<string, Interval>() { 66 { "x", new Interval(1, 2) }, 67 { "y", new Interval(0, 1) } 68 }; 69 var r = eval.Evaluate(t, intervals, paramNodes, out double[] lg, out double[] ug); 70 // TODO 71 // Assert.AreEqual(XXX, r.LowerBound); 72 // Assert.AreEqual(XXX, r.UpperBound); 73 // 74 // Assert.AreEqual(XXX, lg[0]); // x 75 // Assert.AreEqual(XXX, ug[0]); 76 // 77 // for { "x", new Interval(1, 2) }, 78 // { "y", new Interval(0, 1) }, 79 // 80 // 0 <> -2,50012500572888E-05 for y in SQR(LOG('y')) 81 // 0 <> 2, 49987500573946E-05 for x in SQR(LOG('x')) 70 var r = eval.Evaluate(t, intervals, paramNodes, out double[] lg, out double[] ug); 71 Assert.AreEqual(1, r.LowerBound); 72 Assert.AreEqual(4, r.UpperBound); 73 74 Assert.AreEqual(2.0, lg[0]); // x 75 Assert.AreEqual(8.0, ug[0]); 76 77 t = parser.Parse("sqr(log(unit))"); 78 paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray(); 79 r = eval.Evaluate(t, intervals, paramNodes, out lg, out ug); 80 Assert.AreEqual(0.0, r.LowerBound); 81 Assert.AreEqual(double.PositiveInfinity, r.UpperBound); 82 83 Assert.AreEqual(0.0, lg[0]); // x 84 Assert.AreEqual(double.NaN, ug[0]); 85 82 86 } 83 87 … … 126 130 var eval = new IntervalEvaluator(); 127 131 var parser = new InfixExpressionParser(); 132 var intervals = new Dictionary<string, Interval>() { 133 { "x", new Interval(3, 4) }, 134 { "z", new Interval(1, 2) } 135 }; 128 136 var t = parser.Parse("cos(x)"); 129 137 var paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray(); 130 var intervals = new Dictionary<string, Interval>() {131 { "x", new Interval(3, 4) },132 };133 138 var r = eval.Evaluate(t, intervals, paramNodes, out double[] lg, out double[] ug); 134 139 Assert.AreEqual(-1, r.LowerBound); // 3..4 crosses pi and cos(pi) == -1 … … 137 142 Assert.AreEqual(0, lg[0]); // x 138 143 Assert.AreEqual(-4 * Math.Sin(4), ug[0]); 144 145 t = parser.Parse("LOG(COS('z'))"); 146 paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray(); 147 r = eval.Evaluate(t, intervals, paramNodes, out lg, out ug); 148 Assert.AreEqual(double.NaN, r.LowerBound); 149 Assert.AreEqual(Math.Log(Math.Cos(1)), r.UpperBound); 150 151 Assert.AreEqual(-2 * Math.Sin(2) / Math.Cos(2), lg[0], 1e-5); // x 152 Assert.AreEqual(-1 * Math.Sin(1) / Math.Cos(1), ug[0], 1e-5); 153 139 154 } 140 155 … … 182 197 r = eval.Evaluate(t, intervals, paramNodes, out lg, out ug); 183 198 184 Assert.AreEqual(0.5 * Math.Sqrt(1e-10), lg[0], 1e- 6); // z--> lim x -> 0 (sqrt(x)) = 0199 Assert.AreEqual(0.5 * Math.Sqrt(1e-10), lg[0], 1e-5); // --> lim x -> 0 (sqrt(x)) = 0 185 200 Assert.AreEqual(0.5, ug[0], 1e-5); 201 202 t = parser.Parse("sqrt(y - z)"); // 1..2 - 0..1 203 paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray(); 204 r = eval.Evaluate(t, intervals, paramNodes, out lg, out ug); 205 Assert.AreEqual(0, r.LowerBound); 206 Assert.AreEqual(Math.Sqrt(2), r.UpperBound); 207 208 Assert.AreEqual(double.PositiveInfinity, lg[0], 1e-5); // y 209 Assert.AreEqual(1/ Math.Sqrt(2) , ug[0], 1e-5); 210 Assert.AreEqual(double.NegativeInfinity, lg[1], 1e-5); // z 211 Assert.AreEqual(0.0 , ug[1], 1e-5); 186 212 } 187 213
Note: See TracChangeset
for help on using the changeset viewer.