C. Całka oznaczona, metoda Monte Carlo, "orzeł-reszka".

0

Witam.
Na początku chciałbym napisać, że jestem kompletnie zielony w języku C (oby póki co).
Mam do napisania projekt na studia. Program w języku C liczący całkę oznaczoną wybranej klasy funkcji metodą Monte Carlo, odmianą orzeł-reszka.
Jak już na wstępie napisałem- nie miałem pojęcia jak się do tego zabrać. Więc poszukałem w internecie i znalazłem odpowiedni kod. Tyle, że on liczy po prostu wartość całki. Potrzebuje dołączyć do niego odmianę orzeł-reszka.
Wiem, że chodzi o porównanie liczby prawidłowych trafień do liczby wszystkich trafień.
Tylko jak to napisać?
Wszystko będzie pomocne.
Dzięki z góry.

0

Ale czego w orzeł reszka nie rozumiesz? Losujesz sobie punkt w dziedzinie i sprawdzasz czy lezy pod krzywą wyznaczoną wzorem który masz pod całką czy też nie. Jeśli lezy to zapisujesz sobie w jednym liczniku, jeśli nie to w drugim liczniku. Na koniec dzielisz te liczniki przez siebie i dostajesz informacje o tym jaki % losowań był pod krzywą a jaki nie był. Wynikiem aproksymacji jest taki właśnie % pola w którym losowałeś.

Załóżmy że mamy całkę z f(x) = x dx, dla x z [0,1]. Losujemy sobie 4 punkty z przedziału [0,1] x [0,1] (przedział X wyznacza nam dziedzina całki, a przedział Y wyznacza nam wartość największa i najmniejsza tej funkcji w dziedzinie), czyli np. (0,0), (0,0.5), (0.5,0), (1,1) i po kolei:

  • czy (0,0) leży pod krzywą? f(0) = 0 co jest >= 0 więc ok
  • czy (0,0.5) leży pod krzywą? f(0) = 0 co jest < 0.5 więc to nie leży pod naszą krzywą
  • czy (0.5,0) leży pod krzywą? f(0.5) = 0.5 co jest >= 0 więc ok
  • czy (1,1) leży pod krzywą? f(1) = 1 co jest >= 1 więc ok

Wyszło nam że 75% losowań było pod krzywą. Obszar losowania miał pole 1*1 = 1, więc aproksymacja całki wynosi 0.75 * 1 = 0.75.

Oczywiście widać że jest słabo bo miało nam wyjść 0.5, ale jeśli zamiast 4 losowań zrobisz 4 tysiace to będzie lepiej.

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