metoda Monte Carlo

0

Witam

dopiero zaczynam programować, proszę więc o wyrozumiałość;
na metody numeryczne mam napisać program obliczający całkę oznaczoną metodą Monte Carlo;

analizowałam wielokrotnie to co napisałam, niestety nie wiem gdzie popełniłam błąd (program zwraca błędny wynik):
byłabym wdzięczna za pomoc jego zlokalizowaniu


import java.util.*;

public class MonteCarlo {

public static void main(String[] args) {
	
	double suma, dx, xi;
	int i;
	
System.out.println("Obliczanie  całki oznaczonej za pomocą  metody Monte Carlo.\n");
    Scanner sc=new Scanner(System.in);
    System.out.println("Podaj wartosc xp /poczatek przedziału/");
    double xp=sc.nextDouble();
    System.out.println("Podaj wartosc xk /koniec przedziału/");
    double xk=sc.nextDouble();
    System.out.println("Podaj na ile punktów ma zostać dzielony przdział");
    double n=sc.nextDouble();
	
    suma = 0;
    dx = xk - xp;
    xi=xp + Math.random()*(xk - xp);  
    
    for(i = 1; i <= n; i++){
    
    suma = suma+ f(xi);
    suma= dx * suma /n;}

    System.out.println("Pole pod funkcją = " + suma);
}

//---------------------------------------------------------------------
   public static double f(double x)
    {
	   double wynik=x*x+x;
	 //double wynik=(x*x*x)+(4*x*x)-10;
	//double wynik= x*x-4+Math.sin(x);
      return wynik;
    }

}

0

A jaka jest koncepcja tych twoich obliczeń? Chyba nie najlepsza, skoro wynik wychodzi zły. Powinieneś wyznaczyć sobie wierzchołki prostokąta, w którym jest ta krzywa. Przyjmując, że w przedziale od xp do xk funkcja jest monotoniczna i dodatnia, to masz (xp, 0), (xk, 0), (xk, max(f(xp), f(xk))) i (xp, max(f(xp), f(xk))). Teraz losujesz dwie liczby: x z przedziału <xp, xk> i y z przedziału <0, max>. Obliczasz wartość f(x) i jak jest mniejsza od y to zaliczasz próbę. Na koniec mnożysz pole prostokąta przez stosunek zaliczonych do liczby prób i masz wynik. Twój kod chyba tego nie robi.

0

Dzięki,
jednak za pierwszy cel wyznaczyłam sobie Monte Carlo z 1 losowaniem (czyli prostszą wersję)
Błędy już namierzone, musiałam być wczoraj bardzo zmęczona ;-)

  1. losowanie xi było poza pętlą
  2. ostatni krok przed wyświetleniem wyniku z kolei zamiast poza, był wewnątrz pętli
    Poprawiłam i hula

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