【发布时间】:2015-01-15 15:34:39
【问题描述】:
我正在尝试找到一个 C++ 库,它可以处理一些有限域 GF(2^n) 上的多项式,并支持矩阵表示,支持秩查找/逆,甚至解决 A=X*B。 我正在尝试使用 Linbox,但文档很少。 在对库的 Givaro 部分做了一些讨厌的事情后,我能够将整数转换为多项式表示,但我无法使用 Linbox 的排名/求解部分,因为它们似乎不处理多项式, 只有指数为 1 的素数基数 (GF(2))。
这是代码的一部分
LinBox::GivaroGfq GF28(2, 8);
typedef LinBox::BlasMatrix<LinBox::GivaroGfq> Matrix;
Matrix mat(GF28);
//...Resize to MxM and insert M^2 elements
unsigned long int r;
rank(r, mat);
在调试时,rank 函数总是将元素视为 GF(2) 之上的元素并返回不正确的值。
关于如何使用这个库的任何想法?有一个 GF(2^n) 的 MxM 元素的矩阵并将其求逆或求其秩或求解线性方程组?还是应该使用其他库?
【问题讨论】:
-
我快速浏览了 LinBox 文档。似乎库的 Givaro 部分旨在处理以素数为模或以素数为模的某个幂的字段,GF28 似乎是数学模 256 而不是 Galios 字段。对于一个由 8 位数字组成的 Galios 字段,需要指定该字段所基于的 9 位多项式,我在 LinBox 文档中没有看到这是指定的。
-
继续,LinBox 库似乎可用于 Reed Solomon 类型操作模块 929(素数),但不适用于有两层的 Galios 字段。第一层是 1 位数字模 2,在这种情况下,第二层是 8 位多项式模一些 9 位多项式。然后是使用 8 位多项式作为系数的多项式的第三层,但是这第三层不是域或环的一部分。
-
LinBox 库是否可以让您指定对数字的基本运算,例如加 (xor)、减 (xor)、乘(乘以 8 位多项式模 9 位多项式,使用 log表或 65k 查找表),然后划分(再次使用日志或查找表)?
-
进一步查看文档,似乎如果您为原型 uint8_t(8 位值)创建 archetype.h 的替换,然后您可以定义运算符函数。请注意,否定不应该做任何事情,因为对于伽罗瓦域, a+b == a-b 。
-
作为一个选项,我有一些 Reed Solomon 示例程序,其中包括可用于求解线性方程的矩阵求逆。如果有兴趣,我可以上传到我的网站下载,因为源代码有点太大,无法包含在回复中。
标签: c++ polynomials finite-field galois-field