Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.97 KB | None | 0 0
  1. import prog.io.ConsoleInputManager;
  2. import prog.io.ConsoleOutputManager;
  3.  
  4. import java.util.Random;
  5.  
  6. /** Scrivete un'applicazione che riceva in ingresso due numeri in virgola mobile x e y (con y >= x >= 1) e calcoli (in maniera
  7.     approssimata) l'integrale da x a y della funzione logaritmo, utilizzando la classe Random, descritta nell'Esercizio
  8.     precedente. */
  9.  
  10. public class Integrale {
  11.     public static void main(String[] args) {
  12.         ConsoleInputManager in = new ConsoleInputManager();
  13.         ConsoleOutputManager out = new ConsoleOutputManager();
  14.  
  15.         int a = in.readInt("Inserire valore a >= 1: ");
  16.         int b = in.readInt("Inserire valore b >= a: ");
  17.         //l'area rappresenta il valore all'estremo superiore dell'integrale
  18.         double area = (b-a)*Math.log(b);
  19.  
  20.         Random random = new Random();
  21.  
  22.         double randX, randY;
  23.         //contatore punti sotto la funzione log(x)
  24.         int under = 0;
  25.  
  26.         //maggiore è il numero di iterazioni, maggiore sarà la precisione
  27.         for(int i=0; i<10000000; i++){
  28.             /*  coordinata X generata moltiplicando il valore randomico [0,1] per la base del rettangolo
  29.                 shiftata dell'estremo inferiore dell'integrale */
  30.             randX = a+(random.nextDouble()*(b-a));
  31.             //coordinata Y generata moltiplicando il valore randomico [0,1] per l'altezza del rettangolo
  32.             randY = random.nextDouble()*Math.log(b);
  33.             //se la Y generata è minore del valore del logaritmo nella X generata, allora è sotto la funzione
  34.             if(randY<=Math.log(randX))
  35.                 under++;
  36.         }
  37.  
  38.         /*  l'integrale è circa uguale al rapporto dei punti sotto la funzione e il numero di punti generati
  39.             moltiplicato per l'area del rettangolo massimo */
  40.         double integrale = ((float)under/10000000)*area; //perché lo devo castare?
  41.         out.println("Integrale approsimato di log(x) tra " + a + " e " + b + ": " + integrale);
  42.  
  43.     }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement