Numerical Recipes: The Art of Scientific Computing

Снова читаю книжки по численным методам. В этот раз под раздачу попала Numerical Recipes in C: The Art of Scientific Computing. Авторов – целая куча: Press W.H., Teukolsky S.A., Vetterling W.T., Flannery B.P. Есть даже официальный сайт, где можно бесплатно почитать кусочки из книги:

http://nrbook.com

Обратите внимание, что в интернете доступно два издания этой книги – второе, вышедшее в 1992 году, и третье – 2007 года. Я начинал читать второе, и был очень разочарован некоторыми “находками” авторов. Скажем, в давнем споре о том, как должны нумероваться элементы массива – с 0 или с 1 – они заняли “компромиссную” позицию – иногда элементы массивов нумеровались с 0, а иногда – с 1, как удобнее в каждом конкретном случае. Предлагался диковатый способ хранения матриц – в общем, уже с первой главы стало понятно, что весь найденный в книге код придется переписывать в соответствии со своими эстетическими представлениями.

В третьем издании на титульном листе упоминается уже C++, и книга основательно переписана. Скажем, нумерация массивов с 1 благополучно забыта – и это прекрасно! Вместо этого, правда, появляются сомнительные “классы” – а к ООП в численных методах меня приучили относиться с подозрением (может, и зря). Разумеется, это не “чистый” C++, а “C on steroids” – но от этого все равно не легче. Рекомендация из предыдущего абзаца остается в силе – встретив в книге “простыню” кода, попытайтесь ее понять и переписать. Особенно этот совет будет полезен, если вы имеете обыкновение читать лицензии – весь код в книге лицензирован под какой-то чудовищной, затрудняющей всякое разумное применение лицензией.

Еще одно маленькое замечание касательно кода – местами возникает впечатление, что программы аккуратно переписаны с Фортрана. В общем, код в книге довольно дикий, сочетающий использование относительно современного C++ с какими-то жуткими древностями – еще один аргумент за “понять и переписать”.

Круг рассматриваемых тем довольно широк (скажем, он “перекрывает” программу двухсеместрового курса по численным методам) – решение систем линейных уравнений (и связанные с этим сюжеты, вроде QR-разложения матриц), поиск собственных значений, различные методы вычисления функций (в том числе всевозможных “специальных функций”, типа бета- и гамма-функций), интерполяция, решение нелинейных уравнений, поиск экстремумов, вычисление интегралов, численные методы решения дифференциальных уравнений (задача Коши и краевые задачи), уравнения в частных производных, интегральные уравнения, статистические задачи, (быстрое) преобразование Фурье и все с ним связанное, вычислительная геометрия, и пара глав посвящена более “дискретным” задачам – вроде сортировки, кодирования и сжатия данных. Естественно, такое количество задач сложно более-менее подробно рассмотреть даже на 1262 страницах – так что компромиссы неизбежны.

В этой книге авторы решили пожертвовать математическим обоснованием используемых алгоритмов. Как выглядит глава по любимой мной теме – решению задачи Коши для дифференциальных уравнений? Десяток страниц посвящен организации вычислений – придумана довольно “общая” C++-ная библиотека, примерно то, что называют “фреймворком” – а реализуемые методы будут под нее подстраиваться. Дальше излагаются основы метода Рунге-Кутты, приводятся с иллюстрациями “на пальцах” коэффициенты методов 2-го и 4-го порядков. Следующий раздел посвящен автоматическому выбору длины шага – и тут уже разговор идет на языке “делай раз, делай два”, без попытки привести хоть какое-то обоснование используемых формул. Наконец, приводится исходный текст реализации метода Дормана-Принса 5-го порядка и упоминается о методе 8-го порядка – здесь, правда, решили поэкономить бумагу и просто дали ссылку на сайт с его реализацией.

В общем, книжка находится где-то посередине между учебником по численным методам и справочником “наиболее полезных алгоритмов” – для первого она получается слишком краткой, а для второго – слишком подробной. Немного спасают ситуацию списки литературы по каждой из тем – насколько я могу судить, вполне адекватные. Склоняюсь к тому, чтобы считать книгу довольно полезной – но с оговорками.

Комментарии отключены.