从其他一些信息中,例如:如何在 C 中处理大整数我知道 GMP 是一个使我能够处理大整数的包。
但是,我正在考虑 500×500 矩阵,其中每个元素的长度为 1000 位。有人可以让我知道 C 或 Python 中的哪个包可以让我计算矩阵逆吗?
从其他一些信息中,例如:如何在 C 中处理大整数我知道 GMP 是一个使我能够处理大整数的包。
但是,我正在考虑 500×500 矩阵,其中每个元素的长度为 1000 位。有人可以让我知道 C 或 Python 中的哪个包可以让我计算矩阵逆吗?
我不确定您是否尝试使用精度为 1000 位的浮点数来计算逆,或者您是否想使用分数。
对于前者,我会尝试mpmath和gmpy的组合。以下示例创建一个精度为 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。