Jūs esate čia

Tikimybių skaičiavimas Monte-Karlo metodu.

Monte Karlo metodas :

Monte Karlo metodas – skaičiavimo algoritmas, pagrįstas statistiniu modeliavimu ir gautų rezultatų apdorojimu statistiniais metodais. Šis metodas leidžia brangiai kainuojančius bandymus pakeisti modeliavimu kompiuteriais ir labai sumažina tyrimų trukmę. Monte Karlo metodai dažniausiai naudojami fizikinių ir matematinių sistemų modeliavimui, kai neįmanoma gauti tikslių rezultatų naudojant deterministinį algoritmą.

Metodo idėja:

Norint atlikti labai sudėtingą skaičiavimą, reikalaujantį ištyrinėti didelę duomenų erdvę, galima tą patį skaičiavimą atlikti tik su keletu atsitiktinai pasirinktų duomenų. Atsitiktinai parinkti duomenys dažniausiai būna „tipiški“, todėl natūralu tikėtis, kad ir atliktas skaičiavimas ne itin daug skirsis nuo tikslaus. Pavyzdžiui, nežinodami kaip apskaičiuoti apskritimo, nubrėžto kompiuterio ekrane, plotą, galėtume atsitiktinai išdėlioti keliasdešimt taškų. Suskaičiavę, kokia dalis taškų pateko į apskritimą, galėtume apytiksliai pasakyti ir jo plotą. Žinoma, tam turime suprasti, kaip generuojami atsitiktiniai taškai.

Tikimybių skaičiavimas Monte-Karlo metodu:

Tikimybę apibrėžkime formule P(A)=N(A)/N, (čia N(A) yra įvykį A sudarančių elementarių įvykių skaičius). Šią tikimybę aiškinkime kaip santykinio dažnio ribą: jei eksperimentą pakartotume m kartų, tai tikimybė P(A) lygi santykio m(A)/m ribai ( m(A) nurodo kelis kartus, atlikus m eksperimentus, pasirodė įvykis A ). Monte Carlo metodas siūlo eksperimentus kartoti labau daug kartų (pvz. 1000, 10000 ir t.t.), suskaičiuotas santykis m(A)/m bus apytiksliai lygus tikimybei.

Užduotis:

Tarkime metama moneta. Jeigu iškrenta herbas, tai laimite 12 EUR. Jeigu skaičius, tai pralošiate 10 EUR. Bus žaidžiama n kartų ir gauti rezultatai sumuojami. Kokia tikimybė jums turėti teigiamą balansą po n kartų? Kokie išlošių pasikliautiniai 95 intervalai. Ištirkite tikimybes su skirtingais n, pvz. n = 1, 2, 5, 10, 20, 100. Kaip atrodo balanso tankis kai n = 100?

  • Sugeneruojame funkciją, kuri skaičiuoja po n monetos metimų gauta laimėjimą. Funkcijos esmė, kad kompiuteris atsitiktinai parenka išrenka skaičių −10 arba 12 su tikimybe 1/2 ir tai atlieka n kartų ir visus parinktus skaičius sumuoja.
  1. metimas<-function(n){sum(sample(c(-10,12),size=n,replace=TRUE))}
  • Skaičiuosime tikimybes, kad laimėjimas bus teigiamas dydis išmetus monetą n kartų ir pakartojus ekspermentą m=1000 kartų. Ši eilutė suskaičiuoja vidurki kelis kartus išmerus moneta n kartų ir susumavus skaičius balansas buvo teigiamas, o tai ir yra tikimybė.
  1. n=c(1,2,5,10,20,100)
  2. sapply(n, function(ni) mean(replicate(1000,metimas(ni))>0)) #išspausdinamas bendras tikimybių vektorius.
## [1] 0.523 0.736 0.488 0.610 0.574 0.837
  • Pasikliautinieji 95 intervalai duotiems n. Atlikus m=1000 ekspermentų. Ši eilutė išspausdins intervalus į kuriuos pateks 95 gautų balansų.
  1. data<-sapply(n, function(mi) quantile(replicate(1000,metimas(mi)),probs=c(0.025,0.975)))
  2. colnames(data) <- c("1", "2","5","10","20","100")
##         1   2   5  10  20  100
## 2.5%  -10 -20 -50 -56 -68 -120
## 97.5%  12  24  60  76 108  320
  1. #išspausdinama bendra pasikliautiniu intervalų matrica.
  • Išbrėšime tankį metant monetą n=100 kartų ir ekspermentą pakartojus m=1000 kartų.
  1. plot(density(replicate(1000, metimas(100))), xlab="Reiksmes", ylab="Tankis", main="Tankis",lwd="3",col="2")

Tankis

Išvados.

Išsprendę šį pavyzdį matome, kad tikimybę galime paaiškinti kaip santykinio dažnio ribą eksperimentą pakartoje m kartų. Tikimybė P(A) lygi santykio m(A)/m ribai.

Daugiau pavyzdžių

Komentuoti

Basic HTML

  • Web puslapių adresai ir el. pašto adresai automatiškai tampa nuorodomis.
  • Tags allowed: a, em, strong, u, s, cite, code, blockquote, ol, ul, li, dl, dt, dd, pre, p, br
  • Mathematics inside the configured delimiters is rendered by MathJax. The default math delimiters are $$...$$ and \[...\] for displayed mathematics, and $...$ and \(...\) for in-line mathematics.
  • Syntax highlight code surrounded by the <pre class="brush: lang">...</pre> tags, where lang is one of the following language brushes: php, python, r, sass, sql, vb.
  • Linijos ir paragrafai atskiriami automatiškai

Markdown

  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <r>, <ruby>. The supported tag styles are: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • Typographic refinements will be added.
  • Mathematics inside the configured delimiters is rendered by MathJax. The default math delimiters are $$...$$ and \[...\] for displayed mathematics, and $...$ and \(...\) for in-line mathematics.

Plain text

  • HTML žymės neleidžiamos.
  • Web puslapių adresai ir el. pašto adresai automatiškai tampa nuorodomis.
  • Linijos ir paragrafai atskiriami automatiškai
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Target Image

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer