Plate-forme technologique SMCS
|
|
- Nadine Gignac
- il y a 8 ans
- Total affichages :
Transcription
1 Plate-forme technologique SMCS Midis du SMCS Toujours plus vite avec R! Auteur: Alain Guillet - SMCS - IMMAQ Date: Le 1er décembre 2009 Plate-forme technologique de Support en Méthodologie et Calcul Statistique, UCL - Voie du Roman Pays, 20 B-1348 Louvain-la-Neuve Tel: (32) Fax: (32)
2 Table des matières 1 Deviner ou mesurer? 2 2 La vectorisation Pourquoi vectoriser? La famille.apply mapply() et Vectorize() Les boucles Initialisation Dedans ou dehors? Parfois nécessaires! Optimiser Gagner du temps en utilisant des fonctions optimisées Programmant en C ou Fortran En résumé : la bonne pratique 12 6 A faire : parallélisation de la tâche 12 1
3 Introduction R est un langage très utilisé pour ses aptitudes à faire de la statistique et des graphiques personnalisables. Par contre, on oublie trop souvent que R est également un langage de programmation complet bien adapté à la programmation scientifique. Comme tout langage de programmation, une mauvaise utilisation de celui-ci, voire une méconnaissance des spécificités du langage, peuvent conduire à une très forte augmentation du temps de calcul. Cependant, il est inutile de passer des heures à essayer d optimiser un programme dont le bénéfice ne sera que de quelques secondes ou bien de casser un code qui fonctionnait en introduisant une erreur dedans. Les seuls cas pour lesquels l on devrait optimiser son programme sont : pour un package pour des simulations ou, plus généralement, pour un programme qui sera exécuté un grand nombre de fois Il y a trois règles à ne jamais oublier dans tout programme R : 1. Ne pas optimiser sauf en cas de réelle nécessité 2. Toujours commencer les programmes en effaçant tous les objets de l espace de travail :rm(list=ls()) 3. Vectoriser les expressions dès la première écriture 1 Deviner ou mesurer? Lorsque le temps de calcul d un programme semble long, il ne faut pas essayer d optimiser immédiatement le code en se disant que c est ici ou là qu est le problème. Tout d abord, on calcule le temps global à l aide de la fonction system.time(), puis on va utiliser la fonction Rprof() afin de déterminer quelle étape du programme ralentit l exécution. Cette seconde fonction peut aussi donner des informations sur l utilisation de la mémoire grâce à l option memory.profiling. > Rprof("tmp.out") > toto <- Vectorize(function(fn, n) system.time(fn(n)), vectorize.args = c("n")) > time1 <- function(n) { + a <- NULL + for (i in 1:n) a <- c(a, i^2) + return(a) > exemple1 <- toto(time1, seq(0, 5000, by = 1000)) > Rprof() Les packages proftools et profr permettent de résumer l information d un profilage d exécution de code afin de mieux comprendre ce qui se passe durant son exécution. Ci-dessous un exemple avec le package proftools : > library(proftools) > flatprofile(readprofiledata("tmp.out")) total.pct total.time self.pct self.time.call <Anonymous> do.call dotrycatch eval evalfunc
4 mapply Sweave system.time toto try trycatch trycatchlist trycatchone withvisible fn gc ^ > flatprofile(readprofiledata("tmp.out"), FALSE) self.pct cum.self.time self.time total.pct total.time gc fn ^ Call <Anonymous> do.call dotrycatch eval evalfunc mapply Sweave system.time toto try trycatch trycatchlist trycatchone withvisible La vectorisation 2.1 Pourquoi vectoriser? R est un langage interprété, i.e. le code est analysé, puis évalué lors de l exécution, il est alors plus efficace d écrire du code vectorisé (qui sera exécuté de manière vectorielle). De plus, il existe un grand nombre de fonctions vectorisées dans R :%*%,%o%,colsums(),colmeans(),... Cependant, comme nous le verrons un peu plus loin, les boucles ne sont pas nécessairement mauvaises (cf. la section 3 sur les boucles) 2.2 La famille.apply La famille.apply permet d appliquer une fonction, que l on a créée ou pas, à un objet de R de manière vectorielle : apply() à une matrice ou un array en choisissant une ou plusieurs dimensions sur lesquelles on appliquera la fonction lapply(),sapply() ettapply() à un vecteur, une liste ou un dataframe rapply() qui est unlapply() d un objet de la classe dendogram récursif dendrapply() qui s applique aux noeu 3
5 Par exemple, si l on veut trouver le maximum dans chacune des colonnes d une matrice, on pourra utiliser la fonction apply() en spécifiant la dimension sur laquelle on souhaite travailler (1 : lignes, 2 : colonnes, etc.) et en passant la fonctionmax comme argument : > A <- matrix(rnorm(12), ncol = 4) > A [,1] [,2] [,3] [,4] [1,] [2,] [3,] > apply(a, 2, max) [1] Ou encore, si l on veut extraire la deuxième colonne de deux matrices qui sont les deux éléments d une liste : > A <- matrix(1:4, ncol = 2) > B <- matrix(5:10, ncol = 3) > (L <- list(a, B)) [[1]] [,1] [,2] [1,] 1 3 [2,] 2 4 [[2]] [,1] [,2] [,3] [1,] [2,] > lapply(l, "[",, 1) [[1]] [1] 1 2 [[2]] [1] 5 6 > sapply(l, function(x) x[, 1]) [,1] [,2] [1,] 1 5 [2,] 2 6 Nous avons utilisé ici les fonctionslapply() qui crée en sortie une liste etsapply() qui a simplifié le résultat, d où le s. Il est à noter que nous aurions également pu utiliser la fonction rapply(). La sortie aurait alors été un vecteur. 2.3 mapply() et Vectorize() mapply() et Vectorize() permettent de passer des vecteurs d arguments à des fonctions qui normalement utilisent un seul argument comme la fonction integrate() de R qui permet de calculer une intégrale entre deux 4
6 Densité d'une normale N(0,1) y exp( x 2) π dx x FIGURE 1 Intégrer sur la fonction de densité d une normale N(0,1) bornes. Cependant, ces deux fonctions ne sont pas tout à fait équivalentes puisquevectorize est plus générale que mapply(). En effet, on peut mettre la fonction comme paramètre alors que la fonction est fixée une fois pour toute avecmapply(). Supposons qu on veuille calculer l aire en rouge sur le graphique 1, exp( x/2) 2π, on peut utiliser la fonction integrate() de R avec la fonction dnorm. On aurait pu utiliser la fonction pnorm() qui permet de calculer une probabilité pour une distribution normale mais nous ne pourrions alors plus utiliser les fonctions mapply() et Vectorize(). > integrate(dnorm, lower = -1.96, upper = 1.96) with absolute error < 1.0e-11 > pnorm(1.96) - pnorm(-1.96) [1] Imaginions maintenant que nous souhaitions calculer l intégrale de cette fonction entre et -3, -3 et -2, -2 et -1, -1 et 0, 0 et 1, 1 et 2, 2 et 3 et enfin 3 et +. On pourrait utiliser huit fois la fonctionintegrate() en changeant 5
7 les bornes d intégration mais nous allons plutôt utiliser la fonction mapply comme ci-dessous en définissant deux vecteurs de bornes : > lo <- c(-inf, -3:3) > up <- c(-3:3, Inf) > (P <- mapply(function(lo, up) integrate(dnorm, lo, up)$value, + lo, up)) [1] [7] > sum(p) [1] 1 La fonction mapply est suffisante tant que l on intègre sur la même fonction, comme dit plus haut, et a une syntaxe plus facile que la fonction Vectorize() pour laquelle le calcul se fait en deux étapes : dans un premier temps, on crée la fonctionintegrate(), puis on l applique àdnorm() et les vecteurs de bornes des intégrales. > Integrate <- Vectorize(function(fn, lower, upper) integrate(fn, + lower, upper)$value, vectorize.args = c("lower", "upper")) > Integrate(dnorm, lower = lo, upper = up) [1] [7] C est plus compliqué mais si on veut calculer l intégrale d une autre fonction, il suffira de prendre la fonction Integrate() définit comme ci-dessus et lui appliquer les nouveaux paramètres. 3 Les boucles Contrairement à ce qui a pu être compris dans ce qui a été dit précédemment, les boucles ne sont pas toujours mauvaises. Elles sont conseillées dans les cas ci-après : Quand il est difficile d écrire du code vectorisé Quand le code vectorisé utilise beaucoup de mémoire Les boucles sont plus efficaces que les appels récursifs dans R Par ailleurs, il ne faut pas éviter de construire une boucle pour le plaisir d éviter une boucle, au contraire, si la boucle semble être le meilleur moyen de programmer un morceau de code, il faut la faire.malgré tout, afin qu une boucle ne ralentisse pas un programme, il y a quelques règles à suivre : Initialiser les nouveaux objets à leur taille définitive avant la boucle plutôt qu augmenter leurs tailles dans la boucle sinon à chaque itération la mémoire doit être allouée et l objet copié Ne pas faire dans la boucle ce qui peut être fait en dehors (un calcul, vérifier une condition sur chaque élément, etc.) 3.1 Initialisation Dans l exemple suivant, on souhaite créer le vecteur a tel que i, a i = i 2. On le fait de trois manières : la première sans initialisation de a, la deuxième en initialisant a et la dernière de manière vectorielle, puis on calcule les temps d exécution des trois procédés de création. > # Sans initialisation > initialisation1 <- function(n){ + a <- NULL 6
8 + for(i in 1:n) a <- c(a,i^2) > # Avec initialisation > initialisation2 <- function(n){ + a <- numeric(n) + for(i in 1:n) a[i] <- i^2 > # Vectoriellement > initialisation3 <- function(n){ + a <- (1:n)^2 Temps utilisateur en 10 2 seconde Boucle sans initialisation Boucle avec initialisation Opération vectorielle sans boucle n FIGURE 2 Vectoriser si possible et toujours préallouer la mémoire Comme le montre la figure 2, cela vaut la peine de mesurer les temps de calcul car les temps peuvent être très différents (la préallocation de la mémoire permet d aller trente fois plus vite sur mon ordinateur). Le plus rapide est d utiliser une approche vectorielle (initialisation3()), ce qui n est pas une surprise de part la nature de R. La chose à retenir est que lorsqu une approche vectorielle est compliquée à mettre en oeuvre, il 7
9 faut alors ne pas oublier d initialiser les objets à leurs tailles maximales lors de leurs créations si on la connait. 3.2 Dedans ou dehors? Temps utilisateur en 10 2 seconde Calcul dans la boucle Calcul hors de la boucle Opération vectorielle sans boucle n FIGURE 3 Calculer hors des boucles L exemple sur lequel on s appuie ici est le calcul du vecteur a tel que a i = 2π sin(i). > # Calcul dans la boucle > dedansdehors1 <- function(n){ + a <- numeric(n) + for(i in 1:n) a[i] <- 2*pi*sin(i) + a > # Calcul hors de la boucle > dedansdehors2 <- function(n){ + a <- numeric(n) + for(i in 1:n) a[i] <- sin(i) + 2*pi*a 8
10 > # Vectoriellement > dedansdehors3 <- function(n){ + 2*pi*sin(1:n) Il faut retenir de ceci (figure 3) que les différences entre les temps de calcul ne sont pas forcément très élevées entre les fonctions dedansdehors1() et dedansdehors2() mais elles existent malgré tout et que leurs petitesses est imputable à la simplicité du calcul réalisé ici. 3.3 Parfois nécessaires! Une boucle est parfois nécessaire et pour le montrer, on s appuie ici sur une petite histoire qui est intervenue sur la mailing-list R-help et qui fut reprise par [3]. La question était la suivante : Soit matrices la liste de matrices définies ci-dessous. > matrices <- vector(mode = "list", length = 10000) > for (i in seq_along(matrices)) matrices[[i]] <- matrix(rnorm(100), + ncol = 10) Comment sommer le grand nombre de matrices contenues dans la liste matrices? Autrement dit, comment calculer S telle que (i, j) [1,10] 2, S(i, j) = où M k est la k ème matrice de la liste définie ci-dessus? k=1 M k (i, j), 1. La première réponse est la réponse naturelle en faisant une boucle dans laquelle on additionne deux matrices. Itérativement, on obtient le résultat souhaité. > S1 <- matrix(0,ncol=10,nrow=10) > for (M in matrices) + S1 <- S1+M 2. «Quoi? Une boucle? Ce ne peut pas être la bonne réponse!» Ici se trouvent deux propositions de calcul de la somme des matrices sur la liste sans utiliser de boucle. Je dois bien reconnaitre que c est quelque peu technique... Bonne réponse numéro 1 : > S2 <- apply(array(unlist(matrices), + dim=c(10,10,10000)),1:2,sum) Bonne réponse numéro 2 : > S3 <- rowsums(array(unlist(matrices), + dim=c(10,10,10000)),dims=2) Que faut-il en conclure? Comme on peut le voir sur le graphique 4, les trois méthodes ont des temps de calcul très proches les uns des autres. Mais il y a une chose que je n ai pas montré : il y a un problème de mémoire au-delà de n = 59 (sur mon ordinateur) pour les deux propositions utilisant un array au lieu de la boucle : Error: cannot allocate vector of size Mb 4 Optimiser Dans cette section, nous allons voir deux moyens pas complètement dans R d optimiser son code. Tout d abord en utilisant les fonctions du package gsl de R, puis en programmant en C (cela pourrait aussi être réalisé en fortran). 9
11 array + apply array + rowsums Boucle for Temps utilisateur en secondes Nombre de lignes de la matrice carrée FIGURE 4 La vitesse de calcul est plus ou moins la même 4.1 Gagner du temps en utilisant des fonctions optimisées Le package gsl est un wrapper pour la GNU Scientific Library (c est une bibliothèque libre écrite en C fournissant des outils de calculs numériques en mathématiques appliquées). Quelques-une des fonctions ont été interfacées pour R et sont donc utilisables comme une fonction de R sous réserve d installer le package gsl avant. Vous pouvez trouver plus d informations sur ce package sur le site du CRAN : http ://cran.r-project.org/web/packages/gsl/index.html. On peut aussi utiliser la bibliothèque BLAS pour Basic Linear Algebra Subprograms qui agit directement au niveau du processeur pour les opérations de base de l algèbre linéaire comme la multiplication de matrices ou de vecteurs. Elle permet donc un accroissement de la vitesse d exécution des calculs sur les vecteurs et les matrices en utilisant l architecture du processeur (cache optimisé, pipelines, etc.). Pour Windows, on utilise ATLAS (Automatically Tuned Linear Algebra) qui est un BLAS optimisé. Pour ce faire, il faut remplacer le fichier Rblas.dll se trouvant dans le répertoire bin de l installation de R par celui se trouvant sur le site du CRAN dans Windows, contrib, ATLAS. Attention, il faut prendre le fichier correspondant au processeur de votre ordinateur sans quoi R risque de moins bien fonctionner voire de ne plus fonctionner du tout. Sur mon ordinateur avec un processeur Core2Duo, il n y avait pas de différence. 10
12 4.2 Programmant en C ou Fortran On veut calculer la factorielle d un nombre n sans utiliser la fonctionfactorial() de R. Le code ci-dessous est une des multiples manières de le faire dans le langage de R : > factorieller <- function(n) { + if (n == 0) + factorielle <- 1 + else for (i in 1:n) { + factorielle <- factorielle * i + return(factorielle) Programme R Programme C Temps utilisateur en secondes e+00 2e+06 4e+06 6e+06 8e+06 1e+07 n Préalablement à l écriture du code C et avant de pouvoir appeler le code dans R, il faut installer Rtools : http :// et ajouter R, MinGW et Perl dans le chemin de l environnement des variables. Ensuite, il faut écrire le code dans un fichier : { void cfactorielle(double *data,double *factorielle) 11
13 int i; factorielle[0] = 1; for (i = 0; i < *data; i++){ factorielle[0] *= (i+1);} } } Puis on compile le code créé en exécutant R CMD SHLIB nom_fichierc. Il ne reste plus qu à écrire une fonction dans R qui appellera le code C compilé : > factoriellec <- function(data) { + if (!(is.loaded("cfactorielle"))) + dyn.load("factorielle.dll") +.C("cfactorielle", as.double(data), factorielle = double(1))$factorielle Sur cet exemple, le code C est dix fois plus rapide que le code R. Par contre, il est moins rapide que la fonction factorial() qui est déjà implémentée dans R. 5 En résumé : la bonne pratique 1. Toujours commencer les programmes en effaçant tous les objets de l espace de travail : rm(list=ls()) 2. Initialiser les objets à leurs tailles maximales 3. Utiliser des opérations vectorielles simples 4. Utiliser les fonctions.apply() si c est approprié 5. Faire les calculs une seule fois en dehors d une boucle plutôt qu à chaque itération 6. Avant d essayer de gagner en vitesse d exécution, penser à mesurer le temps d exécution 7. Penser à programmer en C pour gagner du temps 8. Ne pas oublier qu un code lisible, documenté et correct vaut mieux qu un programme faux et mal optimisé 6 A faire : parallélisation de la tâche Quand un ordinateur n est pas suffisamment rapide pour exécuter un programme, il est parfois possible de paralléliser le code, c est-à-dire de partager le travail demandé entre plusieurs ordinateurs voire entre plusieurs processeurs. Je ne m étendrai pas sur ce sujet car je n ai pu que tester la parallélisation entre les coeurs (cores) de mon ordinateur core2duo à l aide du package foeeach. C était un peu plus lent que le même programme exécuté sans parallélisation et cela s explique par l utilisation d un coeur par le système d exploitation et par R en même temps. N ayant pas à disposition un cluster d ordinateurs, je n ai pas pu vérifier l apport de ce type de parallélisation. Je conseille donc de lire le très bon article sur la parallélisation [4] dans lequel les auteurs ont comparé les différentes parallélisations et les différents packages de R permettant de paralléliser. 12
14 Références [1] Robin K. S. Hankin, Duncan Murdoch, and Andrew Clausen. Package gsl, [2] Owen Jones, Robert Maillardet, and Andrew Robinson. Introduction to Scientific Programming and Simulation Using R. Chapman & Hall/CRC, Mars [3] R Help Desk (Uwe Ligges and John Fox). How can i avoid this loop or make it faster? R News, 8/1, Mai [4] Markus Schmidberger, Martin Morgan, Dirk Eddelbuettel, Hao Yu, Luke Tierney, and Ulrich Mansmann. State of the art in parallel computing with r. Journal of Statistical Software, 31(1) :1 27, [5] W. Venables. Programmer s niche. R News, 1/1,
Limitations of the Playstation 3 for High Performance Cluster Computing
Introduction Plan Limitations of the Playstation 3 for High Performance Cluster Computing July 2007 Introduction Plan Introduction Intérêts de la PS3 : rapide et puissante bon marché L utiliser pour faire
Plus en détailRésolution de systèmes linéaires par des méthodes directes
Résolution de systèmes linéaires par des méthodes directes J. Erhel Janvier 2014 1 Inverse d une matrice carrée et systèmes linéaires Ce paragraphe a pour objet les matrices carrées et les systèmes linéaires.
Plus en détailLa boucle for La boucle while L utilisation du if else. while (condition) { instruction(s) }
VI Initiation à la programmation sous Comme nous l avons constaté tout au long du document, offre de nombreuses fonctionnalités En tant que nouvelles utilisateurs de il vous est désormais PRESQUE possible
Plus en détailTable des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction
PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés
Plus en détailAlgorithmique et Programmation, IMA
Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions
Plus en détailTD3: tableaux avancées, première classe et chaînes
TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première
Plus en détailIntroduction à R. Florence Yerly. Dept. de mathématiques, Université de Fribourg (CH) SP 2011
Dept. de mathématiques, Université de Fribourg (CH) SP 2011 Qu est ce que R? Un logiciel de statistiques libre et gratuit ; Un logiciel multi-plateforme (UNIX, Windows MacOS X) R permet de faire des calculs
Plus en détailLicence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter
Plus en détailPlan du cours 2014-2015. Cours théoriques. 29 septembre 2014
numériques et Institut d Astrophysique et de Géophysique (Bât. B5c) Bureau 0/13 email:.@ulg.ac.be Tél.: 04-3669771 29 septembre 2014 Plan du cours 2014-2015 Cours théoriques 16-09-2014 numériques pour
Plus en détailI. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):
Master Chimie Fondamentale et Appliquée : spécialité «Ingénierie Chimique» Examen «Programmation, Simulation des procédés» avril 2008a Nom : Prénom : groupe TD : I. Programmation I. 1 Ecrire un programme
Plus en détailCours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr
. Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le
Plus en détailCalcul Formel et Numérique, Partie I
Calcul Formel et Numérique N.Vandenberghe nvdb@irphe.univ-mrs.fr Table des matières 1 Introduction à Matlab 2 1.1 Quelques généralités.......................... 2 2 Où trouver des informations 2 3 Opérations
Plus en détailOptimisation de logiciels de modélisation sur centre de calcul
Optimisation de logiciels de modélisation sur centre de calcul Gérald Monard Pôle de Chimie Théorique http://www.monard.info/ Introduction Les ordinateurs sont des appareils électroniques permettant d
Plus en détailPourquoi R devient incontournable en recherche, enseignement et développement
Pourquoi R devient incontournable en recherche, enseignement et développement Rencontre R, BoRdeaux 2012 Plan Introduction Recherche Enseignement Développement (entreprise) Conclusions Les logiciels de
Plus en détail1. Structure d'un programme FORTRAN 95
FORTRAN se caractérise par la nécessité de compiler les scripts, c'est à dire transformer du texte en binaire.(transforme un fichier de texte en.f95 en un executable (non lisible par un éditeur) en.exe.)
Plus en détailGénération de code binaire pour application multimedia : une approche au vol
Génération de binaire pour application multimedia : une approche au vol http://hpbcg.org/ Henri-Pierre Charles Université de Versailles Saint-Quentin en Yvelines 3 Octobre 2009 Présentation Présentation
Plus en détailIntroduction à MATLAB R
Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d
Plus en détailIntroduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr
Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université
Plus en détailFiche PanaMaths Calculs avec les fonctions sous Xcas
Fiche PanaMaths Calculs avec les fonctions sous Xcas Cette fiche destinée aux élèves des classes de Terminale requiert un premier niveau de connaissance du logiciel Xcas. Définition d une fonction Fonctions
Plus en détailBases de programmation. Cours 5. Structurer les données
Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et
Plus en détailINTRODUCTION A JAVA. Fichier en langage machine Exécutable
INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du
Plus en détailCours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation
Plus en détailCours 7 : Utilisation de modules sous python
Cours 7 : Utilisation de modules sous python 2013/2014 Utilisation d un module Importer un module Exemple : le module random Importer un module Exemple : le module random Importer un module Un module est
Plus en détailMATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.
Page 1 de 9 MATLAB : COMMANDES DE BASE Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */. Aide help, help nom_de_commande Fenêtre de travail (Command Window) Ligne
Plus en détailCours d initiation à la programmation en C++ Johann Cuenin
Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................
Plus en détailCorrigé des TD 1 à 5
Corrigé des TD 1 à 5 1 Premier Contact 1.1 Somme des n premiers entiers 1 (* Somme des n premiers entiers *) 2 program somme_entiers; n, i, somme: integer; 8 (* saisie du nombre n *) write( Saisissez un
Plus en détail1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)
1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d
Plus en détailInitiation à l analyse en composantes principales
Fiche TD avec le logiciel : tdr601 Initiation à l analyse en composantes principales A.B. Dufour & J.R. Lobry Une première approche très intuitive et interactive de l ACP. Centrage et réduction des données.
Plus en détailI. Introduction aux fonctions : les fonctions standards
Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons
Plus en détailCours 1 : La compilation
/38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà
Plus en détailUtilisation d objets : String et ArrayList
Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons
Plus en détailhttp://cermics.enpc.fr/scilab
scilab à l École des Ponts ParisTech http://cermics.enpc.fr/scilab Introduction à Scilab Graphiques, fonctions Scilab, programmation, saisie de données Jean-Philippe Chancelier & Michel De Lara cermics,
Plus en détailUniversité du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.
Université du Québec à Chicoutimi Département d informatique et de mathématique Plan de cours Titre : Élément de programmation Sigle : 8inf 119 Session : Automne 2001 Professeur : Patrice Guérin Local
Plus en détailProgrammation C. Apprendre à développer des programmes simples dans le langage C
Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités
Plus en détailÉléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
Plus en détailIntroduction à la Programmation Parallèle: MPI
Introduction à la Programmation Parallèle: MPI Frédéric Gava et Gaétan Hains L.A.C.L Laboratoire d Algorithmique, Complexité et Logique Cours du M2 SSI option PSSR Plan 1 Modèle de programmation 2 3 4
Plus en détailEPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE
EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0
Plus en détailINITIATION AU LANGAGE C SUR PIC DE MICROSHIP
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par
Plus en détailCours 1. I- Généralités sur R II- Les fonctions de R et autres objets III-Les vecteurs
Cours 1 I- Généralités sur R II- Les fonctions de R et autres objets III-Les vecteurs IV-Les facteurs I-1 Généralités sur R R (1995, AT&T Bell Laboratories) est un logiciel d analyse statistique et graphique,
Plus en détailCours de Systèmes d Exploitation
Licence d informatique Synchronisation et Communication inter-processus Hafid Bourzoufi Université de Valenciennes - ISTV Introduction Les processus concurrents s exécutant dans le système d exploitation
Plus en détailM2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013
Rendu Temps Réel - OpenGL 4 et compute shaders December 18, 2013 résumé des épisodes précédents... création des objets opengl, organisation des données, configuration du pipeline, draw,... opengl 4.3 :
Plus en détailas Architecture des Systèmes d Information
Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes
Plus en détailFiche d utilisation du logiciel. 1 - Installation. J. Thioulouse & D. Chessel
Fiche d utilisation du logiciel 1 - Installation J. Thioulouse & D. Chessel Résumé Cette fiche est une introduction à l'utilisation du logiciel R pour les trois environnements Unix, Windows et MacOS. Plan
Plus en détailARDUINO DOSSIER RESSOURCE POUR LA CLASSE
ARDUINO DOSSIER RESSOURCE POUR LA CLASSE Sommaire 1. Présentation 2. Exemple d apprentissage 3. Lexique de termes anglais 4. Reconnaître les composants 5. Rendre Arduino autonome 6. Les signaux d entrée
Plus en détailSTAGE IREM 0- Premiers pas en Python
Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer
Plus en détailGestion mémoire et Représentation intermédiaire
Gestion mémoire et Représentation intermédiaire Pablo de Oliveira March 23, 2015 I Gestion Memoire Variables locales Les variables locales sont stockées: Soit dans un registre,
Plus en détailCours d Algorithmique et de Langage C 2005 - v 3.0
Cours d Algorithmique et de Langage C 2005 - v 3.0 Bob CORDEAU cordeau@onera.fr Mesures Physiques IUT d Orsay 15 mai 2006 Avant-propos Avant-propos Ce cours en libre accès repose sur trois partis pris
Plus en détailTP 1 Introduction à Matlab Février 2009
1 Introduction TP 1 Introduction à Matlab Février 2009 Matlab pour «MATtrix LABoratory», est un logiciel qui a été conçu pour fournir un environnement de calcul numérique de haut niveau. Il est particulièrement
Plus en détailCours 1: Java et les objets
Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/
Plus en détailModule.NET 3 Les Assemblys.NET
Module.NET Chapitre 3 Les Assemblys.NET 2011/2012 Page 1 sur 13 Contenu Cours... 3 3.1 - Définition d un assembly.net... 3 3.2 - Private assembly ou assembly privé.... 3 3.3 - Shared assembly ou assembly
Plus en détailIN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C
IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en
Plus en détailCours Informatique Master STEP
Cours Informatique Master STEP Bases de la programmation: Compilateurs/logiciels Algorithmique et structure d'un programme Programmation en langage structuré (Fortran 90) Variables, expressions, instructions
Plus en détailCorrection de l examen de la première session
de l examen de la première session Julian Tugaut, Franck Licini, Didier Vincent Si vous trouvez des erreurs de Français ou de mathématiques ou bien si vous avez des questions et/ou des suggestions, envoyez-moi
Plus en détailACTIVITÉ DE PROGRAMMATION
ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,
Plus en détailAide - mémoire gnuplot 4.0
Aide - mémoire gnuplot 4.0 Nicolas Kielbasiewicz 20 juin 2008 L objet de cet aide-mémoire est de présenter les commandes de base pour faire rapidement de très jolis graphiques et courbes à l aide du logiciel
Plus en détailIntroduction au langage C
Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les
Plus en détailIMAGES NUMÉRIQUES MATRICIELLES EN SCILAB
IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB Ce document, écrit par des animateurs de l IREM de Besançon, a pour objectif de présenter quelques unes des fonctions du logiciel Scilab, celles qui sont spécifiques
Plus en détailTP1 : Initiation à Java et Eclipse
TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les
Plus en détailProgrammation C++ (débutant)/instructions for, while et do...while
Programmation C++ (débutant)/instructions for, while et do...while 1 Programmation C++ (débutant)/instructions for, while et do...while Le cours du chapitre 4 : le for, while et do...while La notion de
Plus en détailDossier projet isn 2015 par Victor Gregoire
Dossier projet isn 2015 par Victor Gregoire Plan: I) But du projet: créer un jeu de blackjack fonctionnel et le poster sur une page web mise en ligne. Le jeu sera developpé en C++ a l'aide de code blocks.
Plus en détailÉvaluation et implémentation des langages
Évaluation et implémentation des langages Les langages de programmation et le processus de programmation Critères de conception et d évaluation des langages de programmation Les fondations de l implémentation
Plus en détailUne bibliothèque de templates pour CUDA
Une bibliothèque de templates pour CUDA Sylvain Collange, Marc Daumas et David Defour Montpellier, 16 octobre 2008 Types de parallèlisme de données Données indépendantes n threads pour n jeux de données
Plus en détailLES TYPES DE DONNÉES DU LANGAGE PASCAL
LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.
Plus en détailTP : Gestion d une image au format PGM
TP : Gestion d une image au format PGM Objectif : L objectif du sujet est de créer une classe de manipulation d images au format PGM (Portable GreyMap), et de programmer des opérations relativement simples
Plus en détailSouad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/
Recherche opérationnelle Les démonstrations et les exemples seront traités en cours Souad EL Bernoussi Groupe d Analyse Numérique et Optimisation Rabat http ://www.fsr.ac.ma/ano/ Table des matières 1 Programmation
Plus en détailPython - introduction à la programmation et calcul scientifique
Université de Strasbourg Environnements Informatique Python - introduction à la programmation et calcul scientifique Feuille de TP 1 Avant de commencer Le but de ce TP est de vous montrer les bases de
Plus en détailMachines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40
Machines virtuelles Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles La compilation peut
Plus en détailPrésentation du logiciel
Chapitre A Présentation du logiciel R Pré-requis et objectif La lecture du chapitre sur l installation de R dans les Annexes peut se révéler utile. Ce chapitre présente les origines, l objectif et les
Plus en détailInfo0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java
Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique
Plus en détailRapport de stage Master 2
Rapport de stage Master 2 Informatique Haute Performance et Simulation, 2 ème année Ecole Centrale Paris Accélération des méthodes statistiques sur GPU Auteur : CHAI Anchen. Responsables: Joel Falcou et
Plus en détailJava Licence Professionnelle CISII, 2009-10
Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation
Plus en détailCette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :
Développement d un client REST, l application Vélib 1. Présentation L application présentée permet de visualiser les disponibilités des vélos et des emplacements de parking à la disposition des parisiens
Plus en détailEnvironnements de développement (intégrés)
Environnements de développement (intégrés) Tests unitaires, outils de couverture de code Patrick Labatut labatut@di.ens.fr http://www.di.ens.fr/~labatut/ Département d informatique École normale supérieure
Plus en détailtd3a correction session7az
td3a correction session7az August 19, 2015 1 Séance 7 : PIG et JSON et streaming avec les données vélib (correction avec Azure) Plan Récupération des données Connexion au cluster et import des données
Plus en détailLes concepts de base, l organisation des données
Chapitre 1 Les concepts de base, l organisation des données Objectif Ce chapitre présente les concepts de base du logiciel R (mode calculatrice, opérateur d affectation, variables, utilisation de fonctions,
Plus en détailConventions d écriture et outils de mise au point
Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette
Plus en détailMétriques de performance pour les algorithmes et programmes parallèles
Métriques de performance pour les algorithmes et programmes parallèles 11 18 nov. 2002 Cette section est basée tout d abord sur la référence suivante (manuel suggéré mais non obligatoire) : R. Miller and
Plus en détailAuto-évaluation Programmation en Java
Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN
Plus en détailPerl Console. Votre compagnon pour développer en Perl. Les Journées du Perl 2007 16, 17 novembre, Lyon. Alexis Sukrieh <sukria@sukria.
Perl Console Votre compagnon pour développer en Perl Les Journées du Perl 2007 16, 17 novembre, Lyon Alexis Sukrieh Plan Pourquoi une console? Le modèle «Read-Eval-Print-Loop» Dépendances
Plus en détailR, Bonnes pratiques. Christophe Genolini
R, Bonnes pratiques Christophe Genolini 1 Table des matières 1 Des bonnes pratiques, pour quoi faire? 4 2 Choix de l éditeur de texte 4 3 Architecture du code 6 4 Variables 10 5 Commentaires et documentation
Plus en détailLe prototype de la fonction main()
Le prototype de la fonction main() 1. Introduction...1 2. Paramètres et type de retour de la fonction main()...1 3. Exemple 1...2 4. La fonction exit() du C...2 5. Détecter le code de retour d un programme
Plus en détailExceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;
CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe
Plus en détailLangage et Concepts de ProgrammationOrientée-Objet 1 / 40
Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr
Plus en détail4. Groupement d objets
Conception objet en Java avec BlueJ une approche interactive 4. Groupement d objets Collections et itérateurs David J. Barnes, Michael Kölling version française: Patrice Moreaux Rédigé avec 1.0 Principaux
Plus en détailProgrammation Par Objets
Programmation Par Objets Structures de données package java.util B. Carré Polytech Lille 1 Tableaux et structures de données Tableaux «Objets» taille fixe type des éléments : primitif (homogène) ou objets
Plus en détailPrincipe de symétrisation pour la construction d un test adaptatif
Principe de symétrisation pour la construction d un test adaptatif Cécile Durot 1 & Yves Rozenholc 2 1 UFR SEGMI, Université Paris Ouest Nanterre La Défense, France, cecile.durot@gmail.com 2 Université
Plus en détailMANIPULATION ET VISUALISATION DE GROSSES BASES DE DONNÉES AVEC R
MANIPULATION ET VISUALISATION DE GROSSES BASES DE DONNÉES AVEC R Jeudi 10 octobre 2013 CHAIGNEAU Alicia GAZAN Rozenn DAUFOUY Camille JOURDAN Sandra Introduction 2 Evolution des outils de collecte Big data
Plus en détailManuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2
éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........
Plus en détailJérôme Mathieu janvier 2007. Débuter avec R. Ce document est disponible sur le site web : http://www.jerome.mathieu.freesurf.
Jérôme Mathieu janvier 2007 Débuter avec R Ce document est disponible sur le site web : http://www.jerome.mathieu.freesurf.fr - 1 - Sommaire 1 Principes de base pour utiliser R... 3 $$$ Démarrer R pour
Plus en détailINSTALLATION ET CONFIGURATION DE OPENLDAP
INSTALLATION ET CONFIGURATION DE OPENLDAP Ce document a pour intérêt de décrire les étapes de l installation et de la configuration de l outil OpenLDAP sous l OS FreeBSD 4.8 Installation et Configuration
Plus en détailURECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2
Initiation Matlab 2 1 Chaînes de caractères (string) Une chaîne de caractères (string en anglais) est une suite ordonnée de caractères (du texte, par exemple). Sous matlab, les chaînes de caractères sont
Plus en détail1 Description générale de VISFIELD
Guide d utilisation du logiciel VISFIELD Yann FRAIGNEAU LIMSI-CNRS, Bâtiment 508, BP 133 F-91403 Orsay cedex, France 11 décembre 2012 1 Description générale de VISFIELD VISFIELD est un programme écrit
Plus en détailINTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores
INTRODUCTION AUX SYSTEMES D EXPLOITATION TD2 Exclusion mutuelle / Sémaphores Exclusion mutuelle / Sémaphores - 0.1 - S O M M A I R E 1. GENERALITES SUR LES SEMAPHORES... 1 1.1. PRESENTATION... 1 1.2. UN
Plus en détailEtude des propriétés empiriques du lasso par simulations
Etude des propriétés empiriques du lasso par simulations L objectif de ce TP est d étudier les propriétés empiriques du LASSO et de ses variantes à partir de données simulées. Un deuxième objectif est
Plus en détailInitiation à l algorithmique
Informatique S1 Initiation à l algorithmique procédures et fonctions 2. Appel d une fonction Jacques TISSEAU Ecole Nationale d Ingénieurs de Brest Technopôle Brest-Iroise CS 73862-29238 Brest cedex 3 -
Plus en détailIntroduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf
Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations
Plus en détailOUTIL DE TRAVAIL COLLABORATIF
B i b l i o t h è q u e OUTIL DE TRAVAIL COLLABORATIF Septembre 2012 TitanPad est un outil de travail collaboratif permettant de prendre des notes ou de rédiger à plusieurs un même texte à distance en
Plus en détailTP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface
Plus en détailCalcul Formel et Numérique, Partie I
Calcul Formel et Numérique NicolasVandenberghe nvdb@irphe.univ-mrs.fr Table des matières 1 Introduction à Matlab 2 1.1 Quelques généralités.......................... 2 1.2 Où trouver des informations......................
Plus en détailExercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT
Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT Ces exercices portent sur les items 2, 3 et 5 du programme d informatique des classes préparatoires,
Plus en détail