Kezdőoldal » Számítástechnika » Programozás » Hogy lehet a Monte Carlo-módsz...

Hogy lehet a Monte Carlo-módszer leprogramozni java-ban?

Figyelt kérdés

Odáig jutottam, h:


public class pibecsles {

public static void main(String[] args) {

int n = 10000000;

double x, y;

double pi;

int i;

int db =0; (ebbe a nullába se vagyok biztos)

for (i = 1; i <= n; i++) {

x = Math.random();

y = Math.random();


Meg biztos van benne olyan, h:

if (Math.sqrt(x*x + y*y) <= 1)


Feladat:

Készíts programot, ami pi értékére szeretne becslést adni.

Ez úgy érheto el, hogy n db véletlenszeru (x, y) koordinátájú pontot

generálunk egy egység sugarú kör felso negyedében található egységnégyzetbe.

Számolni kell minden olyan pontot, ami a körön belül van

(azaz x2 + y2 <= 1).

A pi-re kapott becslésünk 4 * db/n lesz, ezt írjuk ki a végén.

Van egy ilyen leírás is hozzá:

[link]


Milyen gondolat menet alapján lehet megírni a programot?


Jó lenne ha valaki úgy le tudná írni, h megértsem, h kell leprogramozni.

Nem igazán áll össze, h hogyan kéne felépíteni a feladatmegoldást.


Java-ban, metódus nélkül, legalapabban kell megírnom.



2017. szept. 22. 17:30
 1/6 anonim ***** válasza:

Amit írtál az jó.


A for ciklus belsejében számolod a db-ot így:


if (x*x+y*y<1){

db++

}


(Nem kell gyököt vonni, mint gyök(1) úgyis 1)


Aztán a for ciklus után kiíród, hogy

db*4.0/n


Azért kell 4.0-val szorozni, mert db és n is egész, és double-é kell tenni.


Ennyi.


Kipróbáltam működik:


[link]


public class HelloWorld{


public static void main(String []args){

int n = 10000000;

int db = 0;


for (int i = 0; i < n; i++) {

double x = Math.random();

double y = Math.random();

if (x*x+y*y<1)

db++;

}


double pi = db*4.0/n;

System.out.println(pi);


}

}

2017. szept. 22. 17:46
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:

Hú köszi!


Azt le tudod esetleg írni, h logikailag miért így épül fel a program? (Miért adunk 0 értéket a db-nek és a for ciklus végén miért növeljük 1-el, stb)

2017. szept. 22. 17:56
 3/6 anonim ***** válasza:
Ez olyan programozás nulladik óra.
2017. szept. 22. 20:51
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:

Nem biztos hogy pont ez az oka, de pl. ugye tömböknél az rlső elem a 0-ás cimkét kapja, így tömbbejáráskor nem kell mindig egy kivonást elvégezni.


De akkor miért nem mennek a tömb elemei 1-től? Jó kérdés. :)

2017. szept. 22. 21:33
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:

Most komolyan azon megy a morfondírozás, hogy ha valamit megszámolunk, akkor miért úgy indulunk, hogy 0 valamink van?

Azért, mert ha két dolgot számolsz és onnan indulsz, hogy 7, akkor a végére 9-et számolnál, ami mintha nem lenne teljesen jó, nem?

2017. szept. 22. 21:43
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:

"Miért adunk 0 értéket a db-nek és a for ciklus végén miért növeljük 1-el, stb)"


Ezt gondold végig.


Például azt akarod nézni, hogy 1-től 10-ig hány páros szám van.

Akkor csinálsz egy számlálót, ami 0-ról indul, mert mielőtt elkezdesz számolni még 0db olyan számot találtál, ami páros.


Utána egy ciklusban elmész 1-től 10-ig.

1 nem páros, a "megtalált páros számok száma" marad 0.

2 páros, db-ot növeled 1-el 0-->1

3 nem páros, db nem nő.

4 páros db nő eggyel.


A végén kiírod, a db-ot és abból meg tudod, hogy hány páros szám van 1-től 10-ig.

2017. szept. 23. 21:04
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!