存在哪些替代数字食谱的现代方法?[关闭]


21

过去,《数字食谱》一书被认为是数值算法的黄金标准参考书。最早的Fortran版本紧随其后的是C,C ++和其他版本,从而使它更新了。通过这些,它为当今的最新算法提供了参考代码。

较早的版本现在可以在线免费获得

不幸的是,我认为它现在仅作为一个历史性的书集才最有用。在我看来,“软件工程”实践已经过时了,实际内容并没有与文献同步。

现代程序员应该看什么类似的全面而平易近人的参考书呢?


7
这些算法本身对于解决通用问题非常有用。它们的实现可能会让您感到有些不足。但这没关系,因为本书中的代码很简单,可以根据您的喜好进行修改。本章中的实现是相当“独立的”并且没有多余的内容。当您需要实现一些基本的数字内容但又不想/不需要一个庞大的复杂或昂贵的库或框架时,数字配方仍然是一个很好的参考。
Angelo

3
从目前的情况来看,这个问题可以被认为是令人反感的,肯定不是很有建设性的。在我的整个职业生涯中,我都使用过数字食谱,强烈建议将其推荐给需要即时参考以解决复杂问题的算法的人。我从未直接使用过代码,但是我总是使用自己的首选接口以自己的语言实现算法。您似乎看到的问题是肤浅的,并且如果您愿意看的话,通常会有更好的算法,但是即使如此,NR也可以为您指明正确的方向。
Mark Booth,

5
我必须同意,书中提供的C和C ++代码再次证明了优秀的Fortran程序员可以用任何语言编写出色的Fortran代码。但是,这些书仍然是很好的参考。算法的解释非常清楚。该代码开箱即用,如果确实冒犯了您的敏感性,您可以随时自己重写。这比从头开始实施它要容易得多。
Dima

12
请记住,NR中代码的版权限制非常严格。仅允许您亲自输入最多十个例程的代码,并且不允许将结果程序分发给任何其他人或计算机。在几乎任何工作环境中,这都意味着您无论如何都必须重新实现算法,那么作者提供复杂的OO或功能实现有什么好处?本书提供的服务是对重要算法的清晰说明,而不是提供强大的数学库。
查尔斯·格兰特

3
谁在乎代码是什么样的?很好地包装好它,不要看它。
David Heffernan

Answers:


7

在数字食谱方面,我们需要两件事-了解算法如何转化为编程实现,其次是预订事物的参考实现。

似乎没有 BOOK +参考软件的组合。但是,有一些很好的参考软件,其中一些基于这种算法为论文提供了参考。

这是一些可能有用的参考库(主要是开源)的列表:

  1. GNU科学图书馆
  2. LAPACK它有一个很好的作为一个用户手册 也有LAPACK ++其他(TNT)导出/相关的包。请参阅以获取更多信息。
  3. Boost线性代数
  4. 犰狳
  5. BLAS

其他具体的事情是

  1. 统计模型的阿波芬症
  2. 小马
  3. 快速傅立叶变换
  4. R包 -和一本书
  5. OpenCV的
  6. 英特尔数学内核库
  7. 用于模式识别

您也可以签出“ 使用开源工具进行数据分析 ”。

尽管我尚未验证所有内容,但这里有大量的比较表。
http://www.netlib.org/utk/people/JackDongarra/la-sw.html


4

国际海事组织,《数字食谱》仍然是一本有用的书。它确实很好地描述了算法,包括它们的推导,它们有用的情况以及不有用时要考虑的替代方案。我已经使用这本书多年了。

从未使用过的一件事是他们的代码。我总是根据它们描述的算法编写自己的实现。在这方面,代码的质量无关紧要(这确实值得怀疑:在第二版C书中,由于作者来自Fortran,因此他们定义了函数和宏的集合以使数组成为单位索引的)。举例来说:我曾经不得不在Objective-C中实现FFT,因此我在Fortran中使用NR来了解FFT的功能以及代码的外观。

对NR的思考方式与对Knuth的思考方式相同:您永远不会将那本书中的代码粘贴到您的项目中。


3

我个人喜欢,这是我能理解的水平

代码已被Fortran转换为“ C”,但是没关系,您可以将其转换回Fortran,然后再转换为C ++!Fortran或C版本的优点在于代码几乎是自包含的,您不必拖入一堆C ++类来做矩阵,复杂等-特别是考虑到其编码质量!

作者对可笑的版权主张有正当的异议,而且我知道许多讲师在课堂上禁止使用NR。在数字专家中,这些书也以“足以使您陷入困境的信息”而闻名。但是他们唯一的建议通常是使用他们的个人代码或购买NAG。

http://www.netlib.org/上建议的其他高质量数字库的集合

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.