In [97]:
def is_main_module():
    """
    Returns whether this notebook is the main module
    ie not being run from another notebook
    """
    return __name__ == '__main__' and '__file__' not in globals()

In [98]:
is_main_module()


Out[98]:
True

In [88]:
import numpy as np
import matplotlib.pyplot as plt
from math import pi as real_pi_value

Get an estimation of Pi


In [101]:
def approximate_pi(n_samples=1000):
    """Approximate the ratio of a circle's perimeter to it's diameter using a Monte Carlo method"""
    if not (n_samples) is int:
        n_samples = int(n_samples)
    X = np.random.uniform(-1, 1, n_samples)
    Y = np.random.uniform(-1, 1, n_samples)

    return 4 * (X**2 + Y**2 <= 1).sum() / n_samples

In [103]:
if is_main_module():
    print(approximate_pi())


3.148

In [104]:
best_pi_approximation = approximate_pi(10**8)
best_pi_approximation


Out[104]:
3.14163024

Plot the evolution of accuracy with the number of samples

Dev Sandbox


In [106]:
if is_main_module():
    X = np.linspace(1, 10**5, num=10**3)
    print(X)


[  1.00000000e+00   1.01099099e+02   2.01198198e+02   3.01297297e+02
   4.01396396e+02   5.01495495e+02   6.01594595e+02   7.01693694e+02
   8.01792793e+02   9.01891892e+02   1.00199099e+03   1.10209009e+03
   1.20218919e+03   1.30228829e+03   1.40238739e+03   1.50248649e+03
   1.60258559e+03   1.70268468e+03   1.80278378e+03   1.90288288e+03
   2.00298198e+03   2.10308108e+03   2.20318018e+03   2.30327928e+03
   2.40337838e+03   2.50347748e+03   2.60357658e+03   2.70367568e+03
   2.80377477e+03   2.90387387e+03   3.00397297e+03   3.10407207e+03
   3.20417117e+03   3.30427027e+03   3.40436937e+03   3.50446847e+03
   3.60456757e+03   3.70466667e+03   3.80476577e+03   3.90486486e+03
   4.00496396e+03   4.10506306e+03   4.20516216e+03   4.30526126e+03
   4.40536036e+03   4.50545946e+03   4.60555856e+03   4.70565766e+03
   4.80575676e+03   4.90585586e+03   5.00595495e+03   5.10605405e+03
   5.20615315e+03   5.30625225e+03   5.40635135e+03   5.50645045e+03
   5.60654955e+03   5.70664865e+03   5.80674775e+03   5.90684685e+03
   6.00694595e+03   6.10704505e+03   6.20714414e+03   6.30724324e+03
   6.40734234e+03   6.50744144e+03   6.60754054e+03   6.70763964e+03
   6.80773874e+03   6.90783784e+03   7.00793694e+03   7.10803604e+03
   7.20813514e+03   7.30823423e+03   7.40833333e+03   7.50843243e+03
   7.60853153e+03   7.70863063e+03   7.80872973e+03   7.90882883e+03
   8.00892793e+03   8.10902703e+03   8.20912613e+03   8.30922523e+03
   8.40932432e+03   8.50942342e+03   8.60952252e+03   8.70962162e+03
   8.80972072e+03   8.90981982e+03   9.00991892e+03   9.11001802e+03
   9.21011712e+03   9.31021622e+03   9.41031532e+03   9.51041441e+03
   9.61051351e+03   9.71061261e+03   9.81071171e+03   9.91081081e+03
   1.00109099e+04   1.01110090e+04   1.02111081e+04   1.03112072e+04
   1.04113063e+04   1.05114054e+04   1.06115045e+04   1.07116036e+04
   1.08117027e+04   1.09118018e+04   1.10119009e+04   1.11120000e+04
   1.12120991e+04   1.13121982e+04   1.14122973e+04   1.15123964e+04
   1.16124955e+04   1.17125946e+04   1.18126937e+04   1.19127928e+04
   1.20128919e+04   1.21129910e+04   1.22130901e+04   1.23131892e+04
   1.24132883e+04   1.25133874e+04   1.26134865e+04   1.27135856e+04
   1.28136847e+04   1.29137838e+04   1.30138829e+04   1.31139820e+04
   1.32140811e+04   1.33141802e+04   1.34142793e+04   1.35143784e+04
   1.36144775e+04   1.37145766e+04   1.38146757e+04   1.39147748e+04
   1.40148739e+04   1.41149730e+04   1.42150721e+04   1.43151712e+04
   1.44152703e+04   1.45153694e+04   1.46154685e+04   1.47155676e+04
   1.48156667e+04   1.49157658e+04   1.50158649e+04   1.51159640e+04
   1.52160631e+04   1.53161622e+04   1.54162613e+04   1.55163604e+04
   1.56164595e+04   1.57165586e+04   1.58166577e+04   1.59167568e+04
   1.60168559e+04   1.61169550e+04   1.62170541e+04   1.63171532e+04
   1.64172523e+04   1.65173514e+04   1.66174505e+04   1.67175495e+04
   1.68176486e+04   1.69177477e+04   1.70178468e+04   1.71179459e+04
   1.72180450e+04   1.73181441e+04   1.74182432e+04   1.75183423e+04
   1.76184414e+04   1.77185405e+04   1.78186396e+04   1.79187387e+04
   1.80188378e+04   1.81189369e+04   1.82190360e+04   1.83191351e+04
   1.84192342e+04   1.85193333e+04   1.86194324e+04   1.87195315e+04
   1.88196306e+04   1.89197297e+04   1.90198288e+04   1.91199279e+04
   1.92200270e+04   1.93201261e+04   1.94202252e+04   1.95203243e+04
   1.96204234e+04   1.97205225e+04   1.98206216e+04   1.99207207e+04
   2.00208198e+04   2.01209189e+04   2.02210180e+04   2.03211171e+04
   2.04212162e+04   2.05213153e+04   2.06214144e+04   2.07215135e+04
   2.08216126e+04   2.09217117e+04   2.10218108e+04   2.11219099e+04
   2.12220090e+04   2.13221081e+04   2.14222072e+04   2.15223063e+04
   2.16224054e+04   2.17225045e+04   2.18226036e+04   2.19227027e+04
   2.20228018e+04   2.21229009e+04   2.22230000e+04   2.23230991e+04
   2.24231982e+04   2.25232973e+04   2.26233964e+04   2.27234955e+04
   2.28235946e+04   2.29236937e+04   2.30237928e+04   2.31238919e+04
   2.32239910e+04   2.33240901e+04   2.34241892e+04   2.35242883e+04
   2.36243874e+04   2.37244865e+04   2.38245856e+04   2.39246847e+04
   2.40247838e+04   2.41248829e+04   2.42249820e+04   2.43250811e+04
   2.44251802e+04   2.45252793e+04   2.46253784e+04   2.47254775e+04
   2.48255766e+04   2.49256757e+04   2.50257748e+04   2.51258739e+04
   2.52259730e+04   2.53260721e+04   2.54261712e+04   2.55262703e+04
   2.56263694e+04   2.57264685e+04   2.58265676e+04   2.59266667e+04
   2.60267658e+04   2.61268649e+04   2.62269640e+04   2.63270631e+04
   2.64271622e+04   2.65272613e+04   2.66273604e+04   2.67274595e+04
   2.68275586e+04   2.69276577e+04   2.70277568e+04   2.71278559e+04
   2.72279550e+04   2.73280541e+04   2.74281532e+04   2.75282523e+04
   2.76283514e+04   2.77284505e+04   2.78285495e+04   2.79286486e+04
   2.80287477e+04   2.81288468e+04   2.82289459e+04   2.83290450e+04
   2.84291441e+04   2.85292432e+04   2.86293423e+04   2.87294414e+04
   2.88295405e+04   2.89296396e+04   2.90297387e+04   2.91298378e+04
   2.92299369e+04   2.93300360e+04   2.94301351e+04   2.95302342e+04
   2.96303333e+04   2.97304324e+04   2.98305315e+04   2.99306306e+04
   3.00307297e+04   3.01308288e+04   3.02309279e+04   3.03310270e+04
   3.04311261e+04   3.05312252e+04   3.06313243e+04   3.07314234e+04
   3.08315225e+04   3.09316216e+04   3.10317207e+04   3.11318198e+04
   3.12319189e+04   3.13320180e+04   3.14321171e+04   3.15322162e+04
   3.16323153e+04   3.17324144e+04   3.18325135e+04   3.19326126e+04
   3.20327117e+04   3.21328108e+04   3.22329099e+04   3.23330090e+04
   3.24331081e+04   3.25332072e+04   3.26333063e+04   3.27334054e+04
   3.28335045e+04   3.29336036e+04   3.30337027e+04   3.31338018e+04
   3.32339009e+04   3.33340000e+04   3.34340991e+04   3.35341982e+04
   3.36342973e+04   3.37343964e+04   3.38344955e+04   3.39345946e+04
   3.40346937e+04   3.41347928e+04   3.42348919e+04   3.43349910e+04
   3.44350901e+04   3.45351892e+04   3.46352883e+04   3.47353874e+04
   3.48354865e+04   3.49355856e+04   3.50356847e+04   3.51357838e+04
   3.52358829e+04   3.53359820e+04   3.54360811e+04   3.55361802e+04
   3.56362793e+04   3.57363784e+04   3.58364775e+04   3.59365766e+04
   3.60366757e+04   3.61367748e+04   3.62368739e+04   3.63369730e+04
   3.64370721e+04   3.65371712e+04   3.66372703e+04   3.67373694e+04
   3.68374685e+04   3.69375676e+04   3.70376667e+04   3.71377658e+04
   3.72378649e+04   3.73379640e+04   3.74380631e+04   3.75381622e+04
   3.76382613e+04   3.77383604e+04   3.78384595e+04   3.79385586e+04
   3.80386577e+04   3.81387568e+04   3.82388559e+04   3.83389550e+04
   3.84390541e+04   3.85391532e+04   3.86392523e+04   3.87393514e+04
   3.88394505e+04   3.89395495e+04   3.90396486e+04   3.91397477e+04
   3.92398468e+04   3.93399459e+04   3.94400450e+04   3.95401441e+04
   3.96402432e+04   3.97403423e+04   3.98404414e+04   3.99405405e+04
   4.00406396e+04   4.01407387e+04   4.02408378e+04   4.03409369e+04
   4.04410360e+04   4.05411351e+04   4.06412342e+04   4.07413333e+04
   4.08414324e+04   4.09415315e+04   4.10416306e+04   4.11417297e+04
   4.12418288e+04   4.13419279e+04   4.14420270e+04   4.15421261e+04
   4.16422252e+04   4.17423243e+04   4.18424234e+04   4.19425225e+04
   4.20426216e+04   4.21427207e+04   4.22428198e+04   4.23429189e+04
   4.24430180e+04   4.25431171e+04   4.26432162e+04   4.27433153e+04
   4.28434144e+04   4.29435135e+04   4.30436126e+04   4.31437117e+04
   4.32438108e+04   4.33439099e+04   4.34440090e+04   4.35441081e+04
   4.36442072e+04   4.37443063e+04   4.38444054e+04   4.39445045e+04
   4.40446036e+04   4.41447027e+04   4.42448018e+04   4.43449009e+04
   4.44450000e+04   4.45450991e+04   4.46451982e+04   4.47452973e+04
   4.48453964e+04   4.49454955e+04   4.50455946e+04   4.51456937e+04
   4.52457928e+04   4.53458919e+04   4.54459910e+04   4.55460901e+04
   4.56461892e+04   4.57462883e+04   4.58463874e+04   4.59464865e+04
   4.60465856e+04   4.61466847e+04   4.62467838e+04   4.63468829e+04
   4.64469820e+04   4.65470811e+04   4.66471802e+04   4.67472793e+04
   4.68473784e+04   4.69474775e+04   4.70475766e+04   4.71476757e+04
   4.72477748e+04   4.73478739e+04   4.74479730e+04   4.75480721e+04
   4.76481712e+04   4.77482703e+04   4.78483694e+04   4.79484685e+04
   4.80485676e+04   4.81486667e+04   4.82487658e+04   4.83488649e+04
   4.84489640e+04   4.85490631e+04   4.86491622e+04   4.87492613e+04
   4.88493604e+04   4.89494595e+04   4.90495586e+04   4.91496577e+04
   4.92497568e+04   4.93498559e+04   4.94499550e+04   4.95500541e+04
   4.96501532e+04   4.97502523e+04   4.98503514e+04   4.99504505e+04
   5.00505495e+04   5.01506486e+04   5.02507477e+04   5.03508468e+04
   5.04509459e+04   5.05510450e+04   5.06511441e+04   5.07512432e+04
   5.08513423e+04   5.09514414e+04   5.10515405e+04   5.11516396e+04
   5.12517387e+04   5.13518378e+04   5.14519369e+04   5.15520360e+04
   5.16521351e+04   5.17522342e+04   5.18523333e+04   5.19524324e+04
   5.20525315e+04   5.21526306e+04   5.22527297e+04   5.23528288e+04
   5.24529279e+04   5.25530270e+04   5.26531261e+04   5.27532252e+04
   5.28533243e+04   5.29534234e+04   5.30535225e+04   5.31536216e+04
   5.32537207e+04   5.33538198e+04   5.34539189e+04   5.35540180e+04
   5.36541171e+04   5.37542162e+04   5.38543153e+04   5.39544144e+04
   5.40545135e+04   5.41546126e+04   5.42547117e+04   5.43548108e+04
   5.44549099e+04   5.45550090e+04   5.46551081e+04   5.47552072e+04
   5.48553063e+04   5.49554054e+04   5.50555045e+04   5.51556036e+04
   5.52557027e+04   5.53558018e+04   5.54559009e+04   5.55560000e+04
   5.56560991e+04   5.57561982e+04   5.58562973e+04   5.59563964e+04
   5.60564955e+04   5.61565946e+04   5.62566937e+04   5.63567928e+04
   5.64568919e+04   5.65569910e+04   5.66570901e+04   5.67571892e+04
   5.68572883e+04   5.69573874e+04   5.70574865e+04   5.71575856e+04
   5.72576847e+04   5.73577838e+04   5.74578829e+04   5.75579820e+04
   5.76580811e+04   5.77581802e+04   5.78582793e+04   5.79583784e+04
   5.80584775e+04   5.81585766e+04   5.82586757e+04   5.83587748e+04
   5.84588739e+04   5.85589730e+04   5.86590721e+04   5.87591712e+04
   5.88592703e+04   5.89593694e+04   5.90594685e+04   5.91595676e+04
   5.92596667e+04   5.93597658e+04   5.94598649e+04   5.95599640e+04
   5.96600631e+04   5.97601622e+04   5.98602613e+04   5.99603604e+04
   6.00604595e+04   6.01605586e+04   6.02606577e+04   6.03607568e+04
   6.04608559e+04   6.05609550e+04   6.06610541e+04   6.07611532e+04
   6.08612523e+04   6.09613514e+04   6.10614505e+04   6.11615495e+04
   6.12616486e+04   6.13617477e+04   6.14618468e+04   6.15619459e+04
   6.16620450e+04   6.17621441e+04   6.18622432e+04   6.19623423e+04
   6.20624414e+04   6.21625405e+04   6.22626396e+04   6.23627387e+04
   6.24628378e+04   6.25629369e+04   6.26630360e+04   6.27631351e+04
   6.28632342e+04   6.29633333e+04   6.30634324e+04   6.31635315e+04
   6.32636306e+04   6.33637297e+04   6.34638288e+04   6.35639279e+04
   6.36640270e+04   6.37641261e+04   6.38642252e+04   6.39643243e+04
   6.40644234e+04   6.41645225e+04   6.42646216e+04   6.43647207e+04
   6.44648198e+04   6.45649189e+04   6.46650180e+04   6.47651171e+04
   6.48652162e+04   6.49653153e+04   6.50654144e+04   6.51655135e+04
   6.52656126e+04   6.53657117e+04   6.54658108e+04   6.55659099e+04
   6.56660090e+04   6.57661081e+04   6.58662072e+04   6.59663063e+04
   6.60664054e+04   6.61665045e+04   6.62666036e+04   6.63667027e+04
   6.64668018e+04   6.65669009e+04   6.66670000e+04   6.67670991e+04
   6.68671982e+04   6.69672973e+04   6.70673964e+04   6.71674955e+04
   6.72675946e+04   6.73676937e+04   6.74677928e+04   6.75678919e+04
   6.76679910e+04   6.77680901e+04   6.78681892e+04   6.79682883e+04
   6.80683874e+04   6.81684865e+04   6.82685856e+04   6.83686847e+04
   6.84687838e+04   6.85688829e+04   6.86689820e+04   6.87690811e+04
   6.88691802e+04   6.89692793e+04   6.90693784e+04   6.91694775e+04
   6.92695766e+04   6.93696757e+04   6.94697748e+04   6.95698739e+04
   6.96699730e+04   6.97700721e+04   6.98701712e+04   6.99702703e+04
   7.00703694e+04   7.01704685e+04   7.02705676e+04   7.03706667e+04
   7.04707658e+04   7.05708649e+04   7.06709640e+04   7.07710631e+04
   7.08711622e+04   7.09712613e+04   7.10713604e+04   7.11714595e+04
   7.12715586e+04   7.13716577e+04   7.14717568e+04   7.15718559e+04
   7.16719550e+04   7.17720541e+04   7.18721532e+04   7.19722523e+04
   7.20723514e+04   7.21724505e+04   7.22725495e+04   7.23726486e+04
   7.24727477e+04   7.25728468e+04   7.26729459e+04   7.27730450e+04
   7.28731441e+04   7.29732432e+04   7.30733423e+04   7.31734414e+04
   7.32735405e+04   7.33736396e+04   7.34737387e+04   7.35738378e+04
   7.36739369e+04   7.37740360e+04   7.38741351e+04   7.39742342e+04
   7.40743333e+04   7.41744324e+04   7.42745315e+04   7.43746306e+04
   7.44747297e+04   7.45748288e+04   7.46749279e+04   7.47750270e+04
   7.48751261e+04   7.49752252e+04   7.50753243e+04   7.51754234e+04
   7.52755225e+04   7.53756216e+04   7.54757207e+04   7.55758198e+04
   7.56759189e+04   7.57760180e+04   7.58761171e+04   7.59762162e+04
   7.60763153e+04   7.61764144e+04   7.62765135e+04   7.63766126e+04
   7.64767117e+04   7.65768108e+04   7.66769099e+04   7.67770090e+04
   7.68771081e+04   7.69772072e+04   7.70773063e+04   7.71774054e+04
   7.72775045e+04   7.73776036e+04   7.74777027e+04   7.75778018e+04
   7.76779009e+04   7.77780000e+04   7.78780991e+04   7.79781982e+04
   7.80782973e+04   7.81783964e+04   7.82784955e+04   7.83785946e+04
   7.84786937e+04   7.85787928e+04   7.86788919e+04   7.87789910e+04
   7.88790901e+04   7.89791892e+04   7.90792883e+04   7.91793874e+04
   7.92794865e+04   7.93795856e+04   7.94796847e+04   7.95797838e+04
   7.96798829e+04   7.97799820e+04   7.98800811e+04   7.99801802e+04
   8.00802793e+04   8.01803784e+04   8.02804775e+04   8.03805766e+04
   8.04806757e+04   8.05807748e+04   8.06808739e+04   8.07809730e+04
   8.08810721e+04   8.09811712e+04   8.10812703e+04   8.11813694e+04
   8.12814685e+04   8.13815676e+04   8.14816667e+04   8.15817658e+04
   8.16818649e+04   8.17819640e+04   8.18820631e+04   8.19821622e+04
   8.20822613e+04   8.21823604e+04   8.22824595e+04   8.23825586e+04
   8.24826577e+04   8.25827568e+04   8.26828559e+04   8.27829550e+04
   8.28830541e+04   8.29831532e+04   8.30832523e+04   8.31833514e+04
   8.32834505e+04   8.33835495e+04   8.34836486e+04   8.35837477e+04
   8.36838468e+04   8.37839459e+04   8.38840450e+04   8.39841441e+04
   8.40842432e+04   8.41843423e+04   8.42844414e+04   8.43845405e+04
   8.44846396e+04   8.45847387e+04   8.46848378e+04   8.47849369e+04
   8.48850360e+04   8.49851351e+04   8.50852342e+04   8.51853333e+04
   8.52854324e+04   8.53855315e+04   8.54856306e+04   8.55857297e+04
   8.56858288e+04   8.57859279e+04   8.58860270e+04   8.59861261e+04
   8.60862252e+04   8.61863243e+04   8.62864234e+04   8.63865225e+04
   8.64866216e+04   8.65867207e+04   8.66868198e+04   8.67869189e+04
   8.68870180e+04   8.69871171e+04   8.70872162e+04   8.71873153e+04
   8.72874144e+04   8.73875135e+04   8.74876126e+04   8.75877117e+04
   8.76878108e+04   8.77879099e+04   8.78880090e+04   8.79881081e+04
   8.80882072e+04   8.81883063e+04   8.82884054e+04   8.83885045e+04
   8.84886036e+04   8.85887027e+04   8.86888018e+04   8.87889009e+04
   8.88890000e+04   8.89890991e+04   8.90891982e+04   8.91892973e+04
   8.92893964e+04   8.93894955e+04   8.94895946e+04   8.95896937e+04
   8.96897928e+04   8.97898919e+04   8.98899910e+04   8.99900901e+04
   9.00901892e+04   9.01902883e+04   9.02903874e+04   9.03904865e+04
   9.04905856e+04   9.05906847e+04   9.06907838e+04   9.07908829e+04
   9.08909820e+04   9.09910811e+04   9.10911802e+04   9.11912793e+04
   9.12913784e+04   9.13914775e+04   9.14915766e+04   9.15916757e+04
   9.16917748e+04   9.17918739e+04   9.18919730e+04   9.19920721e+04
   9.20921712e+04   9.21922703e+04   9.22923694e+04   9.23924685e+04
   9.24925676e+04   9.25926667e+04   9.26927658e+04   9.27928649e+04
   9.28929640e+04   9.29930631e+04   9.30931622e+04   9.31932613e+04
   9.32933604e+04   9.33934595e+04   9.34935586e+04   9.35936577e+04
   9.36937568e+04   9.37938559e+04   9.38939550e+04   9.39940541e+04
   9.40941532e+04   9.41942523e+04   9.42943514e+04   9.43944505e+04
   9.44945495e+04   9.45946486e+04   9.46947477e+04   9.47948468e+04
   9.48949459e+04   9.49950450e+04   9.50951441e+04   9.51952432e+04
   9.52953423e+04   9.53954414e+04   9.54955405e+04   9.55956396e+04
   9.56957387e+04   9.57958378e+04   9.58959369e+04   9.59960360e+04
   9.60961351e+04   9.61962342e+04   9.62963333e+04   9.63964324e+04
   9.64965315e+04   9.65966306e+04   9.66967297e+04   9.67968288e+04
   9.68969279e+04   9.69970270e+04   9.70971261e+04   9.71972252e+04
   9.72973243e+04   9.73974234e+04   9.74975225e+04   9.75976216e+04
   9.76977207e+04   9.77978198e+04   9.78979189e+04   9.79980180e+04
   9.80981171e+04   9.81982162e+04   9.82983153e+04   9.83984144e+04
   9.84985135e+04   9.85986126e+04   9.86987117e+04   9.87988108e+04
   9.88989099e+04   9.89990090e+04   9.90991081e+04   9.91992072e+04
   9.92993063e+04   9.93994054e+04   9.94995045e+04   9.95996036e+04
   9.96997027e+04   9.97998018e+04   9.98999009e+04   1.00000000e+05]

In [107]:
if is_main_module():
    vectorized_approximation = np.vectorize(approximate_pi)
    Y = vectorized_approximation(X)
    print(Y)

In [108]:
if is_main_module():
    plt.figure(figsize=(20,10))
    plt.plot(X, Y, label="Approximation")
    plt.axhline(real_pi_value, linestyle="--", color="red", label="Real value given by the Python math library")
    plt.title("Evolution of Monte Carlo Pi approximation against the number of samples")
    plt.xlabel("Number of samples")
    plt.ylabel("Pi approximation")
    plt.legend()
    plt.show()


Graph export


In [109]:
def plot_approximation_evolution_graph(n_max_samples=10**5):
    X = np.linspace(1, 10**5, num=10**3)
    vectorized_approximation = np.vectorize(approximate_pi)
    Y = vectorized_approximation(X)
    
    plt.figure(figsize=(20,10))
    plt.plot(X, Y, label="Approximation")
    plt.axhline(real_pi_value, linestyle="--", color="red", label="Real value given by the Python math library")
    plt.title("Evolution of Monte Carlo Pi approximation against the number of samples")
    plt.xlabel("Number of samples")
    plt.ylabel("Pi approximation")
    plt.legend()
    plt.show()

Plot a graph representing the calculation


In [129]:
def plot_approximation(n_samples=10**3):
    """Plot the Monte Carlo method applied to the computation of pi"""
    if not (n_samples) is int:
        n_samples = int(n_samples)
    X = np.random.uniform(-1, 1, n_samples)
    Y = np.random.uniform(-1, 1, n_samples)
    
    inside_points = (X**2 + Y**2 <= 1)
    
    plt.figure(figsize=(10,10))
    plt.scatter(X[inside_points], Y[inside_points], marker='+', label="Points inside the circle")
    plt.scatter(X[~inside_points], Y[~inside_points], marker='+', label="Points outside the circle")
    
    an = np.linspace(0, 2*np.pi, 100)
    plt.plot(np.cos(an), np.sin(an), label="The circle")

    
    plt.axis('equal')
    plt.show()
    
if is_main_module():
    plot_approximation()



In [ ]: