¿Qué alternativas modernas existen a las recetas numéricas? [cerrado]

21

En el pasado, el libro de Recetas Numéricas se consideraba la referencia estándar de oro para algoritmos numéricos. La primera edición de Fortran fue seguida por ediciones en C y C ++ y otras, lo que la puso más actualizada. A través de estos, proporcionó un código de referencia para los algoritmos más modernos del día.

Las ediciones anteriores están disponibles en línea de forma gratuita hoy en día.

Desafortunadamente, creo que ahora es principalmente útil solo como un tomo histórico. Las prácticas de "ingeniería de software" me parecen anticuadas, y el contenido real no ha seguido el ritmo de la literatura.

¿Qué referencias igualmente completas pero accesibles debería considerar el programador moderno?

Stewart
fuente
77
Los algoritmos en sí mismos son muy buenos para la resolución de problemas de propósito general. Son sus implementaciones las que pueden dejar algo que desear. Pero eso está bien porque el código en el libro es lo suficientemente simple como para modificarlo a sus gustos. Las implementaciones en los capítulos son bastante "independientes" y libres de problemas. Las recetas numéricas siguen siendo una buena referencia para los momentos en que necesita implementar algunas cosas numéricas básicas pero no quiere / necesita una gran biblioteca o marco complejo o costoso.
Angelo
3
Tal como está, esta pregunta podría considerarse ofensiva, ciertamente no es muy constructiva. Hice uso de recetas numéricas a lo largo de mi carrera y lo recomendaría a cualquiera que necesite una referencia rápida de algoritmos para resolver problemas complejos. Nunca he usado el código directamente, pero siempre he implementado los algoritmos en mis propios idiomas usando mis propias interfaces preferidas. Los problemas que parece ver son superficiales y, por lo general, habrá mejores algoritmos si quiere mirar, pero incluso entonces NR es útil para orientarlo en la dirección correcta.
Mark Booth
55
Tengo que aceptar que el código C y C ++ proporcionado en los libros prueba una vez más que un buen programador de Fortran puede escribir un buen código de Fortran en cualquier idioma. Sin embargo, estos libros siguen siendo una gran referencia. Las explicaciones de los algoritmos son muy claras. El código se puede usar de fábrica, y si realmente ofende su sensibilidad, siempre puede reescribirlo usted mismo. Todavía sería mucho más fácil que implementarlo desde cero.
Dima
12
Recuerde que las restricciones de derechos de autor sobre el código en NR son bastante draconianas. Solo se le permite ingresar personalmente el código para hasta diez rutinas, y NO se le permite distribuir el programa resultante a ninguna otra persona o computadora. En casi cualquier entorno de trabajo, esto significa que tendrá que volver a implementar el algoritmo de todos modos, entonces, ¿cuál sería el beneficio de los autores que proporcionan una OO sofisticada o una implementación funcional? El servicio provisto por el libro es una explicación clara de algoritmos importantes, no la provisión de una biblioteca matemática sólida.
Charles E. Grant
3
¿A quién le importa cómo es el código? Envuélvelo bien y nunca lo mires.
David Heffernan

Respuestas:

7

En términos de recetas numéricas, necesitamos dos cosas: la comprensión de cómo los algoritmos se traducen en implementación de programación y, en segundo lugar, una implementación de referencia que reserva cosas.

Parece que NO hay combinación de software BOOK + Reference. Sin embargo, hay algunos buenos softwares de referencia y parte de esto proporciona referencias a documentos sobre la base de tales algoritmos.

Aquí hay una lista de algunas bibliotecas de referencia (en su mayoría de código abierto) que podrían ayudar:

  1. Biblioteca científica GNU
  2. LAPACK tiene un buen libro como manual de usuario También hay LAPACK ++ y otros paquetes derivados / relacionados (TNT) . Vea esto para más información.
  3. Algebra lineal de impulso
  4. Armadillo
  5. BLAS

Otras cosas específicas son

  1. Apofenia para modelos estadísticos
  2. Potro
  3. FFTW
  4. El paquete R - y un libro
  5. OpenCV
  6. Intel Math Kernel Library
  7. Para reconocimiento de patrones

También puede consultar " Análisis de datos con herramientas de código abierto ".

Aquí hay una gran lista de comparación, aunque no he verificado todo.
http://www.netlib.org/utk/people/JackDongarra/la-sw.html

Dipan Mehta
fuente
4

Recetas numéricas sigue siendo, en mi opinión, un libro útil. Describe los algoritmos realmente bien, incluida su derivación, las situaciones en las que son útiles y las alternativas a considerar cuando no lo son. He estado usando el libro por años.

Una cosa que nunca he usado es su código. Siempre escribo mi propia implementación basada en los algoritmos que describen. A ese respecto, la calidad de su código no importa (y de hecho es cuestionable: en el libro C de la segunda edición, definen una colección de funciones y macros para hacer que las matrices sean indexadas por unidad porque los autores provienen de un fondo de Fortran). Como ejemplo: una vez tuve que implementar FFT en Objective-C, así que usé NR en Fortran para comprender qué hizo FFT y cómo debería verse el código.

Piense en NR de la misma manera que piensa en Knuth: nunca pegaría el código de ese libro en su proyecto.


fuente
3

Personalmente me gusta, se trata del nivel que puedo entender

El código es Fortran traducido a 'C', pero está bien, ¡puede traducirlo nuevamente a Fortran y luego a C ++ usted mismo! Las versiones de Fortran o C tienen ventajas porque el código es bastante autónomo, no tiene que arrastrar un montón de clases de C ++ para hacer matrices, complejos, etc., especialmente dada la calidad de su codificación.

Hay una objeción justificable a las absurdas reclamaciones de derechos de autor de los autores y conozco a varios profesores que prohíben NR en sus clases. Entre los expertos numéricos, los libros también tienen la reputación de "suficiente información para meterte en problemas". Pero su única sugerencia es generalmente usar su código personal o comprar NAG.

Una colección sugerida de bibliotecas numéricas alternativas de alta calidad está en http://www.netlib.org/

Martin Beckett
fuente