algorytm.org

Implementacja w Java



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Całkowanie numeryczne - metoda Monte Carlo I - Implementacja w Java
Ocena użytkownikóww: *****  / 5
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 19 lutego 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Metoda_Monte_Carlo.java:
import java.util.Random;

// Calkowanie numeryczne - metoda Monte-Carlo
// www.algorytm.org
// (c)2007 by Tomasz Lubinski

public class Metoda_Monte_Carlo {

	//funkcja dla ktorej obliczamy calke
	private static double func(double x) {
		return x*x+3;
	}

	//	1 jeżeli punkt leży nad osią OY i jednocześnie pod wykresem funkcji całkowanej
	//	-1 jeżeli punkt leży pod osią OY i jednocześnie nad wykresem funkcji całkowanej
	//	0 w przeciwnym razie
	private static double funcIn(double x, double y) {
		if (( y > 0) && (y <= func(x)))
			return 1;
		else if (( y > 0) && (y <= func(x)))
			return -1;
		return 0;
	}
	
	//random number from a to b
	private static double randomPoint(double a, double b) {
        return  a + Math.random() * (b-a);
	}	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		double xp, xk, yp, yk, calka;
		int n, pointsIn;
		
		System.out.println("Podaj poczatek przedzialu calkowania");
		xp = Console.readDouble("");
		
		System.out.println("Podaj koniec przedzialu calkowania");
		xk = Console.readDouble("");

		System.out.println("Podaj dokladnosc calkowania (w setkach punktow)");
		n = Console.readInt("");
		n *= 100;

        yp = 0;
        yk = Math.ceil(Math.max(func(xp), func(xk)));
        
        pointsIn = 0;

        for (int i=0; i<n; i++) {
                pointsIn += funcIn(randomPoint(xp, xk), randomPoint(yp, yk));
        }

        calka = (pointsIn / (double)n) * ((xk-xp) * (yk-yp));        
		
		System.out.println("Wartosc calki wynosi w przyblizeniu " + calka);

	}

}
Dodaj komentarz