# Numerical Recipes

Numerical Recipes est le titre générique d'une série d'ouvrages sur les algorithmes et l'analyse numérique par William H. Press, Saul Teukolsky, William Vetterling et Brian Flannery. Édité dans de nombreuses éditions, les livres sont imprimés depuis 1986, la dernière édition datant de 2007.

## Contenu

Les livres Numerical Recipes couvrent des sujets de l'analyse numérique (interpolation numérique, intégration, algèbre linéaire, équations différentielles, etc.), traitement du signal (transformée de Fourier, filtre), traitement des données statistiques, ainsi que quelques points sur l'apprentissage automatique (modèles de Markov cachés, machine à vecteurs de support). Le style d'écriture se veut accessible et sur un ton informel. L'accent est mis sur la compréhension des bases sous-jacentes des techniques, pas sur les raffinements qui peuvent, en pratique, être nécessaires pour atteindre des performances et une fiabilité optimales. Peu de résultats sont prouvés avec une réelle rigueur, même si les idées derrière les preuves sont souvent esquissées, et les références sont données.
Pratiquement toutes les méthodes qui sont présentées sont également rédigées en code, qui est imprimé dans le livre, et commercialisées séparément sous forme électronique, dans divers langages de programmation.
Selon l'éditeur, Cambridge University Press, les livres Numerical Recipes sont les ouvrages sur les méthodes de programmation les plus vendus de tous les temps. Selon ISI Web of Knowledge, ces dernières années, les livres Numerical Recipes ont été cités plus de 3 000 fois par an dans la littérature scientifique (par exemple, 3 962 fois dans les années 2008).

## Histoire

Édité pour la première fois en 1986 avec des codes en Fortran (rapidement suivi par des éditions en Pascal, BASIC et C), Numerical Recipes a pris, dès le départ, une position éditoriale en désaccord avec la sagesse conventionnelle de la communauté d'analyse numérique :
« If there is a single dominant theme in this book, it is that practical methods of numerical computation can be simultaneously efficient, clever, and — important — clear. The alternative viewpoint, that efficient computational methods must necessarily be so arcane and complex as to be useful only in « black box » form, we firmly reject. »
Toutefois, il s'est avéré que les années 1980 ont été fertiles pour le côté « boîte noire », ce qui donne des environnements intégrés importants tels que MATLAB et Mathematica qui restent des standards aujourd'hui. Au début des années 1990, lorsque les deuxièmes éditions de Numerical Recipes (avec des codes en C, Fortran 77 et Fortran 90) ont été publiées, il était clair que les utilisateurs de Numerical Recipes ne représentaient plus la majorité des scientifiques faisant de la programmation, mais a provoqué la scission entre ceux qui étaient plus orientés vers l'analyse numérique mathématique et la plus grande communauté utilisant des environnements intégrés. Les deuxièmes éditions ont joué un rôle stable dans cet environnement de niche.
Au milieu des années 2000, la pratique du calcul scientifique a été radicalement modifiée par l'usage régulier d'Internet et du Web. Reconnaissant que leurs livres Numerical Recipes ont été plus appréciés pour leurs textes explicatifs que pour leurs exemples de code, les auteurs ont considérablement élargi la portée de l'ouvrage, et réécrit une grande partie du texte. Ils ont continué d'inclure du code, toujours imprimé dans le livre, à présent en C++, pour chaque méthode discutée. La troisième édition a également été éditée en version électronique, et rendue par la suite accessible sur le web gratuitement (avec une quantité de lecture limitée) ou par paiement ou abonnement (avec une quantité de lecture illimitée).

## Critiques

Étant donné le style de rédaction des livres, il n'est pas surprenant qu'ils étaient (et restent dans une certaine mesure) controversés au sein de la communauté de l'analyse numérique. Les premières critiques étaient centrées sur le « manque supposé de fiabilité » (la première édition contenait en effet quelques erreurs), l'exclusion de certains algorithmes, et l'affirmation des auteurs, pas toujours correcte, selon laquelle leurs programmes sont aussi efficaces et fiables que ceux des bibliothèques de type « boîte noire », comme les bibliothèques NAG ou IMSL. Bien qu'il ne mentionne pas Numerical Recipes nommément, Whaley et al. démontrent que LAPACK avec une bibliothèque BLAS hautement optimisée peut être d'un ordre de grandeur plus rapide qu'une routine simple directement inspirée de Numerical Recipes. Comme autre exemple, Frigo et Johnson pointent le fait que le code de transformée de Fourier rapide (FFT) de Numerical Recipes est de 5 à 40 fois plus lent que les programmes hautement optimisés sur des architectures numériques modernes.
Une deuxième critique porte sur le fait que, bien que le code soit imprimé dans des livres, les auteurs des ouvrages détiennent les droits sur celui-ci, et il n'est pas permis de rediffuser les codes sources des Numerical Recipes. Le code commercialisé, n'est pas compatible avec une licence GPL ou similaire, contrairement par exemple à la GNU Scientific Library. Cependant, il est possible de redistribuer un programme compilé, pour un usage non commercial.
Un troisième point critiqué est le style de code utilisé dans les livres, que certains lecteurs modernes trouvent « fortranisé », même lorsque le langage du livre est plus orienté objet. Cependant, les auteurs ont défendu leur style comme nécessaire pour le format des livres, qui requiert un style de codage laconique en raison des limitations d'espace et du souci de lisibilité.

## Liste partielle des différentes éditions

Les livres diffèrent par leur version d'édition (1st, 2nd et 3rd) et par le langage informatique utilisé dans les codes donnés.
* Numerical Recipes. The Art of Scientific Computing, 3rd Edition, 2007, (ISBN 0-521-88068-8). (C++ code)
* Numerical Recipes in C. The Art of Scientific Computing, 2nd Edition, 1992, (ISBN 0-521-43108-5).
* Numerical Recipes in Fortran 77. The Art of Scientific Computing, 2nd Edition, 1992, (ISBN 0-521-43064-X).
* Numerical Recipes in Fortran 90. The Art of Parallel Scientific Computing, 2nd Edition, 1996, (ISBN 0-521-57439-0).
* Numerical Recipes in Pascal. The Art of Scientific Computing, 1st Edition, 1989, (ISBN 0-521-37516-9).
Les livres sont édités par Cambridge University Press.