# EXERCICE 3.1

bet=5
n=10000

g<-function(x)
{
	if (x>0)
	{
		return(exp(bet*x))
	}
	else
	{
		return(0)
	}	
}

ft<-function(x)
{
	return(exp(-(x-bet)^2/2)/sqrt(2*pi))
}

f<-function(x)
{
	return(exp(-x^2/2)/sqrt(2*pi))
}

h<-function(x)
{
	return(exp(bet*x))
}

gg<-function(x)
{
	return(g(x)*f(x)/ft(x))
}

#Question 1
s=0
for (i in 1:n)
{
	x=rnorm(2,0,1)	
	s=s+(g(x[1])-g(x[2]))^2
}
v1=s/(2*n)
print(v1)
#on constate que la variance est très grande

#Question 2
#Échantillonage d'importance
s=0
for (i in 1:n)
{
	x=rnorm(2,bet,1)
	s=s+(gg(x[1])-gg(x[2]))^2
}
print(s/(2*n))
#on constate que la variance est bien réduite par par rapport à la question 1

#Question 3
#Variable de contrôle
s=0
for (i in 1:n)
{
	x=rnorm(2,0,1)
	s=s+(g(x[1])-h(x[1])-g(x[2])+h(x[2]))^2
}
print(s/(2*n))
#on constate que la variance est bien réduite par par rapport à la question 1

#Question 4
#Variables antithétiques
n=10000
s=0
for (i in 1:n)
{
	x=rnorm(2,0,1)
	s=s+((g(x[1])+g(-x[1]))/2-(g(x[2])+g(-x[2]))/2)^2
}
v4=s/(2*n)
print(v4)
print(v4/v1)
#la réduction de variance n'est pas flagrante, il faut prendre n plus grand pour avoir une meilleure précision 

-------------------------------------------------------------

# EXERCICE 3.2

# Question 2

n=1000
s=0
for (i in 1:n)
{
	x=rnorm(2,0,1)
	s=s+(sqrt(abs(x[1]))-sqrt(abs(x[2])))^2
}
print(s/(2*n))

# Question 4
s=0
for (i in 1:n)
{
	x=rnorm(2,0,1)
	s=s+(abs(x[1])-sqrt(abs(x[1]))-abs(x[2])+sqrt(abs(x[2])))^2
}
print(s/(2*n))


-------------------------------------------------------------

# EXERCICE 3.3

# Question 1

indic<-function(x)
{
	r=0
	if (x>l)
	{
		if (x<l+1)
		{
			r=1
		}
	}
	return(r)
}
			

n=10000
s=0
l=3
for (i in 1:n)
{
	u=runif(1,0,1)
	x=-log(u)
	s=s+indic(x)
}
print(s/n)

s=0
for (i in 1:n)
{
	u=runif(2,0,1)
	x1=-log(u[1])
	x2=-log(u[2])
	s=s+(indic(x1)-indic(x2))^2
}
print(s/(2*n))

# Question 2

s=0
for (i in 1:n)
{
	u=runif(1,l,l+1)
	s=s+exp(-u)
}
print(s/n)

s=0
for (i in 1:n)
{
	u=runif(2,l,l+1)
	s=s+(exp(-u[1])-exp(-u[2]))^2
}
print(s/(2*n))
# on remarque que la variance est réduite

# EXERCICE 3.3 (avec gaussienne)

l=5
n=100000

ftilde<-function(x)
{
	z=0
	if (x>l) 
	{
		if (x<l+1)
		{
			z=exp(-x)/(exp(-l)-exp(-l-1))
		}
	}
	return(z)
}

f<-function(x)
{
	return(exp(-x*x/2)/sqrt(2*pi))
}

g<-function(x)
{
	z=0
	if (x>l)
	{
		if (x<l+1)
		{
			z=1
		}
	}
	return(z)
}

Fexpo<-function(u)
{
	return(-log(exp(-l)*(1-u)+u*exp(-l-1)))
}

print("valeur approchée par méthode déterministe : ")
integrate(f,l,l+1)
I=integrate(f,l,l+1)$value

# methode 1
s=0
for (i in 1:n)
{
	u=runif(1,l,l+1)
	s=s+f(u)
}
cat("moyenne 1 : ",s/n)

s=0
for (i in 1:n)
{
	u=runif(1,l,l+1)
	v=runif(1,l,l+1)
	s=s+(f(u)-f(v))^2
}
cat("variance relative 1 : ",s/(2*n*I^2))

	

# methode 2
s=0
for (i in 1:n)
{
	u=runif(1,0,1)
	x=Fexpo(u)
	s=s+f(x)/ftilde(x)
}
cat("moyenne 2 :",s/n)

s=0
for (i in 1:n)
{
	u=runif(1,0,1)
	x=Fexpo(u)
	v=runif(1,0,1)
	y=Fexpo(v)
	s=s+(f(x)/ftilde(x)-f(y)/ftilde(y))^2
}
cat("variance  relative 2 : ",s/(2*n*I^2))
	

