使用ILNumerics在.Net执行计算
一.下载安装ILNumerics函数库
在http://ilnumerics.net/$Editions.html下载ILNumerics社区版压缩包,现在版本为v2.13,约27.3MB。解压缩后目录结构如图1所示。

图1 ILNumerics源码包解压内容
现在需要编译ILNumerics函数库,用VisualStudio打开工程文件ILNumerics.csproj,编译一遍,在生成目录下Debug/Release下就有生成的ILNumerics.dill库了,如图2所示。

图2 编译结果
下面要做的就是将ILNumerics函数库添加到你的工程中去了。
首先,在项目引用中添加对ILNumerics.dll的引用,并且将图1中bin32(如果你的计算机是64位则对应bin64)目录下的libiomp5md.dll,mkl_custom32.dll,OpenTK.dll文件以内容文件添加到工程根目录,如果是Linux平台,自然应该添加的是*.so文件,如图3所示 。

图3 将ILNumerics添加到工程
二.利用ILNumerics做个小例子
下面就利用ILNumerics简单求解线性方程组,该示例来自官方网页。要注意的是,先引用ILNumerics命名空间。另外主类Program继承了ILNumerics.ILMath类,以方便使用它的静态函数,但实际中可能不太会这么用。
图4 ILNumerics定义函数的的规则(图片链接:http://ilnumerics.net/img/NiceCodeExample_FreqPeaksOverview2.png)
A. ILNumerics中最常用的数组类型有ILArray<T>,ILCell和ILLogical,但是在函数定义参数列表中使用了专门的输入,输出和返回数组类型,如ILInArray<double>,ILOutArray<int>,ILRetArray<double>等。它们遵守统一的命名规则:IL[|In|Out|Ret][Array<T>|Cell|Logical]
再次强调的是,这些In|Out|Ret数组仅用于函数参数声明中。还有,C#中的ref,out关键字不再被使用。
B. 函数体的规则。函数体需要被这样的using块包裹:
图5 函数定义示例(图片网址:http://ilnumerics.net/img/NiceCodeExample_FreqPeaksHeadBody.png)
注意,图5中为frequencies数组赋值使用的语句,使用了.a Setter器不是用等号直接赋值。另外,using块中的check函数是对输入参数作检查,这里主要检查是否为null,而且check函数应该是唯一引用输入参数的地方。当然也可以使用check其他重载版本作更多检查,如:
ILArray<double> m = ILMath.rand(2,2);ILArray<double> i=Inverse(m);四. 使用手册参阅在线帮助文档http://ilnumerics.net/Support_Documentation$Arrays.html。