使用多元多项式条目评估大行列式

计算科学 矩阵 多项式
2021-12-05 10:48:55

我有一些大的(n~100)方阵,其中有两个有界度数的可变多项式(大约<20,但许多条目更小)和整数系数,我希望能够计算它们的行列式(确切地说,如两个具有整数系数的可变多项式)。

我应该使用什么方法?是否已经有有效的软件实施?

在较小的问题实例中,我一直在使用Mathematica' 的内置Det函数并希望获得最好的结果,但我怀疑它只是使用两个可变有理函数进行行减少,这很快就会变得低效。

我也尝试过(感谢 Emily!)替换整数值,使用行缩减和(更快)任意精度有理算术计算行列式,然后是牛顿插值。可悲的是,我的实现似乎比Mathematica.

在这一点上,我对“正确的猜测”感到满意,如果我检查一些新值并始终得到正确的答案,我会很满意——如果证明答案确实正确的速度要慢得多,那没关系。

最后,如果这暗示了一个好技巧,我的问题实例的答案似乎有一些结构:决定因素,总度数的很大一部分来自几个低度多项式的高幂,然后是少数没有多重性的大因素。我什至可以预测一些小因素和(大约)它们的多样性。

3个回答

行列式的无除法算法是 Samuelson-Berkowitz 算法(参见德语维基百科)和 Leverrier-Faddeev 算法(参见德语维基百科)。后者需要除以整数。

Gauß 算法还有一个变体,即 Gauß-Bareiss 算法,它对分子进行记账,即,将其保持在因式分解并尽可能减少分数。Wikipedia 仅给出整数矩阵作为示例,但该方法通常适用于整数(欧几里得?)环,因此涵盖了整数上的多项式环。

开始计算大小为 100 的矩阵的行列式是一个代价高昂的问题,即使只有数字也是如此。我会说它仍然在可行的范围内,但它绝对处于可以方便地以稳定方式完成的极限。

如果您想对多项式使用符号计算,则成本会更高。当然,问题是即使你设法做到了,会发生什么:你会得到一个约 2,000 次的多项式,除非它具有非常特殊的结构,否则你会发现它不可能稳定地求值。

我的建议不是想知道它是如何完成的,而是你是否真的需要这样做,以及你想对结果做什么。正如我所说,无论你得到什么都将是相当不可靠的,你应该尝试为你想做的任何事情想出一种方法,根本不涉及计算这些矩阵的行列式。

我真的想出了一个好办法!

计算通过评估其中一个变量获得的行列式(称之为a) 在少数大素数处{pi}. 这些是另一个变量中的有理函数(称之为b)。为简单起见,假设它们实际上是不可约多项式fi(b)(但对于一般情况,这个方案有一个简单的变化)。

现在,常数项满足,并且使用中国剩余定理,我们可以将中的多项式,每个项都有一个歧义的系数暂时忽略这种歧义,减去,除以,然后继续直到完成。fi(0)=Det(pi,0)(modpi)Det(a,0)aipiDet(a,0)b

在这一点上,我们猜测行列式是一个二变量多项式。使用Schwartz-Zippel 引理,它只需要在两个变量的有理值处评估行列式,就可以有效地获得错误答案概率的任意良好界限。