Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import prog.io.ConsoleInputManager;
- import prog.io.ConsoleOutputManager;
- import java.util.Random;
- /** Scrivete un'applicazione che riceva in ingresso due numeri in virgola mobile x e y (con y >= x >= 1) e calcoli (in maniera
- approssimata) l'integrale da x a y della funzione logaritmo, utilizzando la classe Random, descritta nell'Esercizio
- precedente. */
- public class Integrale {
- public static void main(String[] args) {
- ConsoleInputManager in = new ConsoleInputManager();
- ConsoleOutputManager out = new ConsoleOutputManager();
- int a = in.readInt("Inserire valore a >= 1: ");
- int b = in.readInt("Inserire valore b >= a: ");
- //l'area rappresenta il valore all'estremo superiore dell'integrale
- double area = (b-a)*Math.log(b);
- Random random = new Random();
- double randX, randY;
- //contatore punti sotto la funzione log(x)
- int under = 0;
- //maggiore è il numero di iterazioni, maggiore sarà la precisione
- for(int i=0; i<10000000; i++){
- /* coordinata X generata moltiplicando il valore randomico [0,1] per la base del rettangolo
- shiftata dell'estremo inferiore dell'integrale */
- randX = a+(random.nextDouble()*(b-a));
- //coordinata Y generata moltiplicando il valore randomico [0,1] per l'altezza del rettangolo
- randY = random.nextDouble()*Math.log(b);
- //se la Y generata è minore del valore del logaritmo nella X generata, allora è sotto la funzione
- if(randY<=Math.log(randX))
- under++;
- }
- /* l'integrale è circa uguale al rapporto dei punti sotto la funzione e il numero di punti generati
- moltiplicato per l'area del rettangolo massimo */
- double integrale = ((float)under/10000000)*area; //perché lo devo castare?
- out.println("Integrale approsimato di log(x) tra " + a + " e " + b + ": " + integrale);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement