示例#1
0
    private static void test02()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    TEST02 tests VAN_DER_CORPUT_SEQUENCE.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    09 August 2016
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        const int N = 1;

        int i;

        double[] r = Array.Empty <double>();

        Console.WriteLine("");
        Console.WriteLine("TEST02");
        Console.WriteLine("  VAN_DER_CORPUT_SEQUENCE computes several elements of");
        Console.WriteLine("  a van der Corput sequence on a single call.");
        Console.WriteLine("");
        Console.WriteLine("  In this test, we call VAN_DER_CORPUT_SEQUENCE once.");

        const int base_ = 2;

        VanDerCorput.van_der_corput_base_set(base_);

        const int seed = 0;

        VanDerCorput.van_der_corput_seed_set(seed);

        VanDerCorput.van_der_corput_sequence(N, ref r);

        Console.WriteLine("");
        Console.WriteLine("  Element   van der Corput");
        Console.WriteLine("");

        for (i = 0; i < N; i++)
        {
            Console.WriteLine(i.ToString(CultureInfo.InvariantCulture).PadLeft(6) + "  "
                              + r[i].ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
        }
    }
示例#2
0
    private static void test06()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    TEST06 tests I4_TO_VAN_DER_CORPUT_SEQUENCE.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    09 August 2016
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        const int N = 10;

        int base_;

        double[] r = new double[N];

        Console.WriteLine("");
        Console.WriteLine("TEST06");
        Console.WriteLine("  I4_TO_VAN_DER_CORPUT_SEQUENCE returns N elements");
        Console.WriteLine("  of a van der Corput sequence to a given base.");
        Console.WriteLine("");
        Console.WriteLine("");
        Console.WriteLine("  Base    Seed   R");
        Console.WriteLine("");

        for (base_ = 2; base_ <= 5; base_++)
        {
            Console.WriteLine("");
            Console.WriteLine(base_.ToString(CultureInfo.InvariantCulture).PadLeft(6) + "");

            int seed = 0;

            VanDerCorput.i4_to_van_der_corput_sequence(seed, base_, N, ref r);

            int i;
            for (i = 0; i < N; i++)
            {
                Console.WriteLine("        "
                                  + (seed + i).ToString(CultureInfo.InvariantCulture).PadLeft(6) + "  "
                                  + r[i].ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
            }
        }
    }
示例#3
0
    private static void test05()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    TEST05 tests I4_TO_VAN_DER_CORPUT.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    09 August 2016
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int base_;

        Console.WriteLine("");
        Console.WriteLine("TEST05");
        Console.WriteLine("  I4_TO_VAN_DER_CORPUT returns the I-th element");
        Console.WriteLine("  of a van der Corput sequence to a given base.");
        Console.WriteLine("");
        Console.WriteLine("");
        Console.WriteLine("  Base    Seed   R");
        Console.WriteLine("");

        for (base_ = 2; base_ <= 5; base_++)
        {
            Console.WriteLine("");
            Console.WriteLine(base_.ToString(CultureInfo.InvariantCulture).PadLeft(6) + "");

            int seed;
            for (seed = 0; seed <= 10; seed++)
            {
                double r = VanDerCorput.i4_to_van_der_corput(seed, base_);

                Console.WriteLine("        "
                                  + seed.ToString(CultureInfo.InvariantCulture).PadLeft(6) + "  "
                                  + r.ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
            }
        }
    }
    public static void van_der_corput_values_test()
    //****************************************************************************80
    //
    //  Purpose:
    //
    //    VAN_DER_CORPUT_VALUES_TEST tests VAN_DER_CORPUT_VALUES.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    12 June 2007
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int    base_ = 0;
        int    seed  = 0;
        double value = 0;

        Console.WriteLine("");
        Console.WriteLine("VAN_DER_CORPUT_VALUES_TEST:");
        Console.WriteLine("  VAN_DER_CORPUT_VALUES stores values of");
        Console.WriteLine("  the van der Corput sequence in a given base.");
        Console.WriteLine("");
        Console.WriteLine("      BASE      SEED    VDC(BASE,SEED)");
        Console.WriteLine("");
        int n_data = 0;

        for (;;)
        {
            VanDerCorput.van_der_corput_values(ref n_data, ref base_, ref seed, ref value);
            if (n_data == 0)
            {
                break;
            }

            Console.WriteLine("  "
                              + base_.ToString().PadLeft(8) + "  "
                              + seed.ToString().PadLeft(8) + "  "
                              + value.ToString(CultureInfo.InvariantCulture).PadLeft(14) + "");
        }
    }
示例#5
0
    private static void test01()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    TEST01 tests VAN_DER_CORPUT.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    09 August 2016
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int i;

        Console.WriteLine("");
        Console.WriteLine("TEST01");
        Console.WriteLine("  VAN_DER_CORPUT computes the elements of a");
        Console.WriteLine("  van der Corput sequence.");
        Console.WriteLine("  Each call produces the next value.  By default,");
        Console.WriteLine("  the base is 2, and the sequence starts at element 1.");
        Console.WriteLine("");
        Console.WriteLine("  In this test, we call VAN_DER_CORPUT several times.");
        Console.WriteLine("");
        Console.WriteLine("  Seed   van der Corput");
        Console.WriteLine("");

        for (i = 1; i <= 10; i++)
        {
            int seed = VanDerCorput.van_der_corput_seed_get();

            double r = VanDerCorput.van_der_corput();

            Console.WriteLine(seed.ToString(CultureInfo.InvariantCulture).PadLeft(6) + "  "
                              + r.ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
        }
    }
示例#6
0
    private static void test09()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    TEST09 tests VDC_NUMERATOR_SEQUENCE.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    03 February 2011
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int n;

        Console.WriteLine("");
        Console.WriteLine("TEST09");
        Console.WriteLine("  VDC_NUMERATOR_SEQUENCE returns N elements");
        Console.WriteLine("  of a van der Corput numerator sequence in base 2.");
        Console.WriteLine("");
        Console.WriteLine("   N:  Sequence");
        Console.WriteLine("");

        for (n = 1; n <= 20; n++)
        {
            int[]  r    = VanDerCorput.vdc_numerator_sequence(n);
            string cout = "  " + n.ToString(CultureInfo.InvariantCulture).PadLeft(2) + ":";
            int    i;
            for (i = 0; i < n; i++)
            {
                cout += "  " + r[i].ToString(CultureInfo.InvariantCulture).PadLeft(2);
            }

            Console.WriteLine(cout);
        }
    }
示例#7
0
    private static void vdc_base_test()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    VDC_BASE_TEST tests VDC_BASE.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    10 August 2016
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int i;

        Console.WriteLine("");
        Console.WriteLine("VDC_BASE_TEST");
        Console.WriteLine("  VDC_BASE returns the I-th element of a van der Corput");
        Console.WriteLine("  sequence in base B.");
        Console.WriteLine("");
        Console.WriteLine("    I          VDC_BASE(I,2)   VDC_BASE(I,3)   VDC_BASE(I,5)");
        Console.WriteLine("");

        for (i = -10; i <= 10; i++)
        {
            double r2 = VanDerCorput.vdc_base(i, 2);
            double r3 = VanDerCorput.vdc_base(i, 3);
            double r5 = VanDerCorput.vdc_base(i, 5);
            Console.WriteLine("  " + i.ToString(CultureInfo.InvariantCulture).PadLeft(3)
                              + "        " + r2.ToString(CultureInfo.InvariantCulture).PadLeft(14)
                              + "  " + r3.ToString(CultureInfo.InvariantCulture).PadLeft(14)
                              + "  " + r5.ToString(CultureInfo.InvariantCulture).PadLeft(14) + "");
        }
    }
示例#8
0
    private static void vdc_inverse_test()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    VDC_INVERSE_TEST tests VDC_INVERSE.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    10 August 2016
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int i;

        Console.WriteLine("");
        Console.WriteLine("VDC_INVERSE_TEST");
        Console.WriteLine("  VDC_INVERSE inverts an element of a van der Corput sequence.");
        Console.WriteLine("");
        Console.WriteLine("    I        R=VDC(I)  VDC_INVERSE(R)");
        Console.WriteLine("");

        for (i = -10; i <= 10; i++)
        {
            double r  = VanDerCorput.vdc(i);
            int    i2 = VanDerCorput.vdc_inverse(r);
            Console.WriteLine("  " + i.ToString(CultureInfo.InvariantCulture).PadLeft(3)
                              + "  " + r.ToString(CultureInfo.InvariantCulture).PadLeft(14)
                              + "  " + i2.ToString(CultureInfo.InvariantCulture).PadLeft(3) + "");
        }
    }
示例#9
0
    private static void Main(string[] args)
    //****************************************************************************80
    //
    //  Purpose:
    //
    //    MAIN is the main program for VAN_DER_CORPUT_DATASET.
    //
    //  Discussion:
    //
    //    VAN_DER_CORPUT_DATASET generates a van der Corput dataset.
    //
    //    This program is meant to be used interactively.  It's also
    //    possible to prepare a simple input file beforehand and use it
    //    in batch mode.
    //
    //  Usage:
    //
    //    van_der_corput_dataset base seed n
    //
    //    where
    //
    //    * BASE, the base of the sequence;
    //    * SEED, the index of the first element to be computed;
    //    * N, the number of points to generate.
    //
    //    The program generates the data and writes it to the file
    //
    //      van_der_corput_BASE_SEED_N.txt
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    09 December 2009
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int base_;
        int n;
        int seed;

        Console.WriteLine("");
        Console.WriteLine("VAN_DER_CORPUT_DATASET");
        Console.WriteLine("");
        Console.WriteLine("  Generate a van der Corput dataset.");
        Console.WriteLine("");
        Console.WriteLine("  The program requests input values from the user:"******"");
        Console.WriteLine("  * BASE, the base,");
        Console.WriteLine("  * SEED, a positive integer.");
        Console.WriteLine("  * N, the number of points to generate,");
        Console.WriteLine("");
        Console.WriteLine("  The program generates the data, writes it to the file");
        Console.WriteLine("");
        Console.WriteLine("    van_der_corput_BASE_SEED_N.txt");
        Console.WriteLine("");
        //
        //  Get the BASE.
        //
        try
        {
            base_ = Convert.ToInt32(args[0]);
        }
        catch
        {
            Console.WriteLine("");
            Console.WriteLine("  Enter BASE, the van der Corput base,");
            Console.WriteLine("  which is often a prime number:");
            Console.WriteLine("  (Try '2' if you don't have a preference.)");
            base_ = Convert.ToInt32(Console.ReadLine());
        }

        Console.WriteLine("");
        Console.WriteLine("  BASE = " + base_ + "");
        //
        //  Get SEED.
        //
        try
        {
            seed = Convert.ToInt32(args[1]);
        }
        catch
        {
            Console.WriteLine("");
            Console.WriteLine("  Enter SEED, which is 0 or a positive integer.");
            Console.WriteLine("  (Try '0' or '1' if you don't have a preference.)");
            seed = Convert.ToInt32(Console.ReadLine());
        }

        Console.WriteLine("  SEED = " + seed + "");
        //
        //  Get N.
        //
        try
        {
            n = Convert.ToInt32(args[2]);
        }
        catch
        {
            Console.WriteLine("");
            Console.WriteLine("  Enter N, the number of points to generate:");
            Console.WriteLine("  (Try '25' if you don't have a preference.)");
            n = Convert.ToInt32(Console.ReadLine());
        }

        Console.WriteLine("  N = " + n + "");
        //
        //  Compute the data.
        //
        double[] r = new double[n];

        VanDerCorput.i4_to_van_der_corput_sequence(seed, base_, n, ref r);
        //
        //  Write the data to a file.
        //
        string output_filename = "van_der_corput_" + base_ + "_" + seed + "_" + n + ".txt";

        typeMethods.r8mat_write(output_filename, 1, n, r);

        Console.WriteLine("");
        Console.WriteLine("  The data was written to the file \""
                          + output_filename + "\".");

        Console.WriteLine("");
        Console.WriteLine("VAN_DER_CORPUT_DATASET:");
        Console.WriteLine("  Normal end of execution.");
        Console.WriteLine("");
    }
示例#10
0
    private static void test045()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    TEST045 tests VAN_DER_CORPUT, VAN_DER_CORPUT_SEED_GET, VAN_DER_CORPUT_SEED_SET.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    09 August 2016
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        int    i;
        double r;

        Console.WriteLine("");
        Console.WriteLine("TEST045");
        Console.WriteLine("  VAN_DER_CORPUT_SEED_GET gets the current seed.");
        Console.WriteLine("  VAN_DER_CORPUT_SEED_SET sets the current seed.");
        Console.WriteLine("");
        Console.WriteLine("  The van der Corput base is usually a prime, but this is");
        Console.WriteLine("  not required.");
        Console.WriteLine("");
        Console.WriteLine("  In this test, we compute a van der Corput sequence");
        Console.WriteLine("  starting with the default seed, then check the seed,");
        Console.WriteLine("  reset the seed, and recompute the sequence.");

        int base_ = 2;

        VanDerCorput.van_der_corput_base_set(base_);

        int seed = 0;

        VanDerCorput.van_der_corput_seed_set(seed);

        Console.WriteLine("");
        Console.WriteLine("  All computations will use base " + base_ + ".");
        Console.WriteLine("");

        seed = VanDerCorput.van_der_corput_seed_get();

        Console.WriteLine("");
        Console.WriteLine("  Set SEED = " + seed + "");
        Console.WriteLine("");
        Console.WriteLine("  Seed   van der Corput");
        Console.WriteLine("");

        for (i = 1; i <= 10; i++)
        {
            seed = VanDerCorput.van_der_corput_seed_get();

            r = VanDerCorput.van_der_corput();

            Console.WriteLine(seed.ToString(CultureInfo.InvariantCulture).PadLeft(6) + "  "
                              + r.ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
        }

        seed = VanDerCorput.van_der_corput_seed_get();

        Console.WriteLine("");
        Console.WriteLine("  Current seed is " + seed + "");
        Console.WriteLine("");

        seed = 100;
        VanDerCorput.van_der_corput_seed_set(seed);

        Console.WriteLine("");
        Console.WriteLine("  Set SEED = " + seed + "");
        Console.WriteLine("");
        Console.WriteLine("  Seed   van der Corput");
        Console.WriteLine("");

        for (i = 1; i <= 10; i++)
        {
            seed = VanDerCorput.van_der_corput_seed_get();

            r = VanDerCorput.van_der_corput();

            Console.WriteLine(seed.ToString(CultureInfo.InvariantCulture).PadLeft(6) + "  "
                              + r.ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
        }

        seed = VanDerCorput.van_der_corput_seed_get();

        Console.WriteLine("");
        Console.WriteLine("  Current seed is " + seed + "");
        Console.WriteLine("");

        seed = 3;
        VanDerCorput.van_der_corput_seed_set(seed);

        Console.WriteLine("");
        Console.WriteLine("  Reset seed to " + seed + "");
        Console.WriteLine("");
        Console.WriteLine("  Seed   van der Corput");
        Console.WriteLine("");

        for (i = 1; i <= 10; i++)
        {
            seed = VanDerCorput.van_der_corput_seed_get();

            r = VanDerCorput.van_der_corput();

            Console.WriteLine(seed.ToString(CultureInfo.InvariantCulture).PadLeft(6) + "  "
                              + r.ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
        }
    }
示例#11
0
    private static void test03()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    TEST03 tests VAN_DER_CORPUT_SEQUENCE, VAN_DER_CORPUT_SEED_GET, VAN_DER_CORPUT_SEED_SET.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    09 August 2016
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        const int NMAX = 10;

        int i;

        double[] r = new double[NMAX];

        Console.WriteLine("");
        Console.WriteLine("TEST03");
        Console.WriteLine("  VAN_DER_CORPUT_SEED_SET specifies the next element of");
        Console.WriteLine("    the van der Corput sequence to compute.");
        Console.WriteLine("  VAN_DER_CORPUT_SEED_GET reports the next element of the");
        Console.WriteLine("    van der Corput sequence that will be computed.");
        Console.WriteLine("");
        Console.WriteLine("  By default, the sequence starts at element 1.");
        Console.WriteLine("");
        Console.WriteLine("  In this test, we demonstrate computing elements");
        Console.WriteLine("  affects the seed, and how resetting the seed determines");
        Console.WriteLine("  the next element computed.");
        Console.WriteLine("");
        Console.WriteLine("  We start at element 0 and compute 10 elements.");
        Console.WriteLine("");

        int seed = 0;

        VanDerCorput.van_der_corput_seed_set(seed);

        int n = NMAX;

        VanDerCorput.van_der_corput_sequence(n, ref r);

        for (i = 0; i < n; i++)
        {
            Console.WriteLine((seed + i).ToString(CultureInfo.InvariantCulture).PadLeft(6) + " "
                              + r[i].ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
        }

        seed = VanDerCorput.van_der_corput_seed_get();

        Console.WriteLine("");
        Console.WriteLine("  The current seed is " + seed + "");

        Console.WriteLine("");
        Console.WriteLine("  We jump back to element 6 and compute 10 elements.");
        Console.WriteLine("");

        seed = 6;
        VanDerCorput.van_der_corput_seed_set(seed);

        n = NMAX;
        VanDerCorput.van_der_corput_sequence(n, ref r);

        for (i = 0; i < n; i++)
        {
            Console.WriteLine((seed + i).ToString(CultureInfo.InvariantCulture).PadLeft(6) + " "
                              + r[i].ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
        }

        seed = VanDerCorput.van_der_corput_seed_get();

        Console.WriteLine("");
        Console.WriteLine("  The current seed is " + seed + "");

        Console.WriteLine("");
        Console.WriteLine("  We restart at element 0 and compute 6 elements.");
        Console.WriteLine("");

        seed = 0;
        VanDerCorput.van_der_corput_seed_set(seed);

        n = 6;
        VanDerCorput.van_der_corput_sequence(n, ref r);

        for (i = 0; i < n; i++)
        {
            Console.WriteLine((seed + i).ToString(CultureInfo.InvariantCulture).PadLeft(6) + " "
                              + r[i].ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
        }

        seed = VanDerCorput.van_der_corput_seed_get();

        Console.WriteLine("");
        Console.WriteLine("  The current seed is " + seed + "");

        Console.WriteLine("");
        Console.WriteLine("  We jump to element 100 and compute 5 elements.");
        Console.WriteLine("");

        seed = 100;
        VanDerCorput.van_der_corput_seed_set(seed);

        n = 5;
        VanDerCorput.van_der_corput_sequence(n, ref r);

        for (i = 0; i < n; i++)
        {
            Console.WriteLine((seed + i).ToString(CultureInfo.InvariantCulture).PadLeft(6) + " "
                              + r[i].ToString(CultureInfo.InvariantCulture).PadLeft(10) + "");
        }

        seed = VanDerCorput.van_der_corput_seed_get();

        Console.WriteLine("");
        Console.WriteLine("  The current seed is " + seed + "");
    }
示例#12
0
    private static void vdc_sequence_test()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    VDC_SEQUENCE_TEST tests VDC_SEQUENCE.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    10 August 2016
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        Console.WriteLine("");
        Console.WriteLine("VDC_SEQUENCE_TEST");
        Console.WriteLine("  VDC_SEQUENCE returns elements I1 through I2 of");
        Console.WriteLine("  a van der Corput sequence.");

        int i1 = 7;
        int i2 = 7;
        int n  = 1;

        double[] r = VanDerCorput.vdc_sequence(i1, i2);
        Console.WriteLine("");
        typeMethods.r8vec_transpose_print(n, r, "  R=VDC_SEQUENCE(  7,  7):");

        i1 = 0;
        i2 = 8;
        n  = i2 + 1;
        r  = VanDerCorput.vdc_sequence(i1, i2);
        Console.WriteLine("");
        typeMethods.r8vec_transpose_print(n, r, "  R=VDC_SEQUENCE(  0,  8):");

        i1 = 8;
        i2 = 0;
        n  = Math.Abs(i2 - i1) + 1;
        r  = VanDerCorput.vdc_sequence(i1, i2);
        Console.WriteLine("");
        typeMethods.r8vec_transpose_print(n, r, "  R=VDC_SEQUENCE(  8,  0):");

        i1 = -3;
        i2 = +5;
        n  = Math.Abs(i2 - i1) + 1;
        r  = VanDerCorput.vdc_sequence(i1, i2);
        Console.WriteLine("");
        typeMethods.r8vec_transpose_print(n, r, "  R=VDC_SEQUENCE( -3,  5):");

        i1 = 100;
        i2 = 105;
        n  = Math.Abs(i2 - i1) + 1;
        r  = VanDerCorput.vdc_sequence(i1, i2);
        Console.WriteLine("");
        typeMethods.r8vec_transpose_print(n, r, "  R=VDC_SEQUENCE(100,105):");
    }