1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
f <- function(x){2*exp(x)-5*log(x)} # fonction à évaluer
a <- c(1/10, 1/100, 1/1000) # les valeurs de a à utiliser
b <- 1
Riemann <- function(a,b,f){
n <- 1000 # se fixer un nombre "n" (suffisamment grand)
pas <- (b-a)/n # calculer l'amplitude de chaque intervalle
x <- seq(from=a, to=b, by=pas) # générer les points d'estimation de f
fx <- f(x) # ??? En fait, les fonctions de R sont d'ordre supérieur (voir le lambda calcul en programmation fonctionnelle)
Sr <- pas*sum(fx) # calcul de l'integrale de Riemann !
return(Sr)
}
Riemann <- Vectorize(Riemann, vectorize.args="a") # vectoriser le paramètre a !!! (on exploite le fait que R est un langage vectoriel)
# application aux différentres valeurs de a
results <- Riemann(a,b,f) # Pas de problème car "a" est vectorisé.
names(results) <- paste("R",round(a,length(a)),sep="*") # Juste pout rendre les choses propres
cat("\nLes différentes sommes de Riemann sont :\n\n"); print(results);cat("\n") # Affichage des résultats
#### Vérification des résultats avec la fonction intégrale propre à R #### (attention, il s'agit d'une approximation quadratique, pas l'intégrale de Riemann !)
integrate(f, lower=1/10, upper=1, subdivisions=1000)
integrate(f, lower=1/100, upper=1, subdivisions=1000)
integrate(f, lower=1/1000, upper=1, subdivisions=1000)
# NB:la fonction "integrate" de R n'est pas vectorizée, on peut le faire si on le veut, mais c'est pas nécessaire ici (on n'a que 3 intégrales à calculer) |
Partager