Введение
Numerical Recipes – общее название серии книг по алгоритмам и численному анализу, написанных Уильямом Х. Прессом, Саулом А. Теуколским, Уильямом Т. Веттерлингом и Брайаном П. Фланнери. Книги издаются различными изданиями с 1986 года. Самое последнее издание было опубликовано в 2007 году.
Numerical Recipes is the generic title of a series of books on algorithms and numerical analysis by William H. Press, Saul A. Teukolsky, William T. Vetterling and Brian P. Flannery. In various editions, the books have been in print since 1986. The most recent edition was published in 2007.
Обзор
Книги "Численные рецепты" охватывают широкий спектр тем, включая классический численный анализ (интерполяция, интегрирование, линейная алгебра, дифференциальные уравнения и т. д.), обработку сигналов (методы Фурье, фильтрация), статистическую обработку данных и некоторые темы в области машинного обучения (скрытые марковские модели, машины опорных векторов). Стиль изложения доступен и неформален. Основной упор делается на понимание базовых принципов работы методов, а не на детали, которые могут потребоваться на практике для достижения оптимальной производительности и надежности. Лишь немногие результаты представлены с достаточной строгостью доказательств, хотя идеи, лежащие в их основе, часто обрисованы, и приводятся ссылки на соответствующие источники. Важно отметить, что практически все рассматриваемые методы также реализованы на языках программирования, а код приводится непосредственно в книге. Каждая версия адаптирована к конкретному языку. По данным издательства Cambridge University Press, книги "Численные рецепты" исторически являются самыми продаваемыми книгами по методам научного программирования. В последние годы книги "Численные рецепты" цитировались в научной литературе более 3000 раз в год по данным ISI Web of Knowledge (например, 3962 раза в 2008 году). По состоянию на конец 2017 года, количество цитирований книги в Google Scholar превысило 44 000.
История
Первая публикация состоялась в 1986 году под названием «Численные рецепты, искусство научных вычислений», включающая код на языках Фортран и Паскаль; сопроводительная книга «Примерный сборник численных рецептов (Паскаль)» была впервые опубликована в 1985 году. (В предисловии к книге «Примеры» упоминается, что основная книга также была издана в 1985 году, но официальная примечание в самой книге указывает 1986 год.) После этого вышли дополнительные издания с кодом на Pascal, BASIC и C. С самого начала Numerical Recipes заняла принципиальную редакционную позицию, противоречащую общепринятым взглядам в сообществе численного анализа:
Однако, как оказалось, 1980-е годы стали плодотворными для подхода "черного ящика", что привело к созданию важных библиотек, таких как BLAS и LAPACK, и интегрированных сред, таких как MATLAB и Mathematica. К началу 1990-х годов, когда были опубликованы издания второго пересмотра Numerical Recipes (с кодом на C, Fortran 77 и Fortran 90), стало ясно, что аудитория Numerical Recipes составляла далеко не большинство ученых, занимающихся вычислениями, а лишь ту часть, которая находилась между более математически ориентированными численными аналитиками и более широким сообществом, использующим интегрированные среды. Издания второго пересмотра заняли устойчивую нишу в этой среде. К середине 2000-х годов практика научных вычислений радикально изменилась благодаря развитию Интернета и Всемирной паутины. Признавая, что книги «Численные рецепты» все больше ценились за пояснительный текст, а не за примеры кода, авторы значительно расширили объем книги и существенно переработали большую часть текста. Они продолжали включать код, по-прежнему печатаемый в книге, теперь на C++, для каждого рассматриваемого метода. Третье издание также было выпущено в электронном виде и в конечном итоге стало доступно в Интернете бесплатно (с навязчивыми уведомлениями) или по платной подписке, индивидуальной или институциональной (с более быстрым и полным доступом без уведомлений). В 2015 году Numerical Recipes продала свой исторический двухбуквенный домен nr.com и стала numerical.recipes.
Содержание
Численные рецепты – это единый том, охватывающий очень широкий спектр алгоритмов. К сожалению, такой формат сместил выбор алгоритмов в сторону более простых и коротких ранних алгоритмов, которые не были такими точными, эффективными или стабильными, как более поздние, сложные алгоритмы. В первом издании также были некоторые незначительные ошибки, которые были исправлены в последующих изданиях; однако, по словам авторов, на протяжении многих лет они сталкивались в интернете со слухами о том, что Numerical Recipes "полна ошибок". Они объясняли это использованием устаревших версий кода, ошибками в других частях кода и неправильным использованием подпрограмм, требующих определенного понимания для корректного применения. Однако это опровержение не касается критики, связанной с отсутствием упоминаний об ограничениях кода, граничных условиях и более современных алгоритмах – еще одной темы в подборке комментариев Снайдера. Numerical Recipes [nr] не претендует на звание учебника по численному анализу и подчеркивает, что его авторы – (астро)физики и инженеры, а не аналитики, и поэтому разделяют мотивацию и нетерпение целевой аудитории книги. Авторы NR утверждают, что вы обязательно столкнетесь с проблемами, если будете использовать числовые процедуры, которые вы не понимаете. Они стремятся предоставить достаточно математических деталей, чтобы вы поняли представленные подпрограммы, и достаточно глубоко, чтобы вы могли диагностировать возникающие проблемы и делать более обоснованный выбор при замене, когда возможности подпрограмм NR будут исчерпаны. Проблемы возникнут, поскольку [ ]
Лицензия
Список исходных кодов защищен авторским правом и коммерчески лицензирован авторами Numerical Recipes. Лицензия на использование кода предоставляется при покупке книги, однако условия использования крайне ограничены. Например, программистам необходимо обеспечить невозможность извлечения кода NR из их завершенных программ и его использования – сложное требование, соблюдение которого вызывает сомнения. Тем не менее, в Numerical Recipes содержится следующее заявление об авторских правах на компьютерные программы: «Авторское право защищает не идеи, а лишь способ их выражения в конкретной форме. В случае компьютерной программы, идеи заключаются в методологии и алгоритме программы, включая необходимую последовательность шагов, выбранную программистом. Способ выражения этих идей – это исходный код программы. Если вы анализируете идеи, содержащиеся в программе, а затем реализуете эти идеи в собственной, совершенно отличной реализации, то эта новая реализация программы принадлежит вам».
Стиль
Другая линия критики связана со стилем кодирования в книгах, который некоторым современным читателям кажется напоминающим "Fortran", несмотря на то, что книги написаны на современном объектно-ориентированном C++. Авторы оправдывали свой крайне сжатый стиль кодирования необходимостью, обусловленной форматом книги, ограничениями по объему и удобством чтения.
Названия серии (частичный список)
Книги различаются по изданию (1-е, 2-е и 3-е) и по языку программирования, на котором представлен код. Численные методы. Искусство научных вычислений, 1-е издание, 1986, (Фортран и Паскаль).
Численные методы в C. Искусство научных вычислений, 1-е издание, 1988.
Численные методы в Паскале. Искусство научных вычислений, 1-е издание, 1989.
Численные методы на Фортране. Искусство научных вычислений, 1-е издание, 1989.
Численные методы на BASIC. Искусство научных вычислений, 1-е издание, 1991 (дополнительное издание).
Численные методы на Фортране 77. Искусство научных вычислений, 2-е издание, 1992.
Численные методы в C. Искусство научных вычислений, 2-е издание, 1992.
Численные методы в Fortran 90. Искусство параллельных научных вычислений, 2-е издание, 1996.
Численные методы на C++. Искусство научных вычислений, 2-е издание, 2002.
Численные методы. Искусство научных вычислений, 3-е издание, 2007 (код C++).
Numerical Recipes in C. The Art of Scientific Computing, 1st Edition, 1988, Numerical Recipes in Pascal. The Art of Scientific Computing, 1st Edition, 1989, Numerical Recipes in Fortran. The Art of Scientific Computing, 1st Edition, 1989, Numerical Recipes in BASIC. The Art of Scientific Computing, 1st Edition, 1991, (supplemental edition)
Numerical Recipes in Fortran 77. The Art of Scientific Computing, 2nd Edition, 1992, Numerical Recipes in C. The Art of Scientific Computing, 2nd Edition, 1992, Numerical Recipes in Fortran 90. The Art of Parallel Scientific Computing, 2nd Edition, 1996, Numerical Recipes in C++. The Art of Scientific Computing, 2nd Edition, 2002, Numerical Recipes. The Art of Scientific Computing, 3rd Edition, 2007, (C++ code)
Книги издаются издательством Кембриджского университета.