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"); }
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"); }