Monte Carlo-processen

Monte Carlo-simuleringar i Python

Izzy Weber

Curriculum Manager, DataCamp

Simuleringssteg

  1. Definiera indatavariablerna och välj sannolikhetsfördelningar för dem

  2. Generera indata genom att sampla från dessa fördelningar

  3. Utför en deterministisk beräkning av de simulerade indatana

  4. Sammanfatta resultaten

Monte Carlo-simuleringar i Python

Beräkna värdet på pi

Generera slumpmässiga punkter $(x, y)$ där $x$ och $y$ ligger i intervallet från -1 till 1.

Graf över en cirkel inuti en kvadrat med slumpmässigt samplade punkter

$$Area_{circle} = \pi $$

$$Area_{square} = 2 \times 2 = 4 $$

$$\frac{Area_{circle}}{Area_{square}} = \frac{\pi}{4} $$

$$\frac{n_{red}}{n_{all}} = \frac{\pi}{4} $$

$$ \pi = 4 \times \frac{n_{red}}{n_{all}}$$

Monte Carlo-simuleringar i Python

Steg 1

Definiera indatavariablerna och välj sannolikhetsfördelningar för dem

  • Indata: enskilda punkter representerade av $(x, y)$-koordinater
  • Sannolikhetsfördelningar: $x$ och $y$ följer likformiga fördelningar från minus ett till ett.

 

circle_points = 0 
square_points = 0
Monte Carlo-simuleringar i Python

Steg 2

Generera indata genom att sampla från dessa fördelningar

 

Sampla slumpmässiga $x$- och $y$-koordinatvärden likformigt fördelade mellan -1 och 1:

for i in range(n):
    x = random.uniform(-1, 1)
    y = random.uniform(-1, 1)
Monte Carlo-simuleringar i Python

Steg 3

Utför deterministisk beräkning av de simulerade indatana

Kontrollera om varje punkt ligger inuti cirkeln: deterministiskt för givna $x$ och $y$

dist_from_origin = x**2 + y**2

Om ja, lägg till punkten i circle_points; lägg alltid till punkten i square_points

if dist_from_origin <= 1:
     circle_points += 1
square_points += 1
Monte Carlo-simuleringar i Python

Steg 4

Sammanfatta resultaten för att besvara relevanta frågor

 

Beräkna värdet på pi efter många simuleringsomgångar!

pi = 4 * circle_points/ square_points
Monte Carlo-simuleringar i Python

Allt på en gång

n = 4000000
circle_points = 0 
square_points = 0

for i in range(n): x = random.uniform(-1, 1) y = random.uniform(-1, 1) dist_from_origin = x**2 + y**2 if dist_from_origin <= 1: circle_points += 1 square_point += 1
pi = 4 * circle_points / square_points print(pi)
3.142518
Monte Carlo-simuleringar i Python

Nu kör vi en övning!

Monte Carlo-simuleringar i Python

Preparing Video For Download...