From f60f1f65d3b69bb65ef1ff4ea393677ab68dfea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gi=C3=B9=20Marcer?= Date: Fri, 15 May 2020 00:07:04 +0200 Subject: [PATCH] ex-5: modified A for-cycle has been implemented in order to produce a bunch of results with different numbers of function-calls which can now be plotted with plot.py, which has been added to the folder. --- ex-5/main.c | 121 ++++++++++++++++++++------------------- ex-5/plot.py | 20 +++++++ notes/images/MC_all.pdf | Bin 0 -> 17593 bytes notes/images/MC_few.pdf | Bin 0 -> 17229 bytes notes/images/MC_some.pdf | Bin 0 -> 17005 bytes notes/sections/3.md | 2 +- notes/sections/4.md | 2 +- notes/todo | 1 + 8 files changed, 85 insertions(+), 61 deletions(-) create mode 100644 ex-5/plot.py create mode 100644 notes/images/MC_all.pdf create mode 100644 notes/images/MC_few.pdf create mode 100644 notes/images/MC_some.pdf diff --git a/ex-5/main.c b/ex-5/main.c index cf05f46..bfb6014 100644 --- a/ex-5/main.c +++ b/ex-5/main.c @@ -5,88 +5,91 @@ #include -// Function which must be passed to the gsl_function. -double function (double * x, size_t dim, void * params){ - // Avoid warning when no parameters are passed to the function. - (void)(params); +// Wrapper for the gsl_function. +// +double function (double * x, size_t dim, void * params) + { return exp(x[0]); -} + } // Function which prints out the results when called. -void results (char *title, double result, double error) -{ - printf ("---------------------------\n%s\n", title); - printf ("result: % .10f\n", result); - printf ("sigma: % .10f\n", error); -} - - -int main(int argc, char** argv){ - - // If no argument is given is input, an error signal is displayed - // and the program quits. - - if (argc != 2) +// +void results (size_t calls, double result, double error) + { + if (calls != 0) { - fprintf(stderr, "usage: %s D\n", argv[0]); - fprintf(stderr, "Computes the integral generating D points.\n"); - return EXIT_FAILURE; + printf ("%ld\t", calls); } + printf ("%.10f\t", result); + printf ("%.10f\t", error); + } + +int main(int argc, char** argv) + { // Some useful variables. - double integral, error; - size_t calls = 5000; - size_t dims = 1; + // + size_t dims = 1; // Integral dimension double lower[1] = {0}; // Integration lower limit double upper[1] = {1}; // Integration upper limit + size_t calls = 5000; // Initial number of function calls + double integral, error; // Initialize an RNG. + // gsl_rng_env_setup(); gsl_rng *r = gsl_rng_alloc(gsl_rng_default); // Define GSL function. + // gsl_monte_function expo = {&function, dims, NULL}; expo.f = &function; expo.dim = 1; expo.params = NULL; - { - gsl_monte_vegas_state *s = gsl_monte_vegas_alloc (dims); - gsl_monte_vegas_integrate (&expo, lower, upper, dims, calls, - r, s, &integral, &error); - do { gsl_monte_vegas_integrate (&expo, lower, upper, dims, - calls/5, r, s, &integral, &error); - } while (fabs (gsl_monte_vegas_chisq (s) - 1.0) > 0.5); - - // Free memory. - gsl_monte_vegas_free(s); - - // Display results - results("Vegas", integral, error); - } - - { - gsl_monte_miser_state *s = gsl_monte_miser_alloc (dims); - gsl_monte_miser_integrate (&expo, lower, upper, dims, calls, - r, s, &integral, &error); - // Free memory. - gsl_monte_miser_free (s); - - // Display results - results ("Miser", integral, error); - } - - { - gsl_monte_plain_state *s = gsl_monte_plain_alloc (dims); + // Compute the integral for the following number of function calls: + // 50 + // 500 + // 5'000 + // 50'000 + // 500'000 + // 5'000'000 + // 50'000'000 + // with the three MC methods: plain MC, MISER and VEGAS. + // + while (calls < 50000001) + { + // Plain MC + gsl_monte_plain_state *sMC = gsl_monte_plain_alloc (dims); gsl_monte_plain_integrate (&expo, lower, upper, dims, calls, - r, s, &integral, &error); - // Display results - results ("Montecarlo", integral, error); + r, sMC, &integral, &error); + gsl_monte_plain_free(sMC); + results(calls, integral, error); - // Free memory. - gsl_monte_plain_free (s); - } + // MISER + gsl_monte_miser_state *sMI = gsl_monte_miser_alloc (dims); + gsl_monte_miser_integrate (&expo, lower, upper, dims, calls, + r, sMI, &integral, &error); + gsl_monte_miser_free(sMI); + results(0, integral, error); + + // VEGAS + gsl_monte_vegas_state *sVE = gsl_monte_vegas_alloc (dims); + gsl_monte_vegas_integrate (&expo, lower, upper, dims, calls, + r, sVE, &integral, &error); + do + { + gsl_monte_vegas_integrate (&expo, lower, upper, dims, + calls/5, r, sVE, &integral, &error); + } while (fabs (gsl_monte_vegas_chisq (sVE) - 1.0) > 0.5); + gsl_monte_vegas_free(sVE); + results(0, integral, error); + + // Update function calls + printf ("\n"); + calls = calls*10; + } // Free memory. gsl_rng_free(r); diff --git a/ex-5/plot.py b/ex-5/plot.py new file mode 100644 index 0000000..4c74c51 --- /dev/null +++ b/ex-5/plot.py @@ -0,0 +1,20 @@ +import matplotlib.pyplot as plt +import numpy as np +import sys + +calls, I_MC, σ_MC, I_MI, σ_MI, I_VE, σ_VE = np.loadtxt(sys.stdin, unpack=True) +exact = 1.7182818285 + +plt.rcParams['font.size'] = 17 +plt.figure() +plt.title('Plain MC', loc='right') +plt.ylabel('$I^{oss}$') +plt.xlabel('calls') +plt.axhline(y=exact, color='#c556ea', linestyle='-', label='Exact value') + +plt.errorbar(calls, I_MC, linestyle='', marker='o', yerr=σ_MC, color='#92182b', label='Plain MC') +plt.errorbar(calls, I_MI, linestyle='', marker='o', yerr=σ_MI, color='black', label='MISER') +plt.errorbar(calls, I_VE, linestyle='', marker='o', yerr=σ_VE, color='gray', label='VEGAS') + +plt.legend() +plt.show() diff --git a/notes/images/MC_all.pdf b/notes/images/MC_all.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6363da3c01c690f3ecce4fa3db7e7ae3fe5b0ea3 GIT binary patch literal 17593 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 rEs?