
# EXERCICE 2.1 ---------------------------------------

n=1000
x=c()
for (i in 1:n)
{
	u=-log(runif(1,0,1))
	x=c(x,u)
}
hist(x,freq=FALSE)
t=seq(0,8,0.1)
lines(t,exp(-t),type='l',col='red')

# EXERCICE 2.3 ---------------------------------------

#algo de rejet
simu<-function(t)
{
	b=0
	while (b==0)
	{
		u=runif(2,-1,1)
		if (u[1]^2+u[2]^2<1)
		{
			b=1
		}
	}
	return(u)
}

#dessin de points 
n=100
tabx=c();taby=c()
for (i in 1:n)
{
	u=simu(1)
	tabx=c(tabx,u[1])
	taby=c(taby,u[2])
}
plot(tabx,taby,pch=1)

# trace d'un cercle
x=seq(-1,1,0.01)
y=sqrt(1-x^2)
lines(x,y,'l')
y=-sqrt(1-x^2)
lines(x,y,'l')

# EXERCICE 2.4 ---------------------------------------

bernoulli<-function(s)
{
	u=runif(1,0,1)
	if (u<s)
	{ 
		r=1
	}
	else
	{
		r=0
	}
	return(r)
}

simug<-function(t)
{
	b=0
	while (b==0)
	{
		s=bernoulli(0.5)
		u=runif(2,0,1)
		x=-log(u[1])
		y=-log(u[2])
		if (2*y>(1-x)^2)
		{
			b=1
		}
	}
	return((2*s-1)*x)
}

n=1000
tab=c()
for (i in 1:n)
{
	tab=c(tab,simug(1))
}
hist(tab,freq=FALSE)
x=seq(-5,5,0.05)
y=exp(-x*x/2)/sqrt(2*pi)
lines(x,y,'l',col='red')

# EXERCICE 2.5 ---------------------------------------
	
n=10000
p=0.05
x<-rnorm(n,1,1)
y=order(x)
z=x[y] #on classe les valeurs par ordre croissant
k=trunc(p*n)
cat("VaR estimée : ",-z[k])
	
	
# EXERCICE 2.8 ---------------------------------------

a=2
C=(1-exp(-a))^(-1)

f<-function(t)
{
	r=0
	if (t>=0)
	{
		if (t<=a)
		{
			r=exp(-t)
		}
	}
	return(r)	
}

simu01<-function(t)
{
	b=0
	while (b==0)
	{
		u=runif(1,0,1)	
		x=runif(1,0,a)
		if (u<exp(-x))
		{
			b=1
		}	
	}
	return(x)
}

n=1000
tab=c()
for (i in 1:n)
{
	tab=c(tab,simu01(1))
}
hist(tab,freq=FALSE)
x=seq(0,a+1,0.05)
y=c()
for (i in 1:length(x))
{
	y=c(y,f(x[i]))	
}
lines(x,y,'l',col='red')

simu02<-function(t)
{
	b=0
	while (b==0)
	{
		u=runif(1,0,1)
		v=runif(1,0,1)
		x=-log(v)
		if (u<f(x)*exp(x))
		{
			b=1
		}
	}
	return(x)
}


n=1000
tab=c()
for (i in 1:n)
{
	tab=c(tab,simu02(1))
}
hist(tab,freq=FALSE)
x=seq(0,a+1,0.05)
y=c()
for (i in 1:length(x))
{
	y=c(y,f(x[i]))	
}
lines(x,y,'l',col='red')

# EXERCICE 2.9 ---------------------------------------

f1<-function(t)
{
	r=0
	if (t>=1)
	{
		r=exp(-t*t)
	}
	return(r)	
}

f2<-function(t)
{
	return(exp(-t*t))
}

g2<-function(t)
{
	r=0
	if (t>=0)
	{
		r=exp(-t)
	}
	return(t)	
}

simu29<-function(t)
{
	b=0
	while (b==0)
	{
		u=runif(1,0,1)
		v=runif(1,0,1)
		x=-log(v)
		if (u<f1(x)/g2(x))
		{
			b=1
		}	
	}	
	return(x)
}

n=1000
tab=c()
for (i in 1:n)
{
	tab=c(tab,simu29(1))
}
hist(tab,freq=FALSE)
x=seq(1,3,0.05)
y=c()
# on peut calculer une valeur approchee de Z avec R
Z=integrate(f2,lower=1,upper=10)$value
for (i in 1:length(x))
{
	y=c(y,f2(x[i])/Z)	
}
lines(x,y,'l',col='red')
