public void EvaluatesCorrectly() { var expected = Math.Sin(Math.Cos(15)) + Math.Sin(1) * Math.Cos(2); _term.Evaluate(null).ShouldBe(expected, Tolerance); _term.Evaluate(new double[10][]).ShouldBe(expected, Tolerance); }
// Make iteration until method converges with given epsilon private void IterateUntilConverges(ITerm minF, ITerm[][] minFGrad, ITerm[][] f, double[][] values) { var k = 0; var i = 0; double[][] xDiff; do { i++; var newValues = RecalculateValues(minFGrad, values); while (minF.Evaluate(newValues) >= minF.Evaluate(values)) { k++; _parameters.Alpha *= _parameters.Lambda; newValues = RecalculateValues(minFGrad, values); } var previousX = values; values = newValues; WriteIterationInfo(i, minF, f, values, k); xDiff = previousX; xDiff.Subtract(values); } while (!Converged(xDiff)); }
public void EvaluatesCorrectly() { double[][] input = { new[] { 1d } }; var actual = _term.Evaluate(input); var expected = Math.Pow(Math.Sin(1), Math.Cos(1)); actual.ShouldBe(expected); }
// Write info about iteration i private void WriteIterationInfo(int i, ITerm minF, ITerm[][] f, double[][] values, int k) { var fValues = f.Evaluate(values); var residual = fValues.Norm3(); var minFValue = minF.Evaluate(values); _streamWriter.WriteLine( $"{i,3}{values[0][0],15:G6}{values[1][0],15:G6}{_parameters.Alpha,15:G6}{residual,15:G6}{fValues[0][0],15:G6}{fValues[1][0],15:G6}{minFValue,15:G6}{k,3}"); }
public void EvaluatesCorrectly() { var expected = Math.Sin(2) / Math.Cos(3); var values = new[] { new[] { 2d }, new[] { 3d } }; Assert.Throws <NullReferenceException>(() => _term.Evaluate(null)); Assert.Throws <NullReferenceException>(() => _term.Evaluate(new double[10][])); Assert.Throws <IndexOutOfRangeException>(() => _term.Evaluate(new[] { new[] { 2d, 3d } })); _term.Evaluate(values).ShouldBe(expected, Tolerance); }