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);
        }
Ejemplo n.º 2
0
        // 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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        // 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);
        }