TP3
Labdouni yousra
G1wic
EXO1 :
n<- 4
seed<- 3779
random<- function(seed,n){
s<-[Link](seed^2)
while(nchar(s) <(2*n)){
s<-paste0("0",s)
middle_start<-( nchar(s)-2*n)/2+1
middle_end<- middle_start +2*n-1
new_seed<- [Link](substr(s, middle_start,middle_end))
return(new_seed)
for (i in 1:20) {
seed<- random(seed,n)/10^(2*n)
print(seed)
}
L’exécution :
n<- 2
seed<- 3779
random<- function(seed,n){
s<-[Link](seed^2)
while(nchar(s) <(2*n)){
s<-paste0("0",s)
middle_start<-( nchar(s)-2*n)/2+1
middle_end<- middle_start +2*n-1
new_seed<- [Link](substr(s, middle_start,middle_end))
return(new_seed)
for (i in 1:20) {
seed<- random(seed,n)/10^(2*n)
print(seed)
}
L’exécution :
Résumé :
Je fais le principe de « prgn » ce qui prendre un nombre et puis met le nombre au carré et prend le
milieu, mais il le faut être la même taille du nombre. Si le milieu n’a pas la même taille donc le
programme « prgn » est le complété par des zéros
EXO2 :
f <- function(x) {
return((326 * x) %% 332)
x_val <- 0:30000
y_val <- sapply(x_val, f)
plot(x_val, y_val, type = "p", col = "green", xlab = "x", ylab = "f(x)",
main = "Graphe de f(x) = (326 * x) %% 332")
L’exécution :
Résumé :
Le programme définit une fonction mathématique, génère des valeurs pour x, calcule les valeurs
correspondantes de y en appliquant la fonction, puis trace le graphe de la fonction sur un graphique
EXO3 :
1) Pour (m = 16, a = 13, c = 7, X0 = 4).
prgn <- function( a, c, seed , m, n) {
x <- [Link](n) #initialisation de n
x[1] <- seed
for (i in 1:n) {
x[i+1] <- (a * x[i] + c) %% m
return(x/m)
test1 <- prgn( 13, 7, 4,16, 20)
test1
L’exécution :
2) Pour (m = 16, a = 19, c = 0, X0 = 5(impair)).
prgn <- function( a, c, seed , m, n) {
x <- [Link](n) #initialisation de n
x[1] <- seed
for (i in 1:n) {
x[i+1] <- (a * x[i] + c) %% m
return(x/m) }
test2 <- prgn(16, 19, 0, 5, 20)
test2
L’exécution :
3) Pour (m = 7, a = 3, c = 0, X0 = 6).
prgn <- function( a, c, seed , m, n) {
x <- [Link](n) #initialisation de n
x[1] <- seed
for (i in 1:n) {
x[i+1] <- (a * x[i] + c) %% m
return(x/m) }
test3 <- prgn(7, 3, 0, 6, 20)
test3
L’exécution :
Que pensez-vous de la période du générateur pour chaque cas ?
➢ La période d'un générateur à congruences linéaires est la longueur de la séquence avant
qu'elle ne commence à se répéter.
4) Pour (m = (231)−1, a = 75, c = 0).
prgn <- function( a, c, seed , m, n) {
x <- [Link](n) #initialisation de n
x[1] <- seed
for (i in 1:n) {
x[i+1] <- (a * x[i] + c) %% m
return(x/m) }
test4 <- prgn((2^31) - 1, 7^5, 0, 1, 20)
test4
hist(test4, main = "Distribution - Test 4", xlab = "Valeurs générées", col = "lightblue", freq = FALSE)
hist(runif(20), main = "Distribution Uniforme", xlab = "Valeurs générées", col = "lightgreen", freq =
FALSE)
L’exécution :
Résumé :
Ce programme génère des séquences de nombres pseudo-aléatoires en utilisant un Générateur À
Congruences Linéaires avec différentes configurations de paramètres, puis compare ces séquences avec
une distribution uniforme pour le dernier test