Ejemplo n.º 1
0
        public void quadric()
        {
            double func(Vector x) => x[0] * x[0];

            NewtonMethod sut = new NewtonMethod()
            {
                Function       = func,
                MaxError       = 1e-3,
                MinPointChange = 1e-3,
                Direction      = 0,
            };

            var result = sut.FindMinimum(makePoint(0.0));

            Assert.AreEqual(0.0, result.Value, 1e-3);
            Assert.AreEqual(0.0, result.Point[0], 1e-3);

            result = sut.FindMinimum(makePoint(2.0));

            Assert.AreEqual(0.0, result.Value, 1e-3);
            Assert.AreEqual(0.0, result.Point[0], 1e-3);

            result = sut.FindMinimum(makePoint(200.0));

            Assert.AreEqual(0.0, result.Value, 1e-3);
            Assert.AreEqual(0.0, result.Point[0], 1e-3);

            result = sut.FindMinimum(makePoint(-2000.0));

            Assert.AreEqual(0.0, result.Value, 1e-3);
            Assert.AreEqual(0.0, result.Point[0], 1e-3);
        }
Ejemplo n.º 2
0
        public void multimodal()
        {
            // x ^ 4 - 0.5 * x ^ 3 - 2 * x ^ 2;
            // max12 -> 0.0, 0.0
            // min1 -> (-0.83 ~0.01, -0.617 ~0.002)
            // min2 -> ( 1.20 ~0.01, -1.670 ~0.002)

            double func(Vector x) => x[0] * x[0] * (x[0] * x[0] - 0.5 * x[0] - 2.0);

            NewtonMethod sut = new NewtonMethod()
            {
                Function       = func,
                MaxError       = 1e-3,
                MinPointChange = 1e-3,
                Direction      = 0,
            };

            var result = sut.FindMinimum(makePoint(-100.0));

            Assert.AreEqual(-0.617, result.Value, 2e-3);
            Assert.AreEqual(-0.83, result.Point[0], 1e-2);

            result = sut.FindMinimum(makePoint(-0.01));

            Assert.AreEqual(-0.617, result.Value, 2e-3);
            Assert.AreEqual(-0.83, result.Point[0], 1e-2);

            result = sut.FindMinimum(makePoint(0.01));

            Assert.AreEqual(-1.670, result.Value, 2e-3);
            Assert.AreEqual(1.2, result.Point[0], 1e-2);

            result = sut.FindMinimum(makePoint(1.201));

            Assert.AreEqual(-1.670, result.Value, 2e-3);
            Assert.AreEqual(1.2, result.Point[0], 1e-2);

            result = sut.FindMinimum(makePoint(1000));

            Assert.AreEqual(-1.670, result.Value, 2e-3);
            Assert.AreEqual(1.2, result.Point[0], 1e-2);

            result = sut.FindMinimum(makePoint(0.0));

            Assert.AreEqual(-0.617, result.Value, 2e-3);
            Assert.AreEqual(-0.83, result.Point[0], 1e-2);
        }