Ejemplo n.º 1
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void solverTest()
        public virtual void solverTest()
        {
            double[] w = new double[] { 0.01, 0.5, 0.3, 0.19 };
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int n = w.length;
            int n = w.Length;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final SumToOne trans = new SumToOne(n);
            SumToOne trans = new SumToOne(n);

            System.Func <DoubleArray, DoubleArray> func = (DoubleArray theta) =>
            {
                return(trans.transform(theta));
            };

            DoubleArray sigma = DoubleArray.filled(n, 1e-4);
            DoubleArray start = DoubleArray.filled(n - 1, 0.8);

            LeastSquareResults res = SOLVER.solve(DoubleArray.copyOf(w), sigma, func, start);

            assertEquals("chi sqr", 0.0, res.ChiSq, 1e-9);
            double[] fit      = res.FitParameters.toArray();
            double[] expected = trans.inverseTransform(w);
            for (int i = 0; i < n - 1; i++)
            {
                //put the fit result back in the range 0 - pi/2
                double x = fit[i];
                if (x < 0)
                {
                    x = -x;
                }
                if (x > Math.PI / 2)
                {
                    int p = (int)(x / Math.PI);
                    x -= p * Math.PI;
                    if (x > Math.PI / 2)
                    {
                        x = -x + Math.PI;
                    }
                }

                assertEquals(expected[i], x, 1e-9);
            }
        }
Ejemplo n.º 2
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void inverseTransformTest()
        public virtual void inverseTransformTest()
        {
            for (int n = 2; n < 13; n++)
            {
                double[] theta = new double[n - 1];
                for (int j = 0; j < n - 1; j++)
                {
                    theta[j] = RANDOM.NextDouble() * Math.PI / 2;
                }
                SumToOne    trans = new SumToOne(n);
                DoubleArray w     = trans.transform(DoubleArray.copyOf(theta));

                DoubleArray theta2 = trans.inverseTransform(w);
                for (int j = 0; j < n - 1; j++)
                {
                    assertEquals("element " + j + ", of vector length " + n, theta[j], theta2.get(j), 1e-9);
                }
            }
        }