gpt4 book ai didi

math - 用函数式语言进行科学数学?

转载 作者:行者123 更新时间:2023-12-03 10:22:36 25 4
gpt4 key购买 nike

有没有用函数式编程语言制作的严肃的科学数学库?从函数式语言的本质来看,人们会认为它们特别适合数学,但众所周知的算法似乎是程序性的。

例如,经典Numerical Recipes系列几乎是以程序方式编写的。 LAPACK在许多领域几乎是事实上的标准,但它是在 Fortran 中,因此是程序性的,也可能是面向对象的,但绝对不是功能性的。

有没有人能够将这些众所周知的程序算法转换为函数式算法?

更新 :似乎函数式语言被用于符号计算,例如在 Mathematica 中。但是,是否存在与数值计算和函数算法本质上不兼容的东西?或者只是因为命令式算法恰好是最先发明的,所以没有人费心想出功能等价物?

最佳答案

在 hackageDB 中有一个用于数字内容的 Haskell 库:hmatrix .它借鉴了 LAPACK、BLAS 和 GSL(GNU 科学图书馆)。

但是您应该记住,命令式算法可以很容易地使用 monad(更具体地说,状态转换器)转换为纯函数式语言。事实上,任何高效的就地实现通常都必须使用这种机制来在纯函数式语言中提供可变变量。

至于遵循函数式风格,在很多情况下是不可能的。对于许多问题,没有任何已知的(有效的)函数式方法。当然,你可以让这样的算法在 Haskell 中工作,但它们看起来与用 Matlab、Fortran 或 C 编写的没有太大区别。

编辑:

这既是明显的不兼容,也是首先出现的问题:

  • 高效的数值算法通常需要可变数据。虽然这在纯函数设置中是可能的,但它不像在命令式语言中那么简单。但是这两个计算模型是完全等价的。
  • 底层机器(例如指令集)一直是并且仍然是命令式的,很少有异常(exception)(!)。考虑到真实机器的建模方式,命令式编码算法更容易分析和优化。
  • 虽然底层数学允许相对容易地推导函数解决方案,但您不会得到有效的算法(就像直接从数学推导命令式解决方案的情况一样)。由于大多数努力已经并且仍然针对命令式解决方案,因此功能对应物是未知的。功能对应物是指正确表达功能意图和风格的代码。
  • 有相当多的命令式代码可以重用。大部分可以使用状态转换器转录成函数式语言,尽管它看起来仍然是必要的。

  • 我实际上认为像 Haskell 这样的纯函数式语言可能对编码算法有益:可以在同一块代码中统一数学描述、算法本身和某种面向类型的证明(即使用 Curry-Howard 同构) .

    关于math - 用函数式语言进行科学数学?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/966249/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com