Pereiti prie turinio

Skaičiaus PI apskaičiavimas


Rekomenduojami pranešimai

Turiu tokią užduotėlę, kurioje programa statistiškai skaičiuojanti skaičių PI, generuoja atsitiktinius taškus kvadrate [-1;1]x[-1;1].Kiekvienam atsitiktiniam taškui apskaičiuojama, ar jis pateko į vienetinį apskritimą (x^2 + y^2) <= 1.

PI nustatomas pagal patekusių į apskritimą ir visų taškų santykį.

 

Taigi, aš sugeneruoju du skaičius intervale (-1,1), patikrinu ar tas taškas priklauso vienetiniam apskritimui. Tarkim, situacija tokia - daryta 11 iteracijų. 7 iš 11os taškų pakliuvo į vienetinį apskritimą. 7/11~0,(63)

 

0,63 man nepanašus į reikiamą PI (3,14....).

 

Ką netaip suprantu? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Turiu tokią užduotėlę, kurioje programa statistiškai skaičiuojanti skaičių PI, generuoja atsitiktinius taškus kvadrate [-1;1]x[-1;1].Kiekvienam atsitiktiniam taškui apskaičiuojama, ar jis pateko į vienetinį apskritimą (x^2 + y^2) <= 1.

PI nustatomas pagal patekusių į apskritimą ir visų taškų santykį.

 

Taigi, aš sugeneruoju du skaičius intervale (-1,1), patikrinu ar tas taškas priklauso vienetiniam apskritimui. Tarkim, situacija tokia - daryta 11 iteracijų. 7 iš 11os taškų pakliuvo į vienetinį apskritimą. 7/11~0,(63)

 

0,63 man nepanašus į reikiamą PI (3,14....).

 

Ką netaip suprantu? :)

 

Hmm dar tokių dalykų nesuprantu, bet gal kažkaip prieisim. Klausimas: Kaip iš patekusių/nepatekusių santykio gausi didesnį skaičių už 1? Max ką gali gauti tai jei pateks x/x skaičių ir tai bus lygu 1. Didesnio kof negausi. Nebent gal reikia atvirkščiai 11/7 dalint? PI = 22/7

 

P.S. Manau rasi atsakymą http://en.wikipedia.org/wiki/Numerical_approximations_of_%CF%80 nueik iki summing circle's area :)

Redagavo Enslaved
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pats perskaitęs, supratau, kad PI visai ne taip skaičiuojamas :/ Tavo atveju reiktų patekusius skaičius/ spindulio kvadrato. Kadangi tavo spindulys 1 :D gaunasi 7/1^2 = 7 :D Matyt per mažai taškų, kad galėtum kažką rasti (žiū į lentelę tam linke, pradeda skaičiuot tik nuo r=2, ir tai netikslumų gauna). Nebent čia visai kitas metodas sprendimo :|

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na taip, šitas nelabai tinka, nes pas mane r=1 :) reikia mąstyt toliau :)

 

O kokiu tikslumu skaičiuoji taškus? 0.1 ar 0.01? Bet kuriuo iš šių atvejų išeitų r=10 ar r=100 ir tau tiksliai paskaičiuotų. Ta prasme jei r turi 1m tai tolygu 100cm. Gal tokiu principu išeis pagal aną variantą?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Esmė yra tokia:

jeigu paimsim apskritimą, kurio spindulys yra R, ir apie jį apibrėžtą kvadratą, kurio kraštinė d, tai jų plotų santykis bus

k=πR².

Kadangi d=2R, tai

k=πR²4R²=π4.

Iš to išplaukia, kad

π=4k.

 

Pagal tikimybių teoriją, atsitiktinai dėliojant taškus, jie daugmaž pasiskirstys tolygiai. Todėl taškų, esančių apskritime, santykis su visais taškais turėtų ≡k. Todėl:

π=4×taškai apskritimevisi taškai.

 

Dabar apie taškų pasirinkimą. Visų pirma, reikia pasirinkti kuo geresnį atsitiktinių skaičių generatorių, kad gautos vertės būtų kuo labiau atsitiktinės. Be to, 11 iteracijų yra tikrai per mažai. Reiktų bent jau kokio 1000, o šiaip galėtum dėti ir daug daugiau, vis tiek skaičiavimas netruktų ilgiau poros sekundžių (nebent kreivas kodas).

 

Galiausiai, pagal tavo gautą 0,63 santykį:

π=4×0,63=2,54.

 

EDIT:

Galia atsikratyti atsitiktinių skaičių ir tiesiog pereiti visą plotą su ciklais. Tarkim x=-1:0.01:1 ir y=-1:0.01:1, išeitų 200²=40000 taškų. Siūlyčiau įgyvendinti šį algoritmą perėjimams 0.1, 0.01, 0.001 ir t.t. bei parašyti čia gautas reikšmes ir palyginimui tikslią reikšmę.

 

Be to, šis π skaičiavimo metodas vadinamas Monte Karlo metodu.

 

Written using easyMath firefox add-on.

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Esmė yra tokia:

jeigu paimsim apskritimą, kurio spindulys yra R, ir apie jį apibrėžtą kvadratą, kurio kraštinė d, tai jų plotų santykis bus

k=πR².

Kadangi d=2R, tai

k=πR²4R²=π4.

Iš to išplaukia, kad

π=4k.

 

Pagal tikimybių teoriją, atsitiktinai dėliojant taškus, jie daugmaž pasiskirstys tolygiai. Todėl taškų, esančių apskritime, santykis su visais taškais turėtų ≡k. Todėl:

π=4×taškai apskritimevisi taškai.

 

Dabar apie taškų pasirinkimą. Visų pirma, reikia pasirinkti kuo geresnį atsitiktinių skaičių generatorių, kad gautos vertės būtų kuo labiau atsitiktinės. Be to, 11 iteracijų yra tikrai per mažai. Reiktų bent jau kokio 1000, o šiaip galėtum dėti ir daug daugiau, vis tiek skaičiavimas netruktų ilgiau poros sekundžių (nebent kreivas kodas).

 

Galiausiai, pagal tavo gautą 0,63 santykį:

π=4×0,63=2,54.

 

EDIT:

Galia atsikratyti atsitiktinių skaičių ir tiesiog pereiti visą plotą su ciklais. Tarkim x=-1:0.01:1 ir y=-1:0.01:1, išeitų 200²=40000 taškų. Siūlyčiau įgyvendinti šį algoritmą perėjimams 0.1, 0.01, 0.001 ir t.t. bei parašyti čia gautas reikšmes ir palyginimui tikslią reikšmę.

 

Be to, šis π skaičiavimo metodas vadinamas Monte Karlo metodu.

 

Written using easyMath firefox add-on.

 

Ačiū už išsamų atsakymą :) Programą sėkmingai parašiau, liko tik atsiskaityti :) O dėl tų ciklų tai ne, pas mane vienas iš reikalavimų buvo naudot java.util.Random :) Tai pasirašiau double generatorių :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...