ex-5: add header to the results table

This commit is contained in:
Michele Guerini Rocco 2020-05-24 22:04:31 +02:00
parent f6e048496f
commit f73c9b14b3
3 changed files with 30 additions and 34 deletions

View File

@ -155,27 +155,10 @@ and `-b`.
### Exercise 5 ### Exercise 5
`ex-5/main` compute estimations of the integral of exp(x) between 0 and 1 `ex-5/main` compute estimations of the integral of exp(x) between 0 and 1
with the methods plain MC, MISER and VEGAS with different number of points. using several methods: a plain Monte Carlo, the MISER and VEGAS algorithms
It takes no arguments in input. with different number of samples. The program takes no arguments and prints
It prints out eight columns: a table of the result and its error for each method.
To visualise the results, you can plot the table by doing:
1. the number of points;
2. the integral estimation with plain MC;
3. its uncertainty;
4. the integral estimation with MISER;
5. its uncertainty;
6. the integral estimation with VEGAS;
7. its uncertainty;
8. its χ².
To plot the results do:
$ ex-5/main | ex-5/plot.py $ ex-5/main | ex-5/plot.py
@ -214,7 +197,7 @@ The program accepts some parameters to control the histogram and number of
events, run it with `-h` to see their usage. events, run it with `-h` to see their usage.
(optional) `ex-6/plots/emd.py` makes the plots of the EMD statistics of the RL (optional) `ex-6/plots/emd.py` makes the plots of the EMD statistics of the RL
deconvolution (shown in excercies.pdf, section 6.6) as a function of the number deconvolution (shown in exercises.pdf, section 6.6) as a function of the number
of rounds. The programs sources its data from two files in the same directory, of rounds. The programs sources its data from two files in the same directory,
these were obtained by running `ex-6/bin/test`. Do: these were obtained by running `ex-6/bin/test`. Do:

View File

@ -5,7 +5,7 @@
#include <math.h> #include <math.h>
// Wrapper for the gsl_function. // exp() wrapper for the gsl_function structure
// //
double function (double * x, size_t dim, void * params) double function (double * x, size_t dim, void * params)
{ {
@ -19,13 +19,13 @@ void results (size_t calls, double result, double error, double chi)
{ {
if (calls != 0) if (calls != 0)
{ {
printf ("%.0e\t", (double)calls); printf ("%6.0e | ", (double)calls);
} }
printf ("%.10f\t", result); printf ("%5f | ", result);
printf ("%.10f\t", error); printf ("%5f | ", error);
if (chi != 0) if (chi != 0)
{ {
printf ("%.3f\t", chi); printf ("%5f", chi);
} }
} }
@ -52,6 +52,12 @@ int main(int argc, char** argv)
expo.dim = 1; expo.dim = 1;
expo.params = NULL; expo.params = NULL;
// Print the results table header
printf(" Calls | Plain | Error | MISER |"
" Error | VEGAS | Error | χ²\n");
printf(" ------|----------|----------|----------|"
"----------|----------|----------|---------\n");
// Compute the integral for the following number of function calls: // Compute the integral for the following number of function calls:
// 50 // 50
// 500 // 500
@ -62,7 +68,7 @@ int main(int argc, char** argv)
// 50'000'000 // 50'000'000
// with the three MC methods: plain MC, MISER and VEGAS. // with the three MC methods: plain MC, MISER and VEGAS.
// //
while (calls < 50000001) while (calls <= 5000000)
{ {
// Plain MC // Plain MC
gsl_monte_plain_state *sMC = gsl_monte_plain_alloc (dims); gsl_monte_plain_state *sMC = gsl_monte_plain_alloc (dims);

View File

@ -4,19 +4,26 @@ import matplotlib.pyplot as plt
import numpy as np import numpy as np
import sys import sys
calls, I_MC, σ_MC, I_MI, σ_MI, I_VE, σ_VE, chi = np.loadtxt(sys.stdin, unpack=True) table = np.loadtxt(sys.stdin, unpack=True, skiprows=2, delimiter='|')
calls, I_MC, σ_MC, I_MI, σ_MI, I_VE, σ_VE, chi = table
exact = 1.7182818285 exact = 1.7182818285
plt.rcParams['font.size'] = 17 plt.rcParams['font.size'] = 17
plt.figure() plt.figure()
plt.title('Plain MC', loc='right') plt.title('Plain MC', loc='right')
plt.ylabel('$I^{oss}$') plt.ylabel('$I^{oss}$')
plt.xlabel('calls') plt.xlabel('calls')
plt.axhline(y=exact, color='#c556ea', linestyle='-', label='Exact value') plt.xscale('log')
plt.errorbar(calls, I_MC, linestyle='', marker='o', yerr=σ_MC, color='#92182b', label='Plain MC') plt.axhline(y=exact, color='#c556ea', linestyle='-',
plt.errorbar(calls, I_MI, linestyle='', marker='o', yerr=σ_MI, color='black', label='MISER') label='Exact value')
plt.errorbar(calls, I_VE, linestyle='', marker='o', yerr=σ_VE, color='gray', label='VEGAS') 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.legend()
plt.show() plt.show()