# QUELQUES FONCTIONS SUPPORT f <- function(x){1 / (1 + x^2)} # stric. décroissante sur [0 ; 1] f <- function(x){sqrt(1 / (1 + x^2))} # stric. décroissante sur [0 ; 1] f <- function(x){sqrt((x+2)/(x+1))} # stric. décroissante sur [0 ; 1] f <- function(x){exp(-(x*x)/2)} # stric. décroissante sur R+ f <- function(x){exp(-x*x)} # stric. décroissante sur R+ f <- function(x){exp(-(x*x)/2) / sqrt(2 * pi)}# stric. décroissante sur R+ f <- function(x){1 / x} # stric. décroissante sur [1 ; 2] f <- function(x){exp(-x)} # stric. décroissante #------------------------------------ f <- function(x){exp(x)} # stric. croissante f <- function(x){exp(-(x*x)/2) / sqrt(2 * pi)} # stric. croissante sur R- f <- function(x){x^2 * exp(x) / (1 + x)} #------------------------------------------------- #------------------------------------------------- # Méthode des rectangles (Riemann, dans Terracher T S p 134) # Sur un intervalle [0 ; 1] où f est strictement DÉCROISSANTE. # On peut choisir la valeur de n n <- 5L Grand_S <- 0 ; Petit_s <- 0 for (i in 0:(n - 1)){ Grand_S <- Grand_S + f(i / n) * 1 / n Petit_s <- Petit_s + f((i + 1) / n) * 1 / n } cat("Grand_S", Grand_S, "\nPetit_s", Petit_s, "\n\n") plot(f, 0, 1, col = "blue") # On peut vérifier avec la fonction "integrate" native de R integrate(f, 0, 1, subdivisions = n) # Mais on peut aussi éviter une boucle interprétée en utilisant les # opérateurs sur les suites ... n <- 5L subGrand_S <- seq(0, n - 1, 1) / n subPetit_s <- seq(1, n, 1) / n Grand_S <- sum(f(subGrand_S) * 1 / n) Petit_s <- sum(f(subPetit_s) * 1 / n) cat("Grand_S", Grand_S, "\nPetit_s", Petit_s, "\n\n") #------------------------------------------------- # Méthode des rectangles (Riemann, dans Hyperbole T S 2011 p 199) # Sur un intervalle [0 ; 1] où f est strictement CROISSANTE. # On peut choisir la valeur de n n <- 5L Grand_S <- 0 ; Petit_s <- 0 for (i in 0:(n - 1)){ Grand_S <- Grand_S + f((i + 1) / n) * 1 / n Petit_s <- Petit_s + f(i / n) * 1 / n } cat("Grand_S", Grand_S, "\nPetit_s", Petit_s, "\n\n") plot(f, 0, 1, col = "blue") # On peut vérifier avec la fonction "integrate" native de R integrate(f, 0, 1, subdivisions = n) # Mais on peut aussi éviter une boucle interprétée en utilisant les # opérateurs sur les suites ... n <- 5L subGrand_S <- seq(1, n, 1) / n subPetit_s <- seq(0, n - 1, 1) / n Grand_S <- sum(f(subGrand_S) * 1 / n) Petit_s <- sum(f(subPetit_s) * 1 / n) cat("Grand_S", Grand_S, "\nPetit_s", Petit_s, "\n\n") # La version R_fonction avec représentation graphique des rectangles # Calcul approché de l'intégrale riemannC0_1 <- function(n = 5L){ Grand_S <- 0 ; Petit_s <- 0 for (i in 0:(n - 1)){ Grand_S <- Grand_S + f((i + 1) / n) * 1 / n Petit_s <- Petit_s + f(i / n) * 1 / n } cat("Grand_S", Grand_S, "\nPetit_s", Petit_s, "\n\n") # Les représentations graphiques par(mfrow = c(2, 1)) # Les rectangles grand S plot(f, 0, 1, col = "blue", main = paste("Aire totale des", n, "“grands” rectangles :", round(Grand_S, 4))) grid() for (i in 0:(n - 1)){ lines(c(i / n, i / n, (i + 1) / n, (i + 1) / n), c(0, f((i + 1) / n), f((i + 1) / n), 0), col = "green") } # Les rectangles petit s plot(f, 0, 1, col = "blue", main = paste("Aire totale des", n, "“petits” rectangles :", round(Petit_s, 4))) grid() for (i in 0:(n - 1)){ lines(c(i / n, i / n, (i + 1) / n, (i + 1) / n), c(0, f(i / n), f(i / n), 0), col = "red") } } #------------------------------------------------- #------------------------------------------------- # S ET s POUR UNE FONCTION STRICTEMENT MONOTONE SUR UN INTERVALLE [a ; b] # La R_fonction concernant les fonctions stric. croissante sur [a ; b]. riemannC <- function(a =0, b = 1, n = 5){ sub <- (b - a) / n Grand_S <- 0 ; Petit_s <- 0 for (i in 0:(n - 1)){ Grand_S <- Grand_S + f(a + (i + 1) * sub) * sub Petit_s <- Petit_s + f(a + i * sub) * sub } cat("Grand_S", Grand_S, "\nPetit_s", Petit_s, "\nS - s =", Grand_S - Petit_s, "\n\n") # Les représentations graphiques par(mfrow = c(2, 1)) # Les rectangles grand S plot(f, a, b, col = "blue", main = paste("Aire totale des", n, "“grands” rectangles :", round(Grand_S, 4))) grid() for (i in 0:(n - 1)){ lines(c(a + i * sub, a + i * sub, a + (i + 1) * sub, a + (i + 1) * sub), c(0, f(a + (i + 1) * sub), f(a + (i + 1) * sub), 0), col = "green") } # Les rectangles petit s plot(f, a, b, col = "blue", main = paste("Aire totale des", n, "“petits” rectangles :", round(Petit_s, 4))) grid() for (i in 0:(n - 1)){ lines(c(a + i * sub, a + i * sub, a + (i + 1) * sub, a + (i + 1) * sub), c(0, f(a + i * sub), f(a + i * sub), 0), col = "red") } } # La R_fonction concernant les fonctions stric. décroissante sur [a ; b]. riemannD <- function(a =0, b = 1, n = 5){ sub <- (b - a) / n Grand_S <- 0 ; Petit_s <- 0 for (i in 0:(n - 1)){ Grand_S <- Grand_S + f(a + i * sub) * sub Petit_s <- Petit_s + f(a + (i + 1) * sub) * sub } cat("Grand_S", Grand_S, "\nPetit_s", Petit_s, "\nS - s =", Grand_S - Petit_s, "\n\n") # Les représentations graphiques par(mfrow = c(2, 1)) # Les rectangles grand S plot(f, a, b, col = "blue", main = paste("Aire totale des", n, "“grands” rectangles :", round(Grand_S, 4))) grid() for (i in 0:(n - 1)){ lines(c(a + i * sub, a + i * sub, a + (i + 1) * sub, a + (i + 1) * sub), c(0, f(a + i * sub), f(a + i * sub), 0), col = "green") } # Les rectangles petit s plot(f, a, b, col = "blue", main = paste("Aire totale des", n, "“petits” rectangles :", round(Petit_s, 4))) grid() for (i in 0:(n - 1)){ lines(c(a + i * sub, a + i * sub, a + (i + 1) * sub, a + (i + 1) * sub), c(0, f(a + (i + 1) * sub), f(a + (i + 1) * sub), 0), col = "red") } } #-------------------------------------------------