Algorytm Monte Carlo

0

Cześć. Wróciłem po dłuższym czasie.... Piszę kod dla brata na zajęcia z Technologi informacyjnych.

Mam wyznaczyć pola prostokąta za pomocą metody Monte Carlo. Użytkownik podaje wymiary prostokąta i inne parametry (XD)
Na początku wydawało mi się to bardzo proste ale po dłurzszej chwili siedząc nad kodem
i zgłębniają wiedzę na temat Monte Carlo za pomocą Chatgpt pomału się poddaje i zaczynam uważać to zadanie za bezsensowne.

Kodzik:

import random  

def Monte_Carlo(width_Prost,height_Prost,liczba_Punkty):
    punkty_w_Prost=0

    for i in range(liczba_Punkty): 

        x=random.uniform(0,width_Prost) 
        y=random.uniform(0,height_Prost)

        print(f"x: {x}, y: {y}")  # Wyświetlenie losowanych punktów
     
        if (0 <= x <= width_Prost) and (0 <= y <= height_Prost): 
            
            punkty_w_Prost+=1 

    proporcja=(punkty_w_Prost / liczba_Punkty) # Stosunek punktów w prostokącie do ogólnej liczby wylosowanych punktów

    pole_Prost = width_Prost * height_Prost
    przyblizone_Pole = proporcja * pole_Prost

    return przyblizone_Pole  

for i in range(3):
    width_Prost = float(input(f"Podaj długość prostokąta {i+1}: "))
    height_Prost = float(input(f"Podaj szerokość prostokąta {i+1}: "))
    liczba_Punkty = int(input(f"Podaj liczbę punktów dla prostokąta {i+1}: "))

    przyblizone_pole = Monte_Carlo(width_Prost, height_Prost,liczba_Punkty)
    print(f"Przybliżone pole prostokąta {i+1}: {przyblizone_pole}")

Ogólnie z tego co się dowiedziałem to Monte Carlo pomaga w tego typu zadaniach podać przybliżoną wartość pola figury poprzez zawężenie obszaru i obliczenie części jego pola (SKOMPLIKOWANEJ FIGURY) nie wiem np gwiazdki albo czegoś takiego:

https://prac.im.pwr.edu.pl/~agniesz/rachunek_prawd_MAEW104/Monte_Carlo_pole_obszaru_prezentacja_2.pdf

bo w moim wypadku liczba punktów w prostokącie = liczba wylosowanych punktów czyli ich stosunek to 1 czyli przybliżone pole to rzeczywiste pole.............
A użytkownik ma podać wymiray prostokąta więc i tak znam jego pole....

Proszę o pomoc

0
  1. Masz jakąś przestrzeń (ograniczoną i znasz jej pole) i w niej umieszczasz prostokąt
  2. Losujesz (z rozkładu jednostajnego) punkty z tej przestrzeni - np. N punktów
  3. Liczysz ile punktów wpada do prostokąta - np. K punktów
  4. Masz prawdopodobieństwo K/N
  5. Z drugiej strony masz prawdopodobieństwo geometryczne: poleProstokąta / polePrzestrzeni
  6. Prawdopodobieństwa są równe, więc: poleProstokąta = polePrzestrzeni * K/N

Pole tego prostokąta to po prostu całka po przestrzeni (X) z funkcji charakterystycznej (chi) obszaru D (przyjmuje wartość 1 jeśli punkt należy do D, albo 0 jeśli nie należy).

screenshot-20240124115758.png

To co Ty robisz, to przyjmujesz X=D. (Chciałoby się napisać xD ;P )

1 użytkowników online, w tym zalogowanych: 0, gości: 1