Je pense que pour un n petit, l’influence de teta sera grande. Si teta est petit, alors tous les points ne seront pas reliés. Au contraire, pour un n très grand et le même teta, tous les points devraient être reliés.
Je pense que la courbe va ressemblé à un S, mais que celui-ci va être décalé vers la gauche en fonction de N.
library("ggplot2");
set.seed(42);
genereDisque = function(N,R){
res= data.frame();
i = 1;
repeat{
x = runif(1,-1,1);
y = runif(1,-1,1);
if(sqrt(x^2+y^2) <= R){
res = rbind(res, data.frame(x=x, y=y));
i=i+1;
}
if(i==N+1) break;
}
res;
}
#dataaa = genereDisque(10,1);
#ggplot(data=dataaa, aes(x=x, y=y))+ geom_point() + coord_fixed();
#dist(dataaa);
grapheDeConnexion = function(N,R,teta,graphe=FALSE){
donnees = genereDisque(N,R);
res = data.frame();
connex = matrix(data = FALSE, nrow = N, ncol = N);
matrix = as.matrix(dist(donnees));
matrix[1,1] = TRUE;
for(i in 2:(N)){
for(j in 1:(i-1)){
if(matrix[i,j] <= teta){
res = rbind(res, data.frame(x1 = donnees[i,1], y1 = donnees[i,2], x2 = donnees[j,1], y2 = donnees[j,2]));
connex[i,j] = TRUE;
connex[j,i] = TRUE;
}
}
connex[i,i] = TRUE;
}
if(graphe){
p = ggplot(data=donnees, aes(x=x, y=y))+ geom_point() +geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2), data = res) + coord_fixed();
return(p);
}
else{
return(connex);
}
}
calculConnexite = function(N,R,teta){
matrice = grapheDeConnexion(N,R,teta);
#print(matrice);
X0 = rep(FALSE,N);
for (i in 1:N)
{
if(sum(((matrice%*%matrice[i,])!=0))==N){
return(TRUE);
}
}
return(FALSE);
}
#calculConnexite(100,1,0.60);
calculP = function(N,R,pas,repetition){
tailleBoucle = floor(R/pas);
#print(tailleBoucle);
nbTrue = rep(0, tailleBoucle);
for(i in 1:repetition){
pasCourant = pas;
for(j in 1:tailleBoucle){
if(calculConnexite(N,R,pasCourant)){
#print("a");
nbTrue[j] = nbTrue[j] + 1;
}
#print(pasCourant);
pasCourant = pasCourant + pas;
}
#print(nbTrue);
}
for(i in 1:tailleBoucle){
nbTrue[i] = nbTrue[i]/repetition;
}
return(nbTrue);
}
#"calculP(10,1,0.05,20);
N=100;
Sur ce premier graphe, on voit que pour teta=0.2, tous les points ne sont pas reliés entre eux.
grapheDeConnexion(N,1, 0.2, graphe = TRUE);
Ici, pour teta=0.4, on voit que tous les points sont reliés.
grapheDeConnexion(N,1, 0.4, graphe = TRUE);
Ici, pour un N grand et un teta plutôt grand, tous les points sont pratiquements reliés entre eux.
grapheDeConnexion(N,1, 0.6, graphe = TRUE);
On voit donc que plus teta augmente, et plus les points sont reliés les uns aux autres (mais on s’y attendait déjà).
Attention : j’ai utilisé la fonction geom_smooth() afin d’aficher des intervals de confiance. Cependant la courbe passe au dessus de 1, mais les valeurs elles, ne dépassent pas 1.
On voit ici que le le S se situe entre 0.5 et 1.
pas = seq(0.05,1,0.05);
N=10;
proba = calculP(N,1,0.05,20);
df=data.frame(proba= proba, valeur=pas);
ggplot(data=df, aes(x=pas,y=proba)) + geom_smooth();
## `geom_smooth()` using method = 'loess'
De même pour un N plus grand, le S se situe un peu plus vers la gauche.
N=20;
proba = calculP(N,1,0.05,20);
df=data.frame(proba= proba, valeur=pas);
ggplot(data=df, aes(x=pas,y=proba)) + geom_smooth();
## `geom_smooth()` using method = 'loess'
Pour un N très grand, le S commence même avant un teta de 0.5 .
N=100;
proba = calculP(N,1,0.05,20);
df=data.frame(proba= proba, valeur=pas);
ggplot(data=df, aes(x=pas,y=proba)) + geom_smooth();
## `geom_smooth()` using method = 'loess'
On voit donc que la courbe est sensiblement la même, mais qu’elle se décalle en fonction de N.
N influence moins la courbe que ce que je pensais.