""" Berechnung von pi mit MC-Methode """ from __future__ import division from __future__ import absolute_import from __future__ import print_function from __future__ import unicode_literals import numpy as np import matplotlib.pyplot as plt npoints = 1000000 inpoints = [] outpoints = [] pi = [] for i in np.arange( npoints ): rvec=np.random.rand(2) if( np.sum( rvec**2 ) <= 1. ): # Punkt innerhalb des Viertelkreises inpoints.append( [ rvec[0], rvec[1] ] ) else: # Punkt ausserhalb des Viertelkreises outpoints.append( [ rvec[0], rvec[1] ] ) # berechne Naeherungswert fuer pi mit jedem neuen Punkt pi.append( 4.*float( len( inpoints ) ) / (i+1) ) ins = np.array( inpoints ) outs = np.array( outpoints ) fig,ax = plt.subplots(2,1) ax[0].scatter( ins[:,:1], ins[:,1:], s = 1, color='b' ) ax[0].scatter( outs[:,:1], outs[:,1:], s = 1, color='r' ) ax[0].axis( 'equal' ) x = np.arange( 1, npoints+1 ) yup = np.pi*(1.+1./np.sqrt(x)) ylo = np.pi*(1.-1./np.sqrt(x)) ax[1].plot( x, pi ) ax[1].plot( x, yup, color='red' ) ax[1].plot( x, ylo, color='red' ) ax[1].set_xscale('log') plt.ylim( 3.0, 3.25 ) plt.savefig( 'pi.pdf' ) plt.show()