Введение

Numerical Recipes – общее название серии книг по алгоритмам и численному анализу, написанных Уильямом Х. Прессом, Саулом А. Теуколским, Уильямом Т. Веттерлингом и Брайаном П. Фланнери. Книги издаются различными изданиями с 1986 года. Самое последнее издание было опубликовано в 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++).

Книги издаются издательством Кембриджского университета.