F#与数学 - 数字运算与F# PowerPack

31 篇文章 0 订阅
4 篇文章 0 订阅

这篇文章是此系列中的第一篇,在这个系列中,我将介绍F#中的一些特性,如对数字运算有帮助的特性以及一些来自F# PowerPack库的一些功能。大部分内容最初都是为位于MSDN上名为“F#中的数字运算”的章节(我之前发布的)所写的,但是后来,我们决定把重点放到使用第三方语言库的F#编程上,这些库提供了更多有效的实现以及更丰富的标准数字运算函数集合,通常在实现机器智能学习和概率算法或者进行统计分析时,这些函数集合会被应用到。如果你对这个话题感兴趣,那么本文的最后部分给出了MSDN中一篇重要文章的链接。

 

尽管如此 ,F# PowerPack仍然包含了一些有用的功能.它包含两种附加的数字类型以及一个与F#完美整合的矩阵实现.这个系列同时也演示了如何使用F#语言的一些特性写出优雅的数字运算代码.特别的,我们将使用以下的方面:

  • 运算符重载:任意类都可以提供一个标准数字运算符的重载版本,例如+ ,-,*/以及一些非标准的运算符(.*)。这样一来,用户自定义的语言库就可以创建自己的、与内置类型非常相似的数字类型,例如int型。
  • 数字原型F#数学库允许在代码中使用新的数字原型。例如,你可以用1N/3N来表示三分之一这样的一个BigRational类型的值。在F#语言中,在这个数值表示符中的后缀N并不是写死的,并且,我们将看看如何定义类似这样的数字类型。
  • 静态约束F#支持对类成员的静态约束(Static修饰),这可以使用在那些对任意数字类型适用的函数上。例如,List.sum函数就使用了这个功能。它可以为list所包含的数字成员求和。

在写数字代码时,上面提到的功能仅仅是所有有用的功能中的小部分,还有其他很多没提到的。常用的F#开发风格是使用交互工具,类型安全从而避免常见的错误,测试单元以及F#中的表达式使得F#成为编写数字代码的一个很好的工具。更多的信息,请参看MSDN上的文章用F#编写简洁地正确地数字计算代码

 

数字计算与F# PowerPack

如果你正在查找一些关于其他PowerPack组件的信息,那么,DanielMohl写过这样的一个系列文章——它覆盖了数字类型和模块(第一部分),异步扩展(第二部分),附加集合类(第三部分),以及词法,句法分析和SI单位(第四部分)。

 

在这个系列中,我们会看到F# PowerPack语言库中提供的大部分数字运算功能。下面的列表展示了即将发布的系列文章:

  • F#与数学(I.-PowerPack中的数字类型

PowerPack库提供了两种附加的数字类型。类型BigRational代表了任意的精确的实数,complex则代表了复数。这篇文章简单的描述了这两种类型。.Net2.0同时也提供了任意大小的整数(在.NET4.0中,位于System.Numerics.dll集合中)。

  • F#与数学(II.-图像算法中矩阵的使用

matrix类型可以用来存储浮点型数字。此类型支持很多常用的操作,如矩阵相乘,逐点相加以及一些其他运算。同样的,也有一个与此对应的范型,名为Matrix<’T>,当矩阵中包含intdecimal型数据时,我们可以用到此类。这篇文章展示了如何使用matrix类型来描述一个使用adjacency matrix的图像,并且展示如何计算它的可达图。

  • F#与数学(III.自定义的数字类型

这篇循序渐进的指南展示了如何定义一个数字类型,可以使用自定义的数字原型来实现以及能使用标准的操作符。这篇指南同样使用了F#PowerPack中的模块GlobalAssociations,从而允许在F# Matrix<’T>类型中使用自定义的类型作为元素。

  • F#与数学(IV.-编写范型代码(目前还不可用)

这篇文章讨论了写范型代码的两种方式,此范型代码用来处理任意一个数字类型(如float和复数)。这第一种方式基于F#“静态成员约束”,第二种则是基于F# PowerPack中的模板GlobalAssociations。在这篇文章中,我们会比较这两种方式,并讨论在什么情况下那种方式更合适。

F#中的数字计算(MSDN

如上述提到的一样,F# PowerPack只提供了矩阵的基本实现,它并不适用于那些高效的矩阵相乘任务。该库并没有实现任何更高级的运算操作,如矩阵分解,也不支持概率分布或统计分析。

 

如果你对编写高效的F#数字代码感兴趣,那么建议您使用第三方语言库(例如开源的Math.NET Numerics),这些第三方库提供了更高效的实现,以及更多的功能。MSDN上的一片名为Introductionto Numerical Computing in F#的文章提供了更多的信息,包括一些已经存在的语言库的预览。它同时也包括了用来演示以下三项的示例:

Math.NET Numerics旨在成为.NET框架下开源数学库的一个标准。它的发布是经过了MIT的许可,因此它可以被使用在商业或者非商业的项目中,也可以修改与重分布它。这篇指南给出了如何使用此库中各种组件的一些介绍。

Microsoft Sho是一个支持线性代数,优化与可视化的数字计算平台。这篇文章介绍了Sho以及展示了如何从F#中调用它的.NET库。

F# PowerPack为矢量与矩阵提供了相应的类,F# MathProvider在这些类上支持线性代数各种操作。这篇文章给出了这两个库的介绍。

引用&链接

  • 数字计算MSDN上的Real World     Functional Programming

 原文链接:http://tomasp.net/blog/powerpack-introduction.aspx

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值