-1

从其他一些信息中,例如:如何在 C 中处理大整数我知道 GMP 是一个使我能够处理大整数的包。

但是,我正在考虑 500×500 矩阵,其中每个元素的长度为 1000 位。有人可以让我知道 C 或 Python 中的哪个包可以让我计算矩阵逆吗?

4

2 回答 2

1

正如 casevh 指出的那样,这在很大程度上取决于您是想要一个近似答案还是一个精确答案。

可能适合计算这种大小的矩阵的精确逆的 C 库包括FLINTPARIIML。FLINT 需要很长时间来反转具有 1000 位条目的随机 n × n 整数矩阵:

n = 13:1.6 秒

n = 62:37 秒

n = 125:858 秒

所以 n = 500 大约需要 120 小时。

于 2013-01-14T08:02:30.030 回答
0

我不确定您是否尝试使用精度为 1000 位的浮点数来计算逆,或者您是否想使用分数。

对于前者,我会尝试mpmathgmpy的组合。以下示例创建一个精度为 100 位的随机 3x3 矩阵并计算逆矩阵。

>>> from mpmath import *
>>> mp.prec = 100
>>> a = randmatrix(3)
>>> a**-1
matrix(
[['-2.9551532644739824344170194538', '-2.30592481828272627130234272', '4.618043964228917637573009707'],
 ['12.025269724235234315848646394', '3.3570351961866008157001332066', '-10.59068013761452569858474265'],
 ['-6.672524995207041946321450867', '-0.57061969261482431665347164675', '5.508560423258977568243759022']])
>>> a * a**-1
matrix(
[['1.0', '-3.8920288101260775500720697474e-34', '5.467369412738327810686299975e-34'],
 ['-2.0267823641769153744296258652e-33', '1.0', '-1.4939276515262026082238333732e-33'],
 ['-2.1979577599335336964264104571e-33', '-6.0264087812469052430270713117e-34', '1.0']])
>>> 

注意:mpmath 0.17 仅适用于 gmpy。要使用 gmpy2(下一个主要版本),您需要使用 mpmath 的源存储库。

如果你想要一个精确的有理逆,你可以试试sympy。我会担心分数的大小会增加,并且会比浮点数倒数慢得多。sympy 在幕后使用 mpmath 和 gmpy。

于 2013-01-12T04:04:31.810 回答