Example #1
0
    private static void correlation_test06()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    CORRELATION_TEST06 plots sample paths with SAMPLE_PATHS2_CHOLESKY/EIGEN/FFT.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    12 November 2012
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        Console.WriteLine("");
        Console.WriteLine("CORRELATION_TEST06");
        Console.WriteLine("  For non-stationary correlation functions:");
        Console.WriteLine("");
        Console.WriteLine("  SAMPLE_PATHS2_CHOLESKY generates sample paths from the");
        Console.WriteLine("  correlation matrix, factored using the Cholesky factor.");
        Console.WriteLine("  It requires that the correlation matrix is nonnegative definite.");
        Console.WriteLine("");
        Console.WriteLine("  SAMPLE_PATHS2_EIGEN generates sample paths from the");
        Console.WriteLine("  correlation matrix, factored using the eigen factorization.");
        Console.WriteLine("  If the correlation matrix is not nonnegative definite,");
        Console.WriteLine("  we simply suppress negative eigenvalues.");
        Console.WriteLine("");
        Console.WriteLine("  SAMPLE_PATHS2_FFT generates sample paths from the");
        Console.WriteLine("  correlation matrix, factored using the FFT factorization");
        Console.WriteLine("  of the correlation matrix after embedding in a circulant.");
        Console.WriteLine("");

        /*
         * brownian
         */
        const int    n      = 101;
        const int    n2     = 3;
        const double rhomin = 0.0;
        const double rhomax = 10.0;
        const double rho0   = 1.0;
        int          seed   = 123456789;

        typeMethods.r8vecNormalData data = new();
        double[] x   = SamplePaths.sample_paths2_cholesky(n, n2, rhomin, rhomax, rho0, Correlation.correlation_brownian, ref data, ref seed);
        double[] rho = typeMethods.r8vec_linspace_new(n, rhomin, rhomax);
        Paths.paths_plot(n, n2, rho, x, "brownian", "Brownian correlation");
    }
Example #2
0
    private static void correlation_test02()

    //****************************************************************************80
    //
    //  Purpose:
    //
    //    CORRELATION_TEST02 plots sample paths with SAMPLE_PATHS_CHOLESKY.
    //
    //  Discussion:
    //
    //    Most paths will be blue, but make the LAST one red so that there will
    //    always be one distinguished path that is easy to follow.
    //
    //  Licensing:
    //
    //    This code is distributed under the GNU LGPL license.
    //
    //  Modified:
    //
    //    11 November 2012
    //
    //  Author:
    //
    //    John Burkardt
    //
    {
        const double rho0   = 1.0;
        const double rhomax = 10.0;
        const double rhomin = 0.0;

        Console.WriteLine("");
        Console.WriteLine("CORRELATION_TEST02");
        Console.WriteLine("  SAMPLE_PATHS_CHOLESKY generates sample paths from the");
        Console.WriteLine("  correlation matrix, factored using the Cholesky factor.");
        Console.WriteLine("  It requires that the correlation matrix is nonnegative definite.");
        Console.WriteLine("");
        Console.WriteLine("  SAMPLE_PATHS_EIGEN generates sample paths from the");
        Console.WriteLine("  correlation matrix, factored using the eigen factorization.");
        Console.WriteLine("  If the correlation matrix is not nonnegative definite,");
        Console.WriteLine("  we simply suppress negative eigenvalues.");
        Console.WriteLine("");

        FullertonLib.BesselData globaldata = new();

        const int n  = 101;
        const int n2 = 3;

        double[] rho = typeMethods.r8vec_linspace_new(n, rhomin, rhomax);
        //
        //  besselj
        //  Use EIGEN, because CHOLESKY fails.
        //
        int seed = 123456789;

        typeMethods.r8vecNormalData   data  = new();
        FullertonLib.r8BESJ0Data      jdata = new();
        Correlation.CorrelationResult tr    = SamplePaths.sample_paths_eigen(globaldata, jdata, n, n2, rhomax, rho0, Correlation.correlation_besselj, ref data, ref seed);
        globaldata = tr.data;
        double[] x = tr.result;
        jdata = tr.j0data;
        Paths.paths_plot(n, n2, rho, x, "besselj", "Bessel J correlation");
        //
        //  besselk
        //
        seed = 123456789;
        FullertonLib.r8BESK1Data k1data = new();
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_besselk, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "besselk", "Bessel K correlation");
        //
        //  circular
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_circular, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "circular", "Circular correlation");
        //
        //  constant
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_constant, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "constant", "Constant correlation");
        //
        //  cubic
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_cubic, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "cubic", "Cubic correlation");
        //
        //  damped_cosine
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_damped_cosine, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "damped_cosine", "Damped cosine correlation");
        //
        //  damped_sine
        //  Use EIGEN, because CHOLESKY fails.
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_eigen(globaldata, jdata, n, n2, rhomax, rho0, Correlation.correlation_damped_sine, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        jdata      = tr.j0data;
        Paths.paths_plot(n, n2, rho, x, "damped_sine", "Damped sine correlation");
        //
        //  exponential
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_exponential, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "exponential", "Exponential correlation");
        //
        //  gaussian
        //  Use EIGEN, because CHOLESKY fails.
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_eigen(globaldata, jdata, n, n2, rhomax, rho0, Correlation.correlation_gaussian, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        jdata      = tr.j0data;
        Paths.paths_plot(n, n2, rho, x, "gaussian", "Gaussian correlation");
        //
        //  hole
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_hole, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "hole", "Hole correlation");
        //
        //  linear
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_linear, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "linear", "Linear correlation");
        //
        //  matern ( nu = 2.5 )
        //
        seed = 123456789;
        FullertonLib.r8BESKData kdata = new();
        tr         = SamplePaths.sample_paths_cholesky(globaldata, kdata, n, n2, rhomax, rho0, Correlation.correlation_matern, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        kdata      = tr.kdata;
        Paths.paths_plot(n, n2, rho, x, "matern", "Matern correlation (nu=2.5)");
        //
        //  pentaspherical
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_pentaspherical, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "pentaspherical", "Pentaspherical correlation");
        //
        //  power ( e = 2.0 )
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_power, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "power", "Power correlation (e=2.0)");
        //
        //  rational_quadratic
        //  Use EIGEN, because CHOLESKY fails.
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_eigen(globaldata, jdata, n, n2, rhomax, rho0, Correlation.correlation_rational_quadratic, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        jdata      = tr.j0data;
        Paths.paths_plot(n, n2, rho, x, "rational_quadratic", "Rational quadratic correlation");
        //
        //  spherical
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_spherical, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "spherical", "Spherical correlation");
        //
        //  white_noise
        //
        seed       = 123456789;
        tr         = SamplePaths.sample_paths_cholesky(globaldata, k1data, n, n2, rhomax, rho0, Correlation.correlation_white_noise, ref data, ref seed);
        globaldata = tr.data;
        x          = tr.result;
        k1data     = tr.k1data;
        Paths.paths_plot(n, n2, rho, x, "white_noise", "White noise correlation");
    }