IML是一个免费的C源代码库,用于实现算法用于计算稠密线性方程组的精确解整数。IML设计为与CBLAS库(例如,ATLAS/BLAS)和GMP bignum库一起编译。
IML是用便携C编写的,可以在32位和64位上使用机器。它可以从C++调用。
目前,IML提供以下功能:
- 非奇异有理系统求解:计算系统AX=B的唯一有理解X,其中A和B是整数矩阵,A是非奇异矩阵。
- 计算整数矩阵的右零空间或核。
- 认证线性系统求解:计算最小分母系统Ax=b的解x,其中b是整数向量,a是具有任意形状和秩轮廓的整数矩阵。
此外,IML为各种mod提供了一些低级例程p矩阵运算:计算row-echelon形式、行列式、秩和mod p矩阵的逆矩阵。这些mod p例程不是通用;他们要求p满足一些基于输入矩阵的维数(通常p应该是素数,并且应该长度不超过20位)。
[顶部]
2015-12-07当前版本为1.0.5。此版本包含新功能kernelLong(内核长)和内核MP进入库界面用于计算整数的右核基分别为长型和填充GMP大字符的矩阵。核心基础可以选择使用格基约简来约简返回的值。不同于功能nullspace长和nullspaceMP(零空间MP)哪一个只计算有理nullspace函数的基kernelLong(内核长)和内核MP产生一个整数右边所有整数向量的子格的基输入矩阵的核。
2014-07-30当前版本为1.0.4。该版本现在可以在Cygwin[64]下构建为动态库和MinGW[64]。
2008-07-28当前版本为1.0.3。此版本包含一个新功能nullspaceMP(零空间MP)进入之内库接口,用于计算整数的右有理零空间矩阵中充满了GMP大号。
2007-09-14当前版本为1.0.2。这个版本修正了几个错误。
2006-11-26当前版本为1.0.1。此版本更正了几个错误以及合并了一个新功能nullspace长到库接口中,该接口计算积分基础long型整数矩阵的右有理nullspace。
2004-09-24当前版本为0.1.0。此版本修改了p-adic提升算法的实现和30%到50%的增益在不减小解决方案大小的情况下加快函数的速度,例如无信号SolvMM。还获得了可观的加速从其他功能进行系统求解。例如,让A是一个2000 x 3000的整数矩阵,让b是一个2000 x 1整数向量。A和b中的条目从-7到随机选择7.如果不缩小解决方案大小,新版本将花费7分钟认证解决系统Ax=b,而旧版本花了10分钟。
2004年7月30日当前版本为0.0.0,即第一个版本。如果你找到了错误,请参考报告漏洞.
[顶部]
以下两个表列出了线性方程组的一些时序分别使用小条目和大条目。对于输入系统对于非平凡的零空间,格约简可以选择性地用于尝试在增加运行时间的同时减小解决方案的大小。输入矩阵的维数列在第一列中。所有的表中的平方输入系统是非奇异的。
测试环境:
CPU:Itanium2 1.3GHz,内存:50Gb,平台:GNU/Linux 2.4.21-sgi240rp0405180810074,编译器和链接器:icc 8.0,GMP 4.1.3,ATLAS 3.6.0
小条目:输入系统中的条目长度为1位十进制数字
尺寸 |
典型解决方案 |
规模缩减解决方案 |
n x m(n x m) |
#溶液的 十进制数字 |
时间 |
#溶液的 十进制数字 |
时间 |
|
<=10秒 |
<=20秒 |
1000 x 1000 |
1905 |
7秒 |
|
|
400 x 1000 |
1141 |
6秒 |
116 |
9秒 |
500 x 600 |
1354 |
9秒 |
137 |
15秒 |
500 x 1000 |
1445 |
9秒 |
146 |
16秒 |
|
<=30秒 |
<=50秒 |
1500 x 1500 |
2989 |
20秒 |
|
|
700 x 1500 |
2138 |
22秒 |
216 |
38秒 |
750 x 2000 |
2363 |
28秒 |
238 |
49秒 |
800 x 1000 |
2344 |
29秒 |
236 |
50秒 |
|
<=1分钟 |
<=1.5分钟 |
2000 x 2000 |
4110 |
42秒 |
|
|
900 x 1000 |
2628 |
40秒 |
264 |
70秒 |
950 x 2000像素 |
3024 |
50秒 |
304 |
85秒 |
1000 x 2000 |
3097 |
52秒 |
311 |
89秒 |
|
尺寸 |
典型解决方案 |
规模缩减解决方案 |
n x m(n x m) |
#的溶液 十进制数字 |
时间 |
#溶液的 十进制数字 |
时间 |
|
<=15分钟 |
<=20分钟 |
6000 x 6000 |
13761 |
15米 |
|
|
2000 x 4000 |
6980 |
7米 |
700 |
11米 |
2500 x 3000 |
8506 |
12米 |
852 |
18米 |
2500 x 5000 |
8965 |
13米 |
899 |
20米 |
|
<=30分钟 |
<=50分钟 |
7000 x 7000 |
16288 |
23米 |
|
|
3000 x 6000 |
10995 |
22米 |
1102 |
33米 |
3400 x 4000 |
11991 |
27米 |
1200 |
42米 |
3400 x 7000 |
12674 |
30米 |
1269 |
47米 |
|
>=1小时 |
>=2小时
|
10000 x 10000 |
24044 |
1小时 |
|
|
5000 x 10000 |
19434 |
1.7小时 |
1945 |
2.4小时 |
6000 x 8000 |
22967 |
2.6小时 |
2298 |
3.9小时 |
6000 x 10000 |
23451 |
3.3小时 |
2347 |
4.8小时 |
|
大条目:输入系统中的条目长度为100位十进制数字
尺寸 |
典型解决方案 |
规模缩减解决方案 |
n x m(n x m) |
#溶液的 十进制数字 |
时间 |
#溶液的 十进制数字 |
时间 |
|
<=10秒 |
<=1.5分钟 |
100 x 100 |
9990 |
5秒 |
|
|
30 x 60 |
3005 |
3秒 |
301 |
29秒 |
40 x 100 |
4013 |
6秒 |
402 |
53秒 |
50 x 200 |
5030 |
9秒 |
504 |
87秒 |
|
<=30秒 |
<=5分钟 |
200 x 200 |
20008 |
30秒 |
|
|
70 x 200 |
7045 |
18秒 |
705 |
3米 |
80 x 200 |
8053 |
24秒 |
806 |
4米 |
80 x 400 |
8067 |
28秒 |
808 |
4米 |
|
<=1分钟 |
<=10分钟
|
250 x 250 |
25021 |
44秒 |
|
|
90 x 100 |
8988 |
34秒 |
899 |
6米 |
100 x 200 |
10068 |
41秒 |
1008 |
7米 |
110 x 200 |
11076 |
50秒 |
1109 |
9米 |
|
尺寸 |
典型解决方案 |
规模缩减解决方案 |
n x m(n x m) |
#溶液的 十进制数字 |
时间 |
#溶液的 十进制数字 |
时间 |
|
<=15分钟 |
<=3.5小时
|
1000 x 1000 |
100386 |
13米 |
|
|
200 x 400 |
20196 |
4米 |
2021 |
43米 |
300 x 400 |
30345 |
9米 |
3036 |
2.1小时 |
350 x 500 |
35426 |
13米 |
3544 |
3.2小时 |
|
<=30分钟 |
<=9小时
|
1200 x 1200 |
120508 |
23米 |
|
|
400 x 800 |
40510 |
18米 |
4053 |
4.5小时 |
450 x 900像素 |
45596 |
23米 |
4561 |
6.3小时 |
500 x 600 |
50593 |
29米 |
5061 |
8.4小时 |
|
>=1小时 |
>=30小时
|
2000 x 2000 |
201071 |
1.3小时 |
|
|
800 x 2000 |
81308 |
1.5小时 |
8133 |
30.5小时 |
1000 x 1500 |
101575 |
2.7小时 |
|
|
1500 x 2000 |
152559 |
7.9小时 |
|
|
|
下表列出了计算倒数的时间模p矩阵的行列式。测试环境是
CPU:PentiumM 1.6GHz,内存:1Gb,平台:GNU/Linux 2.4.26-20040424-patch2.4.26,编译器和链接器:gcc 3.3.3,GMP:4.1.3,ATLAS 3.6.0。
非奇异模p矩阵的逆矩阵,其中p约为20位长
尺寸 |
300 |
500 |
1000 |
2000 |
3000 |
5000 |
8000 |
时间 |
0.08秒 |
0.29秒 |
2.03秒 |
14.73秒 |
48.35秒 |
3.61米 |
15.08米 |
模p矩阵的行列式,其中p约为20位长
尺寸 |
300 |
500 |
1000 |
2000 |
3000 |
5000 |
8000 |
时间 |
0.03秒 |
0.11秒 |
0.73秒 |
5.13秒 |
16.65秒 |
1.23米 |
5.31米 |
[顶部]
单击以下链接下载不同的源代码版本。
下载源代码后,使用命令解压缩文件
tar xjvf iml-1.0.5.目标.bz2
并通过以下方式编译和安装库遵循中的安装说明安装文件中的iml-1.0.5标准目录。
要安装此软件,您需要预先安装ATLAS库和GMP库。
编译在以下主机上进行测试:使用gcc 3.3的i686-pc-linux-gnu,使用gcc 3.2和icc 8.0的ia64-unknown-gun-linux,使用gcc3.2的sparc-sun-solaris2.6,以及使用gcc 3.3.的i686-pc-cygwin。
[顶部]
如果您发现任何错误或遇到安装问题,请发送电子邮件至阿恩·斯托约翰恩astorjoh@uwaterloo.ca.
[顶部]
Z.Chen和A.Storjohann,
基于BLAS的整数矩阵精确线性代数C库.符号与代数国际研讨会论文集《计算》(ISSAC’05),ACM出版社,2005年,第92-99页。
[顶部]
陈竹良,主要作者,滑铁卢大学David R.Cheriton计算机科学学院
阿恩·斯托约翰恩David R.Cheriton学校滑铁卢大学计算机科学专业
科里·弗莱彻,滑铁卢大学
[顶部]
项目有限字段线性代数子程序/包(FFLAS-FFPACK)提供套房有限域上的基本线性代数子程序。
[顶部]
|
|
上次更新日期:2014年7月30日
|