更简单、更高效、功能性更强的线性映射

A类上一个帖子描述了函数线性映射的数据类型。作为安迪·吉尔 指出,我们花了很多时间试图取得好成绩。本说明描述了一种新的表示法,即非常简单而且效率更高。回想起来,这很明显,但我花了很长时间才发现。

这里描述的Haskell模块是向量空间库(版本0.5或更高版本),并要求ghc版本6.10或更高(对于相关类型)。

编辑:

  • 2008-11-09:更改了有关版本的备注。矢量空间版本0.5取决于ghc 6.10。
  • 2008-10-21:修复了向量空间库引子中的链接。

继续阅读“更简单、更高效、功能性更强的线性地图”»

通过类型族的向量空间基

A类基础 B类向量空间的V(V)是一个子集B类属于V(V),以便B类线性无关且跨度V(V)也就是说V(V)是以下元素的线性组合B类,没有的元素B类是其他元素的线性组合B类此外,每个基都决定了V(V)到相对于的坐标B类.

本文给出了向量空间规范基的简单Haskell实现,以及将向量分解为坐标的方法。它使用[索引类型族](关联类型),尽管它很简单,但非常通用。

这里描述的Haskell模块是矢量空间库(0.4或更高版本)的一部分,该库在Hackage和darcs存储库中可用。请参阅wiki页面,接口文档、和源代码。下面描述的库版本(0.5或更高版本)依赖于ghc 6.10。

编辑:

  • 2008-11-09:修改了上面关于版本的评论。
  • 2008年2月9日:无所事事

继续阅读“通过类型族的向量空间基”»

功能线性图

两个早期的 帖子描述了导数这统一了传统微积分课程中所教的许多具体概念。所有这些变化都是一个抽象概念的具体表现线性地图.相应地,链规则中各种形式的多重复制都是作文线性地图。为了简单起见,我建议直接实现线性映射作为函数。不幸的是,这种直接表示妨碍了效率,因为函数与数据结构不同,默认情况下不缓存。

这篇文章展示了一个数据线性映射的表示方法,它主要利用了(a)线性和(b)最近添加的语言特性索引类型族(“相关类型”)。

有一段时间,我想知道线性映射库是否可以取代和推广矩阵库。毕竟,矩阵表示一类有限的线性映射。然而,与传统的矩阵库不同,本文中描述的线性映射库通过静态类型.下面定义的合成函数静态地强制执行矩阵乘法(实现线性映射合成)所需的一致性属性。同样,线性映射添加的一致性也被简单而静态地强制执行。此外,通过对Haskell编译器进行足够复杂的哄骗Don Stewart是,也许像这样的库也可以有出色的性能。(还没有。)

你可以在模块中阅读并尝试这篇文章的代码数据。线性贴图在版本0.2.0或更高版本中向量空间包裹。该模块还包含线性地图合成的实现,以及Functor(仿真器)-喜欢和适用-类似操作。安迪·吉尔一直在帮助我了解一些严重的性能问题,显然涉及大量冗余字典创建。

编辑:

  • 2008-06-04:相关数据类型声明的简要说明。

继续阅读“功能线性图”»