public class Simulation {

	public static void proba(){			//Exemple
		
		double[] xi = {-20,0,15,32,45};
		double[] pi = {0.2,0.3,0.1,0.15,0.25};
		double[] zi = new double[10000000];
		int N = 100000;
		double S = 0, V = 0;

		double esperance = 0;
		double variance = 0;
		
		for (int i=0; i<pi.length; i++){	//Esperance
			esperance += pi[i]*xi[i];
		}
		
		for (int i=0; i<pi.length; i++){	//Variance
			variance += Math.pow(xi[i], 2)*pi[i];
		}
		
		variance += -Math.pow(esperance,2);
		
		
		for(int i=0; i<N; i++){		//Boucle pour simuler
			
			double u = Math.random();
				
			if(u<0.2) zi[i] = -20;		//Methode salace mais ca marche
			else if(u<0.5) zi[i] = 0;
			else if(u<0.6) zi[i] = 15;
			else if(u<0.75) zi[i] = 32;
			else if(u<1) zi[i] = 45;
			else zi[i] = 1;
			
			S += zi[i]; 
			V += Math.pow(zi[i],2);
		}
		
		
		
		System.out.println("Esperance voulue :" + esperance);
		System.out.println("Variance voulue :" + variance);	

		
		double Moyenne = S/N;
		double VAR = V/N - Math.pow(Moyenne, 2);
		
		System.out.println("Esperance simulee : " + Moyenne);
		System.out.println("Variance simulee : " + VAR);
	}
	
	public static void Simulation(){		//Simulation de Monte Carlo
		
		double S = 0, V = 0;
		int N = 10000;
		double zi[] = new double[N];
		
		for(int j=0; j<N; j++){
			zi[j] = -Math.log(1-Math.random())/0.5;
			
			S += zi[j]; 
			V += Math.pow(zi[j],2);
		}
		
		double Moyenne = S/N;
		double VAR = V/N - Math.pow(Moyenne, 2);
		
		System.out.println(Moyenne);
		System.out.println(VAR);
	}
	
	public static void main(String[]args){
		proba();
	}
}
