Metoda Monte Carlo - Liczba PI

0

Witam, mam wyznaczyć liczbę PI metodą Monte Carlo, bez używania liczb SRAND itp. Zrobiłem taki program, jednak wypisuje mi on liczbę w okolicach 2,82, bardzo proszę o uwagi, gdzie tkwi problem.

#include <iostream>
#include <math.h>
using namespace std;

bool target(double x, double y, double a, double b, double r)
{
	double kolo;
	kolo = (((x - a)*(x - a)) + (y - b)*(y - b));
	if (kolo<= r*r)
		return true;
	else
		return false;
}

int main()
{
	double a, b, x, y, r;
	double srodek=0, wszystkie=0;
	double wynik;
	double krok = 0.0001;
	r = 1;
	x = 0;
	y = 0;
	a = -r;
	b = -r;
	while (a <= r && b <=r)
	{
		if (target(x, y, a, b, r))
			srodek++;
		
		a += krok;
		b += krok;

		wszystkie++;
	}
	cout << srodek << endl;
	cout << wszystkie << endl;
	wynik = 4 * (srodek / wszystkie);
	cout << wynik << endl;

	system("pause");
	return 0;
} 
0

W twoim kodzie liczysz iloraz podwojonego promienia i przekątnej kwadratu o boku 2

>>> 4 * 2./(2 * 2 ** .5)
2.82842712474619

Można pokryć kwadrat siatką punktów, wtedy otrzymujesz większą dokładność pomiaru
http://rextester.com/VIW78453

0
reptile333 napisał(a):

W twoim kodzie liczysz iloraz podwojonego promienia i przekątnej kwadratu o boku 2
>>> 4 * 2./(2 * 2 ** .5)
2.82842712474619

> Można pokryć kwadrat siatką punktów, wtedy otrzymujesz większą dokładność pomiaru
> http://rextester.com/VIW78453


Tak, tylko jeżeli linijki: a+=krok i b+=krok, zamienie na: a=rand i b=rand to wszystko działa, i wypisuje poprawne PI, nic więcej nie zmieniając i to mnie dziwi.
0

Dodaj coś takiego :

a += krok;
if (a>r)
{
a=0;
b += krok;
}
wszystkie++;

Wówczas wszystkie punkty będą przemiatane. I krok może być mniejszy.

0

Zamiast robić całkowanie po całej powierzchni robisz całkowanie jedynie po przekątnej!
Potrzebujesz dwóch zagnieżdżonych pętli. Jedna iteruje po x a druga po y.
Albo połączyć obie pętle razem taj jak zrobił to NemoRem.

3

A to nie jest jakiś żart? Monte Carlo bez losowości? To zwykłe całkowanie. Zresztą chyba pierwsze całkowanie metodą brute force jakie widzę.

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